From 69dc237fe2187c5d2c1693ad53143d36b7af12b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Andr=C3=A9=20Dinis?= Date: Wed, 21 Dec 2022 13:34:36 +0000 Subject: [PATCH] DatabaseService resource: client and server CRUD (#19469) * DatabaseService resource: client and server CRUD In the context of Teleport Discover, we must be able to known if there's any DatabaseService available to proxy a given Database resource. If there's none available, we will offer a script for the user to run and install a DatabaseService which proxies the desired Database resource. By DatabaseService, we mean the process that Teleport binary manages when the `teleport.yaml` config has the following section: ```yaml db_service: enabled: "yes" ``` To accomplish this we are creating a new resource: DatabaseService. The UI will fetch all DatabaseServices and check if there's any ResourceMatcher that matches the DatabaseLabels. A previous PR created the DatabaseService resource. This PR creates all the necessary CRUD operations: - Add Service to manage DatabaseServices resources in the backend. - Add GetAll, Upsert, Delete and DeleteAll operations to Client. - Add DatabaseService support to ListResources. - Add WebAPI endpoint to list DatabaseServices using ListResources. The next PR will add the heartbeat mechanism to the DatabaseService process. --- api/client/client.go | 28 + api/client/proto/authservice.pb.go | 1942 ++++++++--------- .../legacy/client/proto/authservice.proto | 9 +- api/types/resource.go | 13 + lib/auth/api.go | 3 + lib/auth/auth.go | 5 + lib/auth/auth_with_roles.go | 26 +- lib/auth/auth_with_roles_test.go | 142 ++ lib/auth/clt.go | 1 + lib/auth/grpcserver.go | 38 +- lib/auth/grpcserver_test.go | 127 ++ lib/auth/init.go | 3 + lib/services/databaseservice.go | 93 + lib/services/databaseservice_test.go | 80 + lib/services/local/databaseservice.go | 61 + lib/services/local/databaseservice_test.go | 94 + lib/services/local/presence.go | 45 + lib/services/matchers.go | 2 +- lib/services/presence.go | 3 + lib/services/role.go | 10 +- lib/services/services.go | 1 + lib/srv/heartbeat_test.go | 3 + lib/web/apiserver.go | 3 + lib/web/databases_test.go | 70 + lib/web/servers.go | 24 + lib/web/ui/server.go | 27 + 26 files changed, 1786 insertions(+), 1067 deletions(-) create mode 100644 lib/services/databaseservice.go create mode 100644 lib/services/databaseservice_test.go create mode 100644 lib/services/local/databaseservice.go create mode 100644 lib/services/local/databaseservice_test.go diff --git a/api/client/client.go b/api/client/client.go index 97d693aa4c7..5c62250afa6 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -2470,6 +2470,32 @@ func (c *Client) DeleteAllDatabases(ctx context.Context) error { return trail.FromGRPC(err) } +// UpsertDatabaseService creates or updates existing DatabaseService resource. +func (c *Client) UpsertDatabaseService(ctx context.Context, service types.DatabaseService) (*types.KeepAlive, error) { + serviceV1, ok := service.(*types.DatabaseServiceV1) + if !ok { + return nil, trace.BadParameter("unsupported DatabaseService type %T", serviceV1) + } + keepAlive, err := c.grpc.UpsertDatabaseService(ctx, &proto.UpsertDatabaseServiceRequest{ + Service: serviceV1, + }, c.callOpts...) + + return keepAlive, trail.FromGRPC(err) +} + +// DeleteDatabaseService deletes a specific DatabaseService resource. +func (c *Client) DeleteDatabaseService(ctx context.Context, name string) error { + _, err := c.grpc.DeleteDatabaseService(ctx, &types.ResourceRequest{Name: name}, c.callOpts...) + return trail.FromGRPC(err) +} + +// DeleteAllDatabaseServices deletes all DatabaseService resources. +// If an error occurs, a partial delete may happen. +func (c *Client) DeleteAllDatabaseServices(ctx context.Context) error { + _, err := c.grpc.DeleteAllDatabaseServices(ctx, &proto.DeleteAllDatabaseServicesRequest{}, c.callOpts...) + return trail.FromGRPC(err) +} + // GetWindowsDesktopServices returns all registered windows desktop services. func (c *Client) GetWindowsDesktopServices(ctx context.Context) ([]types.WindowsDesktopService, error) { resp, err := c.grpc.GetWindowsDesktopServices(ctx, &emptypb.Empty{}, c.callOpts...) @@ -2696,6 +2722,8 @@ func (c *Client) ListResources(ctx context.Context, req proto.ListResourcesReque switch req.ResourceType { case types.KindDatabaseServer: resources[i] = respResource.GetDatabaseServer() + case types.KindDatabaseService: + resources[i] = respResource.GetDatabaseService() case types.KindAppServer: resources[i] = respResource.GetAppServer() case types.KindNode: diff --git a/api/client/proto/authservice.pb.go b/api/client/proto/authservice.pb.go index c4801738b07..e90e115745a 100644 --- a/api/client/proto/authservice.pb.go +++ b/api/client/proto/authservice.pb.go @@ -241,7 +241,7 @@ func (x DatabaseCertRequest_Requester) String() string { } func (DatabaseCertRequest_Requester) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{72, 0} + return fileDescriptor_0ffcffcda38ae159, []int{71, 0} } // Extensions are the extensions to add to the certificate. @@ -269,7 +269,7 @@ func (x DatabaseCertRequest_Extensions) String() string { } func (DatabaseCertRequest_Extensions) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{72, 1} + return fileDescriptor_0ffcffcda38ae159, []int{71, 1} } // Event returns cluster event @@ -4873,46 +4873,6 @@ func (m *DeleteAllDatabaseServersRequest) GetNamespace() string { return "" } -// GetAllDatabaseServicesRequest is a request to fetch all DatabaseServices. -type GetAllDatabaseServicesRequest struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetAllDatabaseServicesRequest) Reset() { *m = GetAllDatabaseServicesRequest{} } -func (m *GetAllDatabaseServicesRequest) String() string { return proto.CompactTextString(m) } -func (*GetAllDatabaseServicesRequest) ProtoMessage() {} -func (*GetAllDatabaseServicesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{66} -} -func (m *GetAllDatabaseServicesRequest) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GetAllDatabaseServicesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GetAllDatabaseServicesRequest.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 *GetAllDatabaseServicesRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetAllDatabaseServicesRequest.Merge(m, src) -} -func (m *GetAllDatabaseServicesRequest) XXX_Size() int { - return m.Size() -} -func (m *GetAllDatabaseServicesRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetAllDatabaseServicesRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GetAllDatabaseServicesRequest proto.InternalMessageInfo - // DatabaseServiceV1List represents a list of DatabaseService resources. type DatabaseServiceV1List struct { // Services is a list of DatabaseService resources. @@ -4926,7 +4886,7 @@ func (m *DatabaseServiceV1List) Reset() { *m = DatabaseServiceV1List{} } func (m *DatabaseServiceV1List) String() string { return proto.CompactTextString(m) } func (*DatabaseServiceV1List) ProtoMessage() {} func (*DatabaseServiceV1List) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{67} + return fileDescriptor_0ffcffcda38ae159, []int{66} } func (m *DatabaseServiceV1List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4975,7 +4935,7 @@ func (m *UpsertDatabaseServiceRequest) Reset() { *m = UpsertDatabaseServ func (m *UpsertDatabaseServiceRequest) String() string { return proto.CompactTextString(m) } func (*UpsertDatabaseServiceRequest) ProtoMessage() {} func (*UpsertDatabaseServiceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{68} + return fileDescriptor_0ffcffcda38ae159, []int{67} } func (m *UpsertDatabaseServiceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5022,7 +4982,7 @@ func (m *DeleteAllDatabaseServicesRequest) Reset() { *m = DeleteAllDatab func (m *DeleteAllDatabaseServicesRequest) String() string { return proto.CompactTextString(m) } func (*DeleteAllDatabaseServicesRequest) ProtoMessage() {} func (*DeleteAllDatabaseServicesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{69} + return fileDescriptor_0ffcffcda38ae159, []int{68} } func (m *DeleteAllDatabaseServicesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5072,7 +5032,7 @@ func (m *DatabaseCSRRequest) Reset() { *m = DatabaseCSRRequest{} } func (m *DatabaseCSRRequest) String() string { return proto.CompactTextString(m) } func (*DatabaseCSRRequest) ProtoMessage() {} func (*DatabaseCSRRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{70} + return fileDescriptor_0ffcffcda38ae159, []int{69} } func (m *DatabaseCSRRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5137,7 +5097,7 @@ func (m *DatabaseCSRResponse) Reset() { *m = DatabaseCSRResponse{} } func (m *DatabaseCSRResponse) String() string { return proto.CompactTextString(m) } func (*DatabaseCSRResponse) ProtoMessage() {} func (*DatabaseCSRResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{71} + return fileDescriptor_0ffcffcda38ae159, []int{70} } func (m *DatabaseCSRResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5207,7 +5167,7 @@ func (m *DatabaseCertRequest) Reset() { *m = DatabaseCertRequest{} } func (m *DatabaseCertRequest) String() string { return proto.CompactTextString(m) } func (*DatabaseCertRequest) ProtoMessage() {} func (*DatabaseCertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{72} + return fileDescriptor_0ffcffcda38ae159, []int{71} } func (m *DatabaseCertRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5301,7 +5261,7 @@ func (m *DatabaseCertResponse) Reset() { *m = DatabaseCertResponse{} } func (m *DatabaseCertResponse) String() string { return proto.CompactTextString(m) } func (*DatabaseCertResponse) ProtoMessage() {} func (*DatabaseCertResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{73} + return fileDescriptor_0ffcffcda38ae159, []int{72} } func (m *DatabaseCertResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5357,7 +5317,7 @@ func (m *SnowflakeJWTRequest) Reset() { *m = SnowflakeJWTRequest{} } func (m *SnowflakeJWTRequest) String() string { return proto.CompactTextString(m) } func (*SnowflakeJWTRequest) ProtoMessage() {} func (*SnowflakeJWTRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{74} + return fileDescriptor_0ffcffcda38ae159, []int{73} } func (m *SnowflakeJWTRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5412,7 +5372,7 @@ func (m *SnowflakeJWTResponse) Reset() { *m = SnowflakeJWTResponse{} } func (m *SnowflakeJWTResponse) String() string { return proto.CompactTextString(m) } func (*SnowflakeJWTResponse) ProtoMessage() {} func (*SnowflakeJWTResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{75} + return fileDescriptor_0ffcffcda38ae159, []int{74} } func (m *SnowflakeJWTResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5461,7 +5421,7 @@ func (m *GetRoleRequest) Reset() { *m = GetRoleRequest{} } func (m *GetRoleRequest) String() string { return proto.CompactTextString(m) } func (*GetRoleRequest) ProtoMessage() {} func (*GetRoleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{76} + return fileDescriptor_0ffcffcda38ae159, []int{75} } func (m *GetRoleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5510,7 +5470,7 @@ func (m *GetRolesResponse) Reset() { *m = GetRolesResponse{} } func (m *GetRolesResponse) String() string { return proto.CompactTextString(m) } func (*GetRolesResponse) ProtoMessage() {} func (*GetRolesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{77} + return fileDescriptor_0ffcffcda38ae159, []int{76} } func (m *GetRolesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5559,7 +5519,7 @@ func (m *DeleteRoleRequest) Reset() { *m = DeleteRoleRequest{} } func (m *DeleteRoleRequest) String() string { return proto.CompactTextString(m) } func (*DeleteRoleRequest) ProtoMessage() {} func (*DeleteRoleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{78} + return fileDescriptor_0ffcffcda38ae159, []int{77} } func (m *DeleteRoleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5617,7 +5577,7 @@ func (m *MFAAuthenticateChallenge) Reset() { *m = MFAAuthenticateChallen func (m *MFAAuthenticateChallenge) String() string { return proto.CompactTextString(m) } func (*MFAAuthenticateChallenge) ProtoMessage() {} func (*MFAAuthenticateChallenge) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{79} + return fileDescriptor_0ffcffcda38ae159, []int{78} } func (m *MFAAuthenticateChallenge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5676,7 +5636,7 @@ func (m *MFAAuthenticateResponse) Reset() { *m = MFAAuthenticateResponse func (m *MFAAuthenticateResponse) String() string { return proto.CompactTextString(m) } func (*MFAAuthenticateResponse) ProtoMessage() {} func (*MFAAuthenticateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{80} + return fileDescriptor_0ffcffcda38ae159, []int{79} } func (m *MFAAuthenticateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5761,7 +5721,7 @@ func (m *TOTPChallenge) Reset() { *m = TOTPChallenge{} } func (m *TOTPChallenge) String() string { return proto.CompactTextString(m) } func (*TOTPChallenge) ProtoMessage() {} func (*TOTPChallenge) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{81} + return fileDescriptor_0ffcffcda38ae159, []int{80} } func (m *TOTPChallenge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5802,7 +5762,7 @@ func (m *TOTPResponse) Reset() { *m = TOTPResponse{} } func (m *TOTPResponse) String() string { return proto.CompactTextString(m) } func (*TOTPResponse) ProtoMessage() {} func (*TOTPResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{82} + return fileDescriptor_0ffcffcda38ae159, []int{81} } func (m *TOTPResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5855,7 +5815,7 @@ func (m *MFARegisterChallenge) Reset() { *m = MFARegisterChallenge{} } func (m *MFARegisterChallenge) String() string { return proto.CompactTextString(m) } func (*MFARegisterChallenge) ProtoMessage() {} func (*MFARegisterChallenge) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{83} + return fileDescriptor_0ffcffcda38ae159, []int{82} } func (m *MFARegisterChallenge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5944,7 +5904,7 @@ func (m *MFARegisterResponse) Reset() { *m = MFARegisterResponse{} } func (m *MFARegisterResponse) String() string { return proto.CompactTextString(m) } func (*MFARegisterResponse) ProtoMessage() {} func (*MFARegisterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{84} + return fileDescriptor_0ffcffcda38ae159, []int{83} } func (m *MFARegisterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6044,7 +6004,7 @@ func (m *TOTPRegisterChallenge) Reset() { *m = TOTPRegisterChallenge{} } func (m *TOTPRegisterChallenge) String() string { return proto.CompactTextString(m) } func (*TOTPRegisterChallenge) ProtoMessage() {} func (*TOTPRegisterChallenge) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{85} + return fileDescriptor_0ffcffcda38ae159, []int{84} } func (m *TOTPRegisterChallenge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6134,7 +6094,7 @@ func (m *TOTPRegisterResponse) Reset() { *m = TOTPRegisterResponse{} } func (m *TOTPRegisterResponse) String() string { return proto.CompactTextString(m) } func (*TOTPRegisterResponse) ProtoMessage() {} func (*TOTPRegisterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{86} + return fileDescriptor_0ffcffcda38ae159, []int{85} } func (m *TOTPRegisterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6186,7 +6146,7 @@ func (m *AddMFADeviceRequest) Reset() { *m = AddMFADeviceRequest{} } func (m *AddMFADeviceRequest) String() string { return proto.CompactTextString(m) } func (*AddMFADeviceRequest) ProtoMessage() {} func (*AddMFADeviceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{87} + return fileDescriptor_0ffcffcda38ae159, []int{86} } func (m *AddMFADeviceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6289,7 +6249,7 @@ func (m *AddMFADeviceResponse) Reset() { *m = AddMFADeviceResponse{} } func (m *AddMFADeviceResponse) String() string { return proto.CompactTextString(m) } func (*AddMFADeviceResponse) ProtoMessage() {} func (*AddMFADeviceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{88} + return fileDescriptor_0ffcffcda38ae159, []int{87} } func (m *AddMFADeviceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6391,7 +6351,7 @@ func (m *AddMFADeviceRequestInit) Reset() { *m = AddMFADeviceRequestInit func (m *AddMFADeviceRequestInit) String() string { return proto.CompactTextString(m) } func (*AddMFADeviceRequestInit) ProtoMessage() {} func (*AddMFADeviceRequestInit) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{89} + return fileDescriptor_0ffcffcda38ae159, []int{88} } func (m *AddMFADeviceRequestInit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6453,7 +6413,7 @@ func (m *AddMFADeviceResponseAck) Reset() { *m = AddMFADeviceResponseAck func (m *AddMFADeviceResponseAck) String() string { return proto.CompactTextString(m) } func (*AddMFADeviceResponseAck) ProtoMessage() {} func (*AddMFADeviceResponseAck) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{90} + return fileDescriptor_0ffcffcda38ae159, []int{89} } func (m *AddMFADeviceResponseAck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6505,7 +6465,7 @@ func (m *DeleteMFADeviceRequest) Reset() { *m = DeleteMFADeviceRequest{} func (m *DeleteMFADeviceRequest) String() string { return proto.CompactTextString(m) } func (*DeleteMFADeviceRequest) ProtoMessage() {} func (*DeleteMFADeviceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{91} + return fileDescriptor_0ffcffcda38ae159, []int{90} } func (m *DeleteMFADeviceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6593,7 +6553,7 @@ func (m *DeleteMFADeviceResponse) Reset() { *m = DeleteMFADeviceResponse func (m *DeleteMFADeviceResponse) String() string { return proto.CompactTextString(m) } func (*DeleteMFADeviceResponse) ProtoMessage() {} func (*DeleteMFADeviceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{92} + return fileDescriptor_0ffcffcda38ae159, []int{91} } func (m *DeleteMFADeviceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6680,7 +6640,7 @@ func (m *DeleteMFADeviceRequestInit) Reset() { *m = DeleteMFADeviceReque func (m *DeleteMFADeviceRequestInit) String() string { return proto.CompactTextString(m) } func (*DeleteMFADeviceRequestInit) ProtoMessage() {} func (*DeleteMFADeviceRequestInit) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{93} + return fileDescriptor_0ffcffcda38ae159, []int{92} } func (m *DeleteMFADeviceRequestInit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6728,7 +6688,7 @@ func (m *DeleteMFADeviceResponseAck) Reset() { *m = DeleteMFADeviceRespo func (m *DeleteMFADeviceResponseAck) String() string { return proto.CompactTextString(m) } func (*DeleteMFADeviceResponseAck) ProtoMessage() {} func (*DeleteMFADeviceResponseAck) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{94} + return fileDescriptor_0ffcffcda38ae159, []int{93} } func (m *DeleteMFADeviceResponseAck) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6782,7 +6742,7 @@ func (m *DeleteMFADeviceSyncRequest) Reset() { *m = DeleteMFADeviceSyncR func (m *DeleteMFADeviceSyncRequest) String() string { return proto.CompactTextString(m) } func (*DeleteMFADeviceSyncRequest) ProtoMessage() {} func (*DeleteMFADeviceSyncRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{95} + return fileDescriptor_0ffcffcda38ae159, []int{94} } func (m *DeleteMFADeviceSyncRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6847,7 +6807,7 @@ func (m *AddMFADeviceSyncRequest) Reset() { *m = AddMFADeviceSyncRequest func (m *AddMFADeviceSyncRequest) String() string { return proto.CompactTextString(m) } func (*AddMFADeviceSyncRequest) ProtoMessage() {} func (*AddMFADeviceSyncRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{96} + return fileDescriptor_0ffcffcda38ae159, []int{95} } func (m *AddMFADeviceSyncRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6916,7 +6876,7 @@ func (m *AddMFADeviceSyncResponse) Reset() { *m = AddMFADeviceSyncRespon func (m *AddMFADeviceSyncResponse) String() string { return proto.CompactTextString(m) } func (*AddMFADeviceSyncResponse) ProtoMessage() {} func (*AddMFADeviceSyncResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{97} + return fileDescriptor_0ffcffcda38ae159, []int{96} } func (m *AddMFADeviceSyncResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6971,7 +6931,7 @@ func (m *GetMFADevicesRequest) Reset() { *m = GetMFADevicesRequest{} } func (m *GetMFADevicesRequest) String() string { return proto.CompactTextString(m) } func (*GetMFADevicesRequest) ProtoMessage() {} func (*GetMFADevicesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{98} + return fileDescriptor_0ffcffcda38ae159, []int{97} } func (m *GetMFADevicesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7019,7 +6979,7 @@ func (m *GetMFADevicesResponse) Reset() { *m = GetMFADevicesResponse{} } func (m *GetMFADevicesResponse) String() string { return proto.CompactTextString(m) } func (*GetMFADevicesResponse) ProtoMessage() {} func (*GetMFADevicesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{99} + return fileDescriptor_0ffcffcda38ae159, []int{98} } func (m *GetMFADevicesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7070,7 +7030,7 @@ func (m *UserSingleUseCertsRequest) Reset() { *m = UserSingleUseCertsReq func (m *UserSingleUseCertsRequest) String() string { return proto.CompactTextString(m) } func (*UserSingleUseCertsRequest) ProtoMessage() {} func (*UserSingleUseCertsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{100} + return fileDescriptor_0ffcffcda38ae159, []int{99} } func (m *UserSingleUseCertsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7159,7 +7119,7 @@ func (m *UserSingleUseCertsResponse) Reset() { *m = UserSingleUseCertsRe func (m *UserSingleUseCertsResponse) String() string { return proto.CompactTextString(m) } func (*UserSingleUseCertsResponse) ProtoMessage() {} func (*UserSingleUseCertsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{101} + return fileDescriptor_0ffcffcda38ae159, []int{100} } func (m *UserSingleUseCertsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7251,7 +7211,7 @@ func (m *IsMFARequiredRequest) Reset() { *m = IsMFARequiredRequest{} } func (m *IsMFARequiredRequest) String() string { return proto.CompactTextString(m) } func (*IsMFARequiredRequest) ProtoMessage() {} func (*IsMFARequiredRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{102} + return fileDescriptor_0ffcffcda38ae159, []int{101} } func (m *IsMFARequiredRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7365,7 +7325,7 @@ func (m *StreamSessionEventsRequest) Reset() { *m = StreamSessionEventsR func (m *StreamSessionEventsRequest) String() string { return proto.CompactTextString(m) } func (*StreamSessionEventsRequest) ProtoMessage() {} func (*StreamSessionEventsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{103} + return fileDescriptor_0ffcffcda38ae159, []int{102} } func (m *StreamSessionEventsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7423,7 +7383,7 @@ func (m *NodeLogin) Reset() { *m = NodeLogin{} } func (m *NodeLogin) String() string { return proto.CompactTextString(m) } func (*NodeLogin) ProtoMessage() {} func (*NodeLogin) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{104} + return fileDescriptor_0ffcffcda38ae159, []int{103} } func (m *NodeLogin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7478,7 +7438,7 @@ func (m *IsMFARequiredResponse) Reset() { *m = IsMFARequiredResponse{} } func (m *IsMFARequiredResponse) String() string { return proto.CompactTextString(m) } func (*IsMFARequiredResponse) ProtoMessage() {} func (*IsMFARequiredResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{105} + return fileDescriptor_0ffcffcda38ae159, []int{104} } func (m *IsMFARequiredResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7529,7 +7489,7 @@ func (m *SingleUseUserCert) Reset() { *m = SingleUseUserCert{} } func (m *SingleUseUserCert) String() string { return proto.CompactTextString(m) } func (*SingleUseUserCert) ProtoMessage() {} func (*SingleUseUserCert) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{106} + return fileDescriptor_0ffcffcda38ae159, []int{105} } func (m *SingleUseUserCert) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7630,7 +7590,7 @@ func (m *GetEventsRequest) Reset() { *m = GetEventsRequest{} } func (m *GetEventsRequest) String() string { return proto.CompactTextString(m) } func (*GetEventsRequest) ProtoMessage() {} func (*GetEventsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{107} + return fileDescriptor_0ffcffcda38ae159, []int{106} } func (m *GetEventsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7731,7 +7691,7 @@ func (m *GetSessionEventsRequest) Reset() { *m = GetSessionEventsRequest func (m *GetSessionEventsRequest) String() string { return proto.CompactTextString(m) } func (*GetSessionEventsRequest) ProtoMessage() {} func (*GetSessionEventsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{108} + return fileDescriptor_0ffcffcda38ae159, []int{107} } func (m *GetSessionEventsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7811,7 +7771,7 @@ func (m *Events) Reset() { *m = Events{} } func (m *Events) String() string { return proto.CompactTextString(m) } func (*Events) ProtoMessage() {} func (*Events) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{109} + return fileDescriptor_0ffcffcda38ae159, []int{108} } func (m *Events) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7869,7 +7829,7 @@ func (m *GetLocksRequest) Reset() { *m = GetLocksRequest{} } func (m *GetLocksRequest) String() string { return proto.CompactTextString(m) } func (*GetLocksRequest) ProtoMessage() {} func (*GetLocksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{110} + return fileDescriptor_0ffcffcda38ae159, []int{109} } func (m *GetLocksRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7924,7 +7884,7 @@ func (m *GetLocksResponse) Reset() { *m = GetLocksResponse{} } func (m *GetLocksResponse) String() string { return proto.CompactTextString(m) } func (*GetLocksResponse) ProtoMessage() {} func (*GetLocksResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{111} + return fileDescriptor_0ffcffcda38ae159, []int{110} } func (m *GetLocksResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7972,7 +7932,7 @@ func (m *GetLockRequest) Reset() { *m = GetLockRequest{} } func (m *GetLockRequest) String() string { return proto.CompactTextString(m) } func (*GetLockRequest) ProtoMessage() {} func (*GetLockRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{112} + return fileDescriptor_0ffcffcda38ae159, []int{111} } func (m *GetLockRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8020,7 +7980,7 @@ func (m *DeleteLockRequest) Reset() { *m = DeleteLockRequest{} } func (m *DeleteLockRequest) String() string { return proto.CompactTextString(m) } func (*DeleteLockRequest) ProtoMessage() {} func (*DeleteLockRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{113} + return fileDescriptor_0ffcffcda38ae159, []int{112} } func (m *DeleteLockRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8070,7 +8030,7 @@ func (m *ReplaceRemoteLocksRequest) Reset() { *m = ReplaceRemoteLocksReq func (m *ReplaceRemoteLocksRequest) String() string { return proto.CompactTextString(m) } func (*ReplaceRemoteLocksRequest) ProtoMessage() {} func (*ReplaceRemoteLocksRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{114} + return fileDescriptor_0ffcffcda38ae159, []int{113} } func (m *ReplaceRemoteLocksRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8126,7 +8086,7 @@ func (m *GetWindowsDesktopServicesResponse) Reset() { *m = GetWindowsDes func (m *GetWindowsDesktopServicesResponse) String() string { return proto.CompactTextString(m) } func (*GetWindowsDesktopServicesResponse) ProtoMessage() {} func (*GetWindowsDesktopServicesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{115} + return fileDescriptor_0ffcffcda38ae159, []int{114} } func (m *GetWindowsDesktopServicesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8175,7 +8135,7 @@ func (m *GetWindowsDesktopServiceRequest) Reset() { *m = GetWindowsDeskt func (m *GetWindowsDesktopServiceRequest) String() string { return proto.CompactTextString(m) } func (*GetWindowsDesktopServiceRequest) ProtoMessage() {} func (*GetWindowsDesktopServiceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{116} + return fileDescriptor_0ffcffcda38ae159, []int{115} } func (m *GetWindowsDesktopServiceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8224,7 +8184,7 @@ func (m *GetWindowsDesktopServiceResponse) Reset() { *m = GetWindowsDesk func (m *GetWindowsDesktopServiceResponse) String() string { return proto.CompactTextString(m) } func (*GetWindowsDesktopServiceResponse) ProtoMessage() {} func (*GetWindowsDesktopServiceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{117} + return fileDescriptor_0ffcffcda38ae159, []int{116} } func (m *GetWindowsDesktopServiceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8273,7 +8233,7 @@ func (m *DeleteWindowsDesktopServiceRequest) Reset() { *m = DeleteWindow func (m *DeleteWindowsDesktopServiceRequest) String() string { return proto.CompactTextString(m) } func (*DeleteWindowsDesktopServiceRequest) ProtoMessage() {} func (*DeleteWindowsDesktopServiceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{118} + return fileDescriptor_0ffcffcda38ae159, []int{117} } func (m *DeleteWindowsDesktopServiceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8322,7 +8282,7 @@ func (m *GetWindowsDesktopsResponse) Reset() { *m = GetWindowsDesktopsRe func (m *GetWindowsDesktopsResponse) String() string { return proto.CompactTextString(m) } func (*GetWindowsDesktopsResponse) ProtoMessage() {} func (*GetWindowsDesktopsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{119} + return fileDescriptor_0ffcffcda38ae159, []int{118} } func (m *GetWindowsDesktopsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8375,7 +8335,7 @@ func (m *DeleteWindowsDesktopRequest) Reset() { *m = DeleteWindowsDeskto func (m *DeleteWindowsDesktopRequest) String() string { return proto.CompactTextString(m) } func (*DeleteWindowsDesktopRequest) ProtoMessage() {} func (*DeleteWindowsDesktopRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{120} + return fileDescriptor_0ffcffcda38ae159, []int{119} } func (m *DeleteWindowsDesktopRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8436,7 +8396,7 @@ func (m *WindowsDesktopCertRequest) Reset() { *m = WindowsDesktopCertReq func (m *WindowsDesktopCertRequest) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopCertRequest) ProtoMessage() {} func (*WindowsDesktopCertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{121} + return fileDescriptor_0ffcffcda38ae159, []int{120} } func (m *WindowsDesktopCertRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8499,7 +8459,7 @@ func (m *WindowsDesktopCertResponse) Reset() { *m = WindowsDesktopCertRe func (m *WindowsDesktopCertResponse) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopCertResponse) ProtoMessage() {} func (*WindowsDesktopCertResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{122} + return fileDescriptor_0ffcffcda38ae159, []int{121} } func (m *WindowsDesktopCertResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8548,7 +8508,7 @@ func (m *CertAuthorityRequest) Reset() { *m = CertAuthorityRequest{} } func (m *CertAuthorityRequest) String() string { return proto.CompactTextString(m) } func (*CertAuthorityRequest) ProtoMessage() {} func (*CertAuthorityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{123} + return fileDescriptor_0ffcffcda38ae159, []int{122} } func (m *CertAuthorityRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8597,7 +8557,7 @@ func (m *CRL) Reset() { *m = CRL{} } func (m *CRL) String() string { return proto.CompactTextString(m) } func (*CRL) ProtoMessage() {} func (*CRL) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{124} + return fileDescriptor_0ffcffcda38ae159, []int{123} } func (m *CRL) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8665,7 +8625,7 @@ func (m *ChangeUserAuthenticationRequest) Reset() { *m = ChangeUserAuthe func (m *ChangeUserAuthenticationRequest) String() string { return proto.CompactTextString(m) } func (*ChangeUserAuthenticationRequest) ProtoMessage() {} func (*ChangeUserAuthenticationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{125} + return fileDescriptor_0ffcffcda38ae159, []int{124} } func (m *ChangeUserAuthenticationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8744,7 +8704,7 @@ func (m *ChangeUserAuthenticationResponse) Reset() { *m = ChangeUserAuth func (m *ChangeUserAuthenticationResponse) String() string { return proto.CompactTextString(m) } func (*ChangeUserAuthenticationResponse) ProtoMessage() {} func (*ChangeUserAuthenticationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{126} + return fileDescriptor_0ffcffcda38ae159, []int{125} } func (m *ChangeUserAuthenticationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8817,7 +8777,7 @@ func (m *StartAccountRecoveryRequest) Reset() { *m = StartAccountRecover func (m *StartAccountRecoveryRequest) String() string { return proto.CompactTextString(m) } func (*StartAccountRecoveryRequest) ProtoMessage() {} func (*StartAccountRecoveryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{127} + return fileDescriptor_0ffcffcda38ae159, []int{126} } func (m *StartAccountRecoveryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8892,7 +8852,7 @@ func (m *VerifyAccountRecoveryRequest) Reset() { *m = VerifyAccountRecov func (m *VerifyAccountRecoveryRequest) String() string { return proto.CompactTextString(m) } func (*VerifyAccountRecoveryRequest) ProtoMessage() {} func (*VerifyAccountRecoveryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{128} + return fileDescriptor_0ffcffcda38ae159, []int{127} } func (m *VerifyAccountRecoveryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9007,7 +8967,7 @@ func (m *CompleteAccountRecoveryRequest) Reset() { *m = CompleteAccountR func (m *CompleteAccountRecoveryRequest) String() string { return proto.CompactTextString(m) } func (*CompleteAccountRecoveryRequest) ProtoMessage() {} func (*CompleteAccountRecoveryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{129} + return fileDescriptor_0ffcffcda38ae159, []int{128} } func (m *CompleteAccountRecoveryRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9113,7 +9073,7 @@ func (m *RecoveryCodes) Reset() { *m = RecoveryCodes{} } func (m *RecoveryCodes) String() string { return proto.CompactTextString(m) } func (*RecoveryCodes) ProtoMessage() {} func (*RecoveryCodes) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{130} + return fileDescriptor_0ffcffcda38ae159, []int{129} } func (m *RecoveryCodes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9176,7 +9136,7 @@ func (m *CreateAccountRecoveryCodesRequest) Reset() { *m = CreateAccount func (m *CreateAccountRecoveryCodesRequest) String() string { return proto.CompactTextString(m) } func (*CreateAccountRecoveryCodesRequest) ProtoMessage() {} func (*CreateAccountRecoveryCodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{131} + return fileDescriptor_0ffcffcda38ae159, []int{130} } func (m *CreateAccountRecoveryCodesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9227,7 +9187,7 @@ func (m *GetAccountRecoveryTokenRequest) Reset() { *m = GetAccountRecove func (m *GetAccountRecoveryTokenRequest) String() string { return proto.CompactTextString(m) } func (*GetAccountRecoveryTokenRequest) ProtoMessage() {} func (*GetAccountRecoveryTokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{132} + return fileDescriptor_0ffcffcda38ae159, []int{131} } func (m *GetAccountRecoveryTokenRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9275,7 +9235,7 @@ func (m *GetAccountRecoveryCodesRequest) Reset() { *m = GetAccountRecove func (m *GetAccountRecoveryCodesRequest) String() string { return proto.CompactTextString(m) } func (*GetAccountRecoveryCodesRequest) ProtoMessage() {} func (*GetAccountRecoveryCodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{133} + return fileDescriptor_0ffcffcda38ae159, []int{132} } func (m *GetAccountRecoveryCodesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9317,7 +9277,7 @@ func (m *UserCredentials) Reset() { *m = UserCredentials{} } func (m *UserCredentials) String() string { return proto.CompactTextString(m) } func (*UserCredentials) ProtoMessage() {} func (*UserCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{134} + return fileDescriptor_0ffcffcda38ae159, []int{133} } func (m *UserCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9371,7 +9331,7 @@ func (m *ContextUser) Reset() { *m = ContextUser{} } func (m *ContextUser) String() string { return proto.CompactTextString(m) } func (*ContextUser) ProtoMessage() {} func (*ContextUser) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{135} + return fileDescriptor_0ffcffcda38ae159, []int{134} } func (m *ContextUser) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9411,7 +9371,7 @@ func (m *Passwordless) Reset() { *m = Passwordless{} } func (m *Passwordless) String() string { return proto.CompactTextString(m) } func (*Passwordless) ProtoMessage() {} func (*Passwordless) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{136} + return fileDescriptor_0ffcffcda38ae159, []int{135} } func (m *Passwordless) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9461,7 +9421,7 @@ func (m *CreateAuthenticateChallengeRequest) Reset() { *m = CreateAuthen func (m *CreateAuthenticateChallengeRequest) String() string { return proto.CompactTextString(m) } func (*CreateAuthenticateChallengeRequest) ProtoMessage() {} func (*CreateAuthenticateChallengeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{137} + return fileDescriptor_0ffcffcda38ae159, []int{136} } func (m *CreateAuthenticateChallengeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9581,7 +9541,7 @@ func (m *CreatePrivilegeTokenRequest) Reset() { *m = CreatePrivilegeToke func (m *CreatePrivilegeTokenRequest) String() string { return proto.CompactTextString(m) } func (*CreatePrivilegeTokenRequest) ProtoMessage() {} func (*CreatePrivilegeTokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{138} + return fileDescriptor_0ffcffcda38ae159, []int{137} } func (m *CreatePrivilegeTokenRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9637,7 +9597,7 @@ func (m *CreateRegisterChallengeRequest) Reset() { *m = CreateRegisterCh func (m *CreateRegisterChallengeRequest) String() string { return proto.CompactTextString(m) } func (*CreateRegisterChallengeRequest) ProtoMessage() {} func (*CreateRegisterChallengeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{139} + return fileDescriptor_0ffcffcda38ae159, []int{138} } func (m *CreateRegisterChallengeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9700,6 +9660,7 @@ type PaginatedResource struct { // *PaginatedResource_KubeCluster // *PaginatedResource_KubernetesServer // *PaginatedResource_WindowsDesktopService + // *PaginatedResource_DatabaseService Resource isPaginatedResource_Resource `protobuf_oneof:"resource"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -9710,7 +9671,7 @@ func (m *PaginatedResource) Reset() { *m = PaginatedResource{} } func (m *PaginatedResource) String() string { return proto.CompactTextString(m) } func (*PaginatedResource) ProtoMessage() {} func (*PaginatedResource) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{140} + return fileDescriptor_0ffcffcda38ae159, []int{139} } func (m *PaginatedResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -9769,6 +9730,9 @@ type PaginatedResource_KubernetesServer struct { type PaginatedResource_WindowsDesktopService struct { WindowsDesktopService *types.WindowsDesktopServiceV3 `protobuf:"bytes,8,opt,name=WindowsDesktopService,proto3,oneof" json:"windows_desktop_service,omitempty"` } +type PaginatedResource_DatabaseService struct { + DatabaseService *types.DatabaseServiceV1 `protobuf:"bytes,9,opt,name=DatabaseService,proto3,oneof" json:"database_service,omitempty"` +} func (*PaginatedResource_DatabaseServer) isPaginatedResource_Resource() {} func (*PaginatedResource_AppServer) isPaginatedResource_Resource() {} @@ -9778,6 +9742,7 @@ func (*PaginatedResource_WindowsDesktop) isPaginatedResource_Resource() { func (*PaginatedResource_KubeCluster) isPaginatedResource_Resource() {} func (*PaginatedResource_KubernetesServer) isPaginatedResource_Resource() {} func (*PaginatedResource_WindowsDesktopService) isPaginatedResource_Resource() {} +func (*PaginatedResource_DatabaseService) isPaginatedResource_Resource() {} func (m *PaginatedResource) GetResource() isPaginatedResource_Resource { if m != nil { @@ -9842,6 +9807,13 @@ func (m *PaginatedResource) GetWindowsDesktopService() *types.WindowsDesktopServ return nil } +func (m *PaginatedResource) GetDatabaseService() *types.DatabaseServiceV1 { + if x, ok := m.GetResource().(*PaginatedResource_DatabaseService); ok { + return x.DatabaseService + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*PaginatedResource) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -9853,6 +9825,7 @@ func (*PaginatedResource) XXX_OneofWrappers() []interface{} { (*PaginatedResource_KubeCluster)(nil), (*PaginatedResource_KubernetesServer)(nil), (*PaginatedResource_WindowsDesktopService)(nil), + (*PaginatedResource_DatabaseService)(nil), } } @@ -9906,7 +9879,7 @@ func (m *ListResourcesRequest) Reset() { *m = ListResourcesRequest{} } func (m *ListResourcesRequest) String() string { return proto.CompactTextString(m) } func (*ListResourcesRequest) ProtoMessage() {} func (*ListResourcesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{141} + return fileDescriptor_0ffcffcda38ae159, []int{140} } func (m *ListResourcesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10038,7 +10011,7 @@ func (m *ListResourcesResponse) Reset() { *m = ListResourcesResponse{} } func (m *ListResourcesResponse) String() string { return proto.CompactTextString(m) } func (*ListResourcesResponse) ProtoMessage() {} func (*ListResourcesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{142} + return fileDescriptor_0ffcffcda38ae159, []int{141} } func (m *ListResourcesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10103,7 +10076,7 @@ func (m *CreateSessionTrackerRequest) Reset() { *m = CreateSessionTracke func (m *CreateSessionTrackerRequest) String() string { return proto.CompactTextString(m) } func (*CreateSessionTrackerRequest) ProtoMessage() {} func (*CreateSessionTrackerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{143} + return fileDescriptor_0ffcffcda38ae159, []int{142} } func (m *CreateSessionTrackerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10152,7 +10125,7 @@ func (m *GetSessionTrackerRequest) Reset() { *m = GetSessionTrackerReque func (m *GetSessionTrackerRequest) String() string { return proto.CompactTextString(m) } func (*GetSessionTrackerRequest) ProtoMessage() {} func (*GetSessionTrackerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{144} + return fileDescriptor_0ffcffcda38ae159, []int{143} } func (m *GetSessionTrackerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10201,7 +10174,7 @@ func (m *RemoveSessionTrackerRequest) Reset() { *m = RemoveSessionTracke func (m *RemoveSessionTrackerRequest) String() string { return proto.CompactTextString(m) } func (*RemoveSessionTrackerRequest) ProtoMessage() {} func (*RemoveSessionTrackerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{145} + return fileDescriptor_0ffcffcda38ae159, []int{144} } func (m *RemoveSessionTrackerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10249,7 +10222,7 @@ func (m *SessionTrackerUpdateState) Reset() { *m = SessionTrackerUpdateS func (m *SessionTrackerUpdateState) String() string { return proto.CompactTextString(m) } func (*SessionTrackerUpdateState) ProtoMessage() {} func (*SessionTrackerUpdateState) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{146} + return fileDescriptor_0ffcffcda38ae159, []int{145} } func (m *SessionTrackerUpdateState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10297,7 +10270,7 @@ func (m *SessionTrackerAddParticipant) Reset() { *m = SessionTrackerAddP func (m *SessionTrackerAddParticipant) String() string { return proto.CompactTextString(m) } func (*SessionTrackerAddParticipant) ProtoMessage() {} func (*SessionTrackerAddParticipant) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{147} + return fileDescriptor_0ffcffcda38ae159, []int{146} } func (m *SessionTrackerAddParticipant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10345,7 +10318,7 @@ func (m *SessionTrackerRemoveParticipant) Reset() { *m = SessionTrackerR func (m *SessionTrackerRemoveParticipant) String() string { return proto.CompactTextString(m) } func (*SessionTrackerRemoveParticipant) ProtoMessage() {} func (*SessionTrackerRemoveParticipant) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{148} + return fileDescriptor_0ffcffcda38ae159, []int{147} } func (m *SessionTrackerRemoveParticipant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10394,7 +10367,7 @@ func (m *SessionTrackerUpdateExpiry) Reset() { *m = SessionTrackerUpdate func (m *SessionTrackerUpdateExpiry) String() string { return proto.CompactTextString(m) } func (*SessionTrackerUpdateExpiry) ProtoMessage() {} func (*SessionTrackerUpdateExpiry) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{149} + return fileDescriptor_0ffcffcda38ae159, []int{148} } func (m *SessionTrackerUpdateExpiry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10449,7 +10422,7 @@ func (m *UpdateSessionTrackerRequest) Reset() { *m = UpdateSessionTracke func (m *UpdateSessionTrackerRequest) String() string { return proto.CompactTextString(m) } func (*UpdateSessionTrackerRequest) ProtoMessage() {} func (*UpdateSessionTrackerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{150} + return fileDescriptor_0ffcffcda38ae159, []int{149} } func (m *UpdateSessionTrackerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10567,7 +10540,7 @@ func (m *PresenceMFAChallengeRequest) Reset() { *m = PresenceMFAChalleng func (m *PresenceMFAChallengeRequest) String() string { return proto.CompactTextString(m) } func (*PresenceMFAChallengeRequest) ProtoMessage() {} func (*PresenceMFAChallengeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{151} + return fileDescriptor_0ffcffcda38ae159, []int{150} } func (m *PresenceMFAChallengeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10618,7 +10591,7 @@ func (m *PresenceMFAChallengeSend) Reset() { *m = PresenceMFAChallengeSe func (m *PresenceMFAChallengeSend) String() string { return proto.CompactTextString(m) } func (*PresenceMFAChallengeSend) ProtoMessage() {} func (*PresenceMFAChallengeSend) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{152} + return fileDescriptor_0ffcffcda38ae159, []int{151} } func (m *PresenceMFAChallengeSend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10705,7 +10678,7 @@ func (m *GetDomainNameResponse) Reset() { *m = GetDomainNameResponse{} } func (m *GetDomainNameResponse) String() string { return proto.CompactTextString(m) } func (*GetDomainNameResponse) ProtoMessage() {} func (*GetDomainNameResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{153} + return fileDescriptor_0ffcffcda38ae159, []int{152} } func (m *GetDomainNameResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10754,7 +10727,7 @@ func (m *GetClusterCACertResponse) Reset() { *m = GetClusterCACertRespon func (m *GetClusterCACertResponse) String() string { return proto.CompactTextString(m) } func (*GetClusterCACertResponse) ProtoMessage() {} func (*GetClusterCACertResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{154} + return fileDescriptor_0ffcffcda38ae159, []int{153} } func (m *GetClusterCACertResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10810,7 +10783,7 @@ func (m *GenerateTokenRequest) Reset() { *m = GenerateTokenRequest{} } func (m *GenerateTokenRequest) String() string { return proto.CompactTextString(m) } func (*GenerateTokenRequest) ProtoMessage() {} func (*GenerateTokenRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{155} + return fileDescriptor_0ffcffcda38ae159, []int{154} } func (m *GenerateTokenRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10880,7 +10853,7 @@ func (m *GenerateTokenResponse) Reset() { *m = GenerateTokenResponse{} } func (m *GenerateTokenResponse) String() string { return proto.CompactTextString(m) } func (*GenerateTokenResponse) ProtoMessage() {} func (*GenerateTokenResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{156} + return fileDescriptor_0ffcffcda38ae159, []int{155} } func (m *GenerateTokenResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10929,7 +10902,7 @@ func (m *GetOIDCAuthRequestRequest) Reset() { *m = GetOIDCAuthRequestReq func (m *GetOIDCAuthRequestRequest) String() string { return proto.CompactTextString(m) } func (*GetOIDCAuthRequestRequest) ProtoMessage() {} func (*GetOIDCAuthRequestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{157} + return fileDescriptor_0ffcffcda38ae159, []int{156} } func (m *GetOIDCAuthRequestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10978,7 +10951,7 @@ func (m *GetSAMLAuthRequestRequest) Reset() { *m = GetSAMLAuthRequestReq func (m *GetSAMLAuthRequestRequest) String() string { return proto.CompactTextString(m) } func (*GetSAMLAuthRequestRequest) ProtoMessage() {} func (*GetSAMLAuthRequestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{158} + return fileDescriptor_0ffcffcda38ae159, []int{157} } func (m *GetSAMLAuthRequestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11027,7 +11000,7 @@ func (m *GetGithubAuthRequestRequest) Reset() { *m = GetGithubAuthReques func (m *GetGithubAuthRequestRequest) String() string { return proto.CompactTextString(m) } func (*GetGithubAuthRequestRequest) ProtoMessage() {} func (*GetGithubAuthRequestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{159} + return fileDescriptor_0ffcffcda38ae159, []int{158} } func (m *GetGithubAuthRequestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11078,7 +11051,7 @@ func (m *GetSSODiagnosticInfoRequest) Reset() { *m = GetSSODiagnosticInf func (m *GetSSODiagnosticInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetSSODiagnosticInfoRequest) ProtoMessage() {} func (*GetSSODiagnosticInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{160} + return fileDescriptor_0ffcffcda38ae159, []int{159} } func (m *GetSSODiagnosticInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11137,7 +11110,7 @@ func (m *UnstableSystemRoleAssertion) Reset() { *m = UnstableSystemRoleA func (m *UnstableSystemRoleAssertion) String() string { return proto.CompactTextString(m) } func (*UnstableSystemRoleAssertion) ProtoMessage() {} func (*UnstableSystemRoleAssertion) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{161} + return fileDescriptor_0ffcffcda38ae159, []int{160} } func (m *UnstableSystemRoleAssertion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11203,7 +11176,7 @@ func (m *UnstableSystemRoleAssertionSet) Reset() { *m = UnstableSystemRo func (m *UnstableSystemRoleAssertionSet) String() string { return proto.CompactTextString(m) } func (*UnstableSystemRoleAssertionSet) ProtoMessage() {} func (*UnstableSystemRoleAssertionSet) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{162} + return fileDescriptor_0ffcffcda38ae159, []int{161} } func (m *UnstableSystemRoleAssertionSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11270,7 +11243,7 @@ func (m *UpstreamInventoryOneOf) Reset() { *m = UpstreamInventoryOneOf{} func (m *UpstreamInventoryOneOf) String() string { return proto.CompactTextString(m) } func (*UpstreamInventoryOneOf) ProtoMessage() {} func (*UpstreamInventoryOneOf) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{163} + return fileDescriptor_0ffcffcda38ae159, []int{162} } func (m *UpstreamInventoryOneOf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11372,7 +11345,7 @@ func (m *DownstreamInventoryOneOf) Reset() { *m = DownstreamInventoryOne func (m *DownstreamInventoryOneOf) String() string { return proto.CompactTextString(m) } func (*DownstreamInventoryOneOf) ProtoMessage() {} func (*DownstreamInventoryOneOf) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{164} + return fileDescriptor_0ffcffcda38ae159, []int{163} } func (m *DownstreamInventoryOneOf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11459,7 +11432,7 @@ func (m *DownstreamInventoryPing) Reset() { *m = DownstreamInventoryPing func (m *DownstreamInventoryPing) String() string { return proto.CompactTextString(m) } func (*DownstreamInventoryPing) ProtoMessage() {} func (*DownstreamInventoryPing) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{165} + return fileDescriptor_0ffcffcda38ae159, []int{164} } func (m *DownstreamInventoryPing) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11508,7 +11481,7 @@ func (m *UpstreamInventoryPong) Reset() { *m = UpstreamInventoryPong{} } func (m *UpstreamInventoryPong) String() string { return proto.CompactTextString(m) } func (*UpstreamInventoryPong) ProtoMessage() {} func (*UpstreamInventoryPong) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{166} + return fileDescriptor_0ffcffcda38ae159, []int{165} } func (m *UpstreamInventoryPong) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11565,7 +11538,7 @@ func (m *UpstreamInventoryHello) Reset() { *m = UpstreamInventoryHello{} func (m *UpstreamInventoryHello) String() string { return proto.CompactTextString(m) } func (*UpstreamInventoryHello) ProtoMessage() {} func (*UpstreamInventoryHello) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{167} + return fileDescriptor_0ffcffcda38ae159, []int{166} } func (m *UpstreamInventoryHello) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11630,7 +11603,7 @@ func (m *DownstreamInventoryHello) Reset() { *m = DownstreamInventoryHel func (m *DownstreamInventoryHello) String() string { return proto.CompactTextString(m) } func (*DownstreamInventoryHello) ProtoMessage() {} func (*DownstreamInventoryHello) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{168} + return fileDescriptor_0ffcffcda38ae159, []int{167} } func (m *DownstreamInventoryHello) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11689,7 +11662,7 @@ func (m *InventoryHeartbeat) Reset() { *m = InventoryHeartbeat{} } func (m *InventoryHeartbeat) String() string { return proto.CompactTextString(m) } func (*InventoryHeartbeat) ProtoMessage() {} func (*InventoryHeartbeat) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{169} + return fileDescriptor_0ffcffcda38ae159, []int{168} } func (m *InventoryHeartbeat) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11739,7 +11712,7 @@ func (m *InventoryStatusRequest) Reset() { *m = InventoryStatusRequest{} func (m *InventoryStatusRequest) String() string { return proto.CompactTextString(m) } func (*InventoryStatusRequest) ProtoMessage() {} func (*InventoryStatusRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{170} + return fileDescriptor_0ffcffcda38ae159, []int{169} } func (m *InventoryStatusRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11789,7 +11762,7 @@ func (m *InventoryStatusSummary) Reset() { *m = InventoryStatusSummary{} func (m *InventoryStatusSummary) String() string { return proto.CompactTextString(m) } func (*InventoryStatusSummary) ProtoMessage() {} func (*InventoryStatusSummary) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{171} + return fileDescriptor_0ffcffcda38ae159, []int{170} } func (m *InventoryStatusSummary) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11838,7 +11811,7 @@ func (m *InventoryPingRequest) Reset() { *m = InventoryPingRequest{} } func (m *InventoryPingRequest) String() string { return proto.CompactTextString(m) } func (*InventoryPingRequest) ProtoMessage() {} func (*InventoryPingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{172} + return fileDescriptor_0ffcffcda38ae159, []int{171} } func (m *InventoryPingRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11887,7 +11860,7 @@ func (m *InventoryPingResponse) Reset() { *m = InventoryPingResponse{} } func (m *InventoryPingResponse) String() string { return proto.CompactTextString(m) } func (*InventoryPingResponse) ProtoMessage() {} func (*InventoryPingResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{173} + return fileDescriptor_0ffcffcda38ae159, []int{172} } func (m *InventoryPingResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11936,7 +11909,7 @@ func (m *GetClusterAlertsResponse) Reset() { *m = GetClusterAlertsRespon func (m *GetClusterAlertsResponse) String() string { return proto.CompactTextString(m) } func (*GetClusterAlertsResponse) ProtoMessage() {} func (*GetClusterAlertsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{174} + return fileDescriptor_0ffcffcda38ae159, []int{173} } func (m *GetClusterAlertsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11985,7 +11958,7 @@ func (m *UpsertClusterAlertRequest) Reset() { *m = UpsertClusterAlertReq func (m *UpsertClusterAlertRequest) String() string { return proto.CompactTextString(m) } func (*UpsertClusterAlertRequest) ProtoMessage() {} func (*UpsertClusterAlertRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{175} + return fileDescriptor_0ffcffcda38ae159, []int{174} } func (m *UpsertClusterAlertRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12034,7 +12007,7 @@ func (m *GetConnectionDiagnosticRequest) Reset() { *m = GetConnectionDia func (m *GetConnectionDiagnosticRequest) String() string { return proto.CompactTextString(m) } func (*GetConnectionDiagnosticRequest) ProtoMessage() {} func (*GetConnectionDiagnosticRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{176} + return fileDescriptor_0ffcffcda38ae159, []int{175} } func (m *GetConnectionDiagnosticRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12085,7 +12058,7 @@ func (m *AppendDiagnosticTraceRequest) Reset() { *m = AppendDiagnosticTr func (m *AppendDiagnosticTraceRequest) String() string { return proto.CompactTextString(m) } func (*AppendDiagnosticTraceRequest) ProtoMessage() {} func (*AppendDiagnosticTraceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{177} + return fileDescriptor_0ffcffcda38ae159, []int{176} } func (m *AppendDiagnosticTraceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12140,7 +12113,7 @@ func (m *SubmitUsageEventRequest) Reset() { *m = SubmitUsageEventRequest func (m *SubmitUsageEventRequest) String() string { return proto.CompactTextString(m) } func (*SubmitUsageEventRequest) ProtoMessage() {} func (*SubmitUsageEventRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_0ffcffcda38ae159, []int{178} + return fileDescriptor_0ffcffcda38ae159, []int{177} } func (m *SubmitUsageEventRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12252,7 +12225,6 @@ func init() { proto.RegisterType((*UpsertDatabaseServerRequest)(nil), "proto.UpsertDatabaseServerRequest") proto.RegisterType((*DeleteDatabaseServerRequest)(nil), "proto.DeleteDatabaseServerRequest") proto.RegisterType((*DeleteAllDatabaseServersRequest)(nil), "proto.DeleteAllDatabaseServersRequest") - proto.RegisterType((*GetAllDatabaseServicesRequest)(nil), "proto.GetAllDatabaseServicesRequest") proto.RegisterType((*DatabaseServiceV1List)(nil), "proto.DatabaseServiceV1List") proto.RegisterType((*UpsertDatabaseServiceRequest)(nil), "proto.UpsertDatabaseServiceRequest") proto.RegisterType((*DeleteAllDatabaseServicesRequest)(nil), "proto.DeleteAllDatabaseServicesRequest") @@ -12375,728 +12347,728 @@ func init() { var fileDescriptor_0ffcffcda38ae159 = []byte{ // 11551 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x7d, 0x4b, 0x6c, 0x1c, 0x49, - 0x96, 0x98, 0xaa, 0xf8, 0x7f, 0xfc, 0xa8, 0x14, 0x22, 0xc5, 0x52, 0x49, 0x62, 0x49, 0xd9, 0xd3, - 0x3d, 0xea, 0xde, 0x19, 0x7d, 0xc8, 0xee, 0xe9, 0xef, 0x74, 0x6f, 0x55, 0x91, 0x12, 0x29, 0x51, - 0x14, 0x3b, 0x8b, 0x2a, 0xf5, 0xcc, 0xf4, 0x4e, 0x4d, 0xb2, 0x2a, 0x44, 0xa6, 0x55, 0xac, 0xac, - 0xc9, 0x4c, 0x8a, 0xad, 0x5d, 0xf8, 0x87, 0xf5, 0x2e, 0x0c, 0x7f, 0xe0, 0x31, 0xe0, 0xb5, 0xbd, - 0xf6, 0xc1, 0x06, 0xd6, 0x30, 0x60, 0x03, 0xf6, 0x69, 0x17, 0xbe, 0xd8, 0x30, 0x0c, 0xdb, 0xf0, - 0xec, 0xc1, 0x80, 0x2f, 0x0b, 0xc3, 0x3e, 0xd0, 0xf6, 0x1c, 0x09, 0xd8, 0x17, 0xc3, 0x3e, 0xcc, - 0xc9, 0x88, 0x6f, 0x46, 0x64, 0x46, 0x64, 0x91, 0x92, 0x76, 0x7c, 0x91, 0x58, 0x11, 0xef, 0xbd, - 0x88, 0x78, 0x11, 0xf1, 0xe2, 0xbd, 0x17, 0x2f, 0x5e, 0xc2, 0xad, 0x18, 0xf7, 0xf0, 0x20, 0x08, - 0xe3, 0xdb, 0x3d, 0xbc, 0xe7, 0x75, 0x5e, 0xde, 0xee, 0xf4, 0x7c, 0xdc, 0x8f, 0x6f, 0x0f, 0xc2, - 0x20, 0x0e, 0x6e, 0x7b, 0x87, 0xf1, 0x7e, 0x84, 0xc3, 0x17, 0x7e, 0x07, 0xdf, 0xa2, 0x25, 0x68, - 0x8c, 0xfe, 0x57, 0x99, 0xdf, 0x0b, 0xf6, 0x02, 0x06, 0x43, 0xfe, 0x62, 0x95, 0x95, 0x2b, 0x7b, - 0x41, 0xb0, 0xd7, 0xc3, 0x0c, 0x79, 0xf7, 0xf0, 0xd9, 0x6d, 0x7c, 0x30, 0x88, 0x5f, 0xf2, 0xca, - 0x6a, 0xba, 0x32, 0xf6, 0x0f, 0x70, 0x14, 0x7b, 0x07, 0x03, 0x0e, 0x70, 0x33, 0xb7, 0x2b, 0x1d, - 0x1c, 0xc6, 0x11, 0x87, 0x7c, 0x37, 0x0d, 0x19, 0xbf, 0x1c, 0xe0, 0xe8, 0x36, 0x7e, 0x81, 0xfb, - 0xb1, 0xf8, 0x8f, 0x83, 0xde, 0x30, 0x83, 0xd2, 0x7f, 0x39, 0xc8, 0x77, 0xcd, 0x20, 0x47, 0x78, - 0x97, 0x0c, 0xbf, 0x2f, 0xff, 0x18, 0x02, 0x1e, 0x7a, 0x83, 0x01, 0x0e, 0x93, 0x3f, 0x32, 0x7d, - 0x3d, 0x8c, 0xbc, 0x3d, 0xcc, 0xfb, 0xf8, 0xe2, 0xae, 0xfa, 0x93, 0x81, 0x3a, 0x7f, 0xb8, 0x08, - 0x63, 0x6b, 0xa4, 0x00, 0x7d, 0x04, 0xa3, 0x3b, 0x2f, 0x07, 0xb8, 0x5c, 0xb8, 0x5e, 0xb8, 0x39, - 0xb7, 0x5c, 0x62, 0xf5, 0xb7, 0x1e, 0x0f, 0x70, 0xe8, 0xc5, 0x7e, 0xd0, 0xaf, 0xa3, 0x93, 0xe3, - 0xea, 0x1c, 0x69, 0xf7, 0x3b, 0xc1, 0x81, 0x1f, 0x53, 0x2e, 0xbb, 0x14, 0x03, 0x3d, 0x85, 0x39, - 0x17, 0x47, 0xc1, 0x61, 0xd8, 0xc1, 0xeb, 0xd8, 0xeb, 0xe2, 0xb0, 0x5c, 0xbc, 0x5e, 0xb8, 0x39, - 0xbd, 0xbc, 0x70, 0x8b, 0x0d, 0x59, 0xaf, 0xac, 0x5f, 0x3a, 0x39, 0xae, 0xa2, 0x90, 0x97, 0x25, - 0xc4, 0xd6, 0xcf, 0xb9, 0x29, 0x32, 0xe8, 0x6b, 0x98, 0x6d, 0xe0, 0x30, 0xae, 0x1d, 0xc6, 0xfb, - 0x41, 0xe8, 0xc7, 0x2f, 0xcb, 0x23, 0x94, 0xee, 0x25, 0x4e, 0x57, 0xab, 0x6b, 0x2d, 0xd7, 0xaf, - 0x9e, 0x1c, 0x57, 0xcb, 0x64, 0xce, 0xda, 0x9e, 0x28, 0xd5, 0xc8, 0xeb, 0xc4, 0xd0, 0x57, 0x30, - 0xd3, 0x8c, 0xbd, 0xd8, 0xef, 0xec, 0x04, 0xcf, 0x71, 0x3f, 0x2a, 0x8f, 0x6a, 0x9d, 0x56, 0xab, - 0x5a, 0xcb, 0xf5, 0x2b, 0x27, 0xc7, 0xd5, 0xc5, 0x88, 0x96, 0xb5, 0x63, 0x5a, 0xa8, 0x91, 0xd6, - 0x28, 0xa1, 0x9f, 0xc0, 0xdc, 0x76, 0x18, 0xbc, 0xf0, 0x23, 0x3f, 0xe8, 0xd3, 0xa2, 0xf2, 0x18, - 0xa5, 0xbd, 0xc8, 0x69, 0xeb, 0x95, 0xad, 0xe5, 0xfa, 0xb5, 0x93, 0xe3, 0xea, 0xe5, 0x81, 0x28, - 0x65, 0x0d, 0xe8, 0x9c, 0xd1, 0x51, 0xd0, 0x0e, 0x4c, 0x37, 0x7a, 0x87, 0x51, 0x8c, 0xc3, 0x2d, - 0xef, 0x00, 0x97, 0xc7, 0x29, 0xf9, 0x79, 0xc1, 0x97, 0xa4, 0xa6, 0xb5, 0x5c, 0xaf, 0x9c, 0x1c, - 0x57, 0x2f, 0x75, 0x58, 0x51, 0xbb, 0xef, 0x1d, 0xe8, 0x2c, 0x57, 0xc9, 0xa0, 0x0f, 0x61, 0xf4, - 0x49, 0x84, 0xc3, 0xf2, 0x24, 0x25, 0x37, 0xcb, 0xc9, 0x91, 0xa2, 0xd6, 0x32, 0x9b, 0xff, 0xc3, - 0x08, 0x87, 0x1a, 0x3e, 0x45, 0x20, 0x88, 0x6e, 0xd0, 0xc3, 0xe5, 0x29, 0x0d, 0x91, 0x14, 0xb5, - 0x3e, 0x60, 0x88, 0x61, 0xd0, 0xd3, 0x1b, 0xa6, 0x08, 0x68, 0x03, 0xa6, 0x48, 0xcb, 0xd1, 0xc0, - 0xeb, 0xe0, 0x32, 0x50, 0xec, 0x12, 0xc7, 0x96, 0xe5, 0xf5, 0xc5, 0x93, 0xe3, 0xea, 0xc5, 0xbe, - 0xf8, 0xa9, 0x51, 0x49, 0xb0, 0xd1, 0x17, 0x30, 0xde, 0xc4, 0xe1, 0x0b, 0x1c, 0x96, 0xa7, 0x29, - 0x9d, 0xf3, 0x62, 0x22, 0x69, 0x61, 0x6b, 0xb9, 0x3e, 0x7f, 0x72, 0x5c, 0x2d, 0x45, 0xf4, 0x97, - 0x46, 0x83, 0xa3, 0x91, 0xd5, 0xe6, 0xe2, 0x17, 0x38, 0x8c, 0xf0, 0xce, 0x61, 0xbf, 0x8f, 0x7b, - 0xe5, 0x19, 0x6d, 0xb5, 0x69, 0x75, 0x62, 0xb5, 0x85, 0xac, 0xb0, 0x1d, 0xd3, 0x52, 0x7d, 0xb5, - 0x69, 0x08, 0x68, 0x1f, 0x4a, 0xec, 0xaf, 0x46, 0xd0, 0xef, 0xe3, 0x0e, 0xd9, 0x52, 0xe5, 0x59, - 0xda, 0xc0, 0x65, 0xde, 0x40, 0xba, 0xba, 0xb5, 0x5c, 0xaf, 0x9e, 0x1c, 0x57, 0xaf, 0x30, 0xda, - 0xed, 0x8e, 0xac, 0xd0, 0x9a, 0xc9, 0x50, 0x25, 0xe3, 0xa8, 0x75, 0x3a, 0x38, 0x8a, 0x5c, 0xfc, - 0xd3, 0x43, 0x1c, 0xc5, 0xe5, 0x39, 0x6d, 0x1c, 0x5a, 0x5d, 0x6b, 0x85, 0x8d, 0xc3, 0xa3, 0x85, - 0xed, 0x90, 0x95, 0xea, 0xe3, 0xd0, 0x10, 0xd0, 0x36, 0x40, 0x6d, 0x30, 0x68, 0xe2, 0x88, 0x2c, - 0xc6, 0xf2, 0x79, 0x4a, 0xfa, 0x22, 0x27, 0xfd, 0x14, 0xef, 0xf2, 0x8a, 0xd6, 0x72, 0xfd, 0xf2, - 0xc9, 0x71, 0x75, 0xc1, 0x1b, 0x0c, 0xda, 0x11, 0x2b, 0xd2, 0x88, 0x2a, 0x34, 0x18, 0xdf, 0x0f, - 0x82, 0x18, 0xf3, 0xa5, 0x58, 0x2e, 0xa5, 0xf8, 0xae, 0xd4, 0x89, 0xfe, 0x86, 0xb4, 0xb0, 0xcd, - 0x97, 0x75, 0x9a, 0xef, 0x0a, 0x02, 0xd9, 0x8b, 0xab, 0x5e, 0xec, 0xed, 0x7a, 0x11, 0xe6, 0xcb, - 0xe3, 0x82, 0xb6, 0x17, 0xf5, 0xca, 0xd6, 0x0a, 0xdb, 0x8b, 0x5d, 0x5e, 0xda, 0x36, 0xac, 0x97, - 0x14, 0x3d, 0xc2, 0x91, 0x64, 0xe0, 0x65, 0x34, 0x84, 0x23, 0x47, 0x78, 0xd7, 0xcc, 0x91, 0x04, - 0x14, 0xad, 0xc3, 0xe4, 0x53, 0xbc, 0xcb, 0x24, 0xc7, 0x45, 0x4a, 0xef, 0x42, 0x42, 0x8f, 0xc9, - 0x8c, 0x15, 0xb6, 0x2b, 0x08, 0xb5, 0xac, 0xb4, 0x90, 0xd8, 0xe8, 0x77, 0x0a, 0xb0, 0x28, 0x76, - 0x38, 0x8e, 0x8f, 0x82, 0xf0, 0xb9, 0xdf, 0xdf, 0x6b, 0x04, 0xfd, 0x67, 0xfe, 0x5e, 0x79, 0x9e, - 0x52, 0xbe, 0x9e, 0x12, 0x1a, 0x29, 0xa8, 0xd6, 0x72, 0xfd, 0xdb, 0x27, 0xc7, 0xd5, 0xb7, 0xa4, - 0x00, 0x91, 0xf5, 0x64, 0x41, 0x3e, 0xf3, 0xf7, 0xb4, 0x86, 0x6d, 0x6d, 0xa1, 0xbf, 0x58, 0x80, - 0x4b, 0x7c, 0x74, 0x2e, 0xee, 0x04, 0x61, 0x37, 0xe9, 0xc6, 0x02, 0xed, 0x46, 0x55, 0xee, 0x56, - 0x13, 0x50, 0x6b, 0xb9, 0xfe, 0xce, 0xc9, 0x71, 0xd5, 0xe1, 0x8c, 0x6b, 0x87, 0xa2, 0xda, 0xd4, - 0x09, 0x4b, 0x43, 0x64, 0x25, 0x10, 0xe1, 0xbf, 0x1d, 0xe2, 0x67, 0x38, 0xc4, 0xfd, 0x0e, 0x2e, - 0x5f, 0xd2, 0x56, 0x82, 0x5e, 0x29, 0xa4, 0x32, 0x39, 0x4a, 0xda, 0x03, 0x59, 0xac, 0xaf, 0x04, - 0x1d, 0x05, 0xfd, 0x14, 0x10, 0x67, 0x40, 0xed, 0xb0, 0xeb, 0xc7, 0x7c, 0x80, 0x8b, 0xb4, 0x95, - 0x2b, 0x3a, 0x9f, 0x15, 0x80, 0xd6, 0x72, 0xdd, 0x39, 0x39, 0xae, 0x2e, 0x09, 0x16, 0x7b, 0xa4, - 0xca, 0x34, 0x30, 0x03, 0x71, 0x22, 0x79, 0x37, 0x83, 0xce, 0xf3, 0x72, 0x59, 0x93, 0xbc, 0xa4, - 0x48, 0x88, 0xec, 0x5e, 0xd0, 0x79, 0xae, 0x4b, 0x5e, 0x52, 0x8b, 0x62, 0xb8, 0xc8, 0x67, 0xc9, - 0xc5, 0x51, 0x1c, 0xfa, 0x54, 0x76, 0x44, 0xe5, 0xcb, 0x94, 0xce, 0x55, 0x21, 0x83, 0xb3, 0x10, - 0xad, 0xf7, 0x59, 0x6f, 0xf9, 0x42, 0x68, 0x87, 0x4a, 0x9d, 0xd6, 0x8c, 0x89, 0x3c, 0xfa, 0xb3, - 0xb0, 0xf0, 0xd4, 0xef, 0x77, 0x83, 0xa3, 0x68, 0x15, 0x47, 0xcf, 0xe3, 0x60, 0xd0, 0x64, 0x9a, - 0x5e, 0xb9, 0x42, 0xdb, 0x5d, 0x12, 0xcb, 0xdc, 0x04, 0xd3, 0x5a, 0xa9, 0xbf, 0x7d, 0x72, 0x5c, - 0xbd, 0x71, 0xc4, 0x2a, 0xdb, 0x5d, 0x56, 0xdb, 0xe6, 0xca, 0xa2, 0xd6, 0xb8, 0xb9, 0x15, 0xb2, - 0x04, 0xf4, 0x8a, 0xf2, 0x15, 0x6d, 0x09, 0xe8, 0x95, 0x42, 0x18, 0xa4, 0x1a, 0xd4, 0x97, 0x80, - 0x8e, 0x82, 0xee, 0xc3, 0xa4, 0x10, 0x0f, 0xe5, 0xab, 0xda, 0xd6, 0x15, 0xc5, 0xad, 0x15, 0xa6, - 0x01, 0x09, 0x11, 0xa3, 0xef, 0x5c, 0x01, 0x85, 0x36, 0x61, 0x8a, 0xca, 0x48, 0x2a, 0xb2, 0xae, - 0x51, 0x4a, 0x48, 0x2c, 0x54, 0x51, 0xde, 0x5a, 0xa9, 0x97, 0x4f, 0x8e, 0xab, 0xf3, 0x4c, 0xca, - 0x66, 0x04, 0x55, 0x42, 0x00, 0xad, 0xc0, 0x48, 0x6d, 0x30, 0x28, 0x2f, 0x51, 0x3a, 0x33, 0x09, - 0x9d, 0xd6, 0x4a, 0xfd, 0xc2, 0xc9, 0x71, 0x75, 0xd6, 0x1b, 0xe8, 0xc3, 0x22, 0xd0, 0x68, 0x17, - 0x4a, 0xcd, 0x7e, 0x70, 0xf4, 0xac, 0xe7, 0x3d, 0xc7, 0x42, 0xbc, 0x55, 0xed, 0xe2, 0x8d, 0x1e, - 0x56, 0x91, 0x40, 0x30, 0x0a, 0xb9, 0x0c, 0x3d, 0x72, 0x2c, 0x3e, 0x3c, 0xdc, 0xc5, 0x61, 0x1f, - 0xc7, 0x38, 0xe2, 0xa3, 0xbd, 0xae, 0x1d, 0x8b, 0xe9, 0xea, 0xd6, 0x0a, 0x6b, 0xe9, 0xb9, 0x2c, - 0x37, 0x8d, 0x3d, 0x43, 0x15, 0xf5, 0xe0, 0x42, 0x52, 0x26, 0x8e, 0x9a, 0x1b, 0xb4, 0xa9, 0x4a, - 0xa6, 0xa9, 0xe4, 0xb8, 0xb9, 0x7e, 0x72, 0x5c, 0xbd, 0xaa, 0xb4, 0x65, 0x3a, 0x72, 0xb2, 0x84, - 0xd1, 0x43, 0x98, 0xda, 0xe8, 0x47, 0xb1, 0xd7, 0xeb, 0xe1, 0xb0, 0xec, 0x68, 0xd3, 0x27, 0xcb, - 0x5b, 0x77, 0x99, 0x10, 0xf7, 0x45, 0x81, 0x3e, 0x7b, 0x12, 0xae, 0x0e, 0x30, 0x29, 0x34, 0xe3, - 0x07, 0xa3, 0x93, 0x13, 0xa5, 0x49, 0x67, 0x1d, 0xc6, 0x9e, 0x7a, 0x71, 0x67, 0x1f, 0x7d, 0x01, - 0x63, 0x0f, 0xfd, 0x7e, 0x37, 0x2a, 0x17, 0xae, 0x8f, 0x50, 0xe5, 0x89, 0xa9, 0xed, 0xb4, 0x92, - 0x54, 0xd4, 0x17, 0x7f, 0x7e, 0x5c, 0x3d, 0x77, 0x72, 0x5c, 0x3d, 0xff, 0x9c, 0x80, 0x29, 0xba, - 0x3b, 0xc3, 0x73, 0xfe, 0xb0, 0x08, 0x53, 0x12, 0x1a, 0x5d, 0x85, 0x51, 0xf2, 0x3f, 0x35, 0x02, - 0xa6, 0xea, 0x93, 0x27, 0xc7, 0xd5, 0x51, 0x82, 0xe7, 0xd2, 0x52, 0xb4, 0x0c, 0xd3, 0x9b, 0x81, - 0xd7, 0x6d, 0xe2, 0x4e, 0x88, 0xe3, 0x88, 0x6a, 0xf9, 0x93, 0xf5, 0xd2, 0xc9, 0x71, 0x75, 0xa6, - 0x17, 0x78, 0xdd, 0x76, 0xc4, 0xca, 0x5d, 0x15, 0x88, 0x50, 0xa4, 0x2a, 0xea, 0x48, 0x42, 0x91, - 0xa8, 0x72, 0x2e, 0x2d, 0x45, 0x0f, 0x60, 0xfc, 0x9e, 0xdf, 0x23, 0x33, 0x31, 0x4a, 0xfb, 0x7f, - 0x35, 0xdd, 0xff, 0x5b, 0xac, 0x7a, 0xad, 0x1f, 0x87, 0x2f, 0x99, 0x06, 0xf7, 0x8c, 0x16, 0x28, - 0x03, 0xe1, 0x14, 0xd0, 0x1d, 0x98, 0x68, 0x1e, 0xee, 0xd2, 0xee, 0x8f, 0xd1, 0xc6, 0xe8, 0x36, - 0x8b, 0x0e, 0x77, 0xdb, 0x64, 0x08, 0x0a, 0x82, 0x00, 0xab, 0x7c, 0x0c, 0xd3, 0x0a, 0x79, 0x54, - 0x82, 0x91, 0xe7, 0xf8, 0x25, 0x1b, 0xbb, 0x4b, 0xfe, 0x44, 0xf3, 0x30, 0xf6, 0xc2, 0xeb, 0x1d, - 0x62, 0x3a, 0xd4, 0x29, 0x97, 0xfd, 0xf8, 0xa4, 0xf8, 0x51, 0xc1, 0xf9, 0xa3, 0x71, 0x28, 0xad, - 0x07, 0x51, 0x4c, 0x4c, 0x0a, 0xa9, 0x1b, 0xbd, 0x05, 0xe3, 0xa4, 0x6c, 0x63, 0x95, 0xf3, 0x6f, - 0xfa, 0xe4, 0xb8, 0x3a, 0xb1, 0x1f, 0x44, 0x71, 0xdb, 0xef, 0xba, 0xbc, 0x0a, 0xbd, 0x0b, 0x93, - 0x5b, 0x41, 0x17, 0x53, 0xa6, 0x50, 0xb2, 0xf5, 0xd9, 0x93, 0xe3, 0xea, 0x54, 0x3f, 0xe8, 0x62, - 0xaa, 0x9e, 0xbb, 0xb2, 0x1a, 0xb5, 0xb8, 0x5a, 0xcd, 0x78, 0x57, 0x27, 0xbc, 0x23, 0x7a, 0xf4, - 0x2f, 0x8f, 0xab, 0xdf, 0xdb, 0xf3, 0xe3, 0xfd, 0xc3, 0xdd, 0x5b, 0x9d, 0xe0, 0xe0, 0xf6, 0x5e, - 0xe8, 0xbd, 0xf0, 0x63, 0x6a, 0xa4, 0x79, 0xbd, 0xdb, 0xd2, 0xf4, 0xf3, 0x06, 0x3e, 0x37, 0x39, - 0x9b, 0x2f, 0xa3, 0x18, 0x1f, 0x10, 0x4a, 0x5c, 0xeb, 0x7e, 0x0a, 0xf3, 0xb5, 0x6e, 0xd7, 0x67, - 0x18, 0xdb, 0xa1, 0xdf, 0xef, 0xf8, 0x03, 0xaf, 0x17, 0xd1, 0x39, 0x98, 0xaa, 0xbf, 0x75, 0x72, - 0x5c, 0xad, 0x7a, 0xb2, 0xbe, 0x3d, 0x90, 0x00, 0x0a, 0x0f, 0x8d, 0x04, 0xd0, 0x0a, 0x4c, 0xae, - 0x6e, 0x35, 0xa9, 0x4e, 0x5e, 0x1e, 0xa3, 0xc4, 0xe8, 0x02, 0xef, 0xf6, 0x23, 0x3a, 0x34, 0x95, - 0x80, 0x04, 0x44, 0xdf, 0x83, 0x99, 0xed, 0xc3, 0xdd, 0x9e, 0xdf, 0xd9, 0xd9, 0x6c, 0x3e, 0xc4, - 0x2f, 0xa9, 0x31, 0x33, 0xc3, 0xce, 0xae, 0x01, 0x2d, 0x6f, 0xc7, 0xbd, 0xa8, 0xfd, 0x1c, 0xbf, - 0x74, 0x35, 0xb8, 0x04, 0xaf, 0xd9, 0x5c, 0x27, 0x78, 0x13, 0x19, 0xbc, 0x28, 0xda, 0x57, 0xf1, - 0x18, 0x1c, 0xba, 0x0d, 0xc0, 0x54, 0xc4, 0x5a, 0xb7, 0xcb, 0x6c, 0x9d, 0xa9, 0xfa, 0xf9, 0x93, - 0xe3, 0xea, 0x34, 0x57, 0x2a, 0xbd, 0x6e, 0x37, 0x74, 0x15, 0x10, 0xd4, 0x80, 0x49, 0x37, 0x60, - 0x0c, 0xe6, 0x16, 0xce, 0x79, 0x69, 0xe1, 0xb0, 0x62, 0x6e, 0xd3, 0xf2, 0x5f, 0xea, 0x28, 0x05, - 0x04, 0xaa, 0xc2, 0xc4, 0x56, 0xd0, 0xf0, 0x3a, 0xfb, 0xcc, 0xce, 0x99, 0xac, 0x8f, 0x9d, 0x1c, - 0x57, 0x0b, 0xdf, 0x75, 0x45, 0x29, 0x7a, 0x01, 0xd3, 0xc9, 0x44, 0x45, 0xe5, 0x69, 0xca, 0xbe, - 0x1d, 0x62, 0xbc, 0x45, 0xb4, 0xb8, 0x4d, 0xa6, 0x5e, 0xe1, 0xe0, 0x6b, 0xac, 0x02, 0xb5, 0x21, - 0xd4, 0x83, 0x6b, 0x4f, 0x88, 0xa4, 0xd9, 0xed, 0xe1, 0xa4, 0xb8, 0x16, 0x45, 0x38, 0x24, 0xb4, - 0x36, 0x56, 0xa9, 0x19, 0x34, 0xc5, 0xf5, 0xaf, 0xa4, 0x27, 0x6d, 0x4f, 0x80, 0xb4, 0x7d, 0x75, - 0x73, 0xe5, 0x13, 0x73, 0xfe, 0x00, 0xa0, 0x44, 0x4c, 0x46, 0x6d, 0xdf, 0x7c, 0x07, 0xa6, 0xd8, - 0x0c, 0x3d, 0xe4, 0xdb, 0x6f, 0xa6, 0x3e, 0x77, 0x72, 0x5c, 0x05, 0x3e, 0x8d, 0x64, 0x0a, 0x13, - 0x00, 0x74, 0x13, 0x26, 0x09, 0x85, 0x7e, 0xb2, 0x81, 0x66, 0x4e, 0x8e, 0xab, 0x93, 0x87, 0xbc, - 0xcc, 0x95, 0xb5, 0xa8, 0x09, 0x13, 0x6b, 0xdf, 0x0c, 0xfc, 0x10, 0x47, 0xdc, 0x73, 0x50, 0xb9, - 0xc5, 0x1c, 0x42, 0xb7, 0x84, 0x43, 0xe8, 0xd6, 0x8e, 0x70, 0x08, 0xd5, 0xaf, 0x71, 0x41, 0x79, - 0x01, 0x33, 0x94, 0x64, 0x4c, 0x3f, 0xfb, 0x6f, 0xd5, 0x82, 0x2b, 0x28, 0xa1, 0xef, 0xc0, 0xf8, - 0xbd, 0x20, 0x3c, 0xf0, 0x62, 0xea, 0x30, 0x98, 0xe2, 0x42, 0x89, 0x96, 0x68, 0x42, 0x89, 0x96, - 0xa0, 0x7b, 0x30, 0xe7, 0x06, 0x87, 0x31, 0xde, 0x09, 0xc4, 0x91, 0xc3, 0x64, 0xd3, 0xd2, 0xc9, - 0x71, 0xb5, 0x12, 0x92, 0x9a, 0x76, 0x1c, 0x64, 0x0f, 0x15, 0x37, 0x85, 0x85, 0xd6, 0x60, 0x4e, - 0xb3, 0xc3, 0xa2, 0xf2, 0x38, 0x5d, 0x20, 0x4c, 0x47, 0xd5, 0xac, 0x37, 0x75, 0x97, 0xa5, 0x90, - 0xd0, 0x96, 0xe9, 0x10, 0x9c, 0xa0, 0x3d, 0x1a, 0x7a, 0xd0, 0x99, 0x8e, 0x39, 0x0c, 0xe7, 0x79, - 0x47, 0xa5, 0xd6, 0x33, 0xc9, 0xad, 0x37, 0x26, 0xc8, 0x53, 0xb5, 0xf5, 0xb7, 0x38, 0x97, 0xaf, - 0xc8, 0xb1, 0x67, 0xf5, 0x20, 0x37, 0x4d, 0x93, 0xc8, 0x15, 0x29, 0x33, 0xa7, 0x68, 0x6f, 0x99, - 0x4f, 0x40, 0xc8, 0x4c, 0x75, 0xc7, 0x49, 0xe9, 0xb9, 0x09, 0x63, 0x4f, 0x22, 0x6f, 0x8f, 0xed, - 0xb7, 0xb9, 0xe5, 0x1b, 0xbc, 0x47, 0xe9, 0xd5, 0x47, 0xdd, 0x48, 0x14, 0xb0, 0x7e, 0x91, 0x9c, - 0x93, 0xd4, 0x47, 0xa6, 0x9e, 0x93, 0xb4, 0x0e, 0x7d, 0x09, 0xc0, 0x7b, 0x45, 0x14, 0xa9, 0x69, - 0xae, 0xda, 0x69, 0x83, 0xac, 0x0d, 0x06, 0xf5, 0x25, 0x3e, 0xbe, 0x4b, 0x72, 0x7c, 0x9a, 0x6a, - 0xe5, 0x2a, 0x44, 0xd0, 0x17, 0x30, 0x43, 0xb7, 0xa3, 0x98, 0xd1, 0x19, 0x3a, 0xa3, 0xd4, 0xd3, - 0x44, 0x77, 0x98, 0x61, 0x3e, 0x35, 0x04, 0xf4, 0xe7, 0x60, 0x81, 0x93, 0x4b, 0x69, 0xb5, 0xb3, - 0x5c, 0x8b, 0xd7, 0xba, 0xa7, 0xc3, 0xd4, 0xdf, 0xe3, 0x3d, 0x75, 0x64, 0x4f, 0xad, 0x7a, 0xae, - 0x6b, 0x6e, 0x06, 0x6d, 0xc0, 0xf9, 0x27, 0x11, 0xd6, 0xc6, 0x30, 0x47, 0x65, 0x1b, 0x55, 0xd0, - 0x0e, 0x23, 0xdc, 0xb6, 0x8d, 0x23, 0x8d, 0x87, 0x5c, 0x40, 0xab, 0x61, 0x30, 0x48, 0xad, 0xf1, - 0xf3, 0x94, 0x23, 0xd4, 0xde, 0xe8, 0x86, 0xc1, 0xa0, 0x6d, 0x5f, 0xe8, 0x06, 0x6c, 0xf4, 0x63, - 0xb8, 0x94, 0xb8, 0x45, 0x56, 0x7d, 0x6f, 0xaf, 0x1f, 0x44, 0xb1, 0xdf, 0xd9, 0x58, 0xa5, 0x1e, - 0x06, 0x2e, 0xd2, 0x12, 0xb7, 0x4a, 0xbb, 0x2b, 0x41, 0x74, 0x91, 0x66, 0xa1, 0xe2, 0x7c, 0x05, - 0x53, 0x72, 0xed, 0xa0, 0x09, 0x18, 0xa9, 0xf5, 0x7a, 0xa5, 0x73, 0xe4, 0x8f, 0x66, 0x73, 0xbd, - 0x54, 0x40, 0x73, 0x00, 0xc9, 0x86, 0x29, 0x15, 0xd1, 0x4c, 0x62, 0x1a, 0x94, 0x46, 0x28, 0xfc, - 0x60, 0x50, 0x1a, 0x45, 0x28, 0x6d, 0x93, 0x94, 0xc6, 0x9c, 0xff, 0x5c, 0xc8, 0xec, 0x2b, 0xa2, - 0x7c, 0x71, 0x33, 0x86, 0x6e, 0x03, 0xa6, 0x61, 0x50, 0xe5, 0x8b, 0x1b, 0x40, 0x4c, 0x7b, 0x50, - 0x81, 0x88, 0xa8, 0xdc, 0x26, 0x4b, 0xa0, 0x13, 0xf4, 0x54, 0x51, 0x39, 0xe0, 0x65, 0xae, 0xac, - 0x45, 0xcb, 0x8a, 0x50, 0x1d, 0x49, 0xb4, 0x27, 0x21, 0x54, 0xd5, 0x0d, 0x26, 0xc5, 0xeb, 0xb2, - 0x62, 0xeb, 0x8c, 0x26, 0x38, 0x86, 0x0d, 0x2d, 0xe1, 0x9c, 0x43, 0xcb, 0x92, 0x45, 0x9f, 0x66, - 0x4c, 0x33, 0x36, 0x42, 0xba, 0x27, 0x53, 0x2b, 0x33, 0x63, 0x75, 0x55, 0x61, 0x6c, 0x33, 0xd8, - 0xf3, 0xfb, 0x7c, 0x90, 0x53, 0x27, 0xc7, 0xd5, 0xb1, 0x1e, 0x29, 0x70, 0x59, 0xb9, 0xf3, 0xaf, - 0x8a, 0xea, 0xf6, 0x95, 0x4a, 0x69, 0xc1, 0xa8, 0x94, 0x7e, 0x07, 0xa6, 0xb8, 0x79, 0xb2, 0xb1, - 0xca, 0x29, 0xd2, 0xe3, 0x48, 0x78, 0x1f, 0xfc, 0xae, 0x9b, 0x00, 0x10, 0x75, 0x82, 0x9d, 0x4d, - 0x54, 0x9d, 0x18, 0x49, 0xd4, 0x09, 0x7e, 0x7a, 0x31, 0x75, 0x22, 0x01, 0x21, 0x13, 0xa9, 0xfa, - 0x6e, 0x47, 0x93, 0x89, 0x54, 0xbd, 0xb4, 0xba, 0x67, 0xf6, 0x13, 0x80, 0xda, 0xd3, 0x26, 0x3d, - 0x4c, 0xdd, 0x2d, 0x7e, 0x84, 0x50, 0xc7, 0xae, 0x77, 0x14, 0xf1, 0xe3, 0x38, 0x54, 0xf5, 0x0e, - 0x05, 0x1a, 0xd5, 0x61, 0xb6, 0xf6, 0x9b, 0x87, 0x21, 0xde, 0xe8, 0xe2, 0x7e, 0xec, 0xc7, 0x4c, - 0xc1, 0x9a, 0xe2, 0x7e, 0x3f, 0x52, 0xd1, 0xf6, 0x79, 0x8d, 0x42, 0x40, 0x47, 0x71, 0x7a, 0x30, - 0x77, 0x1f, 0xc7, 0x64, 0xe6, 0xc5, 0x99, 0x9d, 0xcf, 0xc2, 0xcf, 0x60, 0xfa, 0xa9, 0x1f, 0xef, - 0xeb, 0x96, 0x02, 0xed, 0xf0, 0x91, 0x1f, 0xef, 0x0b, 0x4b, 0x41, 0x69, 0x4f, 0x05, 0x77, 0xd6, - 0xe0, 0x3c, 0x6f, 0x4d, 0xaa, 0x08, 0xcb, 0x3a, 0xc1, 0x42, 0x62, 0x7a, 0xa8, 0x04, 0x75, 0x32, - 0x7f, 0x54, 0x84, 0x85, 0xc6, 0xbe, 0xd7, 0xdf, 0xc3, 0xdb, 0x5e, 0x14, 0x1d, 0x05, 0x61, 0x57, - 0xe9, 0x3c, 0x75, 0x74, 0x67, 0x3a, 0x4f, 0xbd, 0xd9, 0xcb, 0x30, 0xfd, 0xb8, 0xd7, 0x15, 0x38, - 0xb4, 0xf3, 0x33, 0xac, 0xad, 0xa0, 0xd7, 0x6d, 0x0f, 0x04, 0x2d, 0x15, 0x88, 0xe0, 0x6c, 0xe1, - 0x23, 0x89, 0x33, 0x92, 0xe0, 0xf4, 0xf1, 0x91, 0x82, 0xa3, 0x00, 0xa1, 0x35, 0xb8, 0xd0, 0xc4, - 0x9d, 0xa0, 0xdf, 0xbd, 0xe7, 0x75, 0xe2, 0x20, 0x64, 0xfe, 0xbe, 0xd1, 0xe4, 0x78, 0x8b, 0x68, - 0x65, 0xfb, 0x19, 0xad, 0x65, 0x6e, 0x3e, 0x37, 0x8b, 0x81, 0x1e, 0x53, 0x6f, 0x21, 0xbd, 0x2e, - 0xe2, 0xf7, 0x0c, 0x6f, 0xdf, 0x92, 0xf7, 0x47, 0x8d, 0x10, 0xd3, 0x39, 0xf4, 0x7a, 0x52, 0x0b, - 0x73, 0x71, 0x34, 0x08, 0xfa, 0x11, 0x66, 0xb2, 0x40, 0x40, 0xba, 0x92, 0x88, 0x83, 0xd3, 0xba, - 0x06, 0x6a, 0x66, 0xb4, 0x0f, 0x66, 0x6e, 0xda, 0x7c, 0xca, 0x74, 0xd3, 0xa6, 0x84, 0x75, 0x5a, - 0x17, 0x71, 0x9e, 0xc0, 0xec, 0x76, 0xef, 0x70, 0xcf, 0xef, 0x13, 0xe1, 0xd0, 0xc4, 0x3f, 0x45, - 0xab, 0x00, 0x49, 0x01, 0x6f, 0x41, 0x78, 0x1a, 0x92, 0x8a, 0xd6, 0x0a, 0xdf, 0x5e, 0xb4, 0x84, - 0xaa, 0x0f, 0xae, 0x82, 0xe7, 0xfc, 0x95, 0x11, 0x40, 0xbc, 0x8d, 0x66, 0xec, 0xc5, 0xb8, 0x89, - 0x63, 0xa2, 0xa9, 0x5c, 0x82, 0xa2, 0xb4, 0xcb, 0xc6, 0x4f, 0x8e, 0xab, 0x45, 0xbf, 0xeb, 0x16, - 0x37, 0x56, 0xd1, 0xfb, 0x30, 0x46, 0xc1, 0xe8, 0x34, 0xcf, 0xc9, 0xf6, 0x54, 0x0a, 0x4c, 0x9e, - 0x44, 0xe4, 0x4f, 0x97, 0x01, 0xa3, 0x0f, 0x60, 0x6a, 0x15, 0xf7, 0xf0, 0x9e, 0x17, 0x07, 0x62, - 0xcf, 0x33, 0x4b, 0x47, 0x14, 0x2a, 0x4b, 0x3b, 0x81, 0x24, 0xba, 0xa3, 0x8b, 0xbd, 0x28, 0xe8, - 0xab, 0xba, 0x63, 0x48, 0x4b, 0x54, 0xdd, 0x91, 0xc1, 0xa0, 0xdf, 0x2b, 0xc0, 0x74, 0xad, 0xdf, - 0xe7, 0x16, 0x44, 0xc4, 0x27, 0x77, 0xe1, 0x96, 0xbc, 0xed, 0xdb, 0xf4, 0x76, 0x71, 0xaf, 0x45, - 0x6c, 0xd2, 0xa8, 0xfe, 0x35, 0x39, 0xce, 0xff, 0xeb, 0x71, 0xf5, 0xd3, 0x33, 0xd8, 0x04, 0xc9, - 0xbd, 0xe1, 0x4e, 0xe8, 0xf9, 0x71, 0x44, 0x3d, 0xf6, 0x49, 0x83, 0xea, 0xf6, 0x54, 0xfa, 0x81, - 0xde, 0x85, 0x31, 0x66, 0xa3, 0x30, 0x15, 0x94, 0x4e, 0x76, 0xca, 0x38, 0x71, 0x19, 0x84, 0xf3, - 0x16, 0x4c, 0x71, 0x4e, 0x6e, 0xac, 0xda, 0xa6, 0xc0, 0x69, 0xc0, 0xd5, 0xfb, 0x38, 0x76, 0x71, - 0x84, 0x63, 0xb1, 0x37, 0xe8, 0xca, 0x4e, 0xcc, 0xea, 0x09, 0xfa, 0x5b, 0x22, 0xd3, 0xf9, 0x60, - 0xfb, 0x41, 0xd4, 0x38, 0x7f, 0xa9, 0x00, 0xd5, 0x46, 0x88, 0xc9, 0x1c, 0x59, 0x09, 0xe5, 0xcb, - 0xac, 0xab, 0xfc, 0x02, 0xb4, 0x98, 0xd4, 0x12, 0x2e, 0xf1, 0x4b, 0xce, 0xb7, 0x61, 0x64, 0x67, - 0x67, 0x93, 0xce, 0xf5, 0x08, 0x1d, 0xf2, 0x48, 0x1c, 0xf7, 0x7e, 0x79, 0x5c, 0x9d, 0x5c, 0x3d, - 0x64, 0x17, 0xa4, 0x2e, 0xa9, 0x77, 0x9e, 0xc1, 0x82, 0x8b, 0xfb, 0xf8, 0x88, 0x58, 0x40, 0x9a, - 0x8d, 0x53, 0x85, 0x31, 0xb6, 0xc1, 0x33, 0x43, 0x60, 0xe5, 0xba, 0x11, 0x54, 0x1c, 0x62, 0x04, - 0x39, 0xff, 0xa4, 0x08, 0x25, 0x36, 0xdc, 0x7a, 0x10, 0x9f, 0x6e, 0x7c, 0x7c, 0x04, 0xc5, 0xfc, - 0x11, 0xa0, 0x77, 0x12, 0x6e, 0x8f, 0x24, 0x2a, 0x03, 0xed, 0x2a, 0x39, 0xf9, 0x44, 0x25, 0x19, - 0x10, 0x5b, 0x05, 0xcc, 0x6b, 0x40, 0x07, 0x44, 0x57, 0x01, 0x9f, 0x7b, 0xf4, 0xbb, 0x05, 0x18, - 0x67, 0xeb, 0x2a, 0x7f, 0xe5, 0x3e, 0x7d, 0x33, 0x2b, 0xb7, 0x14, 0xd3, 0xbf, 0xd4, 0x7d, 0xc4, - 0xea, 0x9c, 0x7f, 0x56, 0x84, 0x0b, 0x0a, 0xaf, 0x98, 0xf4, 0x43, 0xef, 0x32, 0x8d, 0x47, 0x61, - 0x18, 0xf5, 0xc3, 0x10, 0x8d, 0xa7, 0x9d, 0xd8, 0x91, 0x94, 0x73, 0xef, 0xc2, 0x24, 0x19, 0x52, - 0xda, 0x65, 0x43, 0xcf, 0x5d, 0x06, 0x2a, 0xaa, 0x4f, 0xcd, 0xbd, 0xdb, 0x30, 0x49, 0xff, 0x24, - 0x33, 0x32, 0x6a, 0x9f, 0x11, 0x09, 0x84, 0x7c, 0x80, 0x07, 0x81, 0xdf, 0x7f, 0x84, 0xe3, 0xfd, - 0x40, 0x38, 0xb8, 0x36, 0x88, 0x1c, 0xfc, 0x33, 0x81, 0xdf, 0x6f, 0x1f, 0xd0, 0xe2, 0xb3, 0xba, - 0x04, 0x12, 0x82, 0xae, 0x42, 0xdc, 0xb9, 0x03, 0x25, 0x22, 0xb2, 0x4e, 0xbf, 0xb4, 0x9c, 0x79, - 0x40, 0xf7, 0x71, 0x5c, 0x0f, 0xb4, 0x33, 0xdb, 0x99, 0x85, 0xe9, 0x6d, 0xbf, 0xbf, 0x27, 0x7e, - 0xfe, 0x97, 0x11, 0x98, 0x61, 0xbf, 0xf9, 0x0c, 0xa4, 0x14, 0xa1, 0xc2, 0x69, 0x14, 0xa1, 0x8f, - 0x60, 0x96, 0xbb, 0x81, 0x71, 0x48, 0x1d, 0xd2, 0x6c, 0x3e, 0xa8, 0xd7, 0x87, 0xb9, 0x81, 0xdb, - 0x2f, 0x58, 0x8d, 0xab, 0x03, 0xa2, 0x4d, 0x98, 0x63, 0x05, 0xf7, 0xb0, 0x17, 0x1f, 0x26, 0x3e, - 0x81, 0xf3, 0xdc, 0x4a, 0x12, 0xc5, 0x4c, 0x9e, 0x71, 0x5a, 0xcf, 0x78, 0xa1, 0x9b, 0xc2, 0x45, - 0x5f, 0xc0, 0xf9, 0xed, 0x30, 0xf8, 0xe6, 0xa5, 0xa2, 0xfa, 0x31, 0x91, 0xbe, 0x70, 0x72, 0x5c, - 0xbd, 0x30, 0x20, 0x55, 0x6d, 0x55, 0x01, 0x4c, 0x43, 0x93, 0x35, 0xb5, 0x11, 0xd5, 0x83, 0xd0, - 0xef, 0xef, 0xd1, 0xd9, 0x9c, 0x64, 0x6b, 0xca, 0x8f, 0xda, 0xbb, 0xb4, 0xd0, 0x95, 0xd5, 0xe8, - 0x73, 0x38, 0xbf, 0xe9, 0x77, 0x70, 0x3f, 0xc2, 0x4f, 0xbd, 0xb0, 0xef, 0xf7, 0xf7, 0x84, 0xe4, - 0xa5, 0xc7, 0x47, 0x8f, 0x55, 0xb5, 0x8f, 0x78, 0x9d, 0x9b, 0x06, 0x4e, 0x39, 0xbc, 0x26, 0x86, - 0x3b, 0xbc, 0xee, 0x00, 0x6c, 0x06, 0x5e, 0xb7, 0xd6, 0xeb, 0x35, 0x6a, 0x11, 0x35, 0xe8, 0x55, - 0x37, 0xaf, 0xd7, 0xeb, 0xb5, 0x3b, 0x5e, 0xe4, 0x2a, 0x30, 0xce, 0xff, 0x1a, 0x81, 0x49, 0xc9, - 0x9b, 0x5b, 0xaa, 0xe1, 0xc3, 0x55, 0x35, 0x2a, 0xca, 0x12, 0xef, 0x82, 0xab, 0x40, 0xa0, 0xcb, - 0xec, 0x72, 0x82, 0x29, 0x89, 0x13, 0x64, 0x1b, 0x78, 0x83, 0x01, 0xbb, 0x82, 0xb8, 0x04, 0xc5, - 0xd5, 0x3a, 0x9d, 0xa8, 0x49, 0x76, 0x64, 0x74, 0x77, 0xdd, 0xe2, 0x6a, 0x9d, 0x2c, 0xc7, 0xc7, - 0x1b, 0xab, 0x0d, 0xca, 0xf3, 0x49, 0xb6, 0x1c, 0x03, 0xbf, 0xdb, 0x71, 0x69, 0x29, 0xa9, 0x6d, - 0xd6, 0x1e, 0x6d, 0x72, 0xbe, 0xd2, 0xda, 0xc8, 0x3b, 0xe8, 0xb9, 0xb4, 0x94, 0x58, 0x1a, 0x4c, - 0x13, 0x69, 0x04, 0xfd, 0x38, 0x0c, 0x7a, 0x11, 0x55, 0x88, 0x27, 0x35, 0xa5, 0xa5, 0xc3, 0xab, - 0xdc, 0x14, 0x28, 0x7a, 0x0a, 0x8b, 0xb5, 0xee, 0x0b, 0xaf, 0xdf, 0xc1, 0x5d, 0x56, 0xf3, 0x34, - 0x08, 0x9f, 0x3f, 0xeb, 0x05, 0x47, 0x11, 0x65, 0xec, 0x24, 0x77, 0xc8, 0x70, 0x10, 0x61, 0xb0, - 0x1e, 0x09, 0x20, 0xd7, 0x86, 0x4d, 0xc4, 0x69, 0xa3, 0x17, 0x1c, 0x76, 0x39, 0xbb, 0xa9, 0x38, - 0xed, 0x90, 0x02, 0x97, 0x95, 0x13, 0x2e, 0xad, 0x37, 0x1f, 0x51, 0xf7, 0x07, 0xe7, 0xd2, 0x7e, - 0x74, 0xe0, 0x92, 0x32, 0xf4, 0x36, 0x4c, 0x08, 0xa3, 0x89, 0xf9, 0x16, 0xa9, 0xe3, 0x59, 0x18, - 0x4b, 0xa2, 0x8e, 0xec, 0x1d, 0x17, 0x77, 0x82, 0x17, 0x38, 0x7c, 0xd9, 0x08, 0xba, 0x58, 0x18, - 0xeb, 0x2c, 0x3e, 0x83, 0x57, 0xb4, 0x3b, 0xa4, 0xc6, 0xd5, 0x01, 0x1f, 0x8c, 0x4e, 0x4e, 0x97, - 0x66, 0x1e, 0x8c, 0x4e, 0xce, 0x94, 0x66, 0x1f, 0x8c, 0x4e, 0xce, 0x96, 0xe6, 0x9c, 0xbb, 0x70, - 0x81, 0xc9, 0x88, 0x53, 0xdb, 0x04, 0xce, 0x36, 0x40, 0x13, 0x1f, 0x78, 0x83, 0xfd, 0x80, 0x2c, - 0x92, 0xba, 0xfa, 0x8b, 0x2b, 0x7b, 0x48, 0x5e, 0x02, 0xf3, 0x8a, 0xd6, 0x8a, 0xb0, 0xbc, 0x04, - 0xa4, 0xab, 0x60, 0x39, 0xff, 0xb1, 0x08, 0x88, 0x5e, 0x86, 0x36, 0xe3, 0x10, 0x7b, 0x07, 0xa2, - 0x1b, 0x1f, 0xc3, 0x0c, 0x13, 0xf7, 0xac, 0x98, 0x76, 0x87, 0x68, 0x92, 0x6c, 0x9f, 0xab, 0x55, - 0xeb, 0xe7, 0x5c, 0x0d, 0x94, 0xa0, 0xba, 0x38, 0x3a, 0x3c, 0x10, 0xa8, 0x45, 0x0d, 0x55, 0xad, - 0x22, 0xa8, 0xea, 0x6f, 0xf4, 0x05, 0xcc, 0x35, 0x82, 0x83, 0x01, 0xe1, 0x09, 0x47, 0x1e, 0xe1, - 0xa7, 0x1e, 0x6f, 0x57, 0xab, 0x5c, 0x3f, 0xe7, 0xa6, 0xc0, 0xd1, 0x16, 0x5c, 0xbc, 0xd7, 0x3b, - 0x8c, 0xf6, 0x6b, 0xfd, 0x6e, 0xa3, 0x17, 0x44, 0x82, 0xca, 0x28, 0xf7, 0x5c, 0x72, 0x29, 0x95, - 0x85, 0x58, 0x3f, 0xe7, 0x9a, 0x10, 0xd1, 0xdb, 0x3c, 0xb2, 0x8b, 0x9f, 0xbe, 0xb3, 0xb7, 0x78, - 0xe0, 0xd7, 0xe3, 0x3e, 0x7e, 0xfc, 0x6c, 0xfd, 0x9c, 0xcb, 0x6a, 0xeb, 0x53, 0x30, 0x21, 0x24, - 0xf4, 0x6d, 0xb8, 0xa0, 0xb0, 0x93, 0x68, 0xba, 0x87, 0x11, 0xaa, 0xc0, 0xe4, 0x93, 0x01, 0xd9, - 0xf8, 0x42, 0xfd, 0x72, 0xe5, 0x6f, 0xe7, 0x3b, 0x3a, 0xa7, 0xd1, 0x55, 0xd5, 0x72, 0x66, 0xc0, - 0x49, 0x81, 0xb3, 0xae, 0x33, 0x37, 0x1f, 0x5a, 0x6b, 0xb7, 0x98, 0x6a, 0xb7, 0x94, 0xe6, 0xb5, - 0xb3, 0x60, 0x64, 0x9e, 0xf3, 0x15, 0x2c, 0x3d, 0x19, 0x10, 0xbb, 0xa7, 0x36, 0x18, 0xf4, 0xfc, - 0x0e, 0x3d, 0x0b, 0x99, 0x24, 0x17, 0x8b, 0xe5, 0x7b, 0x32, 0x6c, 0xa8, 0x60, 0xbd, 0x64, 0x85, - 0x93, 0xe3, 0xea, 0x38, 0x3b, 0x11, 0x44, 0xb4, 0x90, 0xf3, 0xb3, 0x02, 0x2c, 0xb1, 0x1d, 0x60, - 0x25, 0xfd, 0x6b, 0x6a, 0x70, 0x93, 0xa2, 0x62, 0xc8, 0x50, 0x26, 0x35, 0x7c, 0x29, 0xb9, 0x3b, - 0x2a, 0xda, 0xef, 0x8e, 0x72, 0x2f, 0xd3, 0x9c, 0x2f, 0xc1, 0xe1, 0x3d, 0xea, 0xf5, 0x32, 0x9d, - 0x8a, 0x5e, 0xa5, 0x57, 0xce, 0xff, 0x2c, 0xc2, 0xe2, 0x7d, 0xdc, 0xc7, 0xa1, 0x47, 0xc7, 0xa9, - 0x69, 0xd3, 0xaa, 0x1f, 0xbe, 0x90, 0xeb, 0x87, 0x97, 0xaa, 0x62, 0xd1, 0xa2, 0x2a, 0x5e, 0x86, - 0x91, 0x27, 0xee, 0x06, 0x1f, 0x16, 0x95, 0x6d, 0x87, 0xa1, 0xef, 0x92, 0x32, 0xb4, 0x91, 0xf8, - 0xf0, 0x47, 0x87, 0xfa, 0xf0, 0x2f, 0x72, 0x9f, 0xe6, 0x04, 0xf7, 0xe1, 0xeb, 0x9e, 0xfb, 0x2d, - 0x45, 0x1f, 0x25, 0xe2, 0xe6, 0x3d, 0xbe, 0xa7, 0x2c, 0x03, 0xe4, 0xaa, 0x25, 0xbb, 0x7a, 0xa4, - 0x4b, 0x80, 0x69, 0x98, 0x42, 0xaf, 0xac, 0x7c, 0x09, 0xd3, 0x0a, 0x88, 0xe1, 0xfa, 0xf0, 0x3b, - 0xea, 0xf5, 0x21, 0xb1, 0x96, 0xa5, 0xd6, 0xda, 0x8c, 0xc9, 0xc9, 0xce, 0x14, 0x60, 0xf5, 0x5a, - 0xf1, 0x53, 0x28, 0x67, 0x7b, 0xc3, 0xd5, 0xa5, 0x61, 0x16, 0x84, 0xb3, 0x0a, 0xf3, 0xf7, 0x71, - 0x9c, 0x44, 0x56, 0x29, 0xd7, 0x2b, 0xa9, 0x7d, 0x96, 0xe3, 0xcf, 0x72, 0x9a, 0xb0, 0x90, 0xa2, - 0xc2, 0xdb, 0xff, 0x04, 0x26, 0x44, 0x14, 0x40, 0xc1, 0x1e, 0x05, 0x40, 0xd7, 0x2d, 0xa7, 0xec, - 0x0a, 0x04, 0xe7, 0x29, 0x5c, 0xd2, 0x88, 0x46, 0x92, 0xea, 0xf7, 0x61, 0x52, 0x94, 0xa5, 0x4c, - 0x7e, 0x8d, 0x2c, 0x5d, 0x5a, 0x91, 0x40, 0x96, 0x28, 0xce, 0x3e, 0x5c, 0xda, 0xf4, 0x23, 0x9d, - 0x32, 0x1b, 0xf5, 0x15, 0x98, 0x1a, 0x78, 0x7b, 0xb8, 0x1d, 0xf9, 0xbf, 0xc9, 0xd6, 0xe7, 0x98, - 0x3b, 0x49, 0x0a, 0x9a, 0xfe, 0x6f, 0x62, 0x74, 0x0d, 0x80, 0x56, 0x52, 0xfe, 0x71, 0xf1, 0x42, - 0xc1, 0x99, 0x2d, 0x86, 0x60, 0x94, 0x2c, 0x63, 0xb6, 0x20, 0x5d, 0xfa, 0xb7, 0x13, 0xc2, 0x62, - 0xa6, 0x25, 0x3e, 0x86, 0xdb, 0x20, 0xbb, 0x96, 0x33, 0x06, 0x57, 0x02, 0xa1, 0x77, 0xe0, 0x7c, - 0x1f, 0x7f, 0x13, 0xb7, 0x33, 0x7d, 0x98, 0x25, 0xc5, 0xdb, 0xa2, 0x1f, 0xce, 0x6f, 0x50, 0xcb, - 0x38, 0x1d, 0x34, 0xf1, 0xc6, 0x98, 0xf7, 0xf7, 0x8a, 0xb0, 0xc8, 0xe4, 0x77, 0x76, 0xd1, 0x9c, - 0x7e, 0x77, 0xff, 0x4a, 0x1c, 0xa0, 0x77, 0x0c, 0x0e, 0x50, 0x8a, 0xa2, 0x3a, 0x40, 0x35, 0xb7, - 0xe7, 0x47, 0x66, 0xb7, 0x27, 0xd5, 0x76, 0x74, 0xb7, 0x67, 0xca, 0xd9, 0xf9, 0x60, 0x74, 0xb2, - 0x58, 0x1a, 0x71, 0x5a, 0x50, 0xce, 0xf2, 0xe6, 0x0d, 0x6c, 0x85, 0x7f, 0x51, 0x80, 0x6b, 0xfc, - 0xd0, 0x4c, 0xcd, 0xeb, 0xd9, 0x59, 0xff, 0x01, 0xcc, 0x70, 0xdc, 0x9d, 0x64, 0x11, 0xb1, 0x88, - 0x1e, 0xb1, 0xb9, 0x99, 0x84, 0xd0, 0xc0, 0xd0, 0x07, 0x8a, 0xf1, 0xc9, 0x1c, 0x1a, 0x97, 0xc9, - 0x09, 0xc0, 0xac, 0x54, 0xab, 0x09, 0xea, 0x7c, 0x0d, 0x4b, 0xb6, 0x8e, 0xbf, 0x01, 0xbe, 0x3c, - 0x80, 0x8a, 0x61, 0xad, 0xbf, 0x9a, 0x0c, 0xfb, 0x01, 0x5c, 0x31, 0xd2, 0x7a, 0x03, 0xdd, 0xbc, - 0x0f, 0x8b, 0xf2, 0xd8, 0x7f, 0xad, 0x3e, 0x3e, 0x82, 0x6b, 0x8c, 0xd0, 0x9b, 0x19, 0xf2, 0x3a, - 0x5c, 0x4d, 0x14, 0x72, 0x83, 0x38, 0x3c, 0xf5, 0xa2, 0xe2, 0x07, 0x40, 0xc2, 0x8a, 0x37, 0x78, - 0x00, 0x24, 0x80, 0x6f, 0x4c, 0x86, 0x6d, 0xc0, 0x45, 0x46, 0x58, 0x3f, 0x2c, 0x97, 0xd5, 0xc3, - 0xd2, 0x18, 0x3f, 0x9b, 0x3d, 0x3f, 0x1f, 0xd1, 0xf3, 0x53, 0x80, 0x24, 0x3d, 0xfc, 0x00, 0xc6, - 0xf9, 0x13, 0x01, 0xd6, 0x3f, 0x03, 0x31, 0xa6, 0x1e, 0x30, 0x34, 0x0e, 0xec, 0x3c, 0x86, 0x32, - 0xd3, 0x3d, 0x89, 0xa9, 0xcb, 0x6f, 0xe5, 0xc4, 0x6c, 0xac, 0xa4, 0xb4, 0xce, 0x4c, 0xb0, 0xba, - 0x49, 0xe5, 0xfc, 0x08, 0xca, 0x6c, 0x8a, 0x0d, 0x04, 0x85, 0x66, 0x58, 0x34, 0x6a, 0x86, 0x4b, - 0x62, 0x71, 0xd4, 0x7a, 0x3d, 0x05, 0x59, 0x7a, 0x6a, 0x7e, 0x0c, 0xd7, 0x92, 0xae, 0xaa, 0x51, - 0x73, 0x82, 0xfc, 0xf7, 0x53, 0xfd, 0xcd, 0x09, 0xce, 0x33, 0xf5, 0x7c, 0x57, 0xac, 0x75, 0x1b, - 0xfd, 0x53, 0x45, 0x4e, 0xe5, 0x8f, 0xf1, 0x2d, 0xb8, 0xa1, 0x8d, 0x51, 0x6d, 0x46, 0x0e, 0xf4, - 0x87, 0x70, 0x85, 0x0d, 0x54, 0x8f, 0xe1, 0x16, 0xdd, 0xf8, 0x34, 0x35, 0x4c, 0x6b, 0x90, 0xb8, - 0x69, 0x90, 0x7f, 0xbd, 0x00, 0x57, 0x58, 0x0f, 0xcc, 0xc4, 0x7f, 0xd5, 0xe6, 0xc0, 0x16, 0x54, - 0x25, 0x43, 0xf4, 0x1e, 0xbd, 0x9a, 0x2d, 0x50, 0x85, 0x6b, 0x44, 0x87, 0xd3, 0x89, 0xa9, 0xab, - 0xe8, 0x11, 0x2c, 0xa4, 0xaa, 0x5a, 0x77, 0x89, 0xca, 0x84, 0xde, 0x27, 0x5b, 0x9c, 0xc1, 0xf2, - 0x2d, 0x54, 0x36, 0x30, 0x96, 0xc2, 0xbb, 0x12, 0xd2, 0x69, 0xc3, 0xd5, 0xec, 0x5c, 0x29, 0x4b, - 0xfe, 0x0b, 0x22, 0x8e, 0x58, 0xf4, 0x30, 0x9b, 0x2d, 0x2b, 0x51, 0x21, 0x93, 0x18, 0xba, 0xc0, - 0x72, 0x1c, 0xb8, 0x6e, 0x64, 0x90, 0x3a, 0xa6, 0x7f, 0x5e, 0x00, 0x24, 0xea, 0x1a, 0x4d, 0x57, - 0xb4, 0x7d, 0x19, 0x46, 0x1a, 0x4d, 0x97, 0xc7, 0x2a, 0x51, 0x83, 0xa5, 0x13, 0x85, 0x2e, 0x29, - 0x4b, 0x6b, 0x37, 0xc5, 0xd3, 0x68, 0x37, 0x1b, 0x80, 0x9a, 0xfe, 0x5e, 0xff, 0xa9, 0x1f, 0xef, - 0xcb, 0xc6, 0x6a, 0xdc, 0xed, 0x45, 0x5f, 0x0d, 0x44, 0xfe, 0x5e, 0xbf, 0x4d, 0x6f, 0x3a, 0xe5, - 0xcb, 0x84, 0x8e, 0xe7, 0x1a, 0x90, 0x9c, 0x1f, 0xc1, 0x45, 0xad, 0xbf, 0x5c, 0x86, 0x5d, 0x85, - 0xd1, 0x06, 0x0e, 0x63, 0xde, 0x63, 0xba, 0x54, 0x3a, 0x38, 0x8c, 0x5d, 0x5a, 0x8a, 0xde, 0x81, - 0x89, 0x46, 0x8d, 0x5e, 0x57, 0x50, 0x13, 0x6d, 0x86, 0x49, 0xdb, 0x8e, 0xd7, 0xa6, 0x2f, 0xe0, - 0x5c, 0x51, 0xe9, 0xfc, 0xa3, 0x51, 0x85, 0x3a, 0x41, 0x1f, 0xce, 0x8e, 0xbb, 0x00, 0x6c, 0xd1, - 0x29, 0xdc, 0x20, 0x0a, 0xca, 0x34, 0xf7, 0xb0, 0xb2, 0x03, 0xc9, 0x55, 0x80, 0x4e, 0x79, 0xd5, - 0x22, 0x02, 0x22, 0x18, 0x92, 0xb8, 0x86, 0x90, 0x01, 0x11, 0x9c, 0x74, 0xe4, 0xaa, 0x40, 0xe8, - 0xc7, 0x30, 0xcb, 0xfb, 0xcc, 0x3b, 0x34, 0x46, 0x6f, 0xfd, 0xbe, 0xc5, 0x2d, 0x41, 0xc3, 0xd8, - 0x6e, 0x49, 0x78, 0xe1, 0x28, 0xe3, 0x3f, 0xd9, 0x34, 0xea, 0xe4, 0xd0, 0x11, 0x2c, 0x10, 0x5c, - 0xff, 0x19, 0xb1, 0xbd, 0xf1, 0xda, 0x37, 0x31, 0xee, 0xb3, 0x93, 0x6d, 0x9c, 0xb6, 0xf3, 0x76, - 0x4e, 0x3b, 0x09, 0x30, 0x7f, 0xb2, 0x95, 0xd0, 0x69, 0x63, 0x59, 0xe7, 0x9a, 0xe9, 0xd3, 0x55, - 0xe7, 0x6e, 0xae, 0xf5, 0xbb, 0x83, 0xc0, 0xef, 0xc7, 0xdc, 0xc9, 0xcb, 0x56, 0x5d, 0xd8, 0x6b, - 0x63, 0x5e, 0xee, 0xaa, 0x40, 0xce, 0x3b, 0xf2, 0x72, 0x0e, 0x87, 0xe8, 0x3c, 0x4c, 0x3f, 0xd9, - 0x6a, 0x6e, 0xaf, 0x35, 0x36, 0xee, 0x6d, 0xac, 0xad, 0x96, 0xce, 0xa1, 0x49, 0x18, 0xdd, 0x69, - 0xec, 0x6c, 0x96, 0x0a, 0xce, 0x6d, 0x00, 0xa5, 0x25, 0x80, 0xf1, 0xad, 0xc7, 0xee, 0xa3, 0xda, - 0x66, 0xe9, 0x1c, 0x5a, 0x80, 0x0b, 0x4f, 0x37, 0xb6, 0x56, 0x1f, 0x3f, 0x6d, 0xb6, 0x9b, 0x8f, - 0x6a, 0xee, 0x4e, 0xa3, 0xe6, 0xae, 0x96, 0x0a, 0xce, 0xd7, 0x30, 0xaf, 0x8f, 0xf0, 0x8d, 0x2e, - 0xc2, 0x18, 0x2e, 0x4a, 0x95, 0xe9, 0xc1, 0xd3, 0x1d, 0x25, 0x42, 0xa0, 0xd6, 0xe9, 0x04, 0x87, - 0xfd, 0x38, 0x7d, 0x9b, 0xe0, 0xb1, 0x62, 0xbe, 0xef, 0x14, 0x20, 0xed, 0x0e, 0xa8, 0x98, 0x7b, - 0x07, 0xe4, 0x7c, 0x08, 0xf3, 0x7a, 0xab, 0xa7, 0xb5, 0xca, 0xbf, 0x45, 0x43, 0x27, 0x94, 0x60, - 0x27, 0x62, 0x5d, 0x26, 0x5d, 0xe4, 0xc2, 0xfa, 0x43, 0x28, 0x71, 0xa8, 0x44, 0xef, 0x78, 0x4b, - 0xb8, 0x4d, 0x98, 0xcc, 0xd4, 0x9f, 0xd5, 0x89, 0x1b, 0xd6, 0x6f, 0x0b, 0x47, 0xec, 0xb0, 0x16, - 0xfe, 0x4e, 0x01, 0xca, 0x8f, 0xee, 0xd5, 0x6a, 0x87, 0xf1, 0x3e, 0xb1, 0x73, 0xc8, 0xfa, 0x69, - 0xec, 0x7b, 0xbd, 0x1e, 0xee, 0xef, 0x61, 0x74, 0x13, 0x46, 0x77, 0x1e, 0xef, 0x6c, 0x73, 0x47, - 0xc5, 0x3c, 0x5f, 0xa6, 0xa4, 0x48, 0xc2, 0xb8, 0x14, 0x02, 0x3d, 0x84, 0x0b, 0x22, 0x50, 0x40, - 0x56, 0x71, 0x4f, 0xe7, 0xb5, 0xfc, 0xb0, 0x83, 0x2c, 0xde, 0x83, 0xd1, 0xc9, 0x42, 0xa9, 0xe8, - 0xfc, 0x5e, 0x01, 0x16, 0x53, 0x3d, 0x53, 0x6e, 0xe9, 0xd4, 0x8e, 0x5d, 0x54, 0x3a, 0x26, 0x40, - 0xd6, 0xcf, 0xf1, 0x9e, 0x35, 0x94, 0x38, 0x88, 0x91, 0x33, 0xc4, 0x41, 0xf0, 0x07, 0x53, 0x14, - 0x8e, 0x87, 0xda, 0xd3, 0x72, 0xe7, 0x3c, 0xcc, 0x6a, 0x1c, 0x70, 0x1c, 0x98, 0x51, 0x5b, 0x26, - 0x6c, 0x6e, 0x04, 0x5d, 0xc9, 0x66, 0xf2, 0xb7, 0xf3, 0x37, 0x0b, 0x30, 0xff, 0xe8, 0x5e, 0xcd, - 0xc5, 0x7b, 0x3e, 0xd9, 0x57, 0x09, 0x8b, 0x97, 0xb5, 0x91, 0x5c, 0xd5, 0x46, 0x92, 0x82, 0x95, - 0x43, 0xfa, 0x24, 0x33, 0xa4, 0xab, 0xa6, 0x21, 0x51, 0xab, 0xcc, 0x0f, 0xfa, 0xda, 0x48, 0x14, - 0xbf, 0xee, 0xdf, 0x2d, 0xc0, 0x45, 0xa5, 0x4f, 0xb2, 0xff, 0x77, 0xb5, 0x2e, 0x5d, 0x31, 0x74, - 0x29, 0xc3, 0xe4, 0x7a, 0xa6, 0x47, 0xdf, 0xca, 0xeb, 0xd1, 0x50, 0x1e, 0xff, 0x49, 0x01, 0x16, - 0x8c, 0x3c, 0x40, 0x97, 0x88, 0x2e, 0xd6, 0x09, 0x71, 0xcc, 0xd9, 0xcb, 0x7f, 0x91, 0xf2, 0x8d, - 0x28, 0x3a, 0xe4, 0xaf, 0x8c, 0xa7, 0x5c, 0xfe, 0x0b, 0x7d, 0x0b, 0x66, 0xb7, 0x71, 0xe8, 0x07, - 0x5d, 0x16, 0x21, 0xc3, 0xae, 0xf7, 0x66, 0x5d, 0xbd, 0x10, 0x5d, 0x85, 0xa9, 0x5a, 0x6f, 0x2f, - 0x08, 0xfd, 0x78, 0x9f, 0xb9, 0xd6, 0xa7, 0xdc, 0xa4, 0x80, 0xd0, 0x5e, 0xf5, 0xf7, 0xc4, 0x8d, - 0xf5, 0xac, 0xcb, 0x7f, 0xa1, 0x32, 0x4c, 0x70, 0xb1, 0xc1, 0xbc, 0x08, 0xae, 0xf8, 0x49, 0x30, - 0xbe, 0x74, 0xe9, 0x22, 0xa0, 0xe1, 0xe7, 0x2e, 0xff, 0xe5, 0xbc, 0x07, 0xf3, 0x26, 0x3e, 0x1a, - 0x97, 0xcc, 0x5f, 0x28, 0xc2, 0xc5, 0x5a, 0xb7, 0xfb, 0xe8, 0x5e, 0x6d, 0x15, 0xab, 0x0a, 0xce, - 0xfb, 0x30, 0xba, 0xd1, 0xf7, 0x63, 0xae, 0xdd, 0x2c, 0xf1, 0xe9, 0x31, 0x40, 0x12, 0x28, 0x32, - 0x43, 0xe4, 0x7f, 0xe4, 0xc2, 0xc5, 0xb5, 0x6f, 0xfc, 0x28, 0xf6, 0xfb, 0x7b, 0x74, 0xce, 0x59, - 0xc3, 0x7c, 0x8e, 0x05, 0x11, 0xcb, 0x76, 0x5b, 0x3f, 0xe7, 0x9a, 0x90, 0xd1, 0x0e, 0x5c, 0xda, - 0xc2, 0x47, 0x86, 0x25, 0x24, 0xe3, 0xaa, 0x25, 0x59, 0xc3, 0xca, 0xb1, 0xe0, 0xaa, 0x2b, 0xf4, - 0x77, 0x8b, 0xf4, 0x49, 0x82, 0x32, 0x30, 0xde, 0xf2, 0x13, 0x98, 0x57, 0x3a, 0x94, 0x48, 0x9c, - 0x02, 0x7f, 0x35, 0x68, 0x1c, 0x8e, 0xba, 0x91, 0x8c, 0xe8, 0xe8, 0x29, 0x2c, 0xea, 0x9d, 0x4a, - 0x28, 0xeb, 0x9b, 0xc1, 0x04, 0xb2, 0x7e, 0xce, 0xb5, 0x61, 0xa3, 0x65, 0x18, 0xa9, 0x75, 0x9e, - 0x73, 0xb6, 0x98, 0xa7, 0x8c, 0x8d, 0xac, 0xd6, 0x79, 0x4e, 0xdf, 0x59, 0x75, 0x9e, 0x6b, 0xfb, - 0xe1, 0xdf, 0x15, 0x60, 0xd1, 0x32, 0xc3, 0x68, 0x09, 0x80, 0x15, 0x2a, 0xb2, 0x5d, 0x29, 0x21, - 0xaa, 0x16, 0xfb, 0x45, 0xc3, 0x58, 0x46, 0xa8, 0xc6, 0x21, 0x42, 0x94, 0x93, 0x0a, 0x57, 0x01, - 0x42, 0xdb, 0x30, 0xcd, 0x7e, 0xb1, 0x48, 0xe9, 0x51, 0x8a, 0x83, 0x34, 0x1c, 0x16, 0x1a, 0x4d, - 0x55, 0x92, 0x2e, 0x2d, 0x68, 0xa7, 0x23, 0xa4, 0x55, 0x12, 0xdc, 0x79, 0xd6, 0x48, 0x8f, 0x42, - 0x0e, 0x1a, 0xdd, 0x84, 0x71, 0x56, 0xc8, 0xe7, 0x50, 0xbc, 0xf7, 0x4e, 0x80, 0x79, 0xbd, 0xf3, - 0x0f, 0x0b, 0x70, 0x89, 0x9d, 0x6d, 0x99, 0xad, 0xf1, 0xa1, 0xb6, 0x35, 0x6e, 0xc8, 0x0e, 0x9b, - 0x80, 0xb5, 0xdd, 0x51, 0x87, 0xe9, 0x57, 0xd9, 0x15, 0x2a, 0x92, 0xba, 0x6e, 0xff, 0xa0, 0x20, - 0xdc, 0x41, 0xd9, 0xa5, 0xbb, 0x06, 0x33, 0xaf, 0xb6, 0x64, 0x35, 0x34, 0xf4, 0x01, 0x5b, 0x51, - 0xc5, 0xfc, 0x91, 0xe6, 0x2e, 0xaa, 0xcf, 0xa0, 0x62, 0x67, 0xcd, 0xb0, 0x65, 0xe5, 0xdc, 0x33, - 0x60, 0xbf, 0xca, 0x74, 0x1e, 0x66, 0xe8, 0x34, 0x5f, 0xf6, 0x3b, 0x62, 0x46, 0xdf, 0x49, 0x07, - 0x79, 0x59, 0x03, 0x67, 0xd4, 0xde, 0x16, 0x13, 0x6f, 0x33, 0x5f, 0x9c, 0x54, 0x6d, 0x53, 0xbb, - 0xff, 0x2f, 0x8b, 0xfa, 0x5a, 0x7c, 0x95, 0x46, 0x1b, 0x30, 0xbb, 0x85, 0x8f, 0x32, 0xed, 0xd2, - 0xbb, 0xfe, 0x3e, 0x3e, 0x6a, 0x2b, 0x6d, 0xab, 0x31, 0xb4, 0x1a, 0x0e, 0xda, 0x85, 0x39, 0x21, - 0x35, 0x4e, 0x2b, 0x3c, 0xd9, 0x33, 0x11, 0xd2, 0xc2, 0xc1, 0x33, 0xaf, 0x1d, 0xf2, 0x52, 0xf5, - 0x7d, 0x87, 0x4e, 0xf1, 0xcd, 0xef, 0x67, 0x67, 0x1b, 0xca, 0x59, 0xee, 0xf1, 0xd6, 0xde, 0x1f, - 0x36, 0xf7, 0xcc, 0x4f, 0xd2, 0xd5, 0xd7, 0xc1, 0x3a, 0x75, 0xb3, 0x49, 0x18, 0xe9, 0x8c, 0xb8, - 0x93, 0x9e, 0x0c, 0x1a, 0x4d, 0x2e, 0x26, 0x43, 0x7d, 0xbf, 0x27, 0x62, 0xfe, 0x1a, 0xd4, 0x53, - 0xa9, 0x52, 0xe2, 0x1d, 0x7b, 0x0f, 0x26, 0x78, 0x91, 0x7c, 0x17, 0x99, 0x5e, 0x95, 0x02, 0xc0, - 0xf9, 0xfd, 0x02, 0x5c, 0x26, 0x5a, 0x7e, 0xd3, 0xef, 0xef, 0xf5, 0xf0, 0x93, 0x48, 0x0f, 0xdb, - 0xfb, 0xae, 0x26, 0x68, 0x16, 0x2d, 0x6f, 0x48, 0xfe, 0xb4, 0xc4, 0xcb, 0x3f, 0x28, 0x40, 0xc5, - 0xd4, 0xb7, 0x37, 0x2b, 0x61, 0x6e, 0x71, 0xb3, 0xac, 0xc8, 0xbd, 0x28, 0x0c, 0x5d, 0xb6, 0x29, - 0x06, 0x4b, 0x06, 0x49, 0xfe, 0xd7, 0x44, 0xcb, 0xff, 0x2d, 0xc0, 0xfc, 0x46, 0x44, 0xbb, 0xff, - 0xd3, 0x43, 0x3f, 0xc4, 0x32, 0xc4, 0xfa, 0x96, 0xe9, 0xa5, 0x11, 0x9d, 0x57, 0xf3, 0x83, 0xd9, - 0xf7, 0x95, 0xc7, 0x04, 0xc5, 0xbc, 0x27, 0x44, 0xda, 0x2b, 0xe9, 0x77, 0x60, 0x74, 0x8b, 0xa8, - 0x53, 0x23, 0x7c, 0xfd, 0x31, 0x0c, 0x52, 0x44, 0xe3, 0xfe, 0x49, 0x97, 0xc9, 0x0f, 0x74, 0x2f, - 0xf3, 0xba, 0x60, 0x74, 0xf8, 0x13, 0x99, 0xec, 0xf3, 0xee, 0xfa, 0x24, 0x8c, 0xef, 0x78, 0xe1, - 0x1e, 0x8e, 0x9d, 0x1f, 0x42, 0x85, 0x87, 0x49, 0x30, 0x4f, 0x34, 0x0d, 0xa6, 0x88, 0x12, 0x77, - 0x6c, 0x5e, 0x68, 0xc3, 0x12, 0x40, 0x33, 0xf6, 0xc2, 0x78, 0xa3, 0xdf, 0xc5, 0xdf, 0xd0, 0xd1, - 0x8e, 0xb9, 0x4a, 0x89, 0xf3, 0x01, 0x4c, 0xc9, 0x21, 0x50, 0x5b, 0x4e, 0xd1, 0x18, 0xe9, 0x70, - 0xe6, 0xb5, 0xf7, 0x0e, 0xe2, 0x91, 0xc3, 0x0a, 0x2c, 0xa4, 0xa6, 0x82, 0xaf, 0x93, 0x0a, 0x99, - 0x30, 0x56, 0xc6, 0xc2, 0xb1, 0x5c, 0xf9, 0xdb, 0x69, 0xc0, 0x85, 0xcc, 0x4c, 0x23, 0x44, 0xdf, - 0xb0, 0x30, 0x3b, 0x9d, 0x1c, 0x28, 0xcd, 0xe6, 0x3a, 0x29, 0xdb, 0xd9, 0x6c, 0xb2, 0xc8, 0x54, - 0x52, 0xb6, 0xb3, 0xd9, 0xac, 0x8f, 0xb3, 0x95, 0xe3, 0xfc, 0xd3, 0x22, 0x35, 0x5f, 0x33, 0x3c, - 0x48, 0x39, 0x17, 0x55, 0x07, 0x67, 0x1d, 0xa6, 0xe8, 0x88, 0x57, 0x45, 0xec, 0x75, 0xfe, 0xcd, - 0xfe, 0xe4, 0xcf, 0x8f, 0xab, 0xe7, 0xe8, 0x75, 0x7e, 0x82, 0x86, 0x3e, 0x87, 0x89, 0xb5, 0x7e, - 0x97, 0x52, 0x18, 0x39, 0x03, 0x05, 0x81, 0x44, 0xe6, 0x81, 0x76, 0x99, 0xa8, 0x42, 0xdc, 0x81, - 0xe4, 0x2a, 0x25, 0x94, 0xcd, 0xfe, 0x81, 0xcf, 0x22, 0x68, 0xc6, 0x5c, 0xf6, 0x83, 0x70, 0x93, - 0x76, 0x41, 0xbc, 0x55, 0x9d, 0x72, 0xe5, 0x6f, 0xe4, 0xc0, 0xd8, 0xe3, 0xb0, 0xcb, 0xdf, 0xd4, - 0xcd, 0x2d, 0xcf, 0x88, 0x2c, 0x4a, 0xa4, 0xcc, 0x65, 0x55, 0xce, 0xff, 0x2e, 0xc0, 0xe2, 0x7d, - 0x1c, 0x1b, 0xd7, 0x8d, 0xc6, 0x95, 0xc2, 0x6b, 0x73, 0xa5, 0xf8, 0x2a, 0x5c, 0x91, 0xa3, 0x1e, - 0xb1, 0x8d, 0x7a, 0xd4, 0x36, 0xea, 0x31, 0xfb, 0xa8, 0xef, 0xc3, 0x38, 0x1b, 0x2a, 0x7a, 0x0b, - 0xc6, 0x36, 0x62, 0x7c, 0x90, 0xb8, 0x35, 0xd4, 0xb8, 0x24, 0x97, 0xd5, 0x11, 0x8b, 0x6b, 0xd3, - 0x8b, 0x62, 0x11, 0x0b, 0x3d, 0xe5, 0x8a, 0x9f, 0xce, 0x4f, 0xe8, 0xe3, 0x90, 0xcd, 0xa0, 0xf3, - 0x5c, 0x71, 0x63, 0x4f, 0xb0, 0x5d, 0x99, 0xbe, 0xa1, 0x21, 0x50, 0xac, 0xc6, 0x15, 0x10, 0xe8, - 0x3a, 0x4c, 0x6f, 0xf4, 0xef, 0x05, 0x61, 0x07, 0x3f, 0xee, 0xf7, 0x18, 0xf5, 0x49, 0x57, 0x2d, - 0xe2, 0xbe, 0x18, 0xde, 0x42, 0xe2, 0x8b, 0xa1, 0x05, 0x29, 0x5f, 0x0c, 0x4b, 0xb4, 0xe1, 0xb2, - 0x3a, 0xee, 0xea, 0x21, 0x7f, 0xe7, 0x39, 0x62, 0xa4, 0xc7, 0x66, 0x18, 0xe0, 0x2e, 0x5c, 0x76, - 0xf1, 0xa0, 0xe7, 0x11, 0x85, 0xeb, 0x20, 0x60, 0xf0, 0x72, 0xcc, 0xd7, 0x0d, 0xc1, 0xb3, 0xba, - 0x53, 0x59, 0x76, 0xb9, 0x98, 0xd3, 0xe5, 0x03, 0xb8, 0x71, 0x1f, 0xc7, 0xc6, 0x6c, 0x19, 0xc9, - 0xe0, 0xd7, 0x61, 0x32, 0xd2, 0xfd, 0xf7, 0xc3, 0x12, 0x75, 0xf0, 0xdb, 0x3a, 0x4e, 0x47, 0xfe, - 0xe5, 0x7c, 0x01, 0x55, 0x5b, 0x73, 0xa7, 0x0b, 0x22, 0xf4, 0xe1, 0xba, 0x9d, 0x80, 0x3c, 0x16, - 0x85, 0xaf, 0x5f, 0x9a, 0xce, 0xf9, 0xbd, 0xd5, 0xaf, 0x07, 0xf8, 0x1f, 0x4e, 0x5d, 0x84, 0x53, - 0xbd, 0x46, 0x77, 0xdb, 0xf4, 0x52, 0x5b, 0x27, 0x90, 0xf0, 0xb5, 0x06, 0x93, 0xa2, 0x8c, 0xf3, - 0xd5, 0x9a, 0x88, 0x84, 0x32, 0xb4, 0x2b, 0x08, 0x48, 0x34, 0xe7, 0x27, 0xe2, 0xce, 0x49, 0xc7, - 0x38, 0xdd, 0x8b, 0x80, 0xd3, 0x5c, 0x32, 0x39, 0x01, 0x5c, 0xd6, 0x69, 0xab, 0x8e, 0xff, 0x92, - 0xe2, 0xf8, 0x67, 0xfe, 0xfe, 0xeb, 0xba, 0x23, 0xba, 0xc8, 0xd7, 0x65, 0x52, 0x84, 0x96, 0x54, - 0xf7, 0xfe, 0x4c, 0xf6, 0x09, 0xc5, 0x1d, 0xa8, 0x98, 0x1a, 0x54, 0x1c, 0x28, 0xd2, 0x87, 0xcc, - 0x14, 0x12, 0x67, 0x1f, 0xe6, 0xb5, 0xd4, 0x6e, 0x49, 0xae, 0xaa, 0x24, 0xa5, 0xdd, 0x54, 0xfd, - 0xb3, 0x5f, 0x1e, 0x57, 0x3f, 0x3a, 0x4b, 0x78, 0xbc, 0xa0, 0xb9, 0x23, 0x5f, 0x81, 0x38, 0x8b, - 0x30, 0xd2, 0x70, 0x37, 0xe9, 0xb0, 0xdd, 0x4d, 0x39, 0x6c, 0x77, 0xd3, 0xf9, 0xd7, 0x45, 0xa8, - 0xb2, 0xb7, 0x66, 0xf4, 0xfe, 0x3d, 0xd1, 0xbb, 0x94, 0x0b, 0xfd, 0xd3, 0x5a, 0x1b, 0xa9, 0xb7, - 0x64, 0xc5, 0xd3, 0xbc, 0x25, 0xfb, 0xad, 0x57, 0xf7, 0xd0, 0xb0, 0x04, 0x4f, 0x89, 0x91, 0xc1, - 0x6a, 0x4d, 0xd6, 0x86, 0xa5, 0x89, 0xac, 0x79, 0x34, 0x7a, 0x76, 0xf3, 0xc8, 0xf9, 0xdb, 0x45, - 0xb8, 0x6e, 0xe7, 0x20, 0x6f, 0x69, 0x55, 0xcb, 0xb5, 0x95, 0x13, 0x85, 0x40, 0x4d, 0x42, 0x25, - 0xd7, 0x56, 0x3a, 0xbf, 0x96, 0x88, 0x6f, 0x4e, 0x79, 0xbc, 0xb5, 0xb0, 0x67, 0x91, 0xa9, 0x90, - 0x15, 0x69, 0x59, 0x1d, 0x78, 0x19, 0xda, 0x85, 0xc5, 0xed, 0xd0, 0x7f, 0xe1, 0xc5, 0xf8, 0x21, - 0x7e, 0xb9, 0x1d, 0xf4, 0xfc, 0xce, 0xcb, 0xb5, 0xbe, 0xb7, 0xdb, 0xc3, 0x5d, 0x7e, 0x7b, 0x77, - 0xf3, 0xe4, 0xb8, 0xfa, 0xad, 0x01, 0x03, 0x69, 0x3f, 0xc7, 0x2f, 0xdb, 0x03, 0x0a, 0xd4, 0xc6, - 0x0c, 0x4a, 0x21, 0x6a, 0x23, 0xe4, 0xfc, 0x71, 0x01, 0xae, 0xd0, 0xa3, 0x96, 0xfb, 0x1c, 0x45, - 0xe3, 0xaf, 0x14, 0x2e, 0xa4, 0x0e, 0x90, 0xaf, 0x2c, 0x1a, 0x2e, 0xa4, 0xc5, 0x7f, 0xbb, 0x1a, - 0x18, 0xda, 0x80, 0x69, 0xfe, 0x5b, 0x71, 0x2c, 0x2d, 0x28, 0xd9, 0x01, 0xe9, 0xc2, 0x65, 0x76, - 0x25, 0x5d, 0xa6, 0x9c, 0x58, 0x9b, 0x3e, 0x9f, 0x52, 0x71, 0x9d, 0x5f, 0x14, 0xe1, 0x6a, 0x0b, - 0x87, 0xfe, 0xb3, 0x97, 0x96, 0xc1, 0x3c, 0x86, 0x79, 0x51, 0x44, 0xc7, 0xac, 0x6f, 0x18, 0xf6, - 0x36, 0x5e, 0x74, 0x35, 0x22, 0x00, 0x6d, 0xb9, 0x7f, 0x8c, 0x88, 0x67, 0xc8, 0x16, 0xf1, 0x3e, - 0x4c, 0xa6, 0xde, 0x6f, 0xd2, 0xf9, 0x17, 0xfb, 0x4d, 0xcf, 0xd3, 0x24, 0x37, 0xde, 0x6f, 0xdb, - 0x2f, 0x2f, 0xb8, 0x8d, 0x31, 0xc4, 0xfc, 0x63, 0xdb, 0x8f, 0x6c, 0x3d, 0x4f, 0xa9, 0x35, 0x6c, - 0xbf, 0xf5, 0x73, 0xae, 0xad, 0xa5, 0xfa, 0x34, 0x4c, 0xd5, 0xe8, 0xd5, 0x0a, 0x51, 0xe9, 0xff, - 0x4f, 0x11, 0x96, 0x44, 0x78, 0xb4, 0x85, 0xcd, 0x5f, 0xc1, 0xa2, 0x28, 0xaa, 0x0d, 0x06, 0x61, - 0xf0, 0x02, 0x77, 0x75, 0x4e, 0xb3, 0xfc, 0x14, 0x82, 0xd3, 0x1e, 0x87, 0x49, 0x98, 0x6d, 0x43, - 0x7f, 0x33, 0xae, 0x92, 0xcf, 0x4d, 0xaf, 0x69, 0xa9, 0xcb, 0x42, 0x95, 0x80, 0x7a, 0x22, 0x4b, - 0x55, 0x1a, 0x76, 0x33, 0xae, 0x96, 0xd1, 0xd7, 0x75, 0xb5, 0x10, 0x63, 0x50, 0xa7, 0x59, 0x9f, - 0x83, 0x99, 0x2d, 0x7c, 0x94, 0xf0, 0xfd, 0x77, 0x0a, 0xa9, 0x07, 0x16, 0xe8, 0x5d, 0x18, 0x63, - 0x2f, 0x2d, 0x0a, 0xc9, 0x4b, 0x49, 0xfa, 0xc0, 0x42, 0x7d, 0x29, 0xc9, 0x40, 0x37, 0x60, 0x82, - 0x05, 0xd7, 0x75, 0x4f, 0xa1, 0xb5, 0xcb, 0x38, 0xe7, 0x0e, 0x43, 0x61, 0x0a, 0x3c, 0xc7, 0x77, - 0x1e, 0xc2, 0x0d, 0x1e, 0xb9, 0xa8, 0x4f, 0x3e, 0x6d, 0xe8, 0x8c, 0x87, 0x91, 0xe3, 0xc1, 0xd2, - 0x7d, 0x9c, 0x16, 0x3d, 0x5a, 0x1c, 0xf8, 0x17, 0x70, 0x5e, 0x2b, 0x97, 0x14, 0xe9, 0x53, 0x28, - 0xb9, 0x86, 0x24, 0xe9, 0x34, 0xb4, 0x73, 0xdd, 0xd4, 0x84, 0xda, 0x59, 0x07, 0xd3, 0x44, 0x13, - 0x61, 0x72, 0xbf, 0x14, 0x9d, 0x41, 0xea, 0xdd, 0x54, 0xf6, 0x35, 0x93, 0x78, 0x2c, 0x09, 0x82, - 0x38, 0x47, 0x65, 0xad, 0x33, 0x0b, 0xd3, 0x8d, 0xa0, 0x1f, 0xe3, 0x6f, 0xe8, 0x3b, 0x36, 0x67, - 0x0e, 0x66, 0x44, 0x55, 0x0f, 0x47, 0x91, 0xf3, 0xf7, 0x47, 0xc0, 0xe1, 0x8c, 0x35, 0xf9, 0x55, - 0x04, 0x3f, 0x76, 0x33, 0x9d, 0xe5, 0x07, 0xd5, 0x25, 0xd5, 0x7b, 0x94, 0xd4, 0xb2, 0x95, 0x47, - 0xef, 0x9c, 0x3b, 0x49, 0xa9, 0xb6, 0xf2, 0x32, 0xa3, 0xff, 0x91, 0x45, 0x4c, 0xb2, 0xcd, 0x46, - 0xd3, 0xe4, 0x59, 0xc4, 0xa4, 0x46, 0xd7, 0x2c, 0x32, 0x5d, 0x8d, 0x0d, 0x5c, 0x81, 0x40, 0xf2, - 0x19, 0x8b, 0xac, 0xe1, 0x71, 0x0a, 0xac, 0xa0, 0x9d, 0x49, 0x0d, 0xab, 0x12, 0x41, 0x4f, 0x74, - 0x5e, 0xf2, 0xfd, 0x28, 0xee, 0x73, 0xd5, 0x2a, 0x46, 0x75, 0xa0, 0x94, 0xe8, 0x99, 0x76, 0x35, - 0x58, 0xc5, 0x57, 0xf6, 0xb7, 0x0a, 0x70, 0x85, 0xcd, 0x0e, 0x39, 0x48, 0xfd, 0x1e, 0xe6, 0x41, - 0xd4, 0x62, 0x5a, 0x0e, 0xcd, 0xf7, 0x62, 0x85, 0x53, 0xc9, 0x68, 0x9a, 0x13, 0x0b, 0x73, 0x74, - 0x9b, 0x33, 0xd6, 0x44, 0xdf, 0x39, 0x2e, 0x88, 0xa8, 0xd9, 0xcc, 0x65, 0xd1, 0x59, 0xf5, 0xc2, - 0xba, 0x76, 0xbf, 0x53, 0xb4, 0xdc, 0xef, 0x68, 0xde, 0xf0, 0x78, 0xc8, 0x85, 0xcf, 0xc8, 0xeb, - 0x3b, 0x88, 0xff, 0x78, 0x0c, 0x2e, 0x6c, 0x7b, 0x7b, 0x7e, 0x9f, 0xc8, 0x1e, 0x91, 0xa6, 0x0e, - 0xd5, 0x32, 0x69, 0x57, 0xf3, 0x23, 0xea, 0x0c, 0x79, 0x55, 0x97, 0xd5, 0x0c, 0x88, 0x45, 0xdb, - 0xe3, 0x1c, 0x3d, 0xcf, 0xe1, 0xc7, 0x9a, 0x3f, 0x30, 0x13, 0x55, 0x49, 0x23, 0x78, 0xfa, 0x41, - 0x37, 0x95, 0x8a, 0x98, 0xfa, 0xd4, 0x1e, 0xc3, 0xb4, 0x12, 0x1a, 0xc9, 0x17, 0x68, 0x86, 0x02, - 0x65, 0xcb, 0xf3, 0xc3, 0x5d, 0x6c, 0x4c, 0x3b, 0xa9, 0x52, 0x30, 0x24, 0x9b, 0x1c, 0x7b, 0xc3, - 0xc9, 0x26, 0x7f, 0xc8, 0xba, 0x2c, 0xbc, 0xab, 0xe3, 0x43, 0x93, 0x19, 0x26, 0xbd, 0x37, 0xa5, - 0x31, 0x54, 0x89, 0x19, 0x13, 0x33, 0x4e, 0xfc, 0xa9, 0x24, 0x66, 0xb4, 0xe6, 0x04, 0x9d, 0xfc, - 0x55, 0xe4, 0x04, 0xad, 0x03, 0x4c, 0x8a, 0x64, 0xe4, 0xce, 0xbf, 0x9d, 0x80, 0xf9, 0x4d, 0x3f, - 0x8a, 0xc5, 0x32, 0x8e, 0x92, 0x33, 0x6e, 0x46, 0x94, 0x29, 0x16, 0x25, 0x57, 0x47, 0x59, 0x79, - 0x3b, 0x95, 0x1b, 0x5d, 0x43, 0x40, 0x1f, 0xa8, 0xce, 0xd0, 0xa2, 0x92, 0xc2, 0x2a, 0x9b, 0xd6, - 0x5a, 0xf5, 0x92, 0xbe, 0xab, 0xf9, 0xe2, 0x98, 0x02, 0xd1, 0x23, 0x05, 0xaa, 0x02, 0xc1, 0x1c, - 0x74, 0x2b, 0x69, 0x07, 0x1d, 0x4f, 0x22, 0x42, 0xa5, 0xff, 0x73, 0xac, 0xd9, 0x2f, 0xd2, 0x73, - 0xf7, 0x04, 0xc6, 0xe9, 0x53, 0x7c, 0xf1, 0x24, 0xea, 0xdb, 0x5c, 0x12, 0x98, 0x98, 0xc0, 0x1e, - 0xed, 0x47, 0x4a, 0x2a, 0xc6, 0x1e, 0x2d, 0x50, 0x5f, 0xdc, 0x33, 0x10, 0xb4, 0x03, 0x17, 0xb7, - 0x43, 0xdc, 0xe5, 0x41, 0x6a, 0x83, 0x90, 0xdb, 0x6b, 0xec, 0x05, 0x06, 0x4d, 0xe7, 0x34, 0x10, - 0xd5, 0x6d, 0x2c, 0xeb, 0x55, 0x51, 0x6a, 0x40, 0x47, 0x6b, 0x30, 0xd7, 0xc4, 0x5e, 0xd8, 0xd9, - 0x7f, 0x88, 0x5f, 0x92, 0x13, 0x20, 0x2a, 0x4f, 0x24, 0x39, 0xd0, 0x22, 0x5a, 0x43, 0x06, 0x4a, - 0xab, 0xd4, 0x3b, 0x32, 0x1d, 0x09, 0xfd, 0x3a, 0x8c, 0x37, 0x83, 0x30, 0xae, 0xbf, 0x4c, 0xe5, - 0x39, 0x67, 0x85, 0xf5, 0xcb, 0x22, 0x0f, 0x5c, 0x14, 0x84, 0x71, 0x7b, 0x57, 0xe5, 0x1b, 0xc7, - 0x43, 0xf7, 0x88, 0x7a, 0x49, 0x54, 0xde, 0xd8, 0xeb, 0x35, 0x68, 0x54, 0x08, 0x7b, 0x95, 0xcb, - 0x55, 0x48, 0xaa, 0x27, 0xc7, 0x5e, 0xaf, 0x4d, 0x15, 0x1a, 0xfd, 0xb6, 0x4e, 0xc5, 0x42, 0x2f, - 0x61, 0x5e, 0x5f, 0x93, 0x3c, 0x17, 0x26, 0x68, 0x19, 0x83, 0x4d, 0x20, 0xf5, 0x9b, 0xbc, 0x97, - 0xd7, 0xd3, 0x2b, 0x3f, 0x93, 0x1e, 0xd3, 0xd8, 0x04, 0x7a, 0x44, 0xd3, 0xf0, 0x31, 0xce, 0xd4, - 0x22, 0x91, 0x72, 0x90, 0x0c, 0xe2, 0xc6, 0xc9, 0x71, 0xf5, 0xda, 0x21, 0x4d, 0x7d, 0x4d, 0x39, - 0xea, 0x45, 0xe9, 0xcc, 0x83, 0x6e, 0x06, 0x15, 0x6d, 0xc3, 0x85, 0x27, 0x11, 0xde, 0x0e, 0xf1, - 0x0b, 0x1f, 0x1f, 0x09, 0x7a, 0x33, 0x94, 0x1e, 0x9d, 0x6e, 0x42, 0x6f, 0xc0, 0x6a, 0x4d, 0x04, - 0xb3, 0xc8, 0x95, 0x8f, 0x61, 0x5a, 0x59, 0x6f, 0x67, 0xca, 0xcd, 0xf9, 0x27, 0x05, 0x58, 0x48, - 0x2d, 0x60, 0xee, 0x3e, 0x78, 0x0c, 0x53, 0xb2, 0x50, 0x46, 0x22, 0x0b, 0x15, 0x24, 0x75, 0x84, - 0xb1, 0xed, 0x23, 0x76, 0xb7, 0xda, 0xdb, 0x84, 0x06, 0xba, 0x03, 0x13, 0x5b, 0xf8, 0x9b, 0xc4, - 0x4d, 0xcd, 0x4c, 0x46, 0xfa, 0xb6, 0x4b, 0xdf, 0x72, 0x02, 0x0c, 0x7d, 0x0c, 0xa0, 0xac, 0x1b, - 0xb6, 0xad, 0x69, 0x88, 0xaf, 0x79, 0xc9, 0x28, 0xc0, 0xce, 0x6f, 0x4b, 0x0d, 0x47, 0xbc, 0xe6, - 0x09, 0xbd, 0xce, 0xf3, 0x24, 0xc0, 0xfc, 0xc7, 0x64, 0x7f, 0xa8, 0x15, 0x3c, 0x3d, 0xfb, 0xa2, - 0x9e, 0x5b, 0x9b, 0x57, 0xb6, 0xee, 0x8a, 0x8d, 0xc3, 0x1f, 0x0a, 0xb1, 0x62, 0x7d, 0xe3, 0xa8, - 0x08, 0x34, 0x5a, 0xef, 0xbc, 0xe3, 0x42, 0x39, 0xb9, 0xbd, 0x48, 0xf5, 0xe0, 0x7b, 0xd9, 0x27, - 0x2b, 0x34, 0x41, 0x71, 0xf2, 0x64, 0x45, 0x65, 0x63, 0xf2, 0x78, 0xe5, 0x09, 0x5c, 0x71, 0xf1, - 0x41, 0xf0, 0x02, 0xbf, 0x59, 0xb2, 0x3f, 0x82, 0xcb, 0x3a, 0xc1, 0x27, 0x83, 0x2e, 0x7d, 0xac, - 0xcc, 0xae, 0x49, 0x8c, 0x89, 0x7f, 0x38, 0x02, 0x4b, 0xfc, 0xc3, 0x52, 0x41, 0x90, 0x3f, 0x55, - 0x79, 0x4b, 0xeb, 0x9c, 0x00, 0xae, 0xea, 0xc4, 0x6b, 0xdd, 0xee, 0xb6, 0x17, 0xc6, 0x7e, 0xc7, - 0x1f, 0x78, 0xfd, 0x98, 0xe8, 0x13, 0xca, 0xcf, 0x94, 0x02, 0xa3, 0xd4, 0xb0, 0xd9, 0x1f, 0x24, - 0x05, 0xaa, 0xa2, 0xa5, 0xc0, 0x39, 0x18, 0xaa, 0x69, 0xf6, 0x10, 0x96, 0xa9, 0x6d, 0xd6, 0x61, - 0x56, 0xf9, 0x29, 0xed, 0x01, 0x9a, 0xea, 0x4b, 0x69, 0x41, 0x67, 0x98, 0x8e, 0xe2, 0x74, 0xa0, - 0x62, 0x62, 0x1a, 0x7d, 0x44, 0xfb, 0x12, 0xad, 0x25, 0xcf, 0x71, 0x87, 0x5f, 0x4f, 0x9d, 0xb7, - 0x3d, 0xc5, 0x75, 0xfe, 0xc6, 0x28, 0x5c, 0xe1, 0x93, 0xf1, 0x26, 0x67, 0x1c, 0xfd, 0x04, 0xa6, - 0x95, 0x39, 0xe6, 0x4c, 0xbf, 0x2e, 0x6e, 0xb4, 0x6d, 0x6b, 0x81, 0xe9, 0x45, 0x87, 0xb4, 0xa0, - 0x9d, 0x9a, 0x6e, 0xa2, 0x17, 0xa9, 0xcb, 0xa6, 0x07, 0x73, 0xfa, 0x44, 0x73, 0x5d, 0xf3, 0x2d, - 0x63, 0x23, 0x3a, 0xa8, 0x48, 0x0e, 0xd1, 0x6d, 0x1b, 0xa7, 0x9b, 0x66, 0x94, 0xd7, 0x17, 0xd1, - 0x37, 0x70, 0x21, 0x33, 0xcb, 0x5c, 0x35, 0x7d, 0xc7, 0xd8, 0x60, 0x06, 0x9a, 0xe5, 0xf5, 0x0c, - 0x69, 0xb1, 0xb5, 0xd9, 0x6c, 0x23, 0xa8, 0x0b, 0x33, 0xea, 0xc4, 0x73, 0xdd, 0xf5, 0x46, 0x0e, - 0x2b, 0x19, 0x20, 0x53, 0x8a, 0x38, 0x2f, 0xe9, 0xdc, 0xeb, 0x1f, 0x61, 0xd1, 0xa8, 0xd6, 0x27, - 0x61, 0x9c, 0xfd, 0x26, 0x22, 0x60, 0x3b, 0xc4, 0x11, 0xee, 0x77, 0xb0, 0x1a, 0x9c, 0xf0, 0xba, - 0x22, 0xe0, 0x3f, 0x14, 0xa0, 0x6c, 0xa2, 0xdb, 0xc4, 0xfd, 0x2e, 0xda, 0x86, 0x52, 0xba, 0x21, - 0xbe, 0xaa, 0x1d, 0x71, 0x2a, 0xd8, 0xbb, 0x44, 0x74, 0xd9, 0x4c, 0x37, 0xb7, 0xe0, 0x82, 0x52, - 0x76, 0xc6, 0x28, 0x90, 0x2c, 0xaa, 0x6a, 0xdf, 0xae, 0xd3, 0x60, 0x97, 0xd5, 0xe0, 0xc0, 0xf3, - 0xfb, 0x44, 0x41, 0x54, 0x5e, 0x1f, 0x43, 0x52, 0xca, 0x79, 0xc3, 0x6c, 0x40, 0x5a, 0x2a, 0x22, - 0xa2, 0x24, 0x88, 0xf3, 0x19, 0x95, 0xe0, 0x5c, 0xd1, 0x67, 0x51, 0xf5, 0x92, 0xd8, 0x75, 0x18, - 0xdb, 0xd9, 0x6c, 0x36, 0x6a, 0x3c, 0x46, 0x9f, 0xbd, 0x6b, 0xeb, 0x45, 0xed, 0x8e, 0xe7, 0xb2, - 0x0a, 0xe7, 0xdf, 0x14, 0x61, 0x5e, 0xbc, 0x51, 0xd7, 0x0c, 0xec, 0xa1, 0x19, 0xae, 0x7e, 0xa0, - 0xa7, 0x01, 0x68, 0xc8, 0x34, 0x00, 0xaf, 0x91, 0xca, 0x98, 0x27, 0x10, 0x38, 0xe5, 0x93, 0x91, - 0x87, 0x52, 0xdd, 0x1d, 0xd5, 0xd4, 0x5d, 0xd3, 0x78, 0x34, 0x75, 0x97, 0xf2, 0x81, 0xa9, 0xbb, - 0x42, 0xc9, 0x7d, 0x1d, 0x0d, 0xe5, 0x23, 0x32, 0x97, 0x5a, 0x93, 0xa7, 0x7d, 0x4d, 0xb0, 0x09, - 0x97, 0xef, 0xe3, 0xf8, 0xf1, 0xc6, 0x6a, 0x83, 0x2c, 0x22, 0xde, 0x55, 0x31, 0x03, 0xb7, 0x69, - 0x5c, 0x09, 0xa7, 0xa9, 0xae, 0x04, 0x2a, 0xd3, 0xf8, 0x53, 0x60, 0x05, 0xc4, 0x59, 0xa1, 0xd4, - 0x9a, 0xb5, 0x47, 0x9b, 0x06, 0x6a, 0xb6, 0x74, 0x6d, 0x5b, 0xf4, 0x71, 0xed, 0x7d, 0x3a, 0x5f, - 0x6f, 0xa2, 0x13, 0xbf, 0x5f, 0x60, 0xaf, 0x75, 0x9b, 0x8f, 0x95, 0xec, 0xaa, 0xfd, 0x67, 0x81, - 0xe2, 0x5f, 0x54, 0x9a, 0x51, 0xd2, 0xd3, 0x53, 0xff, 0x22, 0xfd, 0x3e, 0x07, 0x7f, 0x94, 0x43, - 0x13, 0xbd, 0xbb, 0x69, 0x68, 0xf4, 0x31, 0xcc, 0x2a, 0x45, 0xf2, 0x54, 0x64, 0xf9, 0x7e, 0x54, - 0x74, 0xbf, 0xeb, 0xea, 0x90, 0xce, 0xef, 0x14, 0xe1, 0x4a, 0x4e, 0x42, 0x6b, 0x6a, 0x74, 0x51, - 0x2b, 0x56, 0x72, 0x8a, 0x67, 0x6e, 0xa4, 0x0f, 0x90, 0x34, 0xa1, 0x24, 0x01, 0xd1, 0x67, 0x30, - 0xad, 0xe6, 0xd7, 0x2e, 0x2a, 0xd9, 0x3c, 0xcd, 0x39, 0xb5, 0x55, 0x70, 0x14, 0x01, 0x24, 0x3d, - 0xe1, 0x4f, 0xff, 0x9a, 0xf4, 0x8d, 0x58, 0x92, 0x9c, 0xfb, 0x8d, 0x64, 0x09, 0x57, 0x9a, 0x71, - 0xfe, 0x6a, 0x11, 0x96, 0x72, 0xf8, 0xd0, 0xc4, 0xf1, 0xff, 0x0f, 0x56, 0xa4, 0x52, 0xa6, 0x8f, - 0xfc, 0x8a, 0x52, 0xa6, 0x3b, 0xff, 0xbe, 0x00, 0x97, 0x9e, 0x0c, 0x22, 0x1a, 0xfe, 0xb5, 0xd1, - 0x7f, 0x81, 0xfb, 0x71, 0x10, 0xbe, 0xa4, 0xe1, 0x2b, 0xe8, 0x03, 0x18, 0x5b, 0xc7, 0xbd, 0x5e, - 0xc0, 0xcf, 0x91, 0x6b, 0xc2, 0xe5, 0x9b, 0x86, 0xa6, 0x40, 0xeb, 0xe7, 0x5c, 0x06, 0x8d, 0x3e, - 0x86, 0xa9, 0x75, 0xec, 0x85, 0xf1, 0x2e, 0xf6, 0x84, 0xaa, 0x78, 0x99, 0xa3, 0x2a, 0x28, 0x1c, - 0x60, 0xfd, 0x9c, 0x9b, 0x40, 0xa3, 0x65, 0x18, 0xdd, 0x0e, 0xfa, 0x7b, 0xf2, 0x7d, 0x88, 0xa5, - 0x41, 0x02, 0xb3, 0x7e, 0xce, 0xa5, 0xb0, 0xf5, 0x31, 0x18, 0x79, 0x14, 0xed, 0x39, 0x3f, 0x2b, - 0x40, 0x79, 0x35, 0x38, 0xea, 0x1b, 0x47, 0xf2, 0xa1, 0x3e, 0x12, 0x11, 0x55, 0x68, 0x80, 0x4f, - 0x8d, 0xe5, 0x7d, 0x18, 0xdd, 0xf6, 0xfb, 0x7b, 0xa9, 0x63, 0xcf, 0x80, 0x47, 0xa0, 0x68, 0x97, - 0xfc, 0xa4, 0x4b, 0xef, 0xc2, 0xa2, 0x05, 0x12, 0xcd, 0x49, 0x79, 0x34, 0x4a, 0xe5, 0xd0, 0xb7, - 0x61, 0xc1, 0x38, 0xca, 0x0c, 0xe0, 0x3f, 0x36, 0x4d, 0x17, 0xeb, 0x6b, 0x19, 0x26, 0x44, 0x22, - 0x39, 0x26, 0xb8, 0xc5, 0x4f, 0x1a, 0xef, 0x24, 0x96, 0x33, 0x4f, 0x3f, 0x24, 0x57, 0x6d, 0x4b, - 0x79, 0xcf, 0xca, 0x16, 0xdd, 0x27, 0xaf, 0xb1, 0xb4, 0x92, 0x17, 0xaf, 0xdb, 0xc6, 0xe9, 0x78, - 0x8d, 0x9e, 0x3a, 0x0d, 0x40, 0xd9, 0xf5, 0x83, 0xbe, 0x0b, 0x53, 0xcd, 0xe6, 0x7a, 0xee, 0x03, - 0x74, 0x37, 0x81, 0x70, 0xbe, 0x07, 0x97, 0x24, 0x11, 0x96, 0x14, 0x4a, 0x09, 0xf1, 0xe3, 0xb9, - 0xb1, 0x65, 0x64, 0x61, 0x52, 0xe0, 0xfc, 0x28, 0x83, 0xd7, 0x3c, 0x3c, 0x38, 0xf0, 0xc2, 0x97, - 0xa8, 0xa6, 0xe3, 0x8d, 0x0c, 0xdd, 0x29, 0xf5, 0xd1, 0x9f, 0x1f, 0x57, 0xcf, 0xa9, 0xc4, 0x97, - 0x61, 0x5e, 0x5b, 0x1e, 0xa2, 0x4b, 0x95, 0xb4, 0x18, 0x52, 0xb8, 0x71, 0x0f, 0x16, 0x52, 0x38, - 0xfc, 0xd8, 0xfd, 0x2e, 0x48, 0x45, 0x81, 0x22, 0x8d, 0xd4, 0x2f, 0xfc, 0xf2, 0xb8, 0x3a, 0x1b, - 0xfb, 0x07, 0xf8, 0x56, 0x92, 0x08, 0x43, 0xfc, 0xe5, 0x3c, 0x52, 0x15, 0xa8, 0x5a, 0x4f, 0x8b, - 0xc9, 0xbd, 0x0b, 0xe3, 0xac, 0x24, 0x95, 0xcc, 0x40, 0x85, 0xe6, 0xa3, 0xe1, 0x80, 0xe4, 0x4c, - 0x67, 0x0f, 0x9d, 0x55, 0x98, 0xe4, 0x38, 0x1d, 0xa3, 0xbf, 0x53, 0xc1, 0x0e, 0x06, 0x72, 0x0c, - 0xce, 0xf9, 0x9c, 0xde, 0xa6, 0x99, 0x52, 0x96, 0x9f, 0x2e, 0x64, 0xe9, 0xcf, 0xc3, 0xd5, 0xda, - 0x60, 0x80, 0xfb, 0xdd, 0x04, 0x91, 0xa8, 0xf9, 0xa7, 0x0b, 0x78, 0x42, 0x35, 0x18, 0xa3, 0xd0, - 0xd2, 0xf4, 0xe2, 0xdd, 0x35, 0x74, 0x87, 0xc2, 0x71, 0x15, 0x87, 0x36, 0xc0, 0x30, 0x9d, 0x2e, - 0x2c, 0x36, 0x0f, 0x77, 0x0f, 0x7c, 0x96, 0x58, 0x9d, 0x06, 0x0d, 0x8a, 0xb6, 0x37, 0x44, 0x4a, - 0x33, 0xc6, 0x8c, 0x9b, 0xf2, 0x4b, 0xa2, 0xb7, 0xd4, 0x2f, 0x5b, 0xbe, 0xb8, 0x7b, 0x2b, 0x41, - 0xa5, 0xc2, 0x8c, 0xb5, 0x42, 0xab, 0x79, 0xda, 0xb3, 0xf7, 0xde, 0x83, 0x29, 0xf9, 0x6d, 0x4b, - 0x34, 0x09, 0xa3, 0x1b, 0x5b, 0x1b, 0x3b, 0x2c, 0x7b, 0xfb, 0xf6, 0x93, 0x9d, 0x52, 0x01, 0x01, - 0x8c, 0xaf, 0xae, 0x6d, 0xae, 0xed, 0xac, 0x95, 0x8a, 0xef, 0xb5, 0xd5, 0x8b, 0x17, 0x74, 0x05, - 0x16, 0x57, 0xd7, 0x5a, 0x1b, 0x8d, 0xb5, 0xf6, 0xce, 0x0f, 0xb6, 0xd7, 0xda, 0xfa, 0xab, 0xd9, - 0x79, 0x28, 0xa9, 0x95, 0x3b, 0x8f, 0x77, 0xb6, 0x4b, 0x05, 0x54, 0x86, 0x79, 0xb5, 0xf4, 0xe9, - 0x5a, 0xbd, 0xf6, 0x64, 0x67, 0x7d, 0xab, 0x34, 0xe2, 0x8c, 0x4e, 0x16, 0x4b, 0xc5, 0xf7, 0x7e, - 0xa2, 0xdd, 0xca, 0xa0, 0xab, 0x50, 0xe6, 0xe0, 0x4f, 0x9a, 0xb5, 0xfb, 0xf6, 0x26, 0x58, 0xed, - 0xa3, 0x7b, 0xb5, 0x52, 0x01, 0x5d, 0x83, 0xcb, 0x5a, 0xe9, 0x76, 0xad, 0xd9, 0x7c, 0xfa, 0xd8, - 0x5d, 0xdd, 0x5c, 0x6b, 0x36, 0x4b, 0xc5, 0xf7, 0xde, 0xe1, 0x21, 0x9a, 0x68, 0x0e, 0x60, 0x75, - 0xad, 0xd9, 0x58, 0xdb, 0x5a, 0xdd, 0xd8, 0xba, 0x5f, 0x3a, 0x87, 0x66, 0x61, 0xaa, 0x26, 0x7f, - 0x16, 0x96, 0xff, 0xda, 0x6f, 0xc1, 0x34, 0x51, 0x81, 0xc4, 0x25, 0xc6, 0xd7, 0xca, 0x1e, 0xe6, - 0x49, 0x10, 0x79, 0xf6, 0x36, 0xeb, 0x86, 0xa5, 0x1c, 0xaf, 0xe4, 0x9c, 0x17, 0x14, 0xe0, 0x66, - 0xe1, 0x4e, 0x01, 0xb9, 0x34, 0x6f, 0x68, 0x4a, 0x48, 0x48, 0xca, 0x66, 0xa1, 0x53, 0xb1, 0x54, - 0x0b, 0xd9, 0xf2, 0x00, 0x66, 0xc9, 0xde, 0x96, 0xb5, 0xe8, 0x4a, 0x1a, 0x5e, 0x11, 0x17, 0x95, - 0xab, 0xe6, 0x4a, 0xbe, 0x99, 0x9b, 0x34, 0x12, 0x54, 0xdb, 0xe8, 0x48, 0xdc, 0x47, 0x64, 0x25, - 0x00, 0xa3, 0x58, 0x95, 0x36, 0x85, 0x45, 0x42, 0x6c, 0x01, 0xca, 0x6e, 0x77, 0x74, 0x3d, 0x61, - 0xa7, 0x59, 0x12, 0x54, 0x2e, 0x65, 0x3c, 0x2d, 0x6b, 0x44, 0xa9, 0x41, 0x6d, 0x58, 0x7c, 0xe4, - 0xf9, 0xfd, 0xd8, 0xf3, 0xfb, 0xdc, 0xee, 0x15, 0x56, 0x2b, 0xaa, 0xe6, 0x98, 0xb1, 0xc4, 0x02, - 0xae, 0x0c, 0x7b, 0x2b, 0x40, 0x67, 0xa9, 0x09, 0xf3, 0x26, 0xb7, 0x23, 0x72, 0xf4, 0x8c, 0x8a, - 0x26, 0x47, 0x4e, 0xc5, 0xe6, 0x7b, 0x44, 0x8f, 0xe0, 0x42, 0xc6, 0x8d, 0x88, 0x14, 0xde, 0x9d, - 0x99, 0x5c, 0x99, 0xc6, 0x10, 0xc4, 0x7e, 0xda, 0x89, 0x18, 0x21, 0x0b, 0xe3, 0xac, 0xc4, 0xee, - 0x14, 0xd0, 0xd7, 0xe0, 0xd8, 0xc8, 0x3d, 0xf5, 0xe3, 0x7d, 0xee, 0x44, 0xbf, 0x62, 0x24, 0xc0, - 0x2a, 0xf3, 0xa8, 0xbb, 0x30, 0x6f, 0x72, 0x77, 0x4a, 0x86, 0xe6, 0xf8, 0x42, 0xad, 0xab, 0xc0, - 0x85, 0x79, 0x93, 0x43, 0x4d, 0xd2, 0xcc, 0xf1, 0xb6, 0x59, 0x69, 0x7e, 0x06, 0x73, 0x64, 0x95, - 0x3c, 0xc4, 0x78, 0x50, 0xeb, 0xf9, 0x2f, 0x70, 0x84, 0xc4, 0x3b, 0x1a, 0x59, 0x64, 0xc3, 0xbd, - 0x59, 0x40, 0xbf, 0x06, 0xd3, 0xf4, 0x33, 0x5e, 0x3c, 0xec, 0x7b, 0x46, 0xfd, 0xb4, 0x57, 0x45, - 0xfc, 0xa2, 0x95, 0x77, 0x0a, 0xe8, 0xfb, 0x30, 0x71, 0x1f, 0xc7, 0xf4, 0x22, 0xf6, 0x46, 0xea, - 0xb3, 0xc1, 0x1b, 0x7d, 0x79, 0x1f, 0x26, 0x3a, 0x9c, 0xd6, 0x56, 0x88, 0xd1, 0xc9, 0x36, 0x0e, - 0xa5, 0x90, 0xae, 0xae, 0x64, 0xba, 0x8d, 0xee, 0x13, 0x91, 0xde, 0xc3, 0x31, 0x3e, 0x6d, 0x93, - 0x36, 0x1e, 0x6d, 0xc2, 0x9c, 0x4c, 0x22, 0xb2, 0x45, 0x23, 0x79, 0x9c, 0x14, 0xb1, 0xe8, 0x0c, - 0xd4, 0x3e, 0x21, 0xbb, 0x82, 0x39, 0x06, 0xe4, 0x1b, 0x23, 0x64, 0x7b, 0x75, 0x24, 0x99, 0xc8, - 0xc0, 0x14, 0x5c, 0xf9, 0x65, 0x32, 0x89, 0x9b, 0xfe, 0x56, 0x59, 0x0a, 0x17, 0x43, 0x45, 0x6d, - 0x57, 0x7f, 0x6f, 0x94, 0xc8, 0x26, 0xdb, 0x33, 0xa9, 0xca, 0x8d, 0x1c, 0x08, 0x26, 0xf6, 0xa8, - 0x24, 0x79, 0x00, 0xb3, 0xda, 0x0b, 0x95, 0x44, 0x36, 0x1b, 0x9e, 0x10, 0x25, 0xb2, 0xd9, 0xf8, - 0xa8, 0xe5, 0x1e, 0x15, 0x20, 0xa9, 0x0f, 0x15, 0x54, 0x4c, 0x1f, 0x24, 0xe0, 0x1b, 0x52, 0x24, - 0x62, 0x4d, 0xa1, 0x3c, 0xa4, 0x09, 0xa4, 0xf4, 0xc2, 0xd6, 0x72, 0x2e, 0x25, 0xcb, 0x67, 0x0f, - 0xee, 0x14, 0xd0, 0x1a, 0x5c, 0x94, 0xa1, 0x57, 0xca, 0x47, 0x73, 0x2d, 0x08, 0xd6, 0x65, 0xf0, - 0x05, 0x5c, 0xe4, 0x8b, 0x4a, 0x23, 0x53, 0x92, 0xf2, 0x81, 0xfb, 0x27, 0xac, 0x04, 0x1e, 0xc0, - 0x42, 0x33, 0x35, 0x28, 0xe6, 0xbe, 0xbe, 0xac, 0x93, 0x50, 0xbe, 0x90, 0x60, 0xa5, 0xf5, 0x10, - 0x10, 0xd3, 0xc7, 0x04, 0xb9, 0x17, 0x3e, 0x3e, 0x42, 0xd7, 0x52, 0x43, 0x22, 0x85, 0x14, 0x8c, - 0x0a, 0x18, 0x1b, 0x8b, 0xd0, 0x0e, 0xcb, 0x2e, 0xc9, 0x92, 0x2a, 0x7b, 0x03, 0x6f, 0xd7, 0xef, - 0xf9, 0xb1, 0x8f, 0xc9, 0x1a, 0x53, 0x11, 0xd4, 0x2a, 0xb1, 0x1c, 0x2e, 0x5b, 0x21, 0xd0, 0xe7, - 0x30, 0x7b, 0x1f, 0xc7, 0xc9, 0x47, 0x20, 0xd0, 0x62, 0xe6, 0xb3, 0x11, 0x7c, 0xea, 0x44, 0xa0, - 0xaf, 0xfe, 0xe5, 0x89, 0x0d, 0x28, 0x31, 0xf9, 0xa8, 0x90, 0xb8, 0x96, 0x21, 0xc1, 0x41, 0xbc, - 0xd0, 0x3b, 0x88, 0xac, 0xdc, 0xba, 0xcd, 0xac, 0x5f, 0x24, 0x62, 0x6a, 0x54, 0x65, 0xe3, 0xa2, - 0x56, 0x26, 0x9f, 0x6c, 0x2e, 0x18, 0xbf, 0x7e, 0x80, 0xde, 0x4a, 0x0e, 0x43, 0xeb, 0x27, 0x0d, - 0x2a, 0x28, 0x1d, 0x86, 0xdb, 0x5a, 0x41, 0x32, 0x73, 0xa1, 0x81, 0xe8, 0x3b, 0xda, 0x99, 0x7d, - 0x36, 0xba, 0x9f, 0xc3, 0x94, 0x4c, 0xa3, 0x2f, 0x05, 0x4b, 0xfa, 0x23, 0x04, 0x95, 0x72, 0xb6, - 0x82, 0x8f, 0xf4, 0x33, 0xf6, 0xd1, 0x0c, 0x1d, 0x3f, 0x9d, 0x69, 0xde, 0xca, 0xd8, 0x8f, 0x61, - 0x5a, 0xc9, 0x31, 0x2f, 0x17, 0x72, 0x36, 0xef, 0x7c, 0x45, 0xff, 0x70, 0xf9, 0x9d, 0x02, 0xba, - 0x4d, 0x0f, 0x17, 0x1a, 0x87, 0xb6, 0x90, 0xa0, 0x29, 0x99, 0xab, 0x53, 0x28, 0xe8, 0x43, 0xfa, - 0x90, 0xa7, 0x71, 0x18, 0x86, 0xb8, 0xcf, 0xf0, 0x6c, 0x3a, 0x44, 0x0a, 0xf1, 0x73, 0x2a, 0x4c, - 0x14, 0x44, 0xe6, 0x9e, 0x1e, 0x86, 0xcd, 0x52, 0xba, 0xdc, 0x29, 0xa0, 0x15, 0x98, 0x14, 0x5f, - 0xbe, 0x41, 0x97, 0xf4, 0xae, 0xda, 0x87, 0xb7, 0x02, 0xc0, 0x98, 0x4d, 0x7b, 0xaa, 0x57, 0x5b, - 0xd9, 0xb9, 0x42, 0x4e, 0xcc, 0xee, 0x19, 0x91, 0x3e, 0x17, 0xa7, 0x26, 0x45, 0x2a, 0x6b, 0x53, - 0xa8, 0xb2, 0xd3, 0x86, 0x7f, 0x0f, 0xe6, 0xf4, 0x0f, 0xf2, 0x20, 0x21, 0xe3, 0x8d, 0xdf, 0xe9, - 0xb1, 0xd2, 0xd9, 0x80, 0x52, 0xad, 0x43, 0xcf, 0x03, 0x99, 0x0d, 0x5c, 0xea, 0xe5, 0xe9, 0x0a, - 0x41, 0x6b, 0x21, 0x9d, 0x5c, 0x7c, 0x13, 0x7b, 0xf4, 0x6d, 0xd3, 0xa2, 0xd4, 0x0a, 0x52, 0x55, - 0x66, 0x0c, 0x6b, 0xa7, 0xd6, 0x60, 0xbe, 0xe1, 0xf5, 0x3b, 0xb8, 0xf7, 0x7a, 0x64, 0x3e, 0xa1, - 0xb2, 0x4c, 0xc9, 0x94, 0x7e, 0x29, 0x8d, 0xcf, 0x45, 0xd9, 0x05, 0x79, 0x17, 0x27, 0x41, 0x6b, - 0x70, 0x9e, 0xe7, 0x94, 0x94, 0x6c, 0xb1, 0x61, 0xdb, 0x9a, 0xff, 0x10, 0xe6, 0xd6, 0x88, 0xac, - 0x3f, 0xec, 0xfa, 0xec, 0x3d, 0x27, 0xd2, 0x1f, 0xe8, 0x59, 0x11, 0xd7, 0xc5, 0x47, 0x36, 0x94, - 0x14, 0xe2, 0x72, 0x97, 0x66, 0xb3, 0xb4, 0x57, 0xe6, 0x05, 0x59, 0x35, 0xdb, 0x38, 0xb7, 0x0a, - 0x17, 0x2d, 0x49, 0xbb, 0xd1, 0xdb, 0x9a, 0x95, 0x64, 0xcb, 0xbc, 0x6d, 0xd0, 0xf7, 0xbe, 0x52, - 0xd2, 0x76, 0x5a, 0x68, 0xe6, 0x67, 0xf3, 0xb6, 0x8e, 0x5b, 0xbe, 0xc0, 0x32, 0x66, 0xdd, 0x46, - 0xef, 0xea, 0xd4, 0x73, 0x32, 0x73, 0x5b, 0x5b, 0xa0, 0x56, 0xa8, 0x9e, 0x14, 0x1a, 0x2d, 0xe5, - 0xe7, 0xae, 0x56, 0xac, 0x50, 0x4b, 0x36, 0xe9, 0x07, 0x74, 0x99, 0x29, 0x9f, 0xe1, 0xbf, 0x92, - 0x88, 0x9b, 0x4c, 0x6a, 0x53, 0xa9, 0x8a, 0x99, 0x33, 0x43, 0xdf, 0xa7, 0xe2, 0x52, 0x49, 0x3a, - 0x6a, 0x15, 0x78, 0xd7, 0x4c, 0x74, 0x22, 0xe5, 0x2c, 0x3c, 0x9f, 0xca, 0xb1, 0x2c, 0x9d, 0x01, - 0xe6, 0x2c, 0xcf, 0x95, 0x25, 0x5b, 0x75, 0x62, 0xc1, 0xa7, 0xb3, 0xf8, 0x4a, 0xde, 0x59, 0x52, - 0x1f, 0x4b, 0xde, 0x59, 0xd3, 0xff, 0x3e, 0x10, 0x1f, 0x48, 0x31, 0x10, 0xb5, 0x24, 0x87, 0xcd, - 0x11, 0x89, 0xf3, 0xea, 0xd2, 0x18, 0xca, 0x41, 0x1b, 0x9d, 0x1d, 0x58, 0x30, 0xe6, 0x7f, 0x95, - 0x6a, 0x44, 0x5e, 0x76, 0x58, 0x2b, 0x55, 0x0c, 0x97, 0xcc, 0x29, 0x7f, 0xd1, 0xb7, 0x74, 0xe3, - 0xdf, 0x9c, 0xc3, 0xb6, 0xf2, 0xf6, 0x10, 0x28, 0xce, 0xd0, 0xaf, 0xe9, 0xb1, 0x99, 0x69, 0xe3, - 0x86, 0xe2, 0x0e, 0xb0, 0x34, 0xe0, 0xe4, 0x81, 0xc8, 0x35, 0x30, 0x6f, 0xca, 0xa2, 0x6d, 0x65, - 0xf1, 0x5b, 0x76, 0x9a, 0xc9, 0xc2, 0x6a, 0x89, 0xdc, 0x34, 0x56, 0xce, 0xe4, 0x66, 0xf7, 0xcd, - 0xb1, 0x27, 0x2b, 0x72, 0x3d, 0x9c, 0xbe, 0xcb, 0x76, 0x3b, 0x60, 0x56, 0x4b, 0xbb, 0x2b, 0x5d, - 0x16, 0xa9, 0x0c, 0xbf, 0x99, 0x5d, 0x6e, 0x48, 0xff, 0xcb, 0x76, 0xb9, 0x92, 0xc2, 0xf7, 0x34, - 0xbb, 0xdc, 0x94, 0xf1, 0x57, 0x6e, 0x1f, 0xa5, 0x5f, 0xe2, 0xf4, 0x4e, 0x57, 0x9c, 0x65, 0xfb, - 0x9c, 0xa6, 0x6b, 0x36, 0x3a, 0xab, 0x54, 0xbb, 0x14, 0x19, 0x7d, 0xd1, 0x65, 0x8d, 0x4d, 0x9a, - 0x64, 0xad, 0x68, 0x83, 0xd3, 0x85, 0x6a, 0x03, 0x66, 0xd4, 0x0c, 0xc2, 0xd6, 0x5e, 0x5c, 0xc9, - 0xd2, 0x88, 0x14, 0xc3, 0x76, 0x4e, 0x72, 0x81, 0xf5, 0xe6, 0x6a, 0x9a, 0x39, 0x5a, 0x87, 0xec, - 0x43, 0x42, 0x2a, 0x6b, 0x86, 0x74, 0xc9, 0xae, 0xd5, 0x5c, 0x64, 0x7a, 0x22, 0x7b, 0x83, 0x2e, - 0xc2, 0xc3, 0x2f, 0x49, 0x27, 0x87, 0x52, 0x9a, 0x63, 0xd1, 0x7e, 0x09, 0x17, 0x32, 0xc9, 0x90, - 0xa5, 0xbb, 0xcf, 0x96, 0x26, 0xd9, 0x46, 0xcd, 0x19, 0xf9, 0xcb, 0xc5, 0x02, 0x7a, 0x44, 0x7a, - 0x96, 0x42, 0x6c, 0x2d, 0x0f, 0x27, 0x9a, 0x51, 0x0e, 0x18, 0xb9, 0x2f, 0xc5, 0xb3, 0x7c, 0x53, - 0x0f, 0x6d, 0x79, 0x97, 0xf3, 0x7b, 0xf8, 0x03, 0x21, 0x93, 0x53, 0x69, 0x97, 0x53, 0x32, 0xd9, - 0x9c, 0x94, 0x39, 0x9f, 0xf4, 0x36, 0xbd, 0xd2, 0x34, 0x64, 0x6c, 0x96, 0xe2, 0x27, 0x37, 0xa1, - 0xb3, 0x41, 0x43, 0x92, 0x02, 0xcd, 0x4a, 0x31, 0x37, 0x85, 0xb3, 0x75, 0xe6, 0x7f, 0xac, 0x08, - 0xb4, 0x4c, 0x5e, 0x66, 0x74, 0xd3, 0xc4, 0x09, 0x53, 0xea, 0xe6, 0x1c, 0x81, 0x39, 0x6f, 0x4a, - 0xe9, 0xac, 0x38, 0x3e, 0xad, 0xf9, 0x9e, 0x0d, 0x5c, 0x70, 0x85, 0x3c, 0xb1, 0x50, 0xcb, 0x49, - 0xf0, 0x6c, 0xed, 0xe1, 0x0f, 0x45, 0xde, 0xee, 0x6c, 0x22, 0x66, 0x69, 0x8f, 0x0f, 0xc9, 0xd4, - 0x6c, 0xa5, 0xfd, 0x35, 0xfb, 0xb0, 0x46, 0x36, 0x81, 0xb1, 0x9c, 0xb5, 0xdc, 0x9c, 0xcd, 0x52, - 0xe4, 0x9b, 0x13, 0x37, 0xef, 0xd0, 0x2b, 0xf6, 0x6c, 0x0a, 0x66, 0xb9, 0x80, 0xf3, 0x12, 0x34, - 0x5b, 0xfb, 0x7c, 0x5f, 0x6c, 0x8b, 0x34, 0xd5, 0x4b, 0x29, 0xcf, 0xe9, 0xf0, 0xc1, 0x5f, 0xb6, - 0x26, 0x70, 0x46, 0xdf, 0xce, 0xe3, 0xec, 0x29, 0xf6, 0x19, 0x5a, 0x87, 0xf3, 0x4d, 0x7f, 0xaf, - 0xaf, 0x64, 0x53, 0x96, 0xe6, 0x4c, 0x36, 0x23, 0xb4, 0x3c, 0x16, 0x4c, 0xc9, 0x97, 0x1f, 0x27, - 0x11, 0x73, 0x6a, 0x5e, 0x5c, 0x54, 0xb1, 0xa7, 0x03, 0x96, 0x47, 0x84, 0x31, 0x91, 0xae, 0x42, - 0x50, 0x4d, 0x4a, 0x2b, 0x09, 0x1a, 0xf2, 0xe3, 0x4a, 0x82, 0xc6, 0x2c, 0xb6, 0xcc, 0x43, 0xe2, - 0x06, 0x3d, 0xac, 0x7a, 0x48, 0x94, 0x94, 0xb2, 0x29, 0x57, 0x05, 0xfa, 0x94, 0x3a, 0x2a, 0xf2, - 0xbd, 0x1b, 0x8b, 0x3a, 0xa5, 0xe4, 0x84, 0x5b, 0x11, 0xde, 0x7a, 0xda, 0xa0, 0x4e, 0x79, 0xb8, - 0xef, 0x81, 0x22, 0xe9, 0xbe, 0x07, 0xb5, 0xa3, 0x76, 0x37, 0xe6, 0x8c, 0x9a, 0xc8, 0x4c, 0xf2, - 0xca, 0x90, 0x6d, 0x51, 0xf2, 0xca, 0x94, 0xc3, 0x90, 0x9a, 0xa8, 0x3b, 0xc2, 0xd0, 0x4e, 0xe8, - 0x5d, 0xcb, 0x4d, 0x42, 0x58, 0x59, 0xca, 0xcf, 0xdc, 0xc7, 0x2f, 0xda, 0x4a, 0xe9, 0x5c, 0x6b, - 0xc8, 0x94, 0x43, 0x52, 0x49, 0x61, 0x27, 0x8d, 0x15, 0x6b, 0x92, 0xb6, 0x6d, 0xe1, 0x4b, 0xd6, - 0xe9, 0x5a, 0x32, 0x09, 0xaa, 0xa4, 0xf3, 0x95, 0xca, 0x24, 0xed, 0x9a, 0x6a, 0x3a, 0x66, 0xd2, - 0xba, 0xa9, 0x4a, 0xa5, 0x21, 0x53, 0x9b, 0x2f, 0x9e, 0x34, 0x98, 0xf3, 0x12, 0xbf, 0xab, 0x9b, - 0x62, 0x39, 0xcf, 0x6e, 0x87, 0x5e, 0x65, 0xa2, 0xdf, 0x10, 0x1f, 0xbb, 0xc9, 0x66, 0xed, 0x7c, - 0x3b, 0xe5, 0x15, 0x35, 0x3f, 0xd4, 0xac, 0xe4, 0x25, 0x05, 0x45, 0x8f, 0xe8, 0x5d, 0xf1, 0xe3, - 0x8d, 0xd5, 0x06, 0x0f, 0x76, 0x08, 0xc2, 0xcc, 0xbd, 0x92, 0xf2, 0x75, 0xea, 0x84, 0xc9, 0x0c, - 0x44, 0x43, 0x6c, 0xad, 0xa0, 0x26, 0xbd, 0xde, 0xd0, 0x4a, 0x0d, 0x57, 0x4b, 0x06, 0x82, 0x15, - 0x33, 0x41, 0x2a, 0xcf, 0xd7, 0x84, 0xca, 0xa4, 0x77, 0xd3, 0xd2, 0x87, 0x3c, 0x9d, 0x90, 0x2d, - 0x1b, 0x33, 0x99, 0xd3, 0x8a, 0xef, 0xfb, 0xb0, 0xc0, 0x18, 0x9e, 0x0a, 0x67, 0xd5, 0xfa, 0xa3, - 0x94, 0x57, 0x2c, 0xe5, 0x68, 0x8b, 0x86, 0x11, 0xa4, 0x4b, 0xaf, 0x27, 0x0b, 0xcf, 0x1c, 0x2f, - 0x6b, 0xa5, 0xc7, 0xa6, 0xb2, 0x59, 0x7b, 0xb4, 0xf9, 0x4a, 0x53, 0xa9, 0x21, 0xb6, 0x96, 0xf9, - 0x54, 0x6a, 0xa5, 0x67, 0x9b, 0xca, 0x14, 0x41, 0x7d, 0x2a, 0xf5, 0x6e, 0x5a, 0xfa, 0x30, 0x7c, - 0x2a, 0xcd, 0x64, 0xce, 0x3c, 0x95, 0xa9, 0x58, 0x62, 0xad, 0x3f, 0xa6, 0xa9, 0x4c, 0xc3, 0xb3, - 0xa9, 0x4c, 0x97, 0x2a, 0x53, 0x69, 0x0e, 0x56, 0xb6, 0xd2, 0xfb, 0x92, 0xd2, 0x63, 0xc1, 0xca, - 0x67, 0x9a, 0x4c, 0xf1, 0x31, 0x89, 0x14, 0x6a, 0x6b, 0x05, 0x3d, 0xa5, 0xce, 0x8a, 0x54, 0xf9, - 0xe9, 0x26, 0xf4, 0xaa, 0x8d, 0x28, 0x9d, 0xd2, 0x0d, 0xa1, 0x6d, 0xa5, 0xbb, 0x6b, 0xed, 0xcb, - 0x70, 0x15, 0x2b, 0x4d, 0xea, 0xac, 0x13, 0xfb, 0x48, 0x08, 0xcd, 0x4c, 0xbc, 0x77, 0xaa, 0x57, - 0xea, 0xe4, 0x5a, 0x6b, 0xd0, 0x0e, 0x75, 0xc5, 0x64, 0xcb, 0x15, 0x37, 0x8e, 0x2d, 0xb0, 0x7c, - 0x28, 0xd5, 0x4c, 0x00, 0xb9, 0x4a, 0xd5, 0x16, 0x5d, 0x2e, 0xa9, 0x66, 0xb1, 0x57, 0xe9, 0xb6, - 0xdd, 0x09, 0x89, 0x69, 0xdb, 0xcd, 0xda, 0xbd, 0x3a, 0xff, 0xc4, 0x85, 0xa3, 0x0e, 0xde, 0x5a, - 0x46, 0x1b, 0x74, 0x01, 0xea, 0xc5, 0x79, 0x8e, 0x01, 0x33, 0x19, 0xba, 0x3e, 0xd6, 0x85, 0xa5, - 0x93, 0xea, 0x93, 0xad, 0x6d, 0x7b, 0xa7, 0xa4, 0xd7, 0xe4, 0x94, 0xa3, 0xb3, 0xad, 0x0e, 0xa6, - 0x05, 0x32, 0x27, 0xc5, 0x30, 0xce, 0x6c, 0x87, 0xc1, 0x0b, 0x5f, 0x7e, 0x83, 0xac, 0xb5, 0x8c, - 0x7e, 0x1d, 0xa6, 0x04, 0xf2, 0x70, 0x86, 0xa4, 0xb1, 0x29, 0x43, 0x3e, 0x87, 0x69, 0xce, 0x10, - 0xda, 0x03, 0x5b, 0x4b, 0x39, 0x2a, 0xe5, 0x34, 0x5b, 0xdc, 0xaf, 0x88, 0x4f, 0x15, 0x21, 0xe5, - 0x19, 0x87, 0xa2, 0x08, 0x65, 0xdf, 0x93, 0x28, 0x8a, 0x90, 0xe9, 0xe5, 0xc7, 0xf7, 0x61, 0x9a, - 0x4f, 0x49, 0x2e, 0x37, 0xed, 0x56, 0xf0, 0x82, 0x12, 0x70, 0x76, 0xd8, 0xf5, 0xe3, 0x46, 0xd0, - 0x7f, 0xe6, 0xef, 0x0d, 0x65, 0x6c, 0x16, 0xa5, 0xb5, 0x8c, 0x5a, 0x34, 0x6d, 0x9d, 0x48, 0x26, - 0x88, 0xe3, 0xa3, 0x20, 0x7c, 0xee, 0xf7, 0xf7, 0x86, 0x90, 0xbc, 0xae, 0x93, 0x4c, 0xe3, 0x31, - 0xba, 0x4d, 0x3b, 0xdd, 0xa1, 0xf8, 0xd6, 0xd1, 0x6f, 0xc1, 0x55, 0x7a, 0x95, 0x7d, 0xd6, 0x1e, - 0xdb, 0x9d, 0xe9, 0x97, 0x93, 0x10, 0x34, 0x17, 0x77, 0x82, 0xb0, 0x3b, 0x9c, 0x58, 0x55, 0x0f, - 0xf8, 0x4a, 0xa1, 0xb5, 0x96, 0x09, 0xd5, 0xa6, 0x95, 0xea, 0x30, 0xec, 0x1c, 0x09, 0x7d, 0x85, - 0x8e, 0xfd, 0x8c, 0xbd, 0xb5, 0x7b, 0x0d, 0x69, 0x58, 0xcd, 0x61, 0xbc, 0xbf, 0x1d, 0xe2, 0x67, - 0x38, 0xa4, 0x71, 0x84, 0xc3, 0x22, 0xe8, 0x74, 0xf0, 0xd6, 0x32, 0xa1, 0xd2, 0xcc, 0x50, 0xb1, - 0x41, 0xe7, 0x29, 0x27, 0x74, 0x68, 0xa7, 0xec, 0x8d, 0xfd, 0xaa, 0x7b, 0x4a, 0x26, 0xa7, 0x45, - 0x8a, 0x51, 0xaa, 0xa5, 0x5e, 0xad, 0xcc, 0xaa, 0x11, 0x69, 0x11, 0xaa, 0x31, 0x1d, 0x50, 0x4d, - 0xd2, 0xaa, 0x5c, 0xba, 0x19, 0xb3, 0xb7, 0xa6, 0x49, 0x30, 0xa3, 0x7a, 0x33, 0xe8, 0x3c, 0x57, - 0x8d, 0x6a, 0x25, 0xeb, 0x67, 0x45, 0xcf, 0xc9, 0xc9, 0xc5, 0x29, 0x4d, 0xcc, 0xa9, 0xde, 0xfe, - 0xab, 0x79, 0x3f, 0x55, 0xa3, 0x5a, 0xcf, 0x50, 0x2a, 0x8d, 0x6a, 0xda, 0xa0, 0x4e, 0x79, 0xb8, - 0x51, 0x4d, 0x91, 0x74, 0xa3, 0x5a, 0xed, 0xa8, 0x7d, 0xe3, 0xa1, 0x6c, 0x8a, 0x52, 0xa9, 0xae, - 0x59, 0xb3, 0x97, 0xe6, 0x5c, 0xec, 0x5f, 0x34, 0x64, 0x55, 0x96, 0xc6, 0xaa, 0x3d, 0xe3, 0x72, - 0x45, 0xbf, 0xa5, 0xbe, 0x53, 0x40, 0x5b, 0xd4, 0x33, 0xc6, 0x45, 0x81, 0x8b, 0xa3, 0x38, 0xf4, - 0x69, 0x00, 0xba, 0xfd, 0xac, 0x11, 0xda, 0x99, 0x01, 0xa7, 0xf5, 0x3e, 0xa1, 0xd7, 0x34, 0xd3, - 0xcb, 0xc5, 0xcb, 0xf1, 0x47, 0x70, 0xe7, 0xd5, 0x59, 0xba, 0x68, 0x5f, 0xe2, 0x13, 0xec, 0x4a, - 0xd5, 0x8e, 0x5a, 0x4a, 0x72, 0xe7, 0x70, 0x7d, 0xf3, 0x16, 0x8c, 0x33, 0x24, 0xeb, 0x69, 0x33, - 0xa3, 0xe2, 0xa0, 0xbb, 0x22, 0xfe, 0x87, 0xa0, 0x68, 0x55, 0xd6, 0x7e, 0xdd, 0x85, 0x29, 0x76, - 0x7b, 0x70, 0x7a, 0x94, 0x4f, 0x45, 0x94, 0x50, 0x5e, 0xc7, 0xec, 0x81, 0x73, 0xb3, 0xea, 0x6d, - 0xea, 0xd9, 0x19, 0xf9, 0x7d, 0x7a, 0x83, 0x23, 0x9c, 0x6e, 0x76, 0xfc, 0x85, 0x54, 0x1e, 0x23, - 0xce, 0xd2, 0x8f, 0xe8, 0x35, 0x92, 0x4c, 0x4f, 0x6e, 0xeb, 0xfe, 0x85, 0x0c, 0x36, 0xfa, 0x14, - 0xe6, 0x18, 0x73, 0x25, 0x72, 0x16, 0x28, 0x87, 0x67, 0x73, 0x8c, 0xcd, 0xaf, 0x82, 0xfc, 0xeb, - 0xe2, 0xbe, 0x69, 0x68, 0xb7, 0x4f, 0x73, 0xd3, 0x34, 0x9c, 0x75, 0x36, 0x2a, 0x8f, 0xa9, 0x0a, - 0x93, 0x49, 0x5b, 0x64, 0x27, 0xb4, 0x64, 0xcf, 0x74, 0x44, 0x27, 0xe3, 0x01, 0x35, 0x0b, 0xb2, - 0xa9, 0xe6, 0x6d, 0xc3, 0xcb, 0xc9, 0x9c, 0x94, 0xd8, 0x41, 0x59, 0x72, 0x39, 0x68, 0x79, 0x66, - 0x15, 0x9b, 0xb0, 0x37, 0x43, 0x6e, 0x43, 0x44, 0xb7, 0x9c, 0x7e, 0xb0, 0x39, 0xea, 0x84, 0xe1, - 0x2e, 0x66, 0xe8, 0x5c, 0xd8, 0xc8, 0xfd, 0x06, 0xd5, 0xa4, 0xcc, 0xf9, 0xa5, 0xad, 0xc4, 0x6e, - 0x2a, 0xd7, 0xa3, 0xf9, 0x99, 0xa9, 0x9f, 0xd3, 0xb0, 0x7f, 0x23, 0x90, 0xbc, 0x5a, 0x19, 0x92, - 0x70, 0xba, 0xf2, 0xed, 0xa1, 0x70, 0xd2, 0xeb, 0xce, 0x3f, 0x1e, 0x6a, 0x6e, 0x6f, 0x48, 0xa2, - 0x2a, 0xc3, 0x65, 0x93, 0x25, 0x79, 0xb3, 0x20, 0xa8, 0x87, 0x0e, 0xe5, 0x8e, 0xc1, 0x7e, 0xed, - 0x9a, 0x7c, 0x03, 0xf4, 0x8c, 0x93, 0x60, 0xd7, 0x8d, 0x51, 0x36, 0xa5, 0x35, 0xca, 0x4b, 0x56, - 0x54, 0xb9, 0x61, 0xe3, 0x70, 0xa4, 0x04, 0x17, 0xf0, 0x37, 0x26, 0xa9, 0x14, 0x67, 0xb6, 0x64, - 0x69, 0x39, 0x9e, 0x0f, 0xfe, 0x0e, 0xe2, 0x8d, 0x10, 0xca, 0xce, 0xf6, 0xd9, 0x09, 0xc9, 0x2b, - 0xc5, 0x14, 0x21, 0x27, 0x67, 0x7a, 0x87, 0xbb, 0xe0, 0xcb, 0x96, 0x79, 0x3d, 0xfb, 0x84, 0x7a, - 0x49, 0xec, 0x7f, 0x36, 0xef, 0xb6, 0xd4, 0xe5, 0xac, 0x39, 0xc0, 0xe5, 0xec, 0xe6, 0x24, 0xed, - 0x6e, 0x90, 0x6d, 0xca, 0x9a, 0xd0, 0x12, 0x75, 0x37, 0xdc, 0x4d, 0x69, 0x33, 0x9b, 0x32, 0x78, - 0x57, 0x40, 0x54, 0xba, 0x9b, 0xa8, 0x09, 0x15, 0xb6, 0x44, 0x4c, 0x8f, 0x09, 0x65, 0xb8, 0xb6, - 0xa9, 0xb2, 0x75, 0x37, 0x27, 0xb6, 0xae, 0xc2, 0x96, 0xcb, 0x9b, 0x24, 0xda, 0xa6, 0x1f, 0x78, - 0x30, 0x52, 0x7c, 0x5b, 0x79, 0x1d, 0x66, 0x7f, 0xa2, 0x59, 0xc9, 0x6f, 0x18, 0xfd, 0x08, 0x16, - 0x8c, 0x6f, 0x34, 0xe5, 0xbd, 0x6c, 0xde, 0x0b, 0xce, 0x61, 0xc4, 0x9f, 0x43, 0xd9, 0x96, 0x87, - 0x3b, 0x09, 0x1f, 0xcf, 0x4f, 0x75, 0x2e, 0x65, 0xea, 0xd0, 0x84, 0xde, 0x5b, 0x30, 0x6f, 0xca, - 0x6d, 0x2d, 0x37, 0x47, 0x4e, 0xe2, 0x6b, 0x63, 0x8c, 0xfa, 0x36, 0x2c, 0x18, 0xf3, 0x4b, 0x4b, - 0xce, 0xe4, 0x65, 0x9f, 0x36, 0x52, 0xfc, 0x0a, 0x16, 0x2d, 0xc9, 0x94, 0x93, 0x6b, 0xa3, 0xdc, - 0x64, 0xcb, 0x39, 0xd7, 0xd7, 0x15, 0x7b, 0x9e, 0x5e, 0x19, 0x19, 0x31, 0x34, 0x95, 0x6f, 0xc5, - 0x98, 0xbc, 0x1c, 0xed, 0xd0, 0x45, 0x68, 0x4a, 0xdc, 0xab, 0x2e, 0xc2, 0x9c, 0xc4, 0xbe, 0x96, - 0xb7, 0x05, 0x8b, 0x96, 0x5c, 0xbd, 0x39, 0x54, 0x4f, 0xd1, 0xdb, 0x2d, 0x21, 0xff, 0xf5, 0xe4, - 0xad, 0xa9, 0x37, 0x86, 0xc6, 0xcc, 0xae, 0xc6, 0x7e, 0x7e, 0x42, 0xf5, 0xf8, 0x8d, 0x7e, 0x14, - 0x7b, 0xbd, 0x5e, 0x8e, 0x1a, 0x24, 0x70, 0x25, 0x64, 0xeb, 0x2e, 0x31, 0x22, 0x54, 0xdc, 0x3c, - 0x89, 0x9a, 0x41, 0xa6, 0x8a, 0xe7, 0x27, 0x30, 0xd3, 0x54, 0x1b, 0x37, 0x34, 0x62, 0x5d, 0x14, - 0x32, 0x84, 0x7b, 0x78, 0xdf, 0x87, 0xde, 0xe9, 0xd4, 0x7a, 0xbd, 0x53, 0x8d, 0xc2, 0xea, 0xdd, - 0xd4, 0xb2, 0xe8, 0x49, 0x49, 0x6d, 0x4a, 0x0e, 0x29, 0xbd, 0x9b, 0xe6, 0xc4, 0x7b, 0x6b, 0x94, - 0xa5, 0x49, 0x0e, 0xa2, 0x1c, 0x1b, 0x5c, 0x2e, 0x22, 0x43, 0xaa, 0xa3, 0x87, 0xea, 0x7b, 0x5c, - 0x96, 0xb9, 0x28, 0xc7, 0x1d, 0x97, 0x7e, 0x87, 0x9b, 0x4a, 0x75, 0xd4, 0x82, 0xb2, 0x48, 0x69, - 0xc2, 0x92, 0x8a, 0x24, 0x39, 0x19, 0x92, 0xe0, 0x21, 0x7b, 0xce, 0x93, 0x1c, 0xbe, 0x95, 0xd2, - 0xef, 0xd7, 0xa5, 0xe7, 0xc8, 0xf2, 0xb0, 0xdd, 0x46, 0xab, 0xbe, 0xfa, 0xf3, 0xff, 0xb1, 0x54, - 0xf8, 0xf9, 0x2f, 0x96, 0x0a, 0xff, 0xe9, 0x17, 0x4b, 0x85, 0xff, 0xfe, 0x8b, 0xa5, 0xc2, 0x0f, - 0x97, 0x4f, 0x97, 0x65, 0xa2, 0xd3, 0xf3, 0x71, 0x3f, 0xbe, 0xcd, 0xc8, 0x8d, 0xd3, 0xff, 0x56, - 0xfe, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0xdd, 0x81, 0x8f, 0x79, 0xb3, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0xbd, 0x5d, 0x70, 0x1c, 0x49, + 0xb6, 0x10, 0xec, 0x6e, 0xfd, 0x1f, 0xfd, 0xb8, 0x9d, 0x96, 0xac, 0x76, 0x5b, 0x56, 0xdb, 0x35, + 0x7f, 0x9e, 0xb9, 0xb3, 0xfe, 0x91, 0x66, 0x76, 0x7e, 0x77, 0xe6, 0x76, 0xb7, 0x64, 0x4b, 0xb6, + 0x2c, 0x6b, 0xaa, 0xe5, 0xf6, 0xec, 0xee, 0xec, 0xf6, 0x96, 0xba, 0xd3, 0x52, 0x7d, 0x6a, 0x55, + 0xf5, 0x56, 0x95, 0xac, 0xd1, 0x7e, 0xc1, 0x5f, 0x5c, 0xf6, 0x06, 0x01, 0x41, 0xb0, 0x44, 0x70, + 0x81, 0x0b, 0x0f, 0x10, 0x71, 0x09, 0x02, 0x88, 0x00, 0x5e, 0xee, 0x0d, 0x5e, 0x20, 0x08, 0x02, + 0x08, 0x96, 0x07, 0x22, 0x78, 0xb9, 0x41, 0xc0, 0x83, 0x80, 0x7d, 0x54, 0x04, 0xbc, 0x10, 0xf0, + 0xb0, 0x4f, 0x44, 0xfe, 0x56, 0x66, 0x55, 0x56, 0xb5, 0x64, 0xfb, 0x2e, 0x2f, 0xb6, 0x3a, 0xf3, + 0x9c, 0x93, 0x99, 0x27, 0x33, 0x4f, 0x9e, 0x73, 0xf2, 0xe4, 0x29, 0xb8, 0x1d, 0xe1, 0x1e, 0xee, + 0xfb, 0x41, 0x74, 0xa7, 0x87, 0x77, 0x9d, 0xce, 0xf1, 0x9d, 0x4e, 0xcf, 0xc5, 0x5e, 0x74, 0xa7, + 0x1f, 0xf8, 0x91, 0x7f, 0xc7, 0x39, 0x8c, 0xf6, 0x42, 0x1c, 0xbc, 0x70, 0x3b, 0xf8, 0x36, 0x2d, + 0x41, 0x23, 0xf4, 0xbf, 0xca, 0xec, 0xae, 0xbf, 0xeb, 0x33, 0x18, 0xf2, 0x17, 0xab, 0xac, 0x5c, + 0xdb, 0xf5, 0xfd, 0xdd, 0x1e, 0x66, 0xc8, 0x3b, 0x87, 0xcf, 0xef, 0xe0, 0x83, 0x7e, 0x74, 0xcc, + 0x2b, 0xab, 0xc9, 0xca, 0xc8, 0x3d, 0xc0, 0x61, 0xe4, 0x1c, 0xf4, 0x39, 0xc0, 0xad, 0xdc, 0xae, + 0x74, 0x70, 0x10, 0x85, 0x1c, 0xf2, 0xdd, 0x24, 0x64, 0x74, 0xdc, 0xc7, 0xe1, 0x1d, 0xfc, 0x02, + 0x7b, 0x91, 0xf8, 0x8f, 0x83, 0xde, 0x34, 0x83, 0xd2, 0x7f, 0x39, 0xc8, 0x77, 0xcc, 0x20, 0x47, + 0x78, 0x87, 0x0c, 0xdf, 0x93, 0x7f, 0x0c, 0x00, 0x0f, 0x9c, 0x7e, 0x1f, 0x07, 0xf1, 0x1f, 0xa9, + 0xbe, 0x1e, 0x86, 0xce, 0x2e, 0xe6, 0x7d, 0x7c, 0x71, 0x4f, 0xfd, 0xc9, 0x40, 0xad, 0x3f, 0x9c, + 0x87, 0x91, 0x55, 0x52, 0x80, 0x3e, 0x86, 0xe1, 0xed, 0xe3, 0x3e, 0x2e, 0x17, 0x6e, 0x14, 0x6e, + 0xcd, 0x2c, 0x95, 0x58, 0xfd, 0xed, 0x27, 0x7d, 0x1c, 0x38, 0x91, 0xeb, 0x7b, 0x75, 0x74, 0x7a, + 0x52, 0x9d, 0x21, 0xed, 0xbe, 0xef, 0x1f, 0xb8, 0x11, 0xe5, 0xb2, 0x4d, 0x31, 0xd0, 0x33, 0x98, + 0xb1, 0x71, 0xe8, 0x1f, 0x06, 0x1d, 0xbc, 0x86, 0x9d, 0x2e, 0x0e, 0xca, 0xc5, 0x1b, 0x85, 0x5b, + 0x93, 0x4b, 0x73, 0xb7, 0xd9, 0x90, 0xf5, 0xca, 0xfa, 0x95, 0xd3, 0x93, 0x2a, 0x0a, 0x78, 0x59, + 0x4c, 0x6c, 0xed, 0x82, 0x9d, 0x20, 0x83, 0xbe, 0x81, 0xe9, 0x06, 0x0e, 0xa2, 0xda, 0x61, 0xb4, + 0xe7, 0x07, 0x6e, 0x74, 0x5c, 0x1e, 0xa2, 0x74, 0xaf, 0x70, 0xba, 0x5a, 0x5d, 0x6b, 0xa9, 0xbe, + 0x70, 0x7a, 0x52, 0x2d, 0x93, 0x39, 0x6b, 0x3b, 0xa2, 0x54, 0x23, 0xaf, 0x13, 0x43, 0x5f, 0xc3, + 0x54, 0x33, 0x72, 0x22, 0xb7, 0xb3, 0xed, 0xef, 0x63, 0x2f, 0x2c, 0x0f, 0x6b, 0x9d, 0x56, 0xab, + 0x5a, 0x4b, 0xf5, 0x6b, 0xa7, 0x27, 0xd5, 0xf9, 0x90, 0x96, 0xb5, 0x23, 0x5a, 0xa8, 0x91, 0xd6, + 0x28, 0xa1, 0x9f, 0xc0, 0xcc, 0x56, 0xe0, 0xbf, 0x70, 0x43, 0xd7, 0xf7, 0x68, 0x51, 0x79, 0x84, + 0xd2, 0x9e, 0xe7, 0xb4, 0xf5, 0xca, 0xd6, 0x52, 0xfd, 0xfa, 0xe9, 0x49, 0xf5, 0x6a, 0x5f, 0x94, + 0xb2, 0x06, 0x74, 0xce, 0xe8, 0x28, 0x68, 0x1b, 0x26, 0x1b, 0xbd, 0xc3, 0x30, 0xc2, 0xc1, 0xa6, + 0x73, 0x80, 0xcb, 0xa3, 0x94, 0xfc, 0xac, 0xe0, 0x4b, 0x5c, 0xd3, 0x5a, 0xaa, 0x57, 0x4e, 0x4f, + 0xaa, 0x57, 0x3a, 0xac, 0xa8, 0xed, 0x39, 0x07, 0x3a, 0xcb, 0x55, 0x32, 0xe8, 0x23, 0x18, 0x7e, + 0x1a, 0xe2, 0xa0, 0x3c, 0x4e, 0xc9, 0x4d, 0x73, 0x72, 0xa4, 0xa8, 0xb5, 0xc4, 0xe6, 0xff, 0x30, + 0xc4, 0x81, 0x86, 0x4f, 0x11, 0x08, 0xa2, 0xed, 0xf7, 0x70, 0x79, 0x42, 0x43, 0x24, 0x45, 0xad, + 0x0f, 0x19, 0x62, 0xe0, 0xf7, 0xf4, 0x86, 0x29, 0x02, 0x5a, 0x87, 0x09, 0xd2, 0x72, 0xd8, 0x77, + 0x3a, 0xb8, 0x0c, 0x14, 0xbb, 0xc4, 0xb1, 0x65, 0x79, 0x7d, 0xfe, 0xf4, 0xa4, 0x7a, 0xd9, 0x13, + 0x3f, 0x35, 0x2a, 0x31, 0x36, 0xfa, 0x12, 0x46, 0x9b, 0x38, 0x78, 0x81, 0x83, 0xf2, 0x24, 0xa5, + 0x73, 0x51, 0x4c, 0x24, 0x2d, 0x6c, 0x2d, 0xd5, 0x67, 0x4f, 0x4f, 0xaa, 0xa5, 0x90, 0xfe, 0xd2, + 0x68, 0x70, 0x34, 0xb2, 0xda, 0x6c, 0xfc, 0x02, 0x07, 0x21, 0xde, 0x3e, 0xf4, 0x3c, 0xdc, 0x2b, + 0x4f, 0x69, 0xab, 0x4d, 0xab, 0x13, 0xab, 0x2d, 0x60, 0x85, 0xed, 0x88, 0x96, 0xea, 0xab, 0x4d, + 0x43, 0x40, 0x7b, 0x50, 0x62, 0x7f, 0x35, 0x7c, 0xcf, 0xc3, 0x1d, 0xb2, 0xa5, 0xca, 0xd3, 0xb4, + 0x81, 0xab, 0xbc, 0x81, 0x64, 0x75, 0x6b, 0xa9, 0x5e, 0x3d, 0x3d, 0xa9, 0x5e, 0x63, 0xb4, 0xdb, + 0x1d, 0x59, 0xa1, 0x35, 0x93, 0xa2, 0x4a, 0xc6, 0x51, 0xeb, 0x74, 0x70, 0x18, 0xda, 0xf8, 0xa7, + 0x87, 0x38, 0x8c, 0xca, 0x33, 0xda, 0x38, 0xb4, 0xba, 0xd6, 0x32, 0x1b, 0x87, 0x43, 0x0b, 0xdb, + 0x01, 0x2b, 0xd5, 0xc7, 0xa1, 0x21, 0xa0, 0x2d, 0x80, 0x5a, 0xbf, 0xdf, 0xc4, 0x21, 0x59, 0x8c, + 0xe5, 0x8b, 0x94, 0xf4, 0x65, 0x4e, 0xfa, 0x19, 0xde, 0xe1, 0x15, 0xad, 0xa5, 0xfa, 0xd5, 0xd3, + 0x93, 0xea, 0x9c, 0xd3, 0xef, 0xb7, 0x43, 0x56, 0xa4, 0x11, 0x55, 0x68, 0x30, 0xbe, 0x1f, 0xf8, + 0x11, 0xe6, 0x4b, 0xb1, 0x5c, 0x4a, 0xf0, 0x5d, 0xa9, 0x13, 0xfd, 0x0d, 0x68, 0x61, 0x9b, 0x2f, + 0xeb, 0x24, 0xdf, 0x15, 0x04, 0xb2, 0x17, 0x57, 0x9c, 0xc8, 0xd9, 0x71, 0x42, 0xcc, 0x97, 0xc7, + 0x25, 0x6d, 0x2f, 0xea, 0x95, 0xad, 0x65, 0xb6, 0x17, 0xbb, 0xbc, 0xb4, 0x6d, 0x58, 0x2f, 0x09, + 0x7a, 0x84, 0x23, 0xf1, 0xc0, 0xcb, 0x68, 0x00, 0x47, 0x8e, 0xf0, 0x8e, 0x99, 0x23, 0x31, 0x28, + 0x5a, 0x83, 0xf1, 0x67, 0x78, 0x87, 0x49, 0x8e, 0xcb, 0x94, 0xde, 0xa5, 0x98, 0x1e, 0x93, 0x19, + 0xcb, 0x6c, 0x57, 0x10, 0x6a, 0x69, 0x69, 0x21, 0xb1, 0xd1, 0xcf, 0x0b, 0x30, 0x2f, 0x76, 0x38, + 0x8e, 0x8e, 0xfc, 0x60, 0xdf, 0xf5, 0x76, 0x1b, 0xbe, 0xf7, 0xdc, 0xdd, 0x2d, 0xcf, 0x52, 0xca, + 0x37, 0x12, 0x42, 0x23, 0x01, 0xd5, 0x5a, 0xaa, 0xbf, 0x73, 0x7a, 0x52, 0x7d, 0x43, 0x0a, 0x10, + 0x59, 0x4f, 0x16, 0xe4, 0x73, 0x77, 0x57, 0x6b, 0x38, 0xab, 0x2d, 0xf4, 0xe7, 0x0a, 0x70, 0x85, + 0x8f, 0xce, 0xc6, 0x1d, 0x3f, 0xe8, 0xc6, 0xdd, 0x98, 0xa3, 0xdd, 0xa8, 0xca, 0xdd, 0x6a, 0x02, + 0x6a, 0x2d, 0xd5, 0xdf, 0x3e, 0x3d, 0xa9, 0x5a, 0x9c, 0x71, 0xed, 0x40, 0x54, 0x9b, 0x3a, 0x91, + 0xd1, 0x10, 0x59, 0x09, 0x44, 0xf8, 0x6f, 0x05, 0xf8, 0x39, 0x0e, 0xb0, 0xd7, 0xc1, 0xe5, 0x2b, + 0xda, 0x4a, 0xd0, 0x2b, 0x85, 0x54, 0x26, 0x47, 0x49, 0xbb, 0x2f, 0x8b, 0xf5, 0x95, 0xa0, 0xa3, + 0xa0, 0x9f, 0x02, 0xe2, 0x0c, 0xa8, 0x1d, 0x76, 0xdd, 0x88, 0x0f, 0x70, 0x9e, 0xb6, 0x72, 0x4d, + 0xe7, 0xb3, 0x02, 0xd0, 0x5a, 0xaa, 0x5b, 0xa7, 0x27, 0xd5, 0x45, 0xc1, 0x62, 0x87, 0x54, 0x99, + 0x06, 0x66, 0x20, 0x4e, 0x24, 0xef, 0x86, 0xdf, 0xd9, 0x2f, 0x97, 0x35, 0xc9, 0x4b, 0x8a, 0x84, + 0xc8, 0xee, 0xf9, 0x9d, 0x7d, 0x5d, 0xf2, 0x92, 0x5a, 0x14, 0xc1, 0x65, 0x3e, 0x4b, 0x36, 0x0e, + 0xa3, 0xc0, 0xa5, 0xb2, 0x23, 0x2c, 0x5f, 0xa5, 0x74, 0x16, 0x84, 0x0c, 0x4e, 0x43, 0xb4, 0x3e, + 0x60, 0xbd, 0xe5, 0x0b, 0xa1, 0x1d, 0x28, 0x75, 0x5a, 0x33, 0x26, 0xf2, 0xe8, 0x4f, 0xc1, 0xdc, + 0x33, 0xd7, 0xeb, 0xfa, 0x47, 0xe1, 0x0a, 0x0e, 0xf7, 0x23, 0xbf, 0xdf, 0x64, 0x9a, 0x5e, 0xb9, + 0x42, 0xdb, 0x5d, 0x14, 0xcb, 0xdc, 0x04, 0xd3, 0x5a, 0xae, 0xbf, 0x75, 0x7a, 0x52, 0xbd, 0x79, + 0xc4, 0x2a, 0xdb, 0x5d, 0x56, 0xdb, 0xe6, 0xca, 0xa2, 0xd6, 0xb8, 0xb9, 0x15, 0xb2, 0x04, 0xf4, + 0x8a, 0xf2, 0x35, 0x6d, 0x09, 0xe8, 0x95, 0x42, 0x18, 0x24, 0x1a, 0xd4, 0x97, 0x80, 0x8e, 0x82, + 0x1e, 0xc0, 0xb8, 0x10, 0x0f, 0xe5, 0x05, 0x6d, 0xeb, 0x8a, 0xe2, 0xd6, 0x32, 0xd3, 0x80, 0x84, + 0x88, 0xd1, 0x77, 0xae, 0x80, 0x42, 0x1b, 0x30, 0x41, 0x65, 0x24, 0x15, 0x59, 0xd7, 0x29, 0x25, + 0x24, 0x16, 0xaa, 0x28, 0x6f, 0x2d, 0xd7, 0xcb, 0xa7, 0x27, 0xd5, 0x59, 0x26, 0x65, 0x53, 0x82, + 0x2a, 0x26, 0x80, 0x96, 0x61, 0xa8, 0xd6, 0xef, 0x97, 0x17, 0x29, 0x9d, 0xa9, 0x98, 0x4e, 0x6b, + 0xb9, 0x7e, 0xe9, 0xf4, 0xa4, 0x3a, 0xed, 0xf4, 0xf5, 0x61, 0x11, 0x68, 0xb4, 0x03, 0xa5, 0xa6, + 0xe7, 0x1f, 0x3d, 0xef, 0x39, 0xfb, 0x58, 0x88, 0xb7, 0x6a, 0xb6, 0x78, 0xa3, 0x87, 0x55, 0x28, + 0x10, 0x8c, 0x42, 0x2e, 0x45, 0x8f, 0x1c, 0x8b, 0x8f, 0x0e, 0x77, 0x70, 0xe0, 0xe1, 0x08, 0x87, + 0x7c, 0xb4, 0x37, 0xb4, 0x63, 0x31, 0x59, 0xdd, 0x5a, 0x66, 0x2d, 0xed, 0xcb, 0x72, 0xd3, 0xd8, + 0x53, 0x54, 0x51, 0x0f, 0x2e, 0xc5, 0x65, 0xe2, 0xa8, 0xb9, 0x49, 0x9b, 0xaa, 0xa4, 0x9a, 0x8a, + 0x8f, 0x9b, 0x1b, 0xa7, 0x27, 0xd5, 0x05, 0xa5, 0x2d, 0xd3, 0x91, 0x93, 0x26, 0x8c, 0x1e, 0xc1, + 0xc4, 0xba, 0x17, 0x46, 0x4e, 0xaf, 0x87, 0x83, 0xb2, 0xa5, 0x4d, 0x9f, 0x2c, 0x6f, 0xdd, 0x63, + 0x42, 0xdc, 0x15, 0x05, 0xfa, 0xec, 0x49, 0xb8, 0x3a, 0xc0, 0xb8, 0xd0, 0x8c, 0x1f, 0x0e, 0x8f, + 0x8f, 0x95, 0xc6, 0xad, 0x35, 0x18, 0x79, 0xe6, 0x44, 0x9d, 0x3d, 0xf4, 0x25, 0x8c, 0x3c, 0x72, + 0xbd, 0x6e, 0x58, 0x2e, 0xdc, 0x18, 0xa2, 0xca, 0x13, 0x53, 0xdb, 0x69, 0x25, 0xa9, 0xa8, 0xcf, + 0xff, 0xf2, 0xa4, 0x7a, 0xe1, 0xf4, 0xa4, 0x7a, 0x71, 0x9f, 0x80, 0x29, 0xba, 0x3b, 0xc3, 0xb3, + 0xfe, 0xb0, 0x08, 0x13, 0x12, 0x1a, 0x2d, 0xc0, 0x30, 0xf9, 0x9f, 0x1a, 0x01, 0x13, 0xf5, 0xf1, + 0xd3, 0x93, 0xea, 0x30, 0xc1, 0xb3, 0x69, 0x29, 0x5a, 0x82, 0xc9, 0x0d, 0xdf, 0xe9, 0x36, 0x71, + 0x27, 0xc0, 0x51, 0x48, 0xb5, 0xfc, 0xf1, 0x7a, 0xe9, 0xf4, 0xa4, 0x3a, 0xd5, 0xf3, 0x9d, 0x6e, + 0x3b, 0x64, 0xe5, 0xb6, 0x0a, 0x44, 0x28, 0x52, 0x15, 0x75, 0x28, 0xa6, 0x48, 0x54, 0x39, 0x9b, + 0x96, 0xa2, 0x87, 0x30, 0x7a, 0xdf, 0xed, 0x91, 0x99, 0x18, 0xa6, 0xfd, 0x5f, 0x48, 0xf6, 0xff, + 0x36, 0xab, 0x5e, 0xf5, 0xa2, 0xe0, 0x98, 0x69, 0x70, 0xcf, 0x69, 0x81, 0x32, 0x10, 0x4e, 0x01, + 0xdd, 0x85, 0xb1, 0xe6, 0xe1, 0x0e, 0xed, 0xfe, 0x08, 0x6d, 0x8c, 0x6e, 0xb3, 0xf0, 0x70, 0xa7, + 0x4d, 0x86, 0xa0, 0x20, 0x08, 0xb0, 0xca, 0x27, 0x30, 0xa9, 0x90, 0x47, 0x25, 0x18, 0xda, 0xc7, + 0xc7, 0x6c, 0xec, 0x36, 0xf9, 0x13, 0xcd, 0xc2, 0xc8, 0x0b, 0xa7, 0x77, 0x88, 0xe9, 0x50, 0x27, + 0x6c, 0xf6, 0xe3, 0xd3, 0xe2, 0xc7, 0x05, 0xeb, 0x8f, 0x46, 0xa1, 0xb4, 0xe6, 0x87, 0x11, 0x31, + 0x29, 0xa4, 0x6e, 0xf4, 0x06, 0x8c, 0x92, 0xb2, 0xf5, 0x15, 0xce, 0xbf, 0xc9, 0xd3, 0x93, 0xea, + 0xd8, 0x9e, 0x1f, 0x46, 0x6d, 0xb7, 0x6b, 0xf3, 0x2a, 0xf4, 0x2e, 0x8c, 0x6f, 0xfa, 0x5d, 0x4c, + 0x99, 0x42, 0xc9, 0xd6, 0xa7, 0x4f, 0x4f, 0xaa, 0x13, 0x9e, 0xdf, 0xc5, 0x54, 0x3d, 0xb7, 0x65, + 0x35, 0x6a, 0x71, 0xb5, 0x9a, 0xf1, 0xae, 0x4e, 0x78, 0x47, 0xf4, 0xe8, 0x5f, 0x9f, 0x54, 0xbf, + 0xbb, 0xeb, 0x46, 0x7b, 0x87, 0x3b, 0xb7, 0x3b, 0xfe, 0xc1, 0x9d, 0xdd, 0xc0, 0x79, 0xe1, 0x46, + 0xd4, 0x48, 0x73, 0x7a, 0x77, 0xa4, 0xe9, 0xe7, 0xf4, 0x5d, 0x6e, 0x72, 0x36, 0x8f, 0xc3, 0x08, + 0x1f, 0x10, 0x4a, 0x5c, 0xeb, 0x7e, 0x06, 0xb3, 0xb5, 0x6e, 0xd7, 0x65, 0x18, 0x5b, 0x81, 0xeb, + 0x75, 0xdc, 0xbe, 0xd3, 0x0b, 0xe9, 0x1c, 0x4c, 0xd4, 0xdf, 0x38, 0x3d, 0xa9, 0x56, 0x1d, 0x59, + 0xdf, 0xee, 0x4b, 0x00, 0x85, 0x87, 0x46, 0x02, 0x68, 0x19, 0xc6, 0x57, 0x36, 0x9b, 0x54, 0x27, + 0x2f, 0x8f, 0x50, 0x62, 0x74, 0x81, 0x77, 0xbd, 0x90, 0x0e, 0x4d, 0x25, 0x20, 0x01, 0xd1, 0x77, + 0x61, 0x6a, 0xeb, 0x70, 0xa7, 0xe7, 0x76, 0xb6, 0x37, 0x9a, 0x8f, 0xf0, 0x31, 0x35, 0x66, 0xa6, + 0xd8, 0xd9, 0xd5, 0xa7, 0xe5, 0xed, 0xa8, 0x17, 0xb6, 0xf7, 0xf1, 0xb1, 0xad, 0xc1, 0xc5, 0x78, + 0xcd, 0xe6, 0x1a, 0xc1, 0x1b, 0x4b, 0xe1, 0x85, 0xe1, 0x9e, 0x8a, 0xc7, 0xe0, 0xd0, 0x1d, 0x00, + 0xa6, 0x22, 0xd6, 0xba, 0x5d, 0x66, 0xeb, 0x4c, 0xd4, 0x2f, 0x9e, 0x9e, 0x54, 0x27, 0xb9, 0x52, + 0xe9, 0x74, 0xbb, 0x81, 0xad, 0x80, 0xa0, 0x06, 0x8c, 0xdb, 0x3e, 0x63, 0x30, 0xb7, 0x70, 0x2e, + 0x4a, 0x0b, 0x87, 0x15, 0x73, 0x9b, 0x96, 0xff, 0x52, 0x47, 0x29, 0x20, 0x50, 0x15, 0xc6, 0x36, + 0xfd, 0x86, 0xd3, 0xd9, 0x63, 0x76, 0xce, 0x78, 0x7d, 0xe4, 0xf4, 0xa4, 0x5a, 0xf8, 0x8e, 0x2d, + 0x4a, 0xd1, 0x0b, 0x98, 0x8c, 0x27, 0x2a, 0x2c, 0x4f, 0x52, 0xf6, 0x6d, 0x13, 0xe3, 0x2d, 0xa4, + 0xc5, 0x6d, 0x32, 0xf5, 0x0a, 0x07, 0x5f, 0x61, 0x15, 0xa8, 0x0d, 0xa1, 0x1e, 0x5c, 0x7f, 0x4a, + 0x24, 0xcd, 0x4e, 0x0f, 0xc7, 0xc5, 0xb5, 0x30, 0xc4, 0x01, 0xa1, 0xb5, 0xbe, 0x42, 0xcd, 0xa0, + 0x09, 0xae, 0x7f, 0xc5, 0x3d, 0x69, 0x3b, 0x02, 0xa4, 0xed, 0xaa, 0x9b, 0x2b, 0x9f, 0x98, 0xf5, + 0x07, 0x00, 0x25, 0x62, 0x32, 0x6a, 0xfb, 0xe6, 0x7d, 0x98, 0x60, 0x33, 0xf4, 0x88, 0x6f, 0xbf, + 0xa9, 0xfa, 0xcc, 0xe9, 0x49, 0x15, 0xf8, 0x34, 0x92, 0x29, 0x8c, 0x01, 0xd0, 0x2d, 0x18, 0x27, + 0x14, 0xbc, 0x78, 0x03, 0x4d, 0x9d, 0x9e, 0x54, 0xc7, 0x0f, 0x79, 0x99, 0x2d, 0x6b, 0x51, 0x13, + 0xc6, 0x56, 0xbf, 0xed, 0xbb, 0x01, 0x0e, 0xb9, 0xe7, 0xa0, 0x72, 0x9b, 0x39, 0x84, 0x6e, 0x0b, + 0x87, 0xd0, 0xed, 0x6d, 0xe1, 0x10, 0xaa, 0x5f, 0xe7, 0x82, 0xf2, 0x12, 0x66, 0x28, 0xf1, 0x98, + 0x7e, 0xf1, 0x5f, 0xab, 0x05, 0x5b, 0x50, 0x42, 0xef, 0xc3, 0xe8, 0x7d, 0x3f, 0x38, 0x70, 0x22, + 0xea, 0x30, 0x98, 0xe0, 0x42, 0x89, 0x96, 0x68, 0x42, 0x89, 0x96, 0xa0, 0xfb, 0x30, 0x63, 0xfb, + 0x87, 0x11, 0xde, 0xf6, 0xc5, 0x91, 0xc3, 0x64, 0xd3, 0xe2, 0xe9, 0x49, 0xb5, 0x12, 0x90, 0x9a, + 0x76, 0xe4, 0xa7, 0x0f, 0x15, 0x3b, 0x81, 0x85, 0x56, 0x61, 0x46, 0xb3, 0xc3, 0xc2, 0xf2, 0x28, + 0x5d, 0x20, 0x4c, 0x47, 0xd5, 0xac, 0x37, 0x75, 0x97, 0x25, 0x90, 0xd0, 0xa6, 0xe9, 0x10, 0x1c, + 0xa3, 0x3d, 0x1a, 0x78, 0xd0, 0x99, 0x8e, 0x39, 0x0c, 0x17, 0x79, 0x47, 0xa5, 0xd6, 0x33, 0xce, + 0xad, 0x37, 0x26, 0xc8, 0x13, 0xb5, 0xf5, 0x37, 0x38, 0x97, 0xaf, 0xc9, 0xb1, 0xa7, 0xf5, 0x20, + 0x3b, 0x49, 0x93, 0xc8, 0x15, 0x29, 0x33, 0x27, 0x68, 0x6f, 0x99, 0x4f, 0x40, 0xc8, 0x4c, 0x75, + 0xc7, 0x49, 0xe9, 0xb9, 0x01, 0x23, 0x4f, 0x43, 0x67, 0x97, 0xed, 0xb7, 0x99, 0xa5, 0x9b, 0xbc, + 0x47, 0xc9, 0xd5, 0x47, 0xdd, 0x48, 0x14, 0xb0, 0x7e, 0x99, 0x9c, 0x93, 0xd4, 0x47, 0xa6, 0x9e, + 0x93, 0xb4, 0x0e, 0x7d, 0x05, 0xc0, 0x7b, 0x45, 0x14, 0xa9, 0x49, 0xae, 0xda, 0x69, 0x83, 0xac, + 0xf5, 0xfb, 0xf5, 0x45, 0x3e, 0xbe, 0x2b, 0x72, 0x7c, 0x9a, 0x6a, 0x65, 0x2b, 0x44, 0xd0, 0x97, + 0x30, 0x45, 0xb7, 0xa3, 0x98, 0xd1, 0x29, 0x3a, 0xa3, 0xd4, 0xd3, 0x44, 0x77, 0x98, 0x61, 0x3e, + 0x35, 0x04, 0xf4, 0xa7, 0x61, 0x8e, 0x93, 0x4b, 0x68, 0xb5, 0xd3, 0x5c, 0x8b, 0xd7, 0xba, 0xa7, + 0xc3, 0xd4, 0xdf, 0xe3, 0x3d, 0xb5, 0x64, 0x4f, 0x33, 0xf5, 0x5c, 0xdb, 0xdc, 0x0c, 0x5a, 0x87, + 0x8b, 0x4f, 0x43, 0xac, 0x8d, 0x61, 0x86, 0xca, 0x36, 0xaa, 0xa0, 0x1d, 0x86, 0xb8, 0x9d, 0x35, + 0x8e, 0x24, 0x1e, 0xb2, 0x01, 0xad, 0x04, 0x7e, 0x3f, 0xb1, 0xc6, 0x2f, 0x52, 0x8e, 0x50, 0x7b, + 0xa3, 0x1b, 0xf8, 0xfd, 0x76, 0xf6, 0x42, 0x37, 0x60, 0xa3, 0x1f, 0xc3, 0x95, 0xd8, 0x2d, 0xb2, + 0xe2, 0x3a, 0xbb, 0x9e, 0x1f, 0x46, 0x6e, 0x67, 0x7d, 0x85, 0x7a, 0x18, 0xb8, 0x48, 0x8b, 0xdd, + 0x2a, 0xed, 0xae, 0x04, 0xd1, 0x45, 0x5a, 0x06, 0x15, 0xeb, 0x6b, 0x98, 0x90, 0x6b, 0x07, 0x8d, + 0xc1, 0x50, 0xad, 0xd7, 0x2b, 0x5d, 0x20, 0x7f, 0x34, 0x9b, 0x6b, 0xa5, 0x02, 0x9a, 0x01, 0x88, + 0x37, 0x4c, 0xa9, 0x88, 0xa6, 0x62, 0xd3, 0xa0, 0x34, 0x44, 0xe1, 0xfb, 0xfd, 0xd2, 0x30, 0x42, + 0x49, 0x9b, 0xa4, 0x34, 0x62, 0xfd, 0xa7, 0x42, 0x6a, 0x5f, 0x11, 0xe5, 0x8b, 0x9b, 0x31, 0x74, + 0x1b, 0x30, 0x0d, 0x83, 0x2a, 0x5f, 0xdc, 0x00, 0x62, 0xda, 0x83, 0x0a, 0x44, 0x44, 0xe5, 0x16, + 0x59, 0x02, 0x1d, 0xbf, 0xa7, 0x8a, 0xca, 0x3e, 0x2f, 0xb3, 0x65, 0x2d, 0x5a, 0x52, 0x84, 0xea, + 0x50, 0xac, 0x3d, 0x09, 0xa1, 0xaa, 0x6e, 0x30, 0x29, 0x5e, 0x97, 0x14, 0x5b, 0x67, 0x38, 0xc6, + 0x31, 0x6c, 0x68, 0x09, 0x67, 0x1d, 0x66, 0x2c, 0x59, 0xf4, 0x59, 0xca, 0x34, 0x63, 0x23, 0xa4, + 0x7b, 0x32, 0xb1, 0x32, 0x53, 0x56, 0x57, 0x15, 0x46, 0x36, 0xfc, 0x5d, 0xd7, 0xe3, 0x83, 0x9c, + 0x38, 0x3d, 0xa9, 0x8e, 0xf4, 0x48, 0x81, 0xcd, 0xca, 0xad, 0x7f, 0x51, 0x54, 0xb7, 0xaf, 0x54, + 0x4a, 0x0b, 0x46, 0xa5, 0xf4, 0x7d, 0x98, 0xe0, 0xe6, 0xc9, 0xfa, 0x0a, 0xa7, 0x48, 0x8f, 0x23, + 0xe1, 0x7d, 0x70, 0xbb, 0x76, 0x0c, 0x40, 0xd4, 0x09, 0x76, 0x36, 0x51, 0x75, 0x62, 0x28, 0x56, + 0x27, 0xf8, 0xe9, 0xc5, 0xd4, 0x89, 0x18, 0x84, 0x4c, 0xa4, 0xea, 0xbb, 0x1d, 0x8e, 0x27, 0x52, + 0xf5, 0xd2, 0xea, 0x9e, 0xd9, 0x4f, 0x01, 0x6a, 0xcf, 0x9a, 0xf4, 0x30, 0xb5, 0x37, 0xf9, 0x11, + 0x42, 0x1d, 0xbb, 0xce, 0x51, 0xc8, 0x8f, 0xe3, 0x40, 0xd5, 0x3b, 0x14, 0x68, 0x54, 0x87, 0xe9, + 0xda, 0xcf, 0x0e, 0x03, 0xbc, 0xde, 0xc5, 0x5e, 0xe4, 0x46, 0x4c, 0xc1, 0x9a, 0xe0, 0x7e, 0x3f, + 0x52, 0xd1, 0x76, 0x79, 0x8d, 0x42, 0x40, 0x47, 0xb1, 0x7a, 0x30, 0xf3, 0x00, 0x47, 0x64, 0xe6, + 0xc5, 0x99, 0x9d, 0xcf, 0xc2, 0xcf, 0x61, 0xf2, 0x99, 0x1b, 0xed, 0xe9, 0x96, 0x02, 0xed, 0xf0, + 0x91, 0x1b, 0xed, 0x09, 0x4b, 0x41, 0x69, 0x4f, 0x05, 0xb7, 0x56, 0xe1, 0x22, 0x6f, 0x4d, 0xaa, + 0x08, 0x4b, 0x3a, 0xc1, 0x42, 0x6c, 0x7a, 0xa8, 0x04, 0x75, 0x32, 0x7f, 0x54, 0x84, 0xb9, 0xc6, + 0x9e, 0xe3, 0xed, 0xe2, 0x2d, 0x27, 0x0c, 0x8f, 0xfc, 0xa0, 0xab, 0x74, 0x9e, 0x3a, 0xba, 0x53, + 0x9d, 0xa7, 0xde, 0xec, 0x25, 0x98, 0x7c, 0xd2, 0xeb, 0x0a, 0x1c, 0xda, 0xf9, 0x29, 0xd6, 0x96, + 0xdf, 0xeb, 0xb6, 0xfb, 0x82, 0x96, 0x0a, 0x44, 0x70, 0x36, 0xf1, 0x91, 0xc4, 0x19, 0x8a, 0x71, + 0x3c, 0x7c, 0xa4, 0xe0, 0x28, 0x40, 0x68, 0x15, 0x2e, 0x35, 0x71, 0xc7, 0xf7, 0xba, 0xf7, 0x9d, + 0x4e, 0xe4, 0x07, 0xcc, 0xdf, 0x37, 0x1c, 0x1f, 0x6f, 0x21, 0xad, 0x6c, 0x3f, 0xa7, 0xb5, 0xcc, + 0xcd, 0x67, 0xa7, 0x31, 0xd0, 0x13, 0xea, 0x2d, 0xa4, 0xd7, 0x45, 0xfc, 0x9e, 0xe1, 0xad, 0xdb, + 0xf2, 0xfe, 0xa8, 0x11, 0x60, 0x3a, 0x87, 0x4e, 0x4f, 0x6a, 0x61, 0x36, 0x0e, 0xfb, 0xbe, 0x17, + 0x62, 0x26, 0x0b, 0x04, 0xa4, 0x2d, 0x89, 0x58, 0x38, 0xa9, 0x6b, 0xa0, 0x66, 0x4a, 0xfb, 0x60, + 0xe6, 0x66, 0x96, 0x4f, 0x99, 0x6e, 0xda, 0x84, 0xb0, 0x4e, 0xea, 0x22, 0xd6, 0x53, 0x98, 0xde, + 0xea, 0x1d, 0xee, 0xba, 0x1e, 0x11, 0x0e, 0x4d, 0xfc, 0x53, 0xb4, 0x02, 0x10, 0x17, 0xf0, 0x16, + 0x84, 0xa7, 0x21, 0xae, 0x68, 0x2d, 0xf3, 0xed, 0x45, 0x4b, 0xa8, 0xfa, 0x60, 0x2b, 0x78, 0xd6, + 0x5f, 0x1c, 0x02, 0xc4, 0xdb, 0x68, 0x46, 0x4e, 0x84, 0x9b, 0x38, 0x22, 0x9a, 0xca, 0x15, 0x28, + 0x4a, 0xbb, 0x6c, 0xf4, 0xf4, 0xa4, 0x5a, 0x74, 0xbb, 0x76, 0x71, 0x7d, 0x05, 0x7d, 0x00, 0x23, + 0x14, 0x8c, 0x4e, 0xf3, 0x8c, 0x6c, 0x4f, 0xa5, 0xc0, 0xe4, 0x49, 0x48, 0xfe, 0xb4, 0x19, 0x30, + 0xfa, 0x10, 0x26, 0x56, 0x70, 0x0f, 0xef, 0x3a, 0x91, 0x2f, 0xf6, 0x3c, 0xb3, 0x74, 0x44, 0xa1, + 0xb2, 0xb4, 0x63, 0x48, 0xa2, 0x3b, 0xda, 0xd8, 0x09, 0x7d, 0x4f, 0xd5, 0x1d, 0x03, 0x5a, 0xa2, + 0xea, 0x8e, 0x0c, 0x06, 0xfd, 0x5e, 0x01, 0x26, 0x6b, 0x9e, 0xc7, 0x2d, 0x88, 0x90, 0x4f, 0xee, + 0xdc, 0x6d, 0x79, 0xdb, 0xb7, 0xe1, 0xec, 0xe0, 0x5e, 0x8b, 0xd8, 0xa4, 0x61, 0xfd, 0x1b, 0x72, + 0x9c, 0xff, 0x97, 0x93, 0xea, 0x67, 0xe7, 0xb0, 0x09, 0xe2, 0x7b, 0xc3, 0xed, 0xc0, 0x71, 0xa3, + 0x90, 0x7a, 0xec, 0xe3, 0x06, 0xd5, 0xed, 0xa9, 0xf4, 0x03, 0xbd, 0x0b, 0x23, 0xcc, 0x46, 0x61, + 0x2a, 0x28, 0x9d, 0xec, 0x84, 0x71, 0x62, 0x33, 0x08, 0xeb, 0x0d, 0x98, 0xe0, 0x9c, 0x5c, 0x5f, + 0xc9, 0x9a, 0x02, 0xab, 0x01, 0x0b, 0x0f, 0x70, 0x64, 0xe3, 0x10, 0x47, 0x62, 0x6f, 0xd0, 0x95, + 0x1d, 0x9b, 0xd5, 0x63, 0xf4, 0xb7, 0x44, 0xa6, 0xf3, 0xc1, 0xf6, 0x83, 0xa8, 0xb1, 0xfe, 0x7c, + 0x01, 0xaa, 0x8d, 0x00, 0x93, 0x39, 0xca, 0x24, 0x94, 0x2f, 0xb3, 0x16, 0xf8, 0x05, 0x68, 0x31, + 0xae, 0x25, 0x5c, 0xe2, 0x97, 0x9c, 0x6f, 0xc1, 0xd0, 0xf6, 0xf6, 0x06, 0x9d, 0xeb, 0x21, 0x3a, + 0xe4, 0xa1, 0x28, 0xea, 0xfd, 0xfa, 0xa4, 0x3a, 0xbe, 0x72, 0xc8, 0x2e, 0x48, 0x6d, 0x52, 0x6f, + 0x3d, 0x87, 0x39, 0x1b, 0x7b, 0xf8, 0x88, 0x58, 0x40, 0x9a, 0x8d, 0x53, 0x85, 0x11, 0xb6, 0xc1, + 0x53, 0x43, 0x60, 0xe5, 0xba, 0x11, 0x54, 0x1c, 0x60, 0x04, 0x59, 0xff, 0xb0, 0x08, 0x25, 0x36, + 0xdc, 0xba, 0x1f, 0x9d, 0x6d, 0x7c, 0x7c, 0x04, 0xc5, 0xfc, 0x11, 0xa0, 0xb7, 0x63, 0x6e, 0x0f, + 0xc5, 0x2a, 0x03, 0xed, 0x2a, 0x39, 0xf9, 0x44, 0x25, 0x19, 0x10, 0x5b, 0x05, 0xcc, 0x6b, 0x40, + 0x07, 0x44, 0x57, 0x01, 0x9f, 0x7b, 0xf4, 0xbb, 0x05, 0x18, 0x65, 0xeb, 0x2a, 0x7f, 0xe5, 0x3e, + 0x7b, 0x3d, 0x2b, 0xb7, 0x14, 0xd1, 0xbf, 0xd4, 0x7d, 0xc4, 0xea, 0xac, 0x7f, 0x5c, 0x84, 0x4b, + 0x0a, 0xaf, 0x98, 0xf4, 0x43, 0xef, 0x32, 0x8d, 0x47, 0x61, 0x18, 0xf5, 0xc3, 0x10, 0x8d, 0xa7, + 0x1d, 0xdb, 0x91, 0x94, 0x73, 0xef, 0xc2, 0x38, 0x19, 0x52, 0xd2, 0x65, 0x43, 0xcf, 0x5d, 0x06, + 0x2a, 0xaa, 0xcf, 0xcc, 0xbd, 0x3b, 0x30, 0x4e, 0xff, 0x24, 0x33, 0x32, 0x9c, 0x3d, 0x23, 0x12, + 0x08, 0xb9, 0x00, 0x0f, 0x7d, 0xd7, 0x7b, 0x8c, 0xa3, 0x3d, 0x5f, 0x38, 0xb8, 0xd6, 0x89, 0x1c, + 0xfc, 0xff, 0x7c, 0xd7, 0x6b, 0x1f, 0xd0, 0xe2, 0xf3, 0xba, 0x04, 0x62, 0x82, 0xb6, 0x42, 0xdc, + 0xba, 0x0b, 0x25, 0x22, 0xb2, 0xce, 0xbe, 0xb4, 0xac, 0x59, 0x40, 0x0f, 0x70, 0x54, 0xf7, 0xb5, + 0x33, 0xdb, 0x9a, 0x86, 0xc9, 0x2d, 0xd7, 0xdb, 0x15, 0x3f, 0xff, 0xf3, 0x10, 0x4c, 0xb1, 0xdf, + 0x7c, 0x06, 0x12, 0x8a, 0x50, 0xe1, 0x2c, 0x8a, 0xd0, 0xc7, 0x30, 0xcd, 0xdd, 0xc0, 0x38, 0xa0, + 0x0e, 0x69, 0x36, 0x1f, 0xd4, 0xeb, 0xc3, 0xdc, 0xc0, 0xed, 0x17, 0xac, 0xc6, 0xd6, 0x01, 0xd1, + 0x06, 0xcc, 0xb0, 0x82, 0xfb, 0xd8, 0x89, 0x0e, 0x63, 0x9f, 0xc0, 0x45, 0x6e, 0x25, 0x89, 0x62, + 0x26, 0xcf, 0x38, 0xad, 0xe7, 0xbc, 0xd0, 0x4e, 0xe0, 0xa2, 0x2f, 0xe1, 0xe2, 0x56, 0xe0, 0x7f, + 0x7b, 0xac, 0xa8, 0x7e, 0x4c, 0xa4, 0xcf, 0x9d, 0x9e, 0x54, 0x2f, 0xf5, 0x49, 0x55, 0x5b, 0x55, + 0x00, 0x93, 0xd0, 0x64, 0x4d, 0xad, 0x87, 0x75, 0x3f, 0x70, 0xbd, 0x5d, 0x3a, 0x9b, 0xe3, 0x6c, + 0x4d, 0xb9, 0x61, 0x7b, 0x87, 0x16, 0xda, 0xb2, 0x1a, 0x7d, 0x01, 0x17, 0x37, 0xdc, 0x0e, 0xf6, + 0x42, 0xfc, 0xcc, 0x09, 0x3c, 0xd7, 0xdb, 0x15, 0x92, 0x97, 0x1e, 0x1f, 0x3d, 0x56, 0xd5, 0x3e, + 0xe2, 0x75, 0x76, 0x12, 0x38, 0xe1, 0xf0, 0x1a, 0x1b, 0xec, 0xf0, 0xba, 0x0b, 0xb0, 0xe1, 0x3b, + 0xdd, 0x5a, 0xaf, 0xd7, 0xa8, 0x85, 0xd4, 0xa0, 0x57, 0xdd, 0xbc, 0x4e, 0xaf, 0xd7, 0xee, 0x38, + 0xa1, 0xad, 0xc0, 0x58, 0xff, 0x73, 0x08, 0xc6, 0x25, 0x6f, 0x6e, 0xab, 0x86, 0x0f, 0x57, 0xd5, + 0xa8, 0x28, 0x8b, 0xbd, 0x0b, 0xb6, 0x02, 0x81, 0xae, 0xb2, 0xcb, 0x09, 0xa6, 0x24, 0x8e, 0x91, + 0x6d, 0xe0, 0xf4, 0xfb, 0xec, 0x0a, 0xe2, 0x0a, 0x14, 0x57, 0xea, 0x74, 0xa2, 0xc6, 0xd9, 0x91, + 0xd1, 0xdd, 0xb1, 0x8b, 0x2b, 0x75, 0xb2, 0x1c, 0x9f, 0xac, 0xaf, 0x34, 0x28, 0xcf, 0xc7, 0xd9, + 0x72, 0xf4, 0xdd, 0x6e, 0xc7, 0xa6, 0xa5, 0xa4, 0xb6, 0x59, 0x7b, 0xbc, 0xc1, 0xf9, 0x4a, 0x6b, + 0x43, 0xe7, 0xa0, 0x67, 0xd3, 0x52, 0x62, 0x69, 0x30, 0x4d, 0xa4, 0xe1, 0x7b, 0x51, 0xe0, 0xf7, + 0x42, 0xaa, 0x10, 0x8f, 0x6b, 0x4a, 0x4b, 0x87, 0x57, 0xd9, 0x09, 0x50, 0xf4, 0x0c, 0xe6, 0x6b, + 0xdd, 0x17, 0x8e, 0xd7, 0xc1, 0x5d, 0x56, 0xf3, 0xcc, 0x0f, 0xf6, 0x9f, 0xf7, 0xfc, 0xa3, 0x90, + 0x32, 0x76, 0x9c, 0x3b, 0x64, 0x38, 0x88, 0x30, 0x58, 0x8f, 0x04, 0x90, 0x9d, 0x85, 0x4d, 0xc4, + 0x69, 0xa3, 0xe7, 0x1f, 0x76, 0x39, 0xbb, 0xa9, 0x38, 0xed, 0x90, 0x02, 0x9b, 0x95, 0x13, 0x2e, + 0xad, 0x35, 0x1f, 0x53, 0xf7, 0x07, 0xe7, 0xd2, 0x5e, 0x78, 0x60, 0x93, 0x32, 0xf4, 0x16, 0x8c, + 0x09, 0xa3, 0x89, 0xf9, 0x16, 0xa9, 0xe3, 0x59, 0x18, 0x4b, 0xa2, 0x8e, 0xec, 0x1d, 0x1b, 0x77, + 0xfc, 0x17, 0x38, 0x38, 0x6e, 0xf8, 0x5d, 0x2c, 0x8c, 0x75, 0x16, 0x9f, 0xc1, 0x2b, 0xda, 0x1d, + 0x52, 0x63, 0xeb, 0x80, 0x0f, 0x87, 0xc7, 0x27, 0x4b, 0x53, 0x0f, 0x87, 0xc7, 0xa7, 0x4a, 0xd3, + 0x0f, 0x87, 0xc7, 0xa7, 0x4b, 0x33, 0xd6, 0x3d, 0xb8, 0xc4, 0x64, 0xc4, 0x99, 0x6d, 0x02, 0x6b, + 0x0b, 0xa0, 0x89, 0x0f, 0x9c, 0xfe, 0x9e, 0x4f, 0x16, 0x49, 0x5d, 0xfd, 0xc5, 0x95, 0x3d, 0x24, + 0x2f, 0x81, 0x79, 0x45, 0x6b, 0x59, 0x58, 0x5e, 0x02, 0xd2, 0x56, 0xb0, 0xac, 0xff, 0x50, 0x04, + 0x44, 0x2f, 0x43, 0x9b, 0x51, 0x80, 0x9d, 0x03, 0xd1, 0x8d, 0x4f, 0x60, 0x8a, 0x89, 0x7b, 0x56, + 0x4c, 0xbb, 0x43, 0x34, 0x49, 0xb6, 0xcf, 0xd5, 0xaa, 0xb5, 0x0b, 0xb6, 0x06, 0x4a, 0x50, 0x6d, + 0x1c, 0x1e, 0x1e, 0x08, 0xd4, 0xa2, 0x86, 0xaa, 0x56, 0x11, 0x54, 0xf5, 0x37, 0xfa, 0x12, 0x66, + 0x1a, 0xfe, 0x41, 0x9f, 0xf0, 0x84, 0x23, 0x0f, 0xf1, 0x53, 0x8f, 0xb7, 0xab, 0x55, 0xae, 0x5d, + 0xb0, 0x13, 0xe0, 0x68, 0x13, 0x2e, 0xdf, 0xef, 0x1d, 0x86, 0x7b, 0x35, 0xaf, 0xdb, 0xe8, 0xf9, + 0xa1, 0xa0, 0x32, 0xcc, 0x3d, 0x97, 0x5c, 0x4a, 0xa5, 0x21, 0xd6, 0x2e, 0xd8, 0x26, 0x44, 0xf4, + 0x16, 0x8f, 0xec, 0xe2, 0xa7, 0xef, 0xf4, 0x6d, 0x1e, 0xf8, 0xf5, 0xc4, 0xc3, 0x4f, 0x9e, 0xaf, + 0x5d, 0xb0, 0x59, 0x6d, 0x7d, 0x02, 0xc6, 0x84, 0x84, 0xbe, 0x03, 0x97, 0x14, 0x76, 0x12, 0x4d, + 0xf7, 0x30, 0x44, 0x15, 0x18, 0x7f, 0xda, 0x27, 0x1b, 0x5f, 0xa8, 0x5f, 0xb6, 0xfc, 0x6d, 0xbd, + 0xaf, 0x73, 0x1a, 0x2d, 0xa8, 0x96, 0x33, 0x03, 0x8e, 0x0b, 0xac, 0x35, 0x9d, 0xb9, 0xf9, 0xd0, + 0x5a, 0xbb, 0xc5, 0x44, 0xbb, 0xa5, 0x24, 0xaf, 0xad, 0x39, 0x23, 0xf3, 0xac, 0xaf, 0x61, 0xf1, + 0x69, 0x9f, 0xd8, 0x3d, 0xb5, 0x7e, 0xbf, 0xe7, 0x76, 0xe8, 0x59, 0xc8, 0x24, 0xb9, 0x58, 0x2c, + 0xdf, 0x95, 0x61, 0x43, 0x85, 0xcc, 0x4b, 0x56, 0x38, 0x3d, 0xa9, 0x8e, 0xb2, 0x13, 0x41, 0x44, + 0x0b, 0x59, 0xbf, 0x28, 0xc0, 0x22, 0xdb, 0x01, 0x99, 0xa4, 0x7f, 0x4b, 0x0d, 0x6e, 0x52, 0x54, + 0x0c, 0x19, 0xca, 0xa4, 0x86, 0x2f, 0xc5, 0x77, 0x47, 0xc5, 0xec, 0xbb, 0xa3, 0xdc, 0xcb, 0x34, + 0xeb, 0x2b, 0xb0, 0x78, 0x8f, 0x7a, 0xbd, 0x54, 0xa7, 0xc2, 0x97, 0xe9, 0x95, 0xf5, 0x3f, 0x8a, + 0x30, 0xff, 0x00, 0x7b, 0x38, 0x70, 0xe8, 0x38, 0x35, 0x6d, 0x5a, 0xf5, 0xc3, 0x17, 0x72, 0xfd, + 0xf0, 0x52, 0x55, 0x2c, 0x66, 0xa8, 0x8a, 0x57, 0x61, 0xe8, 0xa9, 0xbd, 0xce, 0x87, 0x45, 0x65, + 0xdb, 0x61, 0xe0, 0xda, 0xa4, 0x0c, 0xad, 0xc7, 0x3e, 0xfc, 0xe1, 0x81, 0x3e, 0xfc, 0xcb, 0xdc, + 0xa7, 0x39, 0xc6, 0x7d, 0xf8, 0xba, 0xe7, 0x7e, 0x53, 0xd1, 0x47, 0x89, 0xb8, 0x79, 0x8f, 0xef, + 0xa9, 0x8c, 0x01, 0x72, 0xd5, 0x92, 0x5d, 0x3d, 0xd2, 0x25, 0xc0, 0x34, 0x4c, 0xa1, 0x57, 0x56, + 0xbe, 0x82, 0x49, 0x05, 0xc4, 0x70, 0x7d, 0xf8, 0xbe, 0x7a, 0x7d, 0x48, 0xac, 0x65, 0xa9, 0xb5, + 0x36, 0x23, 0x72, 0xb2, 0x33, 0x05, 0x58, 0xbd, 0x56, 0xfc, 0x0c, 0xca, 0xe9, 0xde, 0x70, 0x75, + 0x69, 0x90, 0x05, 0x61, 0xad, 0xc0, 0xec, 0x03, 0x1c, 0xc5, 0x91, 0x55, 0xca, 0xf5, 0x4a, 0x62, + 0x9f, 0xe5, 0xf8, 0xb3, 0xac, 0x26, 0xcc, 0x25, 0xa8, 0xf0, 0xf6, 0x3f, 0x85, 0x31, 0x11, 0x05, + 0x50, 0xc8, 0x8e, 0x02, 0xa0, 0xeb, 0x96, 0x53, 0xb6, 0x05, 0x82, 0xf5, 0x0c, 0xae, 0x68, 0x44, + 0x43, 0x49, 0xf5, 0x7b, 0x30, 0x2e, 0xca, 0x12, 0x26, 0xbf, 0x46, 0x96, 0x2e, 0xad, 0x50, 0x20, + 0x4b, 0x14, 0x6b, 0x0f, 0xae, 0x6c, 0xb8, 0xa1, 0x4e, 0x99, 0x8d, 0xfa, 0x1a, 0x4c, 0xf4, 0x9d, + 0x5d, 0xdc, 0x0e, 0xdd, 0x9f, 0xb1, 0xf5, 0x39, 0x62, 0x8f, 0x93, 0x82, 0xa6, 0xfb, 0x33, 0x8c, + 0xae, 0x03, 0xd0, 0x4a, 0xca, 0x3f, 0x2e, 0x5e, 0x28, 0x38, 0xb3, 0xc5, 0x10, 0x0c, 0x93, 0x65, + 0xcc, 0x16, 0xa4, 0x4d, 0xff, 0xb6, 0x02, 0x98, 0x4f, 0xb5, 0xc4, 0xc7, 0x70, 0x07, 0x64, 0xd7, + 0x72, 0xc6, 0x60, 0x4b, 0x20, 0xf4, 0x36, 0x5c, 0xf4, 0xf0, 0xb7, 0x51, 0x3b, 0xd5, 0x87, 0x69, + 0x52, 0xbc, 0x25, 0xfa, 0x61, 0xfd, 0x88, 0x5a, 0xc6, 0xc9, 0xa0, 0x89, 0xd7, 0xc6, 0xbc, 0xbf, + 0x55, 0x84, 0x79, 0x26, 0xbf, 0xd3, 0x8b, 0xe6, 0xec, 0xbb, 0xfb, 0x37, 0xe2, 0x00, 0xbd, 0x6b, + 0x70, 0x80, 0x52, 0x14, 0xd5, 0x01, 0xaa, 0xb9, 0x3d, 0x3f, 0x36, 0xbb, 0x3d, 0xa9, 0xb6, 0xa3, + 0xbb, 0x3d, 0x13, 0xce, 0xce, 0x87, 0xc3, 0xe3, 0xc5, 0xd2, 0x90, 0xd5, 0x82, 0x72, 0x9a, 0x37, + 0xaf, 0x61, 0x2b, 0xfc, 0xb3, 0x02, 0x5c, 0xe7, 0x87, 0x66, 0x62, 0x5e, 0xcf, 0xcf, 0xfa, 0x0f, + 0x61, 0x8a, 0xe3, 0x6e, 0xc7, 0x8b, 0x88, 0x45, 0xf4, 0x88, 0xcd, 0xcd, 0x24, 0x84, 0x06, 0x86, + 0x3e, 0x54, 0x8c, 0x4f, 0xe6, 0xd0, 0xb8, 0x4a, 0x4e, 0x00, 0x66, 0xa5, 0x66, 0x9a, 0xa0, 0xd6, + 0x37, 0xb0, 0x98, 0xd5, 0xf1, 0xd7, 0xc0, 0x97, 0x87, 0x50, 0x31, 0xac, 0xf5, 0x97, 0x93, 0x61, + 0xdf, 0x87, 0x6b, 0x46, 0x5a, 0xaf, 0xa1, 0x9b, 0x0f, 0x60, 0x5e, 0x1e, 0xfb, 0xaf, 0xd4, 0xc7, + 0xc7, 0x70, 0x9d, 0x11, 0x7a, 0x3d, 0x43, 0x5e, 0x83, 0x85, 0x58, 0x21, 0x37, 0x88, 0xc3, 0x33, + 0x2f, 0x2a, 0x7e, 0x00, 0xc4, 0xac, 0x78, 0x8d, 0x07, 0x40, 0x0c, 0xf8, 0xda, 0x64, 0xd8, 0x3a, + 0x5c, 0x66, 0x84, 0xf5, 0xc3, 0x72, 0x49, 0x3d, 0x2c, 0x8d, 0xf1, 0xb3, 0xe9, 0xf3, 0xf3, 0x31, + 0x3d, 0x3f, 0x05, 0x48, 0xdc, 0xc3, 0x0f, 0x61, 0x94, 0x3f, 0x11, 0x60, 0xfd, 0x33, 0x10, 0x63, + 0xea, 0x01, 0x43, 0xe3, 0xc0, 0xd6, 0x13, 0x28, 0x33, 0xdd, 0x93, 0x98, 0xba, 0xfc, 0x56, 0x4e, + 0xcc, 0xc6, 0x72, 0x42, 0xeb, 0x4c, 0x05, 0xab, 0x9b, 0x54, 0xce, 0x8f, 0xa1, 0xcc, 0xa6, 0xd8, + 0x40, 0x50, 0x68, 0x86, 0x45, 0xa3, 0x66, 0xb8, 0x28, 0x16, 0x47, 0xad, 0xd7, 0x53, 0x90, 0xa5, + 0xa7, 0xe6, 0xc7, 0x70, 0x3d, 0xee, 0xaa, 0x1a, 0x35, 0x27, 0xc8, 0x7f, 0x2f, 0xd1, 0xdf, 0x9c, + 0xe0, 0x3c, 0x53, 0xcf, 0x77, 0xc4, 0x5a, 0xcf, 0xa2, 0x7f, 0xa6, 0xc8, 0xa9, 0xfc, 0x31, 0xbe, + 0x01, 0x37, 0xb5, 0x31, 0xaa, 0xcd, 0xc8, 0x81, 0xfe, 0x00, 0xae, 0xb1, 0x81, 0xea, 0x31, 0xdc, + 0xa2, 0x1b, 0x9f, 0x25, 0x86, 0x99, 0x19, 0x24, 0x6e, 0x1a, 0xe4, 0x5f, 0x2e, 0xc0, 0x35, 0xd6, + 0x03, 0x33, 0xf1, 0xdf, 0xb4, 0x39, 0xb0, 0x09, 0x55, 0xc9, 0x10, 0xbd, 0x47, 0x2f, 0x67, 0x0b, + 0x3c, 0x86, 0x39, 0x95, 0x8c, 0xdb, 0xc1, 0xad, 0x7b, 0x44, 0x23, 0x42, 0x1f, 0x90, 0x1d, 0xcc, + 0x16, 0x14, 0xdf, 0x21, 0x65, 0x03, 0xdf, 0x28, 0xbc, 0x2d, 0x21, 0xad, 0x36, 0x2c, 0xa4, 0xa7, + 0x42, 0x59, 0xd1, 0x5f, 0x12, 0x69, 0xc3, 0x82, 0x83, 0xd9, 0x64, 0x64, 0x12, 0x15, 0x22, 0x87, + 0xa1, 0x0b, 0x2c, 0xcb, 0x82, 0x1b, 0xc6, 0xf1, 0xab, 0x0b, 0xff, 0x9f, 0x14, 0x00, 0x89, 0xba, + 0x46, 0xd3, 0x16, 0x6d, 0x5f, 0x85, 0xa1, 0x46, 0xd3, 0xe6, 0xa1, 0x48, 0xd4, 0x1e, 0xe9, 0x84, + 0x81, 0x4d, 0xca, 0x92, 0xca, 0x4b, 0xf1, 0x2c, 0xca, 0xcb, 0x3a, 0xa0, 0xa6, 0xbb, 0xeb, 0x3d, + 0x73, 0xa3, 0x3d, 0xd9, 0x58, 0x8d, 0x7b, 0xb5, 0xe8, 0xa3, 0x80, 0xd0, 0xdd, 0xf5, 0xda, 0xf4, + 0x22, 0x53, 0x3e, 0x3c, 0xe8, 0x38, 0xb6, 0x01, 0xc9, 0xfa, 0x21, 0x5c, 0xd6, 0xfa, 0xcb, 0x45, + 0xd4, 0x02, 0x0c, 0x37, 0x70, 0x10, 0xf1, 0x1e, 0xd3, 0x95, 0xd0, 0xc1, 0x41, 0x64, 0xd3, 0x52, + 0xf4, 0x36, 0x8c, 0x35, 0x6a, 0xf4, 0x36, 0x82, 0x5a, 0x60, 0x53, 0x4c, 0x98, 0x76, 0x9c, 0x36, + 0x7d, 0xe0, 0x66, 0x8b, 0x4a, 0xeb, 0xef, 0x0d, 0x2b, 0xd4, 0x09, 0xfa, 0x60, 0x76, 0xdc, 0x03, + 0x60, 0x6b, 0x4a, 0xe1, 0x06, 0xd1, 0x3f, 0x26, 0xb9, 0x03, 0x95, 0x9d, 0x37, 0xb6, 0x02, 0x74, + 0xc6, 0x9b, 0x14, 0x11, 0xef, 0xc0, 0x90, 0xc4, 0x2d, 0x83, 0x8c, 0x77, 0xe0, 0xa4, 0x43, 0x5b, + 0x05, 0x42, 0x3f, 0x86, 0x69, 0xde, 0x67, 0xde, 0xa1, 0x11, 0x7a, 0xa9, 0xf7, 0x26, 0x37, 0xf4, + 0x0c, 0x63, 0xbb, 0x2d, 0xe1, 0x85, 0x1f, 0x8c, 0xff, 0x64, 0xd3, 0xa8, 0x93, 0x43, 0x47, 0x30, + 0x47, 0x70, 0xdd, 0xe7, 0xc4, 0xb4, 0xc6, 0xab, 0xdf, 0x46, 0xd8, 0x63, 0x07, 0xd7, 0x28, 0x6d, + 0xe7, 0xad, 0x9c, 0x76, 0x62, 0x60, 0xfe, 0x22, 0x2b, 0xa6, 0xd3, 0xc6, 0xb2, 0xce, 0x36, 0xd3, + 0xa7, 0xab, 0xce, 0xde, 0x58, 0xf5, 0xba, 0x7d, 0xdf, 0xf5, 0x22, 0xee, 0xc3, 0x65, 0xab, 0x2e, + 0xe8, 0xb5, 0x31, 0x2f, 0xb7, 0x55, 0x20, 0xeb, 0x6d, 0x79, 0xf7, 0x86, 0x03, 0x74, 0x11, 0x26, + 0x9f, 0x6e, 0x36, 0xb7, 0x56, 0x1b, 0xeb, 0xf7, 0xd7, 0x57, 0x57, 0x4a, 0x17, 0xd0, 0x38, 0x0c, + 0x6f, 0x37, 0xb6, 0x37, 0x4a, 0x05, 0xeb, 0x0e, 0x80, 0xd2, 0x12, 0xc0, 0xe8, 0xe6, 0x13, 0xfb, + 0x71, 0x6d, 0xa3, 0x74, 0x01, 0xcd, 0xc1, 0xa5, 0x67, 0xeb, 0x9b, 0x2b, 0x4f, 0x9e, 0x35, 0xdb, + 0xcd, 0xc7, 0x35, 0x7b, 0xbb, 0x51, 0xb3, 0x57, 0x4a, 0x05, 0xeb, 0x1b, 0x98, 0xd5, 0x47, 0xf8, + 0x5a, 0x17, 0x61, 0x04, 0x97, 0xa5, 0x46, 0xf4, 0xf0, 0xd9, 0xb6, 0x12, 0x00, 0x50, 0xeb, 0x74, + 0xfc, 0x43, 0x2f, 0x4a, 0x5e, 0x16, 0x38, 0xac, 0x98, 0xef, 0x3b, 0x05, 0x48, 0xbb, 0xe2, 0x29, + 0xe6, 0x5e, 0xf1, 0x58, 0x1f, 0xc1, 0xac, 0xde, 0xea, 0x59, 0x8d, 0xee, 0x37, 0x69, 0x64, 0x84, + 0x12, 0xcb, 0x44, 0x8c, 0xc7, 0xb8, 0x8b, 0x5c, 0x16, 0x7f, 0x04, 0x25, 0x0e, 0x15, 0xab, 0x15, + 0x6f, 0x08, 0xaf, 0x08, 0x93, 0x99, 0xfa, 0xab, 0x39, 0x71, 0x81, 0xfa, 0x8e, 0xf0, 0xb3, 0x0e, + 0x6a, 0xe1, 0x6f, 0x14, 0xa0, 0xfc, 0xf8, 0x7e, 0xad, 0x76, 0x18, 0xed, 0x11, 0x33, 0x86, 0xac, + 0x9f, 0xc6, 0x9e, 0xd3, 0xeb, 0x61, 0x6f, 0x17, 0xa3, 0x5b, 0x30, 0xbc, 0xfd, 0x64, 0x7b, 0x8b, + 0xfb, 0x21, 0x66, 0xf9, 0x32, 0x25, 0x45, 0x12, 0xc6, 0xa6, 0x10, 0xe8, 0x11, 0x5c, 0x12, 0x71, + 0x00, 0xb2, 0x8a, 0x3b, 0x32, 0xaf, 0xe7, 0x47, 0x15, 0xa4, 0xf1, 0x1e, 0x0e, 0x8f, 0x17, 0x4a, + 0x45, 0xeb, 0xf7, 0x0a, 0x30, 0x9f, 0xe8, 0x99, 0x72, 0x09, 0xa7, 0x76, 0xec, 0xb2, 0xd2, 0x31, + 0x01, 0xb2, 0x76, 0x81, 0xf7, 0xac, 0xa1, 0x84, 0x39, 0x0c, 0x9d, 0x23, 0xcc, 0x81, 0xbf, 0x87, + 0xa2, 0x70, 0x3c, 0x92, 0x9e, 0x96, 0x5b, 0x17, 0x61, 0x5a, 0xe3, 0x80, 0x65, 0xc1, 0x94, 0xda, + 0x32, 0x61, 0x73, 0xc3, 0xef, 0x4a, 0x36, 0x93, 0xbf, 0xad, 0xbf, 0x5a, 0x80, 0xd9, 0xc7, 0xf7, + 0x6b, 0x36, 0xde, 0x75, 0xc9, 0xbe, 0x8a, 0x59, 0xbc, 0xa4, 0x8d, 0x64, 0x41, 0x1b, 0x49, 0x02, + 0x56, 0x0e, 0xe9, 0xd3, 0xd4, 0x90, 0x16, 0x4c, 0x43, 0xa2, 0x46, 0x97, 0xeb, 0x7b, 0xda, 0x48, + 0x14, 0xb7, 0xed, 0xdf, 0x2c, 0xc0, 0x65, 0xa5, 0x4f, 0xb2, 0xff, 0xf7, 0xb4, 0x2e, 0x5d, 0x33, + 0x74, 0x29, 0xc5, 0xe4, 0x7a, 0xaa, 0x47, 0x6f, 0xe6, 0xf5, 0x68, 0x20, 0x8f, 0xff, 0xb8, 0x00, + 0x73, 0x46, 0x1e, 0xa0, 0x2b, 0x44, 0xd5, 0xea, 0x04, 0x38, 0xe2, 0xec, 0xe5, 0xbf, 0x48, 0xf9, + 0x7a, 0x18, 0x1e, 0xf2, 0x47, 0xc4, 0x13, 0x36, 0xff, 0x85, 0xde, 0x84, 0xe9, 0x2d, 0x1c, 0xb8, + 0x7e, 0x97, 0x05, 0xc0, 0xb0, 0xdb, 0xbb, 0x69, 0x5b, 0x2f, 0x44, 0x0b, 0x30, 0x51, 0xeb, 0xed, + 0xfa, 0x81, 0x1b, 0xed, 0x31, 0xcf, 0xf9, 0x84, 0x1d, 0x17, 0x10, 0xda, 0x2b, 0xee, 0xae, 0xb8, + 0x90, 0x9e, 0xb6, 0xf9, 0x2f, 0x54, 0x86, 0x31, 0x2e, 0x36, 0x98, 0x93, 0xc0, 0x16, 0x3f, 0x09, + 0xc6, 0x57, 0x36, 0x5d, 0x04, 0x34, 0xba, 0xdc, 0xe6, 0xbf, 0xac, 0xf7, 0x60, 0xd6, 0xc4, 0x47, + 0xe3, 0x92, 0xf9, 0xb3, 0x45, 0xb8, 0x5c, 0xeb, 0x76, 0x1f, 0xdf, 0xaf, 0xad, 0x60, 0x55, 0xc1, + 0xf9, 0x00, 0x86, 0xd7, 0x3d, 0x37, 0xe2, 0xda, 0xcd, 0x22, 0x9f, 0x1e, 0x03, 0x24, 0x81, 0x22, + 0x33, 0x44, 0xfe, 0x47, 0x36, 0x5c, 0x5e, 0xfd, 0xd6, 0x0d, 0x23, 0xd7, 0xdb, 0xa5, 0x73, 0xce, + 0x1a, 0xe6, 0x73, 0x2c, 0x88, 0x64, 0x6c, 0xb7, 0xb5, 0x0b, 0xb6, 0x09, 0x19, 0x6d, 0xc3, 0x95, + 0x4d, 0x7c, 0x64, 0x58, 0x42, 0x32, 0x6c, 0x5a, 0x92, 0x35, 0xac, 0x9c, 0x0c, 0x5c, 0x75, 0x85, + 0xfe, 0x6e, 0x91, 0xbe, 0x38, 0x50, 0x06, 0xc6, 0x5b, 0x7e, 0x0a, 0xb3, 0x4a, 0x87, 0x62, 0x89, + 0x53, 0xe0, 0x8f, 0x02, 0x8d, 0xc3, 0x51, 0x37, 0x92, 0x11, 0x1d, 0x3d, 0x83, 0x79, 0xbd, 0x53, + 0x31, 0x65, 0x7d, 0x33, 0x98, 0x40, 0xd6, 0x2e, 0xd8, 0x59, 0xd8, 0x68, 0x09, 0x86, 0x6a, 0x9d, + 0x7d, 0xce, 0x16, 0xf3, 0x94, 0xb1, 0x91, 0xd5, 0x3a, 0xfb, 0xf4, 0x19, 0x55, 0x67, 0x5f, 0xdb, + 0x0f, 0xff, 0xa6, 0x00, 0xf3, 0x19, 0x33, 0x8c, 0x16, 0x01, 0x58, 0xa1, 0x22, 0xdb, 0x95, 0x12, + 0xa2, 0x6a, 0xb1, 0x5f, 0x34, 0x4a, 0x65, 0x88, 0x6a, 0x1c, 0x22, 0x02, 0x39, 0xae, 0xb0, 0x15, + 0x20, 0xb4, 0x05, 0x93, 0xec, 0x17, 0x0b, 0x84, 0x1e, 0xa6, 0x38, 0x48, 0xc3, 0x61, 0x91, 0xcf, + 0x54, 0x25, 0xe9, 0xd2, 0x82, 0x76, 0x32, 0x00, 0x5a, 0x25, 0xc1, 0x7d, 0x63, 0x8d, 0xe4, 0x28, + 0xe4, 0xa0, 0xd1, 0x2d, 0x18, 0x65, 0x85, 0x7c, 0x0e, 0xc5, 0x73, 0xee, 0x18, 0x98, 0xd7, 0x5b, + 0x7f, 0xb7, 0x00, 0x57, 0xd8, 0xd9, 0x96, 0xda, 0x1a, 0x1f, 0x69, 0x5b, 0xe3, 0xa6, 0xec, 0xb0, + 0x09, 0x58, 0xdb, 0x1d, 0x75, 0x98, 0x7c, 0x99, 0x5d, 0xa1, 0x22, 0xa9, 0xeb, 0xf6, 0x0f, 0x0a, + 0xc2, 0xdb, 0x93, 0x5e, 0xba, 0xab, 0x30, 0xf5, 0x72, 0x4b, 0x56, 0x43, 0x43, 0x1f, 0xb2, 0x15, + 0x55, 0xcc, 0x1f, 0x69, 0xee, 0xa2, 0xfa, 0x1c, 0x2a, 0xd9, 0xac, 0x19, 0xb4, 0xac, 0xac, 0xfb, + 0x06, 0xec, 0x97, 0x99, 0xce, 0xc3, 0x14, 0x9d, 0xe6, 0xb1, 0xd7, 0x11, 0x33, 0xfa, 0x76, 0x32, + 0x86, 0x2b, 0x33, 0x2e, 0x46, 0xed, 0x6d, 0x31, 0x76, 0x26, 0xf3, 0xc5, 0x49, 0xd5, 0x36, 0xb5, + 0xfb, 0xff, 0xbc, 0xa8, 0xaf, 0xc5, 0x97, 0x69, 0xb4, 0x01, 0xd3, 0x9b, 0xf8, 0x28, 0xd5, 0x2e, + 0xbd, 0xca, 0xf7, 0xf0, 0x51, 0x5b, 0x69, 0x5b, 0x0d, 0x91, 0xd5, 0x70, 0xd0, 0x0e, 0xcc, 0x08, + 0xa9, 0x71, 0x56, 0xe1, 0xc9, 0x5e, 0x81, 0x90, 0x16, 0x0e, 0x9e, 0x3b, 0xed, 0x80, 0x97, 0xaa, + 0xcf, 0x37, 0x74, 0x8a, 0xaf, 0x7f, 0x3f, 0x5b, 0x5b, 0x50, 0x4e, 0x73, 0x8f, 0xb7, 0xf6, 0xc1, + 0xa0, 0xb9, 0x67, 0x6e, 0x90, 0xae, 0xbe, 0x0e, 0xd6, 0xa8, 0x17, 0x4d, 0xc2, 0x48, 0x5f, 0xc3, + 0xdd, 0xe4, 0x64, 0xd0, 0x60, 0x71, 0x31, 0x19, 0xea, 0xf3, 0x3c, 0x11, 0xd2, 0xd7, 0xa0, 0x8e, + 0x48, 0x95, 0x12, 0xef, 0xd8, 0x7b, 0x30, 0xc6, 0x8b, 0xe4, 0xb3, 0xc7, 0xe4, 0xaa, 0x14, 0x00, + 0xd6, 0xef, 0x17, 0xe0, 0x2a, 0xd1, 0xf2, 0x9b, 0xae, 0xb7, 0xdb, 0xc3, 0x4f, 0x43, 0x3d, 0x2a, + 0xef, 0x3b, 0x9a, 0xa0, 0x99, 0xcf, 0x78, 0x22, 0xf2, 0x27, 0x25, 0x5e, 0xfe, 0x4e, 0x01, 0x2a, + 0xa6, 0xbe, 0xbd, 0x5e, 0x09, 0x73, 0x9b, 0x9b, 0x65, 0x45, 0xee, 0x45, 0x61, 0xe8, 0xb2, 0x4d, + 0x31, 0x58, 0x32, 0x48, 0xf2, 0xbf, 0x26, 0x5a, 0xfe, 0x4f, 0x01, 0x66, 0xd7, 0x43, 0xda, 0xfd, + 0x9f, 0x1e, 0xba, 0x01, 0x96, 0x11, 0xd4, 0xb7, 0x4d, 0x0f, 0x89, 0xe8, 0xbc, 0x9a, 0xdf, 0xc3, + 0x7e, 0xa0, 0xbc, 0x15, 0x28, 0xe6, 0xbd, 0x10, 0xd2, 0x1e, 0x41, 0xbf, 0x0d, 0xc3, 0x9b, 0x44, + 0x9d, 0x1a, 0xe2, 0xeb, 0x8f, 0x61, 0x90, 0x22, 0x1a, 0xd6, 0x4f, 0xba, 0x4c, 0x7e, 0xa0, 0xfb, + 0xa9, 0xc7, 0x03, 0xc3, 0x83, 0x5f, 0xc0, 0xa4, 0x5f, 0x6f, 0xd7, 0xc7, 0x61, 0x74, 0xdb, 0x09, + 0x76, 0x71, 0x64, 0xfd, 0x00, 0x2a, 0x3c, 0x0a, 0x82, 0x39, 0x9a, 0x69, 0xac, 0x44, 0x18, 0x7b, + 0x5b, 0xf3, 0x22, 0x17, 0x16, 0x01, 0x9a, 0x91, 0x13, 0x44, 0xeb, 0x5e, 0x17, 0x7f, 0x4b, 0x47, + 0x3b, 0x62, 0x2b, 0x25, 0xd6, 0x87, 0x30, 0x21, 0x87, 0x40, 0x6d, 0x39, 0x45, 0x63, 0xa4, 0xc3, + 0x99, 0xd5, 0x9e, 0x33, 0x88, 0x37, 0x0c, 0xcb, 0x30, 0x97, 0x98, 0x0a, 0xbe, 0x4e, 0x2a, 0x64, + 0xc2, 0x58, 0x19, 0x8b, 0xb6, 0xb2, 0xe5, 0x6f, 0xab, 0x01, 0x97, 0x52, 0x33, 0x8d, 0x10, 0x7d, + 0xa2, 0xc2, 0xec, 0x74, 0x72, 0xa0, 0x34, 0x9b, 0x6b, 0xa4, 0x6c, 0x7b, 0xa3, 0xc9, 0x02, 0x4f, + 0x49, 0xd9, 0xf6, 0x46, 0xb3, 0x3e, 0xca, 0x56, 0x8e, 0xf5, 0x8f, 0x8a, 0xd4, 0x7c, 0x4d, 0xf1, + 0x20, 0xe1, 0x3b, 0x54, 0xfd, 0x97, 0x75, 0x98, 0xa0, 0x23, 0x5e, 0x11, 0xa1, 0xd5, 0xf9, 0x17, + 0xf7, 0xe3, 0xbf, 0x3c, 0xa9, 0x5e, 0xa0, 0xb7, 0xf5, 0x31, 0x1a, 0xfa, 0x02, 0xc6, 0x56, 0xbd, + 0x2e, 0xa5, 0x30, 0x74, 0x0e, 0x0a, 0x02, 0x89, 0xcc, 0x03, 0xed, 0x32, 0x51, 0x85, 0xb8, 0x03, + 0xc9, 0x56, 0x4a, 0x28, 0x9b, 0xdd, 0x03, 0x97, 0x05, 0xc8, 0x8c, 0xd8, 0xec, 0x07, 0xe1, 0x26, + 0xed, 0x82, 0x78, 0x8a, 0x3a, 0x61, 0xcb, 0xdf, 0xc8, 0x82, 0x91, 0x27, 0x41, 0x97, 0x3f, 0x99, + 0x9b, 0x59, 0x9a, 0x12, 0x49, 0x92, 0x48, 0x99, 0xcd, 0xaa, 0xac, 0xff, 0x55, 0x80, 0xf9, 0x07, + 0x38, 0x32, 0xae, 0x1b, 0x8d, 0x2b, 0x85, 0x57, 0xe6, 0x4a, 0xf1, 0x65, 0xb8, 0x22, 0x47, 0x3d, + 0x94, 0x35, 0xea, 0xe1, 0xac, 0x51, 0x8f, 0x64, 0x8f, 0xfa, 0x01, 0x8c, 0xb2, 0xa1, 0xa2, 0x37, + 0x60, 0x64, 0x3d, 0xc2, 0x07, 0xb1, 0x5b, 0x43, 0x0d, 0x3b, 0xb2, 0x59, 0x1d, 0xb1, 0xb8, 0x36, + 0x9c, 0x30, 0x12, 0xa1, 0xce, 0x13, 0xb6, 0xf8, 0x69, 0xfd, 0x84, 0xbe, 0xfd, 0xd8, 0xf0, 0x3b, + 0xfb, 0x8a, 0x97, 0x7a, 0x8c, 0xed, 0xca, 0xe4, 0x05, 0x0c, 0x81, 0x62, 0x35, 0xb6, 0x80, 0x40, + 0x37, 0x60, 0x72, 0xdd, 0xbb, 0xef, 0x07, 0x1d, 0xfc, 0xc4, 0xeb, 0x31, 0xea, 0xe3, 0xb6, 0x5a, + 0xc4, 0x7d, 0x31, 0xbc, 0x85, 0xd8, 0x17, 0x43, 0x0b, 0x12, 0xbe, 0x18, 0x96, 0x47, 0xc3, 0x66, + 0x75, 0xdc, 0xd5, 0x43, 0xfe, 0xce, 0x73, 0xc4, 0x48, 0x8f, 0xcd, 0x20, 0xc0, 0x1d, 0xb8, 0x6a, + 0xe3, 0x7e, 0xcf, 0x21, 0x0a, 0xd7, 0x81, 0xcf, 0xe0, 0xe5, 0x98, 0x6f, 0x18, 0x62, 0x63, 0x75, + 0xa7, 0xb2, 0xec, 0x72, 0x31, 0xa7, 0xcb, 0x07, 0x70, 0xf3, 0x01, 0x8e, 0x8c, 0xc9, 0x30, 0xe2, + 0xc1, 0xaf, 0xc1, 0x78, 0xa8, 0xfb, 0xef, 0x07, 0xe5, 0xe1, 0xe0, 0x97, 0x71, 0x9c, 0x8e, 0xfc, + 0xcb, 0xfa, 0x12, 0xaa, 0x59, 0xcd, 0x9d, 0x2d, 0x46, 0xd0, 0x85, 0x1b, 0xd9, 0x04, 0xe4, 0xb1, + 0x28, 0x7c, 0xfd, 0xd2, 0x74, 0xce, 0xef, 0xad, 0x7e, 0x3d, 0xc0, 0xff, 0xb0, 0xea, 0x22, 0x5a, + 0xea, 0x15, 0xba, 0xdb, 0xa6, 0x77, 0xd6, 0x3a, 0x81, 0x98, 0xaf, 0x35, 0x18, 0x17, 0x65, 0x9c, + 0xaf, 0x99, 0x79, 0x46, 0x28, 0x43, 0xbb, 0x82, 0x80, 0x44, 0xb3, 0x7e, 0x22, 0xae, 0x94, 0x74, + 0x8c, 0xb3, 0x05, 0xfc, 0x9f, 0xe5, 0x0e, 0xc9, 0xf2, 0xe1, 0xaa, 0x4e, 0x5b, 0x75, 0xfc, 0x97, + 0x14, 0xc7, 0x3f, 0xf3, 0xf7, 0xdf, 0xd0, 0x1d, 0xd1, 0x45, 0xbe, 0x2e, 0xe3, 0x22, 0xb4, 0xa8, + 0xba, 0xf7, 0xa7, 0xd2, 0x2f, 0x24, 0xee, 0x42, 0xc5, 0xd4, 0xa0, 0xe2, 0x40, 0x91, 0x3e, 0x64, + 0xa6, 0x90, 0x58, 0x7b, 0x30, 0xab, 0x65, 0x6e, 0x8b, 0x53, 0x51, 0xc5, 0x19, 0xeb, 0x26, 0xea, + 0x9f, 0xff, 0xfa, 0xa4, 0xfa, 0xf1, 0x79, 0xa2, 0xdf, 0x05, 0xcd, 0x6d, 0xf9, 0xc8, 0xc3, 0x9a, + 0x87, 0xa1, 0x86, 0xbd, 0x41, 0x87, 0x6d, 0x6f, 0xc8, 0x61, 0xdb, 0x1b, 0xd6, 0xbf, 0x2c, 0x42, + 0x95, 0x3d, 0x25, 0xa3, 0xd7, 0xeb, 0xb1, 0xde, 0xa5, 0xdc, 0xd7, 0x9f, 0xd5, 0xda, 0x48, 0x3c, + 0x15, 0x2b, 0x9e, 0xe5, 0xa9, 0xd8, 0xff, 0xff, 0xf2, 0x1e, 0x1a, 0x96, 0xbf, 0x29, 0x36, 0x32, + 0x58, 0xad, 0xc9, 0xda, 0xc8, 0x68, 0x22, 0x6d, 0x1e, 0x0d, 0x9f, 0xdf, 0x3c, 0xb2, 0xfe, 0x7a, + 0x11, 0x6e, 0x64, 0x73, 0x90, 0xb7, 0xb4, 0xa2, 0xa5, 0xd2, 0xca, 0x09, 0x32, 0xa0, 0x26, 0xa1, + 0x92, 0x4a, 0x2b, 0x99, 0x3e, 0x4b, 0x84, 0x2f, 0x27, 0x3c, 0xde, 0x5a, 0x54, 0xb3, 0x48, 0x44, + 0xc8, 0x8a, 0xb4, 0xa4, 0x0d, 0xbc, 0x0c, 0xed, 0xc0, 0xfc, 0x56, 0xe0, 0xbe, 0x70, 0x22, 0xfc, + 0x08, 0x1f, 0x6f, 0xf9, 0x3d, 0xb7, 0x73, 0xbc, 0xea, 0x39, 0x3b, 0x3d, 0xdc, 0xe5, 0xb7, 0x77, + 0xb7, 0x4e, 0x4f, 0xaa, 0x6f, 0xf6, 0x19, 0x48, 0x7b, 0x1f, 0x1f, 0xb7, 0xfb, 0x14, 0xa8, 0x8d, + 0x19, 0x94, 0x42, 0x34, 0x8b, 0x90, 0xf5, 0xef, 0x0b, 0x70, 0x8d, 0x1e, 0xb5, 0xdc, 0xe7, 0x28, + 0x1a, 0x7f, 0xa9, 0x68, 0x20, 0x75, 0x80, 0x7c, 0x65, 0xd1, 0x68, 0x20, 0x2d, 0xbc, 0xdb, 0xd6, + 0xc0, 0xd0, 0x3a, 0x4c, 0xf2, 0xdf, 0x8a, 0x63, 0x69, 0x4e, 0x49, 0xfe, 0x47, 0x17, 0x2e, 0xb3, + 0x2b, 0xe9, 0x32, 0xe5, 0xc4, 0xda, 0xf4, 0x75, 0x94, 0x8a, 0x6b, 0xfd, 0xaa, 0x08, 0x0b, 0x2d, + 0x1c, 0xb8, 0xcf, 0x8f, 0x33, 0x06, 0xf3, 0x04, 0x66, 0x45, 0x11, 0x1d, 0xb3, 0xbe, 0x61, 0xd8, + 0xd3, 0x77, 0xd1, 0xd5, 0x90, 0x00, 0xb4, 0xe5, 0xfe, 0x31, 0x22, 0x9e, 0x23, 0x19, 0xc4, 0x07, + 0x30, 0x9e, 0x78, 0x9e, 0x49, 0xe7, 0x5f, 0xec, 0x37, 0x3d, 0x0d, 0x93, 0xdc, 0x78, 0xbf, 0x93, + 0x7d, 0x79, 0xc1, 0x6d, 0x8c, 0x01, 0xe6, 0x1f, 0xdb, 0x7e, 0x64, 0xeb, 0x39, 0x4a, 0xad, 0x61, + 0xfb, 0xad, 0x5d, 0xb0, 0xb3, 0x5a, 0xaa, 0x4f, 0xc2, 0x44, 0x8d, 0x5e, 0xad, 0x10, 0x95, 0xfe, + 0x7f, 0x17, 0x61, 0x51, 0x44, 0x3f, 0x67, 0xb0, 0xf9, 0x6b, 0x98, 0x17, 0x45, 0xb5, 0x7e, 0x3f, + 0xf0, 0x5f, 0xe0, 0xae, 0xce, 0x69, 0x96, 0x7e, 0x42, 0x70, 0xda, 0xe1, 0x30, 0x31, 0xb3, 0xb3, + 0xd0, 0x5f, 0x8f, 0xab, 0xe4, 0x0b, 0xd3, 0x63, 0x59, 0xea, 0xb2, 0x50, 0x25, 0xa0, 0x9e, 0xa7, + 0x52, 0x95, 0x86, 0xdd, 0x94, 0xab, 0x65, 0xf8, 0x55, 0x5d, 0x2d, 0xc4, 0x18, 0xd4, 0x69, 0xd6, + 0x67, 0x60, 0x6a, 0x13, 0x1f, 0xc5, 0x7c, 0xff, 0x79, 0x21, 0xf1, 0x7e, 0x02, 0xbd, 0x0b, 0x23, + 0xec, 0x21, 0x45, 0x21, 0x7e, 0x08, 0x49, 0xdf, 0x4f, 0xa8, 0x0f, 0x21, 0x19, 0xe8, 0x3a, 0x8c, + 0xb1, 0xd8, 0xb9, 0xee, 0x19, 0xb4, 0x76, 0x19, 0xc6, 0xdc, 0x61, 0x28, 0x4c, 0x81, 0xe7, 0xf8, + 0xd6, 0x23, 0xb8, 0xc9, 0x03, 0x13, 0xf5, 0xc9, 0xa7, 0x0d, 0x9d, 0xf3, 0x30, 0xb2, 0x1c, 0x58, + 0x7c, 0x80, 0x93, 0xa2, 0x47, 0x0b, 0xf3, 0xfe, 0x12, 0x2e, 0x6a, 0xe5, 0x92, 0x22, 0x7d, 0xe9, + 0x24, 0xd7, 0x90, 0x24, 0x9d, 0x84, 0xb6, 0x6e, 0x98, 0x9a, 0x50, 0x3b, 0x6b, 0x61, 0x9a, 0x47, + 0x22, 0x88, 0xef, 0x97, 0xc2, 0x73, 0x48, 0xbd, 0x5b, 0xca, 0xbe, 0x66, 0x12, 0x8f, 0xe5, 0x38, + 0x10, 0xe7, 0xa8, 0xac, 0xb5, 0xa6, 0x61, 0xb2, 0xe1, 0x7b, 0x11, 0xfe, 0x96, 0x3e, 0x53, 0xb3, + 0x66, 0x60, 0x4a, 0x54, 0xf5, 0x70, 0x18, 0x5a, 0x7f, 0x7b, 0x08, 0x2c, 0xce, 0x58, 0x93, 0x5f, + 0x45, 0xf0, 0x63, 0x27, 0xd5, 0x59, 0x7e, 0x50, 0x5d, 0x51, 0xbd, 0x47, 0x71, 0x2d, 0x5b, 0x79, + 0xf4, 0xce, 0xb9, 0x13, 0x97, 0x6a, 0x2b, 0x2f, 0x35, 0xfa, 0x1f, 0x66, 0x88, 0x49, 0xb6, 0xd9, + 0x68, 0x16, 0xbc, 0x0c, 0x31, 0xa9, 0xd1, 0x35, 0x8b, 0x4c, 0x5b, 0x63, 0x03, 0x57, 0x20, 0x90, + 0x7c, 0xa5, 0x22, 0x6b, 0x78, 0x9c, 0x02, 0x2b, 0x68, 0xa7, 0x32, 0xbf, 0xaa, 0x44, 0xd0, 0x53, + 0x9d, 0x97, 0x7c, 0x3f, 0x8a, 0xfb, 0x5c, 0xb5, 0x8a, 0x51, 0xed, 0x2b, 0x25, 0x7a, 0x22, 0x5d, + 0x0d, 0x56, 0xf1, 0x95, 0xfd, 0xb5, 0x02, 0x5c, 0x63, 0xb3, 0x43, 0x0e, 0x52, 0xb7, 0x87, 0x79, + 0x8c, 0xb4, 0x98, 0x96, 0x43, 0xf3, 0xbd, 0x58, 0xe1, 0x4c, 0x32, 0x9a, 0xa6, 0xbc, 0xc2, 0x1c, + 0x3d, 0xcb, 0x19, 0x6b, 0xa2, 0x6f, 0x9d, 0x14, 0x44, 0x50, 0x6c, 0xea, 0xb2, 0xe8, 0xbc, 0x7a, + 0x61, 0x5d, 0xbb, 0xdf, 0x29, 0x66, 0xdc, 0xef, 0x68, 0xde, 0xf0, 0x68, 0xc0, 0x85, 0xcf, 0xd0, + 0xab, 0x3b, 0x88, 0xff, 0xe9, 0x28, 0x5c, 0xda, 0x72, 0x76, 0x5d, 0x8f, 0xc8, 0x1e, 0x91, 0x85, + 0x0e, 0xd5, 0x52, 0x59, 0x55, 0xf3, 0x03, 0xe6, 0x0c, 0x69, 0x53, 0x97, 0xd4, 0x04, 0x87, 0xc5, + 0xac, 0xb7, 0x37, 0x7a, 0x1a, 0xc3, 0x4f, 0x34, 0x7f, 0x60, 0x2a, 0x68, 0x92, 0x46, 0xf0, 0x78, + 0x7e, 0x37, 0x91, 0x69, 0x98, 0xfa, 0xd4, 0x9e, 0xc0, 0xa4, 0x12, 0xf9, 0xc8, 0x17, 0x68, 0x8a, + 0x02, 0x65, 0xcb, 0xfe, 0xe1, 0x0e, 0x36, 0x66, 0x95, 0x54, 0x29, 0x18, 0x72, 0x49, 0x8e, 0xbc, + 0xe6, 0x5c, 0x92, 0x3f, 0x60, 0x5d, 0x16, 0xde, 0xd5, 0xd1, 0x81, 0xb9, 0x0a, 0xe3, 0xde, 0x9b, + 0xb2, 0x14, 0xaa, 0xc4, 0x8c, 0x79, 0x17, 0xc7, 0xfe, 0x44, 0xf2, 0x2e, 0x66, 0xa6, 0xfc, 0x1c, + 0xff, 0x8d, 0xa4, 0xfc, 0xec, 0xc2, 0xc5, 0x44, 0xf0, 0x1f, 0xcf, 0xe1, 0x96, 0x1d, 0x4e, 0x48, + 0x05, 0xb6, 0x96, 0x01, 0x38, 0xd9, 0x56, 0x92, 0x64, 0x1d, 0x60, 0x5c, 0x64, 0x34, 0xb7, 0xfe, + 0xf5, 0x18, 0xcc, 0x6e, 0xb8, 0x61, 0x24, 0x36, 0x4b, 0x18, 0x9f, 0xa4, 0x53, 0xa2, 0x4c, 0xb1, + 0x5b, 0xb9, 0xd2, 0xcb, 0xca, 0xdb, 0x89, 0x04, 0xeb, 0x1a, 0x02, 0xfa, 0x50, 0x75, 0xb9, 0x16, + 0x95, 0x3c, 0x58, 0xe9, 0xdc, 0xd8, 0xaa, 0x2f, 0xf6, 0x5d, 0xcd, 0xe3, 0xc7, 0xd4, 0x94, 0x1e, + 0x29, 0x50, 0xd5, 0x14, 0xe6, 0x06, 0x5c, 0x4e, 0xba, 0x01, 0x79, 0x26, 0x12, 0x7a, 0xc6, 0xec, + 0x63, 0xcd, 0x4a, 0x92, 0xfe, 0xc1, 0xa7, 0x30, 0x4a, 0xdf, 0xf3, 0x8b, 0x77, 0x55, 0xef, 0x70, + 0x79, 0x63, 0x62, 0x02, 0x7b, 0xf9, 0x1f, 0x2a, 0xf9, 0x1c, 0x7b, 0xb4, 0x40, 0x7d, 0xb6, 0xcf, + 0x40, 0xd0, 0x36, 0x5c, 0xde, 0x0a, 0x70, 0x97, 0x87, 0xc2, 0xf5, 0x03, 0x6e, 0x15, 0xb2, 0x67, + 0x1c, 0x34, 0x27, 0x54, 0x5f, 0x54, 0xb7, 0xb1, 0xac, 0x57, 0x05, 0xb6, 0x01, 0x1d, 0xad, 0xc2, + 0x4c, 0x13, 0x3b, 0x41, 0x67, 0xef, 0x11, 0x3e, 0x26, 0xe7, 0x4c, 0x58, 0x1e, 0x8b, 0x13, 0xa9, + 0x85, 0xb4, 0x86, 0x0c, 0x94, 0x56, 0xa9, 0x37, 0x71, 0x3a, 0x12, 0xfa, 0x6d, 0x18, 0x6d, 0xfa, + 0x41, 0x54, 0x3f, 0x4e, 0x24, 0x4b, 0x67, 0x85, 0xf5, 0xab, 0x22, 0x99, 0x5c, 0xe8, 0x07, 0x51, + 0x7b, 0x47, 0xe5, 0x1b, 0xc7, 0x43, 0xf7, 0x89, 0x12, 0x4b, 0x14, 0xeb, 0xc8, 0xe9, 0x35, 0x68, + 0xec, 0x09, 0x7b, 0xda, 0xcb, 0x15, 0x55, 0xaa, 0x8d, 0x47, 0x4e, 0xaf, 0x4d, 0xd5, 0x26, 0xfd, + 0x4e, 0x50, 0xc5, 0x42, 0xc7, 0x30, 0xab, 0xaf, 0x7c, 0x9e, 0x50, 0x13, 0xb4, 0xb4, 0xc3, 0x26, + 0x90, 0xfa, 0x2d, 0xde, 0xcb, 0x1b, 0xc9, 0xfd, 0x95, 0xca, 0xb1, 0x69, 0x6c, 0x02, 0x3d, 0xa6, + 0xb9, 0xfc, 0x18, 0x67, 0x6a, 0xa1, 0xc8, 0x5b, 0x48, 0x06, 0x71, 0xf3, 0xf4, 0xa4, 0x7a, 0xfd, + 0x90, 0xee, 0x1e, 0xca, 0x51, 0x27, 0x4c, 0xa6, 0x2f, 0xb4, 0x53, 0xa8, 0x68, 0x0b, 0x2e, 0x3d, + 0x0d, 0xf1, 0x56, 0x80, 0x5f, 0xb8, 0xf8, 0x48, 0xd0, 0x9b, 0xa2, 0xf4, 0xe8, 0x74, 0x13, 0x7a, + 0x7d, 0x56, 0x6b, 0x22, 0x98, 0x46, 0xae, 0x7c, 0x02, 0x93, 0xca, 0x7a, 0x3b, 0x57, 0x82, 0xcf, + 0x3f, 0x2e, 0xc0, 0x5c, 0x62, 0x01, 0x73, 0x27, 0xc5, 0x13, 0x98, 0x90, 0x85, 0x32, 0xde, 0x59, + 0x28, 0x3a, 0x89, 0x83, 0x92, 0x6d, 0x1f, 0xb1, 0xbb, 0xd5, 0xde, 0xc6, 0x34, 0xd0, 0x5d, 0x18, + 0xdb, 0xc4, 0xdf, 0xc6, 0xce, 0x70, 0x66, 0x98, 0xd2, 0x07, 0x62, 0xfa, 0x96, 0x13, 0x60, 0xe8, + 0x13, 0x00, 0x65, 0xdd, 0xb0, 0x6d, 0x4d, 0x03, 0x89, 0xcd, 0x4b, 0x46, 0x01, 0xb6, 0x7e, 0x47, + 0xea, 0x51, 0xe2, 0x49, 0x50, 0xe0, 0x74, 0xf6, 0xe3, 0x28, 0xf5, 0x1f, 0x93, 0xfd, 0xa1, 0x56, + 0xf0, 0x1c, 0xef, 0xf3, 0x7a, 0x82, 0x6e, 0x5e, 0xd9, 0xba, 0x27, 0x36, 0x0e, 0x7f, 0x6d, 0xc4, + 0x8a, 0xf5, 0x8d, 0xa3, 0x22, 0xd0, 0x98, 0xc0, 0x8b, 0x96, 0x0d, 0xe5, 0xf8, 0x8e, 0x24, 0xd1, + 0x83, 0xef, 0xa6, 0xdf, 0xbd, 0xd0, 0x2c, 0xc7, 0xf1, 0xbb, 0x17, 0x95, 0x8d, 0xf1, 0x0b, 0x98, + 0xa7, 0x70, 0xcd, 0xc6, 0x07, 0xfe, 0x0b, 0xfc, 0x7a, 0xc9, 0xfe, 0x10, 0xae, 0xea, 0x04, 0x9f, + 0xf6, 0xbb, 0xf4, 0xc5, 0x33, 0xbb, 0x8c, 0x31, 0x66, 0x0f, 0xe2, 0x08, 0x2c, 0x7b, 0x10, 0xcb, + 0x27, 0x41, 0xfe, 0x54, 0xe5, 0x2d, 0xad, 0xb3, 0x7c, 0x58, 0xd0, 0x89, 0xd7, 0xba, 0xdd, 0x2d, + 0x27, 0x88, 0xdc, 0x8e, 0xdb, 0x77, 0xbc, 0x88, 0x68, 0x2d, 0xca, 0xcf, 0x84, 0x9a, 0xa4, 0xd4, + 0xb0, 0xd9, 0xef, 0xc7, 0x05, 0xaa, 0x3a, 0xa7, 0xc0, 0x59, 0x18, 0xaa, 0x49, 0xf6, 0x10, 0x96, + 0xa9, 0x6d, 0xd6, 0x61, 0x5a, 0xf9, 0x29, 0xad, 0x0e, 0x9a, 0x2f, 0x4c, 0x69, 0x41, 0x67, 0x98, + 0x8e, 0x62, 0x75, 0xa0, 0x62, 0x62, 0x1a, 0x7d, 0x89, 0x7b, 0x8c, 0x56, 0xe3, 0x37, 0xbd, 0x83, + 0x2f, 0xc1, 0x2e, 0x66, 0xbd, 0xe7, 0xb5, 0xfe, 0xca, 0x30, 0x5c, 0xe3, 0x93, 0xf1, 0x3a, 0x67, + 0x1c, 0xfd, 0x04, 0x26, 0x95, 0x39, 0xe6, 0x4c, 0xbf, 0x21, 0xee, 0xcd, 0xb3, 0xd6, 0x02, 0xd3, + 0xbe, 0x0e, 0x69, 0x41, 0x3b, 0x31, 0xdd, 0x44, 0xfb, 0x52, 0x97, 0x4d, 0x0f, 0x66, 0xf4, 0x89, + 0xe6, 0x1a, 0xed, 0x1b, 0xc6, 0x46, 0x74, 0x50, 0x91, 0x61, 0xa2, 0xdb, 0x36, 0x4e, 0x37, 0x4d, + 0x4b, 0xaf, 0x2f, 0xa2, 0x6f, 0xe1, 0x52, 0x6a, 0x96, 0xb9, 0x02, 0xfc, 0xb6, 0xb1, 0xc1, 0x14, + 0x34, 0x4b, 0x0e, 0x1a, 0xd0, 0xe2, 0xcc, 0x66, 0xd3, 0x8d, 0xa0, 0x2e, 0x4c, 0xa9, 0x13, 0xcf, + 0x35, 0xe4, 0x9b, 0x39, 0xac, 0x64, 0x80, 0x4c, 0x29, 0xe2, 0xbc, 0xa4, 0x73, 0xaf, 0x7f, 0xc9, + 0x45, 0xa3, 0x5a, 0x1f, 0x87, 0x51, 0xf6, 0x9b, 0x88, 0x80, 0xad, 0x00, 0x87, 0xd8, 0xeb, 0x60, + 0x35, 0x04, 0xe2, 0x55, 0x45, 0xc0, 0xbf, 0x2b, 0x40, 0xd9, 0x44, 0xb7, 0x89, 0xbd, 0x2e, 0xda, + 0x82, 0x52, 0xb2, 0x21, 0xbe, 0xaa, 0x2d, 0x71, 0x2a, 0x64, 0x77, 0x89, 0x68, 0xcc, 0xa9, 0x6e, + 0x6e, 0xc2, 0x25, 0xa5, 0xec, 0x9c, 0xb1, 0x26, 0x69, 0x54, 0xd5, 0x8a, 0x5e, 0xa3, 0x21, 0x35, + 0x2b, 0xfe, 0x81, 0xe3, 0x7a, 0x44, 0x41, 0x54, 0x9e, 0x30, 0x43, 0x5c, 0xca, 0x79, 0xc3, 0x2c, + 0x4d, 0x5a, 0x2a, 0xe2, 0xae, 0x24, 0x88, 0xf5, 0x39, 0x95, 0xe0, 0xdc, 0x9c, 0x60, 0xb1, 0xfb, + 0x92, 0xd8, 0x0d, 0x18, 0xd9, 0xde, 0x68, 0x36, 0x6a, 0xfc, 0x25, 0x00, 0x7b, 0x1c, 0xd7, 0x0b, + 0xdb, 0x1d, 0xc7, 0x66, 0x15, 0xd6, 0xbf, 0x2a, 0xc2, 0xac, 0x78, 0xe8, 0xae, 0x99, 0xf1, 0x03, + 0xd3, 0x64, 0x7d, 0x5f, 0xcf, 0x25, 0xd0, 0x90, 0xb9, 0x04, 0x5e, 0x21, 0x1f, 0x32, 0xcf, 0x42, + 0x70, 0xc6, 0x87, 0x29, 0x8f, 0xa4, 0xba, 0x3b, 0xac, 0xa9, 0xbb, 0xa6, 0xf1, 0x68, 0xea, 0x2e, + 0xe5, 0x03, 0x53, 0x77, 0x85, 0x92, 0xfb, 0x2a, 0x1a, 0xca, 0xc7, 0x64, 0x2e, 0xb5, 0x26, 0xcf, + 0xfa, 0x66, 0x61, 0x03, 0xae, 0x3e, 0xc0, 0xd1, 0x93, 0xf5, 0x95, 0x06, 0x59, 0x44, 0xbc, 0xab, + 0x62, 0x06, 0xee, 0xd0, 0xe8, 0x15, 0x4e, 0x53, 0x5d, 0x09, 0x54, 0xa6, 0xf1, 0xf7, 0xc4, 0x0a, + 0x88, 0xb5, 0x4c, 0xa9, 0x35, 0x6b, 0x8f, 0x37, 0x0c, 0xd4, 0xb2, 0x72, 0xbe, 0x6d, 0xd2, 0x17, + 0xba, 0x0f, 0xe8, 0x7c, 0xbd, 0x8e, 0x4e, 0xfc, 0x7e, 0x81, 0x3d, 0xf9, 0x6d, 0x3e, 0x51, 0x52, + 0xb4, 0x7a, 0xcf, 0x7d, 0xc5, 0x8b, 0xa9, 0x34, 0xa3, 0xe4, 0xb8, 0xa7, 0x5e, 0x4c, 0xfa, 0x91, + 0x0f, 0xfe, 0xf4, 0x87, 0x66, 0x8b, 0xb7, 0x93, 0xd0, 0xe8, 0x13, 0x98, 0x56, 0x8a, 0xe4, 0xa9, + 0xc8, 0x92, 0x06, 0xa9, 0xe8, 0x6e, 0xd7, 0xd6, 0x21, 0xad, 0x9f, 0x17, 0xe1, 0x5a, 0x4e, 0x56, + 0x6c, 0x6a, 0x74, 0x51, 0x5b, 0x59, 0x72, 0x8a, 0xa7, 0x7f, 0xa4, 0xcf, 0x9c, 0x34, 0xa1, 0x24, + 0x01, 0xd1, 0xe7, 0x30, 0xa9, 0x26, 0xe9, 0x2e, 0x2a, 0x29, 0x41, 0xcd, 0x89, 0xb9, 0x55, 0x70, + 0x14, 0x02, 0xc4, 0x3d, 0xe1, 0xef, 0x07, 0x9b, 0xf4, 0x25, 0x5a, 0x9c, 0xe1, 0xfb, 0xb5, 0xa4, + 0x1a, 0x57, 0x9a, 0xb1, 0xfe, 0x52, 0x11, 0x16, 0x73, 0xf8, 0xd0, 0xc4, 0xd1, 0xff, 0x0b, 0x56, + 0x24, 0xf2, 0xae, 0x0f, 0xfd, 0x86, 0xf2, 0xae, 0x5b, 0xff, 0xb6, 0x00, 0x57, 0x9e, 0xf6, 0x43, + 0x1a, 0x64, 0xb6, 0xee, 0xbd, 0xc0, 0x5e, 0xe4, 0x07, 0xc7, 0x34, 0x48, 0x06, 0x7d, 0x08, 0x23, + 0x6b, 0xb8, 0xd7, 0xf3, 0xf9, 0x39, 0x72, 0x5d, 0x38, 0x96, 0x93, 0xd0, 0x14, 0x68, 0xed, 0x82, + 0xcd, 0xa0, 0xd1, 0x27, 0x30, 0xb1, 0x86, 0x9d, 0x20, 0xda, 0xc1, 0x8e, 0x50, 0x15, 0xaf, 0x72, + 0x54, 0x05, 0x85, 0x03, 0xac, 0x5d, 0xb0, 0x63, 0x68, 0xb4, 0x04, 0xc3, 0x5b, 0xbe, 0xb7, 0x2b, + 0x5f, 0xa1, 0x64, 0x34, 0x48, 0x60, 0xd6, 0x2e, 0xd8, 0x14, 0xb6, 0x3e, 0x02, 0x43, 0x8f, 0xc3, + 0x5d, 0xeb, 0x17, 0x05, 0x28, 0xaf, 0xf8, 0x47, 0x9e, 0x71, 0x24, 0x1f, 0xe9, 0x23, 0x11, 0xb1, + 0x8b, 0x06, 0xf8, 0xc4, 0x58, 0x3e, 0x80, 0xe1, 0x2d, 0xd7, 0xdb, 0x4d, 0x1c, 0x7b, 0x06, 0x3c, + 0x02, 0x45, 0xbb, 0xe4, 0xc6, 0x5d, 0x7a, 0x17, 0xe6, 0x33, 0x20, 0xd1, 0x8c, 0x94, 0x47, 0xc3, + 0x54, 0x0e, 0xbd, 0x03, 0x73, 0xc6, 0x51, 0xa6, 0x00, 0xff, 0xbe, 0x69, 0xba, 0x58, 0x5f, 0xcb, + 0x30, 0x26, 0xb2, 0xd1, 0x31, 0xc1, 0x2d, 0x7e, 0xd2, 0xa8, 0x2a, 0xb1, 0x9c, 0x79, 0x0e, 0x23, + 0xb9, 0x6a, 0x5b, 0xca, 0xab, 0x59, 0xb6, 0xe8, 0x3e, 0x7d, 0x85, 0xa5, 0x15, 0xbf, 0xab, 0xdd, + 0x32, 0x4e, 0xc7, 0x2b, 0xf4, 0xd4, 0x6a, 0x00, 0x4a, 0xaf, 0x1f, 0xf4, 0x1d, 0x98, 0x68, 0x36, + 0xd7, 0x72, 0x5f, 0xb1, 0xdb, 0x31, 0x84, 0xf5, 0x5d, 0xb8, 0x22, 0x89, 0xb0, 0xcc, 0x52, 0x4a, + 0x20, 0x21, 0x4f, 0xb0, 0x2d, 0xe3, 0x17, 0xe3, 0x02, 0xeb, 0x87, 0x29, 0xbc, 0xe6, 0xe1, 0xc1, + 0x81, 0x13, 0x1c, 0xa3, 0x9a, 0x8e, 0x37, 0x34, 0x70, 0xa7, 0xd4, 0x87, 0x7f, 0x79, 0x52, 0xbd, + 0xa0, 0x12, 0x5f, 0x82, 0x59, 0x6d, 0x79, 0x88, 0x2e, 0x55, 0x92, 0x62, 0x48, 0xe1, 0xc6, 0x7d, + 0x98, 0x4b, 0xe0, 0xf0, 0x63, 0xf7, 0x3b, 0x20, 0x15, 0x05, 0x8a, 0x34, 0x54, 0xbf, 0xf4, 0xeb, + 0x93, 0xea, 0x74, 0xe4, 0x1e, 0xe0, 0xdb, 0x71, 0x36, 0x0d, 0xf1, 0x97, 0xf5, 0x58, 0x55, 0xa0, + 0x6a, 0x3d, 0x2d, 0xf2, 0xf7, 0x1e, 0x8c, 0xb2, 0x92, 0x44, 0x46, 0x04, 0x15, 0x9a, 0x8f, 0x86, + 0x03, 0x92, 0x33, 0x9d, 0x3d, 0xa7, 0x56, 0x61, 0xe2, 0xe3, 0x74, 0x84, 0xfe, 0x4e, 0x84, 0x54, + 0x18, 0xc8, 0x31, 0x38, 0xeb, 0x0b, 0x7a, 0x67, 0x67, 0xca, 0x7b, 0x7e, 0xb6, 0xc0, 0xa8, 0x3f, + 0x03, 0x0b, 0xb5, 0x7e, 0x1f, 0x7b, 0xdd, 0x18, 0x91, 0xa8, 0xf9, 0x67, 0x0b, 0xab, 0x42, 0x35, + 0x18, 0xa1, 0xd0, 0xd2, 0xf4, 0xe2, 0xdd, 0x35, 0x74, 0x87, 0xc2, 0x71, 0x15, 0x87, 0x36, 0xc0, + 0x30, 0xad, 0x2e, 0xcc, 0x37, 0x0f, 0x77, 0x0e, 0x5c, 0x96, 0x9d, 0x9d, 0x86, 0x26, 0x8a, 0xb6, + 0xd7, 0x45, 0x5e, 0x34, 0xc6, 0x8c, 0x5b, 0xf2, 0x73, 0xa4, 0xb7, 0xd5, 0xcf, 0x63, 0xbe, 0xb8, + 0x77, 0x3b, 0x46, 0xa5, 0xc2, 0x8c, 0xb5, 0x42, 0xab, 0x79, 0xee, 0xb4, 0xf7, 0xde, 0x83, 0x09, + 0xf9, 0x81, 0x4c, 0x34, 0x0e, 0xc3, 0xeb, 0x9b, 0xeb, 0xdb, 0x2c, 0x05, 0xfc, 0xd6, 0xd3, 0xed, + 0x52, 0x01, 0x01, 0x8c, 0xae, 0xac, 0x6e, 0xac, 0x6e, 0xaf, 0x96, 0x8a, 0xef, 0xb5, 0xd5, 0xeb, + 0x1d, 0x74, 0x0d, 0xe6, 0x57, 0x56, 0x5b, 0xeb, 0x8d, 0xd5, 0xf6, 0xf6, 0xf7, 0xb7, 0x56, 0xdb, + 0xfa, 0xdb, 0xdc, 0x59, 0x28, 0xa9, 0x95, 0xdb, 0x4f, 0xb6, 0xb7, 0x4a, 0x05, 0x54, 0x86, 0x59, + 0xb5, 0xf4, 0xd9, 0x6a, 0xbd, 0xf6, 0x74, 0x7b, 0x6d, 0xb3, 0x34, 0x64, 0x0d, 0x8f, 0x17, 0x4b, + 0xc5, 0xf7, 0x7e, 0xa2, 0xdd, 0xfd, 0xa0, 0x05, 0x28, 0x73, 0xf0, 0xa7, 0xcd, 0xda, 0x83, 0xec, + 0x26, 0x58, 0xed, 0xe3, 0xfb, 0xb5, 0x52, 0x01, 0x5d, 0x87, 0xab, 0x5a, 0xe9, 0x56, 0xad, 0xd9, + 0x7c, 0xf6, 0xc4, 0x5e, 0xd9, 0x58, 0x6d, 0x36, 0x4b, 0xc5, 0xf7, 0xde, 0xe6, 0x81, 0xa0, 0x68, + 0x06, 0x60, 0x65, 0xb5, 0xd9, 0x58, 0xdd, 0x5c, 0x59, 0xdf, 0x7c, 0x50, 0xba, 0x80, 0xa6, 0x61, + 0xa2, 0x26, 0x7f, 0x16, 0x96, 0xfe, 0xc1, 0xcf, 0x60, 0x92, 0xa8, 0x40, 0xc2, 0x07, 0xff, 0x8d, + 0xb2, 0x87, 0x79, 0x26, 0x45, 0x9e, 0x02, 0x2e, 0x73, 0xc3, 0x52, 0x8e, 0x57, 0x72, 0xce, 0x0b, + 0x0a, 0x70, 0xab, 0x70, 0xb7, 0x80, 0x6c, 0x9a, 0x7c, 0x34, 0x21, 0x24, 0x24, 0x65, 0xb3, 0xd0, + 0xa9, 0x64, 0x54, 0x0b, 0xd9, 0xf2, 0x10, 0xa6, 0xc9, 0xde, 0x96, 0xb5, 0xe8, 0x5a, 0x12, 0x5e, + 0x11, 0x17, 0x95, 0x05, 0x73, 0x25, 0xdf, 0xcc, 0x4d, 0x1a, 0x6f, 0xaa, 0x6d, 0x74, 0x24, 0x6e, + 0x3d, 0xd2, 0x12, 0x80, 0x51, 0xac, 0x4a, 0x9b, 0x22, 0x43, 0x42, 0x6c, 0x02, 0x4a, 0x6f, 0x77, + 0x74, 0x23, 0x66, 0xa7, 0x59, 0x12, 0x54, 0xae, 0xa4, 0x3c, 0x2d, 0xab, 0x44, 0xa9, 0x41, 0x6d, + 0x98, 0x7f, 0xec, 0xb8, 0x5e, 0xe4, 0xb8, 0x1e, 0xb7, 0x7b, 0x85, 0xd5, 0x8a, 0xaa, 0x39, 0x66, + 0x2c, 0xb1, 0x80, 0x2b, 0x83, 0x5e, 0x24, 0xd0, 0x59, 0x6a, 0xc2, 0xac, 0xc9, 0xed, 0x88, 0x2c, + 0x3d, 0x2d, 0xa3, 0xc9, 0x91, 0x53, 0xc9, 0xf2, 0x3d, 0xa2, 0xc7, 0x70, 0x29, 0xe5, 0x46, 0x44, + 0x0a, 0xef, 0xce, 0x4d, 0xae, 0x4c, 0x23, 0x15, 0x22, 0x37, 0xe9, 0x44, 0x0c, 0x51, 0x06, 0xe3, + 0x32, 0x89, 0xdd, 0x2d, 0xa0, 0x6f, 0xc0, 0xca, 0x22, 0xf7, 0xcc, 0x8d, 0xf6, 0xb8, 0x13, 0xfd, + 0x9a, 0x91, 0x00, 0xab, 0xcc, 0xa3, 0x6e, 0xc3, 0xac, 0xc9, 0xdd, 0x29, 0x19, 0x9a, 0xe3, 0x0b, + 0xcd, 0x5c, 0x05, 0x36, 0xcc, 0x9a, 0x1c, 0x6a, 0x92, 0x66, 0x8e, 0xb7, 0x2d, 0x93, 0xe6, 0xe7, + 0x30, 0x43, 0x56, 0xc9, 0x23, 0x8c, 0xfb, 0xb5, 0x9e, 0xfb, 0x02, 0x87, 0x48, 0xbc, 0xd6, 0x91, + 0x45, 0x59, 0xb8, 0xb7, 0x0a, 0xe8, 0xb7, 0x60, 0x92, 0x7e, 0x0b, 0x8c, 0x07, 0x97, 0x4f, 0xa9, + 0xdf, 0x07, 0xab, 0x88, 0x5f, 0xb4, 0xf2, 0x6e, 0x01, 0x7d, 0x0f, 0xc6, 0x1e, 0xe0, 0x88, 0x5e, + 0xf7, 0xde, 0x4c, 0x7c, 0x7b, 0x78, 0xdd, 0x93, 0xf7, 0x61, 0xa2, 0xc3, 0x49, 0x6d, 0x85, 0x18, + 0x9d, 0x6c, 0xe3, 0x50, 0x0a, 0xc9, 0xea, 0x4a, 0xaa, 0xdb, 0xe8, 0x01, 0x11, 0xe9, 0x3d, 0x1c, + 0xe1, 0xb3, 0x36, 0x99, 0xc5, 0xa3, 0x0d, 0x98, 0x91, 0xa9, 0x4a, 0x36, 0x69, 0xbc, 0x90, 0x95, + 0x20, 0x16, 0x9e, 0x83, 0xda, 0xa7, 0x64, 0x57, 0x30, 0xc7, 0x80, 0x7c, 0xc9, 0x84, 0xb2, 0xde, + 0x36, 0x49, 0x26, 0x32, 0x30, 0x05, 0x57, 0x7e, 0xde, 0x4c, 0xe2, 0x26, 0x3f, 0x78, 0x96, 0xc0, + 0xc5, 0x50, 0x51, 0xdb, 0xd5, 0x5f, 0x35, 0xc5, 0xb2, 0x29, 0xeb, 0x31, 0x56, 0xe5, 0x66, 0x0e, + 0x04, 0x13, 0x7b, 0x54, 0x92, 0x3c, 0x84, 0x69, 0xed, 0x1d, 0x4c, 0x2c, 0x9b, 0x0d, 0x0f, 0x95, + 0x62, 0xd9, 0x6c, 0x7c, 0x3a, 0x73, 0x9f, 0x0a, 0x90, 0xc4, 0xd7, 0x0e, 0x2a, 0xa6, 0xaf, 0x1a, + 0xf0, 0x0d, 0x29, 0xb2, 0xb9, 0x26, 0x50, 0x1e, 0xd1, 0x2c, 0x54, 0x7a, 0x61, 0x6b, 0x29, 0x97, + 0x52, 0xc6, 0xb7, 0x13, 0xee, 0x16, 0xd0, 0x2a, 0x5c, 0x96, 0x01, 0x5e, 0xca, 0x97, 0x77, 0x33, + 0x10, 0x32, 0x97, 0xc1, 0x97, 0x70, 0x99, 0x2f, 0x2a, 0x8d, 0x4c, 0x49, 0xca, 0x07, 0xee, 0x9f, + 0xc8, 0x24, 0xf0, 0x10, 0xe6, 0x9a, 0x89, 0x41, 0x31, 0xf7, 0xf5, 0x55, 0x9d, 0x84, 0xf2, 0x99, + 0x85, 0x4c, 0x5a, 0x8f, 0x00, 0x31, 0x7d, 0x4c, 0x90, 0x7b, 0xe1, 0xe2, 0x23, 0x74, 0x3d, 0x31, + 0x24, 0x52, 0x48, 0xc1, 0xa8, 0x80, 0xc9, 0x62, 0x11, 0xda, 0x66, 0x29, 0x2a, 0x59, 0x66, 0x66, + 0xa7, 0xef, 0xec, 0xb8, 0x3d, 0x37, 0x72, 0x31, 0x59, 0x63, 0x2a, 0x82, 0x5a, 0x25, 0x96, 0xc3, + 0xd5, 0x4c, 0x08, 0xf4, 0x05, 0x4c, 0x3f, 0xc0, 0x51, 0xfc, 0x25, 0x09, 0x34, 0x9f, 0xfa, 0xf6, + 0x04, 0x9f, 0x3a, 0x11, 0x4e, 0xac, 0x7f, 0xbe, 0x62, 0x1d, 0x4a, 0x4c, 0x3e, 0x2a, 0x24, 0xae, + 0xa7, 0x48, 0x70, 0x10, 0x27, 0x70, 0x0e, 0xc2, 0x4c, 0x6e, 0xdd, 0x61, 0xd6, 0x2f, 0x12, 0x91, + 0x3b, 0xaa, 0xb2, 0x71, 0x59, 0x2b, 0x93, 0x0f, 0x43, 0xe7, 0x8c, 0x9f, 0x50, 0x40, 0x6f, 0xc4, + 0x87, 0x61, 0xe6, 0x77, 0x11, 0x2a, 0x28, 0x19, 0xec, 0xdb, 0x5a, 0x46, 0x32, 0xfd, 0xa1, 0x81, + 0xe8, 0xdb, 0xda, 0x99, 0x7d, 0x3e, 0xba, 0x5f, 0xc0, 0x84, 0xcc, 0xc5, 0x2f, 0x05, 0x4b, 0xf2, + 0x4b, 0x06, 0x95, 0x72, 0xba, 0x82, 0x8f, 0xf4, 0x73, 0xf6, 0xe5, 0x0d, 0x1d, 0x3f, 0x99, 0xae, + 0x3e, 0x93, 0xb1, 0x9f, 0xc0, 0xa4, 0x92, 0xa8, 0x5e, 0x2e, 0xe4, 0x74, 0xf2, 0xfa, 0x8a, 0xfe, + 0xf5, 0xf3, 0xbb, 0x05, 0x74, 0x87, 0x1e, 0x2e, 0x34, 0xda, 0x6d, 0x2e, 0x46, 0x53, 0xd2, 0x5f, + 0x27, 0x50, 0xd0, 0x47, 0xf4, 0xb9, 0x50, 0xe3, 0x30, 0x08, 0xb0, 0xc7, 0xf0, 0xb2, 0x74, 0x88, + 0x04, 0xe2, 0x17, 0x54, 0x98, 0x28, 0x88, 0xcc, 0x3d, 0x3d, 0x08, 0x9b, 0x25, 0x8e, 0xb9, 0x5b, + 0x40, 0xcb, 0x30, 0x2e, 0x3e, 0x9f, 0x83, 0xae, 0xe8, 0x5d, 0xcd, 0x1e, 0xde, 0x32, 0x00, 0x63, + 0x36, 0xed, 0xa9, 0x5e, 0x9d, 0xc9, 0xce, 0x65, 0x72, 0x62, 0x76, 0xcf, 0x89, 0xf4, 0x85, 0x38, + 0x35, 0x29, 0x52, 0x59, 0x9b, 0x42, 0x95, 0x9d, 0x59, 0xf8, 0xf7, 0x61, 0x46, 0xff, 0xaa, 0x0f, + 0x12, 0x32, 0xde, 0xf8, 0xb1, 0x9f, 0x4c, 0x3a, 0xeb, 0x50, 0xaa, 0x75, 0xe8, 0x79, 0x20, 0x53, + 0x8a, 0x4b, 0xbd, 0x3c, 0x59, 0x21, 0x68, 0xcd, 0x25, 0x33, 0x94, 0x6f, 0x60, 0x87, 0xbe, 0xa0, + 0x9a, 0x97, 0x5a, 0x41, 0xa2, 0xca, 0x8c, 0x91, 0xd9, 0xa9, 0x55, 0x98, 0x6d, 0x38, 0x5e, 0x07, + 0xf7, 0x5e, 0x8d, 0xcc, 0xa7, 0x54, 0x96, 0x29, 0xe9, 0xd6, 0xaf, 0x24, 0xf1, 0xb9, 0x28, 0xbb, + 0x24, 0xef, 0xe2, 0x24, 0x68, 0x0d, 0x2e, 0xf2, 0xc4, 0x94, 0x92, 0x2d, 0x59, 0xd8, 0x59, 0xcd, + 0x7f, 0x04, 0x33, 0xab, 0x44, 0xd6, 0x1f, 0x76, 0x5d, 0xf6, 0x6a, 0x14, 0xe9, 0xcf, 0x00, 0x33, + 0x11, 0xd7, 0xc4, 0x97, 0x3a, 0x94, 0x3c, 0xe4, 0x72, 0x97, 0xa6, 0x53, 0xbd, 0x57, 0x66, 0x05, + 0x59, 0x35, 0x65, 0x39, 0xb7, 0x0a, 0xe7, 0x33, 0x32, 0x7f, 0xa3, 0xb7, 0x34, 0x2b, 0x29, 0x2b, + 0x7d, 0xb7, 0x41, 0xdf, 0xfb, 0x5a, 0xc9, 0xfd, 0x99, 0x41, 0x33, 0x3f, 0x25, 0x78, 0xe6, 0xb8, + 0xe5, 0x3b, 0x2f, 0x63, 0xea, 0x6e, 0xf4, 0xae, 0x4e, 0x3d, 0x27, 0xbd, 0x77, 0x66, 0x0b, 0xd4, + 0x0a, 0xd5, 0x33, 0x4b, 0xa3, 0xc5, 0xfc, 0x04, 0xd8, 0x8a, 0x15, 0x9a, 0x91, 0x92, 0xfa, 0x21, + 0x5d, 0x66, 0xca, 0xb7, 0xfc, 0xaf, 0xc5, 0xe2, 0x26, 0x95, 0x1f, 0x55, 0xaa, 0x62, 0xe6, 0xf4, + 0xd2, 0x0f, 0xa8, 0xb8, 0x54, 0x32, 0x97, 0x66, 0x0a, 0xbc, 0xeb, 0x26, 0x3a, 0xa1, 0x72, 0x16, + 0x5e, 0x4c, 0x24, 0x6a, 0x96, 0xce, 0x00, 0x73, 0xaa, 0xe8, 0xca, 0x62, 0x56, 0x75, 0x6c, 0xc1, + 0x27, 0x53, 0x01, 0x4b, 0xde, 0x65, 0xe4, 0x4f, 0x96, 0xbc, 0xcb, 0xcc, 0x21, 0xfc, 0x50, 0x7c, + 0x65, 0xc5, 0x40, 0x34, 0x23, 0xc3, 0x6c, 0x8e, 0x48, 0x9c, 0x55, 0x97, 0xc6, 0x40, 0x0e, 0x66, + 0xd1, 0xd9, 0x86, 0x39, 0x63, 0x12, 0x59, 0xa9, 0x46, 0xe4, 0xa5, 0x98, 0xcd, 0xa4, 0x8a, 0xe1, + 0x8a, 0x39, 0x6f, 0x30, 0x7a, 0x53, 0x37, 0xfe, 0xcd, 0x89, 0x70, 0x2b, 0x6f, 0x0d, 0x80, 0xe2, + 0x0c, 0xfd, 0x86, 0x1e, 0x9b, 0xa9, 0x36, 0x6e, 0x2a, 0xee, 0x80, 0x8c, 0x06, 0xac, 0x3c, 0x10, + 0xb9, 0x06, 0x66, 0x4d, 0xa9, 0xb8, 0x33, 0x59, 0xfc, 0x46, 0x36, 0xcd, 0x78, 0x61, 0xb5, 0x44, + 0x06, 0x9c, 0x4c, 0xce, 0xe4, 0xa6, 0x08, 0xce, 0xb1, 0x27, 0x2b, 0x72, 0x3d, 0x9c, 0xbd, 0xcb, + 0xd9, 0x76, 0xc0, 0xb4, 0x96, 0xbb, 0x57, 0xba, 0x2c, 0x12, 0x69, 0x82, 0x53, 0xbb, 0xdc, 0x90, + 0x43, 0x98, 0xed, 0x72, 0x25, 0x0f, 0xf0, 0x59, 0x76, 0xb9, 0x29, 0x6d, 0xb0, 0xdc, 0x3e, 0x4a, + 0xbf, 0xc4, 0xe9, 0x9d, 0xac, 0x38, 0xcf, 0xf6, 0x39, 0x4b, 0xd7, 0xb2, 0xe8, 0xac, 0x50, 0xed, + 0x52, 0xa4, 0x05, 0x46, 0x57, 0x35, 0x36, 0x69, 0x92, 0xb5, 0xa2, 0x0d, 0x4e, 0x17, 0xaa, 0x0d, + 0x98, 0x52, 0xd3, 0x10, 0x67, 0xf6, 0xe2, 0x5a, 0x9a, 0x46, 0xa8, 0x18, 0xb6, 0x33, 0x92, 0x0b, + 0xac, 0x37, 0x0b, 0x49, 0xe6, 0x68, 0x1d, 0xca, 0x1e, 0x12, 0x52, 0x59, 0x33, 0xa0, 0x4b, 0xd9, + 0x5a, 0xcd, 0x65, 0xa6, 0x27, 0xb2, 0x97, 0xee, 0x22, 0x08, 0xfd, 0x8a, 0x74, 0x72, 0x28, 0xa5, + 0x39, 0x16, 0xed, 0x57, 0x70, 0x29, 0x95, 0x51, 0x59, 0xba, 0xfb, 0xb2, 0x72, 0x2d, 0x67, 0x51, + 0xb3, 0x86, 0xfe, 0x42, 0xb1, 0x80, 0x1e, 0x93, 0x9e, 0x25, 0x10, 0x5b, 0x4b, 0x83, 0x89, 0xa6, + 0x94, 0x03, 0x46, 0xee, 0x2b, 0xf1, 0xf8, 0xdf, 0xd4, 0xc3, 0xac, 0xe4, 0xcd, 0xf9, 0x3d, 0xfc, + 0xbe, 0x90, 0xc9, 0x89, 0xdc, 0xcd, 0x09, 0x99, 0x6c, 0xce, 0xec, 0x9c, 0x4f, 0x7a, 0x8b, 0x5e, + 0x69, 0x1a, 0xd2, 0x3e, 0x4b, 0xf1, 0x93, 0x9b, 0x15, 0xda, 0xa0, 0x21, 0x49, 0x81, 0x96, 0x49, + 0x31, 0x37, 0x0f, 0x74, 0xe6, 0xcc, 0xff, 0x58, 0x11, 0x68, 0xa9, 0xe4, 0xce, 0xe8, 0x96, 0x89, + 0x13, 0xa6, 0xfc, 0xcf, 0x39, 0x02, 0x73, 0xd6, 0x94, 0x17, 0x5a, 0x71, 0x7c, 0x66, 0x26, 0x8d, + 0x36, 0x70, 0xc1, 0x16, 0xf2, 0x24, 0x83, 0x5a, 0x4e, 0x96, 0xe8, 0xcc, 0x1e, 0xfe, 0x40, 0x24, + 0xff, 0x4e, 0x67, 0x73, 0x96, 0xf6, 0xf8, 0x80, 0x74, 0xcf, 0x99, 0xb4, 0x37, 0xe9, 0x25, 0x78, + 0x3a, 0x15, 0xb3, 0x5c, 0x62, 0x79, 0x89, 0x9a, 0x8d, 0x7e, 0xd1, 0xb9, 0xf4, 0x10, 0x09, 0xbd, + 0x2b, 0x09, 0xaf, 0xe6, 0xa0, 0x8e, 0x7d, 0x03, 0x57, 0x33, 0x53, 0x38, 0xa3, 0x77, 0xf2, 0x46, + 0x7d, 0x86, 0x3d, 0x80, 0xd6, 0xe0, 0x62, 0xd3, 0xdd, 0xf5, 0x94, 0x7c, 0xca, 0xd2, 0xd4, 0x48, + 0xe7, 0x84, 0x96, 0x22, 0xdb, 0x94, 0x7e, 0xf9, 0x49, 0x1c, 0xcd, 0xa6, 0x66, 0xc6, 0x45, 0x95, + 0xec, 0x84, 0xc0, 0x52, 0x7c, 0x1b, 0x53, 0xe9, 0x2a, 0x04, 0xd5, 0xb4, 0xb4, 0x92, 0xa0, 0x21, + 0x43, 0xae, 0x24, 0x68, 0xcc, 0x63, 0xcb, 0xbc, 0x17, 0xb6, 0xdf, 0xc3, 0xaa, 0xf7, 0x42, 0x49, + 0x2a, 0x9b, 0x70, 0x23, 0xa0, 0xcf, 0xa8, 0x13, 0x21, 0xdf, 0xf3, 0x30, 0xaf, 0x53, 0x8a, 0x4f, + 0x9f, 0x65, 0xe1, 0x49, 0xa7, 0x0d, 0xea, 0x94, 0x07, 0xfb, 0x05, 0x28, 0x92, 0xee, 0x17, 0x50, + 0x3b, 0x9a, 0xed, 0x62, 0x9c, 0x52, 0x53, 0x99, 0x49, 0x5e, 0x19, 0xf2, 0x2d, 0x4a, 0x5e, 0x99, + 0xb2, 0x18, 0x52, 0xf3, 0x71, 0x5b, 0x18, 0xc1, 0x31, 0xbd, 0xeb, 0xb9, 0x69, 0x08, 0x2b, 0x8b, + 0xf9, 0xb9, 0xfb, 0xf8, 0x25, 0x58, 0x29, 0x99, 0x6d, 0x0d, 0x99, 0xb2, 0x48, 0x2a, 0x49, 0xec, + 0xa4, 0x21, 0x91, 0x99, 0xa6, 0x6d, 0x4b, 0xf8, 0x79, 0x75, 0xba, 0x19, 0xb9, 0x04, 0x55, 0xd2, + 0xf9, 0x0a, 0x5f, 0x9c, 0x78, 0x4d, 0x35, 0xeb, 0x52, 0x89, 0xdd, 0x54, 0x85, 0xcf, 0x90, 0xab, + 0xcd, 0x15, 0xcf, 0x0d, 0xcc, 0x99, 0x89, 0xdf, 0xd5, 0xcd, 0xa4, 0x9c, 0x87, 0xb7, 0x03, 0xaf, + 0x19, 0xd1, 0x8f, 0xc4, 0xd7, 0x6c, 0xd2, 0x79, 0x3b, 0xdf, 0x4a, 0x78, 0x2c, 0xcd, 0x4f, 0x35, + 0x2b, 0x79, 0x69, 0x41, 0xd1, 0x63, 0x7a, 0x8f, 0xfb, 0x64, 0x7d, 0xa5, 0xc1, 0x03, 0x11, 0xfc, + 0x20, 0x75, 0xe7, 0xa3, 0x7c, 0x7e, 0x3a, 0x66, 0x32, 0x03, 0xd1, 0x10, 0x5b, 0xcb, 0xa8, 0x49, + 0xaf, 0x1e, 0xb4, 0x52, 0xc3, 0xb5, 0x8f, 0x81, 0x60, 0xc5, 0x4c, 0x90, 0xa6, 0xe2, 0x5f, 0x15, + 0xea, 0x8c, 0xde, 0xcd, 0x8c, 0x3e, 0xe4, 0xe9, 0x6b, 0x6c, 0xd9, 0x98, 0xc9, 0x9c, 0x55, 0x7c, + 0x3f, 0x80, 0x39, 0xc6, 0xf0, 0x44, 0xa8, 0xa9, 0xd6, 0x1f, 0xa5, 0xbc, 0x92, 0x51, 0x8e, 0x36, + 0xe9, 0x15, 0x7f, 0xb2, 0xf4, 0x46, 0xbc, 0xf0, 0xcc, 0xb1, 0xac, 0x99, 0xf4, 0xd8, 0x54, 0x36, + 0x6b, 0x8f, 0x37, 0x5e, 0x6a, 0x2a, 0x35, 0xc4, 0xd6, 0x12, 0x9f, 0x4a, 0xad, 0xf4, 0x7c, 0x53, + 0x99, 0x20, 0xa8, 0x4f, 0xa5, 0xde, 0xcd, 0x8c, 0x3e, 0x0c, 0x9e, 0x4a, 0x33, 0x99, 0x73, 0x4f, + 0x65, 0x22, 0xce, 0x57, 0xeb, 0x8f, 0x69, 0x2a, 0x93, 0xf0, 0x6c, 0x2a, 0x93, 0xa5, 0xca, 0x54, + 0x9a, 0x03, 0x89, 0x33, 0xe9, 0x7d, 0x45, 0xe9, 0xb1, 0x40, 0xe2, 0x73, 0x4d, 0xa6, 0x78, 0xff, + 0x99, 0x40, 0x6d, 0x2d, 0xa3, 0x67, 0xd4, 0x91, 0x90, 0x28, 0x3f, 0xdb, 0x84, 0x2e, 0x64, 0x11, + 0xa5, 0x53, 0xba, 0x2e, 0xf4, 0xac, 0x64, 0x77, 0x33, 0xfb, 0x92, 0x37, 0x1f, 0x6c, 0x5a, 0x93, + 0xa4, 0xce, 0x3b, 0xb1, 0x8f, 0x85, 0xd0, 0x4c, 0xc5, 0x62, 0x27, 0x7a, 0xa5, 0x4e, 0x6e, 0x66, + 0x0d, 0xda, 0xa6, 0x6e, 0x92, 0x74, 0xb9, 0xe2, 0x62, 0xc9, 0x0a, 0xfa, 0x1e, 0x48, 0x35, 0x15, + 0xdc, 0xad, 0x52, 0xcd, 0x8a, 0xfc, 0x96, 0x54, 0xd3, 0xd8, 0x2b, 0x74, 0xdb, 0x6e, 0x07, 0xc4, + 0xec, 0xec, 0xa6, 0x6d, 0x52, 0x9d, 0x7f, 0xe2, 0x32, 0x50, 0x07, 0x6f, 0x2d, 0xa1, 0x75, 0xba, + 0x00, 0xf5, 0xe2, 0x3c, 0xa3, 0xdd, 0x4c, 0x86, 0xae, 0x8f, 0x35, 0x61, 0x85, 0x24, 0xfa, 0x94, + 0xd5, 0x76, 0x76, 0xa7, 0xa4, 0x47, 0xe3, 0x8c, 0xa3, 0xcb, 0x5a, 0x1d, 0x4c, 0x0b, 0x64, 0x0e, + 0x84, 0x41, 0x9c, 0xd9, 0x0a, 0xfc, 0x17, 0xae, 0xfc, 0xc8, 0x58, 0x6b, 0x09, 0xfd, 0x36, 0x4c, + 0x08, 0xe4, 0xc1, 0x0c, 0x49, 0x62, 0x53, 0x86, 0x7c, 0x01, 0x93, 0x9c, 0x21, 0xb4, 0x07, 0x59, + 0x2d, 0xe5, 0xa8, 0x94, 0x93, 0x6c, 0x71, 0xbf, 0x24, 0x3e, 0x55, 0x84, 0x94, 0x27, 0x16, 0x8a, + 0x22, 0x94, 0x7e, 0xeb, 0xa1, 0x28, 0x42, 0xa6, 0x57, 0x19, 0xdf, 0x83, 0x49, 0x3e, 0x25, 0xb9, + 0xdc, 0xcc, 0xb6, 0x50, 0xe7, 0x94, 0x60, 0xb0, 0xc3, 0xae, 0x1b, 0x35, 0x7c, 0xef, 0xb9, 0xbb, + 0x3b, 0x90, 0xb1, 0x69, 0x94, 0xd6, 0x12, 0x6a, 0xd1, 0xc4, 0x75, 0x22, 0x9d, 0x20, 0x8e, 0x8e, + 0xfc, 0x60, 0xdf, 0xf5, 0x76, 0x07, 0x90, 0xbc, 0xa1, 0x93, 0x4c, 0xe2, 0x31, 0xba, 0xcd, 0x6c, + 0xba, 0x03, 0xf1, 0x73, 0x2c, 0xd4, 0x05, 0x7a, 0xcd, 0x7c, 0xde, 0x1e, 0x67, 0x3b, 0xba, 0xaf, + 0xc6, 0xe1, 0x61, 0x36, 0xee, 0xf8, 0x41, 0x77, 0x30, 0xb1, 0xaa, 0x1e, 0x8c, 0x95, 0x40, 0x6b, + 0x2d, 0x11, 0xaa, 0xcd, 0x4c, 0xaa, 0x83, 0xb0, 0x73, 0x24, 0xf4, 0x35, 0x3a, 0xf6, 0x73, 0xf6, + 0x36, 0xdb, 0xa3, 0x47, 0x43, 0x5e, 0x0e, 0xa3, 0xbd, 0xad, 0x00, 0x3f, 0xc7, 0x01, 0x8d, 0xf1, + 0x1b, 0x14, 0xdd, 0xa6, 0x83, 0xb7, 0x96, 0x08, 0x95, 0x66, 0x8a, 0x4a, 0x16, 0x74, 0x9e, 0x72, + 0x42, 0x87, 0x76, 0xc6, 0xde, 0x64, 0x5f, 0x43, 0x4f, 0xc8, 0xf4, 0xb4, 0x48, 0x31, 0x4a, 0xb5, + 0xe4, 0xab, 0x95, 0x69, 0x35, 0x5a, 0x2c, 0x44, 0x35, 0xa6, 0x03, 0xaa, 0x69, 0x5a, 0x95, 0x0b, + 0x31, 0x63, 0xfe, 0xd6, 0x24, 0x09, 0x66, 0x54, 0x6f, 0xf8, 0x9d, 0x7d, 0xd5, 0xa8, 0x56, 0xf2, + 0x7e, 0x56, 0xf4, 0xac, 0x9c, 0x5c, 0x9c, 0xd2, 0xd4, 0x9c, 0xea, 0xcd, 0xbc, 0x9a, 0xf9, 0x53, + 0x35, 0xaa, 0xf5, 0x1c, 0xa5, 0xd2, 0xa8, 0xa6, 0x0d, 0xea, 0x94, 0x07, 0x1b, 0xd5, 0x14, 0x49, + 0x37, 0xaa, 0xd5, 0x8e, 0x66, 0x6f, 0x3c, 0x94, 0x4e, 0x52, 0x2a, 0xd5, 0xb5, 0xcc, 0xfc, 0xa5, + 0x39, 0x97, 0xee, 0x97, 0x0d, 0x79, 0x95, 0xa5, 0xb1, 0x9a, 0x9d, 0x73, 0xb9, 0xa2, 0xdf, 0x20, + 0xdf, 0x2d, 0xa0, 0x4d, 0xfa, 0x49, 0x41, 0x2e, 0x0a, 0x6c, 0x1c, 0x46, 0x81, 0x4b, 0x83, 0xc3, + 0xb3, 0xcf, 0x1a, 0xa1, 0x9d, 0x19, 0x70, 0x5a, 0x1f, 0x10, 0x7a, 0x4d, 0x33, 0xbd, 0x5c, 0xbc, + 0x1c, 0x7f, 0x04, 0x77, 0x5e, 0x9d, 0xa7, 0x8b, 0xd9, 0x4b, 0x7c, 0x8c, 0x5d, 0x77, 0x66, 0xa3, + 0x96, 0xe2, 0xec, 0x39, 0x5c, 0xdf, 0xbc, 0x0d, 0xa3, 0x0c, 0x29, 0xf3, 0xb4, 0x99, 0x52, 0x71, + 0xd0, 0x3d, 0x11, 0x9b, 0x43, 0x50, 0xb4, 0xaa, 0xcc, 0x7e, 0xdd, 0x83, 0x09, 0xe6, 0xd9, 0x3f, + 0x3b, 0xca, 0x67, 0x22, 0x82, 0x27, 0xaf, 0x63, 0xd9, 0x41, 0x6d, 0xd3, 0xea, 0x4d, 0xe7, 0xf9, + 0x19, 0xf9, 0x3d, 0x7a, 0xbb, 0x22, 0x9c, 0x6e, 0xd9, 0xf8, 0x73, 0x89, 0xf4, 0x30, 0x9c, 0xa5, + 0x1f, 0xd3, 0x2b, 0x1e, 0x99, 0xa0, 0x3c, 0xab, 0xfb, 0x97, 0x52, 0xd8, 0xe8, 0x33, 0x98, 0x61, + 0xcc, 0x95, 0xc8, 0x69, 0xa0, 0x1c, 0x9e, 0xcd, 0x30, 0x36, 0xbf, 0x0c, 0xf2, 0x6f, 0x8b, 0xbb, + 0xa0, 0x81, 0xdd, 0x3e, 0xcb, 0x2d, 0xd0, 0x60, 0xd6, 0x65, 0x51, 0x79, 0x42, 0x55, 0x98, 0x54, + 0xe2, 0xa2, 0x6c, 0x42, 0x8b, 0xd9, 0xb9, 0x8e, 0xe8, 0x64, 0x3c, 0xa4, 0x66, 0x41, 0x3a, 0xd9, + 0x7c, 0xd6, 0xf0, 0x72, 0x72, 0x27, 0xc5, 0x76, 0x50, 0x9a, 0x5c, 0x0e, 0x5a, 0x9e, 0x59, 0xc5, + 0x26, 0xec, 0xf5, 0x90, 0x5b, 0x17, 0x91, 0x27, 0x67, 0x1f, 0x6c, 0x8e, 0x3a, 0x61, 0xb8, 0x27, + 0x19, 0x38, 0x17, 0x59, 0xe4, 0x7e, 0x44, 0x35, 0x29, 0x73, 0x86, 0xe9, 0x4c, 0x62, 0xb7, 0x94, + 0xab, 0xcb, 0xfc, 0xdc, 0xd4, 0xfb, 0x34, 0x24, 0xdf, 0x9c, 0xda, 0xe9, 0xed, 0x01, 0x54, 0x04, + 0x27, 0xde, 0x19, 0x08, 0x27, 0xbd, 0xee, 0xfc, 0xeb, 0xa0, 0xe6, 0xf6, 0x06, 0xa4, 0xaa, 0x32, + 0x5c, 0x84, 0x64, 0xa4, 0x6f, 0x16, 0x04, 0xf5, 0xb0, 0x9e, 0xdc, 0x31, 0x64, 0x5f, 0x89, 0xc6, + 0x1f, 0xf9, 0x3c, 0xe7, 0x24, 0x64, 0xeb, 0xc6, 0x28, 0x9d, 0xd4, 0x1a, 0xe5, 0x25, 0x12, 0xaa, + 0xdc, 0xcc, 0xe2, 0x70, 0xa8, 0x5c, 0xfc, 0xf3, 0xf7, 0x1f, 0x89, 0x24, 0x67, 0x59, 0xe9, 0xd2, + 0x72, 0x3c, 0x1f, 0xfc, 0x8d, 0xc2, 0x6b, 0x21, 0x94, 0x9e, 0xed, 0xf3, 0x13, 0x92, 0xd7, 0x7d, + 0x09, 0x42, 0x56, 0xce, 0xf4, 0x0e, 0x76, 0xc1, 0x97, 0x33, 0xe6, 0xf5, 0xfc, 0x13, 0xea, 0xc4, + 0x71, 0xf9, 0xe9, 0xcc, 0xdb, 0x52, 0x97, 0xcb, 0xcc, 0x02, 0x2e, 0x67, 0x37, 0x27, 0x6d, 0x77, + 0x83, 0x6c, 0x53, 0xd6, 0x84, 0x96, 0xaa, 0xbb, 0x61, 0x6f, 0x48, 0x9b, 0xd9, 0x94, 0xc3, 0xbb, + 0x02, 0xa2, 0xd2, 0xde, 0x40, 0x4d, 0xa8, 0xb0, 0x25, 0x62, 0x7a, 0xe8, 0x27, 0x43, 0xa9, 0x4d, + 0x95, 0xad, 0x7b, 0x39, 0x71, 0x6f, 0x15, 0xb6, 0x5c, 0x5e, 0x27, 0xd1, 0x36, 0xfd, 0xc4, 0x83, + 0x91, 0xe2, 0x5b, 0xca, 0xcb, 0xad, 0xec, 0xe7, 0x93, 0x95, 0xfc, 0x86, 0xd1, 0x0f, 0x61, 0xce, + 0xf8, 0x7e, 0x52, 0xde, 0xc8, 0xe6, 0xbd, 0xae, 0x1c, 0x44, 0x7c, 0x1f, 0xca, 0x59, 0x99, 0xb8, + 0xe3, 0xd0, 0xee, 0xfc, 0x64, 0xe7, 0x52, 0xa6, 0x0e, 0x4c, 0xe9, 0xbd, 0x09, 0xb3, 0xa6, 0xec, + 0xd6, 0x72, 0x73, 0xe4, 0xa4, 0xbe, 0x36, 0xc6, 0x8f, 0x6f, 0xc1, 0x9c, 0x31, 0xc3, 0xb4, 0xe4, + 0x4c, 0x5e, 0xfe, 0x69, 0x23, 0xc5, 0xaf, 0x61, 0x3e, 0x23, 0x9d, 0x72, 0x7c, 0x6d, 0x94, 0x9b, + 0x6e, 0x39, 0xe7, 0xfa, 0xba, 0x92, 0x9d, 0xa9, 0x57, 0x46, 0x2d, 0x0c, 0x4c, 0xe6, 0x5b, 0x31, + 0xa6, 0x2f, 0x47, 0xdb, 0x74, 0x11, 0x9a, 0x52, 0xf7, 0xaa, 0x8b, 0x30, 0x27, 0xb5, 0x6f, 0x46, + 0xdc, 0xff, 0x7c, 0x46, 0xb6, 0xde, 0x1c, 0xaa, 0x67, 0xe8, 0xed, 0xa6, 0x90, 0xff, 0x7a, 0xfa, + 0xd6, 0xc4, 0xfb, 0x3f, 0x63, 0x6e, 0x57, 0x63, 0x3f, 0x3f, 0xa5, 0x7a, 0xfc, 0xba, 0x17, 0x46, + 0x4e, 0xaf, 0x97, 0xa3, 0x06, 0x09, 0x5c, 0x09, 0xd9, 0xba, 0x47, 0x8c, 0x08, 0x15, 0x37, 0x4f, + 0xa2, 0xa6, 0x90, 0xa9, 0xe2, 0xf9, 0x29, 0x4c, 0x35, 0xd5, 0xc6, 0x0d, 0x8d, 0x64, 0x2e, 0x0a, + 0x19, 0x5e, 0x3d, 0xb8, 0xef, 0x03, 0xef, 0x74, 0x6a, 0xbd, 0xde, 0x99, 0x46, 0x91, 0xe9, 0xdd, + 0xd4, 0x32, 0xdc, 0x49, 0x49, 0x6d, 0x4a, 0xdc, 0x28, 0xbd, 0x9b, 0xe6, 0xa4, 0x78, 0xab, 0x94, + 0xa5, 0x71, 0x7e, 0xa0, 0x1c, 0x1b, 0x5c, 0x2e, 0x22, 0x43, 0x1a, 0xa2, 0x47, 0xea, 0x5b, 0x59, + 0x96, 0x55, 0x28, 0xc7, 0x1d, 0x97, 0x7c, 0x23, 0x9b, 0x48, 0x43, 0xd4, 0x82, 0xb2, 0x48, 0x37, + 0xc2, 0x12, 0x7e, 0xc4, 0xf9, 0x12, 0xe2, 0xc0, 0x9e, 0xec, 0x7c, 0x24, 0x39, 0x7c, 0x2b, 0x25, + 0xdf, 0x96, 0x4b, 0xcf, 0x51, 0xc6, 0xa3, 0xf3, 0x2c, 0x5a, 0xf5, 0x95, 0x5f, 0xfe, 0xf7, 0xc5, + 0xc2, 0x2f, 0x7f, 0xb5, 0x58, 0xf8, 0x8f, 0xbf, 0x5a, 0x2c, 0xfc, 0xb7, 0x5f, 0x2d, 0x16, 0x7e, + 0xb0, 0x74, 0xb6, 0x0c, 0x10, 0x9d, 0x9e, 0x8b, 0xbd, 0xe8, 0x0e, 0x23, 0x37, 0x4a, 0xff, 0x5b, + 0xfe, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x28, 0xda, 0x82, 0x53, 0x5a, 0xb3, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -13301,10 +13273,8 @@ type AuthServiceClient interface { DeleteDatabaseServer(ctx context.Context, in *DeleteDatabaseServerRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // DeleteAllDatabaseServers removes all registered database proxy servers. DeleteAllDatabaseServers(ctx context.Context, in *DeleteAllDatabaseServersRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - // GetAllDatabaseServices returns all DatabaseService resources. - GetAllDatabaseServices(ctx context.Context, in *GetAllDatabaseServicesRequest, opts ...grpc.CallOption) (*DatabaseServiceV1List, error) // UpsertDatabaseService registers a new DatabaseService. - UpsertDatabaseService(ctx context.Context, in *UpsertDatabaseServiceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + UpsertDatabaseService(ctx context.Context, in *UpsertDatabaseServiceRequest, opts ...grpc.CallOption) (*types.KeepAlive, error) // DeleteDatabaseService removes the specified DatabaseService. DeleteDatabaseService(ctx context.Context, in *types.ResourceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // DeleteAllDatabaseServices removes all registered DatabaseServices. @@ -14689,17 +14659,8 @@ func (c *authServiceClient) DeleteAllDatabaseServers(ctx context.Context, in *De return out, nil } -func (c *authServiceClient) GetAllDatabaseServices(ctx context.Context, in *GetAllDatabaseServicesRequest, opts ...grpc.CallOption) (*DatabaseServiceV1List, error) { - out := new(DatabaseServiceV1List) - err := c.cc.Invoke(ctx, "/proto.AuthService/GetAllDatabaseServices", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authServiceClient) UpsertDatabaseService(ctx context.Context, in *UpsertDatabaseServiceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) +func (c *authServiceClient) UpsertDatabaseService(ctx context.Context, in *UpsertDatabaseServiceRequest, opts ...grpc.CallOption) (*types.KeepAlive, error) { + out := new(types.KeepAlive) err := c.cc.Invoke(ctx, "/proto.AuthService/UpsertDatabaseService", in, out, opts...) if err != nil { return nil, err @@ -16037,10 +15998,8 @@ type AuthServiceServer interface { DeleteDatabaseServer(context.Context, *DeleteDatabaseServerRequest) (*emptypb.Empty, error) // DeleteAllDatabaseServers removes all registered database proxy servers. DeleteAllDatabaseServers(context.Context, *DeleteAllDatabaseServersRequest) (*emptypb.Empty, error) - // GetAllDatabaseServices returns all DatabaseService resources. - GetAllDatabaseServices(context.Context, *GetAllDatabaseServicesRequest) (*DatabaseServiceV1List, error) // UpsertDatabaseService registers a new DatabaseService. - UpsertDatabaseService(context.Context, *UpsertDatabaseServiceRequest) (*emptypb.Empty, error) + UpsertDatabaseService(context.Context, *UpsertDatabaseServiceRequest) (*types.KeepAlive, error) // DeleteDatabaseService removes the specified DatabaseService. DeleteDatabaseService(context.Context, *types.ResourceRequest) (*emptypb.Empty, error) // DeleteAllDatabaseServices removes all registered DatabaseServices. @@ -16621,10 +16580,7 @@ func (*UnimplementedAuthServiceServer) DeleteDatabaseServer(ctx context.Context, func (*UnimplementedAuthServiceServer) DeleteAllDatabaseServers(ctx context.Context, req *DeleteAllDatabaseServersRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteAllDatabaseServers not implemented") } -func (*UnimplementedAuthServiceServer) GetAllDatabaseServices(ctx context.Context, req *GetAllDatabaseServicesRequest) (*DatabaseServiceV1List, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAllDatabaseServices not implemented") -} -func (*UnimplementedAuthServiceServer) UpsertDatabaseService(ctx context.Context, req *UpsertDatabaseServiceRequest) (*emptypb.Empty, error) { +func (*UnimplementedAuthServiceServer) UpsertDatabaseService(ctx context.Context, req *UpsertDatabaseServiceRequest) (*types.KeepAlive, error) { return nil, status.Errorf(codes.Unimplemented, "method UpsertDatabaseService not implemented") } func (*UnimplementedAuthServiceServer) DeleteDatabaseService(ctx context.Context, req *types.ResourceRequest) (*emptypb.Empty, error) { @@ -18616,24 +18572,6 @@ func _AuthService_DeleteAllDatabaseServers_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } -func _AuthService_GetAllDatabaseServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetAllDatabaseServicesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServiceServer).GetAllDatabaseServices(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/proto.AuthService/GetAllDatabaseServices", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServiceServer).GetAllDatabaseServices(ctx, req.(*GetAllDatabaseServicesRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _AuthService_UpsertDatabaseService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UpsertDatabaseServiceRequest) if err := dec(in); err != nil { @@ -21117,10 +21055,6 @@ var _AuthService_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteAllDatabaseServers", Handler: _AuthService_DeleteAllDatabaseServers_Handler, }, - { - MethodName: "GetAllDatabaseServices", - Handler: _AuthService_GetAllDatabaseServices_Handler, - }, { MethodName: "UpsertDatabaseService", Handler: _AuthService_UpsertDatabaseService_Handler, @@ -25612,33 +25546,6 @@ func (m *DeleteAllDatabaseServersRequest) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } -func (m *GetAllDatabaseServicesRequest) 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 *GetAllDatabaseServicesRequest) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GetAllDatabaseServicesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - return len(dAtA) - i, nil -} - func (m *DatabaseServiceV1List) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -29513,6 +29420,27 @@ func (m *PaginatedResource_WindowsDesktopService) MarshalToSizedBuffer(dAtA []by } return len(dAtA) - i, nil } +func (m *PaginatedResource_DatabaseService) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PaginatedResource_DatabaseService) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.DatabaseService != nil { + { + size, err := m.DatabaseService.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintAuthservice(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + return len(dAtA) - i, nil +} func (m *ListResourcesRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -29941,12 +29869,12 @@ func (m *SessionTrackerUpdateExpiry) MarshalToSizedBuffer(dAtA []byte) (int, err copy(dAtA[i:], m.XXX_unrecognized) } if m.Expires != nil { - n116, err116 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) - if err116 != nil { - return 0, err116 + n117, err117 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Expires):]) + if err117 != nil { + return 0, err117 } - i -= n116 - i = encodeVarintAuthservice(dAtA, i, uint64(n116)) + i -= n117 + i = encodeVarintAuthservice(dAtA, i, uint64(n117)) i-- dAtA[i] = 0xa } @@ -33198,18 +33126,6 @@ func (m *DeleteAllDatabaseServersRequest) Size() (n int) { return n } -func (m *GetAllDatabaseServicesRequest) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - func (m *DatabaseServiceV1List) Size() (n int) { if m == nil { return 0 @@ -35084,6 +35000,18 @@ func (m *PaginatedResource_WindowsDesktopService) Size() (n int) { } return n } +func (m *PaginatedResource_DatabaseService) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.DatabaseService != nil { + l = m.DatabaseService.Size() + n += 1 + l + sovAuthservice(uint64(l)) + } + return n +} func (m *ListResourcesRequest) Size() (n int) { if m == nil { return 0 @@ -45517,57 +45445,6 @@ func (m *DeleteAllDatabaseServersRequest) Unmarshal(dAtA []byte) error { } return nil } -func (m *GetAllDatabaseServicesRequest) 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 ErrIntOverflowAuthservice - } - 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: GetAllDatabaseServicesRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GetAllDatabaseServicesRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipAuthservice(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthAuthservice - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *DatabaseServiceV1List) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -54152,6 +54029,41 @@ func (m *PaginatedResource) Unmarshal(dAtA []byte) error { } m.Resource = &PaginatedResource_WindowsDesktopService{v} iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DatabaseService", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuthservice + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthAuthservice + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthAuthservice + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &types.DatabaseServiceV1{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Resource = &PaginatedResource_DatabaseService{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipAuthservice(dAtA[iNdEx:]) diff --git a/api/proto/teleport/legacy/client/proto/authservice.proto b/api/proto/teleport/legacy/client/proto/authservice.proto index bbf8f47eea9..964fd167b87 100644 --- a/api/proto/teleport/legacy/client/proto/authservice.proto +++ b/api/proto/teleport/legacy/client/proto/authservice.proto @@ -839,9 +839,6 @@ message DeleteAllDatabaseServersRequest { string Namespace = 1 [(gogoproto.jsontag) = "namespace"]; } -// GetAllDatabaseServicesRequest is a request to fetch all DatabaseServices. -message GetAllDatabaseServicesRequest {} - // DatabaseServiceV1List represents a list of DatabaseService resources. message DatabaseServiceV1List { // Services is a list of DatabaseService resources. @@ -1626,6 +1623,8 @@ message PaginatedResource { types.KubernetesServerV3 KubernetesServer = 7 [(gogoproto.jsontag) = "kubernetes_server,omitempty"]; // WindowsDesktopService represents a WindowsDesktopServiceV3 resource. types.WindowsDesktopServiceV3 WindowsDesktopService = 8 [(gogoproto.jsontag) = "windows_desktop_service,omitempty"]; + // DatabaseService represents a DatabaseService resource. + types.DatabaseServiceV1 DatabaseService = 9 [(gogoproto.jsontag) = "database_service,omitempty"]; } } @@ -2213,10 +2212,8 @@ service AuthService { // DeleteAllDatabaseServers removes all registered database proxy servers. rpc DeleteAllDatabaseServers(DeleteAllDatabaseServersRequest) returns (google.protobuf.Empty); - // GetAllDatabaseServices returns all DatabaseService resources. - rpc GetAllDatabaseServices(GetAllDatabaseServicesRequest) returns (DatabaseServiceV1List); // UpsertDatabaseService registers a new DatabaseService. - rpc UpsertDatabaseService(UpsertDatabaseServiceRequest) returns (google.protobuf.Empty); + rpc UpsertDatabaseService(UpsertDatabaseServiceRequest) returns (types.KeepAlive); // DeleteDatabaseService removes the specified DatabaseService. rpc DeleteDatabaseService(types.ResourceRequest) returns (google.protobuf.Empty); // DeleteAllDatabaseServices removes all registered DatabaseServices. diff --git a/api/types/resource.go b/api/types/resource.go index 40181ef061a..e1c193ed673 100644 --- a/api/types/resource.go +++ b/api/types/resource.go @@ -165,6 +165,19 @@ func (r ResourcesWithLabels) AsDatabaseServers() ([]DatabaseServer, error) { return dbs, nil } +// AsDatabaseServices converts each resource into type DatabaseService. +func (r ResourcesWithLabels) AsDatabaseServices() ([]DatabaseService, error) { + services := make([]DatabaseService, len(r)) + for i, resource := range r { + dbService, ok := resource.(DatabaseService) + if !ok { + return nil, trace.BadParameter("expected types.DatabaseService, got: %T", resource) + } + services[i] = dbService + } + return services, nil +} + // AsWindowsDesktops converts each resource into type WindowsDesktop. func (r ResourcesWithLabels) AsWindowsDesktops() ([]WindowsDesktop, error) { desktops := make([]WindowsDesktop, 0, len(r)) diff --git a/lib/auth/api.go b/lib/auth/api.go index 1b67041d87b..7b1de6102b0 100644 --- a/lib/auth/api.go +++ b/lib/auth/api.go @@ -70,6 +70,9 @@ type Announcer interface { CreateWindowsDesktop(context.Context, types.WindowsDesktop) error // UpdateWindowsDesktop updates a Windows desktop host. UpdateWindowsDesktop(context.Context, types.WindowsDesktop) error + + // UpsertDatabaseService registers a DatabaseService. + UpsertDatabaseService(context.Context, types.DatabaseService) (*types.KeepAlive, error) } // accessPoint is an API interface implemented by a certificate authority (CA) diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 4e1bfb0331c..d5b989070d0 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -148,6 +148,9 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { if cfg.Databases == nil { cfg.Databases = local.NewDatabasesService(cfg.Backend) } + if cfg.DatabaseServices == nil { + cfg.DatabaseServices = local.NewDatabaseServicesService(cfg.Backend) + } if cfg.Kubernetes == nil { cfg.Kubernetes = local.NewKubernetesService(cfg.Backend) } @@ -230,6 +233,7 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { Apps: cfg.Apps, Kubernetes: cfg.Kubernetes, Databases: cfg.Databases, + DatabaseServices: cfg.DatabaseServices, IAuditLog: cfg.AuditLog, Events: cfg.Events, WindowsDesktops: cfg.WindowsDesktops, @@ -310,6 +314,7 @@ type Services struct { services.Apps services.Kubernetes services.Databases + services.DatabaseServices services.WindowsDesktops services.SessionTrackerService services.Enforcer diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 6f55378f0a4..ec8ae35af1b 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -1254,7 +1254,7 @@ func (a *ServerWithRoles) ListResources(ctx context.Context, req proto.ListResou // https://github.com/gravitational/teleport/pull/1224 actionVerbs = []string{types.VerbList} - case types.KindDatabaseServer, types.KindAppServer, types.KindKubeService, types.KindKubeServer, types.KindWindowsDesktop, types.KindWindowsDesktopService: + case types.KindDatabaseServer, types.KindDatabaseService, types.KindAppServer, types.KindKubeService, types.KindKubeServer, types.KindWindowsDesktop, types.KindWindowsDesktopService: default: return nil, trace.NotImplemented("resource type %s does not support pagination", req.ResourceType) @@ -1337,6 +1337,8 @@ func (r resourceChecker) CanAccess(resource types.Resource) error { return r.CheckAccess(rr.GetCluster(), mfaParams) case types.DatabaseServer: return r.CheckAccess(rr.GetDatabase(), mfaParams) + case types.DatabaseService: + return r.CheckAccess(rr, mfaParams) case types.Database: return r.CheckAccess(rr, mfaParams) case types.Server: @@ -1433,7 +1435,7 @@ func (k *kubeChecker) canAccessKubernetes(server types.KubeServer) error { // newResourceAccessChecker creates a resourceAccessChecker for the provided resource type func (a *ServerWithRoles) newResourceAccessChecker(resource string) (resourceAccessChecker, error) { switch resource { - case types.KindAppServer, types.KindDatabaseServer, types.KindWindowsDesktop, types.KindWindowsDesktopService, types.KindNode: + case types.KindAppServer, types.KindDatabaseServer, types.KindDatabaseService, types.KindWindowsDesktop, types.KindWindowsDesktopService, types.KindNode: return &resourceChecker{AccessChecker: a.context.Checker}, nil case types.KindKubeService, types.KindKubeServer: return newKubeChecker(a.context), nil @@ -3861,20 +3863,12 @@ func (a *ServerWithRoles) DeleteAllDatabaseServers(ctx context.Context, namespac return a.authServer.DeleteAllDatabaseServers(ctx, namespace) } -// GetAllDatabaseServices returns all DatabaseService resources. -func (a *ServerWithRoles) GetAllDatabaseServices(ctx context.Context) ([]types.DatabaseService, error) { - if err := a.action(apidefaults.Namespace, types.KindDatabaseService, types.VerbList, types.VerbRead); err != nil { +// UpsertDatabaseService creates or updates a new DatabaseService resource. +func (a *ServerWithRoles) UpsertDatabaseService(ctx context.Context, service types.DatabaseService) (*types.KeepAlive, error) { + if err := a.action(service.GetNamespace(), types.KindDatabaseService, types.VerbCreate, types.VerbUpdate); err != nil { return nil, trace.Wrap(err) } - return nil, trace.NotImplemented("no DatabaseService service") -} - -// UpsertDatabaseService creates or updates a new DatabaseService resource. -func (a *ServerWithRoles) UpsertDatabaseService(ctx context.Context, service types.DatabaseService) error { - if err := a.action(service.GetNamespace(), types.KindDatabaseService, types.VerbCreate, types.VerbUpdate); err != nil { - return trace.Wrap(err) - } - return trace.NotImplemented("no DatabaseService service") + return a.authServer.UpsertDatabaseService(ctx, service) } // DeleteAllDatabaseServices removes all DatabaseService resources. @@ -3882,7 +3876,7 @@ func (a *ServerWithRoles) DeleteAllDatabaseServices(ctx context.Context) error { if err := a.action(apidefaults.Namespace, types.KindDatabaseService, types.VerbList, types.VerbDelete); err != nil { return trace.Wrap(err) } - return trace.NotImplemented("no DatabaseService service") + return a.authServer.DeleteAllDatabaseServices(ctx) } // DeleteDatabaseService removes a specific DatabaseService resource. @@ -3890,7 +3884,7 @@ func (a *ServerWithRoles) DeleteDatabaseService(ctx context.Context, name string if err := a.action(apidefaults.Namespace, types.KindDatabaseService, types.VerbDelete); err != nil { return trace.Wrap(err) } - return trace.NotImplemented("no DatabaseService service") + return a.authServer.DeleteDatabaseService(ctx, name) } // SignDatabaseCSR generates a client certificate used by proxy when talking diff --git a/lib/auth/auth_with_roles_test.go b/lib/auth/auth_with_roles_test.go index 6dd5fc1271d..066d9b7f25c 100644 --- a/lib/auth/auth_with_roles_test.go +++ b/lib/auth/auth_with_roles_test.go @@ -2362,6 +2362,148 @@ func TestGetAndList_KubernetesServers(t *testing.T) { require.Empty(t, cmp.Diff(testResources[:0], resp.Resources)) } +func TestListDatabaseServices(t *testing.T) { + t.Parallel() + ctx := context.Background() + srv := newTestTLSServer(t) + + numInitialResources := 5 + + // Create test Database Services. + for i := 0; i < numInitialResources; i++ { + name := uuid.NewString() + s, err := types.NewDatabaseServiceV1(types.Metadata{ + Name: name, + }, types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{ + "env": []string{name}, + }, + }, + }, + }) + require.NoError(t, err) + + _, err = srv.Auth().UpsertDatabaseService(ctx, s) + require.NoError(t, err) + } + + listServicesResp, err := srv.Auth().ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: defaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + databaseServices, err := types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + + testResources := make([]types.ResourceWithLabels, len(databaseServices)) + for i, server := range databaseServices { + testResources[i] = server + } + + // Create user, role, and client + username := "user" + user, role, err := CreateUserAndRole(srv.Auth(), username, nil) + require.NoError(t, err) + identity := TestUser(user.GetName()) + clt, err := srv.NewClient(identity) + require.NoError(t, err) + + // User is not allowed to list DatabseServices + _, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: defaults.DefaultChunkSize, + }, + ) + require.True(t, trace.IsAccessDenied(err), "expected access denied because role does not allow Read operations") + + // Change the user's role to allow them to list DatabaseServices + currentAllowRules := role.GetRules(types.Allow) + role.SetRules(types.Allow, append(currentAllowRules, types.NewRule(types.KindDatabaseService, services.RO()))) + require.NoError(t, srv.Auth().UpsertRole(ctx, role)) + + listServicesResp, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: defaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + usersViewDBServices, err := types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Len(t, usersViewDBServices, numInitialResources) + + require.Empty(t, cmp.Diff(databaseServices, usersViewDBServices)) + + // User is not allowed to Upsert DatabaseServices + extraDatabaseService, err := types.NewDatabaseServiceV1(types.Metadata{ + Name: "extra", + }, types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{ + "env": []string{"extra"}, + }, + }, + }, + }) + require.NoError(t, err) + _, err = clt.UpsertDatabaseService(ctx, extraDatabaseService) + require.True(t, trace.IsAccessDenied(err), "expected access denied because role does not allow Create/Update operations") + + currentAllowRules = role.GetRules(types.Allow) + role.SetRules(types.Allow, append(currentAllowRules, types.NewRule(types.KindDatabaseService, services.RW()))) + require.NoError(t, srv.Auth().UpsertRole(ctx, role)) + + _, err = clt.UpsertDatabaseService(ctx, extraDatabaseService) + require.NoError(t, err) + + listServicesResp, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: defaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + usersViewDBServices, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Len(t, usersViewDBServices, numInitialResources+1) + + // User can also delete a single or multiple DatabaseServices because they have RW permissions now + err = clt.DeleteDatabaseService(ctx, extraDatabaseService.GetName()) + require.NoError(t, err) + + listServicesResp, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: defaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + usersViewDBServices, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Len(t, usersViewDBServices, numInitialResources) + + // After removing all resources, we should have 0 resources being returned. + err = clt.DeleteAllDatabaseServices(ctx) + require.NoError(t, err) + + listServicesResp, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: defaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + usersViewDBServices, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Empty(t, usersViewDBServices) +} + func TestListResources_NeedTotalCountFlag(t *testing.T) { t.Parallel() ctx := context.Background() diff --git a/lib/auth/clt.go b/lib/auth/clt.go index dc28fb54b4c..bbc3f59f164 100644 --- a/lib/auth/clt.go +++ b/lib/auth/clt.go @@ -1575,6 +1575,7 @@ type ClientI interface { services.Restrictions services.Apps services.Databases + services.DatabaseServices services.Kubernetes services.WindowsDesktops WebService diff --git a/lib/auth/grpcserver.go b/lib/auth/grpcserver.go index 4ddeb227e6b..c3c23d5eb27 100644 --- a/lib/auth/grpcserver.go +++ b/lib/auth/grpcserver.go @@ -1135,43 +1135,18 @@ func (g *GRPCServer) DeleteAllDatabaseServers(ctx context.Context, req *proto.De return &emptypb.Empty{}, nil } -// GetAllDatabaseServices returns all registered DatabaseServices. -func (g *GRPCServer) GetAllDatabaseServices(ctx context.Context, _ *proto.GetAllDatabaseServicesRequest) (*proto.DatabaseServiceV1List, error) { - auth, err := g.authenticate(ctx) - if err != nil { - return nil, trace.Wrap(err) - } - - dbs, err := auth.GetAllDatabaseServices(ctx) - if err != nil { - return nil, trace.Wrap(err) - } - - ret := &proto.DatabaseServiceV1List{ - Services: make([]*types.DatabaseServiceV1, len(dbs)), - } - for i, db := range dbs { - dbServiceV1, ok := db.(*types.DatabaseServiceV1) - if !ok { - return nil, trace.BadParameter("unexpected DatabaseService type: %T", db) - } - ret.Services[i] = dbServiceV1 - } - return ret, nil -} - // UpsertDatabaseService registers a new database service. -func (g *GRPCServer) UpsertDatabaseService(ctx context.Context, req *proto.UpsertDatabaseServiceRequest) (*emptypb.Empty, error) { +func (g *GRPCServer) UpsertDatabaseService(ctx context.Context, req *proto.UpsertDatabaseServiceRequest) (*types.KeepAlive, error) { auth, err := g.authenticate(ctx) if err != nil { return nil, trace.Wrap(err) } - err = auth.UpsertDatabaseService(ctx, req.Service) + keepAlive, err := auth.UpsertDatabaseService(ctx, req.Service) if err != nil { return nil, trace.Wrap(err) } - return &emptypb.Empty{}, nil + return keepAlive, nil } // DeleteDatabaseService removes the specified DatabaseService. @@ -3900,6 +3875,13 @@ func (g *GRPCServer) ListResources(ctx context.Context, req *proto.ListResources } protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_DatabaseServer{DatabaseServer: database}} + case types.KindDatabaseService: + databaseService, ok := resource.(*types.DatabaseServiceV1) + if !ok { + return nil, trace.BadParameter("database service has invalid type %T", resource) + } + + protoResource = &proto.PaginatedResource{Resource: &proto.PaginatedResource_DatabaseService{DatabaseService: databaseService}} case types.KindAppServer: app, ok := resource.(*types.AppServerV3) if !ok { diff --git a/lib/auth/grpcserver_test.go b/lib/auth/grpcserver_test.go index 8c5ea61a465..916ceccfcf1 100644 --- a/lib/auth/grpcserver_test.go +++ b/lib/auth/grpcserver_test.go @@ -1883,6 +1883,133 @@ func TestDatabasesCRUD(t *testing.T) { require.Len(t, out, 0) } +// TestDatabaseServicesCRUD tests DatabaseService resource operations. +func TestDatabaseServicesCRUD(t *testing.T) { + t.Parallel() + ctx := context.Background() + srv := newTestTLSServer(t) + + clt, err := srv.NewClient(TestAdmin()) + require.NoError(t, err) + + // Create two DatabaseServices. + db1, err := types.NewDatabaseServiceV1(types.Metadata{ + Name: "db1", + Labels: map[string]string{types.OriginLabel: types.OriginDynamic}, + }, types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{ + "env": []string{"prod"}, + }, + }, + }, + }) + require.NoError(t, err) + + db2, err := types.NewDatabaseServiceV1(types.Metadata{ + Name: "db2", + Labels: map[string]string{types.OriginLabel: types.OriginDynamic}, + }, types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{ + "env": []string{"stg"}, + }, + }, + }, + }) + require.NoError(t, err) + + // Initially we expect no DatabaseServices. + listServicesResp, err := clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: apidefaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + out, err := types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Empty(t, out) + + // Create both DatabaseServices. + _, err = clt.UpsertDatabaseService(ctx, db1) + require.NoError(t, err) + _, err = clt.UpsertDatabaseService(ctx, db2) + require.NoError(t, err) + + // Fetch all DatabaseServices. + listServicesResp, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: apidefaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + out, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Empty(t, cmp.Diff([]types.DatabaseService{db1, db2}, out, + cmpopts.IgnoreFields(types.Metadata{}, "ID"), + )) + + // Update a DatabaseService. + db1.Spec.ResourceMatchers[0] = &types.DatabaseResourceMatcher{ + Labels: &types.Labels{ + "env": []string{"notprod"}, + }, + } + + _, err = clt.UpsertDatabaseService(ctx, db1) + require.NoError(t, err) + listServicesResp, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: apidefaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + out, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Empty(t, cmp.Diff([]types.DatabaseService{db1, db2}, out, + cmpopts.IgnoreFields(types.Metadata{}, "ID"), + )) + + // Delete a DatabaseService. + err = clt.DeleteDatabaseService(ctx, db1.GetName()) + require.NoError(t, err) + listServicesResp, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: apidefaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + out, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Empty(t, cmp.Diff([]types.DatabaseService{db2}, out, + cmpopts.IgnoreFields(types.Metadata{}, "ID"), + )) + + // Try to delete a DatabaseService that doesn't exist. + err = clt.DeleteDatabaseService(ctx, "doesnotexist") + require.IsType(t, trace.NotFound(""), err) + + // Delete all DatabaseServices. + err = clt.DeleteAllDatabaseServices(ctx) + require.NoError(t, err) + listServicesResp, err = clt.ListResources(ctx, + proto.ListResourcesRequest{ + ResourceType: types.KindDatabaseService, + Limit: apidefaults.DefaultChunkSize, + }, + ) + require.NoError(t, err) + out, err = types.ResourcesWithLabels(listServicesResp.Resources).AsDatabaseServices() + require.NoError(t, err) + require.Empty(t, out) +} + func TestListResources(t *testing.T) { t.Parallel() ctx := context.Background() diff --git a/lib/auth/init.go b/lib/auth/init.go index cee7fd32c79..a2a51f32b42 100644 --- a/lib/auth/init.go +++ b/lib/auth/init.go @@ -135,6 +135,9 @@ type InitConfig struct { // Databases is a service that manages database resources. Databases services.Databases + // DatabaseServices is a service that manages DatabaseService resources. + DatabaseServices services.DatabaseServices + // Status is a service that manages cluster status info. Status services.StatusInternal diff --git a/lib/services/databaseservice.go b/lib/services/databaseservice.go new file mode 100644 index 00000000000..3a64c64c52c --- /dev/null +++ b/lib/services/databaseservice.go @@ -0,0 +1,93 @@ +/* +Copyright 2022 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package services + +import ( + "context" + + "github.com/gravitational/trace" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/utils" +) + +// DatabaseServices defines an interface for managing DatabaseService resources. +type DatabaseServices interface { + // DeleteDatabasService removes the specified DatabaseService resource. + DeleteDatabaseService(ctx context.Context, name string) error + // DeleteAllDatabaseServices removes all DatabaseService resources. + DeleteAllDatabaseServices(context.Context) error +} + +// MarshalDatabaseService marshals the DatabaseService resource to JSON. +func MarshalDatabaseService(databaseService types.DatabaseService, opts ...MarshalOption) ([]byte, error) { + if err := databaseService.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + + switch databaseService := databaseService.(type) { + case *types.DatabaseServiceV1: + if !cfg.PreserveResourceID { + // avoid modifying the original object + // to prevent unexpected data races + copy := *databaseService + copy.SetResourceID(0) + databaseService = © + } + return utils.FastMarshal(databaseService) + default: + return nil, trace.BadParameter("unrecognized DatabaseService version %T", databaseService) + } +} + +// UnmarshalDatabaseService unmarshals the DatabaseService resource from JSON. +func UnmarshalDatabaseService(data []byte, opts ...MarshalOption) (types.DatabaseService, error) { + if len(data) == 0 { + return nil, trace.BadParameter("missing DatabaseService data") + } + cfg, err := CollectOptions(opts) + if err != nil { + return nil, trace.Wrap(err) + } + var h types.ResourceHeader + if err := utils.FastUnmarshal(data, &h); err != nil { + return nil, trace.Wrap(err) + } + switch h.Version { + case types.V1: + var s types.DatabaseServiceV1 + if err := utils.FastUnmarshal(data, &s); err != nil { + return nil, trace.BadParameter(err.Error()) + } + if err := s.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + if cfg.ID != 0 { + s.SetResourceID(cfg.ID) + } + if !cfg.Expires.IsZero() { + s.SetExpiry(cfg.Expires) + } + return &s, nil + } + return nil, trace.BadParameter("database service resource version %q is not supported", h.Version) +} diff --git a/lib/services/databaseservice_test.go b/lib/services/databaseservice_test.go new file mode 100644 index 00000000000..c9276edcf68 --- /dev/null +++ b/lib/services/databaseservice_test.go @@ -0,0 +1,80 @@ +/* +Copyright 2022 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package services + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/utils" +) + +// TestDatabaseServiceUnmarshal verifies that DatabaseService resource can be unmarshaled. +func TestDatabaseServiceUnmarshal(t *testing.T) { + expected, err := types.NewDatabaseServiceV1(types.Metadata{ + Name: "test-database-service", + }, types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{ + "env": []string{"prod", "stg"}, + }, + }, + }, + }) + require.NoError(t, err) + data, err := utils.ToJSON([]byte(dbServiceYAML)) + require.NoError(t, err) + actual, err := UnmarshalDatabaseService(data) + require.NoError(t, err) + + require.Equal(t, expected, actual) +} + +// TestDatabaseServicenMarshal verifies a marshaled kubernetes resource resource can be unmarshaled back. +func TestDatabaseServiceMarshal(t *testing.T) { + expected, err := types.NewDatabaseServiceV1(types.Metadata{ + Name: "test-database-service", + }, types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{ + "env": []string{"prod"}, + }, + }, + }, + }) + require.NoError(t, err) + data, err := MarshalDatabaseService(expected) + require.NoError(t, err) + actual, err := UnmarshalDatabaseService(data) + require.NoError(t, err) + require.Equal(t, expected, actual) +} + +var dbServiceYAML = `--- +kind: database_service +version: v1 +metadata: + name: test-database-service +spec: + resources: + - labels: + env: [prod, stg] +` diff --git a/lib/services/local/databaseservice.go b/lib/services/local/databaseservice.go new file mode 100644 index 00000000000..a0ebf8d9460 --- /dev/null +++ b/lib/services/local/databaseservice.go @@ -0,0 +1,61 @@ +/* +Copyright 2022 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package local + +import ( + "context" + + "github.com/gravitational/trace" + + "github.com/gravitational/teleport/lib/backend" +) + +// DatabaseServicesService manages DatabaseService resources in the backend. +type DatabaseServicesService struct { + backend.Backend +} + +// NewDatabaseServicesService creates a new DatabaseServicesService. +func NewDatabaseServicesService(backend backend.Backend) *DatabaseServicesService { + return &DatabaseServicesService{Backend: backend} +} + +// DeleteDatabaseService removes the specified DatabaseService resource. +func (s *DatabaseServicesService) DeleteDatabaseService(ctx context.Context, name string) error { + err := s.Delete(ctx, backend.Key(databaseServicePrefix, name)) + if err != nil { + if trace.IsNotFound(err) { + return trace.NotFound("databaseService %q doesn't exist", name) + } + return trace.Wrap(err) + } + return nil +} + +// DeleteAllDatabaseServices removes all DatabaseService resources. +func (s *DatabaseServicesService) DeleteAllDatabaseServices(ctx context.Context) error { + startKey := backend.Key(databaseServicePrefix) + err := s.DeleteRange(ctx, startKey, backend.RangeEnd(startKey)) + if err != nil { + return trace.Wrap(err) + } + return nil +} + +const ( + databaseServicePrefix = "databaseService" +) diff --git a/lib/services/local/databaseservice_test.go b/lib/services/local/databaseservice_test.go new file mode 100644 index 00000000000..850b3a62911 --- /dev/null +++ b/lib/services/local/databaseservice_test.go @@ -0,0 +1,94 @@ +/* +Copyright 2022 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package local + +import ( + "context" + "testing" + + "github.com/jonboulle/clockwork" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/backend/memory" +) + +func TestDatabaseServices(t *testing.T) { + t.Parallel() + + ctx := context.Background() + clock := clockwork.NewFakeClock() + + bk, err := memory.New(memory.Config{ + Context: ctx, + Clock: clock, + }) + require.NoError(t, err) + + service := NewDatabaseServicesService(bk) + presence := NewPresenceService(bk) + + // Upsert some DatabaseServices. + ds1, err := types.NewDatabaseServiceV1( + types.Metadata{Name: "ds1"}, + types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{ + "env": []string{"ds1"}, + }, + }, + }, + }, + ) + require.NoError(t, err) + _, err = presence.UpsertDatabaseService(ctx, ds1) + require.NoError(t, err) + + ds2, err := types.NewDatabaseServiceV1( + types.Metadata{Name: "ds2"}, + types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{ + "env": []string{"ds2"}, + }, + }, + }, + }, + ) + require.NoError(t, err) + _, err = presence.UpsertDatabaseService(ctx, ds2) + require.NoError(t, err) + + // Replace the DS1 + initialResourceMatchers := ds1.GetResourceMatchers() + initialResourceMatchers[0] = &types.DatabaseResourceMatcher{ + Labels: &types.Labels{"env": []string{"ds1", "ds2"}}, + } + ds1.Spec.ResourceMatchers = initialResourceMatchers + _, err = presence.UpsertDatabaseService(ctx, ds1) + require.NoError(t, err) + + // Remove one of the DatabaseServices + err = service.DeleteDatabaseService(ctx, ds2.GetName()) + require.NoError(t, err) + + // Remove all of the DatabaseServices + err = service.DeleteAllDatabaseServices(ctx) + require.NoError(t, err) +} diff --git a/lib/services/local/presence.go b/lib/services/local/presence.go index cb483fd27b3..892721d51f5 100644 --- a/lib/services/local/presence.go +++ b/lib/services/local/presence.go @@ -1508,6 +1508,9 @@ func (s *PresenceService) listResources(ctx context.Context, req proto.ListResou case types.KindDatabaseServer: keyPrefix = []string{dbServersPrefix, req.Namespace} unmarshalItemFunc = backendItemToDatabaseServer + case types.KindDatabaseService: + keyPrefix = []string{databaseServicePrefix} + unmarshalItemFunc = backendItemToDatabaseService case types.KindAppServer: keyPrefix = []string{appServersPrefix, req.Namespace} unmarshalItemFunc = backendItemToApplicationServer @@ -1577,6 +1580,38 @@ func (s *PresenceService) listResources(ctx context.Context, req proto.ListResou }, nil } +// UpsertDatabaseService creates or updates (by name) a DatabaseService resource. +func (s *PresenceService) UpsertDatabaseService(ctx context.Context, service types.DatabaseService) (*types.KeepAlive, error) { + if err := service.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + value, err := services.MarshalDatabaseService(service) + if err != nil { + return nil, trace.Wrap(err) + } + item := backend.Item{ + Key: backend.Key(databaseServicePrefix, service.GetName()), + Value: value, + Expires: service.Expiry(), + ID: service.GetResourceID(), + } + lease, err := s.Put(ctx, item) + if err != nil { + return nil, trace.Wrap(err) + } + if service.Expiry().IsZero() { + return &types.KeepAlive{}, nil + } + return &types.KeepAlive{ + Type: types.KeepAlive_DATABASE, + LeaseID: lease.ID, + Namespace: apidefaults.Namespace, + Name: service.GetName(), + HostID: service.GetName(), + Expires: service.Expiry(), + }, nil +} + // listResourcesWithSort supports sorting by falling back to retrieving all resources // with GetXXXs, filter, and then fake pagination. func (s *PresenceService) listResourcesWithSort(ctx context.Context, req proto.ListResourcesRequest) (*types.ListResourcesResponse, error) { @@ -1727,6 +1762,16 @@ func backendItemToDatabaseServer(item backend.Item) (types.ResourceWithLabels, e ) } +// backendItemToDatabaseService unmarshals `backend.Item` into a +// `types.DatabaseService`, returning it as a `types.ResourceWithLabels`. +func backendItemToDatabaseService(item backend.Item) (types.ResourceWithLabels, error) { + return services.UnmarshalDatabaseService( + item.Value, + services.WithResourceID(item.ID), + services.WithExpires(item.Expires), + ) +} + // backendItemToApplicationServer unmarshals `backend.Item` into a // `types.AppServer`, returning it as a `types.ResourceWithLabels`. func backendItemToApplicationServer(item backend.Item) (types.ResourceWithLabels, error) { diff --git a/lib/services/matchers.go b/lib/services/matchers.go index 0f5096f9cc2..f604b93a929 100644 --- a/lib/services/matchers.go +++ b/lib/services/matchers.go @@ -130,7 +130,7 @@ func MatchResourceByFilters(resource types.ResourceWithLabels, filter MatchResou // the user is wanting to filter the contained resource ie. KubeClusters, Application, and Database. resourceKey := ResourceSeenKey{} switch filter.ResourceKind { - case types.KindNode, types.KindWindowsDesktop, types.KindWindowsDesktopService, types.KindKubernetesCluster: + case types.KindNode, types.KindWindowsDesktop, types.KindWindowsDesktopService, types.KindKubernetesCluster, types.KindDatabaseService: specResource = resource resourceKey.name = specResource.GetName() diff --git a/lib/services/presence.go b/lib/services/presence.go index f30de7c1632..b4253e7bb45 100644 --- a/lib/services/presence.go +++ b/lib/services/presence.go @@ -233,4 +233,7 @@ type Presence interface { // ListResoures returns a paginated list of resources. ListResources(ctx context.Context, req proto.ListResourcesRequest) (*types.ListResourcesResponse, error) + + // UpsertDatabaseService updates an existing DatabaseService resource. + UpsertDatabaseService(context.Context, types.DatabaseService) (*types.KeepAlive, error) } diff --git a/lib/services/role.go b/lib/services/role.go index aead071a1a2..cb93e074c1f 100644 --- a/lib/services/role.go +++ b/lib/services/role.go @@ -2101,10 +2101,16 @@ func (set RoleSet) checkAccess(r AccessCheckable, mfa AccessMFAParams, matchers additionalDeniedMessage := "" var getRoleLabels func(types.Role, types.RoleConditionType) types.Labels + resourceHasLabels := true + getEmptyLabels := func(r types.Role, rct types.RoleConditionType) types.Labels { return types.Labels{} } + switch r.GetKind() { case types.KindDatabase: getRoleLabels = types.Role.GetDatabaseLabels additionalDeniedMessage = "Confirm database user and name." + case types.KindDatabaseService: + resourceHasLabels = false + getRoleLabels = getEmptyLabels case types.KindApp: getRoleLabels = types.Role.GetAppLabels case types.KindNode: @@ -2171,7 +2177,9 @@ func (set RoleSet) checkAccess(r AccessCheckable, mfa AccessMFAParams, matchers if err != nil { return trace.Wrap(err) } - if !matchLabels { + + // Deny only if the resourceHasLabels but there was no match. + if resourceHasLabels && !matchLabels { if isDebugEnabled { errs = append(errs, trace.AccessDenied("role=%v, match(label=%v)", role.GetName(), labelsMessage)) diff --git a/lib/services/services.go b/lib/services/services.go index 52ce82a719e..95cc5521240 100644 --- a/lib/services/services.go +++ b/lib/services/services.go @@ -31,6 +31,7 @@ type Services interface { Restrictions Apps Databases + DatabaseServices Kubernetes AppSession SnowflakeSession diff --git a/lib/srv/heartbeat_test.go b/lib/srv/heartbeat_test.go index d2b1d51e495..c6cbeca18a8 100644 --- a/lib/srv/heartbeat_test.go +++ b/lib/srv/heartbeat_test.go @@ -405,6 +405,9 @@ func (f *fakeAnnouncer) UpdateWindowsDesktop(ctx context.Context, s types.Window return f.err } +func (f *fakeAnnouncer) UpsertDatabaseService(ctx context.Context, s types.DatabaseService) (*types.KeepAlive, error) { + return nil, trace.NotImplemented("not yet implemented") +} func (f *fakeAnnouncer) NewKeepAliver(ctx context.Context) (types.KeepAliver, error) { return f, f.err } diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index 9ce8f1a355e..169b0486594 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -596,6 +596,9 @@ func (h *Handler) bindDefaultEndpoints(challengeLimiter *limiter.RateLimiter) { h.GET("/webapi/sites/:site/databases/:database", h.WithClusterAuth(h.clusterDatabaseGet)) h.GET("/webapi/sites/:site/databases/:database/iam/policy", h.WithClusterAuth(h.handleDatabaseGetIAMPolicy)) + // DatabaseService handlers + h.GET("/webapi/sites/:site/databaseservices", h.WithClusterAuth(h.clusterDatabaseServicesList)) + // Kube access handlers. h.GET("/webapi/sites/:site/kubernetes", h.WithClusterAuth(h.clusterKubesGet)) diff --git a/lib/web/databases_test.go b/lib/web/databases_test.go index b91bdf246a1..ceb15d05025 100644 --- a/lib/web/databases_test.go +++ b/lib/web/databases_test.go @@ -22,13 +22,16 @@ import ( "net/http" "testing" + "github.com/google/uuid" "github.com/gravitational/roundtrip" "github.com/gravitational/trace" "github.com/stretchr/testify/require" "github.com/gravitational/teleport/api/types" awslib "github.com/gravitational/teleport/lib/cloud/aws" + "github.com/gravitational/teleport/lib/services" dbiam "github.com/gravitational/teleport/lib/srv/db/common/iam" + "github.com/gravitational/teleport/lib/web/ui" ) func TestCreateDatabaseRequestParameters(t *testing.T) { @@ -264,6 +267,73 @@ func TestHandleDatabasesGetIAMPolicy(t *testing.T) { } } +type listDatabaseServicesResp struct { + Items []ui.DatabaseService `json:"items"` +} + +func TestHandleDatabaseServicesGet(t *testing.T) { + t.Parallel() + + ctx := context.Background() + user := "user" + roleRODatabaseServices, err := types.NewRole(services.RoleNameForUser(user), types.RoleSpecV5{ + Allow: types.RoleConditions{ + Rules: []types.Rule{ + types.NewRule(types.KindDatabaseService, + []string{types.VerbRead, types.VerbList}), + }, + }, + }) + require.NoError(t, err) + + env := newWebPack(t, 1) + proxy := env.proxies[0] + pack := proxy.authPack(t, user, []types.Role{roleRODatabaseServices}) + + var listDBServicesResp listDatabaseServicesResp + + // No DatabaseServices exist + resp, err := pack.clt.Get(ctx, pack.clt.Endpoint("webapi", "sites", env.server.ClusterName(), "databaseservices"), nil) + require.NoError(t, err) + require.Equal(t, http.StatusOK, resp.Code()) + require.NoError(t, json.Unmarshal(resp.Bytes(), &listDBServicesResp)) + + require.Empty(t, listDBServicesResp.Items) + + // Adding one DatabaseService + dbServiceName := uuid.NewString() + dbService001, err := types.NewDatabaseServiceV1(types.Metadata{ + Name: dbServiceName, + }, types.DatabaseServiceSpecV1{ + ResourceMatchers: []*types.DatabaseResourceMatcher{ + { + Labels: &types.Labels{"env": []string{"prod"}}, + }, + }, + }) + require.NoError(t, err) + + _, err = env.server.Auth().UpsertDatabaseService(ctx, dbService001) + require.NoError(t, err) + + // The API returns one DatabaseService. + resp, err = pack.clt.Get(ctx, pack.clt.Endpoint("webapi", "sites", env.server.ClusterName(), "databaseservices"), nil) + require.NoError(t, err) + require.Equal(t, http.StatusOK, resp.Code()) + require.NoError(t, json.Unmarshal(resp.Bytes(), &listDBServicesResp)) + + dbServices := listDBServicesResp.Items + require.Len(t, dbServices, 1) + respDBService := dbServices[0] + + require.Equal(t, respDBService.Name, dbServiceName) + + require.Len(t, respDBService.ResourceMatchers, 1) + respResourceMatcher := respDBService.ResourceMatchers[0] + + require.Equal(t, respResourceMatcher.Labels, &types.Labels{"env": []string{"prod"}}) +} + func mustCreateDatabaseServer(t *testing.T, db *types.DatabaseV3) types.DatabaseServer { t.Helper() diff --git a/lib/web/servers.go b/lib/web/servers.go index ebfca40c77d..239b839b205 100644 --- a/lib/web/servers.go +++ b/lib/web/servers.go @@ -125,6 +125,30 @@ func (h *Handler) clusterDatabaseGet(w http.ResponseWriter, r *http.Request, p h return ui.MakeDatabase(database, dbUsers, dbNames), nil } +// clusterDatabaseServicesList returns a list of DatabaseServices (database agents) in a form the UI can present. +func (h *Handler) clusterDatabaseServicesList(w http.ResponseWriter, r *http.Request, p httprouter.Params, ctx *SessionContext, site reversetunnel.RemoteSite) (interface{}, error) { + clt, err := ctx.GetUserClient(r.Context(), site) + if err != nil { + return nil, trace.Wrap(err) + } + + resp, err := listResources(clt, r, types.KindDatabaseService) + if err != nil { + return nil, trace.Wrap(err) + } + + servers, err := types.ResourcesWithLabels(resp.Resources).AsDatabaseServices() + if err != nil { + return nil, trace.Wrap(err) + } + + return listResourcesGetResponse{ + Items: ui.MakeDatabaseServices(servers), + StartKey: resp.NextKey, + TotalCount: resp.TotalCount, + }, nil +} + // clusterDesktopsGet returns a list of desktops in a form the UI can present. func (h *Handler) clusterDesktopsGet(w http.ResponseWriter, r *http.Request, p httprouter.Params, sctx *SessionContext, site reversetunnel.RemoteSite) (interface{}, error) { clt, err := sctx.GetUserClient(r.Context(), site) diff --git a/lib/web/ui/server.go b/lib/web/ui/server.go index 26361542ee3..2a66e1aadd2 100644 --- a/lib/web/ui/server.go +++ b/lib/web/ui/server.go @@ -231,6 +231,33 @@ func MakeDatabases(databases []types.Database) []Database { return uiServers } +// DatabaseService describes a DatabaseService resource. +type DatabaseService struct { + // Name is the name of the database. + Name string `json:"name"` + // ResourceMatchers is a list of resource matchers of the DatabaseService. + ResourceMatchers []*types.DatabaseResourceMatcher `json:"resource_matchers"` +} + +// MakeDatabaseService creates DatabaseService resource. +func MakeDatabaseService(databaseService types.DatabaseService) DatabaseService { + return DatabaseService{ + Name: databaseService.GetName(), + ResourceMatchers: databaseService.GetResourceMatchers(), + } +} + +// MakeDatabaseServices creates database service objects. +func MakeDatabaseServices(databaseServices []types.DatabaseService) []DatabaseService { + dbServices := make([]DatabaseService, len(databaseServices)) + for i, database := range databaseServices { + db := MakeDatabaseService(database) + dbServices[i] = db + } + + return dbServices +} + // Desktop describes a desktop to pass to the ui. type Desktop struct { // OS is the os of this desktop. Should be one of constants.WindowsOS, constants.LinuxOS, or constants.DarwinOS.