1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-10 18:10:49 +09:00

fix set creation, add BlockGetDataviewAvailableRelations

This commit is contained in:
requilence 2020-10-05 19:20:00 +02:00
parent 8fc881e3a0
commit d5b737144d
No known key found for this signature in database
GPG key ID: F07A7D55A2684852
28 changed files with 2732 additions and 1054 deletions

View file

@ -24,135 +24,137 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
// 2034 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x9a, 0xcf, 0x6f, 0xdc, 0xc6,
// 2069 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9a, 0xcf, 0x6f, 0xdc, 0xc6,
0x15, 0xc7, 0xbd, 0x40, 0x51, 0xa7, 0x13, 0xd7, 0x4d, 0xd8, 0xc6, 0x4d, 0x54, 0x54, 0xfe, 0x11,
0x3b, 0xb6, 0x65, 0x8b, 0x72, 0x65, 0x34, 0x3d, 0xf5, 0x20, 0xad, 0x6c, 0x45, 0x88, 0x6c, 0xab,
0xbb, 0xb2, 0x05, 0x04, 0x2d, 0x5a, 0x8a, 0x7c, 0xda, 0x9d, 0x2c, 0x77, 0x86, 0x21, 0x67, 0x57,
0x16, 0xd0, 0x5e, 0x0a, 0xb4, 0xe7, 0x00, 0xfd, 0x3f, 0xfa, 0x77, 0xf4, 0x98, 0x63, 0x8f, 0x85,
0xfd, 0x8f, 0x14, 0x33, 0x7c, 0x1c, 0x92, 0xc3, 0x99, 0x59, 0xea, 0x60, 0x1b, 0xe6, 0xfb, 0xbc,
0xef, 0x7b, 0xf3, 0xe3, 0x0d, 0x67, 0x66, 0x49, 0x6e, 0x66, 0xa7, 0x5b, 0x59, 0xce, 0x05, 0x2f,
0xb6, 0x0a, 0xc8, 0x97, 0x34, 0x86, 0xea, 0xdf, 0x50, 0x3d, 0x0e, 0xae, 0x46, 0xec, 0x42, 0x5c,
0x64, 0xb0, 0xf6, 0x69, 0x4d, 0xc6, 0x7c, 0x3e, 0x8f, 0x58, 0x52, 0x94, 0xc8, 0xda, 0x8d, 0xda,
0x02, 0x4b, 0x60, 0x02, 0x9f, 0x6f, 0xff, 0xfb, 0x6b, 0x72, 0x7d, 0x98, 0x52, 0x60, 0x62, 0x88,
0x0e, 0xc1, 0x09, 0xb9, 0x76, 0x12, 0xa5, 0x29, 0x88, 0x61, 0x0e, 0x91, 0x80, 0xe0, 0x4e, 0x88,
0xf2, 0xe1, 0x28, 0x8b, 0xc3, 0xd2, 0x14, 0x96, 0xb6, 0x70, 0x04, 0xdf, 0x2d, 0xa0, 0x10, 0x6b,
0x9f, 0x7b, 0x99, 0x22, 0xe3, 0xac, 0x80, 0xe0, 0x1b, 0xf2, 0xd3, 0xd2, 0x32, 0x82, 0x98, 0x2f,
0x21, 0x0f, 0xac, 0x5e, 0x68, 0xd4, 0xd2, 0x77, 0xfd, 0x10, 0x6a, 0xff, 0x89, 0x5c, 0xdf, 0x89,
0x63, 0xbe, 0x60, 0x5a, 0xbc, 0xed, 0x87, 0xc6, 0x8e, 0xfa, 0xbd, 0x15, 0x54, 0x9d, 0x3a, 0xda,
0xb0, 0x53, 0x3e, 0xb7, 0xfa, 0x19, 0xbd, 0x72, 0xd7, 0x0f, 0x75, 0xb4, 0xc7, 0x90, 0x42, 0x2c,
0x1c, 0xda, 0xa5, 0x71, 0x85, 0xb6, 0x86, 0x50, 0xfb, 0x98, 0x7c, 0x58, 0x69, 0x0b, 0x9e, 0x05,
0xb7, 0xed, 0x4e, 0x82, 0x67, 0x5a, 0xf7, 0x8e, 0x0f, 0x41, 0xd5, 0x98, 0x5c, 0x3b, 0x98, 0x47,
0x13, 0xd8, 0x07, 0xb1, 0x9b, 0xf2, 0xd3, 0xe0, 0x41, 0xcb, 0xe7, 0x20, 0x3b, 0x2b, 0x42, 0x65,
0x0f, 0xf7, 0x41, 0x84, 0x92, 0xd0, 0xea, 0x0f, 0x7b, 0x90, 0x18, 0xe4, 0x0f, 0x84, 0xbc, 0x81,
0xbc, 0xa0, 0x9c, 0xed, 0x83, 0x08, 0x6e, 0xb5, 0x1c, 0xd1, 0xa0, 0xbc, 0x2a, 0xe9, 0xdb, 0x1e,
0x02, 0x25, 0xbf, 0x22, 0x57, 0x0f, 0xf9, 0x64, 0x0c, 0x2c, 0x09, 0x7e, 0xdd, 0xa2, 0x0f, 0xf9,
0x24, 0x94, 0x8f, 0xb5, 0xd8, 0xba, 0xcb, 0x8c, 0x4a, 0x2f, 0xc9, 0x4f, 0x86, 0x9c, 0x9d, 0xd1,
0x89, 0xcc, 0xed, 0x66, 0x0b, 0x2e, 0x9f, 0xb7, 0x52, 0xbb, 0xe5, 0x06, 0x50, 0xef, 0x80, 0x7c,
0x30, 0x9e, 0x2e, 0x44, 0xc2, 0xcf, 0x99, 0x91, 0x5a, 0xf5, 0xd8, 0x91, 0x5a, 0xc3, 0x8c, 0x52,
0x67, 0xe4, 0xe3, 0x67, 0x6f, 0x05, 0xe4, 0x2c, 0x4a, 0xf7, 0x72, 0x9e, 0x3d, 0xa7, 0x29, 0x14,
0xc1, 0xfd, 0x96, 0x53, 0xd3, 0x1e, 0x2a, 0x40, 0xab, 0x3f, 0x58, 0x0d, 0x62, 0x9c, 0x94, 0xfc,
0xbc, 0x69, 0x1e, 0x72, 0x26, 0x80, 0x89, 0xe0, 0xa1, 0x5b, 0x00, 0x11, 0x1d, 0x6b, 0xa3, 0x0f,
0x8a, 0xd1, 0x46, 0xe4, 0xc3, 0x43, 0xca, 0x66, 0x47, 0x39, 0x2c, 0x29, 0x9c, 0x1b, 0xd3, 0xa1,
0x61, 0x71, 0x4c, 0x87, 0x36, 0x81, 0x9a, 0xaf, 0x08, 0x79, 0x9d, 0xa5, 0x3c, 0x4a, 0x64, 0xcb,
0x8c, 0x51, 0xac, 0x0d, 0x8e, 0x51, 0x6c, 0x01, 0x75, 0xb5, 0xed, 0xa6, 0x3c, 0x9e, 0x95, 0x36,
0xa3, 0xda, 0x94, 0x05, 0xdd, 0x1c, 0xd5, 0x66, 0x20, 0xa8, 0x7a, 0x42, 0xae, 0x29, 0xc3, 0x08,
0xb2, 0x34, 0x8a, 0xcd, 0xf5, 0xb8, 0xf4, 0x41, 0x9b, 0x63, 0x3d, 0x36, 0x99, 0x7a, 0x12, 0x2b,
0xcb, 0xab, 0x0c, 0x98, 0xd1, 0xfc, 0xd2, 0x43, 0x1a, 0x1c, 0xcd, 0x6f, 0x01, 0xa8, 0xc7, 0xc9,
0x2f, 0xd4, 0xe3, 0x7d, 0x10, 0x47, 0x8b, 0xd3, 0x94, 0xc6, 0x27, 0x70, 0xfa, 0x7a, 0x74, 0x18,
0x6c, 0x58, 0x3c, 0x0d, 0x46, 0x47, 0x79, 0xd4, 0x8b, 0x35, 0x02, 0xca, 0x34, 0x76, 0x73, 0x88,
0x92, 0x38, 0x5f, 0xcc, 0x4f, 0x0b, 0x6b, 0x40, 0x83, 0xf1, 0x06, 0xec, 0xb2, 0xf5, 0x9c, 0x57,
0xc4, 0x18, 0x44, 0x33, 0xde, 0x43, 0x8b, 0x46, 0x1b, 0x71, 0xcc, 0x79, 0x07, 0x6a, 0x4c, 0x27,
0x7c, 0xe5, 0xd8, 0xa6, 0x93, 0xf1, 0xc2, 0xb9, 0xe3, 0x43, 0x50, 0xf5, 0x2f, 0xe4, 0x67, 0x0d,
0xd5, 0xa3, 0x68, 0x02, 0xc1, 0x3d, 0xa7, 0x9b, 0x34, 0x6b, 0xf5, 0x2f, 0x56, 0x61, 0x66, 0x19,
0xb0, 0x94, 0xb2, 0x99, 0xbd, 0x0c, 0x94, 0xc9, 0x5f, 0x06, 0x15, 0x52, 0xbf, 0x0f, 0xca, 0xbc,
0x53, 0x5e, 0x40, 0x60, 0x9b, 0x8d, 0xca, 0xe2, 0x58, 0x00, 0xda, 0x44, 0xfd, 0xe6, 0x55, 0xcf,
0xf7, 0xf8, 0x39, 0x53, 0x15, 0x6b, 0x2b, 0x9b, 0xca, 0xe8, 0x78, 0xf3, 0x76, 0x20, 0xd4, 0xfe,
0x23, 0x6a, 0xef, 0x83, 0x78, 0x11, 0xe5, 0xb3, 0x22, 0xb8, 0x6b, 0x9f, 0xd9, 0xa1, 0xb2, 0x3a,
0xf6, 0x23, 0x5d, 0xca, 0x28, 0xdd, 0xd7, 0x2c, 0xe1, 0xd6, 0xd2, 0x95, 0x06, 0x6f, 0xe9, 0x22,
0x60, 0xe8, 0x8d, 0xc0, 0xa1, 0x27, 0x0d, 0x5e, 0x3d, 0x04, 0x50, 0xef, 0xcf, 0xe4, 0x7a, 0x55,
0x28, 0xcf, 0x29, 0xa4, 0x49, 0x61, 0x9d, 0x63, 0x63, 0x10, 0x61, 0x69, 0xf6, 0xce, 0xb1, 0x16,
0x86, 0x01, 0xbe, 0xc3, 0xd2, 0x1f, 0xcb, 0xdd, 0x64, 0x21, 0x72, 0x1a, 0x0b, 0xca, 0x59, 0x11,
0x3c, 0x72, 0xf8, 0x37, 0x21, 0x1d, 0xec, 0x71, 0x3f, 0x18, 0x43, 0x9e, 0x62, 0xe1, 0x8c, 0x41,
0xec, 0x81, 0x88, 0x68, 0x5a, 0x04, 0xae, 0x6c, 0xd1, 0xae, 0x03, 0xdd, 0x5f, 0xc9, 0x61, 0x8c,
0x0b, 0x72, 0xa3, 0x8a, 0x21, 0x6b, 0xea, 0xa0, 0xd8, 0xc9, 0xe3, 0x29, 0x5d, 0x42, 0x12, 0x84,
0x0e, 0x09, 0x55, 0x7a, 0x35, 0xa7, 0x43, 0x6e, 0xf5, 0xe6, 0x8d, 0x62, 0x38, 0xa4, 0x85, 0x78,
0xc1, 0x97, 0x60, 0x2b, 0x06, 0x69, 0x0b, 0xa5, 0xd1, 0x57, 0x0c, 0x4d, 0x08, 0xb5, 0x17, 0xd8,
0xac, 0x4a, 0xfb, 0x98, 0xbf, 0x84, 0x73, 0xb5, 0xf4, 0x3c, 0xf6, 0xf8, 0x6b, 0x4a, 0x47, 0xdb,
0xec, 0x49, 0x63, 0xd8, 0xef, 0x07, 0xe4, 0xa6, 0x86, 0x86, 0x9c, 0x2d, 0x21, 0x17, 0xc3, 0x29,
0x4d, 0x93, 0x1c, 0xd8, 0x31, 0x97, 0x6c, 0x11, 0xfc, 0xd6, 0x21, 0x69, 0xc7, 0x75, 0x26, 0x5f,
0x5e, 0xd6, 0x0d, 0x53, 0x9a, 0x91, 0x40, 0xc3, 0x75, 0x71, 0x3c, 0x74, 0xa8, 0x59, 0x0a, 0x64,
0xa3, 0x0f, 0x8a, 0xc1, 0x96, 0xe4, 0x93, 0x66, 0xb0, 0x63, 0x78, 0x2b, 0xc6, 0xe2, 0x22, 0x85,
0x60, 0xd3, 0x23, 0x22, 0xa9, 0x50, 0x61, 0x3a, 0x66, 0xd8, 0x17, 0xc7, 0xb8, 0xb4, 0xd1, 0xc8,
0xbd, 0x45, 0x96, 0xd2, 0x58, 0xbe, 0xbf, 0x1e, 0x38, 0x54, 0x34, 0xe1, 0x38, 0x25, 0xd8, 0x49,
0x0c, 0xf5, 0xcf, 0x01, 0xf9, 0x55, 0xb3, 0x8d, 0xbb, 0x51, 0x3c, 0x9b, 0xe4, 0x7c, 0xc1, 0x92,
0x21, 0x4f, 0x79, 0x1e, 0x6c, 0x7b, 0x52, 0x37, 0x58, 0x1d, 0xfe, 0xe9, 0xa5, 0x7c, 0x30, 0x91,
0x29, 0xf9, 0xb8, 0x99, 0xc7, 0x4e, 0x4a, 0x27, 0xcc, 0xd9, 0x64, 0xa9, 0xa4, 0x88, 0x95, 0x4d,
0x6e, 0x92, 0x18, 0xa9, 0xc0, 0xa5, 0x0f, 0x23, 0xed, 0xd1, 0x65, 0x39, 0xa8, 0x8f, 0x3d, 0x12,
0x7b, 0x74, 0x69, 0x8c, 0xe9, 0x66, 0x4f, 0x1a, 0x83, 0xfe, 0x63, 0x40, 0xd6, 0x9a, 0x51, 0x8d,
0xd5, 0xc9, 0xd7, 0xcd, 0xae, 0x15, 0xea, 0xe9, 0xa5, 0x7c, 0x30, 0x0f, 0x86, 0x3b, 0x30, 0x35,
0xb5, 0x20, 0x05, 0xdc, 0xc1, 0xb8, 0xaa, 0xa2, 0x44, 0xc2, 0xd6, 0x22, 0xf2, 0xa8, 0x17, 0x8b,
0xf1, 0x26, 0xe4, 0xa3, 0x6a, 0x41, 0x96, 0x33, 0x5d, 0xfe, 0xb1, 0x8d, 0x6a, 0x5d, 0x0a, 0xea,
0x2f, 0xcf, 0xa8, 0x76, 0x48, 0x0c, 0xf4, 0x2d, 0xce, 0x1f, 0x0c, 0x54, 0xce, 0x5e, 0xaf, 0x7f,
0x7b, 0xd2, 0x6e, 0xf4, 0x41, 0xdd, 0xeb, 0x42, 0x19, 0x6f, 0xe5, 0xba, 0xd0, 0x8e, 0x19, 0xf6,
0xc5, 0xed, 0x33, 0x57, 0x22, 0x72, 0x5f, 0xe3, 0x9d, 0xb9, 0x4a, 0x47, 0x52, 0xbd, 0x66, 0x6e,
0x93, 0xb6, 0x77, 0x6c, 0x59, 0x2b, 0xde, 0x8e, 0x6d, 0x17, 0xca, 0x46, 0x1f, 0x14, 0x63, 0x65,
0xf5, 0xf9, 0x40, 0x75, 0xea, 0x14, 0xe2, 0x19, 0x24, 0xce, 0x4d, 0x49, 0xd9, 0x47, 0x25, 0xb4,
0x72, 0x53, 0x62, 0xc0, 0xc6, 0xae, 0x78, 0x9c, 0xa5, 0x54, 0x58, 0x77, 0xc5, 0xca, 0xe2, 0xdd,
0x15, 0x57, 0x84, 0x21, 0xf9, 0x02, 0xf2, 0x89, 0x7d, 0xa3, 0xad, 0x2c, 0x5e, 0xc9, 0x8a, 0x30,
0xb6, 0x97, 0x43, 0x9e, 0x5d, 0x58, 0xb7, 0x97, 0xd2, 0xe0, 0xdd, 0x5e, 0x22, 0x60, 0xa4, 0x78,
0x14, 0x15, 0xc2, 0x9e, 0xa2, 0xb2, 0x78, 0x53, 0xac, 0x08, 0x94, 0xfc, 0x9a, 0x7c, 0x50, 0xa6,
0xb8, 0x10, 0xc1, 0xba, 0x2d, 0x81, 0x45, 0xdd, 0x89, 0x37, 0x9d, 0x76, 0xe3, 0x04, 0xf4, 0xec,
0x6d, 0xc6, 0x73, 0x61, 0x3d, 0x01, 0x95, 0x26, 0xef, 0x09, 0x48, 0x23, 0xc6, 0xe9, 0xf3, 0x60,
0x2e, 0x9f, 0xcb, 0x59, 0xae, 0xee, 0x8b, 0x6c, 0x73, 0xb9, 0x8d, 0x78, 0xe7, 0x72, 0x07, 0xed,
0xae, 0x7c, 0xcf, 0x69, 0x0a, 0x2f, 0xa3, 0x39, 0x38, 0x57, 0x3e, 0x75, 0x0d, 0x22, 0x89, 0x95,
0x2b, 0x5f, 0x93, 0xec, 0x16, 0xa8, 0xba, 0x0b, 0x54, 0x91, 0x5c, 0xfe, 0xe5, 0x6d, 0x61, 0x2b,
0xd4, 0x46, 0x1f, 0x14, 0x63, 0xcd, 0x71, 0x67, 0x52, 0xc5, 0x3a, 0xa1, 0x89, 0x98, 0x06, 0x7e,
0x05, 0xc5, 0x78, 0xef, 0x0b, 0xba, 0x6c, 0xb7, 0x69, 0x6f, 0x68, 0x02, 0xdc, 0xdb, 0x34, 0x45,
0xf4, 0x6b, 0x5a, 0x0b, 0xed, 0x36, 0x4d, 0x99, 0xfd, 0x4d, 0x2b, 0x15, 0xfa, 0x35, 0xad, 0xcd,
0x62, 0xb8, 0xbf, 0x0f, 0xc8, 0x67, 0x55, 0xbc, 0x43, 0xca, 0x66, 0xc7, 0x51, 0x3e, 0x51, 0xd7,
0xc1, 0xf1, 0xec, 0x20, 0x09, 0x7e, 0xe3, 0x90, 0x92, 0x64, 0xd8, 0x42, 0x75, 0xf4, 0xed, 0xcb,
0xb8, 0x18, 0x2f, 0x14, 0xb9, 0x0d, 0x8a, 0x44, 0xb4, 0xa4, 0x70, 0xfe, 0x86, 0xc2, 0x79, 0xe0,
0x5a, 0x43, 0x2b, 0x28, 0x7c, 0xd3, 0xbc, 0x2a, 0xdc, 0xec, 0x49, 0x9b, 0x5b, 0xa1, 0x46, 0xd4,
0x9d, 0x58, 0xd0, 0x25, 0xa8, 0xd8, 0xdb, 0xab, 0xd4, 0x6a, 0xd6, 0xb7, 0x15, 0xf2, 0xf8, 0x60,
0x1e, 0x7f, 0x25, 0xbf, 0x6c, 0x5c, 0xe4, 0xb4, 0xda, 0xbf, 0xe5, 0xbe, 0x07, 0xb2, 0x77, 0xc1,
0x93, 0xfe, 0x0e, 0x46, 0xf4, 0x72, 0xd7, 0xb4, 0x32, 0x3a, 0x6e, 0xae, 0xfa, 0x47, 0x77, 0x38,
0x98, 0xb3, 0xaf, 0xdd, 0xf8, 0x11, 0xc4, 0x3c, 0xb7, 0xcf, 0x3e, 0xb3, 0x35, 0x25, 0xea, 0x9d,
0x7d, 0x4e, 0x17, 0x33, 0x89, 0xd7, 0x59, 0xd2, 0x2f, 0x89, 0x12, 0xbc, 0x54, 0x12, 0x4e, 0x17,
0x33, 0x89, 0xf6, 0x40, 0x78, 0x92, 0x30, 0x7b, 0xb6, 0x47, 0x12, 0x4e, 0x17, 0xe3, 0x54, 0xbb,
0xcb, 0xf9, 0x6c, 0x1e, 0xe5, 0xb3, 0xe7, 0x20, 0xe2, 0xa9, 0x75, 0xa1, 0xab, 0x88, 0x50, 0x21,
0xde, 0x85, 0xae, 0x83, 0x9a, 0x47, 0xbe, 0x0a, 0x28, 0xc7, 0x69, 0x87, 0x25, 0x65, 0xd8, 0x6d,
0x9f, 0x56, 0x9b, 0xf5, 0x16, 0xa0, 0xdb, 0x07, 0x13, 0xf9, 0x1b, 0xf9, 0x54, 0x91, 0xf2, 0x9d,
0xa6, 0x19, 0xbc, 0xfb, 0xb7, 0xd5, 0x80, 0x7a, 0xf7, 0x19, 0xa0, 0xb7, 0x06, 0x1c, 0x0e, 0x46,
0xa7, 0xbf, 0x3a, 0xfd, 0x16, 0x62, 0x71, 0x7c, 0x91, 0xc1, 0x4e, 0x92, 0x58, 0x3b, 0xbd, 0x26,
0xc2, 0x9d, 0x24, 0xf1, 0x76, 0x7a, 0x07, 0xc5, 0x60, 0x02, 0x8f, 0x0c, 0xb5, 0x7d, 0x04, 0x73,
0xbe, 0xb4, 0x9e, 0x3a, 0x9b, 0x22, 0x25, 0xe5, 0x5d, 0x6a, 0x6d, 0x34, 0x46, 0x05, 0xdc, 0x83,
0x8c, 0x20, 0x8d, 0x04, 0xe5, 0x4c, 0x36, 0xf0, 0xbe, 0xf5, 0xf2, 0xb1, 0xb4, 0xb7, 0x9a, 0xf7,
0x60, 0x35, 0x68, 0x1c, 0x2a, 0x2b, 0x6b, 0x59, 0x73, 0xd6, 0x77, 0xa7, 0x16, 0xc0, 0xba, 0xf4,
0xbd, 0x3b, 0xbb, 0xac, 0x23, 0x1e, 0x76, 0xa5, 0x37, 0x9e, 0xd1, 0x91, 0x8f, 0x7a, 0xb1, 0x18,
0x2f, 0x27, 0x9f, 0xbc, 0x8c, 0x96, 0x74, 0xa2, 0xac, 0xf2, 0xac, 0x54, 0x76, 0xb9, 0x79, 0x5b,
0x5a, 0x33, 0x61, 0x03, 0x72, 0x1c, 0x4c, 0x9c, 0x30, 0xc6, 0xfc, 0xd7, 0x80, 0xdc, 0xaa, 0x99,
0x7d, 0x40, 0xe2, 0x80, 0x9d, 0xf1, 0x13, 0x2a, 0xa6, 0xf2, 0xad, 0x5e, 0x04, 0x5f, 0xba, 0x24,
0xed, 0xbc, 0x4e, 0xe5, 0x77, 0x97, 0xf6, 0xab, 0x0f, 0x0e, 0xf2, 0x7c, 0x8f, 0xbf, 0xa8, 0xb4,
0x0f, 0x0e, 0xea, 0xe0, 0x6f, 0xfc, 0xa0, 0x72, 0xdb, 0x43, 0xd4, 0x67, 0x9b, 0xb1, 0xfe, 0x56,
0xa2, 0x7d, 0x32, 0x18, 0x77, 0x3f, 0x94, 0xb8, 0xe5, 0x06, 0x50, 0xef, 0x9c, 0xdc, 0x68, 0x16,
0x59, 0xaa, 0x07, 0xcd, 0x38, 0x9d, 0xb7, 0xca, 0x26, 0xad, 0x47, 0xc2, 0x71, 0x3a, 0xf7, 0xe0,
0x75, 0x89, 0x77, 0x03, 0xcb, 0x8a, 0x7b, 0xbc, 0x52, 0xa8, 0x59, 0x76, 0x9b, 0x3d, 0xe9, 0x7a,
0x11, 0xed, 0x46, 0xc5, 0x02, 0xdc, 0x5a, 0x29, 0x65, 0x54, 0xe1, 0x93, 0xfe, 0x0e, 0xfa, 0x53,
0x86, 0x8f, 0x6a, 0x0c, 0x07, 0xf1, 0x0b, 0x97, 0x8a, 0x31, 0x96, 0xf7, 0x57, 0x72, 0xf5, 0xc7,
0x29, 0xb5, 0x55, 0x0d, 0xe5, 0x5d, 0x97, 0x6b, 0x6b, 0x04, 0xef, 0xad, 0xa0, 0x50, 0xfe, 0xf7,
0xe4, 0x47, 0x47, 0x94, 0x4d, 0x82, 0xcf, 0xda, 0x93, 0x95, 0xb2, 0x89, 0x56, 0x5a, 0xb3, 0x99,
0xea, 0x8b, 0xff, 0xa3, 0x9c, 0xc7, 0x50, 0x14, 0xc3, 0x88, 0xc5, 0x90, 0x1a, 0x17, 0xff, 0x68,
0x0b, 0x4b, 0xa3, 0xe3, 0xe2, 0xbf, 0x03, 0xd5, 0x07, 0xe1, 0xaf, 0x68, 0x21, 0x78, 0x7e, 0x31,
0x9e, 0xf2, 0x73, 0xe3, 0x20, 0x8c, 0x96, 0x50, 0x9a, 0x1c, 0x07, 0x61, 0x03, 0xa9, 0x7f, 0xc2,
0x44, 0x03, 0x7e, 0xe6, 0x61, 0xfe, 0xbc, 0x54, 0xb9, 0x55, 0x66, 0xc7, 0xcf, 0x4b, 0x16, 0xac,
0xfe, 0x88, 0xa2, 0xca, 0x1b, 0x04, 0x9a, 0x8d, 0x37, 0x8f, 0x4e, 0x4d, 0x03, 0x8e, 0x37, 0x8f,
0x15, 0xc4, 0x38, 0x4f, 0xc8, 0x35, 0x39, 0x96, 0xc0, 0x9e, 0xa9, 0x8f, 0xb2, 0x82, 0xeb, 0xda,
0xf3, 0xd9, 0x3c, 0x13, 0x17, 0x6b, 0x8d, 0xff, 0x4b, 0xe0, 0xc9, 0x60, 0xf7, 0xf6, 0x7f, 0xde,
0xad, 0x0f, 0x7e, 0x78, 0xb7, 0x3e, 0xf8, 0xdf, 0xbb, 0xf5, 0xc1, 0xf7, 0xef, 0xd7, 0xaf, 0xfc,
0xf0, 0x7e, 0xfd, 0xca, 0x7f, 0xdf, 0xaf, 0x5f, 0xf9, 0xe6, 0x2a, 0x7e, 0x14, 0x76, 0xfa, 0x63,
0xf5, 0x69, 0xd7, 0xd3, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x8e, 0xb7, 0xb9, 0x38, 0x26,
0x00, 0x00,
0x3b, 0xb6, 0x65, 0x8b, 0x72, 0x65, 0x34, 0x05, 0x5a, 0xf4, 0x20, 0xad, 0x6c, 0x45, 0xa8, 0x6c,
0xab, 0xbb, 0xb2, 0x05, 0x04, 0x2d, 0x5a, 0x8a, 0x7c, 0xde, 0x9d, 0x2c, 0x97, 0xc3, 0x90, 0xb3,
0x2b, 0x0b, 0x68, 0x2f, 0x05, 0xda, 0x73, 0x80, 0x9e, 0xfb, 0xff, 0xf4, 0x54, 0xe4, 0xd8, 0x63,
0x61, 0xff, 0x23, 0xc5, 0xcc, 0x3c, 0x0e, 0xc9, 0xe1, 0xcc, 0x2c, 0x95, 0x83, 0x6d, 0x78, 0xdf,
0xe7, 0x7d, 0xdf, 0x9b, 0x1f, 0x6f, 0x38, 0x33, 0x24, 0xb9, 0x9e, 0x9f, 0x6e, 0xe5, 0x05, 0xe3,
0xac, 0xdc, 0x2a, 0xa1, 0x58, 0xd2, 0x18, 0xaa, 0x7f, 0x43, 0xf9, 0x73, 0x70, 0x39, 0xca, 0xce,
0xf9, 0x79, 0x0e, 0x6b, 0x1f, 0xd7, 0x64, 0xcc, 0xe6, 0xf3, 0x28, 0x4b, 0x4a, 0x85, 0xac, 0x5d,
0xab, 0x2d, 0xb0, 0x84, 0x8c, 0xe3, 0xef, 0xdb, 0xff, 0x39, 0x24, 0x57, 0x87, 0x29, 0x85, 0x8c,
0x0f, 0xd1, 0x21, 0x38, 0x21, 0x57, 0x4e, 0xa2, 0x34, 0x05, 0x3e, 0x2c, 0x20, 0xe2, 0x10, 0xdc,
0x0a, 0x51, 0x3e, 0x1c, 0xe5, 0x71, 0xa8, 0x4c, 0xa1, 0xb2, 0x85, 0x23, 0xf8, 0x7a, 0x01, 0x25,
0x5f, 0xfb, 0xd4, 0xcb, 0x94, 0x39, 0xcb, 0x4a, 0x08, 0xbe, 0x24, 0x3f, 0x54, 0x96, 0x11, 0xc4,
0x6c, 0x09, 0x45, 0x60, 0xf5, 0x42, 0xa3, 0x96, 0xbe, 0xed, 0x87, 0x50, 0xfb, 0x8f, 0xe4, 0xea,
0x4e, 0x1c, 0xb3, 0x45, 0xa6, 0xc5, 0xdb, 0x7e, 0x68, 0xec, 0xa8, 0xdf, 0x59, 0x41, 0xd5, 0xa9,
0xa3, 0x0d, 0x3b, 0xe5, 0x53, 0xab, 0x9f, 0xd1, 0x2b, 0xb7, 0xfd, 0x50, 0x47, 0x7b, 0x0c, 0x29,
0xc4, 0xdc, 0xa1, 0xad, 0x8c, 0x2b, 0xb4, 0x35, 0x84, 0xda, 0xc7, 0xe4, 0xfd, 0x4a, 0x9b, 0xb3,
0x3c, 0xb8, 0x69, 0x77, 0xe2, 0x2c, 0xd7, 0xba, 0xb7, 0x7c, 0x08, 0xaa, 0xc6, 0xe4, 0xca, 0xc1,
0x3c, 0x9a, 0xc0, 0x3e, 0xf0, 0xdd, 0x94, 0x9d, 0x06, 0xf7, 0x5a, 0x3e, 0x07, 0xf9, 0xeb, 0x32,
0x94, 0xf6, 0x70, 0x1f, 0x78, 0x28, 0x08, 0xad, 0x7e, 0xbf, 0x07, 0x89, 0x41, 0x7e, 0x4f, 0xc8,
0x2b, 0x28, 0x4a, 0xca, 0xb2, 0x7d, 0xe0, 0xc1, 0x8d, 0x96, 0x23, 0x1a, 0xa4, 0x57, 0x25, 0x7d,
0xd3, 0x43, 0xa0, 0xe4, 0x17, 0xe4, 0xf2, 0x21, 0x9b, 0x8c, 0x21, 0x4b, 0x82, 0x9f, 0xb7, 0xe8,
0x43, 0x36, 0x09, 0xc5, 0xcf, 0x5a, 0x6c, 0xdd, 0x65, 0x46, 0xa5, 0xe7, 0xe4, 0x07, 0x43, 0x96,
0xbd, 0xa6, 0x13, 0x91, 0xdb, 0xf5, 0x16, 0xac, 0x7e, 0x6f, 0xa5, 0x76, 0xc3, 0x0d, 0xa0, 0xde,
0x01, 0x79, 0x6f, 0x3c, 0x5d, 0xf0, 0x84, 0x9d, 0x65, 0x46, 0x6a, 0xd5, 0xcf, 0x8e, 0xd4, 0x1a,
0x66, 0x94, 0x7a, 0x4d, 0x3e, 0x7c, 0xf2, 0x86, 0x43, 0x91, 0x45, 0xe9, 0x5e, 0xc1, 0xf2, 0xa7,
0x34, 0x85, 0x32, 0xb8, 0xdb, 0x72, 0x6a, 0xda, 0x43, 0x09, 0x68, 0xf5, 0x7b, 0xab, 0x41, 0x8c,
0x93, 0x92, 0x1f, 0x37, 0xcd, 0x43, 0x96, 0x71, 0xc8, 0x78, 0x70, 0xdf, 0x2d, 0x80, 0x88, 0x8e,
0xb5, 0xd1, 0x07, 0xc5, 0x68, 0x23, 0xf2, 0xfe, 0x21, 0xcd, 0x66, 0x47, 0x05, 0x2c, 0x29, 0x9c,
0x19, 0xd3, 0xa1, 0x61, 0x71, 0x4c, 0x87, 0x36, 0x81, 0x9a, 0x2f, 0x08, 0x79, 0x99, 0xa7, 0x2c,
0x4a, 0x44, 0xcb, 0x8c, 0x51, 0xac, 0x0d, 0x8e, 0x51, 0x6c, 0x01, 0x75, 0xb5, 0xed, 0xa6, 0x2c,
0x9e, 0x29, 0x9b, 0x51, 0x6d, 0xd2, 0x82, 0x6e, 0x8e, 0x6a, 0x33, 0x10, 0x54, 0x3d, 0x21, 0x57,
0xa4, 0x61, 0x04, 0x79, 0x1a, 0xc5, 0xe6, 0x7a, 0xac, 0x7c, 0xd0, 0xe6, 0x58, 0x8f, 0x4d, 0xa6,
0x9e, 0xc4, 0xd2, 0xf2, 0x22, 0x87, 0xcc, 0x68, 0xbe, 0xf2, 0x10, 0x06, 0x47, 0xf3, 0x5b, 0x00,
0xea, 0x31, 0xf2, 0x13, 0xf9, 0xf3, 0x3e, 0xf0, 0xa3, 0xc5, 0x69, 0x4a, 0xe3, 0x13, 0x38, 0x7d,
0x39, 0x3a, 0x0c, 0x36, 0x2c, 0x9e, 0x06, 0xa3, 0xa3, 0x3c, 0xe8, 0xc5, 0x1a, 0x01, 0x45, 0x1a,
0xbb, 0x05, 0x44, 0x49, 0x5c, 0x2c, 0xe6, 0xa7, 0xa5, 0x35, 0xa0, 0xc1, 0x78, 0x03, 0x76, 0xd9,
0x7a, 0xce, 0x4b, 0x62, 0x0c, 0xbc, 0x19, 0xef, 0xbe, 0x45, 0xa3, 0x8d, 0x38, 0xe6, 0xbc, 0x03,
0x35, 0xa6, 0x13, 0x3e, 0x72, 0x6c, 0xd3, 0xc9, 0x78, 0xe0, 0xdc, 0xf2, 0x21, 0xa8, 0xfa, 0x67,
0xf2, 0xa3, 0x86, 0xea, 0x51, 0x34, 0x81, 0xe0, 0x8e, 0xd3, 0x4d, 0x98, 0xb5, 0xfa, 0x67, 0xab,
0x30, 0xb3, 0x0c, 0xb2, 0x94, 0x66, 0x33, 0x7b, 0x19, 0x48, 0x93, 0xbf, 0x0c, 0x2a, 0xa4, 0x7e,
0x1e, 0xa8, 0xbc, 0x53, 0x56, 0x42, 0x60, 0x9b, 0x8d, 0xd2, 0xe2, 0x58, 0x00, 0xda, 0x44, 0xfd,
0xe4, 0x95, 0xbf, 0xef, 0xb1, 0xb3, 0x4c, 0x56, 0xac, 0xad, 0x6c, 0x2a, 0xa3, 0xe3, 0xc9, 0xdb,
0x81, 0x50, 0xfb, 0x0f, 0xa8, 0xbd, 0x0f, 0xfc, 0x59, 0x54, 0xcc, 0xca, 0xe0, 0xb6, 0x7d, 0x66,
0x87, 0xd2, 0xea, 0xd8, 0x8f, 0x74, 0x29, 0xa3, 0x74, 0x5f, 0x66, 0x09, 0xb3, 0x96, 0xae, 0x30,
0x78, 0x4b, 0x17, 0x01, 0x43, 0x6f, 0x04, 0x0e, 0x3d, 0x61, 0xf0, 0xea, 0x21, 0x80, 0x7a, 0x7f,
0x22, 0x57, 0xab, 0x42, 0x79, 0x4a, 0x21, 0x4d, 0x4a, 0xeb, 0x1c, 0x1b, 0x03, 0x0f, 0x95, 0xd9,
0x3b, 0xc7, 0x5a, 0x18, 0x06, 0xf8, 0x1a, 0x4b, 0x7f, 0x2c, 0x76, 0x93, 0x25, 0x2f, 0x68, 0xcc,
0x29, 0xcb, 0xca, 0xe0, 0x81, 0xc3, 0xbf, 0x09, 0xe9, 0x60, 0x0f, 0xfb, 0xc1, 0x18, 0xf2, 0x14,
0x0b, 0x67, 0x0c, 0x7c, 0x0f, 0x78, 0x44, 0xd3, 0x32, 0x70, 0x65, 0x8b, 0x76, 0x1d, 0xe8, 0xee,
0x4a, 0x0e, 0x63, 0x9c, 0x93, 0x6b, 0x55, 0x0c, 0x51, 0x53, 0x07, 0xe5, 0x4e, 0x11, 0x4f, 0xe9,
0x12, 0x92, 0x20, 0x74, 0x48, 0xc8, 0xd2, 0xab, 0x39, 0x1d, 0x72, 0xab, 0x37, 0x6f, 0x14, 0xc3,
0x21, 0x2d, 0xf9, 0x33, 0xb6, 0x04, 0x5b, 0x31, 0x08, 0x5b, 0x28, 0x8c, 0xbe, 0x62, 0x68, 0x42,
0xa8, 0xbd, 0xc0, 0x66, 0x55, 0xda, 0xc7, 0xec, 0x39, 0x9c, 0xc9, 0xa5, 0xe7, 0xa1, 0xc7, 0x5f,
0x53, 0x3a, 0xda, 0x66, 0x4f, 0x1a, 0xc3, 0x7e, 0x33, 0x20, 0xd7, 0x35, 0x34, 0x64, 0xd9, 0x12,
0x0a, 0x3e, 0x9c, 0xd2, 0x34, 0x29, 0x20, 0x3b, 0x66, 0x82, 0x2d, 0x83, 0x5f, 0x3a, 0x24, 0xed,
0xb8, 0xce, 0xe4, 0xf3, 0x8b, 0xba, 0x61, 0x4a, 0x33, 0x12, 0x68, 0xb8, 0x2e, 0x8e, 0xfb, 0x0e,
0x35, 0x4b, 0x81, 0x6c, 0xf4, 0x41, 0x31, 0xd8, 0x92, 0x7c, 0xd4, 0x0c, 0x76, 0x0c, 0x6f, 0xf8,
0x98, 0x9f, 0xa7, 0x10, 0x6c, 0x7a, 0x44, 0x04, 0x15, 0x4a, 0x4c, 0xc7, 0x0c, 0xfb, 0xe2, 0x18,
0x97, 0x36, 0x1a, 0xb9, 0xb7, 0xc8, 0x53, 0x1a, 0x8b, 0xe7, 0xd7, 0x3d, 0x87, 0x8a, 0x26, 0x1c,
0xa7, 0x04, 0x3b, 0x89, 0xa1, 0xfe, 0x31, 0x20, 0x3f, 0x6b, 0xb6, 0x71, 0x37, 0x8a, 0x67, 0x93,
0x82, 0x2d, 0xb2, 0x64, 0xc8, 0x52, 0x56, 0x04, 0xdb, 0x9e, 0xd4, 0x0d, 0x56, 0x87, 0x7f, 0x7c,
0x21, 0x1f, 0x4c, 0x64, 0x4a, 0x3e, 0x6c, 0xe6, 0xb1, 0x93, 0xd2, 0x49, 0xe6, 0x6c, 0xb2, 0x50,
0x92, 0xc4, 0xca, 0x26, 0x37, 0x49, 0x8c, 0x54, 0xe2, 0xd2, 0x87, 0x91, 0xf6, 0xe8, 0x52, 0x0d,
0xea, 0x43, 0x8f, 0xc4, 0x1e, 0x5d, 0x1a, 0x63, 0xba, 0xd9, 0x93, 0xc6, 0xa0, 0x7f, 0x1f, 0x90,
0xb5, 0x66, 0x54, 0x63, 0x75, 0xf2, 0x75, 0xb3, 0x6b, 0x85, 0x7a, 0x7c, 0x21, 0x1f, 0xcc, 0x23,
0xc3, 0x1d, 0x98, 0x9c, 0x5a, 0x90, 0x02, 0xee, 0x60, 0x5c, 0x55, 0xa1, 0x90, 0xb0, 0xb5, 0x88,
0x3c, 0xe8, 0xc5, 0x62, 0xbc, 0x09, 0xf9, 0xa0, 0x5a, 0x90, 0xc5, 0x4c, 0x17, 0x7f, 0x6c, 0xa3,
0x5a, 0x97, 0x82, 0xfc, 0xcb, 0x33, 0xaa, 0x1d, 0x12, 0x03, 0x7d, 0x85, 0xf3, 0x07, 0x03, 0xa9,
0xd9, 0xeb, 0xf5, 0x6f, 0x4f, 0xda, 0x8d, 0x3e, 0xa8, 0x7b, 0x5d, 0x50, 0xf1, 0x56, 0xae, 0x0b,
0xed, 0x98, 0x61, 0x5f, 0xdc, 0x3e, 0x73, 0x05, 0x22, 0xf6, 0x35, 0xde, 0x99, 0x2b, 0x75, 0x04,
0xd5, 0x6b, 0xe6, 0x36, 0x69, 0x7b, 0xc7, 0xaa, 0x5a, 0xf1, 0x76, 0x6c, 0xbb, 0x50, 0x36, 0xfa,
0xa0, 0x18, 0x2b, 0xaf, 0xcf, 0x07, 0xb2, 0x53, 0xa7, 0x10, 0xcf, 0x20, 0x71, 0x6e, 0x4a, 0x54,
0x1f, 0x29, 0x68, 0xe5, 0xa6, 0xc4, 0x80, 0x8d, 0x5d, 0xf1, 0x38, 0x4f, 0x29, 0xb7, 0xee, 0x8a,
0xa5, 0xc5, 0xbb, 0x2b, 0xae, 0x08, 0x43, 0xf2, 0x19, 0x14, 0x13, 0xfb, 0x46, 0x5b, 0x5a, 0xbc,
0x92, 0x15, 0x61, 0x6c, 0x2f, 0x87, 0x2c, 0x3f, 0xb7, 0x6e, 0x2f, 0x85, 0xc1, 0xbb, 0xbd, 0x44,
0xc0, 0x48, 0xf1, 0x28, 0x2a, 0xb9, 0x3d, 0x45, 0x69, 0xf1, 0xa6, 0x58, 0x11, 0x28, 0xf9, 0x3b,
0xf2, 0x9e, 0x4a, 0x71, 0xc1, 0x83, 0x75, 0x5b, 0x02, 0x8b, 0xba, 0x13, 0xaf, 0x3b, 0xed, 0xc6,
0x09, 0xe8, 0xc9, 0x9b, 0x9c, 0x15, 0xdc, 0x7a, 0x02, 0x52, 0x26, 0xef, 0x09, 0x48, 0x23, 0xc6,
0xe9, 0xf3, 0x60, 0x2e, 0x7e, 0x17, 0xb3, 0x5c, 0xde, 0x17, 0xd9, 0xe6, 0x72, 0x1b, 0xf1, 0xce,
0xe5, 0x0e, 0xda, 0x5d, 0xf9, 0x9e, 0xd2, 0x14, 0x9e, 0x47, 0x73, 0x70, 0xae, 0x7c, 0xf2, 0x1a,
0x44, 0x10, 0x2b, 0x57, 0xbe, 0x26, 0xd9, 0x2d, 0x50, 0x79, 0x17, 0x28, 0x23, 0xb9, 0xfc, 0xd5,
0x6d, 0x61, 0x2b, 0xd4, 0x46, 0x1f, 0x14, 0x63, 0xcd, 0x71, 0x67, 0x52, 0xc5, 0x3a, 0xa1, 0x09,
0x9f, 0x06, 0x7e, 0x05, 0xc9, 0x78, 0xef, 0x0b, 0xba, 0x6c, 0xb7, 0x69, 0xaf, 0x68, 0x02, 0xcc,
0xdb, 0x34, 0x49, 0xf4, 0x6b, 0x5a, 0x0b, 0xed, 0x36, 0x4d, 0x9a, 0xfd, 0x4d, 0x53, 0x0a, 0xfd,
0x9a, 0xd6, 0x66, 0x31, 0xdc, 0xdf, 0x06, 0xe4, 0x93, 0x2a, 0xde, 0x21, 0xcd, 0x66, 0xc7, 0x51,
0x31, 0x91, 0xd7, 0xc1, 0xf1, 0xec, 0x20, 0x09, 0x7e, 0xe1, 0x90, 0x12, 0x64, 0xd8, 0x42, 0x75,
0xf4, 0xed, 0x8b, 0xb8, 0x60, 0x12, 0xff, 0x1a, 0x90, 0x5b, 0xd5, 0x29, 0x7b, 0x2f, 0xe2, 0xd1,
0x92, 0xc2, 0xd9, 0xce, 0x32, 0xa2, 0x69, 0x74, 0x9a, 0xc2, 0x08, 0xd2, 0x48, 0x1d, 0x0a, 0x7f,
0xed, 0x38, 0x54, 0x57, 0x2e, 0x61, 0xd7, 0x47, 0xa7, 0xf5, 0x9b, 0xef, 0xe4, 0x6b, 0x3c, 0xf0,
0xc6, 0x75, 0x7a, 0xaf, 0x28, 0x9c, 0x05, 0xae, 0x35, 0x5e, 0x8b, 0xbe, 0x6a, 0x5e, 0x65, 0x6e,
0xf6, 0xa4, 0xcd, 0xad, 0x5a, 0x23, 0xea, 0x4e, 0xcc, 0xe9, 0x12, 0x64, 0xec, 0xed, 0x55, 0x6a,
0x35, 0xeb, 0xdb, 0xaa, 0x79, 0x7c, 0x30, 0x8f, 0xbf, 0x90, 0x9f, 0x36, 0x2e, 0x9a, 0x5a, 0xed,
0xdf, 0x72, 0xdf, 0x53, 0xd9, 0xbb, 0xe0, 0x51, 0x7f, 0x07, 0x23, 0xba, 0xda, 0xd5, 0xad, 0x8c,
0x8e, 0x9b, 0xbf, 0xfe, 0xd1, 0x1d, 0x0e, 0x66, 0x75, 0xb4, 0x1b, 0x3f, 0x82, 0x98, 0x15, 0xf6,
0xea, 0x30, 0x5b, 0xa3, 0x50, 0x6f, 0x75, 0x38, 0x5d, 0xcc, 0x24, 0x5e, 0xe6, 0x49, 0xbf, 0x24,
0x14, 0x78, 0xa1, 0x24, 0x9c, 0x2e, 0x66, 0x12, 0xed, 0x81, 0xf0, 0x24, 0x61, 0xf6, 0x6c, 0x8f,
0x24, 0x9c, 0x2e, 0xc6, 0xa9, 0x7b, 0x97, 0xb1, 0xd9, 0x3c, 0x2a, 0x66, 0x4f, 0x81, 0xc7, 0x53,
0xeb, 0x42, 0x5c, 0x11, 0xa1, 0x44, 0xbc, 0x0b, 0x71, 0x07, 0x35, 0x8f, 0xa4, 0x15, 0xa0, 0xc6,
0x69, 0x27, 0x4b, 0x54, 0xd8, 0x6d, 0x9f, 0x56, 0x9b, 0xf5, 0x16, 0xa0, 0xdb, 0x07, 0x13, 0xf9,
0x2b, 0xf9, 0x58, 0x92, 0xe2, 0x99, 0xab, 0x19, 0x7c, 0x37, 0x61, 0xab, 0x01, 0xf9, 0x6c, 0x36,
0x40, 0x6f, 0x0d, 0x38, 0x1c, 0x8c, 0x4e, 0x7f, 0x71, 0xfa, 0x15, 0xc4, 0xfc, 0xf8, 0x3c, 0x87,
0x9d, 0x24, 0xb1, 0x76, 0x7a, 0x4d, 0x84, 0x3b, 0x49, 0xe2, 0xed, 0xf4, 0x0e, 0x8a, 0xc1, 0x38,
0x1e, 0x69, 0x6a, 0xfb, 0x08, 0xe6, 0x6c, 0x69, 0x3d, 0x15, 0x37, 0x45, 0x14, 0xe5, 0x5d, 0x6a,
0x6d, 0x34, 0x46, 0x05, 0xdc, 0x23, 0x55, 0x4b, 0xbf, 0x68, 0xe0, 0x5d, 0xeb, 0xe5, 0xa8, 0xb2,
0xb7, 0x9a, 0x77, 0x6f, 0x35, 0x68, 0x1c, 0x7a, 0x2b, 0xab, 0xaa, 0x39, 0xeb, 0xb3, 0x5d, 0x0b,
0x60, 0x5d, 0xfa, 0x9e, 0xed, 0x5d, 0xd6, 0x11, 0x0f, 0xbb, 0xd2, 0x1b, 0xcf, 0xe8, 0xc8, 0x07,
0xbd, 0x58, 0x8c, 0x57, 0x90, 0x8f, 0x9e, 0x47, 0x4b, 0x3a, 0x91, 0x56, 0x71, 0x96, 0x53, 0x5d,
0x6e, 0xde, 0xe6, 0xd6, 0x4c, 0xd8, 0x80, 0x1c, 0x07, 0x27, 0x27, 0x8c, 0x31, 0xff, 0x39, 0x20,
0x37, 0x6a, 0x66, 0x1f, 0x90, 0x38, 0xc8, 0x5e, 0xb3, 0x13, 0xca, 0xa7, 0x62, 0xd7, 0x51, 0x06,
0x9f, 0xbb, 0x24, 0xed, 0xbc, 0x4e, 0xe5, 0x57, 0x17, 0xf6, 0xab, 0x0f, 0x36, 0x47, 0xd1, 0x04,
0xab, 0xd5, 0x38, 0xd8, 0xc8, 0x8b, 0x09, 0xe3, 0x85, 0xcf, 0x4d, 0x0f, 0x51, 0x9f, 0xbd, 0xc6,
0xfa, 0x5b, 0x8e, 0xf6, 0xc9, 0x65, 0xdc, 0xfd, 0x90, 0xe3, 0x86, 0x1b, 0x40, 0xbd, 0x33, 0x72,
0xad, 0x59, 0x64, 0xa9, 0x1e, 0x34, 0xe3, 0xf6, 0xa0, 0x55, 0x36, 0x69, 0x3d, 0x12, 0x8e, 0xdb,
0x03, 0x0f, 0x5e, 0x97, 0x78, 0x37, 0xb0, 0xa8, 0xb8, 0x87, 0x2b, 0x85, 0x9a, 0x65, 0xb7, 0xd9,
0x93, 0xae, 0x17, 0xd1, 0x6e, 0x54, 0x2c, 0xc0, 0xad, 0x95, 0x52, 0x46, 0x15, 0x3e, 0xea, 0xef,
0xa0, 0x3f, 0xb5, 0xf8, 0xa0, 0xc6, 0x70, 0x10, 0x3f, 0x73, 0xa9, 0x18, 0x63, 0x79, 0x77, 0x25,
0x57, 0x7f, 0x3c, 0x53, 0x5b, 0xe5, 0x50, 0xde, 0x76, 0xb9, 0xb6, 0x46, 0xf0, 0xce, 0x0a, 0x0a,
0xe5, 0x7f, 0x4b, 0xbe, 0x77, 0x44, 0xb3, 0x49, 0xf0, 0x49, 0x7b, 0xb2, 0xd2, 0x6c, 0xa2, 0x95,
0xd6, 0x6c, 0xa6, 0xfa, 0xc5, 0xc4, 0x51, 0xc1, 0x62, 0x28, 0xcb, 0x61, 0x94, 0xc5, 0x90, 0x1a,
0x2f, 0x26, 0xd0, 0x16, 0x2a, 0xa3, 0xe3, 0xc5, 0x44, 0x07, 0xaa, 0x0f, 0xea, 0x5f, 0xd0, 0x92,
0xb3, 0xe2, 0x7c, 0x3c, 0x65, 0x67, 0xc6, 0x41, 0x1d, 0x2d, 0xa1, 0x30, 0x39, 0x0e, 0xea, 0x06,
0x52, 0xbf, 0x62, 0x45, 0x03, 0x7e, 0x86, 0x62, 0xbe, 0xfe, 0xaa, 0xdc, 0x2a, 0xb3, 0xe3, 0xf5,
0x97, 0x05, 0xab, 0x3f, 0xf2, 0xa8, 0xf2, 0x06, 0x8e, 0x66, 0xe3, 0xc9, 0xa3, 0x53, 0xd3, 0x80,
0xe3, 0xc9, 0x63, 0x05, 0x31, 0xce, 0x23, 0x72, 0x45, 0x8c, 0x25, 0x64, 0x4f, 0xe4, 0x47, 0x63,
0xc1, 0x55, 0xed, 0xf9, 0x64, 0x9e, 0xf3, 0xf3, 0xb5, 0xc6, 0xff, 0x05, 0xf0, 0x68, 0xb0, 0x7b,
0xf3, 0xdf, 0x6f, 0xd7, 0x07, 0xdf, 0xbe, 0x5d, 0x1f, 0xfc, 0xef, 0xed, 0xfa, 0xe0, 0x9b, 0x77,
0xeb, 0x97, 0xbe, 0x7d, 0xb7, 0x7e, 0xe9, 0xbf, 0xef, 0xd6, 0x2f, 0x7d, 0x79, 0x19, 0x3f, 0x5a,
0x3b, 0xfd, 0xbe, 0xfc, 0xf4, 0xec, 0xf1, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x94, 0xe2, 0x8b,
0x17, 0xd8, 0x26, 0x00, 0x00,
}
// This is a compile-time assertion to ensure that this generated file
@ -225,6 +227,7 @@ type ClientCommandsHandler interface {
BlockSetVideoName(*pb.RpcBlockSetVideoNameRequest) *pb.RpcBlockSetVideoNameResponse
BlockSetVideoWidth(*pb.RpcBlockSetVideoWidthRequest) *pb.RpcBlockSetVideoWidthResponse
BlockSetLinkTargetBlockId(*pb.RpcBlockSetLinkTargetBlockIdRequest) *pb.RpcBlockSetLinkTargetBlockIdResponse
BlockGetDataviewAvailableRelations(*pb.RpcBlockGetDataviewAvailableRelationsRequest) *pb.RpcBlockGetDataviewAvailableRelationsResponse
BlockSetDataviewView(*pb.RpcBlockSetDataviewViewRequest) *pb.RpcBlockSetDataviewViewResponse
BlockSetDataviewActiveView(*pb.RpcBlockSetDataviewActiveViewRequest) *pb.RpcBlockSetDataviewActiveViewResponse
BlockCreateDataviewView(*pb.RpcBlockCreateDataviewViewRequest) *pb.RpcBlockCreateDataviewViewResponse
@ -893,6 +896,16 @@ func BlockSetLinkTargetBlockId(b []byte) []byte {
return resp
}
func BlockGetDataviewAvailableRelations(b []byte) []byte {
in := new(pb.RpcBlockGetDataviewAvailableRelationsRequest)
if err := in.Unmarshal(b); err != nil {
resp, _ := (&pb.RpcBlockGetDataviewAvailableRelationsResponse{Error: &pb.RpcBlockGetDataviewAvailableRelationsResponseError{Code: pb.RpcBlockGetDataviewAvailableRelationsResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
return resp
}
resp, _ := clientCommandsHandler.BlockGetDataviewAvailableRelations(in).Marshal()
return resp
}
func BlockSetDataviewView(b []byte) []byte {
in := new(pb.RpcBlockSetDataviewViewRequest)
if err := in.Unmarshal(b); err != nil {
@ -1313,6 +1326,8 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
cd = BlockSetVideoWidth(data)
case "BlockSetLinkTargetBlockId":
cd = BlockSetLinkTargetBlockId(data)
case "BlockGetDataviewAvailableRelations":
cd = BlockGetDataviewAvailableRelations(data)
case "BlockSetDataviewView":
cd = BlockSetDataviewView(data)
case "BlockSetDataviewActiveView":

View file

@ -9,6 +9,7 @@ import (
"github.com/anytypeio/go-anytype-middleware/core/block/source"
"github.com/anytypeio/go-anytype-middleware/pb"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/relation"
"github.com/gogo/protobuf/types"
)
@ -1052,6 +1053,36 @@ func (mw *Middleware) BlockFileCreateAndUpload(req *pb.RpcBlockFileCreateAndUplo
return response(pb.RpcBlockFileCreateAndUploadResponseError_NULL, id, nil)
}
func (mw *Middleware) BlockGetDataviewAvailableRelations(req *pb.RpcBlockGetDataviewAvailableRelationsRequest) *pb.RpcBlockGetDataviewAvailableRelationsResponse {
ctx := state.NewContext(nil)
response := func(code pb.RpcBlockGetDataviewAvailableRelationsResponseErrorCode, relations []*relation.Relation, err error) *pb.RpcBlockGetDataviewAvailableRelationsResponse {
m := &pb.RpcBlockGetDataviewAvailableRelationsResponse{Relations: relations, Error: &pb.RpcBlockGetDataviewAvailableRelationsResponseError{Code: code}}
if err != nil {
m.Error.Description = err.Error()
}
return m
}
var (
err error
objTypeUrl string
)
err = mw.doBlockService(func(bs block.Service) (err error) {
objTypeUrl, err = bs.GetDataviewObjectType(ctx, req.ContextId, req.BlockId)
return
})
objType, err := mw.getObjectType(objTypeUrl)
if err != nil {
if err == block.ErrUnknownObjectType {
return response(pb.RpcBlockGetDataviewAvailableRelationsResponseError_UNKNOWN_ERROR, nil, err)
}
return response(pb.RpcBlockGetDataviewAvailableRelationsResponseError_UNKNOWN_ERROR, nil, err)
}
return response(pb.RpcBlockGetDataviewAvailableRelationsResponseError_NULL, objType.Relations, nil)
}
func (mw *Middleware) BlockSetDataviewView(req *pb.RpcBlockSetDataviewViewRequest) *pb.RpcBlockSetDataviewViewResponse {
ctx := state.NewContext(nil)
response := func(code pb.RpcBlockSetDataviewViewResponseErrorCode, err error) *pb.RpcBlockSetDataviewViewResponse {

View file

@ -24,6 +24,7 @@ const defaultLimit = 100
var log = logging.Logger("anytype-mw-editor")
type Dataview interface {
GetObjectTypeURL(ctx *state.Context, blockId string) (string, error)
UpdateView(ctx *state.Context, blockId string, viewId string, view model.BlockContentDataviewView, showEvent bool) error
DeleteView(ctx *state.Context, blockId string, viewId string, showEvent bool) error
SetActiveView(ctx *state.Context, blockId string, activeViewId string, limit int, offset int) error
@ -109,6 +110,20 @@ func (d *dataviewCollectionImpl) DeleteView(ctx *state.Context, blockId string,
return d.Apply(s, smartblock.NoEvent)
}
func (d *dataviewCollectionImpl) GetObjectTypeURL(ctx *state.Context, blockId string) (string, error) {
s := d.NewStateCtx(ctx)
tb, err := getDataviewBlock(s, blockId)
if err != nil {
return "", err
}
if v, ok := tb.Model().Content.(*model.BlockContentOfDataview); !ok {
return "", fmt.Errorf("wrong dataview block content type: %T", tb.Model().Content)
} else {
return v.Dataview.SchemaURL, nil
}
}
func (d *dataviewCollectionImpl) UpdateView(ctx *state.Context, blockId string, viewId string, view model.BlockContentDataviewView, showEvent bool) error {
s := d.NewStateCtx(ctx)
tb, err := getDataviewBlock(s, blockId)

View file

@ -318,14 +318,20 @@ func (sb *smartBlock) updatePageStore(beforeSnippet string, act *undo.Action) (e
}
var storeInfo struct {
details *types.Struct
snippet string
links []string
details *types.Struct
relations *pbrelation.Relations
snippet string
links []string
}
if act == nil || act.Details != nil {
storeInfo.details = pbtypes.CopyStruct(sb.Details())
}
if act == nil || act.Relations != nil {
storeInfo.relations = &pbrelation.Relations{Relations: pbtypes.CopyRelations(sb.Relations())}
}
if storeInfo.details == nil || storeInfo.details.Fields == nil {
storeInfo.details = &types.Struct{Fields: map[string]*types.Value{}}
}
@ -346,7 +352,7 @@ func (sb *smartBlock) updatePageStore(beforeSnippet string, act *undo.Action) (e
if at := sb.Anytype(); at != nil && sb.Type() != pb.SmartBlockType_Breadcrumbs {
if storeInfo.links != nil || storeInfo.details != nil || len(storeInfo.snippet) > 0 {
return at.ObjectStore().UpdateObject(sb.Id(), storeInfo.details, storeInfo.links, storeInfo.snippet)
return at.ObjectStore().UpdateObject(sb.Id(), storeInfo.details, storeInfo.relations, storeInfo.links, storeInfo.snippet)
}
}

View file

@ -131,6 +131,7 @@ type Service interface {
SetPagesIsArchived(req pb.RpcBlockListSetPageIsArchivedRequest) error
DeletePages(req pb.RpcBlockListDeletePageRequest) error
GetDataviewObjectType(ctx *state.Context, contextId string, blockId string) (string, error)
DeleteDataviewView(ctx *state.Context, req pb.RpcBlockDeleteDataviewViewRequest) error
SetDataviewView(ctx *state.Context, req pb.RpcBlockSetDataviewViewRequest) error
SetDataviewActiveView(ctx *state.Context, req pb.RpcBlockSetDataviewActiveViewRequest) error
@ -630,6 +631,15 @@ func (s *service) SetFieldsList(ctx *state.Context, req pb.RpcBlockListSetFields
})
}
func (s *service) GetDataviewObjectType(ctx *state.Context, contextId string, blockId string) (objectType string, err error) {
err = s.DoDataview(contextId, func(b dataview.Dataview) error {
objectType, err = b.GetObjectTypeURL(ctx, blockId)
return err
})
return
}
func (s *service) SetDataviewView(ctx *state.Context, req pb.RpcBlockSetDataviewViewRequest) error {
return s.DoDataview(req.ContextId, func(b dataview.Dataview) error {
return b.UpdateView(ctx, req.BlockId, req.ViewId, *req.View, true)
@ -1225,7 +1235,19 @@ func (s *service) CreateSet(objType *pbrelation.ObjectType, name, icon string) (
return id, fmt.Errorf("unexpected set block type: %T", sb)
}
relations := []*model.BlockContentDataviewRelation{{Key: "id", IsVisible: false}, {Key: "name", IsVisible: true}, {Key: "lastOpened", IsVisible: true}, {Key: "lastModified", IsVisible: true}}
var relations []*model.BlockContentDataviewRelation
for _, rel := range relation.RequiredInternalRelations {
if r, ok := relation.BundledRelations[rel]; !ok {
log.Fatalf("RequiredInternalRelations has unknown relation %s", r.Key)
} else {
relations = append(relations, &model.BlockContentDataviewRelation{Key: r.Key, IsVisible: !r.Hidden})
}
}
for _, rel := range objType.Relations {
relations = append(relations, &model.BlockContentDataviewRelation{Key: rel.Key, IsVisible: true})
}
dataview := model.BlockContentOfDataview{
Dataview: &model.BlockContentDataview{
Source: objType.Url,

View file

@ -79,7 +79,6 @@ func (d *Dataview) Diff(b simple.Block) (msgs []*pb.EventMessage, err error) {
if !found || changed {
msgs = append(msgs,
&pb.EventMessage{Value: &pb.EventMessageValueOfBlockSetDataviewView{
&pb.EventBlockSetDataviewView{
Id: dv.Id,
ViewId: view2.Id,

View file

@ -126,11 +126,31 @@ func (mw *Middleware) ObjectTypeCreate(req *pb.RpcObjectTypeCreateRequest) *pb.R
}
var sbId string
var relations []*pbrelation.Relation
var requiredRelationByKey = make(map[string]*pbrelation.Relation, len(relation.RequiredInternalRelations))
for _, rel := range relation.RequiredInternalRelations {
requiredRelationByKey[rel] = relation.BundledRelations[rel]
}
for _, rel := range req.ObjectType.Relations {
if v, exists := requiredRelationByKey[rel.Key]; exists {
if !pbtypes.RelationEqual(v, rel) {
return response(pb.RpcObjectTypeCreateResponseError_BAD_INPUT, nil, fmt.Errorf("required relation %s not equals the bundled one", rel.Key))
}
delete(requiredRelationByKey, rel.Key)
}
}
for _, rel := range requiredRelationByKey {
req.ObjectType.Relations = append(req.ObjectType.Relations, rel)
}
err := mw.doBlockService(func(bs block.Service) (err error) {
sbId, err = bs.CreateSmartBlock(smartblock.SmartBlockTypeObjectType, &types.Struct{
Fields: map[string]*types.Value{
"name": pbtypes.String(req.ObjectType.Name),
"layout": pbtypes.Float64(float64(req.ObjectType.Layout)),
"name": pbtypes.String(req.ObjectType.Name),
"iconEmoji": pbtypes.String(req.ObjectType.IconEmoji),
"layout": pbtypes.Float64(float64(req.ObjectType.Layout)),
},
}, nil, nil)
if err != nil {

View file

@ -41,15 +41,16 @@ func TestRelations(t *testing.T) {
},
},
})
require.Equal(t, 0, int(resp3.Error.Code), resp3.Error.Description)
require.Len(t, resp3.ObjectType.Relations, 2)
require.Len(t, resp3.ObjectType.Relations, 7) // including relation.RequiredInternalRelations
require.True(t, strings.HasPrefix(resp3.ObjectType.Url, "https://anytype.io/schemas/object/custom/"))
resp4 := mw.ObjectTypeList(nil)
require.Equal(t, 0, int(resp4.Error.Code), resp4.Error.Description)
require.Len(t, resp4.ObjectTypes, 3)
require.Equal(t, resp3.ObjectType.Url, resp4.ObjectTypes[2].Url)
require.Len(t, resp4.ObjectTypes[2].Relations, 2)
require.Len(t, resp4.ObjectTypes[2].Relations, 7)
resp5 := mw.SetCreate(&pb.RpcSetCreateRequest{
ObjectTypeURL: resp4.ObjectTypes[2].Url,

View file

@ -118,6 +118,11 @@
- [Rpc.Block.File.CreateAndUpload.Response](#anytype.Rpc.Block.File.CreateAndUpload.Response)
- [Rpc.Block.File.CreateAndUpload.Response.Error](#anytype.Rpc.Block.File.CreateAndUpload.Response.Error)
- [Rpc.Block.Get](#anytype.Rpc.Block.Get)
- [Rpc.Block.Get.Dataview](#anytype.Rpc.Block.Get.Dataview)
- [Rpc.Block.Get.Dataview.AvailableRelations](#anytype.Rpc.Block.Get.Dataview.AvailableRelations)
- [Rpc.Block.Get.Dataview.AvailableRelations.Request](#anytype.Rpc.Block.Get.Dataview.AvailableRelations.Request)
- [Rpc.Block.Get.Dataview.AvailableRelations.Response](#anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response)
- [Rpc.Block.Get.Dataview.AvailableRelations.Response.Error](#anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response.Error)
- [Rpc.Block.Get.Marks](#anytype.Rpc.Block.Get.Marks)
- [Rpc.Block.Get.Marks.Request](#anytype.Rpc.Block.Get.Marks.Request)
- [Rpc.Block.Get.Marks.Response](#anytype.Rpc.Block.Get.Marks.Response)
@ -487,6 +492,7 @@
- [Rpc.Block.Download.Response.Error.Code](#anytype.Rpc.Block.Download.Response.Error.Code)
- [Rpc.Block.Export.Response.Error.Code](#anytype.Rpc.Block.Export.Response.Error.Code)
- [Rpc.Block.File.CreateAndUpload.Response.Error.Code](#anytype.Rpc.Block.File.CreateAndUpload.Response.Error.Code)
- [Rpc.Block.Get.Dataview.AvailableRelations.Response.Error.Code](#anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response.Error.Code)
- [Rpc.Block.Get.Marks.Response.Error.Code](#anytype.Rpc.Block.Get.Marks.Response.Error.Code)
- [Rpc.Block.GetPublicWebURL.Response.Error.Code](#anytype.Rpc.Block.GetPublicWebURL.Response.Error.Code)
- [Rpc.Block.ImportMarkdown.Response.Error.Code](#anytype.Rpc.Block.ImportMarkdown.Response.Error.Code)
@ -657,6 +663,7 @@
- [Event.Block.Set.Text.Style](#anytype.Event.Block.Set.Text.Style)
- [Event.Block.Set.Text.Text](#anytype.Event.Block.Set.Text.Text)
- [Event.Block.Show](#anytype.Event.Block.Show)
- [Event.Block.Show.ObjectTypePerObject](#anytype.Event.Block.Show.ObjectTypePerObject)
- [Event.Block.Show.RelationWithValuePerObject](#anytype.Event.Block.Show.RelationWithValuePerObject)
- [Event.Message](#anytype.Event.Message)
- [Event.Ping](#anytype.Event.Ping)
@ -844,6 +851,7 @@
| BlockSetVideoName | [Rpc.Block.Set.Video.Name.Request](#anytype.Rpc.Block.Set.Video.Name.Request) | [Rpc.Block.Set.Video.Name.Response](#anytype.Rpc.Block.Set.Video.Name.Response) | |
| BlockSetVideoWidth | [Rpc.Block.Set.Video.Width.Request](#anytype.Rpc.Block.Set.Video.Width.Request) | [Rpc.Block.Set.Video.Width.Response](#anytype.Rpc.Block.Set.Video.Width.Response) | |
| BlockSetLinkTargetBlockId | [Rpc.Block.Set.Link.TargetBlockId.Request](#anytype.Rpc.Block.Set.Link.TargetBlockId.Request) | [Rpc.Block.Set.Link.TargetBlockId.Response](#anytype.Rpc.Block.Set.Link.TargetBlockId.Response) | |
| BlockGetDataviewAvailableRelations | [Rpc.Block.Get.Dataview.AvailableRelations.Request](#anytype.Rpc.Block.Get.Dataview.AvailableRelations.Request) | [Rpc.Block.Get.Dataview.AvailableRelations.Response](#anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response) | |
| BlockSetDataviewView | [Rpc.Block.Set.Dataview.View.Request](#anytype.Rpc.Block.Set.Dataview.View.Request) | [Rpc.Block.Set.Dataview.View.Response](#anytype.Rpc.Block.Set.Dataview.View.Response) | |
| BlockSetDataviewActiveView | [Rpc.Block.Set.Dataview.ActiveView.Request](#anytype.Rpc.Block.Set.Dataview.ActiveView.Request) | [Rpc.Block.Set.Dataview.ActiveView.Response](#anytype.Rpc.Block.Set.Dataview.ActiveView.Response) | |
| BlockCreateDataviewView | [Rpc.Block.Create.Dataview.View.Request](#anytype.Rpc.Block.Create.Dataview.View.Request) | [Rpc.Block.Create.Dataview.View.Response](#anytype.Rpc.Block.Create.Dataview.View.Response) | |
@ -2405,6 +2413,74 @@ common simple block command
<a name="anytype.Rpc.Block.Get.Dataview"></a>
### Rpc.Block.Get.Dataview
<a name="anytype.Rpc.Block.Get.Dataview.AvailableRelations"></a>
### Rpc.Block.Get.Dataview.AvailableRelations
<a name="anytype.Rpc.Block.Get.Dataview.AvailableRelations.Request"></a>
### Rpc.Block.Get.Dataview.AvailableRelations.Request
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| contextId | [string](#string) | | |
| blockId | [string](#string) | | |
<a name="anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response"></a>
### Rpc.Block.Get.Dataview.AvailableRelations.Response
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| error | [Rpc.Block.Get.Dataview.AvailableRelations.Response.Error](#anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response.Error) | | |
| relations | [relation.Relation](#anytype.relation.Relation) | repeated | |
<a name="anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response.Error"></a>
### Rpc.Block.Get.Dataview.AvailableRelations.Response.Error
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| code | [Rpc.Block.Get.Dataview.AvailableRelations.Response.Error.Code](#anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response.Error.Code) | | |
| description | [string](#string) | | |
<a name="anytype.Rpc.Block.Get.Marks"></a>
### Rpc.Block.Get.Marks
@ -7633,6 +7709,20 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er
<a name="anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response.Error.Code"></a>
### Rpc.Block.Get.Dataview.AvailableRelations.Response.Error.Code
| Name | Number | Description |
| ---- | ------ | ----------- |
| NULL | 0 | |
| UNKNOWN_ERROR | 1 | |
| BAD_INPUT | 2 | |
| NOT_A_DATAVIEW_BLOCK | 3 | ... |
<a name="anytype.Rpc.Block.Get.Marks.Response.Error.Code"></a>
### Rpc.Block.Get.Marks.Response.Error.Code
@ -10054,7 +10144,7 @@ Dashboard opened, click on a page, Rpc.Block.open, Block.ShowFullscreen(PageBloc
| blocks | [model.Block](#anytype.model.Block) | repeated | dependent blocks (descendants) |
| details | [Event.Block.Set.Details](#anytype.Event.Block.Set.Details) | repeated | deprecated, details for current and dependent smart blocks |
| type | [SmartBlockType](#anytype.SmartBlockType) | | |
| objectType | [string](#string) | | objectType it to get default relations from |
| objectTypesPerObject | [Event.Block.Show.ObjectTypePerObject](#anytype.Event.Block.Show.ObjectTypePerObject) | repeated | objectType it to get default relations from |
| relationsPerObject | [Event.Block.Show.RelationWithValuePerObject](#anytype.Event.Block.Show.RelationWithValuePerObject) | repeated | list of relations used in this object |
@ -10062,6 +10152,22 @@ Dashboard opened, click on a page, Rpc.Block.open, Block.ShowFullscreen(PageBloc
<a name="anytype.Event.Block.Show.ObjectTypePerObject"></a>
### Event.Block.Show.ObjectTypePerObject
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| objectId | [string](#string) | | |
| objectTypes | [string](#string) | repeated | |
<a name="anytype.Event.Block.Show.RelationWithValuePerObject"></a>
### Event.Block.Show.RelationWithValuePerObject
@ -10432,7 +10538,7 @@ Precondition: user A and user B opened the same block
| id | [string](#string) | | |
| objectTypeUrls | [string](#string) | repeated | |
| details | [google.protobuf.Struct](#google.protobuf.Struct) | | |
| relations | [google.protobuf.Struct](#google.protobuf.Struct) | | |
| relations | [anytype.relation.Relations](#anytype.relation.Relations) | | |
| snippet | [string](#string) | | |
| hasInboundLinks | [bool](#bool) | | |
| objectType | [ObjectInfo.Type](#anytype.model.ObjectInfo.Type) | | |
@ -11268,6 +11374,7 @@ deprecated
| name | [string](#string) | | name of objectType (can be localized for bundled types) |
| relations | [Relation](#anytype.relation.Relation) | repeated | cannot contain more than one Relation with the same RelationType |
| layout | [ObjectType.Layout](#anytype.relation.ObjectType.Layout) | | |
| iconEmoji | [string](#string) | | emoji symbol |
@ -11376,6 +11483,7 @@ RelationFormat describes how the underlying data is stored in the google.protobu
| phone | 9 | string with sanity check |
| emoji | 10 | one emoji, can contains multiple utf-8 symbols |
| objectId | 100 | relation must has objectType |
| objectIdSelf | 101 | relation of object to itself (using the same objectType) |

File diff suppressed because it is too large Load diff

View file

@ -856,12 +856,12 @@ func (m *EventBlockAdd) GetBlocks() []*model.Block {
// Works with a smart blocks: Page, Dashboard
// Dashboard opened, click on a page, Rpc.Block.open, Block.ShowFullscreen(PageBlock)
type EventBlockShow struct {
RootId string `protobuf:"bytes,1,opt,name=rootId,proto3" json:"rootId,omitempty"`
Blocks []*model.Block `protobuf:"bytes,2,rep,name=blocks,proto3" json:"blocks,omitempty"`
Details []*EventBlockSetDetails `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"`
Type SmartBlockType `protobuf:"varint,4,opt,name=type,proto3,enum=anytype.SmartBlockType" json:"type,omitempty"`
ObjectType string `protobuf:"bytes,5,opt,name=objectType,proto3" json:"objectType,omitempty"`
RelationsPerObject []*EventBlockShowRelationWithValuePerObject `protobuf:"bytes,6,rep,name=relationsPerObject,proto3" json:"relationsPerObject,omitempty"`
RootId string `protobuf:"bytes,1,opt,name=rootId,proto3" json:"rootId,omitempty"`
Blocks []*model.Block `protobuf:"bytes,2,rep,name=blocks,proto3" json:"blocks,omitempty"`
Details []*EventBlockSetDetails `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"`
Type SmartBlockType `protobuf:"varint,4,opt,name=type,proto3,enum=anytype.SmartBlockType" json:"type,omitempty"`
ObjectTypesPerObject []*EventBlockShowObjectTypePerObject `protobuf:"bytes,5,rep,name=objectTypesPerObject,proto3" json:"objectTypesPerObject,omitempty"`
RelationsPerObject []*EventBlockShowRelationWithValuePerObject `protobuf:"bytes,6,rep,name=relationsPerObject,proto3" json:"relationsPerObject,omitempty"`
}
func (m *EventBlockShow) Reset() { *m = EventBlockShow{} }
@ -925,11 +925,11 @@ func (m *EventBlockShow) GetType() SmartBlockType {
return SmartBlockType_Page
}
func (m *EventBlockShow) GetObjectType() string {
func (m *EventBlockShow) GetObjectTypesPerObject() []*EventBlockShowObjectTypePerObject {
if m != nil {
return m.ObjectType
return m.ObjectTypesPerObject
}
return ""
return nil
}
func (m *EventBlockShow) GetRelationsPerObject() []*EventBlockShowRelationWithValuePerObject {
@ -993,6 +993,58 @@ func (m *EventBlockShowRelationWithValuePerObject) GetRelations() []*relation.Re
return nil
}
type EventBlockShowObjectTypePerObject struct {
ObjectId string `protobuf:"bytes,1,opt,name=objectId,proto3" json:"objectId,omitempty"`
ObjectTypes []string `protobuf:"bytes,2,rep,name=objectTypes,proto3" json:"objectTypes,omitempty"`
}
func (m *EventBlockShowObjectTypePerObject) Reset() { *m = EventBlockShowObjectTypePerObject{} }
func (m *EventBlockShowObjectTypePerObject) String() string { return proto.CompactTextString(m) }
func (*EventBlockShowObjectTypePerObject) ProtoMessage() {}
func (*EventBlockShowObjectTypePerObject) Descriptor() ([]byte, []int) {
return fileDescriptor_a966342d378ae5f5, []int{0, 2, 1, 1}
}
func (m *EventBlockShowObjectTypePerObject) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *EventBlockShowObjectTypePerObject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_EventBlockShowObjectTypePerObject.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 *EventBlockShowObjectTypePerObject) XXX_Merge(src proto.Message) {
xxx_messageInfo_EventBlockShowObjectTypePerObject.Merge(m, src)
}
func (m *EventBlockShowObjectTypePerObject) XXX_Size() int {
return m.Size()
}
func (m *EventBlockShowObjectTypePerObject) XXX_DiscardUnknown() {
xxx_messageInfo_EventBlockShowObjectTypePerObject.DiscardUnknown(m)
}
var xxx_messageInfo_EventBlockShowObjectTypePerObject proto.InternalMessageInfo
func (m *EventBlockShowObjectTypePerObject) GetObjectId() string {
if m != nil {
return m.ObjectId
}
return ""
}
func (m *EventBlockShowObjectTypePerObject) GetObjectTypes() []string {
if m != nil {
return m.ObjectTypes
}
return nil
}
//*
// Middleware to front end event message, that will be sent on one of this scenarios:
// Precondition: user A opened a block
@ -5628,6 +5680,7 @@ func init() {
proto.RegisterType((*EventBlockAdd)(nil), "anytype.Event.Block.Add")
proto.RegisterType((*EventBlockShow)(nil), "anytype.Event.Block.Show")
proto.RegisterType((*EventBlockShowRelationWithValuePerObject)(nil), "anytype.Event.Block.Show.RelationWithValuePerObject")
proto.RegisterType((*EventBlockShowObjectTypePerObject)(nil), "anytype.Event.Block.Show.ObjectTypePerObject")
proto.RegisterType((*EventBlockFilesUpload)(nil), "anytype.Event.Block.FilesUpload")
proto.RegisterType((*EventBlockDelete)(nil), "anytype.Event.Block.Delete")
proto.RegisterType((*EventBlockDeleteDataview)(nil), "anytype.Event.Block.Delete.Dataview")
@ -5725,177 +5778,179 @@ func init() {
func init() { proto.RegisterFile("pb/protos/events.proto", fileDescriptor_a966342d378ae5f5) }
var fileDescriptor_a966342d378ae5f5 = []byte{
// 2715 bytes of a gzipped FileDescriptorProto
// 2743 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcb, 0x6f, 0xdc, 0xc6,
0x1d, 0xde, 0x07, 0xf7, 0xf5, 0x5b, 0x4b, 0xda, 0x4c, 0x8c, 0x98, 0x65, 0x14, 0x59, 0x96, 0x1f,
0x71, 0xe2, 0x64, 0x95, 0x28, 0x69, 0xe4, 0x28, 0x4f, 0x59, 0xb2, 0xb1, 0x9b, 0xda, 0xf2, 0x76,
0x64, 0x25, 0x45, 0xea, 0x43, 0xa9, 0xe5, 0x68, 0xc5, 0x8a, 0x4b, 0x2e, 0x48, 0x4a, 0xb6, 0xd3,
0x63, 0x6f, 0x45, 0x5b, 0xf4, 0x50, 0xb4, 0x08, 0xd0, 0x9e, 0x7a, 0xea, 0xa5, 0x97, 0xa2, 0x40,
0xfe, 0x84, 0xf6, 0x96, 0x63, 0x8e, 0x85, 0x0d, 0x14, 0xbd, 0xe6, 0xdc, 0x4b, 0x31, 0x0f, 0x92,
0x33, 0x14, 0xb9, 0x94, 0x82, 0x04, 0x68, 0x91, 0xdc, 0x76, 0x86, 0xdf, 0xf7, 0xcd, 0xeb, 0x37,
0x3f, 0x7e, 0xc3, 0x59, 0x78, 0x66, 0xb2, 0xbb, 0x3c, 0xf1, 0xbd, 0xd0, 0x0b, 0x96, 0xc9, 0x11,
0x71, 0xc3, 0xa0, 0xcb, 0x4a, 0xa8, 0x61, 0xba, 0x8f, 0xc2, 0x47, 0x13, 0x62, 0x5c, 0x9a, 0x1c,
0x8c, 0x96, 0x1d, 0x7b, 0x77, 0x79, 0xb2, 0xbb, 0x3c, 0xf6, 0x2c, 0xe2, 0x44, 0x70, 0x56, 0x10,
0x70, 0xe3, 0x05, 0x09, 0xe5, 0x13, 0xc7, 0x0c, 0x6d, 0xcf, 0x8d, 0x80, 0x51, 0x59, 0x40, 0xe7,
0x47, 0x9e, 0x37, 0x72, 0x08, 0x7f, 0xba, 0x7b, 0xb8, 0xb7, 0x1c, 0x84, 0xfe, 0xe1, 0x30, 0xe4,
0x4f, 0x97, 0x3e, 0x1d, 0x40, 0xed, 0x26, 0xed, 0x08, 0x5a, 0x81, 0xe6, 0x98, 0x04, 0x81, 0x39,
0x22, 0x81, 0x5e, 0x5e, 0xac, 0x5e, 0x6d, 0xaf, 0x3c, 0xd3, 0x15, 0x9d, 0xea, 0x32, 0x44, 0xf7,
0x0e, 0x7f, 0x8c, 0x63, 0x1c, 0x9a, 0x87, 0xd6, 0xd0, 0x73, 0x43, 0xf2, 0x30, 0xec, 0x5b, 0x7a,
0x65, 0xb1, 0x7c, 0xb5, 0x85, 0x93, 0x0a, 0xf4, 0x3a, 0xb4, 0x6c, 0xd7, 0x0e, 0x6d, 0x33, 0xf4,
0x7c, 0xbd, 0xba, 0x58, 0x56, 0x24, 0xd9, 0x70, 0xba, 0xeb, 0xc3, 0xa1, 0x77, 0xe8, 0x86, 0x38,
0x01, 0x1a, 0x9f, 0x3e, 0x05, 0x0d, 0xd1, 0x12, 0x7a, 0x0f, 0xda, 0x26, 0x47, 0x6c, 0xef, 0x7b,
0x0f, 0xf4, 0x32, 0xd3, 0x78, 0x36, 0xd5, 0x2d, 0xa1, 0xd1, 0xa5, 0x90, 0x5e, 0x09, 0xcb, 0x0c,
0xd4, 0x87, 0x59, 0x51, 0xdc, 0x24, 0xa1, 0x69, 0x3b, 0x81, 0xfe, 0x0f, 0x2e, 0xb2, 0x90, 0x23,
0x22, 0x60, 0xbd, 0x12, 0x4e, 0x11, 0xd1, 0x1b, 0xd0, 0xdc, 0x75, 0xbc, 0xe1, 0xc1, 0xba, 0xc5,
0x87, 0xda, 0x5e, 0xd1, 0x53, 0x1a, 0x37, 0xe8, 0xe3, 0xee, 0xba, 0x65, 0xf5, 0x4a, 0x38, 0xc6,
0xd2, 0x31, 0xb0, 0xdf, 0x9b, 0xc4, 0x21, 0x21, 0x11, 0xf3, 0xf0, 0x6c, 0x26, 0x95, 0x43, 0xe8,
0x18, 0x24, 0x06, 0xda, 0x84, 0xf6, 0x9e, 0xed, 0x90, 0x60, 0x67, 0xe2, 0x78, 0xa6, 0xa5, 0x6b,
0x4c, 0x60, 0x31, 0x53, 0xe0, 0x56, 0x82, 0xa3, 0x2a, 0x12, 0x0d, 0xbd, 0x0b, 0xad, 0xb1, 0xe9,
0x1f, 0x04, 0x7d, 0x77, 0xcf, 0xd3, 0x6b, 0x99, 0x73, 0xc0, 0x35, 0xee, 0x44, 0xa8, 0x5e, 0x09,
0x27, 0x14, 0x3a, 0x93, 0xac, 0x53, 0xdb, 0x24, 0xbc, 0x65, 0x13, 0xc7, 0x0a, 0xf4, 0x3a, 0x13,
0x39, 0x9f, 0x29, 0xb2, 0x4d, 0xc2, 0x2e, 0x87, 0xd1, 0x99, 0x54, 0x89, 0xe8, 0x47, 0xf0, 0x74,
0x54, 0xb3, 0xb1, 0x6f, 0x3b, 0x96, 0x4f, 0xdc, 0xbe, 0x15, 0xe8, 0x0d, 0xa6, 0x77, 0x29, 0x57,
0x4f, 0xc2, 0xf6, 0x4a, 0x38, 0x4b, 0x02, 0xfd, 0x18, 0xce, 0x46, 0xd5, 0x98, 0x04, 0xa1, 0x6f,
0x0f, 0xe9, 0x46, 0x08, 0xf4, 0x26, 0x93, 0xbe, 0x9c, 0x2b, 0x2d, 0x83, 0x7b, 0x25, 0x9c, 0x29,
0x82, 0x2c, 0x38, 0x17, 0xd5, 0xdf, 0x30, 0x87, 0x07, 0x23, 0xdf, 0x3b, 0x74, 0xad, 0x0d, 0xcf,
0xf1, 0x7c, 0xbd, 0xc5, 0xf4, 0xaf, 0xe6, 0xea, 0xa7, 0xf0, 0xbd, 0x12, 0xce, 0x93, 0x42, 0x1b,
0x70, 0x26, 0x7a, 0x74, 0x8f, 0x3c, 0x0c, 0x75, 0x60, 0xd2, 0xcf, 0xe5, 0x4a, 0x53, 0x50, 0xaf,
0x84, 0x15, 0x92, 0x2c, 0x42, 0x43, 0x42, 0x6f, 0x17, 0x88, 0x50, 0x90, 0x2c, 0x42, 0xcb, 0xb2,
0xc8, 0x6d, 0xdb, 0x3d, 0xd0, 0x67, 0x0a, 0x44, 0x28, 0x48, 0x16, 0xa1, 0x65, 0x74, 0x17, 0x3a,
0xf1, 0x48, 0x3d, 0xef, 0x80, 0xc6, 0x93, 0x3e, 0xcb, 0x84, 0x2e, 0xe4, 0xcf, 0x96, 0x00, 0xf6,
0x4a, 0xf8, 0x18, 0x19, 0xdd, 0x82, 0x99, 0xa8, 0x6e, 0xdd, 0xb1, 0x47, 0xae, 0x3e, 0x37, 0x25,
0x96, 0xa9, 0x1a, 0x43, 0xf5, 0x4a, 0x58, 0xa5, 0xa1, 0xdb, 0x30, 0x17, 0x55, 0x44, 0xa9, 0xa1,
0x33, 0x65, 0x67, 0x51, 0xa5, 0x24, 0x37, 0xa4, 0xa9, 0xe8, 0x7d, 0xb1, 0xc9, 0x69, 0x95, 0x7d,
0xa4, 0x3f, 0xc5, 0x94, 0xe6, 0xf3, 0x95, 0xec, 0xa3, 0x78, 0x97, 0x73, 0x0a, 0x22, 0x49, 0x74,
0x6d, 0x9a, 0xa1, 0x79, 0x64, 0x93, 0x07, 0x98, 0x0c, 0x3d, 0xdf, 0x0a, 0x74, 0xc4, 0xd4, 0x5e,
0xc8, 0x57, 0x13, 0xf8, 0xae, 0x20, 0xc8, 0xe1, 0x95, 0xd2, 0x42, 0xf7, 0x93, 0x1d, 0x12, 0x3d,
0xfa, 0xd0, 0x26, 0x0f, 0xf4, 0xa7, 0x59, 0x1b, 0x57, 0x8a, 0xdb, 0xa0, 0x68, 0x79, 0x8b, 0xc8,
0x2a, 0xf1, 0x20, 0x78, 0xe6, 0x52, 0x1a, 0x38, 0x3b, 0x65, 0x10, 0x1c, 0x7e, 0xac, 0x8d, 0x3c,
0x2d, 0xf4, 0x26, 0xb4, 0x78, 0xf3, 0xf4, 0xa5, 0xb0, 0xc0, 0x84, 0xbf, 0x97, 0xdd, 0x73, 0xfe,
0x4a, 0x48, 0xd0, 0x34, 0x7c, 0x0e, 0x03, 0xe2, 0xb3, 0xc7, 0x1f, 0x78, 0xb6, 0xab, 0x9f, 0xcf,
0x0c, 0x9f, 0x9d, 0x80, 0xf8, 0x42, 0x83, 0xa2, 0x68, 0xf8, 0x28, 0x34, 0x45, 0xe7, 0x36, 0xd9,
0x0b, 0xf5, 0xc5, 0x22, 0x1d, 0x8a, 0x52, 0x74, 0x68, 0x05, 0xcd, 0x58, 0x71, 0xc5, 0x36, 0x71,
0xc8, 0x30, 0xc4, 0xa6, 0x3b, 0x22, 0xfa, 0x85, 0xcc, 0x8c, 0x25, 0xc9, 0x49, 0x60, 0xba, 0x1c,
0x59, 0x22, 0x68, 0x07, 0x50, 0x5c, 0x4f, 0xf3, 0x02, 0x97, 0x5e, 0x62, 0xd2, 0x17, 0xf3, 0xa5,
0x63, 0x68, 0xaf, 0x84, 0x33, 0x04, 0xd0, 0x0b, 0xa0, 0x4d, 0x6c, 0x77, 0xa4, 0x5b, 0x4c, 0xe8,
0xe9, 0x94, 0xd0, 0xc0, 0x76, 0x47, 0xbd, 0x12, 0x66, 0x10, 0xf4, 0x36, 0xc0, 0xc4, 0xf7, 0x86,
0x24, 0x08, 0xb6, 0xc8, 0x03, 0x9d, 0x30, 0x82, 0x91, 0x26, 0x70, 0x40, 0x77, 0x8b, 0x2d, 0xba,
0x84, 0x47, 0x37, 0x61, 0x46, 0x94, 0x76, 0x26, 0x96, 0x19, 0x12, 0x7d, 0x2f, 0x33, 0x05, 0x45,
0x02, 0x1c, 0x44, 0xe7, 0x58, 0x61, 0xd1, 0x37, 0xb0, 0xa8, 0xd8, 0xf4, 0x5c, 0xa2, 0x8f, 0x32,
0xdf, 0xc0, 0x91, 0x08, 0x85, 0xd0, 0xbd, 0x29, 0x31, 0x6e, 0x34, 0xa0, 0x76, 0x64, 0x3a, 0x87,
0xc4, 0xf8, 0x5b, 0x19, 0x1a, 0xc2, 0x29, 0x18, 0x5b, 0xa0, 0xb1, 0x88, 0x3a, 0x0b, 0x35, 0xdb,
0xb5, 0xc8, 0x43, 0xe6, 0x4e, 0x6a, 0x98, 0x17, 0xd0, 0x2b, 0xd0, 0x10, 0xfe, 0x41, 0x98, 0x85,
0x3c, 0xe7, 0x13, 0xc1, 0x8c, 0x8f, 0xa1, 0x11, 0x65, 0x93, 0x79, 0x68, 0x4d, 0x7c, 0x8f, 0xbe,
0xbd, 0xfb, 0x16, 0x93, 0x6d, 0xe1, 0xa4, 0x02, 0xbd, 0x0a, 0x0d, 0x4b, 0x64, 0x2c, 0x2e, 0x7d,
0xae, 0xcb, 0x2d, 0x5e, 0x37, 0xb2, 0x78, 0xdd, 0x6d, 0x66, 0xf1, 0x70, 0x84, 0x33, 0xfe, 0xb5,
0x0a, 0x35, 0xb6, 0x88, 0xc6, 0x6b, 0x50, 0xa5, 0xa6, 0xe4, 0x25, 0xa8, 0xb3, 0x3d, 0x11, 0x59,
0xbd, 0xb3, 0xa9, 0xde, 0x31, 0x30, 0x16, 0x18, 0xe3, 0xb3, 0xaa, 0x18, 0xeb, 0x33, 0x50, 0xf7,
0x3d, 0x2f, 0x8c, 0x7b, 0x25, 0x4a, 0x92, 0x5c, 0xa5, 0x58, 0x0e, 0xad, 0x25, 0x03, 0xa8, 0x32,
0x78, 0x61, 0xca, 0x8d, 0x47, 0x82, 0xae, 0x81, 0x46, 0x81, 0xcc, 0x05, 0xcd, 0xae, 0x9c, 0x8b,
0x89, 0xdb, 0x63, 0xd3, 0x0f, 0x79, 0x9c, 0x3e, 0x9a, 0x10, 0xcc, 0x40, 0x68, 0x01, 0xc0, 0xdb,
0xfd, 0x29, 0x19, 0x86, 0xb4, 0x8e, 0x99, 0x9e, 0x16, 0x96, 0x6a, 0x90, 0x05, 0x28, 0x32, 0xcb,
0xc1, 0x80, 0xf8, 0x77, 0xd9, 0x13, 0xbd, 0xce, 0xfa, 0xf4, 0x7a, 0x6e, 0x42, 0xe9, 0x62, 0xc1,
0xf9, 0xc8, 0x0e, 0xf7, 0x3f, 0xa4, 0x71, 0x11, 0x73, 0x71, 0x86, 0x9e, 0xf1, 0x33, 0x30, 0xf2,
0x19, 0xc8, 0x80, 0x26, 0xef, 0x51, 0x3c, 0xa9, 0x71, 0x19, 0xad, 0x43, 0x2b, 0xd6, 0x13, 0x33,
0x9b, 0x6c, 0xdb, 0xd8, 0xe6, 0x1f, 0x13, 0xc7, 0x09, 0xcb, 0xd8, 0x80, 0xb6, 0x64, 0x0a, 0x91,
0x0e, 0x0d, 0xb6, 0x08, 0x71, 0x63, 0x51, 0x91, 0xf6, 0x83, 0xc6, 0xd7, 0xc0, 0x0c, 0xf7, 0x59,
0x53, 0x2d, 0x1c, 0x97, 0x8d, 0x9f, 0x40, 0x5d, 0x78, 0x51, 0x43, 0x98, 0x60, 0xea, 0xd7, 0xca,
0x1c, 0x15, 0x95, 0x8d, 0x35, 0x68, 0x46, 0x59, 0xda, 0xe8, 0x82, 0xc6, 0x32, 0xf5, 0x2c, 0x54,
0xec, 0xa8, 0xa9, 0x8a, 0x6d, 0xd1, 0x00, 0xa2, 0xcf, 0xe3, 0xd3, 0x82, 0x28, 0x19, 0xf7, 0xa1,
0x15, 0xfb, 0x4e, 0x74, 0x17, 0xce, 0x08, 0xdf, 0xc9, 0x13, 0x16, 0x6d, 0x68, 0x76, 0xe5, 0x5a,
0x56, 0x4c, 0x75, 0x37, 0xe8, 0x69, 0xc3, 0xe5, 0x36, 0x88, 0x59, 0xd7, 0x2e, 0x5b, 0x7f, 0x45,
0xc0, 0xf8, 0xa5, 0x01, 0xd5, 0x6d, 0x12, 0x1a, 0xb7, 0x93, 0x2d, 0x96, 0xee, 0xd8, 0x57, 0xd8,
0x54, 0x7f, 0xac, 0x4a, 0x03, 0xfe, 0xb2, 0x0c, 0x8d, 0xe8, 0x1d, 0x7b, 0xc2, 0x41, 0xd3, 0x36,
0x0f, 0x59, 0x86, 0xb2, 0xc4, 0x3e, 0xc8, 0x6f, 0x53, 0xe0, 0xd0, 0x6b, 0xd0, 0xb4, 0xdd, 0x80,
0xf8, 0x94, 0xa3, 0x4d, 0xe7, 0xc4, 0x40, 0x74, 0x05, 0x66, 0xf9, 0xef, 0x81, 0x17, 0xd8, 0x34,
0x2c, 0xd8, 0x56, 0x98, 0xc1, 0xa9, 0x5a, 0x1a, 0x1c, 0x3e, 0x19, 0x7b, 0x47, 0xc4, 0x62, 0x7b,
0xa0, 0x85, 0xa3, 0x22, 0xcd, 0x71, 0xa1, 0x17, 0x9a, 0x0e, 0xf3, 0xe8, 0x33, 0x98, 0x17, 0x8c,
0x3f, 0x94, 0x4f, 0xb7, 0xca, 0xe8, 0x5d, 0xd0, 0xe8, 0x2f, 0x71, 0x06, 0x7a, 0x71, 0xea, 0x82,
0x2a, 0x66, 0x00, 0x33, 0x1e, 0xd5, 0xf5, 0xf6, 0xf6, 0x02, 0x12, 0xb2, 0xed, 0x3f, 0x83, 0x45,
0x89, 0x76, 0xcf, 0xb1, 0xc7, 0x76, 0x28, 0xc6, 0xc5, 0x0b, 0x46, 0x1f, 0xea, 0xe2, 0xc0, 0x91,
0xee, 0xdf, 0x32, 0xd4, 0xf7, 0xf8, 0x19, 0xa6, 0x60, 0xad, 0x05, 0xcc, 0x78, 0x0f, 0xda, 0xf2,
0x31, 0x23, 0xad, 0xb7, 0x08, 0xed, 0xa1, 0x74, 0x90, 0xe1, 0xdb, 0x47, 0xae, 0x32, 0x08, 0x9c,
0x51, 0xce, 0x12, 0x69, 0x85, 0x9b, 0x70, 0xc6, 0x97, 0x0f, 0x2c, 0x95, 0x94, 0x45, 0x96, 0x67,
0x48, 0x16, 0xc2, 0x0a, 0xcd, 0xf8, 0x01, 0xcc, 0xa5, 0xcf, 0x13, 0xe9, 0x96, 0xae, 0xc2, 0xdc,
0x6e, 0xea, 0xf4, 0xc2, 0x17, 0x29, 0x5d, 0x6d, 0xf4, 0xa1, 0xc6, 0xad, 0x72, 0x5a, 0xe2, 0x15,
0xa8, 0x99, 0xcc, 0x7a, 0x57, 0x58, 0x12, 0x36, 0x32, 0x7b, 0xc9, 0xa8, 0x98, 0x03, 0x8d, 0xbf,
0x68, 0xa0, 0xb1, 0x83, 0x49, 0x5a, 0xea, 0x0d, 0xd0, 0x42, 0x7a, 0xca, 0xe1, 0xe3, 0x5d, 0x9a,
0x7a, 0xca, 0xe1, 0xbe, 0x84, 0xe1, 0xd1, 0x9b, 0x50, 0x0b, 0xc2, 0x47, 0x4e, 0x74, 0x9c, 0xbe,
0x38, 0x9d, 0xb8, 0x4d, 0xa1, 0x98, 0x33, 0x28, 0x95, 0x25, 0x07, 0x71, 0x90, 0x2e, 0xa0, 0xb2,
0xac, 0x84, 0x39, 0x03, 0xbd, 0x07, 0x8d, 0xe1, 0x3e, 0x19, 0x1e, 0x10, 0x4b, 0x9c, 0xa0, 0x2f,
0x4f, 0x27, 0x6f, 0x70, 0x30, 0x8e, 0x58, 0xb4, 0xed, 0x21, 0x9b, 0xf2, 0xfa, 0x49, 0xda, 0x66,
0xcb, 0x80, 0x39, 0xc3, 0x98, 0x17, 0x33, 0x78, 0x56, 0x78, 0x11, 0x31, 0x89, 0xc2, 0x98, 0xdc,
0x82, 0x1a, 0x1b, 0x24, 0x7a, 0x47, 0x7e, 0x3c, 0xbb, 0xf2, 0x7c, 0x71, 0xd2, 0x14, 0x93, 0x13,
0xeb, 0xb0, 0x11, 0xab, 0x3a, 0xed, 0x93, 0xe8, 0x88, 0x99, 0xe2, 0x3a, 0xe7, 0xa1, 0x21, 0x06,
0xaf, 0x76, 0xb8, 0x19, 0x01, 0x9e, 0x83, 0x1a, 0x8f, 0xcf, 0xec, 0xf1, 0xfc, 0xae, 0x0c, 0x55,
0x7a, 0x2a, 0x4a, 0xc7, 0xcb, 0xf5, 0x68, 0xdd, 0x8b, 0x02, 0x66, 0xd3, 0x3e, 0x52, 0x96, 0xdd,
0xb8, 0x19, 0xcd, 0xd0, 0xdb, 0xea, 0x0c, 0x5d, 0x99, 0x9e, 0x85, 0x12, 0x19, 0xde, 0xb1, 0x5f,
0xd7, 0x40, 0x63, 0xa7, 0xe3, 0xac, 0x48, 0xa6, 0x2e, 0xa3, 0xa8, 0x63, 0x94, 0xdc, 0x95, 0x3c,
0x0a, 0x8b, 0x64, 0x33, 0x2c, 0x8e, 0x64, 0x46, 0xdc, 0xa6, 0x50, 0xcc, 0x19, 0xb4, 0xc9, 0xb1,
0x3d, 0x26, 0x22, 0x90, 0x0b, 0x9a, 0xbc, 0x63, 0x8f, 0x09, 0x66, 0x78, 0xca, 0xdb, 0x37, 0x83,
0x7d, 0x11, 0xc3, 0x05, 0xbc, 0x9e, 0x19, 0xec, 0x63, 0x86, 0xa7, 0x3c, 0xd7, 0x1c, 0x13, 0x11,
0xbc, 0x05, 0xbc, 0x2d, 0x93, 0xb6, 0x47, 0xf1, 0x94, 0x17, 0xd8, 0x9f, 0x10, 0xf1, 0x81, 0xa7,
0x80, 0xb7, 0x6d, 0x7f, 0x42, 0x30, 0xc3, 0xd3, 0x90, 0xa7, 0x2a, 0x39, 0x21, 0xf2, 0x1c, 0xd4,
0x3e, 0xb2, 0xad, 0x70, 0x5f, 0x7d, 0x5c, 0x53, 0x76, 0x04, 0x9d, 0xa5, 0x53, 0xed, 0x08, 0x79,
0x92, 0xb9, 0xce, 0x26, 0x68, 0xcc, 0x2b, 0x9e, 0x2a, 0x6c, 0x92, 0x45, 0x16, 0x2a, 0xf3, 0xa0,
0xd1, 0x89, 0xcc, 0x19, 0xca, 0x3c, 0x68, 0x74, 0x79, 0xf2, 0x9f, 0xd2, 0x49, 0x51, 0x9f, 0x56,
0xa3, 0xa7, 0xbf, 0xa8, 0x82, 0xc6, 0xbe, 0xb4, 0xa4, 0x03, 0xf2, 0x87, 0x30, 0x13, 0x9a, 0xfe,
0x88, 0x70, 0x57, 0xdc, 0x8f, 0x3e, 0x5a, 0x5e, 0x9b, 0xfa, 0xfd, 0xa6, 0x7b, 0x4f, 0xa6, 0x60,
0x55, 0xe1, 0xe4, 0x59, 0x97, 0x49, 0x29, 0x59, 0xf7, 0xed, 0xf8, 0x95, 0xab, 0x15, 0x7c, 0xe6,
0x63, 0x5c, 0xfe, 0xe2, 0x8e, 0xdf, 0xbf, 0x97, 0x61, 0x46, 0xe9, 0xd8, 0xd7, 0x9a, 0x05, 0xe5,
0xce, 0x72, 0x9d, 0xd5, 0xd8, 0x39, 0xbc, 0xac, 0xa6, 0xc1, 0x5c, 0xa3, 0x20, 0x88, 0x7f, 0xaa,
0x41, 0x33, 0xfe, 0x52, 0x95, 0x5e, 0x90, 0x55, 0xa8, 0x1e, 0xfa, 0x8e, 0x58, 0x86, 0xcb, 0x85,
0x5f, 0xbf, 0xba, 0x3b, 0xbe, 0x83, 0x29, 0x83, 0x8e, 0x26, 0xb4, 0xc3, 0x78, 0xda, 0x9f, 0x2f,
0xa6, 0xde, 0xa3, 0x70, 0xcc, 0x59, 0xe8, 0x2e, 0xb4, 0x2d, 0x12, 0x0c, 0x7d, 0x7b, 0xc2, 0xbc,
0x1f, 0x9f, 0xff, 0x97, 0x8b, 0x45, 0x36, 0x13, 0x12, 0x96, 0x15, 0x50, 0x1f, 0x5a, 0xf6, 0xd8,
0x1c, 0x91, 0x5e, 0x92, 0x44, 0xae, 0x15, 0xcb, 0xf5, 0x23, 0x0a, 0x4e, 0xd8, 0xb4, 0x6f, 0x7b,
0xe6, 0x91, 0x3d, 0xf4, 0x5c, 0x26, 0x56, 0x3f, 0x69, 0xdf, 0x6e, 0x25, 0x24, 0x2c, 0x2b, 0xa0,
0x35, 0x91, 0x86, 0x1b, 0x05, 0xdf, 0xb3, 0x92, 0xa9, 0x8a, 0x53, 0xb1, 0xf1, 0x2c, 0x54, 0x77,
0x7c, 0x27, 0x3f, 0xdd, 0xb0, 0x59, 0xcd, 0x79, 0x7c, 0x11, 0xda, 0xd2, 0x7c, 0xe5, 0x80, 0x2e,
0x40, 0x2b, 0x9e, 0x85, 0x7c, 0x1d, 0x69, 0x6c, 0x39, 0xa0, 0x77, 0x44, 0x4e, 0xfa, 0xbe, 0x1a,
0xe6, 0xe7, 0x53, 0x61, 0x4e, 0x03, 0x7b, 0xe0, 0x13, 0xe6, 0xa2, 0xe5, 0x64, 0xf4, 0xc5, 0x39,
0xf6, 0x0e, 0x73, 0xbe, 0xe6, 0xf3, 0xd0, 0x3d, 0x98, 0xa3, 0xa6, 0x7d, 0xd7, 0x0c, 0x48, 0xde,
0x49, 0xe8, 0x55, 0x7a, 0xc2, 0xe0, 0x1f, 0x35, 0x2b, 0x05, 0x27, 0x1e, 0x81, 0xfb, 0xce, 0xc5,
0xff, 0xef, 0xb8, 0xf8, 0xbf, 0xe6, 0xb9, 0xf8, 0x55, 0xc5, 0xc5, 0x5f, 0xcc, 0xbb, 0x9a, 0x72,
0x8e, 0xd9, 0xf8, 0x35, 0xf5, 0x85, 0x72, 0xa9, 0x80, 0xa9, 0xbc, 0x51, 0xd6, 0x54, 0x1f, 0x5f,
0xc4, 0x55, 0x8c, 0xfc, 0xfb, 0x69, 0x23, 0x7f, 0xa5, 0x80, 0x7d, 0xcc, 0xc9, 0xaf, 0xa9, 0x4e,
0xbe, 0xa8, 0xf5, 0x6f, 0xb1, 0x95, 0xff, 0x7d, 0x8e, 0x95, 0x7f, 0x53, 0xb5, 0xf2, 0x53, 0xa2,
0xe6, 0x9b, 0xf2, 0xf2, 0xbf, 0xcd, 0xf3, 0xf2, 0xab, 0x8a, 0x97, 0x9f, 0xd2, 0xb3, 0xb4, 0x99,
0x5f, 0x53, 0xcd, 0xfc, 0xa5, 0x02, 0xa6, 0xe2, 0xe6, 0x57, 0x15, 0x37, 0x5f, 0xd4, 0xa8, 0x64,
0xe7, 0x57, 0x15, 0x3b, 0x5f, 0x44, 0x94, 0xfc, 0xfc, 0xaa, 0xe2, 0xe7, 0x8b, 0x88, 0x92, 0xa1,
0x5f, 0x55, 0x0c, 0x7d, 0x11, 0xf1, 0x3b, 0x47, 0x7f, 0x3a, 0x47, 0xff, 0xab, 0x3c, 0x47, 0x8f,
0xb3, 0x1d, 0xfd, 0x4b, 0xf9, 0xf3, 0x5f, 0x6c, 0xe9, 0x4f, 0x9e, 0x81, 0x8f, 0x7b, 0xfa, 0x77,
0x52, 0x9e, 0xfe, 0x72, 0x01, 0xf9, 0xff, 0xd4, 0xd4, 0xff, 0x79, 0x9a, 0xa9, 0xbf, 0x2e, 0x9b,
0xfa, 0x29, 0x6f, 0x91, 0xe3, 0xae, 0xfe, 0x5d, 0xd5, 0xd5, 0x5f, 0x3d, 0x01, 0x57, 0xb1, 0xf5,
0x83, 0x2c, 0x5b, 0xdf, 0x3d, 0x81, 0x4a, 0xae, 0xaf, 0xff, 0xe0, 0xb8, 0xaf, 0x7f, 0xe9, 0x04,
0x7a, 0x99, 0xc6, 0x7e, 0x90, 0x65, 0xec, 0x4f, 0xd2, 0xbb, 0x5c, 0x67, 0xff, 0x96, 0xe2, 0xec,
0x9f, 0x3f, 0xc9, 0x74, 0x7d, 0xfb, 0xac, 0xfd, 0x97, 0x15, 0xd0, 0x76, 0x02, 0xe2, 0x1b, 0xff,
0xae, 0x44, 0x37, 0x7e, 0xd7, 0x41, 0x63, 0x37, 0xd6, 0xd2, 0x8d, 0x64, 0x39, 0x75, 0x23, 0xa9,
0xfc, 0x05, 0x2a, 0xb9, 0x91, 0xbc, 0x0e, 0x1a, 0xbb, 0xa3, 0x3e, 0x3d, 0xf3, 0xe7, 0x65, 0x68,
0x25, 0xf7, 0xc5, 0xa7, 0xe6, 0xcb, 0xd7, 0x54, 0x15, 0xf5, 0x9a, 0xea, 0x45, 0xa8, 0xf9, 0xec,
0x52, 0x88, 0xef, 0x9a, 0xf4, 0x45, 0x23, 0x6b, 0x10, 0x73, 0x88, 0x41, 0xa0, 0x2d, 0xdf, 0x86,
0x9f, 0xbe, 0x1b, 0x97, 0xc4, 0x7f, 0x4d, 0xfa, 0x56, 0xb0, 0xee, 0xfb, 0xe6, 0x23, 0x71, 0x26,
0x50, 0x2b, 0x69, 0x36, 0x1f, 0xd8, 0xee, 0x28, 0xfb, 0x22, 0xd8, 0xf8, 0xac, 0x0c, 0x0d, 0x71,
0xb7, 0x6c, 0xac, 0x42, 0x75, 0x8b, 0x3c, 0xa0, 0x1d, 0x11, 0xb7, 0xcb, 0xc7, 0x3a, 0x72, 0x87,
0x8d, 0x42, 0xe0, 0x71, 0x04, 0x33, 0xd6, 0xa0, 0x2e, 0xee, 0xb2, 0x4f, 0xcf, 0xbd, 0x0e, 0xda,
0xa6, 0xe7, 0x7e, 0x05, 0xe6, 0x92, 0x09, 0x33, 0x98, 0x04, 0x13, 0xcf, 0x0d, 0xc8, 0x37, 0xf4,
0x17, 0xc1, 0xa5, 0xff, 0x54, 0xa0, 0xc6, 0x5a, 0xa7, 0x91, 0x1b, 0xcd, 0x53, 0xc6, 0x49, 0x2f,
0xf1, 0x63, 0xb3, 0xd2, 0xcd, 0xbd, 0xd2, 0x6f, 0xd9, 0x87, 0xad, 0xc8, 0x3e, 0x6c, 0x56, 0xfa,
0x23, 0x8e, 0xca, 0x50, 0xfc, 0xd7, 0x5b, 0xd0, 0x9c, 0xf8, 0xde, 0xc8, 0xa7, 0x13, 0xa4, 0xa5,
0xfe, 0xda, 0xa6, 0xd2, 0x06, 0x02, 0x86, 0x63, 0x82, 0xb1, 0x05, 0xcd, 0xa8, 0x36, 0xb9, 0x2c,
0x13, 0x6f, 0x75, 0x56, 0x40, 0x08, 0x34, 0xcb, 0x73, 0xf9, 0x18, 0xaa, 0x98, 0xfd, 0xa6, 0x61,
0x2e, 0xe6, 0x89, 0x75, 0xb4, 0x85, 0xa3, 0xe2, 0xd2, 0x05, 0x91, 0x06, 0x66, 0xa0, 0xb5, 0xe9,
0x7b, 0x13, 0x76, 0x85, 0xdb, 0x29, 0x21, 0x80, 0x7a, 0x7f, 0x3c, 0xf1, 0xfc, 0xb0, 0x53, 0x5e,
0x5a, 0x8f, 0xec, 0x50, 0x13, 0xb4, 0x2d, 0xcf, 0x25, 0x9d, 0x12, 0x6a, 0x43, 0x03, 0x1f, 0xba,
0xae, 0xed, 0x8e, 0x3a, 0x65, 0x5a, 0x4d, 0xd7, 0xbd, 0x53, 0x41, 0x67, 0xa0, 0xb9, 0x61, 0xba,
0x43, 0xe2, 0x10, 0xab, 0x53, 0x45, 0x2d, 0xa8, 0xdd, 0xf4, 0x7d, 0xcf, 0xef, 0x68, 0x2f, 0xde,
0x87, 0x59, 0xf5, 0xde, 0x9c, 0x92, 0x06, 0xe6, 0x88, 0x6a, 0x35, 0x41, 0xeb, 0x79, 0x63, 0xd2,
0x29, 0xa3, 0x39, 0x68, 0x0f, 0xf8, 0x9f, 0x0f, 0xd8, 0xa3, 0x0a, 0x6d, 0x66, 0xdd, 0x1f, 0xee,
0xdb, 0x47, 0xa4, 0x53, 0xa5, 0x4f, 0x6f, 0xf8, 0xc4, 0xb4, 0x86, 0xfe, 0xe1, 0x78, 0x37, 0xe8,
0x68, 0xa8, 0xc1, 0xee, 0x5a, 0x3b, 0xb5, 0x1b, 0xf3, 0x7f, 0x7f, 0xbc, 0x50, 0xfe, 0xfc, 0xf1,
0x42, 0xf9, 0x9f, 0x8f, 0x17, 0xca, 0xbf, 0x79, 0xb2, 0x50, 0xfa, 0xfc, 0xc9, 0x42, 0xe9, 0x8b,
0x27, 0x0b, 0xa5, 0x8f, 0x2b, 0x93, 0xdd, 0xdd, 0x3a, 0x7b, 0xdb, 0xbe, 0xf6, 0xdf, 0x00, 0x00,
0x00, 0xff, 0xff, 0xa9, 0xb6, 0x50, 0xd1, 0x11, 0x2b, 0x00, 0x00,
0x1d, 0xde, 0x07, 0xf7, 0xf5, 0x5b, 0x4b, 0xda, 0x8c, 0x85, 0x98, 0x65, 0x14, 0x59, 0x96, 0x1f,
0x71, 0xe2, 0x64, 0x95, 0x28, 0x69, 0xa4, 0x28, 0x4f, 0x59, 0xb2, 0xb1, 0x9b, 0xda, 0xb2, 0x32,
0xb2, 0x92, 0x22, 0xcd, 0xa1, 0xd4, 0x72, 0xb4, 0x62, 0xc5, 0x25, 0x17, 0x24, 0x25, 0xc7, 0xe9,
0xb1, 0xb7, 0xa2, 0x2d, 0x7a, 0x28, 0x5a, 0x14, 0x68, 0x4f, 0x3d, 0xf5, 0x52, 0xa0, 0x28, 0x0a,
0xf4, 0x4f, 0x68, 0x6f, 0x3e, 0xe6, 0x58, 0xd8, 0x97, 0x5e, 0x73, 0x2e, 0x50, 0x14, 0xf3, 0x20,
0x39, 0x43, 0x91, 0x4b, 0x29, 0x48, 0x80, 0x16, 0xc9, 0x6d, 0x67, 0xe6, 0xfb, 0xbe, 0x79, 0xfd,
0x66, 0xe6, 0x1b, 0xce, 0xc2, 0xd3, 0xe3, 0xbd, 0xa5, 0xb1, 0xef, 0x85, 0x5e, 0xb0, 0x44, 0x8e,
0x89, 0x1b, 0x06, 0x5d, 0x96, 0x42, 0x0d, 0xd3, 0x7d, 0x18, 0x3e, 0x1c, 0x13, 0xe3, 0xca, 0xf8,
0x70, 0xb8, 0xe4, 0xd8, 0x7b, 0x4b, 0xe3, 0xbd, 0xa5, 0x91, 0x67, 0x11, 0x27, 0x82, 0xb3, 0x84,
0x80, 0x1b, 0xcf, 0x4b, 0x28, 0x9f, 0x38, 0x66, 0x68, 0x7b, 0x6e, 0x04, 0x8c, 0xd2, 0x02, 0x3a,
0x37, 0xf4, 0xbc, 0xa1, 0x43, 0x78, 0xe9, 0xde, 0xd1, 0xfe, 0x52, 0x10, 0xfa, 0x47, 0x83, 0x90,
0x97, 0x2e, 0xfe, 0xf9, 0x03, 0xa8, 0xdd, 0xa2, 0x0d, 0x41, 0xcb, 0xd0, 0x1c, 0x91, 0x20, 0x30,
0x87, 0x24, 0xd0, 0xcb, 0x0b, 0xd5, 0xeb, 0xed, 0xe5, 0xa7, 0xbb, 0xa2, 0x51, 0x5d, 0x86, 0xe8,
0xde, 0xe5, 0xc5, 0x38, 0xc6, 0xa1, 0x39, 0x68, 0x0d, 0x3c, 0x37, 0x24, 0x9f, 0x86, 0x7d, 0x4b,
0xaf, 0x2c, 0x94, 0xaf, 0xb7, 0x70, 0x92, 0x81, 0x5e, 0x83, 0x96, 0xed, 0xda, 0xa1, 0x6d, 0x86,
0x9e, 0xaf, 0x57, 0x17, 0xca, 0x8a, 0x24, 0xeb, 0x4e, 0x77, 0x7d, 0x30, 0xf0, 0x8e, 0xdc, 0x10,
0x27, 0x40, 0xe3, 0xb7, 0x4f, 0x41, 0x43, 0xd4, 0x84, 0xde, 0x85, 0xb6, 0xc9, 0x11, 0x3b, 0x07,
0xde, 0x03, 0xbd, 0xcc, 0x34, 0x9e, 0x49, 0x35, 0x4b, 0x68, 0x74, 0x29, 0xa4, 0x57, 0xc2, 0x32,
0x03, 0xf5, 0x61, 0x5a, 0x24, 0x37, 0x49, 0x68, 0xda, 0x4e, 0xa0, 0xff, 0x83, 0x8b, 0xcc, 0xe7,
0x88, 0x08, 0x58, 0xaf, 0x84, 0x53, 0x44, 0xf4, 0x3a, 0x34, 0xf7, 0x1c, 0x6f, 0x70, 0xb8, 0x6e,
0xf1, 0xae, 0xb6, 0x97, 0xf5, 0x94, 0xc6, 0x4d, 0x5a, 0xdc, 0x5d, 0xb7, 0xac, 0x5e, 0x09, 0xc7,
0x58, 0xda, 0x07, 0xf6, 0x7b, 0x93, 0x38, 0x24, 0x24, 0x62, 0x1c, 0x9e, 0xc9, 0xa4, 0x72, 0x08,
0xed, 0x83, 0xc4, 0x40, 0x9b, 0xd0, 0xde, 0xb7, 0x1d, 0x12, 0xec, 0x8e, 0x1d, 0xcf, 0xb4, 0x74,
0x8d, 0x09, 0x2c, 0x64, 0x0a, 0xdc, 0x4e, 0x70, 0x54, 0x45, 0xa2, 0xa1, 0x77, 0xa0, 0x35, 0x32,
0xfd, 0xc3, 0xa0, 0xef, 0xee, 0x7b, 0x7a, 0x2d, 0x73, 0x0c, 0xb8, 0xc6, 0xdd, 0x08, 0xd5, 0x2b,
0xe1, 0x84, 0x42, 0x47, 0x92, 0x35, 0x6a, 0x87, 0x84, 0xb7, 0x6d, 0xe2, 0x58, 0x81, 0x5e, 0x67,
0x22, 0x17, 0x33, 0x45, 0x76, 0x48, 0xd8, 0xe5, 0x30, 0x3a, 0x92, 0x2a, 0x11, 0x7d, 0x1f, 0xce,
0x47, 0x39, 0x1b, 0x07, 0xb6, 0x63, 0xf9, 0xc4, 0xed, 0x5b, 0x81, 0xde, 0x60, 0x7a, 0x57, 0x72,
0xf5, 0x24, 0x6c, 0xaf, 0x84, 0xb3, 0x24, 0xd0, 0x0f, 0x60, 0x36, 0xca, 0xc6, 0x24, 0x08, 0x7d,
0x7b, 0x40, 0x17, 0x42, 0xa0, 0x37, 0x99, 0xf4, 0xd5, 0x5c, 0x69, 0x19, 0xdc, 0x2b, 0xe1, 0x4c,
0x11, 0x64, 0xc1, 0x85, 0x28, 0xff, 0xa6, 0x39, 0x38, 0x1c, 0xfa, 0xde, 0x91, 0x6b, 0x6d, 0x78,
0x8e, 0xe7, 0xeb, 0x2d, 0xa6, 0x7f, 0x3d, 0x57, 0x3f, 0x85, 0xef, 0x95, 0x70, 0x9e, 0x14, 0xda,
0x80, 0x73, 0x51, 0xd1, 0x7d, 0xf2, 0x69, 0xa8, 0x03, 0x93, 0x7e, 0x36, 0x57, 0x9a, 0x82, 0x7a,
0x25, 0xac, 0x90, 0x64, 0x11, 0x1a, 0x12, 0x7a, 0xbb, 0x40, 0x84, 0x82, 0x64, 0x11, 0x9a, 0x96,
0x45, 0xee, 0xd8, 0xee, 0xa1, 0x3e, 0x55, 0x20, 0x42, 0x41, 0xb2, 0x08, 0x4d, 0xa3, 0x7b, 0xd0,
0x89, 0x7b, 0xea, 0x79, 0x87, 0x34, 0x9e, 0xf4, 0x69, 0x26, 0x74, 0x29, 0x7f, 0xb4, 0x04, 0xb0,
0x57, 0xc2, 0x27, 0xc8, 0xe8, 0x36, 0x4c, 0x45, 0x79, 0xeb, 0x8e, 0x3d, 0x74, 0xf5, 0x99, 0x09,
0xb1, 0x4c, 0xd5, 0x18, 0xaa, 0x57, 0xc2, 0x2a, 0x0d, 0xdd, 0x81, 0x99, 0x28, 0x23, 0xda, 0x1a,
0x3a, 0x13, 0x56, 0x16, 0x55, 0x4a, 0xf6, 0x86, 0x34, 0x15, 0xbd, 0x27, 0x16, 0x39, 0xcd, 0xb2,
0x8f, 0xf5, 0xa7, 0x98, 0xd2, 0x5c, 0xbe, 0x92, 0x7d, 0x1c, 0xaf, 0x72, 0x4e, 0x41, 0x24, 0x89,
0xae, 0x4d, 0x33, 0x34, 0x8f, 0x6d, 0xf2, 0x00, 0x93, 0x81, 0xe7, 0x5b, 0x81, 0x8e, 0x98, 0xda,
0xf3, 0xf9, 0x6a, 0x02, 0xdf, 0x15, 0x04, 0x39, 0xbc, 0x52, 0x5a, 0xe8, 0x93, 0x64, 0x85, 0x44,
0x45, 0x1f, 0xda, 0xe4, 0x81, 0x7e, 0x9e, 0xd5, 0x71, 0xad, 0xb8, 0x0e, 0x8a, 0x96, 0x97, 0x88,
0xac, 0x12, 0x77, 0x82, 0xef, 0x5c, 0x4a, 0x05, 0xb3, 0x13, 0x3a, 0xc1, 0xe1, 0x27, 0xea, 0xc8,
0xd3, 0x42, 0x6f, 0x40, 0x8b, 0x57, 0x4f, 0x0f, 0x85, 0x79, 0x26, 0xfc, 0x9d, 0xec, 0x96, 0xf3,
0x23, 0x21, 0x41, 0xd3, 0xf0, 0x39, 0x0a, 0x88, 0xcf, 0x8a, 0xdf, 0xf7, 0x6c, 0x57, 0xbf, 0x98,
0x19, 0x3e, 0xbb, 0x01, 0xf1, 0x85, 0x06, 0x45, 0xd1, 0xf0, 0x51, 0x68, 0x8a, 0xce, 0x1d, 0xb2,
0x1f, 0xea, 0x0b, 0x45, 0x3a, 0x14, 0xa5, 0xe8, 0xd0, 0x0c, 0xba, 0x63, 0xc5, 0x19, 0x3b, 0xc4,
0x21, 0x83, 0x10, 0x9b, 0xee, 0x90, 0xe8, 0x97, 0x32, 0x77, 0x2c, 0x49, 0x4e, 0x02, 0xd3, 0xe9,
0xc8, 0x12, 0x41, 0xbb, 0x80, 0xe2, 0x7c, 0xba, 0x2f, 0x70, 0xe9, 0x45, 0x26, 0x7d, 0x39, 0x5f,
0x3a, 0x86, 0xf6, 0x4a, 0x38, 0x43, 0x00, 0x3d, 0x0f, 0xda, 0xd8, 0x76, 0x87, 0xba, 0xc5, 0x84,
0xce, 0xa7, 0x84, 0xb6, 0x6d, 0x77, 0xd8, 0x2b, 0x61, 0x06, 0x41, 0x6f, 0x01, 0x8c, 0x7d, 0x6f,
0x40, 0x82, 0x60, 0x8b, 0x3c, 0xd0, 0x09, 0x23, 0x18, 0x69, 0x02, 0x07, 0x74, 0xb7, 0xd8, 0xa4,
0x4b, 0x78, 0x74, 0x0b, 0xa6, 0x44, 0x6a, 0x77, 0x6c, 0x99, 0x21, 0xd1, 0xf7, 0x33, 0xb7, 0xa0,
0x48, 0x80, 0x83, 0xe8, 0x18, 0x2b, 0x2c, 0x7a, 0x02, 0x8b, 0x8c, 0x4d, 0xcf, 0x25, 0xfa, 0x30,
0xf3, 0x04, 0x8e, 0x44, 0x28, 0x84, 0xae, 0x4d, 0x89, 0x71, 0xb3, 0x01, 0xb5, 0x63, 0xd3, 0x39,
0x22, 0xc6, 0x5f, 0xcb, 0xd0, 0x10, 0x4e, 0xc1, 0xd8, 0x02, 0x8d, 0x45, 0xd4, 0x2c, 0xd4, 0x6c,
0xd7, 0x22, 0x9f, 0x32, 0x77, 0x52, 0xc3, 0x3c, 0x81, 0x5e, 0x86, 0x86, 0xf0, 0x0f, 0xc2, 0x2c,
0xe4, 0x39, 0x9f, 0x08, 0x66, 0x7c, 0x0c, 0x8d, 0x68, 0x37, 0x99, 0x83, 0xd6, 0xd8, 0xf7, 0xe8,
0xe9, 0xdd, 0xb7, 0x98, 0x6c, 0x0b, 0x27, 0x19, 0xe8, 0x15, 0x68, 0x58, 0x62, 0xc7, 0xe2, 0xd2,
0x17, 0xba, 0xdc, 0xe2, 0x75, 0x23, 0x8b, 0xd7, 0xdd, 0x61, 0x16, 0x0f, 0x47, 0x38, 0xe3, 0x3f,
0xab, 0x50, 0x63, 0x93, 0x68, 0xbc, 0x0a, 0x55, 0x6a, 0x4a, 0x5e, 0x84, 0x3a, 0x5b, 0x13, 0x91,
0xd5, 0x9b, 0x4d, 0xb5, 0x8e, 0x81, 0xb1, 0xc0, 0x18, 0x8f, 0x34, 0xd1, 0xd7, 0xa7, 0xa1, 0xee,
0x7b, 0x5e, 0x18, 0xb7, 0x4a, 0xa4, 0x24, 0xb9, 0x4a, 0xb1, 0x1c, 0x5a, 0x4b, 0x3a, 0x50, 0x65,
0xf0, 0xc2, 0x2d, 0x37, 0xee, 0x09, 0xba, 0x01, 0x1a, 0x05, 0x32, 0x17, 0x34, 0xbd, 0x7c, 0x21,
0x26, 0xee, 0x8c, 0x4c, 0x3f, 0xe4, 0x71, 0xfa, 0x70, 0x4c, 0x30, 0x03, 0x21, 0x13, 0x66, 0xbd,
0xbd, 0x1f, 0x91, 0x41, 0x48, 0xf3, 0x82, 0x6d, 0xe2, 0xdf, 0x63, 0x29, 0xbd, 0xc6, 0x6a, 0x7d,
0x29, 0x77, 0xcb, 0xe8, 0xde, 0x8b, 0x59, 0x31, 0x09, 0x67, 0x4a, 0x21, 0x0b, 0x50, 0xe4, 0xb7,
0xa5, 0x0a, 0xea, 0xac, 0x82, 0xd7, 0xf2, 0x2b, 0xc0, 0x82, 0xf3, 0x91, 0x1d, 0x1e, 0x7c, 0x48,
0x43, 0x2b, 0xa9, 0x27, 0x43, 0xcf, 0xf8, 0x31, 0x18, 0xf9, 0x0c, 0x64, 0x40, 0x93, 0xb7, 0x2d,
0x9e, 0x97, 0x38, 0x8d, 0xd6, 0xa1, 0x15, 0xeb, 0x89, 0xc9, 0x49, 0x56, 0x7e, 0x7c, 0x53, 0x38,
0x21, 0x8e, 0x13, 0x96, 0xb1, 0x03, 0xe7, 0x33, 0xc6, 0x63, 0x62, 0xad, 0x0b, 0xd0, 0x96, 0x46,
0x8b, 0xd5, 0xdb, 0xc2, 0x72, 0x96, 0xb1, 0x01, 0x6d, 0xc9, 0xac, 0x22, 0x1d, 0x1a, 0x2c, 0x38,
0x62, 0xad, 0x28, 0x49, 0xab, 0xa1, 0x71, 0xbf, 0x6d, 0x86, 0x07, 0x42, 0x27, 0x4e, 0x1b, 0x3f,
0x84, 0xba, 0xf0, 0xc8, 0x86, 0x30, 0xe7, 0xd4, 0x47, 0x96, 0x39, 0x2a, 0x4a, 0x1b, 0x6b, 0xd0,
0x8c, 0x4e, 0x0f, 0xa3, 0x0b, 0x1a, 0x3b, 0x41, 0xa6, 0xa1, 0x62, 0x47, 0x55, 0x55, 0x6c, 0x8b,
0x06, 0x36, 0x2d, 0x8f, 0x6f, 0x31, 0x22, 0x65, 0x7c, 0x02, 0xad, 0xd8, 0x0f, 0xa3, 0x7b, 0x70,
0x4e, 0xf8, 0x61, 0xbe, 0x91, 0xd2, 0x8a, 0xa6, 0x97, 0x6f, 0x64, 0xc5, 0x7a, 0x77, 0x83, 0xde,
0x82, 0x5c, 0x6e, 0xcf, 0x98, 0xa5, 0xee, 0xb2, 0xb8, 0x54, 0x04, 0x8c, 0x9f, 0x19, 0x50, 0xdd,
0x21, 0xa1, 0x71, 0x27, 0x59, 0xfa, 0xe9, 0x86, 0x7d, 0x89, 0xc5, 0xfe, 0xfb, 0xaa, 0xd4, 0xe1,
0x2f, 0xca, 0xd0, 0x88, 0xce, 0xfe, 0x53, 0x76, 0x9a, 0xd6, 0x79, 0xc4, 0x76, 0x4e, 0x4b, 0xac,
0xcf, 0xfc, 0x3a, 0x05, 0x0e, 0xbd, 0x0a, 0x4d, 0xdb, 0x0d, 0x88, 0x4f, 0x39, 0xda, 0x64, 0x4e,
0x0c, 0x44, 0xd7, 0x60, 0x9a, 0xff, 0xde, 0xf6, 0x02, 0x9b, 0xc6, 0x1a, 0xbb, 0x97, 0x4c, 0xe1,
0x54, 0x2e, 0x0d, 0x0e, 0x9f, 0x8c, 0xbc, 0x63, 0x62, 0xb1, 0x85, 0xd5, 0xc2, 0x51, 0x92, 0xee,
0xbd, 0xa1, 0x17, 0x9a, 0x0e, 0xbb, 0x3b, 0x4c, 0x61, 0x9e, 0x30, 0x7e, 0x57, 0x3e, 0xdb, 0x2c,
0xa3, 0x77, 0x40, 0xa3, 0xbf, 0xc4, 0xdd, 0xec, 0x85, 0x89, 0x13, 0xaa, 0x98, 0x14, 0xcc, 0x78,
0x54, 0xd7, 0xdb, 0xdf, 0x0f, 0x48, 0xc8, 0xb6, 0xa5, 0x29, 0x2c, 0x52, 0xb4, 0x79, 0x8e, 0x3d,
0xb2, 0x43, 0xd1, 0x2f, 0x9e, 0x30, 0xfa, 0x50, 0x17, 0x17, 0xa1, 0x74, 0xfb, 0x96, 0xa0, 0xbe,
0xcf, 0xef, 0x56, 0x05, 0x73, 0x2d, 0x60, 0xc6, 0xbb, 0xd0, 0x96, 0xaf, 0x3f, 0x69, 0xbd, 0x05,
0x68, 0x0f, 0xa4, 0x0b, 0x96, 0x58, 0x86, 0x52, 0x96, 0x41, 0xe0, 0x9c, 0x72, 0xc7, 0x49, 0x2b,
0xdc, 0x82, 0x73, 0xbe, 0x7c, 0x91, 0xaa, 0xa4, 0xac, 0xbb, 0x3c, 0x42, 0xb2, 0x10, 0x56, 0x68,
0xc6, 0xf7, 0x60, 0x26, 0x7d, 0xcf, 0x49, 0xd7, 0x74, 0x1d, 0x66, 0xf6, 0x52, 0xb7, 0x2a, 0x3e,
0x49, 0xe9, 0x6c, 0xa3, 0x0f, 0x35, 0x6e, 0xe1, 0xd3, 0x12, 0x2f, 0x43, 0xcd, 0x64, 0x57, 0x82,
0x0a, 0x3b, 0x1c, 0x8c, 0xcc, 0x56, 0x32, 0x2a, 0xe6, 0x40, 0xe3, 0x4f, 0x1a, 0x68, 0xec, 0xc2,
0x94, 0x96, 0x7a, 0x1d, 0xb4, 0x90, 0xde, 0xbe, 0x78, 0x7f, 0x17, 0x27, 0xde, 0xbe, 0xb8, 0x5f,
0x62, 0x78, 0xf4, 0x06, 0xd4, 0x82, 0xf0, 0xa1, 0x13, 0x5d, 0xf3, 0x2f, 0x4f, 0x26, 0xee, 0x50,
0x28, 0xe6, 0x0c, 0x4a, 0x65, 0x9b, 0x83, 0xb8, 0xe0, 0x17, 0x50, 0xd9, 0xae, 0x84, 0x39, 0x03,
0xbd, 0x0b, 0x8d, 0xc1, 0x01, 0x19, 0x1c, 0x12, 0x4b, 0xdc, 0xec, 0xaf, 0x4e, 0x26, 0x6f, 0x70,
0x30, 0x8e, 0x58, 0xb4, 0xee, 0x01, 0x1b, 0xf2, 0xfa, 0x69, 0xea, 0x66, 0xd3, 0x80, 0x39, 0xc3,
0x98, 0x13, 0x23, 0x38, 0x2b, 0x3c, 0x92, 0x18, 0x44, 0x61, 0x98, 0x6e, 0x43, 0x8d, 0x75, 0x12,
0xbd, 0x2d, 0x17, 0x4f, 0x2f, 0x3f, 0x57, 0xbc, 0x69, 0x8a, 0xc1, 0x89, 0x75, 0x58, 0x8f, 0x55,
0x9d, 0xf6, 0x69, 0x74, 0xc4, 0x48, 0x71, 0x9d, 0x8b, 0xd0, 0x10, 0x9d, 0x57, 0x1b, 0xdc, 0x8c,
0x00, 0xcf, 0x42, 0x8d, 0xc7, 0x67, 0x76, 0x7f, 0x7e, 0x5d, 0x86, 0x2a, 0xbd, 0xad, 0xa5, 0xe3,
0x65, 0x35, 0x9a, 0xf7, 0xa2, 0x80, 0xd9, 0xb4, 0x8f, 0x95, 0x69, 0x37, 0x6e, 0x45, 0x23, 0xf4,
0x96, 0x3a, 0x42, 0xd7, 0x26, 0xef, 0x42, 0x89, 0x0c, 0x6f, 0xd8, 0x2f, 0x6a, 0xa0, 0xb1, 0x5b,
0x7b, 0x56, 0x24, 0x53, 0xc3, 0x54, 0xd4, 0x30, 0x4a, 0xee, 0x4a, 0xde, 0x89, 0x45, 0xb2, 0x19,
0x16, 0x47, 0x32, 0x23, 0xee, 0x50, 0x28, 0xe6, 0x0c, 0x5a, 0xe5, 0xc8, 0x1e, 0x11, 0x11, 0xc8,
0x05, 0x55, 0xde, 0xb5, 0x47, 0x04, 0x33, 0x3c, 0xe5, 0x1d, 0x98, 0xc1, 0x81, 0x88, 0xe1, 0x02,
0x5e, 0xcf, 0x0c, 0x0e, 0x30, 0xc3, 0x53, 0x9e, 0x6b, 0x8e, 0x88, 0x08, 0xde, 0x02, 0xde, 0x96,
0x49, 0xeb, 0xa3, 0x78, 0xca, 0x0b, 0xec, 0xcf, 0x88, 0xf8, 0xf0, 0x54, 0xc0, 0xdb, 0xb1, 0x3f,
0x23, 0x98, 0xe1, 0x69, 0xc8, 0x53, 0x95, 0x9c, 0x10, 0x79, 0x16, 0x6a, 0x1f, 0xd9, 0x56, 0x78,
0xa0, 0x16, 0xd7, 0x94, 0x15, 0x41, 0x47, 0xe9, 0x4c, 0x2b, 0x42, 0x1e, 0x64, 0xae, 0xb3, 0x09,
0x1a, 0x9d, 0xad, 0xb3, 0x85, 0x4d, 0x32, 0xc9, 0x42, 0x65, 0x0e, 0x34, 0x3a, 0x90, 0x39, 0x5d,
0x99, 0x03, 0x8d, 0x4e, 0x4f, 0x7e, 0x29, 0x1d, 0x14, 0xb5, 0xb4, 0x1a, 0x95, 0xfe, 0xb4, 0x0a,
0x1a, 0xfb, 0x02, 0x94, 0x0e, 0xc8, 0x0f, 0x60, 0x2a, 0x34, 0xfd, 0x21, 0xe1, 0x6e, 0xbd, 0x1f,
0x7d, 0x4c, 0xbd, 0x31, 0xf1, 0xbb, 0x52, 0xf7, 0xbe, 0x4c, 0xc1, 0xaa, 0xc2, 0xe9, 0x77, 0x5d,
0x26, 0xa5, 0xec, 0xba, 0x6f, 0xc5, 0x47, 0xae, 0x56, 0xf0, 0xf9, 0x91, 0x71, 0xf9, 0xc1, 0x1d,
0x9f, 0xbf, 0x57, 0x61, 0x4a, 0x69, 0xd8, 0x57, 0xba, 0x0b, 0xca, 0x8d, 0xe5, 0x3a, 0x2b, 0xb1,
0x73, 0x78, 0x49, 0xdd, 0x06, 0x73, 0x8d, 0x82, 0x20, 0xfe, 0xa1, 0x06, 0xcd, 0xf8, 0x0b, 0x5a,
0x7a, 0x42, 0x56, 0xa0, 0x7a, 0xe4, 0x3b, 0x62, 0x1a, 0xae, 0x16, 0x7e, 0x95, 0xeb, 0xee, 0xfa,
0x0e, 0xa6, 0x0c, 0xda, 0x9b, 0xd0, 0x0e, 0xe3, 0x61, 0x7f, 0xae, 0x98, 0x7a, 0x9f, 0xc2, 0x31,
0x67, 0xa1, 0x7b, 0xd0, 0xb6, 0x48, 0x30, 0xf0, 0xed, 0x31, 0xf3, 0x7e, 0x7c, 0xfc, 0x5f, 0x2a,
0x16, 0xd9, 0x4c, 0x48, 0x58, 0x56, 0x40, 0x7d, 0x68, 0xd9, 0x23, 0x73, 0x48, 0x7a, 0xc9, 0x26,
0x72, 0xa3, 0x58, 0xae, 0x1f, 0x51, 0x70, 0xc2, 0xa6, 0x6d, 0xdb, 0x37, 0x8f, 0xed, 0x81, 0xe7,
0x32, 0xb1, 0xfa, 0x69, 0xdb, 0x76, 0x3b, 0x21, 0x61, 0x59, 0x01, 0xad, 0x89, 0x6d, 0xb8, 0x51,
0xf0, 0x9d, 0x2d, 0x19, 0xaa, 0x78, 0x2b, 0x36, 0x9e, 0x81, 0xea, 0xae, 0xef, 0xe4, 0x6f, 0x37,
0x6c, 0x54, 0x73, 0x8a, 0x2f, 0x43, 0x5b, 0x1a, 0xaf, 0x1c, 0xd0, 0x25, 0x68, 0xc5, 0xa3, 0x90,
0xaf, 0x23, 0xf5, 0x2d, 0x07, 0xf4, 0xb6, 0xd8, 0x93, 0xbe, 0xab, 0x86, 0xf9, 0xc5, 0x54, 0x98,
0xd3, 0xc0, 0xde, 0xf6, 0x09, 0x73, 0xd1, 0xf2, 0x66, 0xf4, 0xf9, 0x05, 0x76, 0x86, 0x39, 0x5f,
0xf1, 0x7d, 0xe8, 0x3e, 0xcc, 0x50, 0xd3, 0xbe, 0x67, 0x06, 0x24, 0xef, 0x26, 0xf4, 0x0a, 0xbd,
0x61, 0xf0, 0x8f, 0xad, 0x95, 0x82, 0x1b, 0x8f, 0xc0, 0x7d, 0xeb, 0xe2, 0xff, 0x77, 0x5c, 0xfc,
0x5f, 0xf2, 0x5c, 0xfc, 0x8a, 0xe2, 0xe2, 0x2f, 0xe7, 0x3d, 0x99, 0x39, 0x27, 0x6c, 0xfc, 0x9a,
0x7a, 0xa0, 0x5c, 0x29, 0x60, 0x2a, 0x27, 0xca, 0x9a, 0xea, 0xe3, 0x8b, 0xb8, 0x8a, 0x91, 0x7f,
0x2f, 0x6d, 0xe4, 0xaf, 0x15, 0xb0, 0x4f, 0x38, 0xf9, 0x35, 0xd5, 0xc9, 0x17, 0xd5, 0xfe, 0x0d,
0xb6, 0xf2, 0xbf, 0xc9, 0xb1, 0xf2, 0x6f, 0xa8, 0x56, 0x7e, 0x42, 0xd4, 0x7c, 0x5d, 0x5e, 0xfe,
0x57, 0x79, 0x5e, 0x7e, 0x45, 0xf1, 0xf2, 0x13, 0x5a, 0x96, 0x36, 0xf3, 0x6b, 0xaa, 0x99, 0xbf,
0x52, 0xc0, 0x54, 0xdc, 0xfc, 0x8a, 0xe2, 0xe6, 0x8b, 0x2a, 0x95, 0xec, 0xfc, 0x8a, 0x62, 0xe7,
0x8b, 0x88, 0x92, 0x9f, 0x5f, 0x51, 0xfc, 0x7c, 0x11, 0x51, 0x32, 0xf4, 0x2b, 0x8a, 0xa1, 0x2f,
0x22, 0x7e, 0xeb, 0xe8, 0xcf, 0xe6, 0xe8, 0x7f, 0x9e, 0xe7, 0xe8, 0x71, 0xb6, 0xa3, 0x7f, 0x31,
0x7f, 0xfc, 0x8b, 0x2d, 0xfd, 0xe9, 0x77, 0xe0, 0x93, 0x9e, 0xfe, 0xed, 0x94, 0xa7, 0xbf, 0x5a,
0x40, 0xfe, 0x3f, 0x35, 0xf5, 0x7f, 0x9c, 0x64, 0xea, 0x57, 0x65, 0x53, 0x3f, 0xe1, 0x14, 0x39,
0xe9, 0xea, 0xdf, 0x51, 0x5d, 0xfd, 0xf5, 0x53, 0x70, 0x15, 0x5b, 0xbf, 0x9d, 0x65, 0xeb, 0xbb,
0xa7, 0x50, 0xc9, 0xf5, 0xf5, 0xef, 0x9f, 0xf4, 0xf5, 0x2f, 0x9e, 0x42, 0x2f, 0xd3, 0xd8, 0x6f,
0x67, 0x19, 0xfb, 0xd3, 0xb4, 0x2e, 0xd7, 0xd9, 0xbf, 0xa9, 0x38, 0xfb, 0xe7, 0x4e, 0x33, 0x5c,
0xdf, 0x3c, 0x6b, 0xff, 0x45, 0x05, 0xb4, 0xdd, 0x80, 0xf8, 0xc6, 0xbf, 0x2a, 0xd1, 0x4b, 0xe4,
0x2a, 0x68, 0xec, 0x25, 0x5d, 0x7a, 0x29, 0x2d, 0xa7, 0x5e, 0x4a, 0x95, 0xbf, 0x66, 0x25, 0x2f,
0xa5, 0xab, 0xa0, 0xb1, 0xb7, 0xf3, 0xb3, 0x33, 0x7f, 0x52, 0x86, 0x56, 0xf2, 0x8e, 0x7d, 0x66,
0xbe, 0xfc, 0x4c, 0x55, 0x51, 0x9f, 0xa9, 0x5e, 0x80, 0x9a, 0xcf, 0x1e, 0x85, 0xf8, 0xaa, 0x49,
0x3f, 0x80, 0xb2, 0x0a, 0x31, 0x87, 0x18, 0x04, 0xda, 0xf2, 0x2b, 0xfd, 0xd9, 0x9b, 0x71, 0x45,
0xfc, 0x07, 0xa6, 0x6f, 0x05, 0xeb, 0xbe, 0x6f, 0x3e, 0x14, 0x77, 0x02, 0x35, 0x93, 0xee, 0xe6,
0xdb, 0xb6, 0x3b, 0xcc, 0x7e, 0xa0, 0x36, 0xfe, 0x56, 0x86, 0x86, 0x78, 0xf3, 0x36, 0x56, 0xa0,
0xba, 0x45, 0x1e, 0xd0, 0x86, 0x88, 0x57, 0xef, 0x13, 0x0d, 0xb9, 0xcb, 0x7a, 0x21, 0xf0, 0x38,
0x82, 0x19, 0x6b, 0x50, 0x17, 0x6f, 0xec, 0x67, 0xe7, 0xae, 0x82, 0xb6, 0xe9, 0xb9, 0x5f, 0x82,
0xb9, 0x68, 0xc2, 0x14, 0x26, 0xc1, 0xd8, 0x73, 0x03, 0xf2, 0x35, 0xfd, 0x75, 0x71, 0xf1, 0xdf,
0x15, 0xa8, 0xb1, 0xda, 0x69, 0xe4, 0x46, 0xe3, 0x94, 0x71, 0xd3, 0x4b, 0xfc, 0xd8, 0xb4, 0xf4,
0x8f, 0x02, 0xa5, 0xdd, 0xb2, 0x0f, 0x5b, 0x96, 0x7d, 0xd8, 0xb4, 0xf4, 0x07, 0x21, 0x95, 0xa1,
0xf8, 0xaf, 0x37, 0xa1, 0x39, 0xf6, 0xbd, 0xa1, 0x4f, 0x07, 0x48, 0x4b, 0xfd, 0xe5, 0x4e, 0xa5,
0x6d, 0x0b, 0x18, 0x8e, 0x09, 0xc6, 0x16, 0x34, 0xa3, 0xdc, 0xe4, 0xb1, 0x4c, 0x9c, 0xea, 0x2c,
0x81, 0x10, 0x68, 0x96, 0xe7, 0xf2, 0x3e, 0x54, 0x31, 0xfb, 0x4d, 0xc3, 0x5c, 0x8c, 0x13, 0x6b,
0x68, 0x0b, 0x47, 0xc9, 0xc5, 0x4b, 0x62, 0x1b, 0x98, 0x82, 0xd6, 0xa6, 0xef, 0x8d, 0xd9, 0x13,
0x6e, 0xa7, 0x84, 0x00, 0xea, 0xfd, 0xd1, 0xd8, 0xf3, 0xc3, 0x4e, 0x79, 0x71, 0x3d, 0xb2, 0x43,
0x4d, 0xd0, 0xb6, 0x3c, 0x97, 0x74, 0x4a, 0xa8, 0x0d, 0x0d, 0x7c, 0xe4, 0xba, 0xb6, 0x3b, 0xec,
0x94, 0x69, 0x36, 0x9d, 0xf7, 0x4e, 0x05, 0x9d, 0x83, 0xe6, 0x86, 0xe9, 0x0e, 0x88, 0x43, 0xac,
0x4e, 0x15, 0xb5, 0xa0, 0x76, 0xcb, 0xf7, 0x3d, 0xbf, 0xa3, 0xbd, 0xf0, 0x09, 0x4c, 0xab, 0xef,
0xf9, 0x94, 0xb4, 0x6d, 0x0e, 0xa9, 0x56, 0x13, 0xb4, 0x9e, 0x37, 0x22, 0x9d, 0x32, 0x9a, 0x81,
0xf6, 0x36, 0xff, 0x53, 0x04, 0x2b, 0xaa, 0xd0, 0x6a, 0xd6, 0xfd, 0xc1, 0x81, 0x7d, 0x4c, 0x3a,
0x55, 0x5a, 0x7a, 0xd3, 0x27, 0xa6, 0x35, 0xf0, 0x8f, 0x46, 0x7b, 0x41, 0x47, 0x43, 0x0d, 0xf6,
0xd6, 0xda, 0xa9, 0xdd, 0x9c, 0xfb, 0xfb, 0xe3, 0xf9, 0xf2, 0xa3, 0xc7, 0xf3, 0xe5, 0x7f, 0x3e,
0x9e, 0x2f, 0xff, 0xf2, 0xc9, 0x7c, 0xe9, 0xd1, 0x93, 0xf9, 0xd2, 0xe7, 0x4f, 0xe6, 0x4b, 0x1f,
0x57, 0xc6, 0x7b, 0x7b, 0x75, 0x76, 0xda, 0xbe, 0xfa, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x08,
0xdc, 0x0d, 0x49, 0xa9, 0x2b, 0x00, 0x00,
}
func (m *Event) Marshal() (dAtA []byte, err error) {
@ -6824,12 +6879,19 @@ func (m *EventBlockShow) MarshalToSizedBuffer(dAtA []byte) (int, error) {
dAtA[i] = 0x32
}
}
if len(m.ObjectType) > 0 {
i -= len(m.ObjectType)
copy(dAtA[i:], m.ObjectType)
i = encodeVarintEvents(dAtA, i, uint64(len(m.ObjectType)))
i--
dAtA[i] = 0x2a
if len(m.ObjectTypesPerObject) > 0 {
for iNdEx := len(m.ObjectTypesPerObject) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.ObjectTypesPerObject[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintEvents(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x2a
}
}
if m.Type != 0 {
i = encodeVarintEvents(dAtA, i, uint64(m.Type))
@ -6918,6 +6980,45 @@ func (m *EventBlockShowRelationWithValuePerObject) MarshalToSizedBuffer(dAtA []b
return len(dAtA) - i, nil
}
func (m *EventBlockShowObjectTypePerObject) 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 *EventBlockShowObjectTypePerObject) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *EventBlockShowObjectTypePerObject) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.ObjectTypes) > 0 {
for iNdEx := len(m.ObjectTypes) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.ObjectTypes[iNdEx])
copy(dAtA[i:], m.ObjectTypes[iNdEx])
i = encodeVarintEvents(dAtA, i, uint64(len(m.ObjectTypes[iNdEx])))
i--
dAtA[i] = 0x12
}
}
if len(m.ObjectId) > 0 {
i -= len(m.ObjectId)
copy(dAtA[i:], m.ObjectId)
i = encodeVarintEvents(dAtA, i, uint64(len(m.ObjectId)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *EventBlockFilesUpload) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -10952,9 +11053,11 @@ func (m *EventBlockShow) Size() (n int) {
if m.Type != 0 {
n += 1 + sovEvents(uint64(m.Type))
}
l = len(m.ObjectType)
if l > 0 {
n += 1 + l + sovEvents(uint64(l))
if len(m.ObjectTypesPerObject) > 0 {
for _, e := range m.ObjectTypesPerObject {
l = e.Size()
n += 1 + l + sovEvents(uint64(l))
}
}
if len(m.RelationsPerObject) > 0 {
for _, e := range m.RelationsPerObject {
@ -10984,6 +11087,25 @@ func (m *EventBlockShowRelationWithValuePerObject) Size() (n int) {
return n
}
func (m *EventBlockShowObjectTypePerObject) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.ObjectId)
if l > 0 {
n += 1 + l + sovEvents(uint64(l))
}
if len(m.ObjectTypes) > 0 {
for _, s := range m.ObjectTypes {
l = len(s)
n += 1 + l + sovEvents(uint64(l))
}
}
return n
}
func (m *EventBlockFilesUpload) Size() (n int) {
if m == nil {
return 0
@ -14247,9 +14369,9 @@ func (m *EventBlockShow) Unmarshal(dAtA []byte) error {
}
case 5:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ObjectType", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field ObjectTypesPerObject", wireType)
}
var stringLen uint64
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvents
@ -14259,23 +14381,25 @@ func (m *EventBlockShow) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
if msglen < 0 {
return ErrInvalidLengthEvents
}
postIndex := iNdEx + intStringLen
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthEvents
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ObjectType = string(dAtA[iNdEx:postIndex])
m.ObjectTypesPerObject = append(m.ObjectTypesPerObject, &EventBlockShowObjectTypePerObject{})
if err := m.ObjectTypesPerObject[len(m.ObjectTypesPerObject)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
case 6:
if wireType != 2 {
@ -14454,6 +14578,123 @@ func (m *EventBlockShowRelationWithValuePerObject) Unmarshal(dAtA []byte) error
}
return nil
}
func (m *EventBlockShowObjectTypePerObject) 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 ErrIntOverflowEvents
}
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: ObjectTypePerObject: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: ObjectTypePerObject: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ObjectId", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthEvents
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthEvents
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ObjectId = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ObjectTypes", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowEvents
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthEvents
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthEvents
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ObjectTypes = append(m.ObjectTypes, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipEvents(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthEvents
}
if (iNdEx + skippy) < 0 {
return ErrInvalidLengthEvents
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *EventBlockFilesUpload) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0

View file

@ -1382,6 +1382,33 @@ message Rpc {
}
}
}
message Dataview {
message AvailableRelations {
message Request {
string contextId = 1;
string blockId = 2;
}
message Response {
Error error = 1;
repeated anytype.relation.Relation relations = 2;
message Error {
Code code = 1;
string description = 2;
enum Code {
NULL = 0;
UNKNOWN_ERROR = 1;
BAD_INPUT = 2;
NOT_A_DATAVIEW_BLOCK = 3;
// ...
}
}
}
}
}
}
message Undo {

View file

@ -102,7 +102,12 @@ message Event {
repeated anytype.relation.RelationWithValue relations = 2;
}
string objectType = 5; // objectType it to get default relations from
message ObjectTypePerObject {
string objectId = 1;
repeated string objectTypes = 2;
}
repeated ObjectTypePerObject objectTypesPerObject = 5; // objectType it to get default relations from
repeated RelationWithValuePerObject relationsPerObject = 6; // list of relations used in this object
}

View file

@ -85,7 +85,9 @@ service ClientCommands {
rpc BlockSetLinkTargetBlockId (anytype.Rpc.Block.Set.Link.TargetBlockId.Request) returns (anytype.Rpc.Block.Set.Link.TargetBlockId.Response);
rpc BlockGetDataviewAvailableRelations (anytype.Rpc.Block.Get.Dataview.AvailableRelations.Request) returns (anytype.Rpc.Block.Get.Dataview.AvailableRelations.Response);
rpc BlockSetDataviewView (anytype.Rpc.Block.Set.Dataview.View.Request) returns (anytype.Rpc.Block.Set.Dataview.View.Response);
rpc BlockSetDataviewActiveView (anytype.Rpc.Block.Set.Dataview.ActiveView.Request) returns (anytype.Rpc.Block.Set.Dataview.ActiveView.Response);
rpc BlockCreateDataviewView (anytype.Rpc.Block.Create.Dataview.View.Request) returns (anytype.Rpc.Block.Create.Dataview.View.Response);
rpc BlockDeleteDataviewView (anytype.Rpc.Block.Delete.Dataview.View.Request) returns (anytype.Rpc.Block.Delete.Dataview.View.Response);

View file

@ -26,135 +26,137 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
// 2034 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x9a, 0xcf, 0x6f, 0xdc, 0xc6,
// 2069 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9a, 0xcf, 0x6f, 0xdc, 0xc6,
0x15, 0xc7, 0xbd, 0x40, 0x51, 0xa7, 0x13, 0xd7, 0x4d, 0xd8, 0xc6, 0x4d, 0x54, 0x54, 0xfe, 0x11,
0x3b, 0xb6, 0x65, 0x8b, 0x72, 0x65, 0x34, 0x3d, 0xf5, 0x20, 0xad, 0x6c, 0x45, 0x88, 0x6c, 0xab,
0xbb, 0xb2, 0x05, 0x04, 0x2d, 0x5a, 0x8a, 0x7c, 0xda, 0x9d, 0x2c, 0x77, 0x86, 0x21, 0x67, 0x57,
0x16, 0xd0, 0x5e, 0x0a, 0xb4, 0xe7, 0x00, 0xfd, 0x3f, 0xfa, 0x77, 0xf4, 0x98, 0x63, 0x8f, 0x85,
0xfd, 0x8f, 0x14, 0x33, 0x7c, 0x1c, 0x92, 0xc3, 0x99, 0x59, 0xea, 0x60, 0x1b, 0xe6, 0xfb, 0xbc,
0xef, 0x7b, 0xf3, 0xe3, 0x0d, 0x67, 0x66, 0x49, 0x6e, 0x66, 0xa7, 0x5b, 0x59, 0xce, 0x05, 0x2f,
0xb6, 0x0a, 0xc8, 0x97, 0x34, 0x86, 0xea, 0xdf, 0x50, 0x3d, 0x0e, 0xae, 0x46, 0xec, 0x42, 0x5c,
0x64, 0xb0, 0xf6, 0x69, 0x4d, 0xc6, 0x7c, 0x3e, 0x8f, 0x58, 0x52, 0x94, 0xc8, 0xda, 0x8d, 0xda,
0x02, 0x4b, 0x60, 0x02, 0x9f, 0x6f, 0xff, 0xfb, 0x6b, 0x72, 0x7d, 0x98, 0x52, 0x60, 0x62, 0x88,
0x0e, 0xc1, 0x09, 0xb9, 0x76, 0x12, 0xa5, 0x29, 0x88, 0x61, 0x0e, 0x91, 0x80, 0xe0, 0x4e, 0x88,
0xf2, 0xe1, 0x28, 0x8b, 0xc3, 0xd2, 0x14, 0x96, 0xb6, 0x70, 0x04, 0xdf, 0x2d, 0xa0, 0x10, 0x6b,
0x9f, 0x7b, 0x99, 0x22, 0xe3, 0xac, 0x80, 0xe0, 0x1b, 0xf2, 0xd3, 0xd2, 0x32, 0x82, 0x98, 0x2f,
0x21, 0x0f, 0xac, 0x5e, 0x68, 0xd4, 0xd2, 0x77, 0xfd, 0x10, 0x6a, 0xff, 0x89, 0x5c, 0xdf, 0x89,
0x63, 0xbe, 0x60, 0x5a, 0xbc, 0xed, 0x87, 0xc6, 0x8e, 0xfa, 0xbd, 0x15, 0x54, 0x9d, 0x3a, 0xda,
0xb0, 0x53, 0x3e, 0xb7, 0xfa, 0x19, 0xbd, 0x72, 0xd7, 0x0f, 0x75, 0xb4, 0xc7, 0x90, 0x42, 0x2c,
0x1c, 0xda, 0xa5, 0x71, 0x85, 0xb6, 0x86, 0x50, 0xfb, 0x98, 0x7c, 0x58, 0x69, 0x0b, 0x9e, 0x05,
0xb7, 0xed, 0x4e, 0x82, 0x67, 0x5a, 0xf7, 0x8e, 0x0f, 0x41, 0xd5, 0x98, 0x5c, 0x3b, 0x98, 0x47,
0x13, 0xd8, 0x07, 0xb1, 0x9b, 0xf2, 0xd3, 0xe0, 0x41, 0xcb, 0xe7, 0x20, 0x3b, 0x2b, 0x42, 0x65,
0x0f, 0xf7, 0x41, 0x84, 0x92, 0xd0, 0xea, 0x0f, 0x7b, 0x90, 0x18, 0xe4, 0x0f, 0x84, 0xbc, 0x81,
0xbc, 0xa0, 0x9c, 0xed, 0x83, 0x08, 0x6e, 0xb5, 0x1c, 0xd1, 0xa0, 0xbc, 0x2a, 0xe9, 0xdb, 0x1e,
0x02, 0x25, 0xbf, 0x22, 0x57, 0x0f, 0xf9, 0x64, 0x0c, 0x2c, 0x09, 0x7e, 0xdd, 0xa2, 0x0f, 0xf9,
0x24, 0x94, 0x8f, 0xb5, 0xd8, 0xba, 0xcb, 0x8c, 0x4a, 0x2f, 0xc9, 0x4f, 0x86, 0x9c, 0x9d, 0xd1,
0x89, 0xcc, 0xed, 0x66, 0x0b, 0x2e, 0x9f, 0xb7, 0x52, 0xbb, 0xe5, 0x06, 0x50, 0xef, 0x80, 0x7c,
0x30, 0x9e, 0x2e, 0x44, 0xc2, 0xcf, 0x99, 0x91, 0x5a, 0xf5, 0xd8, 0x91, 0x5a, 0xc3, 0x8c, 0x52,
0x67, 0xe4, 0xe3, 0x67, 0x6f, 0x05, 0xe4, 0x2c, 0x4a, 0xf7, 0x72, 0x9e, 0x3d, 0xa7, 0x29, 0x14,
0xc1, 0xfd, 0x96, 0x53, 0xd3, 0x1e, 0x2a, 0x40, 0xab, 0x3f, 0x58, 0x0d, 0x62, 0x9c, 0x94, 0xfc,
0xbc, 0x69, 0x1e, 0x72, 0x26, 0x80, 0x89, 0xe0, 0xa1, 0x5b, 0x00, 0x11, 0x1d, 0x6b, 0xa3, 0x0f,
0x8a, 0xd1, 0x46, 0xe4, 0xc3, 0x43, 0xca, 0x66, 0x47, 0x39, 0x2c, 0x29, 0x9c, 0x1b, 0xd3, 0xa1,
0x61, 0x71, 0x4c, 0x87, 0x36, 0x81, 0x9a, 0xaf, 0x08, 0x79, 0x9d, 0xa5, 0x3c, 0x4a, 0x64, 0xcb,
0x8c, 0x51, 0xac, 0x0d, 0x8e, 0x51, 0x6c, 0x01, 0x75, 0xb5, 0xed, 0xa6, 0x3c, 0x9e, 0x95, 0x36,
0xa3, 0xda, 0x94, 0x05, 0xdd, 0x1c, 0xd5, 0x66, 0x20, 0xa8, 0x7a, 0x42, 0xae, 0x29, 0xc3, 0x08,
0xb2, 0x34, 0x8a, 0xcd, 0xf5, 0xb8, 0xf4, 0x41, 0x9b, 0x63, 0x3d, 0x36, 0x99, 0x7a, 0x12, 0x2b,
0xcb, 0xab, 0x0c, 0x98, 0xd1, 0xfc, 0xd2, 0x43, 0x1a, 0x1c, 0xcd, 0x6f, 0x01, 0xa8, 0xc7, 0xc9,
0x2f, 0xd4, 0xe3, 0x7d, 0x10, 0x47, 0x8b, 0xd3, 0x94, 0xc6, 0x27, 0x70, 0xfa, 0x7a, 0x74, 0x18,
0x6c, 0x58, 0x3c, 0x0d, 0x46, 0x47, 0x79, 0xd4, 0x8b, 0x35, 0x02, 0xca, 0x34, 0x76, 0x73, 0x88,
0x92, 0x38, 0x5f, 0xcc, 0x4f, 0x0b, 0x6b, 0x40, 0x83, 0xf1, 0x06, 0xec, 0xb2, 0xf5, 0x9c, 0x57,
0xc4, 0x18, 0x44, 0x33, 0xde, 0x43, 0x8b, 0x46, 0x1b, 0x71, 0xcc, 0x79, 0x07, 0x6a, 0x4c, 0x27,
0x7c, 0xe5, 0xd8, 0xa6, 0x93, 0xf1, 0xc2, 0xb9, 0xe3, 0x43, 0x50, 0xf5, 0x2f, 0xe4, 0x67, 0x0d,
0xd5, 0xa3, 0x68, 0x02, 0xc1, 0x3d, 0xa7, 0x9b, 0x34, 0x6b, 0xf5, 0x2f, 0x56, 0x61, 0x66, 0x19,
0xb0, 0x94, 0xb2, 0x99, 0xbd, 0x0c, 0x94, 0xc9, 0x5f, 0x06, 0x15, 0x52, 0xbf, 0x0f, 0xca, 0xbc,
0x53, 0x5e, 0x40, 0x60, 0x9b, 0x8d, 0xca, 0xe2, 0x58, 0x00, 0xda, 0x44, 0xfd, 0xe6, 0x55, 0xcf,
0xf7, 0xf8, 0x39, 0x53, 0x15, 0x6b, 0x2b, 0x9b, 0xca, 0xe8, 0x78, 0xf3, 0x76, 0x20, 0xd4, 0xfe,
0x23, 0x6a, 0xef, 0x83, 0x78, 0x11, 0xe5, 0xb3, 0x22, 0xb8, 0x6b, 0x9f, 0xd9, 0xa1, 0xb2, 0x3a,
0xf6, 0x23, 0x5d, 0xca, 0x28, 0xdd, 0xd7, 0x2c, 0xe1, 0xd6, 0xd2, 0x95, 0x06, 0x6f, 0xe9, 0x22,
0x60, 0xe8, 0x8d, 0xc0, 0xa1, 0x27, 0x0d, 0x5e, 0x3d, 0x04, 0x50, 0xef, 0xcf, 0xe4, 0x7a, 0x55,
0x28, 0xcf, 0x29, 0xa4, 0x49, 0x61, 0x9d, 0x63, 0x63, 0x10, 0x61, 0x69, 0xf6, 0xce, 0xb1, 0x16,
0x86, 0x01, 0xbe, 0xc3, 0xd2, 0x1f, 0xcb, 0xdd, 0x64, 0x21, 0x72, 0x1a, 0x0b, 0xca, 0x59, 0x11,
0x3c, 0x72, 0xf8, 0x37, 0x21, 0x1d, 0xec, 0x71, 0x3f, 0x18, 0x43, 0x9e, 0x62, 0xe1, 0x8c, 0x41,
0xec, 0x81, 0x88, 0x68, 0x5a, 0x04, 0xae, 0x6c, 0xd1, 0xae, 0x03, 0xdd, 0x5f, 0xc9, 0x61, 0x8c,
0x0b, 0x72, 0xa3, 0x8a, 0x21, 0x6b, 0xea, 0xa0, 0xd8, 0xc9, 0xe3, 0x29, 0x5d, 0x42, 0x12, 0x84,
0x0e, 0x09, 0x55, 0x7a, 0x35, 0xa7, 0x43, 0x6e, 0xf5, 0xe6, 0x8d, 0x62, 0x38, 0xa4, 0x85, 0x78,
0xc1, 0x97, 0x60, 0x2b, 0x06, 0x69, 0x0b, 0xa5, 0xd1, 0x57, 0x0c, 0x4d, 0x08, 0xb5, 0x17, 0xd8,
0xac, 0x4a, 0xfb, 0x98, 0xbf, 0x84, 0x73, 0xb5, 0xf4, 0x3c, 0xf6, 0xf8, 0x6b, 0x4a, 0x47, 0xdb,
0xec, 0x49, 0x63, 0xd8, 0xef, 0x07, 0xe4, 0xa6, 0x86, 0x86, 0x9c, 0x2d, 0x21, 0x17, 0xc3, 0x29,
0x4d, 0x93, 0x1c, 0xd8, 0x31, 0x97, 0x6c, 0x11, 0xfc, 0xd6, 0x21, 0x69, 0xc7, 0x75, 0x26, 0x5f,
0x5e, 0xd6, 0x0d, 0x53, 0x9a, 0x91, 0x40, 0xc3, 0x75, 0x71, 0x3c, 0x74, 0xa8, 0x59, 0x0a, 0x64,
0xa3, 0x0f, 0x8a, 0xc1, 0x96, 0xe4, 0x93, 0x66, 0xb0, 0x63, 0x78, 0x2b, 0xc6, 0xe2, 0x22, 0x85,
0x60, 0xd3, 0x23, 0x22, 0xa9, 0x50, 0x61, 0x3a, 0x66, 0xd8, 0x17, 0xc7, 0xb8, 0xb4, 0xd1, 0xc8,
0xbd, 0x45, 0x96, 0xd2, 0x58, 0xbe, 0xbf, 0x1e, 0x38, 0x54, 0x34, 0xe1, 0x38, 0x25, 0xd8, 0x49,
0x0c, 0xf5, 0xcf, 0x01, 0xf9, 0x55, 0xb3, 0x8d, 0xbb, 0x51, 0x3c, 0x9b, 0xe4, 0x7c, 0xc1, 0x92,
0x21, 0x4f, 0x79, 0x1e, 0x6c, 0x7b, 0x52, 0x37, 0x58, 0x1d, 0xfe, 0xe9, 0xa5, 0x7c, 0x30, 0x91,
0x29, 0xf9, 0xb8, 0x99, 0xc7, 0x4e, 0x4a, 0x27, 0xcc, 0xd9, 0x64, 0xa9, 0xa4, 0x88, 0x95, 0x4d,
0x6e, 0x92, 0x18, 0xa9, 0xc0, 0xa5, 0x0f, 0x23, 0xed, 0xd1, 0x65, 0x39, 0xa8, 0x8f, 0x3d, 0x12,
0x7b, 0x74, 0x69, 0x8c, 0xe9, 0x66, 0x4f, 0x1a, 0x83, 0xfe, 0x63, 0x40, 0xd6, 0x9a, 0x51, 0x8d,
0xd5, 0xc9, 0xd7, 0xcd, 0xae, 0x15, 0xea, 0xe9, 0xa5, 0x7c, 0x30, 0x0f, 0x86, 0x3b, 0x30, 0x35,
0xb5, 0x20, 0x05, 0xdc, 0xc1, 0xb8, 0xaa, 0xa2, 0x44, 0xc2, 0xd6, 0x22, 0xf2, 0xa8, 0x17, 0x8b,
0xf1, 0x26, 0xe4, 0xa3, 0x6a, 0x41, 0x96, 0x33, 0x5d, 0xfe, 0xb1, 0x8d, 0x6a, 0x5d, 0x0a, 0xea,
0x2f, 0xcf, 0xa8, 0x76, 0x48, 0x0c, 0xf4, 0x2d, 0xce, 0x1f, 0x0c, 0x54, 0xce, 0x5e, 0xaf, 0x7f,
0x7b, 0xd2, 0x6e, 0xf4, 0x41, 0xdd, 0xeb, 0x42, 0x19, 0x6f, 0xe5, 0xba, 0xd0, 0x8e, 0x19, 0xf6,
0xc5, 0xed, 0x33, 0x57, 0x22, 0x72, 0x5f, 0xe3, 0x9d, 0xb9, 0x4a, 0x47, 0x52, 0xbd, 0x66, 0x6e,
0x93, 0xb6, 0x77, 0x6c, 0x59, 0x2b, 0xde, 0x8e, 0x6d, 0x17, 0xca, 0x46, 0x1f, 0x14, 0x63, 0x65,
0xf5, 0xf9, 0x40, 0x75, 0xea, 0x14, 0xe2, 0x19, 0x24, 0xce, 0x4d, 0x49, 0xd9, 0x47, 0x25, 0xb4,
0x72, 0x53, 0x62, 0xc0, 0xc6, 0xae, 0x78, 0x9c, 0xa5, 0x54, 0x58, 0x77, 0xc5, 0xca, 0xe2, 0xdd,
0x15, 0x57, 0x84, 0x21, 0xf9, 0x02, 0xf2, 0x89, 0x7d, 0xa3, 0xad, 0x2c, 0x5e, 0xc9, 0x8a, 0x30,
0xb6, 0x97, 0x43, 0x9e, 0x5d, 0x58, 0xb7, 0x97, 0xd2, 0xe0, 0xdd, 0x5e, 0x22, 0x60, 0xa4, 0x78,
0x14, 0x15, 0xc2, 0x9e, 0xa2, 0xb2, 0x78, 0x53, 0xac, 0x08, 0x94, 0xfc, 0x9a, 0x7c, 0x50, 0xa6,
0xb8, 0x10, 0xc1, 0xba, 0x2d, 0x81, 0x45, 0xdd, 0x89, 0x37, 0x9d, 0x76, 0xe3, 0x04, 0xf4, 0xec,
0x6d, 0xc6, 0x73, 0x61, 0x3d, 0x01, 0x95, 0x26, 0xef, 0x09, 0x48, 0x23, 0xc6, 0xe9, 0xf3, 0x60,
0x2e, 0x9f, 0xcb, 0x59, 0xae, 0xee, 0x8b, 0x6c, 0x73, 0xb9, 0x8d, 0x78, 0xe7, 0x72, 0x07, 0xed,
0xae, 0x7c, 0xcf, 0x69, 0x0a, 0x2f, 0xa3, 0x39, 0x38, 0x57, 0x3e, 0x75, 0x0d, 0x22, 0x89, 0x95,
0x2b, 0x5f, 0x93, 0xec, 0x16, 0xa8, 0xba, 0x0b, 0x54, 0x91, 0x5c, 0xfe, 0xe5, 0x6d, 0x61, 0x2b,
0xd4, 0x46, 0x1f, 0x14, 0x63, 0xcd, 0x71, 0x67, 0x52, 0xc5, 0x3a, 0xa1, 0x89, 0x98, 0x06, 0x7e,
0x05, 0xc5, 0x78, 0xef, 0x0b, 0xba, 0x6c, 0xb7, 0x69, 0x6f, 0x68, 0x02, 0xdc, 0xdb, 0x34, 0x45,
0xf4, 0x6b, 0x5a, 0x0b, 0xed, 0x36, 0x4d, 0x99, 0xfd, 0x4d, 0x2b, 0x15, 0xfa, 0x35, 0xad, 0xcd,
0x62, 0xb8, 0xbf, 0x0f, 0xc8, 0x67, 0x55, 0xbc, 0x43, 0xca, 0x66, 0xc7, 0x51, 0x3e, 0x51, 0xd7,
0xc1, 0xf1, 0xec, 0x20, 0x09, 0x7e, 0xe3, 0x90, 0x92, 0x64, 0xd8, 0x42, 0x75, 0xf4, 0xed, 0xcb,
0xb8, 0x18, 0x2f, 0x14, 0xb9, 0x0d, 0x8a, 0x44, 0xb4, 0xa4, 0x70, 0xfe, 0x86, 0xc2, 0x79, 0xe0,
0x5a, 0x43, 0x2b, 0x28, 0x7c, 0xd3, 0xbc, 0x2a, 0xdc, 0xec, 0x49, 0x9b, 0x5b, 0xa1, 0x46, 0xd4,
0x9d, 0x58, 0xd0, 0x25, 0xa8, 0xd8, 0xdb, 0xab, 0xd4, 0x6a, 0xd6, 0xb7, 0x15, 0xf2, 0xf8, 0x60,
0x1e, 0x7f, 0x25, 0xbf, 0x6c, 0x5c, 0xe4, 0xb4, 0xda, 0xbf, 0xe5, 0xbe, 0x07, 0xb2, 0x77, 0xc1,
0x93, 0xfe, 0x0e, 0x46, 0xf4, 0x72, 0xd7, 0xb4, 0x32, 0x3a, 0x6e, 0xae, 0xfa, 0x47, 0x77, 0x38,
0x98, 0xb3, 0xaf, 0xdd, 0xf8, 0x11, 0xc4, 0x3c, 0xb7, 0xcf, 0x3e, 0xb3, 0x35, 0x25, 0xea, 0x9d,
0x7d, 0x4e, 0x17, 0x33, 0x89, 0xd7, 0x59, 0xd2, 0x2f, 0x89, 0x12, 0xbc, 0x54, 0x12, 0x4e, 0x17,
0x33, 0x89, 0xf6, 0x40, 0x78, 0x92, 0x30, 0x7b, 0xb6, 0x47, 0x12, 0x4e, 0x17, 0xe3, 0x54, 0xbb,
0xcb, 0xf9, 0x6c, 0x1e, 0xe5, 0xb3, 0xe7, 0x20, 0xe2, 0xa9, 0x75, 0xa1, 0xab, 0x88, 0x50, 0x21,
0xde, 0x85, 0xae, 0x83, 0x9a, 0x47, 0xbe, 0x0a, 0x28, 0xc7, 0x69, 0x87, 0x25, 0x65, 0xd8, 0x6d,
0x9f, 0x56, 0x9b, 0xf5, 0x16, 0xa0, 0xdb, 0x07, 0x13, 0xf9, 0x1b, 0xf9, 0x54, 0x91, 0xf2, 0x9d,
0xa6, 0x19, 0xbc, 0xfb, 0xb7, 0xd5, 0x80, 0x7a, 0xf7, 0x19, 0xa0, 0xb7, 0x06, 0x1c, 0x0e, 0x46,
0xa7, 0xbf, 0x3a, 0xfd, 0x16, 0x62, 0x71, 0x7c, 0x91, 0xc1, 0x4e, 0x92, 0x58, 0x3b, 0xbd, 0x26,
0xc2, 0x9d, 0x24, 0xf1, 0x76, 0x7a, 0x07, 0xc5, 0x60, 0x02, 0x8f, 0x0c, 0xb5, 0x7d, 0x04, 0x73,
0xbe, 0xb4, 0x9e, 0x3a, 0x9b, 0x22, 0x25, 0xe5, 0x5d, 0x6a, 0x6d, 0x34, 0x46, 0x05, 0xdc, 0x83,
0x8c, 0x20, 0x8d, 0x04, 0xe5, 0x4c, 0x36, 0xf0, 0xbe, 0xf5, 0xf2, 0xb1, 0xb4, 0xb7, 0x9a, 0xf7,
0x60, 0x35, 0x68, 0x1c, 0x2a, 0x2b, 0x6b, 0x59, 0x73, 0xd6, 0x77, 0xa7, 0x16, 0xc0, 0xba, 0xf4,
0xbd, 0x3b, 0xbb, 0xac, 0x23, 0x1e, 0x76, 0xa5, 0x37, 0x9e, 0xd1, 0x91, 0x8f, 0x7a, 0xb1, 0x18,
0x2f, 0x27, 0x9f, 0xbc, 0x8c, 0x96, 0x74, 0xa2, 0xac, 0xf2, 0xac, 0x54, 0x76, 0xb9, 0x79, 0x5b,
0x5a, 0x33, 0x61, 0x03, 0x72, 0x1c, 0x4c, 0x9c, 0x30, 0xc6, 0xfc, 0xd7, 0x80, 0xdc, 0xaa, 0x99,
0x7d, 0x40, 0xe2, 0x80, 0x9d, 0xf1, 0x13, 0x2a, 0xa6, 0xf2, 0xad, 0x5e, 0x04, 0x5f, 0xba, 0x24,
0xed, 0xbc, 0x4e, 0xe5, 0x77, 0x97, 0xf6, 0xab, 0x0f, 0x0e, 0xf2, 0x7c, 0x8f, 0xbf, 0xa8, 0xb4,
0x0f, 0x0e, 0xea, 0xe0, 0x6f, 0xfc, 0xa0, 0x72, 0xdb, 0x43, 0xd4, 0x67, 0x9b, 0xb1, 0xfe, 0x56,
0xa2, 0x7d, 0x32, 0x18, 0x77, 0x3f, 0x94, 0xb8, 0xe5, 0x06, 0x50, 0xef, 0x9c, 0xdc, 0x68, 0x16,
0x59, 0xaa, 0x07, 0xcd, 0x38, 0x9d, 0xb7, 0xca, 0x26, 0xad, 0x47, 0xc2, 0x71, 0x3a, 0xf7, 0xe0,
0x75, 0x89, 0x77, 0x03, 0xcb, 0x8a, 0x7b, 0xbc, 0x52, 0xa8, 0x59, 0x76, 0x9b, 0x3d, 0xe9, 0x7a,
0x11, 0xed, 0x46, 0xc5, 0x02, 0xdc, 0x5a, 0x29, 0x65, 0x54, 0xe1, 0x93, 0xfe, 0x0e, 0xfa, 0x53,
0x86, 0x8f, 0x6a, 0x0c, 0x07, 0xf1, 0x0b, 0x97, 0x8a, 0x31, 0x96, 0xf7, 0x57, 0x72, 0xf5, 0xc7,
0x29, 0xb5, 0x55, 0x0d, 0xe5, 0x5d, 0x97, 0x6b, 0x6b, 0x04, 0xef, 0xad, 0xa0, 0x50, 0xfe, 0xf7,
0xe4, 0x47, 0x47, 0x94, 0x4d, 0x82, 0xcf, 0xda, 0x93, 0x95, 0xb2, 0x89, 0x56, 0x5a, 0xb3, 0x99,
0xea, 0x8b, 0xff, 0xa3, 0x9c, 0xc7, 0x50, 0x14, 0xc3, 0x88, 0xc5, 0x90, 0x1a, 0x17, 0xff, 0x68,
0x0b, 0x4b, 0xa3, 0xe3, 0xe2, 0xbf, 0x03, 0xd5, 0x07, 0xe1, 0xaf, 0x68, 0x21, 0x78, 0x7e, 0x31,
0x9e, 0xf2, 0x73, 0xe3, 0x20, 0x8c, 0x96, 0x50, 0x9a, 0x1c, 0x07, 0x61, 0x03, 0xa9, 0x7f, 0xc2,
0x44, 0x03, 0x7e, 0xe6, 0x61, 0xfe, 0xbc, 0x54, 0xb9, 0x55, 0x66, 0xc7, 0xcf, 0x4b, 0x16, 0xac,
0xfe, 0x88, 0xa2, 0xca, 0x1b, 0x04, 0x9a, 0x8d, 0x37, 0x8f, 0x4e, 0x4d, 0x03, 0x8e, 0x37, 0x8f,
0x15, 0xc4, 0x38, 0x4f, 0xc8, 0x35, 0x39, 0x96, 0xc0, 0x9e, 0xa9, 0x8f, 0xb2, 0x82, 0xeb, 0xda,
0xf3, 0xd9, 0x3c, 0x13, 0x17, 0x6b, 0x8d, 0xff, 0x4b, 0xe0, 0xc9, 0x60, 0xf7, 0xf6, 0x7f, 0xde,
0xad, 0x0f, 0x7e, 0x78, 0xb7, 0x3e, 0xf8, 0xdf, 0xbb, 0xf5, 0xc1, 0xf7, 0xef, 0xd7, 0xaf, 0xfc,
0xf0, 0x7e, 0xfd, 0xca, 0x7f, 0xdf, 0xaf, 0x5f, 0xf9, 0xe6, 0x2a, 0x7e, 0x14, 0x76, 0xfa, 0x63,
0xf5, 0x69, 0xd7, 0xd3, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x8e, 0xb7, 0xb9, 0x38, 0x26,
0x00, 0x00,
0x3b, 0xb6, 0x65, 0x8b, 0x72, 0x65, 0x34, 0x05, 0x5a, 0xf4, 0x20, 0xad, 0x6c, 0x45, 0xa8, 0x6c,
0xab, 0xbb, 0xb2, 0x05, 0x04, 0x2d, 0x5a, 0x8a, 0x7c, 0xde, 0x9d, 0x2c, 0x97, 0xc3, 0x90, 0xb3,
0x2b, 0x0b, 0x68, 0x2f, 0x05, 0xda, 0x73, 0x80, 0x9e, 0xfb, 0xff, 0xf4, 0x54, 0xe4, 0xd8, 0x63,
0x61, 0xff, 0x23, 0xc5, 0xcc, 0x3c, 0x0e, 0xc9, 0xe1, 0xcc, 0x2c, 0x95, 0x83, 0x6d, 0x78, 0xdf,
0xe7, 0x7d, 0xdf, 0x9b, 0x1f, 0x6f, 0x38, 0x33, 0x24, 0xb9, 0x9e, 0x9f, 0x6e, 0xe5, 0x05, 0xe3,
0xac, 0xdc, 0x2a, 0xa1, 0x58, 0xd2, 0x18, 0xaa, 0x7f, 0x43, 0xf9, 0x73, 0x70, 0x39, 0xca, 0xce,
0xf9, 0x79, 0x0e, 0x6b, 0x1f, 0xd7, 0x64, 0xcc, 0xe6, 0xf3, 0x28, 0x4b, 0x4a, 0x85, 0xac, 0x5d,
0xab, 0x2d, 0xb0, 0x84, 0x8c, 0xe3, 0xef, 0xdb, 0xff, 0x39, 0x24, 0x57, 0x87, 0x29, 0x85, 0x8c,
0x0f, 0xd1, 0x21, 0x38, 0x21, 0x57, 0x4e, 0xa2, 0x34, 0x05, 0x3e, 0x2c, 0x20, 0xe2, 0x10, 0xdc,
0x0a, 0x51, 0x3e, 0x1c, 0xe5, 0x71, 0xa8, 0x4c, 0xa1, 0xb2, 0x85, 0x23, 0xf8, 0x7a, 0x01, 0x25,
0x5f, 0xfb, 0xd4, 0xcb, 0x94, 0x39, 0xcb, 0x4a, 0x08, 0xbe, 0x24, 0x3f, 0x54, 0x96, 0x11, 0xc4,
0x6c, 0x09, 0x45, 0x60, 0xf5, 0x42, 0xa3, 0x96, 0xbe, 0xed, 0x87, 0x50, 0xfb, 0x8f, 0xe4, 0xea,
0x4e, 0x1c, 0xb3, 0x45, 0xa6, 0xc5, 0xdb, 0x7e, 0x68, 0xec, 0xa8, 0xdf, 0x59, 0x41, 0xd5, 0xa9,
0xa3, 0x0d, 0x3b, 0xe5, 0x53, 0xab, 0x9f, 0xd1, 0x2b, 0xb7, 0xfd, 0x50, 0x47, 0x7b, 0x0c, 0x29,
0xc4, 0xdc, 0xa1, 0xad, 0x8c, 0x2b, 0xb4, 0x35, 0x84, 0xda, 0xc7, 0xe4, 0xfd, 0x4a, 0x9b, 0xb3,
0x3c, 0xb8, 0x69, 0x77, 0xe2, 0x2c, 0xd7, 0xba, 0xb7, 0x7c, 0x08, 0xaa, 0xc6, 0xe4, 0xca, 0xc1,
0x3c, 0x9a, 0xc0, 0x3e, 0xf0, 0xdd, 0x94, 0x9d, 0x06, 0xf7, 0x5a, 0x3e, 0x07, 0xf9, 0xeb, 0x32,
0x94, 0xf6, 0x70, 0x1f, 0x78, 0x28, 0x08, 0xad, 0x7e, 0xbf, 0x07, 0x89, 0x41, 0x7e, 0x4f, 0xc8,
0x2b, 0x28, 0x4a, 0xca, 0xb2, 0x7d, 0xe0, 0xc1, 0x8d, 0x96, 0x23, 0x1a, 0xa4, 0x57, 0x25, 0x7d,
0xd3, 0x43, 0xa0, 0xe4, 0x17, 0xe4, 0xf2, 0x21, 0x9b, 0x8c, 0x21, 0x4b, 0x82, 0x9f, 0xb7, 0xe8,
0x43, 0x36, 0x09, 0xc5, 0xcf, 0x5a, 0x6c, 0xdd, 0x65, 0x46, 0xa5, 0xe7, 0xe4, 0x07, 0x43, 0x96,
0xbd, 0xa6, 0x13, 0x91, 0xdb, 0xf5, 0x16, 0xac, 0x7e, 0x6f, 0xa5, 0x76, 0xc3, 0x0d, 0xa0, 0xde,
0x01, 0x79, 0x6f, 0x3c, 0x5d, 0xf0, 0x84, 0x9d, 0x65, 0x46, 0x6a, 0xd5, 0xcf, 0x8e, 0xd4, 0x1a,
0x66, 0x94, 0x7a, 0x4d, 0x3e, 0x7c, 0xf2, 0x86, 0x43, 0x91, 0x45, 0xe9, 0x5e, 0xc1, 0xf2, 0xa7,
0x34, 0x85, 0x32, 0xb8, 0xdb, 0x72, 0x6a, 0xda, 0x43, 0x09, 0x68, 0xf5, 0x7b, 0xab, 0x41, 0x8c,
0x93, 0x92, 0x1f, 0x37, 0xcd, 0x43, 0x96, 0x71, 0xc8, 0x78, 0x70, 0xdf, 0x2d, 0x80, 0x88, 0x8e,
0xb5, 0xd1, 0x07, 0xc5, 0x68, 0x23, 0xf2, 0xfe, 0x21, 0xcd, 0x66, 0x47, 0x05, 0x2c, 0x29, 0x9c,
0x19, 0xd3, 0xa1, 0x61, 0x71, 0x4c, 0x87, 0x36, 0x81, 0x9a, 0x2f, 0x08, 0x79, 0x99, 0xa7, 0x2c,
0x4a, 0x44, 0xcb, 0x8c, 0x51, 0xac, 0x0d, 0x8e, 0x51, 0x6c, 0x01, 0x75, 0xb5, 0xed, 0xa6, 0x2c,
0x9e, 0x29, 0x9b, 0x51, 0x6d, 0xd2, 0x82, 0x6e, 0x8e, 0x6a, 0x33, 0x10, 0x54, 0x3d, 0x21, 0x57,
0xa4, 0x61, 0x04, 0x79, 0x1a, 0xc5, 0xe6, 0x7a, 0xac, 0x7c, 0xd0, 0xe6, 0x58, 0x8f, 0x4d, 0xa6,
0x9e, 0xc4, 0xd2, 0xf2, 0x22, 0x87, 0xcc, 0x68, 0xbe, 0xf2, 0x10, 0x06, 0x47, 0xf3, 0x5b, 0x00,
0xea, 0x31, 0xf2, 0x13, 0xf9, 0xf3, 0x3e, 0xf0, 0xa3, 0xc5, 0x69, 0x4a, 0xe3, 0x13, 0x38, 0x7d,
0x39, 0x3a, 0x0c, 0x36, 0x2c, 0x9e, 0x06, 0xa3, 0xa3, 0x3c, 0xe8, 0xc5, 0x1a, 0x01, 0x45, 0x1a,
0xbb, 0x05, 0x44, 0x49, 0x5c, 0x2c, 0xe6, 0xa7, 0xa5, 0x35, 0xa0, 0xc1, 0x78, 0x03, 0x76, 0xd9,
0x7a, 0xce, 0x4b, 0x62, 0x0c, 0xbc, 0x19, 0xef, 0xbe, 0x45, 0xa3, 0x8d, 0x38, 0xe6, 0xbc, 0x03,
0x35, 0xa6, 0x13, 0x3e, 0x72, 0x6c, 0xd3, 0xc9, 0x78, 0xe0, 0xdc, 0xf2, 0x21, 0xa8, 0xfa, 0x67,
0xf2, 0xa3, 0x86, 0xea, 0x51, 0x34, 0x81, 0xe0, 0x8e, 0xd3, 0x4d, 0x98, 0xb5, 0xfa, 0x67, 0xab,
0x30, 0xb3, 0x0c, 0xb2, 0x94, 0x66, 0x33, 0x7b, 0x19, 0x48, 0x93, 0xbf, 0x0c, 0x2a, 0xa4, 0x7e,
0x1e, 0xa8, 0xbc, 0x53, 0x56, 0x42, 0x60, 0x9b, 0x8d, 0xd2, 0xe2, 0x58, 0x00, 0xda, 0x44, 0xfd,
0xe4, 0x95, 0xbf, 0xef, 0xb1, 0xb3, 0x4c, 0x56, 0xac, 0xad, 0x6c, 0x2a, 0xa3, 0xe3, 0xc9, 0xdb,
0x81, 0x50, 0xfb, 0x0f, 0xa8, 0xbd, 0x0f, 0xfc, 0x59, 0x54, 0xcc, 0xca, 0xe0, 0xb6, 0x7d, 0x66,
0x87, 0xd2, 0xea, 0xd8, 0x8f, 0x74, 0x29, 0xa3, 0x74, 0x5f, 0x66, 0x09, 0xb3, 0x96, 0xae, 0x30,
0x78, 0x4b, 0x17, 0x01, 0x43, 0x6f, 0x04, 0x0e, 0x3d, 0x61, 0xf0, 0xea, 0x21, 0x80, 0x7a, 0x7f,
0x22, 0x57, 0xab, 0x42, 0x79, 0x4a, 0x21, 0x4d, 0x4a, 0xeb, 0x1c, 0x1b, 0x03, 0x0f, 0x95, 0xd9,
0x3b, 0xc7, 0x5a, 0x18, 0x06, 0xf8, 0x1a, 0x4b, 0x7f, 0x2c, 0x76, 0x93, 0x25, 0x2f, 0x68, 0xcc,
0x29, 0xcb, 0xca, 0xe0, 0x81, 0xc3, 0xbf, 0x09, 0xe9, 0x60, 0x0f, 0xfb, 0xc1, 0x18, 0xf2, 0x14,
0x0b, 0x67, 0x0c, 0x7c, 0x0f, 0x78, 0x44, 0xd3, 0x32, 0x70, 0x65, 0x8b, 0x76, 0x1d, 0xe8, 0xee,
0x4a, 0x0e, 0x63, 0x9c, 0x93, 0x6b, 0x55, 0x0c, 0x51, 0x53, 0x07, 0xe5, 0x4e, 0x11, 0x4f, 0xe9,
0x12, 0x92, 0x20, 0x74, 0x48, 0xc8, 0xd2, 0xab, 0x39, 0x1d, 0x72, 0xab, 0x37, 0x6f, 0x14, 0xc3,
0x21, 0x2d, 0xf9, 0x33, 0xb6, 0x04, 0x5b, 0x31, 0x08, 0x5b, 0x28, 0x8c, 0xbe, 0x62, 0x68, 0x42,
0xa8, 0xbd, 0xc0, 0x66, 0x55, 0xda, 0xc7, 0xec, 0x39, 0x9c, 0xc9, 0xa5, 0xe7, 0xa1, 0xc7, 0x5f,
0x53, 0x3a, 0xda, 0x66, 0x4f, 0x1a, 0xc3, 0x7e, 0x33, 0x20, 0xd7, 0x35, 0x34, 0x64, 0xd9, 0x12,
0x0a, 0x3e, 0x9c, 0xd2, 0x34, 0x29, 0x20, 0x3b, 0x66, 0x82, 0x2d, 0x83, 0x5f, 0x3a, 0x24, 0xed,
0xb8, 0xce, 0xe4, 0xf3, 0x8b, 0xba, 0x61, 0x4a, 0x33, 0x12, 0x68, 0xb8, 0x2e, 0x8e, 0xfb, 0x0e,
0x35, 0x4b, 0x81, 0x6c, 0xf4, 0x41, 0x31, 0xd8, 0x92, 0x7c, 0xd4, 0x0c, 0x76, 0x0c, 0x6f, 0xf8,
0x98, 0x9f, 0xa7, 0x10, 0x6c, 0x7a, 0x44, 0x04, 0x15, 0x4a, 0x4c, 0xc7, 0x0c, 0xfb, 0xe2, 0x18,
0x97, 0x36, 0x1a, 0xb9, 0xb7, 0xc8, 0x53, 0x1a, 0x8b, 0xe7, 0xd7, 0x3d, 0x87, 0x8a, 0x26, 0x1c,
0xa7, 0x04, 0x3b, 0x89, 0xa1, 0xfe, 0x31, 0x20, 0x3f, 0x6b, 0xb6, 0x71, 0x37, 0x8a, 0x67, 0x93,
0x82, 0x2d, 0xb2, 0x64, 0xc8, 0x52, 0x56, 0x04, 0xdb, 0x9e, 0xd4, 0x0d, 0x56, 0x87, 0x7f, 0x7c,
0x21, 0x1f, 0x4c, 0x64, 0x4a, 0x3e, 0x6c, 0xe6, 0xb1, 0x93, 0xd2, 0x49, 0xe6, 0x6c, 0xb2, 0x50,
0x92, 0xc4, 0xca, 0x26, 0x37, 0x49, 0x8c, 0x54, 0xe2, 0xd2, 0x87, 0x91, 0xf6, 0xe8, 0x52, 0x0d,
0xea, 0x43, 0x8f, 0xc4, 0x1e, 0x5d, 0x1a, 0x63, 0xba, 0xd9, 0x93, 0xc6, 0xa0, 0x7f, 0x1f, 0x90,
0xb5, 0x66, 0x54, 0x63, 0x75, 0xf2, 0x75, 0xb3, 0x6b, 0x85, 0x7a, 0x7c, 0x21, 0x1f, 0xcc, 0x23,
0xc3, 0x1d, 0x98, 0x9c, 0x5a, 0x90, 0x02, 0xee, 0x60, 0x5c, 0x55, 0xa1, 0x90, 0xb0, 0xb5, 0x88,
0x3c, 0xe8, 0xc5, 0x62, 0xbc, 0x09, 0xf9, 0xa0, 0x5a, 0x90, 0xc5, 0x4c, 0x17, 0x7f, 0x6c, 0xa3,
0x5a, 0x97, 0x82, 0xfc, 0xcb, 0x33, 0xaa, 0x1d, 0x12, 0x03, 0x7d, 0x85, 0xf3, 0x07, 0x03, 0xa9,
0xd9, 0xeb, 0xf5, 0x6f, 0x4f, 0xda, 0x8d, 0x3e, 0xa8, 0x7b, 0x5d, 0x50, 0xf1, 0x56, 0xae, 0x0b,
0xed, 0x98, 0x61, 0x5f, 0xdc, 0x3e, 0x73, 0x05, 0x22, 0xf6, 0x35, 0xde, 0x99, 0x2b, 0x75, 0x04,
0xd5, 0x6b, 0xe6, 0x36, 0x69, 0x7b, 0xc7, 0xaa, 0x5a, 0xf1, 0x76, 0x6c, 0xbb, 0x50, 0x36, 0xfa,
0xa0, 0x18, 0x2b, 0xaf, 0xcf, 0x07, 0xb2, 0x53, 0xa7, 0x10, 0xcf, 0x20, 0x71, 0x6e, 0x4a, 0x54,
0x1f, 0x29, 0x68, 0xe5, 0xa6, 0xc4, 0x80, 0x8d, 0x5d, 0xf1, 0x38, 0x4f, 0x29, 0xb7, 0xee, 0x8a,
0xa5, 0xc5, 0xbb, 0x2b, 0xae, 0x08, 0x43, 0xf2, 0x19, 0x14, 0x13, 0xfb, 0x46, 0x5b, 0x5a, 0xbc,
0x92, 0x15, 0x61, 0x6c, 0x2f, 0x87, 0x2c, 0x3f, 0xb7, 0x6e, 0x2f, 0x85, 0xc1, 0xbb, 0xbd, 0x44,
0xc0, 0x48, 0xf1, 0x28, 0x2a, 0xb9, 0x3d, 0x45, 0x69, 0xf1, 0xa6, 0x58, 0x11, 0x28, 0xf9, 0x3b,
0xf2, 0x9e, 0x4a, 0x71, 0xc1, 0x83, 0x75, 0x5b, 0x02, 0x8b, 0xba, 0x13, 0xaf, 0x3b, 0xed, 0xc6,
0x09, 0xe8, 0xc9, 0x9b, 0x9c, 0x15, 0xdc, 0x7a, 0x02, 0x52, 0x26, 0xef, 0x09, 0x48, 0x23, 0xc6,
0xe9, 0xf3, 0x60, 0x2e, 0x7e, 0x17, 0xb3, 0x5c, 0xde, 0x17, 0xd9, 0xe6, 0x72, 0x1b, 0xf1, 0xce,
0xe5, 0x0e, 0xda, 0x5d, 0xf9, 0x9e, 0xd2, 0x14, 0x9e, 0x47, 0x73, 0x70, 0xae, 0x7c, 0xf2, 0x1a,
0x44, 0x10, 0x2b, 0x57, 0xbe, 0x26, 0xd9, 0x2d, 0x50, 0x79, 0x17, 0x28, 0x23, 0xb9, 0xfc, 0xd5,
0x6d, 0x61, 0x2b, 0xd4, 0x46, 0x1f, 0x14, 0x63, 0xcd, 0x71, 0x67, 0x52, 0xc5, 0x3a, 0xa1, 0x09,
0x9f, 0x06, 0x7e, 0x05, 0xc9, 0x78, 0xef, 0x0b, 0xba, 0x6c, 0xb7, 0x69, 0xaf, 0x68, 0x02, 0xcc,
0xdb, 0x34, 0x49, 0xf4, 0x6b, 0x5a, 0x0b, 0xed, 0x36, 0x4d, 0x9a, 0xfd, 0x4d, 0x53, 0x0a, 0xfd,
0x9a, 0xd6, 0x66, 0x31, 0xdc, 0xdf, 0x06, 0xe4, 0x93, 0x2a, 0xde, 0x21, 0xcd, 0x66, 0xc7, 0x51,
0x31, 0x91, 0xd7, 0xc1, 0xf1, 0xec, 0x20, 0x09, 0x7e, 0xe1, 0x90, 0x12, 0x64, 0xd8, 0x42, 0x75,
0xf4, 0xed, 0x8b, 0xb8, 0x60, 0x12, 0xff, 0x1a, 0x90, 0x5b, 0xd5, 0x29, 0x7b, 0x2f, 0xe2, 0xd1,
0x92, 0xc2, 0xd9, 0xce, 0x32, 0xa2, 0x69, 0x74, 0x9a, 0xc2, 0x08, 0xd2, 0x48, 0x1d, 0x0a, 0x7f,
0xed, 0x38, 0x54, 0x57, 0x2e, 0x61, 0xd7, 0x47, 0xa7, 0xf5, 0x9b, 0xef, 0xe4, 0x6b, 0x3c, 0xf0,
0xc6, 0x75, 0x7a, 0xaf, 0x28, 0x9c, 0x05, 0xae, 0x35, 0x5e, 0x8b, 0xbe, 0x6a, 0x5e, 0x65, 0x6e,
0xf6, 0xa4, 0xcd, 0xad, 0x5a, 0x23, 0xea, 0x4e, 0xcc, 0xe9, 0x12, 0x64, 0xec, 0xed, 0x55, 0x6a,
0x35, 0xeb, 0xdb, 0xaa, 0x79, 0x7c, 0x30, 0x8f, 0xbf, 0x90, 0x9f, 0x36, 0x2e, 0x9a, 0x5a, 0xed,
0xdf, 0x72, 0xdf, 0x53, 0xd9, 0xbb, 0xe0, 0x51, 0x7f, 0x07, 0x23, 0xba, 0xda, 0xd5, 0xad, 0x8c,
0x8e, 0x9b, 0xbf, 0xfe, 0xd1, 0x1d, 0x0e, 0x66, 0x75, 0xb4, 0x1b, 0x3f, 0x82, 0x98, 0x15, 0xf6,
0xea, 0x30, 0x5b, 0xa3, 0x50, 0x6f, 0x75, 0x38, 0x5d, 0xcc, 0x24, 0x5e, 0xe6, 0x49, 0xbf, 0x24,
0x14, 0x78, 0xa1, 0x24, 0x9c, 0x2e, 0x66, 0x12, 0xed, 0x81, 0xf0, 0x24, 0x61, 0xf6, 0x6c, 0x8f,
0x24, 0x9c, 0x2e, 0xc6, 0xa9, 0x7b, 0x97, 0xb1, 0xd9, 0x3c, 0x2a, 0x66, 0x4f, 0x81, 0xc7, 0x53,
0xeb, 0x42, 0x5c, 0x11, 0xa1, 0x44, 0xbc, 0x0b, 0x71, 0x07, 0x35, 0x8f, 0xa4, 0x15, 0xa0, 0xc6,
0x69, 0x27, 0x4b, 0x54, 0xd8, 0x6d, 0x9f, 0x56, 0x9b, 0xf5, 0x16, 0xa0, 0xdb, 0x07, 0x13, 0xf9,
0x2b, 0xf9, 0x58, 0x92, 0xe2, 0x99, 0xab, 0x19, 0x7c, 0x37, 0x61, 0xab, 0x01, 0xf9, 0x6c, 0x36,
0x40, 0x6f, 0x0d, 0x38, 0x1c, 0x8c, 0x4e, 0x7f, 0x71, 0xfa, 0x15, 0xc4, 0xfc, 0xf8, 0x3c, 0x87,
0x9d, 0x24, 0xb1, 0x76, 0x7a, 0x4d, 0x84, 0x3b, 0x49, 0xe2, 0xed, 0xf4, 0x0e, 0x8a, 0xc1, 0x38,
0x1e, 0x69, 0x6a, 0xfb, 0x08, 0xe6, 0x6c, 0x69, 0x3d, 0x15, 0x37, 0x45, 0x14, 0xe5, 0x5d, 0x6a,
0x6d, 0x34, 0x46, 0x05, 0xdc, 0x23, 0x55, 0x4b, 0xbf, 0x68, 0xe0, 0x5d, 0xeb, 0xe5, 0xa8, 0xb2,
0xb7, 0x9a, 0x77, 0x6f, 0x35, 0x68, 0x1c, 0x7a, 0x2b, 0xab, 0xaa, 0x39, 0xeb, 0xb3, 0x5d, 0x0b,
0x60, 0x5d, 0xfa, 0x9e, 0xed, 0x5d, 0xd6, 0x11, 0x0f, 0xbb, 0xd2, 0x1b, 0xcf, 0xe8, 0xc8, 0x07,
0xbd, 0x58, 0x8c, 0x57, 0x90, 0x8f, 0x9e, 0x47, 0x4b, 0x3a, 0x91, 0x56, 0x71, 0x96, 0x53, 0x5d,
0x6e, 0xde, 0xe6, 0xd6, 0x4c, 0xd8, 0x80, 0x1c, 0x07, 0x27, 0x27, 0x8c, 0x31, 0xff, 0x39, 0x20,
0x37, 0x6a, 0x66, 0x1f, 0x90, 0x38, 0xc8, 0x5e, 0xb3, 0x13, 0xca, 0xa7, 0x62, 0xd7, 0x51, 0x06,
0x9f, 0xbb, 0x24, 0xed, 0xbc, 0x4e, 0xe5, 0x57, 0x17, 0xf6, 0xab, 0x0f, 0x36, 0x47, 0xd1, 0x04,
0xab, 0xd5, 0x38, 0xd8, 0xc8, 0x8b, 0x09, 0xe3, 0x85, 0xcf, 0x4d, 0x0f, 0x51, 0x9f, 0xbd, 0xc6,
0xfa, 0x5b, 0x8e, 0xf6, 0xc9, 0x65, 0xdc, 0xfd, 0x90, 0xe3, 0x86, 0x1b, 0x40, 0xbd, 0x33, 0x72,
0xad, 0x59, 0x64, 0xa9, 0x1e, 0x34, 0xe3, 0xf6, 0xa0, 0x55, 0x36, 0x69, 0x3d, 0x12, 0x8e, 0xdb,
0x03, 0x0f, 0x5e, 0x97, 0x78, 0x37, 0xb0, 0xa8, 0xb8, 0x87, 0x2b, 0x85, 0x9a, 0x65, 0xb7, 0xd9,
0x93, 0xae, 0x17, 0xd1, 0x6e, 0x54, 0x2c, 0xc0, 0xad, 0x95, 0x52, 0x46, 0x15, 0x3e, 0xea, 0xef,
0xa0, 0x3f, 0xb5, 0xf8, 0xa0, 0xc6, 0x70, 0x10, 0x3f, 0x73, 0xa9, 0x18, 0x63, 0x79, 0x77, 0x25,
0x57, 0x7f, 0x3c, 0x53, 0x5b, 0xe5, 0x50, 0xde, 0x76, 0xb9, 0xb6, 0x46, 0xf0, 0xce, 0x0a, 0x0a,
0xe5, 0x7f, 0x4b, 0xbe, 0x77, 0x44, 0xb3, 0x49, 0xf0, 0x49, 0x7b, 0xb2, 0xd2, 0x6c, 0xa2, 0x95,
0xd6, 0x6c, 0xa6, 0xfa, 0xc5, 0xc4, 0x51, 0xc1, 0x62, 0x28, 0xcb, 0x61, 0x94, 0xc5, 0x90, 0x1a,
0x2f, 0x26, 0xd0, 0x16, 0x2a, 0xa3, 0xe3, 0xc5, 0x44, 0x07, 0xaa, 0x0f, 0xea, 0x5f, 0xd0, 0x92,
0xb3, 0xe2, 0x7c, 0x3c, 0x65, 0x67, 0xc6, 0x41, 0x1d, 0x2d, 0xa1, 0x30, 0x39, 0x0e, 0xea, 0x06,
0x52, 0xbf, 0x62, 0x45, 0x03, 0x7e, 0x86, 0x62, 0xbe, 0xfe, 0xaa, 0xdc, 0x2a, 0xb3, 0xe3, 0xf5,
0x97, 0x05, 0xab, 0x3f, 0xf2, 0xa8, 0xf2, 0x06, 0x8e, 0x66, 0xe3, 0xc9, 0xa3, 0x53, 0xd3, 0x80,
0xe3, 0xc9, 0x63, 0x05, 0x31, 0xce, 0x23, 0x72, 0x45, 0x8c, 0x25, 0x64, 0x4f, 0xe4, 0x47, 0x63,
0xc1, 0x55, 0xed, 0xf9, 0x64, 0x9e, 0xf3, 0xf3, 0xb5, 0xc6, 0xff, 0x05, 0xf0, 0x68, 0xb0, 0x7b,
0xf3, 0xdf, 0x6f, 0xd7, 0x07, 0xdf, 0xbe, 0x5d, 0x1f, 0xfc, 0xef, 0xed, 0xfa, 0xe0, 0x9b, 0x77,
0xeb, 0x97, 0xbe, 0x7d, 0xb7, 0x7e, 0xe9, 0xbf, 0xef, 0xd6, 0x2f, 0x7d, 0x79, 0x19, 0x3f, 0x5a,
0x3b, 0xfd, 0xbe, 0xfc, 0xf4, 0xec, 0xf1, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x94, 0xe2, 0x8b,
0x17, 0xd8, 0x26, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -232,6 +234,7 @@ type ClientCommandsClient interface {
BlockSetVideoName(ctx context.Context, in *pb.RpcBlockSetVideoNameRequest, opts ...grpc.CallOption) (*pb.RpcBlockSetVideoNameResponse, error)
BlockSetVideoWidth(ctx context.Context, in *pb.RpcBlockSetVideoWidthRequest, opts ...grpc.CallOption) (*pb.RpcBlockSetVideoWidthResponse, error)
BlockSetLinkTargetBlockId(ctx context.Context, in *pb.RpcBlockSetLinkTargetBlockIdRequest, opts ...grpc.CallOption) (*pb.RpcBlockSetLinkTargetBlockIdResponse, error)
BlockGetDataviewAvailableRelations(ctx context.Context, in *pb.RpcBlockGetDataviewAvailableRelationsRequest, opts ...grpc.CallOption) (*pb.RpcBlockGetDataviewAvailableRelationsResponse, error)
BlockSetDataviewView(ctx context.Context, in *pb.RpcBlockSetDataviewViewRequest, opts ...grpc.CallOption) (*pb.RpcBlockSetDataviewViewResponse, error)
BlockSetDataviewActiveView(ctx context.Context, in *pb.RpcBlockSetDataviewActiveViewRequest, opts ...grpc.CallOption) (*pb.RpcBlockSetDataviewActiveViewResponse, error)
BlockCreateDataviewView(ctx context.Context, in *pb.RpcBlockCreateDataviewViewRequest, opts ...grpc.CallOption) (*pb.RpcBlockCreateDataviewViewResponse, error)
@ -841,6 +844,15 @@ func (c *clientCommandsClient) BlockSetLinkTargetBlockId(ctx context.Context, in
return out, nil
}
func (c *clientCommandsClient) BlockGetDataviewAvailableRelations(ctx context.Context, in *pb.RpcBlockGetDataviewAvailableRelationsRequest, opts ...grpc.CallOption) (*pb.RpcBlockGetDataviewAvailableRelationsResponse, error) {
out := new(pb.RpcBlockGetDataviewAvailableRelationsResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/BlockGetDataviewAvailableRelations", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *clientCommandsClient) BlockSetDataviewView(ctx context.Context, in *pb.RpcBlockSetDataviewViewRequest, opts ...grpc.CallOption) (*pb.RpcBlockSetDataviewViewResponse, error) {
out := new(pb.RpcBlockSetDataviewViewResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/BlockSetDataviewView", in, out, opts...)
@ -1199,6 +1211,7 @@ type ClientCommandsServer interface {
BlockSetVideoName(*pb.RpcBlockSetVideoNameRequest) *pb.RpcBlockSetVideoNameResponse
BlockSetVideoWidth(*pb.RpcBlockSetVideoWidthRequest) *pb.RpcBlockSetVideoWidthResponse
BlockSetLinkTargetBlockId(*pb.RpcBlockSetLinkTargetBlockIdRequest) *pb.RpcBlockSetLinkTargetBlockIdResponse
BlockGetDataviewAvailableRelations(*pb.RpcBlockGetDataviewAvailableRelationsRequest) *pb.RpcBlockGetDataviewAvailableRelationsResponse
BlockSetDataviewView(*pb.RpcBlockSetDataviewViewRequest) *pb.RpcBlockSetDataviewViewResponse
BlockSetDataviewActiveView(*pb.RpcBlockSetDataviewActiveViewRequest) *pb.RpcBlockSetDataviewActiveViewResponse
BlockCreateDataviewView(*pb.RpcBlockCreateDataviewViewRequest) *pb.RpcBlockCreateDataviewViewResponse
@ -1426,6 +1439,9 @@ func (*UnimplementedClientCommandsServer) BlockSetVideoWidth(req *pb.RpcBlockSet
func (*UnimplementedClientCommandsServer) BlockSetLinkTargetBlockId(req *pb.RpcBlockSetLinkTargetBlockIdRequest) *pb.RpcBlockSetLinkTargetBlockIdResponse {
return nil
}
func (*UnimplementedClientCommandsServer) BlockGetDataviewAvailableRelations(req *pb.RpcBlockGetDataviewAvailableRelationsRequest) *pb.RpcBlockGetDataviewAvailableRelationsResponse {
return nil
}
func (*UnimplementedClientCommandsServer) BlockSetDataviewView(req *pb.RpcBlockSetDataviewViewRequest) *pb.RpcBlockSetDataviewViewResponse {
return nil
}
@ -2655,6 +2671,24 @@ func _ClientCommands_BlockSetLinkTargetBlockId_Handler(srv interface{}, ctx cont
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_BlockGetDataviewAvailableRelations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcBlockGetDataviewAvailableRelationsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ClientCommandsServer).BlockGetDataviewAvailableRelations(in), nil
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/anytype.ClientCommands/BlockGetDataviewAvailableRelations",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ClientCommandsServer).BlockGetDataviewAvailableRelations(req.(*pb.RpcBlockGetDataviewAvailableRelationsRequest)), nil
}
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_BlockSetDataviewView_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcBlockSetDataviewViewRequest)
if err := dec(in); err != nil {
@ -3455,6 +3489,10 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{
MethodName: "BlockSetLinkTargetBlockId",
Handler: _ClientCommands_BlockSetLinkTargetBlockId_Handler,
},
{
MethodName: "BlockGetDataviewAvailableRelations",
Handler: _ClientCommands_BlockGetDataviewAvailableRelations_Handler,
},
{
MethodName: "BlockSetDataviewView",
Handler: _ClientCommands_BlockSetDataviewView_Handler,

View file

@ -173,7 +173,7 @@ func (a *Anytype) CreateBlock(t smartblock.SmartBlockType) (SmartBlock, error) {
return nil, err
}
sb := &smartBlock{thread: thrd, node: a}
err = sb.indexSnapshot(nil, nil)
err = sb.indexSnapshot(nil, nil, nil)
if err != nil {
return nil, fmt.Errorf("failed to index new block %s: %s", thrd.ID.String(), err.Error())
}

View file

@ -11,6 +11,9 @@ import (
"github.com/anytypeio/go-anytype-middleware/pkg/lib/core/threads"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
pbrelation "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/relation"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/relation"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/schema"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/structs"
"github.com/gogo/protobuf/types"
"github.com/stretchr/testify/require"
@ -64,16 +67,19 @@ func TestAnytype_GetDatabaseByID(t *testing.T) {
require.NoError(t, err)
details1 := &types.Struct{Fields: map[string]*types.Value{"name": structs.String("block1_name")}}
relations1 := &pbrelation.Relations{Relations: map[string]*pbrelation.Relation{"name": relation.BundledRelations["name"]}}
blocks1 := []*model.Block{
{
Id: "test_id1",
Content: &model.BlockContentOfText{Text: &model.BlockContentText{Text: "Kademlia is a distributed hash table for decentralized peer-to-peer computer networks designed by Petar Maymounkov and David Mazières in 2002.[1][2] It specifies the structure of the network and the exchange of information through node lookups. Kademlia nodes communicate among themselves using UDP. A virtual or overlay network is formed by the participant nodes. Each node is identified by a number or node ID. The node ID serves not only as identification, but the Kademlia algorithm uses the node ID to locate values (usually file hashes or keywords). In fact, the node ID provides a direct map to file hashes and that node stores information on where to obtain the file or resource."}},
},
}
err = block1.(*smartBlock).indexSnapshot(details1, blocks1)
err = block1.(*smartBlock).indexSnapshot(details1, relations1, blocks1)
require.NoError(t, err)
details2 := &types.Struct{Fields: map[string]*types.Value{"name": structs.String("block2_name")}}
relations2 := &pbrelation.Relations{Relations: map[string]*pbrelation.Relation{"iconImage": relation.BundledRelations["iconImage"]}}
blocks2 := []*model.Block{
{
Id: "test_id2",
@ -81,26 +87,26 @@ func TestAnytype_GetDatabaseByID(t *testing.T) {
},
}
err = block2.(*smartBlock).indexSnapshot(details2, blocks2)
err = block2.(*smartBlock).indexSnapshot(details2, relations2, blocks2)
require.NoError(t, err)
var ps = s.ObjectStore()
results, total, err := ps.Query(database.Query{Limit: 1, Sorts: []*model.BlockContentDataviewSort{{RelationId: "name"}}})
sch := schema.New(relation.BundledObjectTypes["page"])
results, total, err := ps.Query(&sch, database.Query{Limit: 1, Sorts: []*model.BlockContentDataviewSort{{RelationKey: "name"}}})
require.NoError(t, err)
require.Len(t, results, 1)
require.Equal(t, 2, total)
require.Equal(t, details1.Fields["name"].GetStringValue(), results[0].Details.Fields["name"].GetStringValue())
require.Equal(t, block1.ID(), results[0].Details.Fields["id"].GetStringValue())
results, total, err = ps.Query(database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationId: "name",
Condition: model.BlockContentDataviewFilter_Like,
Value: structs.String("lock1"),
results, total, err = ps.Query(&sch, database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationKey: "name",
Condition: model.BlockContentDataviewFilter_Like,
Value: structs.String("lock1"),
}},
Sorts: []*model.BlockContentDataviewSort{{RelationId: "name"}}})
Sorts: []*model.BlockContentDataviewSort{{RelationKey: "name"}}})
require.NoError(t, err)
require.Len(t, results, 1)
@ -110,11 +116,11 @@ func TestAnytype_GetDatabaseByID(t *testing.T) {
nowTruncatedToDay := time.Date(n.Year(), n.Month(), n.Day(), 0, 0, 0, 0, time.UTC)
ps.UpdateLastOpened(block1.ID(), time.Now())
results, total, err = ps.Query(database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationId: "lastOpened",
Condition: model.BlockContentDataviewFilter_Equal,
Value: structs.Float64(float64(nowTruncatedToDay.Unix())),
results, total, err = ps.Query(&sch, database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationKey: "lastOpened",
Condition: model.BlockContentDataviewFilter_Equal,
Value: structs.Float64(float64(nowTruncatedToDay.Unix())),
}},
})
require.NoError(t, err)
@ -124,11 +130,11 @@ func TestAnytype_GetDatabaseByID(t *testing.T) {
ps.UpdateLastModified(block1.ID(), time.Now())
ps.UpdateLastModified(block2.ID(), time.Now())
results, total, err = ps.Query(database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationId: "lastModified",
Condition: model.BlockContentDataviewFilter_Equal,
Value: structs.Float64(float64(nowTruncatedToDay.Unix())),
results, total, err = ps.Query(&sch, database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationKey: "lastModified",
Condition: model.BlockContentDataviewFilter_Equal,
Value: structs.Float64(float64(nowTruncatedToDay.Unix())),
}},
})
require.NoError(t, err)
@ -137,11 +143,11 @@ func TestAnytype_GetDatabaseByID(t *testing.T) {
nextDay := time.Date(n.Year(), n.Month(), n.Day()+1, 0, 0, 0, 0, time.UTC)
results, total, err = ps.Query(database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationId: "lastModified",
Condition: model.BlockContentDataviewFilter_Less,
Value: structs.Float64(float64(nextDay.Unix())),
results, total, err = ps.Query(&sch, database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationKey: "lastModified",
Condition: model.BlockContentDataviewFilter_Less,
Value: structs.Float64(float64(nextDay.Unix())),
}},
})
require.NoError(t, err)
@ -150,22 +156,22 @@ func TestAnytype_GetDatabaseByID(t *testing.T) {
prevDay := time.Date(n.Year(), n.Month(), n.Day()-1, 0, 0, 0, 0, time.UTC)
results, total, err = ps.Query(database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationId: "lastModified",
Condition: model.BlockContentDataviewFilter_Greater,
Value: structs.Float64(float64(prevDay.Unix())),
results, total, err = ps.Query(&sch, database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationKey: "lastModified",
Condition: model.BlockContentDataviewFilter_Greater,
Value: structs.Float64(float64(prevDay.Unix())),
}},
})
require.NoError(t, err)
require.Len(t, results, 2)
require.Equal(t, total, 2)
results, total, err = ps.Query(database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationId: "lastModified",
Condition: model.BlockContentDataviewFilter_Greater,
Value: structs.Float64(float64(nextDay.Unix())),
results, total, err = ps.Query(&sch, database.Query{Limit: 10, Filters: []*model.BlockContentDataviewFilter{{
Operator: model.BlockContentDataviewFilter_And,
RelationKey: "lastModified",
Condition: model.BlockContentDataviewFilter_Greater,
Value: structs.Float64(float64(nextDay.Unix())),
}},
})
require.NoError(t, err)

View file

@ -399,7 +399,7 @@ func (block *smartBlock) GetRecord(ctx context.Context, recordID string) (*Smart
return block.decodeRecord(ctx, rec)
}
func (block *smartBlock) indexSnapshot(details *types.Struct, blocks []*model.Block) error {
func (block *smartBlock) indexSnapshot(details *types.Struct, relations *pbrelation.Relations, blocks []*model.Block) error {
if block.Type() == smartblock.SmartBlockTypeArchive {
return nil
}
@ -407,7 +407,7 @@ func (block *smartBlock) indexSnapshot(details *types.Struct, blocks []*model.Bl
outgoingLinks := findOutgoingLinks(blocks)
snippet := getSnippet(blocks)
return block.node.ObjectStore().UpdateObject(block.ID(), details, outgoingLinks, snippet)
return block.node.ObjectStore().UpdateObject(block.ID(), details, relations, outgoingLinks, snippet)
}
func findOutgoingLinks(blocks []*model.Block) []string {

View file

@ -10,6 +10,7 @@ import (
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
pbrelation "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/relation"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/schema"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/structs"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
@ -21,8 +22,10 @@ import (
var (
// ObjectInfo is stored in db key pattern:
pagesPrefix = "pages"
pagesDetailsBase = ds.NewKey("/" + pagesPrefix + "/details")
pagesPrefix = "pages"
pagesDetailsBase = ds.NewKey("/" + pagesPrefix + "/details")
pagesRelationsBase = ds.NewKey("/" + pagesPrefix + "/relations")
pagesSnippetBase = ds.NewKey("/" + pagesPrefix + "/snippet")
pagesInboundLinksBase = ds.NewKey("/" + pagesPrefix + "/inbound")
pagesOutboundLinksBase = ds.NewKey("/" + pagesPrefix + "/outbound")
@ -160,6 +163,8 @@ func (m *dsObjectStore) AddObject(page *model.ObjectInfoWithOutboundLinksIDs) er
defer txn.Discard()
detailsKey := pagesDetailsBase.ChildString(page.Id)
relationsKey := pagesRelationsBase.ChildString(page.Id)
snippetKey := pagesSnippetBase.ChildString(page.Id)
if exists, err := txn.Has(detailsKey); err != nil {
@ -173,11 +178,19 @@ func (m *dsObjectStore) AddObject(page *model.ObjectInfoWithOutboundLinksIDs) er
if err != nil {
return err
}
if err = txn.Put(detailsKey, b); err != nil {
return err
}
b, err = proto.Marshal(page.Info.Relations)
if err != nil {
return err
}
if err = txn.Put(relationsKey, b); err != nil {
return err
}
for _, key := range pageLinkKeys(page.Id, nil, page.OutboundLinks) {
if err = txn.Put(key, nil); err != nil {
return err
@ -364,7 +377,7 @@ func diffSlices(a, b []string) (removed []string, added []string) {
return
}
func (m *dsObjectStore) UpdateObject(id string, details *types.Struct, links []string, snippet string) error {
func (m *dsObjectStore) UpdateObject(id string, details *types.Struct, relations *pbrelation.Relations, links []string, snippet string) error {
m.l.Lock()
defer m.l.Unlock()
@ -402,6 +415,12 @@ func (m *dsObjectStore) UpdateObject(id string, details *types.Struct, links []s
}
}
if relations != nil {
if err = m.updateRelations(txn, id, relations); err != nil {
return err
}
}
if len(addedLinks) > 0 {
for _, k := range pageLinkKeys(id, nil, addedLinks) {
if err := txn.Put(k, nil); err != nil {
@ -488,6 +507,16 @@ func (m *dsObjectStore) updateDetails(txn ds.Txn, id string, details *model.Obje
return txn.Put(detailsKey, b)
}
func (m *dsObjectStore) updateRelations(txn ds.Txn, id string, relations *pbrelation.Relations) error {
relationsKey := pagesRelationsBase.ChildString(id)
b, err := proto.Marshal(relations)
if err != nil {
return err
}
return txn.Put(relationsKey, b)
}
func (m *dsObjectStore) updateSnippet(txn ds.Txn, id string, snippet string) error {
snippetKey := pagesSnippetBase.ChildString(id)
return txn.Put(snippetKey, []byte(snippet))
@ -530,7 +559,16 @@ func getObjectInfo(txn ds.Txn, id string) (*model.ObjectInfo, error) {
return nil, fmt.Errorf("failed to unmarshal details: %w", err)
}
var relations pbrelation.Relations
if val, err := txn.Get(pagesRelationsBase.ChildString(id)); err != nil {
return nil, fmt.Errorf("failed to get relations: %w", err)
} else if err := proto.Unmarshal(val, &relations); err != nil {
return nil, fmt.Errorf("failed to unmarshal relations: %w", err)
}
var objectTypes []string
// remove hardcoded type
// todo: maybe we should move it to a separate key?
if details.Details != nil && details.Details.Fields != nil && details.Details.Fields["type"] != nil {
vals := details.Details.Fields["type"].GetListValue()
for _, val := range vals.Values {
@ -556,6 +594,7 @@ func getObjectInfo(txn ds.Txn, id string) (*model.ObjectInfo, error) {
Id: id,
ObjectType: sbt.ToProto(),
Details: details.Details,
Relations: &relations,
Snippet: snippet,
HasInboundLinks: hasInbound,
ObjectTypeUrls: objectTypes,

View file

@ -9,6 +9,7 @@ import (
"github.com/anytypeio/go-anytype-middleware/pkg/lib/database"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/logging"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
pbrelation "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/relation"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/storage"
"github.com/dgtony/collections/polymorph"
"github.com/dgtony/collections/slices"
@ -56,7 +57,7 @@ type ObjectStore interface {
database.Reader
AddObject(page *model.ObjectInfoWithOutboundLinksIDs) error
UpdateObject(id string, details *types.Struct, links []string, snippet string) error
UpdateObject(id string, details *types.Struct, relations *pbrelation.Relations, links []string, snippet string) error
UpdateLastModified(id string, time time.Time) error
UpdateLastOpened(id string, time time.Time) error
DeletePage(id string) error

View file

@ -5,6 +5,7 @@ package model
import (
fmt "fmt"
relation "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/relation"
proto "github.com/gogo/protobuf/proto"
types "github.com/gogo/protobuf/types"
io "io"
@ -58,13 +59,13 @@ func (ObjectInfoType) EnumDescriptor() ([]byte, []int) {
}
type ObjectInfo struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
ObjectTypeUrls []string `protobuf:"bytes,2,rep,name=objectTypeUrls,proto3" json:"objectTypeUrls,omitempty"`
Details *types.Struct `protobuf:"bytes,3,opt,name=details,proto3" json:"details,omitempty"`
Relations *types.Struct `protobuf:"bytes,4,opt,name=relations,proto3" json:"relations,omitempty"`
Snippet string `protobuf:"bytes,5,opt,name=snippet,proto3" json:"snippet,omitempty"`
HasInboundLinks bool `protobuf:"varint,6,opt,name=hasInboundLinks,proto3" json:"hasInboundLinks,omitempty"`
ObjectType ObjectInfoType `protobuf:"varint,7,opt,name=objectType,proto3,enum=anytype.model.ObjectInfoType" json:"objectType,omitempty"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
ObjectTypeUrls []string `protobuf:"bytes,2,rep,name=objectTypeUrls,proto3" json:"objectTypeUrls,omitempty"`
Details *types.Struct `protobuf:"bytes,3,opt,name=details,proto3" json:"details,omitempty"`
Relations *relation.Relations `protobuf:"bytes,4,opt,name=relations,proto3" json:"relations,omitempty"`
Snippet string `protobuf:"bytes,5,opt,name=snippet,proto3" json:"snippet,omitempty"`
HasInboundLinks bool `protobuf:"varint,6,opt,name=hasInboundLinks,proto3" json:"hasInboundLinks,omitempty"`
ObjectType ObjectInfoType `protobuf:"varint,7,opt,name=objectType,proto3,enum=anytype.model.ObjectInfoType" json:"objectType,omitempty"`
}
func (m *ObjectInfo) Reset() { *m = ObjectInfo{} }
@ -121,7 +122,7 @@ func (m *ObjectInfo) GetDetails() *types.Struct {
return nil
}
func (m *ObjectInfo) GetRelations() *types.Struct {
func (m *ObjectInfo) GetRelations() *relation.Relations {
if m != nil {
return m.Relations
}
@ -493,41 +494,42 @@ func init() {
}
var fileDescriptor_9c35df71910469a5 = []byte{
// 531 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4d, 0x8b, 0xd3, 0x5c,
0x14, 0xee, 0x4d, 0xdb, 0x49, 0x7b, 0x42, 0x3f, 0xb8, 0xef, 0xe2, 0xbd, 0x7e, 0x10, 0x42, 0x10,
0x09, 0x82, 0x09, 0x76, 0x9c, 0xad, 0x32, 0xc3, 0x2c, 0x2c, 0x08, 0x1d, 0x32, 0x8a, 0xe0, 0x2e,
0x69, 0x6f, 0xdb, 0xeb, 0xdc, 0xc9, 0x0d, 0xc9, 0xad, 0xd0, 0x85, 0x4b, 0x37, 0xae, 0xfc, 0x03,
0xfe, 0x1f, 0x97, 0xb3, 0x74, 0x29, 0xed, 0x6f, 0x70, 0x2f, 0xb9, 0xb7, 0x1f, 0x69, 0x19, 0xab,
0xa0, 0xab, 0x24, 0xe7, 0x3c, 0xe7, 0x39, 0xcf, 0x79, 0xce, 0x21, 0xe0, 0xa5, 0x57, 0x93, 0x80,
0xb3, 0x38, 0x48, 0xe3, 0xe0, 0x5a, 0x8c, 0x28, 0x0f, 0xd2, 0x4c, 0x48, 0x91, 0x07, 0x5c, 0x0c,
0x23, 0x9e, 0x4b, 0x91, 0x51, 0x5f, 0x45, 0x70, 0x2b, 0x4a, 0xe6, 0x72, 0x9e, 0x52, 0x5f, 0xc1,
0xee, 0xde, 0x9f, 0x08, 0x31, 0xe1, 0x54, 0xc3, 0xe3, 0xd9, 0x38, 0xc8, 0x65, 0x36, 0x1b, 0x4a,
0x0d, 0x76, 0x7f, 0x18, 0x00, 0x83, 0xf8, 0x1d, 0x1d, 0xca, 0x7e, 0x32, 0x16, 0xb8, 0x0d, 0x06,
0x1b, 0x11, 0xe4, 0x20, 0xaf, 0x19, 0x1a, 0x6c, 0x84, 0x1f, 0x42, 0x5b, 0xa8, 0xec, 0xab, 0x79,
0x4a, 0x5f, 0x67, 0x3c, 0x27, 0x86, 0x53, 0xf5, 0x9a, 0xe1, 0x5e, 0x14, 0x3f, 0x01, 0x73, 0x44,
0x65, 0xc4, 0x78, 0x4e, 0xaa, 0x0e, 0xf2, 0xac, 0xde, 0xff, 0xbe, 0x6e, 0xeb, 0xaf, 0xdb, 0xfa,
0x97, 0xaa, 0x6d, 0xb8, 0xc6, 0xe1, 0x13, 0x68, 0x66, 0x94, 0x47, 0x92, 0x89, 0x24, 0x27, 0xb5,
0xc3, 0x45, 0x5b, 0x24, 0x26, 0x60, 0xe6, 0x09, 0x4b, 0x53, 0x2a, 0x49, 0x5d, 0xc9, 0x5c, 0x7f,
0x62, 0x0f, 0x3a, 0xd3, 0x28, 0xef, 0x27, 0xb1, 0x98, 0x25, 0xa3, 0x97, 0x2c, 0xb9, 0xca, 0xc9,
0x91, 0x83, 0xbc, 0x46, 0xb8, 0x1f, 0xc6, 0xcf, 0x00, 0xb6, 0xfa, 0x89, 0xe9, 0x20, 0xaf, 0xdd,
0xb3, 0xfd, 0x1d, 0xdb, 0xfc, 0xad, 0x29, 0x7e, 0x81, 0x0a, 0x4b, 0x15, 0xee, 0x29, 0xd4, 0x8a,
0x27, 0x6e, 0x40, 0xed, 0x22, 0x9a, 0xd0, 0x6e, 0xa5, 0x78, 0x7b, 0x21, 0xae, 0x69, 0x17, 0xe1,
0x0e, 0x58, 0x17, 0x99, 0x18, 0x33, 0x4e, 0x55, 0xca, 0xc0, 0x16, 0x98, 0xa7, 0xd9, 0x70, 0xca,
0xde, 0xd3, 0x6e, 0x15, 0x9b, 0x50, 0xbd, 0xa4, 0xb2, 0x5b, 0x77, 0xcf, 0xa0, 0xa5, 0x3b, 0x9c,
0xaf, 0xec, 0x28, 0x39, 0x88, 0xfe, 0xcc, 0x41, 0x77, 0x00, 0x96, 0xe6, 0xd0, 0x53, 0xd9, 0x00,
0x4c, 0x4f, 0xd9, 0x3f, 0x2f, 0x48, 0x8a, 0x3d, 0x95, 0x22, 0xd8, 0x01, 0x4b, 0xcc, 0xe4, 0x06,
0xa0, 0x17, 0x59, 0x0e, 0xb9, 0x1f, 0xa0, 0x53, 0x22, 0x54, 0x07, 0x71, 0x0c, 0xe6, 0x8a, 0x42,
0x31, 0x5a, 0xbd, 0x3b, 0xbf, 0xf4, 0x29, 0x5c, 0x23, 0xf1, 0x09, 0x34, 0xd6, 0xb4, 0xaa, 0xcd,
0xc1, 0xaa, 0x0d, 0xd4, 0xfd, 0x84, 0xe0, 0xbf, 0x6d, 0xe2, 0x0d, 0x93, 0x53, 0x3d, 0xd8, 0xfe,
0x51, 0x3e, 0x86, 0x1a, 0x4b, 0xc6, 0x82, 0x18, 0xca, 0xa7, 0x03, 0xd4, 0x0a, 0x86, 0x9f, 0x42,
0x9d, 0xab, 0x6b, 0xd0, 0x97, 0x79, 0xfb, 0xa2, 0x37, 0x13, 0x87, 0x1a, 0xec, 0x7e, 0x41, 0x70,
0x6f, 0x57, 0xcc, 0x60, 0xa5, 0xf3, 0x9f, 0x88, 0x7a, 0x0e, 0x2d, 0x51, 0xe6, 0x23, 0xd5, 0xdf,
0xf9, 0xb4, 0x8b, 0x77, 0x3f, 0x22, 0xb0, 0x0f, 0xe8, 0x2b, 0x16, 0xfe, 0x97, 0x12, 0x1f, 0xdc,
0x26, 0xb1, 0xb9, 0xa7, 0xe3, 0xec, 0xd1, 0xd7, 0x85, 0x8d, 0x6e, 0x16, 0x36, 0xfa, 0xbe, 0xb0,
0xd1, 0xe7, 0xa5, 0x5d, 0xb9, 0x59, 0xda, 0x95, 0x6f, 0x4b, 0xbb, 0xf2, 0xb6, 0xbb, 0xff, 0xc7,
0x8a, 0x8f, 0xd4, 0x29, 0x1f, 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x04, 0x13, 0xc4, 0x2c, 0xcc,
0x04, 0x00, 0x00,
// 551 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0x4f, 0x8b, 0xd3, 0x40,
0x18, 0xc6, 0x3b, 0x69, 0xbb, 0x69, 0xdf, 0xd0, 0x3f, 0x8c, 0x07, 0xe3, 0xae, 0x84, 0x10, 0x44,
0xa2, 0x60, 0x82, 0x5d, 0x3d, 0x78, 0x51, 0x76, 0xd9, 0x83, 0x05, 0xa1, 0x4b, 0x56, 0x11, 0xbc,
0x25, 0xed, 0xb4, 0x1d, 0x37, 0x9b, 0x09, 0xc9, 0x54, 0xe8, 0xc1, 0xa3, 0x17, 0x4f, 0x7e, 0x01,
0xbf, 0x8f, 0xc7, 0x3d, 0x7a, 0x94, 0xf6, 0x53, 0x78, 0x93, 0xcc, 0x74, 0xda, 0xb4, 0xac, 0x55,
0xd0, 0x53, 0x9b, 0x77, 0x7e, 0xf3, 0xe4, 0x79, 0x9f, 0xf7, 0x25, 0xe0, 0xa6, 0x97, 0x13, 0x3f,
0xa6, 0x91, 0x9f, 0x46, 0xfe, 0x15, 0x1b, 0x91, 0xd8, 0x4f, 0x33, 0xc6, 0x59, 0xee, 0xc7, 0x6c,
0x18, 0xc6, 0x39, 0x67, 0x19, 0xf1, 0x44, 0x05, 0xb7, 0xc2, 0x64, 0xce, 0xe7, 0x29, 0xf1, 0x04,
0x76, 0x78, 0x77, 0xc2, 0xd8, 0x24, 0x26, 0x12, 0x8f, 0x66, 0x63, 0x3f, 0xe7, 0xd9, 0x6c, 0xc8,
0x25, 0x7c, 0xf8, 0xa0, 0x24, 0x9b, 0x91, 0x38, 0xe4, 0x94, 0x25, 0x4a, 0x59, 0x3d, 0x4b, 0xd4,
0xf9, 0xa9, 0x01, 0x0c, 0xa2, 0xf7, 0x64, 0xc8, 0xfb, 0xc9, 0x98, 0xe1, 0x36, 0x68, 0x74, 0x64,
0x22, 0x1b, 0xb9, 0xcd, 0x40, 0xa3, 0x23, 0x7c, 0x1f, 0xda, 0x4c, 0x9c, 0xbe, 0x9e, 0xa7, 0xe4,
0x4d, 0x16, 0xe7, 0xa6, 0x66, 0x57, 0xdd, 0x66, 0xb0, 0x53, 0xc5, 0x8f, 0x41, 0x1f, 0x11, 0x1e,
0xd2, 0x38, 0x37, 0xab, 0x36, 0x72, 0x8d, 0xde, 0x6d, 0x4f, 0x3a, 0xf4, 0x94, 0x43, 0xef, 0x42,
0x38, 0x0c, 0x14, 0x87, 0x9f, 0x41, 0x53, 0x79, 0xc9, 0xcd, 0x9a, 0xb8, 0x74, 0xe4, 0xa9, 0x2e,
0xd7, 0x2e, 0x03, 0x85, 0x04, 0x1b, 0x1a, 0x9b, 0xa0, 0xe7, 0x09, 0x4d, 0x53, 0xc2, 0xcd, 0xba,
0xb0, 0xaa, 0x1e, 0xb1, 0x0b, 0x9d, 0x69, 0x98, 0xf7, 0x93, 0x88, 0xcd, 0x92, 0xd1, 0x2b, 0x9a,
0x5c, 0xe6, 0xe6, 0x81, 0x8d, 0xdc, 0x46, 0xb0, 0x5b, 0xc6, 0xcf, 0x01, 0x36, 0x3d, 0x98, 0xba,
0x8d, 0xdc, 0x76, 0xcf, 0xf2, 0xb6, 0x52, 0xf6, 0x36, 0xc1, 0x78, 0x05, 0x15, 0x94, 0x6e, 0x38,
0x27, 0x50, 0x2b, 0x7e, 0x71, 0x03, 0x6a, 0xe7, 0xe1, 0x84, 0x74, 0x2b, 0xc5, 0xbf, 0x97, 0xec,
0x8a, 0x74, 0x11, 0xee, 0x80, 0x71, 0x9e, 0xb1, 0x31, 0x8d, 0x89, 0x38, 0xd2, 0xb0, 0x01, 0xfa,
0x49, 0x36, 0x9c, 0xd2, 0x0f, 0xa4, 0x5b, 0xc5, 0x3a, 0x54, 0x2f, 0x08, 0xef, 0xd6, 0x9d, 0x53,
0x68, 0xc9, 0x37, 0x9c, 0xad, 0x22, 0x29, 0xa5, 0x88, 0xfe, 0x2e, 0x45, 0x67, 0x00, 0x86, 0xd4,
0x90, 0x5d, 0x59, 0x00, 0x54, 0x76, 0xd9, 0x3f, 0x2b, 0x44, 0x8a, 0x59, 0x95, 0x2a, 0xd8, 0x06,
0x83, 0xcd, 0xf8, 0x1a, 0x90, 0xc3, 0x2c, 0x97, 0x9c, 0x8f, 0xd0, 0x29, 0x09, 0x8a, 0xa5, 0x38,
0x06, 0x7d, 0x25, 0x21, 0x14, 0x8d, 0xde, 0x9d, 0xdf, 0xe6, 0x14, 0x28, 0x12, 0x3f, 0x85, 0x86,
0x92, 0x15, 0xaf, 0xd9, 0x7b, 0x6b, 0x8d, 0x3a, 0x9f, 0x11, 0xdc, 0xda, 0x1c, 0xbc, 0xa5, 0x7c,
0x2a, 0x1b, 0xdb, 0x5d, 0xcc, 0x47, 0x50, 0xa3, 0xc9, 0x98, 0x99, 0x9a, 0xc8, 0x69, 0x8f, 0xb4,
0xc0, 0xf0, 0x13, 0xa8, 0xc7, 0x62, 0x1b, 0xe4, 0x76, 0xde, 0x3c, 0xe8, 0x75, 0xc7, 0x81, 0x84,
0x9d, 0xaf, 0x08, 0x8e, 0xb6, 0xcd, 0x0c, 0x56, 0x3e, 0xff, 0x8b, 0xa9, 0x17, 0xd0, 0x62, 0x65,
0x3d, 0xb3, 0xfa, 0xa7, 0x9c, 0xb6, 0x79, 0xe7, 0x13, 0x02, 0x6b, 0x8f, 0xbf, 0x62, 0xe0, 0xff,
0x68, 0xf1, 0xde, 0x4d, 0x16, 0x9b, 0x3b, 0x3e, 0x4e, 0x1f, 0x7e, 0x5b, 0x58, 0xe8, 0x7a, 0x61,
0xa1, 0x1f, 0x0b, 0x0b, 0x7d, 0x59, 0x5a, 0x95, 0xeb, 0xa5, 0x55, 0xf9, 0xbe, 0xb4, 0x2a, 0xef,
0xba, 0xbb, 0x1f, 0xb8, 0xe8, 0x40, 0xac, 0xf2, 0xf1, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd1,
0xdd, 0xa7, 0xee, 0xfb, 0x04, 0x00, 0x00,
}
func (m *ObjectInfo) Marshal() (dAtA []byte, err error) {
@ -1238,7 +1240,7 @@ func (m *ObjectInfo) Unmarshal(dAtA []byte) error {
return io.ErrUnexpectedEOF
}
if m.Relations == nil {
m.Relations = &types.Struct{}
m.Relations = &relation.Relations{}
}
if err := m.Relations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err

View file

@ -3,12 +3,13 @@ package anytype.model;
option go_package = "pkg/lib/pb/model";
import "google/protobuf/struct.proto";
import "pkg/lib/pb/relation/protos/relation.proto";
message ObjectInfo {
string id = 1;
repeated string objectTypeUrls = 2;
google.protobuf.Struct details = 3;
google.protobuf.Struct relations = 4;
anytype.relation.Relations relations = 4;
string snippet = 5;
bool hasInboundLinks = 6;

View file

@ -9,6 +9,7 @@ message ObjectType {
string name = 2; // name of objectType (can be localized for bundled types)
repeated Relation relations = 3; // cannot contain more than one Relation with the same RelationType
Layout layout = 4;
string iconEmoji = 5; // emoji symbol
enum Layout {
page = 0;
@ -63,8 +64,9 @@ enum RelationFormat {
emoji = 10; // one emoji, can contains multiple utf-8 symbols
objectId = 100; // relation must has objectType
}
objectIdSelf = 101; // relation of object to itself (using the same objectType)
}
message Relations {
repeated Relation relations = 1;
}

View file

@ -27,18 +27,19 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
type RelationFormat int32
const (
RelationFormat_title RelationFormat = 0
RelationFormat_description RelationFormat = 1
RelationFormat_number RelationFormat = 2
RelationFormat_select RelationFormat = 3
RelationFormat_date RelationFormat = 4
RelationFormat_file RelationFormat = 5
RelationFormat_checkbox RelationFormat = 6
RelationFormat_url RelationFormat = 7
RelationFormat_email RelationFormat = 8
RelationFormat_phone RelationFormat = 9
RelationFormat_emoji RelationFormat = 10
RelationFormat_objectId RelationFormat = 100
RelationFormat_title RelationFormat = 0
RelationFormat_description RelationFormat = 1
RelationFormat_number RelationFormat = 2
RelationFormat_select RelationFormat = 3
RelationFormat_date RelationFormat = 4
RelationFormat_file RelationFormat = 5
RelationFormat_checkbox RelationFormat = 6
RelationFormat_url RelationFormat = 7
RelationFormat_email RelationFormat = 8
RelationFormat_phone RelationFormat = 9
RelationFormat_emoji RelationFormat = 10
RelationFormat_objectId RelationFormat = 100
RelationFormat_objectIdSelf RelationFormat = 101
)
var RelationFormat_name = map[int32]string{
@ -54,21 +55,23 @@ var RelationFormat_name = map[int32]string{
9: "phone",
10: "emoji",
100: "objectId",
101: "objectIdSelf",
}
var RelationFormat_value = map[string]int32{
"title": 0,
"description": 1,
"number": 2,
"select": 3,
"date": 4,
"file": 5,
"checkbox": 6,
"url": 7,
"email": 8,
"phone": 9,
"emoji": 10,
"objectId": 100,
"title": 0,
"description": 1,
"number": 2,
"select": 3,
"date": 4,
"file": 5,
"checkbox": 6,
"url": 7,
"email": 8,
"phone": 9,
"emoji": 10,
"objectId": 100,
"objectIdSelf": 101,
}
func (x RelationFormat) String() string {
@ -140,6 +143,7 @@ type ObjectType struct {
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Relations []*Relation `protobuf:"bytes,3,rep,name=relations,proto3" json:"relations,omitempty"`
Layout ObjectTypeLayout `protobuf:"varint,4,opt,name=layout,proto3,enum=anytype.relation.ObjectTypeLayout" json:"layout,omitempty"`
IconEmoji string `protobuf:"bytes,5,opt,name=iconEmoji,proto3" json:"iconEmoji,omitempty"`
}
func (m *ObjectType) Reset() { *m = ObjectType{} }
@ -203,6 +207,13 @@ func (m *ObjectType) GetLayout() ObjectTypeLayout {
return ObjectType_page
}
func (m *ObjectType) GetIconEmoji() string {
if m != nil {
return m.IconEmoji
}
return ""
}
type RelationWithValue struct {
Relation *Relation `protobuf:"bytes,1,opt,name=relation,proto3" json:"relation,omitempty"`
Value *types.Value `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
@ -433,45 +444,47 @@ func init() {
}
var fileDescriptor_d7f8dc729d740ffd = []byte{
// 605 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x8a, 0xd3, 0x40,
0x14, 0xee, 0x34, 0x6d, 0x9a, 0x9e, 0x2e, 0xeb, 0x38, 0xca, 0x12, 0x16, 0x09, 0x25, 0xde, 0x74,
0xc5, 0x4d, 0xa1, 0x82, 0xac, 0x7a, 0x27, 0xab, 0x20, 0x28, 0x0b, 0x51, 0x14, 0xbc, 0x9b, 0x4c,
0xa6, 0x6d, 0xb6, 0xd3, 0x4c, 0x48, 0x26, 0x62, 0xde, 0xc2, 0x27, 0xf0, 0x41, 0x7c, 0x02, 0x2f,
0xf7, 0xc2, 0x0b, 0x2f, 0x65, 0xf7, 0x45, 0x64, 0x26, 0x4d, 0x76, 0xd7, 0xb5, 0x82, 0x77, 0xe7,
0xe7, 0x9b, 0x73, 0xbe, 0xf9, 0xe6, 0x4b, 0xe0, 0x20, 0x5b, 0x2d, 0xa6, 0x22, 0x89, 0xa6, 0x59,
0x34, 0xcd, 0xb9, 0xa0, 0x2a, 0x91, 0xe9, 0x34, 0xcb, 0xa5, 0x92, 0x45, 0x9b, 0x07, 0x26, 0x27,
0x98, 0xa6, 0x95, 0xaa, 0x32, 0x1e, 0x34, 0xf5, 0xfd, 0x7b, 0x0b, 0x29, 0x17, 0x82, 0xd7, 0xf8,
0xa8, 0x9c, 0x4f, 0x0b, 0x95, 0x97, 0x4c, 0xd5, 0x78, 0xff, 0x07, 0x02, 0x38, 0x89, 0x4e, 0x39,
0x53, 0xef, 0xaa, 0x8c, 0x13, 0x0c, 0x56, 0x99, 0x0b, 0x17, 0x8d, 0xd1, 0x64, 0x18, 0xea, 0x90,
0x10, 0xe8, 0xa5, 0x74, 0xcd, 0xdd, 0xae, 0x29, 0x99, 0x98, 0x1c, 0xc1, 0xb0, 0x19, 0x5f, 0xb8,
0xd6, 0xd8, 0x9a, 0x8c, 0x66, 0xfb, 0xc1, 0x9f, 0x8b, 0x83, 0x70, 0x13, 0x84, 0x97, 0x60, 0xf2,
0x0c, 0x6c, 0x41, 0x2b, 0x59, 0x2a, 0xb7, 0x37, 0x46, 0x93, 0xdd, 0xd9, 0xfd, 0x9b, 0xc7, 0x2e,
0xd9, 0x04, 0xaf, 0x0d, 0x34, 0xdc, 0x1c, 0xf1, 0x0f, 0xc0, 0xae, 0x2b, 0xc4, 0x81, 0x5e, 0x46,
0x17, 0x1c, 0x77, 0xc8, 0x08, 0x06, 0x4c, 0xa6, 0x8a, 0x32, 0x85, 0x91, 0x2e, 0x2b, 0x5a, 0xac,
0x70, 0xd7, 0xaf, 0xe0, 0x76, 0xb3, 0xfe, 0x43, 0xa2, 0x96, 0xef, 0xa9, 0x28, 0x39, 0x79, 0x0c,
0x4e, 0xb3, 0xc5, 0xdc, 0xf0, 0xdf, 0xac, 0x5b, 0x2c, 0x79, 0x08, 0xfd, 0x4f, 0x7a, 0x80, 0xd1,
0x60, 0x34, 0xdb, 0x0b, 0x6a, 0x45, 0x83, 0x46, 0xd1, 0xc0, 0x8c, 0x0f, 0x6b, 0x90, 0xff, 0xcd,
0x02, 0xa7, 0x19, 0xa2, 0xf5, 0x5c, 0xf1, 0xaa, 0xd1, 0x73, 0xc5, 0x2b, 0x72, 0x04, 0xf6, 0x5c,
0xe6, 0x6b, 0xaa, 0xcc, 0xb4, 0xdd, 0xd9, 0x78, 0x3b, 0x85, 0x97, 0x06, 0x17, 0x6e, 0xf0, 0xed,
0x4b, 0x58, 0x57, 0x5e, 0xe2, 0x29, 0xec, 0xc4, 0x7c, 0x4e, 0x4b, 0xa1, 0x0c, 0x07, 0xa3, 0xea,
0x76, 0x86, 0xd7, 0xb0, 0xe4, 0x0d, 0x40, 0x4c, 0x15, 0x7d, 0x2b, 0xcb, 0x9c, 0x71, 0xb7, 0x6f,
0xd8, 0x1c, 0x6e, 0x67, 0xd3, 0x06, 0xc7, 0xed, 0xa1, 0xf0, 0xca, 0x00, 0xb2, 0x07, 0xf6, 0x32,
0x89, 0x63, 0x9e, 0xba, 0xf6, 0x18, 0x4d, 0x9c, 0x70, 0x93, 0x91, 0x7d, 0xad, 0x3a, 0x8d, 0x4f,
0x52, 0x51, 0xb9, 0x03, 0xd3, 0x69, 0x73, 0x72, 0x17, 0xfa, 0xeb, 0x52, 0xa8, 0xc4, 0x75, 0x4c,
0xa3, 0x4e, 0x88, 0x07, 0x20, 0x5b, 0x13, 0xb8, 0x60, 0xae, 0x7b, 0xa5, 0xa2, 0xfb, 0x05, 0x17,
0x9c, 0xa9, 0xe3, 0x84, 0x29, 0x77, 0x34, 0xb6, 0x74, 0xff, 0xb2, 0xe2, 0x3f, 0x01, 0x72, 0x93,
0xab, 0x76, 0x4a, 0xcc, 0x15, 0x4d, 0x44, 0x81, 0x3b, 0x64, 0x08, 0x7d, 0x21, 0x19, 0x15, 0x18,
0xe9, 0x3a, 0x65, 0x4c, 0x96, 0xa9, 0xc2, 0x5d, 0xff, 0x05, 0x0c, 0xc3, 0xd6, 0xac, 0xd7, 0x6c,
0x8e, 0xfe, 0xc3, 0xe6, 0x0f, 0xbe, 0x22, 0xd8, 0xbd, 0xfe, 0x8a, 0x7a, 0xa3, 0x4a, 0x94, 0xd0,
0x9e, 0xbd, 0x05, 0xa3, 0x98, 0x17, 0x2c, 0x4f, 0x32, 0xdd, 0xc7, 0x88, 0x00, 0xd8, 0x69, 0xb9,
0x8e, 0x78, 0x8e, 0xbb, 0x3a, 0xae, 0xaf, 0x82, 0x2d, 0xed, 0xe7, 0x98, 0x2a, 0x8e, 0x7b, 0x3a,
0x9a, 0x27, 0x82, 0xe3, 0x3e, 0xd9, 0x01, 0x87, 0x2d, 0x39, 0x5b, 0x45, 0xf2, 0x33, 0xb6, 0xc9,
0xc0, 0x7c, 0xaf, 0x78, 0xa0, 0xc7, 0xf3, 0x35, 0x4d, 0x04, 0x76, 0x74, 0x98, 0x2d, 0x65, 0xca,
0xf1, 0xb0, 0xae, 0xca, 0xd3, 0x04, 0x83, 0x3e, 0x57, 0x4b, 0xf8, 0x2a, 0xc6, 0xf1, 0xf3, 0xc3,
0xef, 0xe7, 0x1e, 0x3a, 0x3b, 0xf7, 0xd0, 0xaf, 0x73, 0x0f, 0x7d, 0xb9, 0xf0, 0x3a, 0x67, 0x17,
0x5e, 0xe7, 0xe7, 0x85, 0xd7, 0xf9, 0x78, 0xe7, 0x2f, 0xff, 0x9a, 0xc8, 0x36, 0x46, 0x7a, 0xf4,
0x3b, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x21, 0xe7, 0xca, 0x89, 0x04, 0x00, 0x00,
// 632 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xc1, 0x6e, 0xd3, 0x4c,
0x10, 0x8e, 0xe3, 0xc4, 0x71, 0x26, 0x55, 0xfe, 0xfd, 0x17, 0x54, 0x59, 0x55, 0x65, 0x45, 0xe1,
0x92, 0x22, 0xea, 0x48, 0x41, 0x42, 0x05, 0x6e, 0xa8, 0x45, 0x42, 0x02, 0x55, 0x72, 0x11, 0x48,
0xdc, 0xd6, 0xeb, 0x4d, 0xb2, 0xcd, 0xc6, 0x6b, 0xd9, 0x6b, 0x84, 0xdf, 0x82, 0x47, 0xe1, 0xcc,
0x13, 0x70, 0xec, 0x91, 0x23, 0x6a, 0xdf, 0x80, 0x27, 0x40, 0xbb, 0x8e, 0x9d, 0x96, 0x52, 0x24,
0x6e, 0x33, 0xdf, 0x7c, 0x3b, 0xfe, 0xe6, 0xdb, 0x59, 0xc3, 0x41, 0xba, 0x5a, 0x4c, 0x05, 0x8f,
0xa6, 0x69, 0x34, 0xcd, 0x98, 0x20, 0x8a, 0xcb, 0x64, 0x9a, 0x66, 0x52, 0xc9, 0xbc, 0xc9, 0x03,
0x93, 0x63, 0x44, 0x92, 0x52, 0x95, 0x29, 0x0b, 0x6a, 0x7c, 0x6f, 0x7f, 0x21, 0xe5, 0x42, 0xb0,
0x8a, 0x1f, 0x15, 0xf3, 0x69, 0xae, 0xb2, 0x82, 0xaa, 0x8a, 0x3f, 0xfe, 0x69, 0x01, 0x9c, 0x46,
0xe7, 0x8c, 0xaa, 0xb7, 0x65, 0xca, 0x30, 0x02, 0xbb, 0xc8, 0x84, 0x67, 0x8d, 0xac, 0x49, 0x3f,
0xd4, 0x21, 0xc6, 0xd0, 0x49, 0xc8, 0x9a, 0x79, 0x6d, 0x03, 0x99, 0x18, 0x1f, 0x41, 0xbf, 0x6e,
0x9f, 0x7b, 0xf6, 0xc8, 0x9e, 0x0c, 0x66, 0x7b, 0xc1, 0xef, 0x1f, 0x0e, 0xc2, 0x4d, 0x10, 0x6e,
0xc9, 0xf8, 0x39, 0x38, 0x82, 0x94, 0xb2, 0x50, 0x5e, 0x67, 0x64, 0x4d, 0x86, 0xb3, 0x07, 0xb7,
0x8f, 0x6d, 0xd5, 0x04, 0xaf, 0x0d, 0x35, 0xdc, 0x1c, 0xc1, 0xfb, 0xd0, 0xe7, 0x54, 0x26, 0x27,
0x6b, 0x79, 0xce, 0xbd, 0xae, 0xd1, 0xb3, 0x05, 0xc6, 0x07, 0xe0, 0x54, 0x7c, 0xec, 0x42, 0x27,
0x25, 0x0b, 0x86, 0x5a, 0x78, 0x00, 0x3d, 0x2a, 0x13, 0x45, 0xa8, 0x42, 0x96, 0x86, 0x15, 0xc9,
0x57, 0xa8, 0x3d, 0x2e, 0xe1, 0xff, 0x5a, 0xdc, 0x7b, 0xae, 0x96, 0xef, 0x88, 0x28, 0x18, 0x7e,
0x02, 0x6e, 0xad, 0xc1, 0xcc, 0xff, 0xf7, 0x99, 0x1a, 0x2e, 0x7e, 0x04, 0xdd, 0x8f, 0xba, 0x81,
0x71, 0x68, 0x30, 0xdb, 0x0d, 0x2a, 0xbf, 0x83, 0xda, 0xef, 0xc0, 0xb4, 0x0f, 0x2b, 0xd2, 0xf8,
0xab, 0x0d, 0x6e, 0xdd, 0x44, 0xbb, 0xbd, 0x62, 0x65, 0xed, 0xf6, 0x8a, 0x95, 0xf8, 0x08, 0x9c,
0xb9, 0xcc, 0xd6, 0x44, 0x99, 0x6e, 0xc3, 0xd9, 0xe8, 0x6e, 0x09, 0x2f, 0x0d, 0x2f, 0xdc, 0xf0,
0x9b, 0x7b, 0xb2, 0xaf, 0xdd, 0xd3, 0x33, 0xd8, 0x89, 0xd9, 0x9c, 0x14, 0x42, 0x19, 0x0d, 0xc6,
0xf3, 0xbb, 0x15, 0xde, 0xe0, 0xe2, 0x37, 0x00, 0x31, 0x51, 0xe4, 0x4c, 0x16, 0x19, 0x65, 0xc6,
0xed, 0xe1, 0xec, 0xf0, 0x6e, 0x35, 0x4d, 0x70, 0xdc, 0x1c, 0x0a, 0xaf, 0x35, 0xc0, 0xbb, 0xe0,
0x2c, 0x79, 0x1c, 0xb3, 0xc4, 0x73, 0x46, 0xd6, 0xc4, 0x0d, 0x37, 0x19, 0xde, 0xd3, 0xae, 0x93,
0xf8, 0x34, 0x11, 0xa5, 0xd7, 0x33, 0x95, 0x26, 0xc7, 0xf7, 0xa1, 0xbb, 0x2e, 0x84, 0xe2, 0x9e,
0x6b, 0x0a, 0x55, 0x82, 0x7d, 0x00, 0xd9, 0xac, 0x88, 0x07, 0x66, 0xdc, 0x6b, 0x88, 0xae, 0xe7,
0x4c, 0x30, 0xaa, 0x8e, 0x39, 0x55, 0xde, 0x60, 0x64, 0xeb, 0xfa, 0x16, 0x19, 0x3f, 0x05, 0x7c,
0x5b, 0xab, 0xde, 0x94, 0x98, 0x29, 0xc2, 0x45, 0x8e, 0x5a, 0xb8, 0x0f, 0x5d, 0x21, 0x29, 0x11,
0xc8, 0xd2, 0x38, 0xa1, 0x54, 0x16, 0x89, 0x42, 0xed, 0xf1, 0x09, 0xf4, 0xc3, 0x66, 0x95, 0x6f,
0x3c, 0x02, 0xeb, 0x1f, 0x1e, 0xc1, 0xc3, 0x2f, 0x16, 0x0c, 0x6f, 0xde, 0xa2, 0xfe, 0xa2, 0xe2,
0x4a, 0xe8, 0x9d, 0xfd, 0x0f, 0x06, 0x31, 0xcb, 0x69, 0xc6, 0x53, 0x5d, 0x47, 0x16, 0x06, 0x70,
0x92, 0x62, 0x1d, 0xb1, 0x0c, 0xb5, 0x75, 0x5c, 0x8d, 0x82, 0x6c, 0xbd, 0xcf, 0x31, 0x51, 0x0c,
0x75, 0x74, 0x34, 0xe7, 0x82, 0xa1, 0x2e, 0xde, 0x01, 0x97, 0x2e, 0x19, 0x5d, 0x45, 0xf2, 0x13,
0x72, 0x70, 0xcf, 0xbc, 0x66, 0xd4, 0xd3, 0xed, 0xd9, 0x9a, 0x70, 0x81, 0x5c, 0x1d, 0xa6, 0x4b,
0x99, 0x30, 0xd4, 0xaf, 0x50, 0x79, 0xce, 0x11, 0xe8, 0x73, 0x95, 0x85, 0xaf, 0x62, 0x14, 0x63,
0x04, 0x3b, 0x75, 0x76, 0xc6, 0xc4, 0x1c, 0xb1, 0x17, 0x87, 0xdf, 0x2e, 0x7d, 0xeb, 0xe2, 0xd2,
0xb7, 0x7e, 0x5c, 0xfa, 0xd6, 0xe7, 0x2b, 0xbf, 0x75, 0x71, 0xe5, 0xb7, 0xbe, 0x5f, 0xf9, 0xad,
0x0f, 0xf7, 0xfe, 0xf0, 0x6f, 0x8a, 0x1c, 0xb3, 0x5a, 0x8f, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff,
0xa2, 0x7b, 0x83, 0x08, 0xb9, 0x04, 0x00, 0x00,
}
func (m *ObjectType) Marshal() (dAtA []byte, err error) {
@ -494,6 +507,13 @@ func (m *ObjectType) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.IconEmoji) > 0 {
i -= len(m.IconEmoji)
copy(dAtA[i:], m.IconEmoji)
i = encodeVarintRelation(dAtA, i, uint64(len(m.IconEmoji)))
i--
dAtA[i] = 0x2a
}
if m.Layout != 0 {
i = encodeVarintRelation(dAtA, i, uint64(m.Layout))
i--
@ -753,6 +773,10 @@ func (m *ObjectType) Size() (n int) {
if m.Layout != 0 {
n += 1 + sovRelation(uint64(m.Layout))
}
l = len(m.IconEmoji)
if l > 0 {
n += 1 + l + sovRelation(uint64(l))
}
return n
}
@ -986,6 +1010,38 @@ func (m *ObjectType) Unmarshal(dAtA []byte) error {
break
}
}
case 5:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field IconEmoji", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRelation
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRelation
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthRelation
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.IconEmoji = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipRelation(dAtA[iNdEx:])

View file

@ -12,20 +12,22 @@ var ErrNotFound = fmt.Errorf("not found")
const bundledObjectTypeURLPrefix = "https://anytype.io/schemas/object/bundled/"
var (
bundledObjectTypes = map[string]*relation.ObjectType{
BundledObjectTypes = map[string]*relation.ObjectType{
"page": {
Url: bundledObjectTypeURLPrefix + "page",
Name: "Page",
Relations: []*relation.Relation{
bundledRelations["creationDate"],
bundledRelations["modifiedDate"],
bundledRelations["name"],
bundledRelations["iconEmoji"],
bundledRelations["iconImage"],
bundledRelations["coverImage"],
bundledRelations["coverX"],
bundledRelations["coverY"],
bundledRelations["coverScale"],
BundledRelations["creationDate"],
BundledRelations["lastModifiedDate"],
BundledRelations["lastOpenedDate"],
BundledRelations["name"],
BundledRelations["iconEmoji"],
BundledRelations["iconImage"],
BundledRelations["coverImage"],
BundledRelations["coverX"],
BundledRelations["coverY"],
BundledRelations["coverScale"],
},
Layout: relation.ObjectType_page,
},
@ -33,15 +35,16 @@ var (
Url: bundledObjectTypeURLPrefix + "set",
Name: "Set of objects",
Relations: []*relation.Relation{
bundledRelations["creationDate"],
bundledRelations["modifiedDate"],
bundledRelations["name"],
bundledRelations["iconEmoji"],
bundledRelations["iconImage"],
bundledRelations["coverImage"],
bundledRelations["coverX"],
bundledRelations["coverY"],
bundledRelations["coverScale"],
BundledRelations["creationDate"],
BundledRelations["lastModifiedDate"],
BundledRelations["lastOpenedDate"],
BundledRelations["name"],
BundledRelations["iconEmoji"],
BundledRelations["iconImage"],
BundledRelations["coverImage"],
BundledRelations["coverX"],
BundledRelations["coverY"],
BundledRelations["coverScale"],
},
Layout: relation.ObjectType_page,
},
@ -54,7 +57,7 @@ func GetObjectType(objectTypeURL string) (*relation.ObjectType, error) {
}
bundledId := strings.TrimPrefix(objectTypeURL, bundledObjectTypeURLPrefix)
if v, exists := bundledObjectTypes[bundledId]; exists {
if v, exists := BundledObjectTypes[bundledId]; exists {
return v, nil
} else {
return nil, ErrNotFound
@ -63,7 +66,7 @@ func GetObjectType(objectTypeURL string) (*relation.ObjectType, error) {
func ListObjectTypes() ([]*relation.ObjectType, error) {
var otypes []*relation.ObjectType
for _, ot := range bundledObjectTypes {
for _, ot := range BundledObjectTypes {
otypes = append(otypes, ot)
}

View file

@ -2,22 +2,43 @@ package relation
import "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/relation"
// all required internal relations will be added to any new object type
var RequiredInternalRelations = []string{"createdDate", "lastModifiedDate", "lastOpenedDate", "name", "id"}
var (
bundledRelations = map[string]*relation.Relation{
"creationDate": {
BundledRelations = map[string]*relation.Relation{
"id": {
Format: relation.RelationFormat_objectId,
Name: "Anytype ID",
DefaultValue: nil,
Key: "id",
DataSource: relation.Relation_local,
Hidden: true,
ReadOnly: true,
},
"createdDate": {
Format: relation.RelationFormat_date,
Name: "Creation date",
DefaultValue: nil,
Key: "creationDate",
Key: "createdDate",
DataSource: relation.Relation_local,
Hidden: false,
ReadOnly: true,
},
"modifiedDate": {
"lastModifiedDate": {
Format: relation.RelationFormat_date,
Name: "Last modified date",
DefaultValue: nil,
Key: "modifiedDate",
Key: "lastModifiedDate",
DataSource: relation.Relation_local,
Hidden: false,
ReadOnly: true,
},
"lastOpenedDate": {
Format: relation.RelationFormat_date,
Name: "Last opened date",
DefaultValue: nil,
Key: "lastOpenedDate",
DataSource: relation.Relation_local,
Hidden: false,
ReadOnly: true,

65
util/pbtypes/compare.go Normal file
View file

@ -0,0 +1,65 @@
package pbtypes
import (
pbrelation "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/relation"
"github.com/anytypeio/go-anytype-middleware/util/slice"
)
func RelationsEqual(rels1 []*pbrelation.Relation, rels2 []*pbrelation.Relation) (equal bool) {
if len(rels1) != len(rels2) {
return false
}
for i := 0; i < len(rels2); i++ {
if !RelationEqual(rels1[i], rels2[i]) {
return false
}
}
return true
}
func RelationEqual(rel1 *pbrelation.Relation, rel2 *pbrelation.Relation) (equal bool) {
if rel1 == nil && rel2 != nil {
return false
}
if rel2 == nil && rel1 != nil {
return false
}
if rel2 == nil && rel1 == nil {
return true
}
if rel1.Key != rel2.Key {
return false
}
if rel1.Format != rel2.Format {
return false
}
if rel1.Name != rel2.Name {
return false
}
if rel1.DefaultValue.Compare(rel2.DefaultValue) != 0 {
return false
}
if rel1.DataSource != rel2.DataSource {
return false
}
if rel1.Hidden != rel2.Hidden {
return false
}
if rel1.ReadOnly != rel2.ReadOnly {
return false
}
if rel1.Multi != rel2.Multi {
return false
}
if rel1.ObjectType != rel2.ObjectType {
return false
}
if !slice.SortedEquals(rel1.SelectDict, rel2.SelectDict) {
return false
}
return true
}

View file

@ -1,7 +1,6 @@
package pbtypes
import (
"bytes"
"sync"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
@ -108,19 +107,3 @@ func CopyRelationsToMap(in []*pbrelation.Relation) (out map[string]*pbrelation.R
return
}
func RelationsEqual(rels1 []*pbrelation.Relation, rels2 []*pbrelation.Relation) (equal bool) {
if len(rels1) != len(rels2) {
return false
}
for i := 0; i < len(rels2); i++ {
b1, _ := rels1[i].Marshal()
b2, _ := rels2[i].Marshal()
if !bytes.Equal(b1, b2) {
return false
}
}
return
}