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

refactor subobject, add objectType

This commit is contained in:
Roman Khafizianov 2022-11-16 01:32:56 +03:00
parent 8e68d72d02
commit 28874e2b4d
No known key found for this signature in database
GPG key ID: F07A7D55A2684852
33 changed files with 7736 additions and 6283 deletions

View file

@ -25,208 +25,211 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
// 3214 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0xdf, 0x6f, 0x1d, 0x47,
0x15, 0xc7, 0x7b, 0x5f, 0x28, 0x6c, 0x69, 0x81, 0x2d, 0x94, 0x12, 0x5a, 0x27, 0x4d, 0x1b, 0xff,
0x88, 0xe3, 0xeb, 0x34, 0x81, 0x22, 0x78, 0x41, 0x37, 0x76, 0x9c, 0x58, 0x8d, 0x93, 0xe0, 0xeb,
0x34, 0x52, 0x25, 0x24, 0xd6, 0xbb, 0x93, 0x7b, 0x17, 0xef, 0xdd, 0x59, 0x76, 0xe7, 0x5e, 0xc7,
0x20, 0x90, 0x10, 0x08, 0x44, 0x85, 0x04, 0x12, 0x8f, 0xfc, 0x11, 0xfc, 0x1b, 0x3c, 0xf6, 0x91,
0x47, 0xd4, 0xfe, 0x23, 0x68, 0x77, 0xce, 0xcc, 0xec, 0x9c, 0x9d, 0x33, 0xbb, 0xe6, 0xa9, 0x70,
0xcf, 0xe7, 0x9c, 0xef, 0xfc, 0x9e, 0x33, 0x33, 0x1b, 0x07, 0x57, 0x8b, 0xd3, 0xdd, 0xa2, 0xe4,
0x82, 0x57, 0xbb, 0x15, 0x2b, 0x57, 0x69, 0xcc, 0xd4, 0x7f, 0xc7, 0xcd, 0xcf, 0xe1, 0xab, 0x51,
0x7e, 0x21, 0x2e, 0x0a, 0x76, 0xe5, 0x6d, 0x43, 0xc6, 0x7c, 0xb1, 0x88, 0xf2, 0xa4, 0x92, 0xc8,
0x95, 0xb7, 0x8c, 0x85, 0xad, 0x58, 0x2e, 0xe0, 0xf7, 0x3b, 0xff, 0xfa, 0x6c, 0x14, 0xbc, 0xb1,
0x97, 0xa5, 0x2c, 0x17, 0x7b, 0xe0, 0x11, 0x7e, 0x1a, 0xbc, 0x3e, 0x29, 0x8a, 0x07, 0x4c, 0x7c,
0xc2, 0xca, 0x2a, 0xe5, 0x79, 0xf8, 0xfe, 0x18, 0x04, 0xc6, 0xc7, 0x45, 0x3c, 0x9e, 0x14, 0xc5,
0xd8, 0x18, 0xc7, 0xc7, 0xec, 0x57, 0x4b, 0x56, 0x89, 0x2b, 0x1f, 0xf8, 0xa1, 0xaa, 0xe0, 0x79,
0xc5, 0xc2, 0x17, 0xc1, 0xb7, 0x26, 0x45, 0x31, 0x65, 0x62, 0x9f, 0xd5, 0x15, 0x98, 0x8a, 0x48,
0xb0, 0x70, 0xa3, 0xe3, 0x6a, 0x03, 0x5a, 0x63, 0xb3, 0x1f, 0x04, 0x9d, 0x93, 0xe0, 0xb5, 0x5a,
0x67, 0xbe, 0x14, 0x09, 0x3f, 0xcf, 0xc3, 0xf7, 0xba, 0x8e, 0x60, 0xd2, 0xb1, 0xaf, 0xfb, 0x10,
0x88, 0xfa, 0x3c, 0xf8, 0xfa, 0xf3, 0x28, 0xcb, 0x98, 0xd8, 0x2b, 0x59, 0x5d, 0x70, 0xdb, 0x47,
0x9a, 0xc6, 0xd2, 0xa6, 0xe3, 0xbe, 0xef, 0x65, 0x20, 0xf0, 0xa7, 0xc1, 0xeb, 0xd2, 0x72, 0xcc,
0x62, 0xbe, 0x62, 0x65, 0xe8, 0xf4, 0x02, 0x23, 0xd1, 0xe4, 0x1d, 0x08, 0xc7, 0xde, 0xe3, 0xf9,
0x8a, 0x95, 0xc2, 0x1d, 0x1b, 0x8c, 0xfe, 0xd8, 0x06, 0x82, 0xd8, 0x59, 0xf0, 0x66, 0xbb, 0x41,
0xa6, 0xac, 0x6a, 0x06, 0xcc, 0x16, 0x5d, 0x67, 0x40, 0xb4, 0xce, 0xcd, 0x21, 0x28, 0xa8, 0xa5,
0x41, 0x08, 0x6a, 0x19, 0xaf, 0xb4, 0xd8, 0xa6, 0x33, 0x42, 0x8b, 0xd0, 0x5a, 0x5b, 0x03, 0x48,
0x90, 0xfa, 0x45, 0xf0, 0x8d, 0xe7, 0xbc, 0x3c, 0xab, 0x8a, 0x28, 0x66, 0xd0, 0xd9, 0x37, 0x6c,
0x6f, 0x65, 0xc5, 0xfd, 0xbd, 0xde, 0x87, 0x39, 0x14, 0xa6, 0x2c, 0x63, 0xb1, 0x20, 0x15, 0xa4,
0xb9, 0x57, 0x41, 0x63, 0xad, 0xce, 0x51, 0xc6, 0x07, 0x4c, 0xec, 0x2d, 0xcb, 0x92, 0xe5, 0x02,
0x77, 0x8e, 0x76, 0x37, 0x08, 0xd5, 0x39, 0x6e, 0xd4, 0x51, 0x9f, 0x07, 0x4c, 0x4c, 0xb2, 0x8c,
0xac, 0x8f, 0x34, 0xf7, 0xd6, 0x47, 0x63, 0xa0, 0xf0, 0xbb, 0xe0, 0x7b, 0xad, 0x16, 0x13, 0x87,
0xd5, 0xc3, 0x74, 0x36, 0xcf, 0xd2, 0xd9, 0x5c, 0xb0, 0x24, 0xdc, 0x25, 0x1b, 0xc5, 0x06, 0xb5,
0xea, 0xed, 0xe1, 0x0e, 0x8e, 0x1a, 0xde, 0x7f, 0x59, 0xf0, 0x92, 0xee, 0x31, 0x69, 0xee, 0xad,
0xa1, 0xc6, 0x40, 0xe1, 0xe7, 0xc1, 0x1b, 0x93, 0x38, 0xe6, 0xcb, 0x5c, 0xaf, 0x03, 0x68, 0x55,
0x95, 0xc6, 0xce, 0x42, 0x70, 0xa3, 0x87, 0x32, 0x2b, 0x01, 0xd8, 0x60, 0x48, 0xbf, 0xef, 0xf4,
0x43, 0x03, 0xfa, 0x03, 0x3f, 0xd4, 0x89, 0xbd, 0xcf, 0x32, 0x46, 0xc6, 0x96, 0xc6, 0x9e, 0xd8,
0x1a, 0xea, 0xc4, 0x86, 0x89, 0xe2, 0x8e, 0x8d, 0xa6, 0xc9, 0x07, 0x7e, 0xa8, 0xb5, 0x51, 0x40,
0x6c, 0xc1, 0x0b, 0xbc, 0x51, 0x28, 0x27, 0xc1, 0x0b, 0x6a, 0xa3, 0xb0, 0x91, 0x4e, 0xd4, 0x23,
0xbe, 0x62, 0x44, 0xd4, 0xda, 0xd4, 0x13, 0x15, 0x10, 0x33, 0xa1, 0x55, 0xff, 0xf1, 0xfc, 0x45,
0x3a, 0x7b, 0x56, 0x24, 0x75, 0x2f, 0x6e, 0xb9, 0x3b, 0xa8, 0x85, 0x10, 0x13, 0x9a, 0x40, 0x41,
0xed, 0x67, 0x41, 0xf0, 0xe4, 0xf4, 0x97, 0x2c, 0x16, 0x4f, 0x0a, 0x96, 0x87, 0xd7, 0x2c, 0x4f,
0x69, 0x18, 0xd7, 0x16, 0x1d, 0xfb, 0x3d, 0x0f, 0x61, 0x9a, 0x45, 0xfe, 0xde, 0x2c, 0xba, 0xa1,
0xd3, 0xa3, 0x31, 0x11, 0xcd, 0x82, 0x10, 0x5c, 0xd0, 0xe9, 0x9c, 0x9f, 0xbb, 0x0b, 0x5a, 0x5b,
0xfc, 0x05, 0x05, 0xc2, 0x6c, 0xf4, 0x50, 0x50, 0xd7, 0x46, 0xaf, 0x8a, 0xe1, 0xdb, 0xe8, 0x31,
0x03, 0x81, 0x79, 0xf0, 0xed, 0x76, 0xe0, 0x7b, 0x9c, 0x9f, 0x2d, 0xa2, 0xf2, 0x2c, 0xbc, 0x49,
0x3b, 0x2b, 0x46, 0x0b, 0x6d, 0x0f, 0x62, 0xcd, 0xa2, 0xd5, 0x16, 0x9c, 0x32, 0xbc, 0x68, 0x59,
0xfe, 0x53, 0x46, 0x2d, 0x5a, 0x0e, 0x0c, 0x77, 0xea, 0x83, 0x32, 0x2a, 0xe6, 0xee, 0x4e, 0x6d,
0x4c, 0xfe, 0x4e, 0x55, 0x08, 0xee, 0x81, 0x29, 0x8b, 0xca, 0x78, 0xee, 0xee, 0x01, 0x69, 0xf3,
0xf7, 0x80, 0x66, 0x20, 0x70, 0x19, 0x7c, 0xa7, 0x1d, 0x78, 0xba, 0x3c, 0xad, 0xe2, 0x32, 0x3d,
0x65, 0xe1, 0x36, 0xed, 0xad, 0x21, 0x2d, 0x75, 0x6b, 0x18, 0x0c, 0x9a, 0x7f, 0x1e, 0x05, 0xef,
0x48, 0xe6, 0x98, 0x65, 0x91, 0x48, 0x79, 0x2e, 0xd1, 0xfd, 0xb4, 0x12, 0x69, 0x1e, 0x8b, 0xf0,
0x8e, 0x2b, 0x9c, 0x9b, 0xd5, 0x45, 0xb8, 0x7b, 0x29, 0x1f, 0x93, 0x42, 0x41, 0xed, 0x55, 0x29,
0x0f, 0x93, 0x0a, 0xa5, 0x50, 0xaa, 0x36, 0x2d, 0x82, 0x48, 0xa1, 0xdc, 0x24, 0x48, 0xbd, 0x0c,
0xbe, 0xdb, 0x6e, 0xe8, 0x67, 0x79, 0xa5, 0x9b, 0x7a, 0x87, 0x6e, 0xbd, 0x16, 0xa6, 0x45, 0xc7,
0x43, 0x71, 0x50, 0x8e, 0x83, 0x6f, 0x2a, 0x65, 0xb1, 0xcf, 0x44, 0x94, 0x66, 0x55, 0xb8, 0xee,
0x8e, 0xa1, 0xec, 0x5a, 0x6b, 0xa3, 0x97, 0xc3, 0x13, 0x6b, 0x7f, 0x59, 0x64, 0x69, 0xdc, 0xcd,
0x10, 0xc1, 0x57, 0x9b, 0xfd, 0x13, 0xab, 0x8d, 0x99, 0xe5, 0x5e, 0x57, 0x43, 0xfe, 0x8f, 0x93,
0x8b, 0x02, 0x2f, 0xf7, 0xa6, 0x84, 0x06, 0x21, 0x96, 0x7b, 0x02, 0xc5, 0xf5, 0x99, 0x32, 0xf1,
0x28, 0xba, 0xe0, 0x4b, 0x62, 0xa1, 0xd0, 0x66, 0x7f, 0x7d, 0xda, 0x18, 0x28, 0x2c, 0x83, 0xb7,
0xb4, 0xc2, 0x61, 0x2e, 0x58, 0x99, 0x47, 0xd9, 0x41, 0x16, 0xcd, 0xaa, 0x90, 0x98, 0x4d, 0x36,
0xa5, 0xf5, 0x76, 0x06, 0xd2, 0x8e, 0x66, 0x3c, 0xac, 0x0e, 0xa2, 0x15, 0x2f, 0x53, 0x41, 0x37,
0xa3, 0x41, 0x7a, 0x9b, 0xd1, 0x42, 0x9d, 0x6a, 0x93, 0x32, 0x9e, 0xa7, 0x2b, 0x96, 0x78, 0xd4,
0x14, 0x32, 0x40, 0xad, 0x85, 0x62, 0xb5, 0x47, 0x69, 0xd5, 0x1a, 0x88, 0x4e, 0x35, 0x0b, 0xf1,
0xab, 0x61, 0x14, 0xcf, 0xab, 0xc6, 0x2e, 0xd3, 0xbc, 0x75, 0xd2, 0xdf, 0xce, 0xf4, 0x36, 0x7a,
0x39, 0xbc, 0x6c, 0xd4, 0x46, 0xbb, 0x11, 0x77, 0xa8, 0x18, 0xee, 0x86, 0x1c, 0x0f, 0xc5, 0x49,
0x65, 0x3d, 0x58, 0xfc, 0xca, 0x9d, 0x01, 0x33, 0x1e, 0x8a, 0xe3, 0x6e, 0x9c, 0x14, 0x45, 0x76,
0x71, 0xc2, 0x16, 0x45, 0x46, 0x76, 0xa3, 0x85, 0xf8, 0xbb, 0x11, 0xa3, 0x78, 0xc3, 0x3e, 0xe1,
0x75, 0x3a, 0xe0, 0xdc, 0xb0, 0x1b, 0x93, 0x7f, 0xc3, 0x56, 0x08, 0xde, 0x57, 0x27, 0x49, 0xf2,
0x3c, 0x15, 0x73, 0xf9, 0x7f, 0x0e, 0x13, 0xf7, 0xbe, 0x8a, 0x20, 0xff, 0xbe, 0xda, 0x85, 0xcd,
0x6d, 0x92, 0xca, 0xfc, 0xa2, 0x92, 0xdd, 0xbb, 0x78, 0x94, 0xe6, 0x67, 0xa1, 0x7b, 0x05, 0x37,
0x00, 0x71, 0x9b, 0xe4, 0x04, 0x71, 0xdd, 0xea, 0x74, 0xf6, 0x5e, 0xc9, 0xa2, 0x24, 0x2e, 0x97,
0x8b, 0xd3, 0xca, 0x5d, 0x37, 0x04, 0xf9, 0xeb, 0xd6, 0x85, 0x71, 0xa6, 0x38, 0x65, 0xa2, 0x2d,
0x49, 0x2d, 0x0f, 0x2e, 0xc5, 0xed, 0x41, 0x2c, 0x4e, 0xa3, 0x9f, 0xe5, 0x09, 0x77, 0xa7, 0xd1,
0xb5, 0xc5, 0x9f, 0x46, 0x03, 0x81, 0x43, 0x1e, 0x33, 0x2a, 0x64, 0x6d, 0xf1, 0x87, 0x04, 0x02,
0x37, 0xcb, 0xe1, 0xa2, 0x3e, 0x3b, 0x1f, 0x45, 0xe5, 0x59, 0x73, 0xc3, 0xe7, 0x6c, 0x16, 0x9b,
0xf1, 0x37, 0x4b, 0x87, 0x75, 0x2d, 0x7a, 0x70, 0xec, 0x27, 0x17, 0x3d, 0x74, 0xee, 0xdf, 0xe8,
0xe5, 0xf0, 0x02, 0xa0, 0x12, 0xf8, 0x03, 0x26, 0xe2, 0xb9, 0x7b, 0x01, 0xb0, 0x10, 0xff, 0x02,
0x80, 0x51, 0x5c, 0xa5, 0x13, 0xae, 0x0f, 0x20, 0xeb, 0xee, 0x29, 0xde, 0x39, 0x7c, 0x6c, 0xf4,
0x72, 0x38, 0x81, 0x97, 0x0d, 0xeb, 0x4e, 0xe0, 0xa5, 0xcd, 0x9f, 0xc0, 0x6b, 0x06, 0x97, 0x5e,
0x1a, 0xea, 0xe6, 0x74, 0x97, 0xde, 0xd8, 0xfd, 0xa5, 0xb7, 0x38, 0xf7, 0x39, 0x4d, 0xa5, 0xd5,
0xbe, 0x73, 0x9a, 0x62, 0x86, 0x9c, 0xd3, 0x5a, 0x2c, 0x08, 0xfe, 0x7e, 0x14, 0x5c, 0x71, 0x29,
0x3e, 0x29, 0x1a, 0xdd, 0xdb, 0xfd, 0xb1, 0x24, 0xa9, 0xd5, 0x3f, 0xbc, 0x84, 0x07, 0x94, 0xe1,
0x37, 0xc1, 0xdb, 0xca, 0x54, 0xb7, 0xc6, 0x31, 0x5b, 0xf0, 0x15, 0x83, 0x02, 0xd8, 0x5b, 0x9a,
0x2e, 0x3f, 0xe6, 0xb4, 0xfc, 0xee, 0x60, 0xde, 0xe4, 0x9f, 0x76, 0xb9, 0x2a, 0x94, 0x7f, 0xea,
0x18, 0x60, 0x26, 0xf2, 0x4f, 0x07, 0x86, 0x77, 0x0b, 0x85, 0x4c, 0x92, 0xc4, 0xb9, 0x5b, 0xe8,
0x10, 0x93, 0x24, 0xf1, 0xee, 0x16, 0x08, 0xc4, 0x63, 0x47, 0x99, 0x21, 0x55, 0xba, 0xe9, 0x8b,
0x80, 0xd2, 0xa5, 0xed, 0x41, 0xac, 0xb9, 0x18, 0xed, 0x54, 0xec, 0x80, 0x45, 0x62, 0x59, 0x76,
0x2e, 0x46, 0xbb, 0xe5, 0x56, 0x20, 0x71, 0x31, 0xea, 0x75, 0x20, 0x8f, 0xb7, 0xb2, 0x8b, 0x75,
0x19, 0xee, 0xf8, 0x42, 0xda, 0xac, 0xf7, 0x78, 0x4b, 0xfb, 0x40, 0x49, 0xfe, 0x38, 0x0a, 0xbe,
0x6f, 0xa3, 0xf5, 0x80, 0x9b, 0xac, 0xa2, 0x34, 0x8b, 0x4e, 0x33, 0x16, 0x7e, 0xe8, 0x0b, 0x6a,
0xa1, 0xba, 0x1c, 0x77, 0x2e, 0xe3, 0x82, 0x4f, 0x3a, 0x72, 0xbe, 0xb5, 0x0e, 0x6f, 0xb7, 0xe8,
0x59, 0xe9, 0x38, 0xbf, 0xed, 0x0c, 0xa4, 0x41, 0xf6, 0x5c, 0xc9, 0xd6, 0x3f, 0xb7, 0x1b, 0xc0,
0x99, 0xbf, 0x82, 0x6f, 0xab, 0x26, 0xde, 0xfc, 0xd5, 0x89, 0x83, 0xb0, 0x50, 0xf9, 0x51, 0x5b,
0xb8, 0x9e, 0x5d, 0xb7, 0x7a, 0x03, 0xb5, 0xa7, 0xd8, 0xce, 0x40, 0x1a, 0x54, 0x7f, 0x1b, 0xbc,
0xdd, 0x55, 0x95, 0x23, 0xc3, 0x39, 0xea, 0xed, 0x50, 0x12, 0xf4, 0x8e, 0x7a, 0xc2, 0xc1, 0x5c,
0xa5, 0x3c, 0x4c, 0x2b, 0xc1, 0xcb, 0x8b, 0xe9, 0x9c, 0x9f, 0xab, 0xb7, 0x52, 0x7b, 0x99, 0x00,
0x60, 0xdc, 0x22, 0x88, 0xab, 0x14, 0x37, 0xd9, 0x91, 0x32, 0x6f, 0xaa, 0x15, 0x21, 0xd5, 0x22,
0x7a, 0xa4, 0x6c, 0xd2, 0x2c, 0x92, 0xaa, 0x56, 0xe6, 0x01, 0x78, 0xc3, 0x5d, 0xd4, 0xee, 0x23,
0xf0, 0x66, 0x3f, 0x68, 0x0e, 0x21, 0x07, 0x69, 0xc6, 0x9e, 0xbc, 0x78, 0x91, 0xf1, 0x28, 0x41,
0x87, 0x90, 0xda, 0x32, 0x06, 0x13, 0x71, 0x08, 0x41, 0x88, 0xd9, 0x44, 0x6a, 0x43, 0x3d, 0x3a,
0x55, 0xe4, 0x1b, 0x5d, 0xb7, 0x96, 0x99, 0xd8, 0x44, 0x1c, 0x98, 0x49, 0x69, 0x6b, 0xe3, 0xb3,
0xa2, 0x09, 0x7e, 0xad, 0xeb, 0x25, 0x2d, 0x44, 0x4a, 0x6b, 0x13, 0x26, 0x53, 0xaa, 0x7f, 0xdf,
0xe7, 0xe7, 0x79, 0x13, 0xd4, 0x51, 0x51, 0x65, 0x23, 0x32, 0x25, 0xcc, 0x40, 0xe0, 0x8f, 0x83,
0xaf, 0x36, 0x81, 0x4b, 0x5e, 0x84, 0x6b, 0x0e, 0x87, 0xb2, 0xf5, 0xaa, 0x71, 0x95, 0xb4, 0x9b,
0x33, 0xd0, 0xe3, 0x68, 0x95, 0xce, 0xf4, 0xa2, 0x22, 0xe7, 0x08, 0x3e, 0x03, 0x19, 0x66, 0xdc,
0x82, 0x88, 0x33, 0x10, 0x09, 0x83, 0xe6, 0x3f, 0x46, 0xc1, 0x35, 0xc3, 0x3c, 0x50, 0x17, 0x57,
0x87, 0xf9, 0x0b, 0x5e, 0x1f, 0x08, 0xeb, 0x43, 0x5a, 0x15, 0x7e, 0x44, 0x85, 0x74, 0xf3, 0xba,
0x28, 0x3f, 0xba, 0xb4, 0x9f, 0x49, 0x93, 0xd4, 0xa1, 0x5a, 0xae, 0xc5, 0x07, 0x25, 0x5f, 0x48,
0x0f, 0x94, 0x26, 0xe9, 0xb3, 0x37, 0xe6, 0x88, 0x34, 0xc9, 0xc7, 0xb7, 0xf6, 0x5a, 0x4a, 0xbd,
0xd9, 0x61, 0xee, 0x0c, 0x8b, 0x68, 0xed, 0x33, 0x77, 0x2f, 0xe5, 0x63, 0x5e, 0xe5, 0x74, 0x41,
0x32, 0x9e, 0xe3, 0x17, 0x3f, 0x13, 0xa5, 0x36, 0x12, 0xaf, 0x72, 0x1d, 0xc8, 0xac, 0x42, 0xca,
0x24, 0x8f, 0x4a, 0x93, 0x2c, 0x43, 0xab, 0x90, 0x76, 0xd5, 0x00, 0xb1, 0x0a, 0x39, 0x41, 0xd0,
0x39, 0x0e, 0x5e, 0xab, 0x3b, 0xf7, 0x69, 0xc9, 0x56, 0x29, 0xc3, 0x6f, 0x47, 0x2d, 0x0b, 0x31,
0x9d, 0x6d, 0xc2, 0x3c, 0xe2, 0x3e, 0xcb, 0xab, 0x22, 0x8b, 0xaa, 0x39, 0xbc, 0x5d, 0xd8, 0x75,
0x56, 0x46, 0xfc, 0x7a, 0x71, 0xa3, 0x87, 0x32, 0xc7, 0x1f, 0x65, 0xd3, 0x2b, 0xc6, 0xba, 0xdb,
0xb5, 0xb3, 0x6a, 0x6c, 0xf4, 0x72, 0x66, 0x75, 0xbe, 0x97, 0xf1, 0xf8, 0x0c, 0x96, 0x39, 0xbb,
0xd6, 0x8d, 0x05, 0xaf, 0x73, 0xd7, 0x7d, 0x88, 0x59, 0xe8, 0x1a, 0xc3, 0x31, 0x2b, 0xb2, 0x28,
0xc6, 0xaf, 0x6a, 0xd2, 0x07, 0x6c, 0xc4, 0x42, 0x87, 0x19, 0x54, 0x5c, 0x78, 0xad, 0x73, 0x15,
0x17, 0x3d, 0xd6, 0x5d, 0xf7, 0x21, 0x66, 0xa9, 0x6f, 0x0c, 0xd3, 0x22, 0x4b, 0x05, 0x1a, 0x1b,
0xd2, 0xa3, 0xb1, 0x10, 0x63, 0xc3, 0x26, 0x50, 0xc8, 0x23, 0x56, 0xce, 0x98, 0x33, 0x64, 0x63,
0xf1, 0x86, 0x54, 0x04, 0x84, 0x7c, 0x1c, 0x7c, 0x4d, 0xd6, 0x9d, 0x17, 0x17, 0xe1, 0x55, 0x57,
0xb5, 0x78, 0x71, 0xa1, 0x03, 0x5e, 0xa3, 0x01, 0x54, 0xc4, 0xa7, 0x51, 0x25, 0xdc, 0x45, 0x6c,
0x2c, 0xde, 0x22, 0x2a, 0xc2, 0xec, 0x43, 0xb2, 0x88, 0x4b, 0x81, 0xf6, 0x21, 0x28, 0x40, 0xeb,
0x31, 0xe1, 0x2a, 0x69, 0x37, 0xd3, 0x4b, 0xf6, 0x0a, 0x13, 0x07, 0x29, 0xcb, 0x92, 0x0a, 0x4d,
0x2f, 0x68, 0x77, 0x65, 0x25, 0xa6, 0x57, 0x97, 0x42, 0x43, 0x09, 0x6e, 0x7a, 0x5c, 0xb5, 0x43,
0x97, 0x3c, 0xd7, 0x7d, 0x88, 0xc9, 0x4b, 0x1a, 0x43, 0xeb, 0xe2, 0xdc, 0x55, 0x1e, 0xc7, 0xbd,
0xf9, 0x7a, 0x1f, 0x06, 0x0a, 0x9f, 0x8d, 0x82, 0x77, 0xb5, 0xc4, 0x11, 0x5f, 0xb1, 0x13, 0x7e,
0xff, 0x65, 0xf3, 0xfc, 0x37, 0x83, 0xad, 0xe9, 0x2e, 0x11, 0xc9, 0x05, 0x6b, 0xf9, 0x1f, 0x5c,
0xce, 0xc9, 0xec, 0x90, 0xa8, 0x2c, 0x8f, 0xd9, 0xb9, 0x73, 0x87, 0xc4, 0x11, 0x35, 0x47, 0xec,
0x90, 0x3e, 0xde, 0x9c, 0x86, 0xb5, 0x38, 0x7c, 0xb0, 0x76, 0xc2, 0x55, 0xb2, 0x42, 0x45, 0xc3,
0x20, 0x71, 0x2e, 0xf0, 0x3a, 0x98, 0x64, 0x5d, 0xeb, 0x9b, 0x41, 0xba, 0x49, 0xc4, 0xe9, 0x0e,
0xd4, 0xad, 0x01, 0xa4, 0x43, 0xca, 0xbc, 0xfe, 0x50, 0x52, 0xdd, 0xc7, 0x9f, 0xad, 0x01, 0x64,
0xeb, 0x64, 0xdd, 0xae, 0xd6, 0xbd, 0x28, 0x3e, 0x9b, 0x95, 0x7c, 0x99, 0x27, 0x7b, 0x3c, 0xe3,
0x25, 0x3a, 0x59, 0x5b, 0xa5, 0x46, 0x28, 0x71, 0xb2, 0xee, 0x71, 0x31, 0x89, 0x41, 0xbb, 0x14,
0x93, 0x2c, 0x9d, 0xe1, 0xe3, 0x89, 0x15, 0xa8, 0x01, 0x88, 0xc4, 0xc0, 0x09, 0x3a, 0x06, 0x91,
0x3c, 0xbe, 0x88, 0x34, 0x8e, 0x32, 0xa9, 0xb7, 0x4b, 0x87, 0xb1, 0xc0, 0xde, 0x41, 0xe4, 0x70,
0x70, 0xd4, 0xf3, 0x64, 0x59, 0xe6, 0x87, 0xb9, 0xe0, 0x64, 0x3d, 0x15, 0xd0, 0x5b, 0xcf, 0x16,
0x68, 0xb2, 0x89, 0xc6, 0x7c, 0xc2, 0x5e, 0xd6, 0xa5, 0xa9, 0xff, 0x13, 0x3a, 0x96, 0x9c, 0xfa,
0xf7, 0x31, 0xd8, 0x89, 0x6c, 0xc2, 0xc5, 0xa1, 0xca, 0x80, 0x88, 0x1c, 0x30, 0x1e, 0x6f, 0x7b,
0x98, 0x6c, 0xf6, 0x83, 0x6e, 0x9d, 0xa9, 0xb8, 0xc8, 0x98, 0x4f, 0xa7, 0x01, 0x86, 0xe8, 0x28,
0xd0, 0xdc, 0xd6, 0x5b, 0xf5, 0x99, 0xb3, 0xf8, 0xac, 0xf3, 0xc6, 0x6b, 0x17, 0x54, 0x22, 0xc4,
0x6d, 0x3d, 0x81, 0xba, 0xbb, 0xe8, 0x30, 0xe6, 0xb9, 0xaf, 0x8b, 0x6a, 0xfb, 0x90, 0x2e, 0x02,
0xce, 0x9c, 0xee, 0xb4, 0x15, 0x46, 0xa6, 0xec, 0xa6, 0x6d, 0x22, 0x42, 0x1b, 0x22, 0x4e, 0x77,
0x24, 0x6c, 0xee, 0x49, 0xb1, 0xe6, 0x51, 0xf7, 0x5b, 0xa8, 0x4e, 0x94, 0x23, 0xfa, 0x5b, 0x28,
0x8a, 0xa5, 0x2b, 0x29, 0xc7, 0x48, 0x4f, 0x14, 0x7b, 0x9c, 0xdc, 0x1a, 0x06, 0x9b, 0x47, 0x65,
0x4b, 0x73, 0x2f, 0x63, 0x51, 0x29, 0x55, 0x77, 0x3c, 0x81, 0x0c, 0x46, 0x5c, 0xca, 0x79, 0x70,
0xb4, 0x84, 0x59, 0xca, 0x7b, 0x3c, 0x17, 0x2c, 0x17, 0xae, 0x25, 0xcc, 0x0e, 0x06, 0xa0, 0x6f,
0x09, 0xa3, 0x1c, 0xd0, 0xb8, 0x3d, 0x48, 0x33, 0x36, 0x65, 0xe2, 0x71, 0xb4, 0x60, 0xae, 0x71,
0xdb, 0x5c, 0x35, 0x80, 0xdd, 0x37, 0x6e, 0x11, 0x87, 0xa6, 0xfc, 0xe1, 0x22, 0x9a, 0x69, 0x15,
0x87, 0x77, 0x63, 0xef, 0xc8, 0x6c, 0xf6, 0x83, 0x48, 0xe7, 0x93, 0x34, 0x61, 0xdc, 0xa3, 0xd3,
0xd8, 0x87, 0xe8, 0x60, 0x10, 0x65, 0x4e, 0x75, 0x6d, 0xe5, 0x79, 0x64, 0x92, 0x27, 0x70, 0x0a,
0x1b, 0x13, 0x8d, 0x82, 0x38, 0x5f, 0xe6, 0x44, 0xf0, 0x68, 0x7e, 0xa8, 0x2b, 0x34, 0xdf, 0xfc,
0xd0, 0x37, 0x64, 0x43, 0xe6, 0x87, 0x0b, 0x06, 0xcd, 0x5f, 0xc3, 0xfc, 0xd8, 0x8f, 0x44, 0x54,
0x9f, 0xa3, 0x3f, 0x49, 0xd9, 0x39, 0x1c, 0xe3, 0x1c, 0xf5, 0x55, 0xd4, 0xb8, 0xc6, 0xf0, 0x99,
0x6e, 0x77, 0x30, 0xef, 0xd1, 0x86, 0xec, 0xbc, 0x57, 0x1b, 0xa5, 0xe9, 0xbb, 0x83, 0x79, 0x8f,
0x36, 0x7c, 0xcf, 0xdb, 0xab, 0x8d, 0x3e, 0xea, 0xdd, 0x1d, 0xcc, 0x83, 0xf6, 0x1f, 0x46, 0xc1,
0x95, 0x8e, 0x78, 0x9d, 0x03, 0xc5, 0x22, 0x5d, 0x31, 0x57, 0x2a, 0x67, 0xc7, 0xd3, 0xa8, 0x2f,
0x95, 0xa3, 0x5d, 0xa0, 0x14, 0x7f, 0x19, 0x05, 0xef, 0xb8, 0x4a, 0xf1, 0x94, 0x57, 0x69, 0xf3,
0xe4, 0x78, 0x77, 0x40, 0x50, 0x05, 0xfb, 0x0e, 0x2c, 0x3e, 0x27, 0xf3, 0x60, 0x63, 0xa1, 0xf5,
0x38, 0xe5, 0xcb, 0x32, 0xc6, 0x0f, 0x36, 0x76, 0x3c, 0x4d, 0x11, 0x2f, 0x18, 0x34, 0x6d, 0x5e,
0x30, 0x2c, 0xa6, 0xfd, 0x74, 0xe2, 0xeb, 0x55, 0xe7, 0xeb, 0xc9, 0xed, 0xe1, 0x0e, 0x20, 0xff,
0x27, 0x95, 0xd3, 0x63, 0x7d, 0x98, 0x04, 0x77, 0x86, 0x44, 0x44, 0x13, 0xe1, 0xee, 0xa5, 0x7c,
0xa0, 0x20, 0xff, 0x1c, 0x05, 0xd7, 0x9d, 0x05, 0xb1, 0x5f, 0xef, 0x7e, 0x3c, 0x24, 0xb6, 0xfb,
0x15, 0xef, 0x27, 0xff, 0x8f, 0x2b, 0x94, 0xee, 0xaf, 0xea, 0x68, 0xad, 0x3c, 0x1e, 0x94, 0x7c,
0x59, 0x3c, 0x29, 0x13, 0x56, 0xc2, 0x8c, 0xf5, 0x0d, 0x3a, 0x03, 0xe3, 0x79, 0xfb, 0xc3, 0x4b,
0x7a, 0x41, 0x71, 0xfe, 0x36, 0x0a, 0xd6, 0x2c, 0x18, 0x3e, 0x4d, 0x6a, 0x95, 0xc7, 0x17, 0xb9,
0x45, 0xe3, 0x02, 0x7d, 0x74, 0x59, 0x37, 0x9c, 0xa1, 0xd6, 0xed, 0x06, 0x8b, 0xb7, 0x2b, 0x43,
0x6d, 0x9a, 0x15, 0x2d, 0xda, 0x1b, 0xbd, 0x9c, 0x4b, 0xe4, 0xfe, 0xcb, 0x22, 0xca, 0x13, 0x5a,
0x44, 0xda, 0xfb, 0x45, 0x34, 0x87, 0x33, 0xfb, 0xda, 0x7a, 0xcc, 0xd5, 0x4e, 0xb4, 0x45, 0xf9,
0x6b, 0xc4, 0x9b, 0xd9, 0x77, 0x50, 0x42, 0x0d, 0xa6, 0x9d, 0x4f, 0x0d, 0xcd, 0xb6, 0x9b, 0x43,
0x50, 0xb4, 0xc6, 0x69, 0x35, 0x7d, 0x61, 0x70, 0xcb, 0x17, 0xa5, 0x73, 0x69, 0xb0, 0x33, 0x90,
0x26, 0x64, 0xa7, 0x4c, 0x3c, 0x64, 0x51, 0xc2, 0x4a, 0xaf, 0xac, 0xa6, 0x06, 0xc9, 0xb6, 0x69,
0x97, 0xec, 0x1e, 0xcf, 0x96, 0x8b, 0x1c, 0x3a, 0x93, 0x94, 0x6d, 0x53, 0xfd, 0xb2, 0x88, 0xc6,
0x67, 0x1a, 0x23, 0xdb, 0xfc, 0x0b, 0xa0, 0x9b, 0xfe, 0x30, 0xd6, 0x3f, 0x05, 0xda, 0x1e, 0xc4,
0xd2, 0xf5, 0x84, 0x61, 0xd4, 0x53, 0x4f, 0x34, 0x92, 0x76, 0x06, 0xd2, 0xf8, 0x70, 0xd1, 0x92,
0xd5, 0xe3, 0x69, 0xb7, 0x27, 0x56, 0x67, 0x48, 0xdd, 0x1e, 0xee, 0x80, 0x8f, 0x72, 0x30, 0xaa,
0xea, 0xa5, 0xfb, 0x20, 0xcd, 0xb2, 0x70, 0xdb, 0x33, 0x4c, 0x14, 0xe4, 0x3d, 0xca, 0x39, 0x60,
0x62, 0x24, 0xab, 0xa3, 0x4f, 0x1e, 0xf6, 0xc5, 0x69, 0xa8, 0x41, 0x23, 0xb9, 0x4d, 0xa3, 0x23,
0x41, 0xab, 0xa9, 0x75, 0x6d, 0xc7, 0xfe, 0x86, 0xeb, 0x54, 0x78, 0x77, 0x30, 0x8f, 0x6e, 0xdb,
0x1b, 0x6a, 0xca, 0x4b, 0xe1, 0xba, 0x6d, 0x97, 0x21, 0xa6, 0xed, 0x4b, 0xf1, 0x1b, 0x3d, 0x54,
0xe7, 0x9a, 0x2d, 0x87, 0xc7, 0x1b, 0xf3, 0xa1, 0xaf, 0x6b, 0x18, 0x35, 0x9f, 0xe5, 0x62, 0xd0,
0x37, 0x8c, 0x28, 0x87, 0xd6, 0x57, 0x77, 0x9a, 0x53, 0x37, 0x81, 0x45, 0xc1, 0xa2, 0x32, 0xca,
0x63, 0x16, 0x52, 0x01, 0x3b, 0x24, 0xf1, 0xd5, 0x9d, 0xdf, 0x03, 0x5d, 0xe2, 0xda, 0x9f, 0x7e,
0x3a, 0x8e, 0x8c, 0xfa, 0x1b, 0x4b, 0xfb, 0xcb, 0xcf, 0xad, 0x01, 0x24, 0xbe, 0xc4, 0x55, 0x80,
0x3e, 0x0a, 0x4a, 0xd1, 0x0f, 0x3d, 0xa1, 0x6c, 0xd4, 0x97, 0xf9, 0xd3, 0x2e, 0x68, 0xdf, 0x33,
0xff, 0x58, 0x49, 0x7c, 0xcc, 0x2e, 0x5c, 0xfb, 0x9e, 0x4e, 0xcd, 0x24, 0xe2, 0xdb, 0xf7, 0xba,
0x28, 0x4a, 0x1c, 0xda, 0xc9, 0xf5, 0xba, 0xc7, 0xbf, 0x9d, 0x53, 0x6f, 0xf4, 0x72, 0x68, 0xdd,
0xdf, 0x4f, 0x57, 0xd6, 0xc9, 0xd9, 0x51, 0xd0, 0xfd, 0x74, 0xe5, 0x3e, 0x38, 0x6f, 0x0f, 0x62,
0xf1, 0x05, 0x71, 0x24, 0xd8, 0x4b, 0x75, 0x73, 0xeb, 0x28, 0x6e, 0x63, 0xef, 0x5c, 0xdd, 0x6e,
0xf6, 0x83, 0xe6, 0x95, 0xff, 0x69, 0xc9, 0x63, 0x56, 0x55, 0x7b, 0xf5, 0xb0, 0xcd, 0xd0, 0x2b,
0x3f, 0xd8, 0xc6, 0xd2, 0x48, 0xbc, 0xf2, 0x77, 0x20, 0x88, 0xfd, 0x30, 0x78, 0xf5, 0x11, 0x9f,
0x4d, 0x59, 0x9e, 0x84, 0xef, 0xda, 0xef, 0xea, 0x7c, 0x36, 0xae, 0x7f, 0xd6, 0xf1, 0xd6, 0x28,
0xb3, 0x79, 0x04, 0xdd, 0x67, 0xa7, 0xcb, 0xd9, 0xf4, 0x22, 0x8f, 0xd1, 0x23, 0x68, 0xf3, 0xfb,
0xb8, 0x36, 0x10, 0x8f, 0xa0, 0x16, 0x60, 0x5e, 0x01, 0x9b, 0x9f, 0x4f, 0xe6, 0x25, 0xeb, 0xbc,
0x7f, 0x4b, 0x07, 0x69, 0x22, 0x5e, 0x01, 0x11, 0x82, 0x4a, 0x79, 0x52, 0x32, 0xe6, 0x2c, 0x65,
0x6d, 0xf0, 0x96, 0x12, 0x00, 0xb3, 0x09, 0x36, 0x3f, 0xcb, 0xd7, 0xc6, 0x47, 0x3c, 0x8e, 0xb2,
0x4a, 0xf0, 0x12, 0xdf, 0xd7, 0x48, 0x57, 0x0c, 0x11, 0x9b, 0x20, 0x09, 0xa3, 0x3a, 0x3c, 0x4d,
0xf3, 0x99, 0xb3, 0x0e, 0xb5, 0xc1, 0x5b, 0x07, 0x00, 0xcc, 0xc4, 0x39, 0x62, 0xa2, 0x4c, 0xe3,
0xaa, 0x3e, 0x98, 0x47, 0x65, 0xb4, 0x60, 0x82, 0x95, 0xf8, 0x9f, 0x39, 0x00, 0x32, 0xb6, 0x18,
0x62, 0xe2, 0x50, 0x2c, 0x08, 0xfe, 0x34, 0x78, 0xb3, 0x9e, 0x51, 0x2c, 0x87, 0xbf, 0xf9, 0x70,
0xbf, 0xf9, 0x73, 0x28, 0xe1, 0x5b, 0x3a, 0xc6, 0x54, 0x94, 0x2c, 0x5a, 0xa8, 0xd8, 0x6f, 0xe8,
0xdf, 0x1b, 0xf0, 0xf6, 0xe8, 0xde, 0x7b, 0xff, 0xfe, 0x62, 0x6d, 0xf4, 0xf9, 0x17, 0x6b, 0xa3,
0xff, 0x7e, 0xb1, 0x36, 0xfa, 0xfb, 0x97, 0x6b, 0xaf, 0x7c, 0xfe, 0xe5, 0xda, 0x2b, 0xff, 0xf9,
0x72, 0xed, 0x95, 0x4f, 0x5f, 0x85, 0x3f, 0xcb, 0x72, 0xfa, 0x95, 0xe6, 0x8f, 0xab, 0xdc, 0xfd,
0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0xa5, 0xc1, 0xd7, 0xba, 0x45, 0x00, 0x00,
// 3258 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0xdd, 0x8e, 0x1c, 0x47,
0xf5, 0xc0, 0x33, 0x37, 0xff, 0xfc, 0xe9, 0x90, 0x00, 0x1d, 0x30, 0xc1, 0x24, 0x6b, 0xc7, 0x89,
0xf7, 0xc3, 0xeb, 0x9d, 0xdd, 0xd8, 0x10, 0x04, 0x37, 0x68, 0xbc, 0xeb, 0xb5, 0x57, 0xf1, 0xda,
0x66, 0x67, 0x1d, 0x4b, 0x91, 0x90, 0xe8, 0xed, 0x29, 0xcf, 0x34, 0xdb, 0xd3, 0xd5, 0x74, 0xd7,
0xcc, 0x7a, 0x40, 0x20, 0x10, 0x08, 0x04, 0x8a, 0x04, 0x12, 0x97, 0x3c, 0x02, 0x2f, 0xc2, 0x65,
0x2e, 0xb9, 0x44, 0xf1, 0x8b, 0xa0, 0xee, 0x3a, 0x55, 0xd5, 0x75, 0xba, 0x4e, 0x75, 0x2f, 0x57,
0x81, 0x39, 0xbf, 0xf3, 0x51, 0xdf, 0xe7, 0x54, 0xf5, 0x3a, 0xb8, 0x96, 0x9f, 0xed, 0xe6, 0x05,
0x17, 0xbc, 0xdc, 0x2d, 0x59, 0xb1, 0x4c, 0x62, 0xa6, 0xfe, 0x3b, 0xac, 0x7f, 0x0e, 0x5f, 0x8f,
0xb2, 0x95, 0x58, 0xe5, 0xec, 0xea, 0x3b, 0x86, 0x8c, 0xf9, 0x7c, 0x1e, 0x65, 0x93, 0x52, 0x22,
0x57, 0xaf, 0x18, 0x09, 0x5b, 0xb2, 0x4c, 0xc0, 0xef, 0x77, 0xfe, 0xf9, 0xf9, 0x20, 0x78, 0x6b,
0x3f, 0x4d, 0x58, 0x26, 0xf6, 0x41, 0x23, 0xfc, 0x2c, 0x78, 0x73, 0x94, 0xe7, 0x0f, 0x98, 0xf8,
0x94, 0x15, 0x65, 0xc2, 0xb3, 0xf0, 0x83, 0x21, 0x38, 0x18, 0x9e, 0xe4, 0xf1, 0x70, 0x94, 0xe7,
0x43, 0x23, 0x1c, 0x9e, 0xb0, 0x5f, 0x2c, 0x58, 0x29, 0xae, 0x7e, 0xe8, 0x87, 0xca, 0x9c, 0x67,
0x25, 0x0b, 0x5f, 0x04, 0xdf, 0x18, 0xe5, 0xf9, 0x98, 0x89, 0x03, 0x56, 0x35, 0x60, 0x2c, 0x22,
0xc1, 0xc2, 0x8d, 0x96, 0xaa, 0x0d, 0x68, 0x1f, 0x9b, 0xdd, 0x20, 0xf8, 0x39, 0x0d, 0xde, 0xa8,
0xfc, 0xcc, 0x16, 0x62, 0xc2, 0x2f, 0xb2, 0xf0, 0xfd, 0xb6, 0x22, 0x88, 0xb4, 0xed, 0x1b, 0x3e,
0x04, 0xac, 0x3e, 0x0f, 0xbe, 0xfa, 0x3c, 0x4a, 0x53, 0x26, 0xf6, 0x0b, 0x56, 0x05, 0x6e, 0xeb,
0x48, 0xd1, 0x50, 0xca, 0xb4, 0xdd, 0x0f, 0xbc, 0x0c, 0x18, 0xfe, 0x2c, 0x78, 0x53, 0x4a, 0x4e,
0x58, 0xcc, 0x97, 0xac, 0x08, 0x9d, 0x5a, 0x20, 0x24, 0xba, 0xbc, 0x05, 0x61, 0xdb, 0xfb, 0x3c,
0x5b, 0xb2, 0x42, 0xb8, 0x6d, 0x83, 0xd0, 0x6f, 0xdb, 0x40, 0x60, 0x3b, 0x0d, 0xde, 0x6e, 0x76,
0xc8, 0x98, 0x95, 0xf5, 0x84, 0xd9, 0xa2, 0xdb, 0x0c, 0x88, 0xf6, 0x73, 0xab, 0x0f, 0x0a, 0xde,
0x92, 0x20, 0x04, 0x6f, 0x29, 0x2f, 0xb5, 0xb3, 0x4d, 0xa7, 0x85, 0x06, 0xa1, 0x7d, 0x6d, 0xf5,
0x20, 0xc1, 0xd5, 0xcf, 0x82, 0xaf, 0x3d, 0xe7, 0xc5, 0x79, 0x99, 0x47, 0x31, 0x83, 0xc1, 0xbe,
0x69, 0x6b, 0x2b, 0x29, 0x1e, 0xef, 0xf5, 0x2e, 0x0c, 0x3c, 0x5c, 0x04, 0x57, 0xb4, 0xf0, 0xc9,
0xd9, 0xcf, 0x59, 0x2c, 0x1e, 0x25, 0xa5, 0x18, 0x4d, 0x26, 0xe1, 0x0e, 0x61, 0x41, 0x52, 0x43,
0xc0, 0xb4, 0xc3, 0x61, 0x5f, 0x1c, 0x1c, 0xff, 0x76, 0x10, 0x7c, 0xc7, 0xe1, 0xf9, 0x84, 0xcd,
0xf9, 0x92, 0x85, 0x7b, 0xdd, 0xd6, 0x24, 0xa9, 0xfd, 0x7f, 0x74, 0x09, 0x0d, 0x47, 0xef, 0x8e,
0x59, 0xca, 0x62, 0x41, 0xf6, 0xae, 0x14, 0x77, 0xf6, 0xae, 0xc6, 0x1a, 0x13, 0x53, 0x09, 0x1f,
0x30, 0xb1, 0xbf, 0x28, 0x0a, 0x96, 0x09, 0x3c, 0x31, 0xb5, 0xba, 0x41, 0xa8, 0x89, 0xe9, 0x46,
0x1d, 0xed, 0x79, 0xc0, 0xc4, 0x28, 0x4d, 0xc9, 0xf6, 0x48, 0x71, 0x67, 0x7b, 0x34, 0x06, 0x1e,
0x7e, 0xd3, 0x18, 0xb3, 0x31, 0x13, 0x47, 0xe5, 0xc3, 0x64, 0x3a, 0x4b, 0x93, 0xe9, 0x4c, 0xb0,
0x49, 0xb8, 0x4b, 0x76, 0x8a, 0x0d, 0x6a, 0xaf, 0x7b, 0xfd, 0x15, 0x1c, 0x2d, 0xbc, 0xff, 0x32,
0xe7, 0x05, 0x3d, 0x62, 0x52, 0xdc, 0xd9, 0x42, 0x8d, 0x81, 0x87, 0x9f, 0x06, 0x6f, 0x8d, 0xe2,
0x98, 0x2f, 0x32, 0xbd, 0x07, 0xa2, 0x13, 0x45, 0x0a, 0x5b, 0x9b, 0xe0, 0xcd, 0x0e, 0xca, 0xec,
0x82, 0x20, 0x83, 0xe5, 0xfc, 0x81, 0x53, 0x0f, 0x2d, 0xe6, 0x0f, 0xfd, 0x50, 0xcb, 0xf6, 0x01,
0x4b, 0x19, 0x69, 0x5b, 0x0a, 0x3b, 0x6c, 0x6b, 0xa8, 0x65, 0x1b, 0x16, 0x8a, 0xdb, 0x36, 0x5a,
0x26, 0x1f, 0xfa, 0xa1, 0xc6, 0x21, 0x09, 0xb6, 0x05, 0xcf, 0xf1, 0x21, 0xa9, 0x94, 0x04, 0xcf,
0xa9, 0x43, 0xd2, 0x46, 0x5a, 0x56, 0x8f, 0xab, 0x0d, 0xc5, 0x6d, 0xf5, 0xb8, 0xb9, 0x83, 0xdc,
0xf0, 0x21, 0x66, 0x41, 0xab, 0xf1, 0xe3, 0xd9, 0x8b, 0x64, 0xfa, 0x2c, 0x9f, 0x54, 0xa3, 0xb8,
0xe5, 0x1e, 0xa0, 0x06, 0x42, 0x2c, 0x68, 0x02, 0x05, 0x6f, 0x3f, 0x09, 0x02, 0xb9, 0x7d, 0x3d,
0xc9, 0x59, 0x16, 0x5e, 0xb7, 0x34, 0x61, 0x5f, 0xab, 0x24, 0xda, 0xf6, 0xfb, 0x1e, 0xc2, 0x74,
0x8b, 0xfc, 0xbd, 0x3e, 0x70, 0x42, 0xa7, 0x46, 0x2d, 0x22, 0xba, 0x05, 0x21, 0x38, 0xd0, 0xf1,
0x8c, 0x5f, 0xb8, 0x03, 0xad, 0x24, 0xfe, 0x40, 0x81, 0x30, 0x49, 0x0e, 0x04, 0xea, 0x4a, 0x72,
0x54, 0x18, 0xbe, 0x24, 0x07, 0x33, 0x60, 0x98, 0x07, 0xdf, 0x6c, 0x1a, 0xbe, 0xc7, 0xf9, 0xf9,
0x3c, 0x2a, 0xce, 0xc3, 0x5b, 0xb4, 0xb2, 0x62, 0xb4, 0xa3, 0xed, 0x5e, 0xac, 0xd9, 0xb4, 0x9a,
0x0e, 0xc7, 0x0c, 0x6f, 0x5a, 0x96, 0xfe, 0x98, 0x51, 0x9b, 0x96, 0x03, 0xc3, 0x83, 0xfa, 0xa0,
0x88, 0xf2, 0x99, 0x7b, 0x50, 0x6b, 0x91, 0x7f, 0x50, 0x15, 0x82, 0x47, 0x60, 0xcc, 0xa2, 0x22,
0x9e, 0xb9, 0x47, 0x40, 0xca, 0xfc, 0x23, 0xa0, 0x19, 0x30, 0x5c, 0x04, 0xdf, 0x6a, 0x1a, 0x1e,
0x2f, 0xce, 0xca, 0xb8, 0x48, 0xce, 0x58, 0xb8, 0x4d, 0x6b, 0x6b, 0x48, 0xbb, 0xba, 0xdd, 0x0f,
0x06, 0x9f, 0x7f, 0x1a, 0x04, 0xef, 0x4a, 0xe6, 0x84, 0xa5, 0x91, 0x48, 0x78, 0x26, 0xd1, 0x83,
0xa4, 0x14, 0x49, 0x16, 0x8b, 0xf0, 0x8e, 0xcb, 0x9c, 0x9b, 0xd5, 0x21, 0xdc, 0xbd, 0x94, 0x8e,
0x49, 0x1f, 0xa1, 0xf5, 0x2a, 0xca, 0xa3, 0x49, 0x89, 0xd2, 0x47, 0xd5, 0x9a, 0x06, 0x41, 0xa4,
0x8f, 0x6e, 0x12, 0x5c, 0xbd, 0x0c, 0xbe, 0xdd, 0xec, 0xe8, 0x67, 0x59, 0xa9, 0xbb, 0x7a, 0x87,
0xee, 0xbd, 0x06, 0x46, 0x64, 0x77, 0x1e, 0x1c, 0x3c, 0xc7, 0xc1, 0xd7, 0x95, 0x67, 0x71, 0xc0,
0x44, 0x94, 0xa4, 0x65, 0xb8, 0xee, 0xb6, 0xa1, 0xe4, 0xda, 0xd7, 0x46, 0x27, 0x87, 0x17, 0xd6,
0xc1, 0x22, 0x4f, 0x93, 0xb8, 0x9d, 0x1d, 0x83, 0xae, 0x16, 0xfb, 0x17, 0x56, 0x13, 0x33, 0xdb,
0xbd, 0x6e, 0x86, 0xfc, 0x1f, 0xa7, 0xab, 0x1c, 0x6f, 0xf7, 0x26, 0x42, 0x83, 0x10, 0xdb, 0x3d,
0x81, 0xe2, 0xf6, 0x8c, 0x99, 0x78, 0x14, 0xad, 0xf8, 0x82, 0xd8, 0x28, 0xb4, 0xd8, 0xdf, 0x9e,
0x26, 0x06, 0x1e, 0x16, 0xc1, 0x15, 0xed, 0xe1, 0x28, 0x13, 0xac, 0xc8, 0xa2, 0xf4, 0x30, 0x8d,
0xa6, 0x65, 0x48, 0xac, 0x26, 0x9b, 0xd2, 0xfe, 0x76, 0x7a, 0xd2, 0x8e, 0x6e, 0x3c, 0x2a, 0x0f,
0xa3, 0x25, 0x2f, 0x12, 0x41, 0x77, 0xa3, 0x41, 0x3a, 0xbb, 0xd1, 0x42, 0x9d, 0xde, 0x46, 0x45,
0x3c, 0x4b, 0x96, 0x6c, 0xe2, 0xf1, 0xa6, 0x90, 0x1e, 0xde, 0x1a, 0x28, 0xf6, 0x56, 0x55, 0x18,
0x66, 0x22, 0x3a, 0xbd, 0x59, 0x88, 0xdf, 0x1b, 0x46, 0xf1, 0xba, 0xaa, 0xe5, 0x32, 0xcd, 0x5b,
0x27, 0xf5, 0xed, 0x4c, 0x6f, 0xa3, 0x93, 0xc3, 0xdb, 0x46, 0x25, 0xb4, 0x3b, 0x71, 0x87, 0xb2,
0xe1, 0xee, 0xc8, 0x61, 0x5f, 0x9c, 0xf4, 0xac, 0x27, 0x8b, 0xdf, 0x73, 0x6b, 0xc2, 0x0c, 0xfb,
0xe2, 0x78, 0x18, 0x47, 0x79, 0x9e, 0xae, 0x4e, 0xd9, 0x3c, 0x4f, 0xc9, 0x61, 0xb4, 0x10, 0xff,
0x30, 0x62, 0x14, 0x1f, 0xd8, 0xa7, 0xbc, 0x4a, 0x07, 0x9c, 0x07, 0x76, 0x2d, 0xf2, 0x1f, 0xd8,
0x0a, 0xc1, 0xe7, 0xea, 0x68, 0x32, 0x79, 0x9e, 0x88, 0x99, 0xfc, 0x3f, 0x47, 0x13, 0xf7, 0xb9,
0x8a, 0x20, 0xff, 0xb9, 0xda, 0x86, 0xcd, 0x4d, 0x9a, 0xca, 0xfc, 0xa2, 0x82, 0xdd, 0x5b, 0x3d,
0x4a, 0xb2, 0xf3, 0xd0, 0xbd, 0x83, 0x1b, 0x80, 0xb8, 0x49, 0x73, 0x82, 0xb8, 0x6d, 0x55, 0x3a,
0x7b, 0xaf, 0x60, 0xd1, 0x24, 0x2e, 0x16, 0xf3, 0xb3, 0xd2, 0xdd, 0x36, 0x04, 0xf9, 0xdb, 0xd6,
0x86, 0x71, 0xa6, 0x38, 0x66, 0xa2, 0xe9, 0x92, 0xda, 0x1e, 0x5c, 0x1e, 0xb7, 0x7b, 0xb1, 0x38,
0x8d, 0x7e, 0x96, 0x4d, 0xb8, 0x3b, 0x8d, 0xae, 0x24, 0xfe, 0x34, 0x1a, 0x08, 0x6c, 0xf2, 0x84,
0x51, 0x26, 0x2b, 0x89, 0xdf, 0x24, 0x10, 0xb8, 0x5b, 0x8e, 0xe6, 0x55, 0xed, 0x7c, 0x1c, 0x15,
0xe7, 0xf5, 0xed, 0xa6, 0xb3, 0x5b, 0x6c, 0xc6, 0xdf, 0x2d, 0x2d, 0xd6, 0xb5, 0xe9, 0x41, 0xd9,
0x4f, 0x6e, 0x7a, 0xa8, 0xee, 0xdf, 0xe8, 0xe4, 0xf0, 0x06, 0xa0, 0x12, 0xf8, 0x43, 0x26, 0xe2,
0x99, 0x7b, 0x03, 0xb0, 0x10, 0xff, 0x06, 0x80, 0x51, 0xdc, 0xa4, 0x53, 0xae, 0x0b, 0x90, 0x75,
0xf7, 0x12, 0x6f, 0x15, 0x1f, 0x1b, 0x9d, 0x1c, 0x4e, 0xe0, 0x65, 0xc7, 0xba, 0x13, 0x78, 0x29,
0xf3, 0x27, 0xf0, 0x9a, 0xc1, 0xd1, 0x4b, 0x41, 0xd5, 0x9d, 0xee, 0xe8, 0x8d, 0xdc, 0x1f, 0xbd,
0xc5, 0xb9, 0xeb, 0x34, 0x95, 0x56, 0xfb, 0xea, 0x34, 0xc5, 0xf4, 0xa9, 0xd3, 0x1a, 0x2c, 0x38,
0xfc, 0xdd, 0x20, 0xb8, 0xea, 0xf2, 0xf8, 0x24, 0xaf, 0xfd, 0xee, 0x75, 0xdb, 0x92, 0x24, 0x71,
0x25, 0xe9, 0xd7, 0x80, 0x18, 0x7e, 0x15, 0xbc, 0xa3, 0x44, 0xe6, 0xc6, 0x12, 0x02, 0xb0, 0x8f,
0x34, 0x1d, 0x3f, 0xe6, 0xb4, 0xfb, 0xdd, 0xde, 0xbc, 0xc9, 0x3f, 0xed, 0xb8, 0x4a, 0x94, 0x7f,
0x6a, 0x1b, 0x20, 0x26, 0xf2, 0x4f, 0x07, 0x86, 0x4f, 0x0b, 0x85, 0x8c, 0x26, 0x13, 0xe7, 0x69,
0xa1, 0x4d, 0x34, 0xaf, 0x98, 0x37, 0xbb, 0x41, 0x3c, 0x77, 0x94, 0x18, 0x52, 0xa5, 0x5b, 0x3e,
0x0b, 0x28, 0x5d, 0xda, 0xee, 0xc5, 0x9a, 0x8b, 0xd1, 0x56, 0xc3, 0x0e, 0x59, 0x24, 0x16, 0x45,
0xeb, 0x62, 0xb4, 0x1d, 0xb7, 0x02, 0x89, 0x8b, 0x51, 0xaf, 0x02, 0x59, 0xde, 0xca, 0x21, 0xd6,
0x31, 0xdc, 0xf1, 0x99, 0xb4, 0x59, 0x6f, 0x79, 0x4b, 0xeb, 0x40, 0x24, 0x7f, 0x18, 0x04, 0xdf,
0xb5, 0xd1, 0xfa, 0xea, 0x7f, 0x19, 0x25, 0x69, 0x74, 0x96, 0xb2, 0xf0, 0x23, 0x9f, 0x51, 0x0b,
0xd5, 0x71, 0xdc, 0xb9, 0x8c, 0x0a, 0xae, 0x74, 0xe4, 0x7a, 0x6b, 0x14, 0x6f, 0xb7, 0xe9, 0x55,
0xe9, 0xa8, 0xdf, 0x76, 0x7a, 0xd2, 0xe6, 0x39, 0xc5, 0xfc, 0xdc, 0xec, 0x00, 0x67, 0xfe, 0x0a,
0xba, 0x8d, 0x96, 0x78, 0xf3, 0x57, 0x27, 0x0e, 0x8e, 0x85, 0xca, 0x8f, 0x9a, 0x8e, 0xab, 0xd5,
0x75, 0xbb, 0xd3, 0x50, 0x73, 0x89, 0xed, 0xf4, 0xa4, 0xc1, 0xeb, 0xaf, 0x83, 0x77, 0xda, 0x5e,
0xe1, 0x09, 0x67, 0xb7, 0xd3, 0x14, 0x7a, 0xc1, 0xd9, 0xeb, 0xaf, 0x60, 0xae, 0x52, 0x1e, 0x26,
0xa5, 0xe0, 0xc5, 0x6a, 0x3c, 0xe3, 0x17, 0xea, 0x9d, 0xd8, 0xde, 0x26, 0x00, 0x18, 0x36, 0x08,
0xe2, 0x2a, 0xc5, 0x4d, 0xb6, 0x5c, 0x99, 0xf7, 0xe4, 0x92, 0x70, 0xd5, 0x20, 0x3a, 0x5c, 0xd9,
0xa4, 0xd9, 0x24, 0x55, 0xab, 0xcc, 0xe3, 0xf7, 0x86, 0x3b, 0xd4, 0xf6, 0x03, 0xf8, 0x66, 0x37,
0x68, 0x8a, 0x90, 0xc3, 0x24, 0x65, 0x4f, 0x5e, 0xbc, 0x48, 0x79, 0x34, 0x41, 0x45, 0x48, 0x25,
0x19, 0x82, 0x88, 0x28, 0x42, 0x10, 0x62, 0x0e, 0x91, 0x4a, 0x50, 0xcd, 0x4e, 0x65, 0xf9, 0x66,
0x5b, 0xad, 0x21, 0x26, 0x0e, 0x11, 0x07, 0x66, 0x52, 0xda, 0x4a, 0xf8, 0x2c, 0xaf, 0x8d, 0x5f,
0x6f, 0x6b, 0x49, 0x09, 0x91, 0xd2, 0xda, 0x84, 0xc9, 0x94, 0xaa, 0xdf, 0x0f, 0xf8, 0x45, 0x56,
0x1b, 0x75, 0x34, 0x54, 0xc9, 0x88, 0x4c, 0x09, 0x33, 0x60, 0xf8, 0x93, 0xe0, 0xff, 0x6b, 0xc3,
0x05, 0xcf, 0xc3, 0x35, 0x87, 0x42, 0xd1, 0x78, 0xd5, 0xb8, 0x46, 0xca, 0x4d, 0x0d, 0xf4, 0x38,
0x5a, 0x26, 0x53, 0xbd, 0xa9, 0xc8, 0x35, 0x82, 0x6b, 0x20, 0xc3, 0x0c, 0x1b, 0x10, 0x51, 0x03,
0x91, 0x30, 0xf8, 0xfc, 0xfb, 0x20, 0xb8, 0x6e, 0x98, 0x07, 0xea, 0xe2, 0xea, 0x28, 0x7b, 0xc1,
0xab, 0x82, 0xb0, 0x2a, 0xd2, 0xca, 0xf0, 0x63, 0xca, 0xa4, 0x9b, 0xd7, 0xa1, 0xfc, 0xe0, 0xd2,
0x7a, 0x26, 0x4d, 0x52, 0x45, 0xb5, 0xdc, 0x8b, 0x0f, 0x0b, 0x3e, 0x97, 0x1a, 0x28, 0x4d, 0xd2,
0xb5, 0x37, 0xe6, 0x88, 0x34, 0xc9, 0xc7, 0x37, 0xce, 0x5a, 0xca, 0x7b, 0x7d, 0xc2, 0xdc, 0xe9,
0x67, 0xd1, 0x3a, 0x67, 0xee, 0x5e, 0x4a, 0xc7, 0xbc, 0xca, 0xe9, 0x40, 0x52, 0x9e, 0xe1, 0x17,
0x3f, 0x63, 0xa5, 0x12, 0x12, 0xaf, 0x72, 0x2d, 0xc8, 0xec, 0x42, 0x4a, 0x24, 0x4b, 0xa5, 0x51,
0x9a, 0xa2, 0x5d, 0x48, 0xab, 0x6a, 0x80, 0xd8, 0x85, 0x9c, 0x20, 0xf8, 0x39, 0x09, 0xde, 0xa8,
0x06, 0xf7, 0x69, 0xc1, 0x96, 0x09, 0xc3, 0x6f, 0x47, 0x0d, 0x09, 0xb1, 0x9c, 0x6d, 0xc2, 0x3c,
0xe2, 0x3e, 0xcb, 0xca, 0x3c, 0x8d, 0xca, 0x19, 0xbc, 0x5d, 0xd8, 0x6d, 0x56, 0x42, 0xfc, 0x7a,
0x71, 0xb3, 0x83, 0x32, 0xe5, 0x8f, 0x92, 0xe9, 0x1d, 0x63, 0xdd, 0xad, 0xda, 0xda, 0x35, 0x36,
0x3a, 0x39, 0xb3, 0x3b, 0xdf, 0x4b, 0x79, 0x7c, 0x0e, 0xdb, 0x9c, 0xdd, 0xea, 0x5a, 0x82, 0xf7,
0xb9, 0x1b, 0x3e, 0xc4, 0x6c, 0x74, 0xb5, 0xe0, 0x84, 0xe5, 0x69, 0x14, 0xe3, 0x57, 0x35, 0xa9,
0x03, 0x32, 0x62, 0xa3, 0xc3, 0x0c, 0x0a, 0x17, 0x5e, 0xeb, 0x5c, 0xe1, 0xa2, 0xc7, 0xba, 0x1b,
0x3e, 0xc4, 0x6c, 0xf5, 0xb5, 0x60, 0x9c, 0xa7, 0x89, 0x40, 0x73, 0x43, 0x6a, 0xd4, 0x12, 0x62,
0x6e, 0xd8, 0x04, 0x32, 0x79, 0xcc, 0x8a, 0x29, 0x73, 0x9a, 0xac, 0x25, 0x5e, 0x93, 0x8a, 0x00,
0x93, 0x8f, 0x83, 0xaf, 0xc8, 0xb6, 0xf3, 0x7c, 0x15, 0x5e, 0x73, 0x35, 0x8b, 0xe7, 0x2b, 0x6d,
0xf0, 0x3a, 0x0d, 0xa0, 0x10, 0x9f, 0x46, 0xa5, 0x70, 0x87, 0x58, 0x4b, 0xbc, 0x21, 0x2a, 0xc2,
0x9c, 0x43, 0x32, 0xc4, 0x85, 0x40, 0xe7, 0x10, 0x04, 0xd0, 0x78, 0x4c, 0xb8, 0x46, 0xca, 0xcd,
0xf2, 0x92, 0xa3, 0xc2, 0xc4, 0x61, 0xc2, 0xd2, 0x49, 0x89, 0x96, 0x17, 0xf4, 0xbb, 0x92, 0x12,
0xcb, 0xab, 0x4d, 0xa1, 0xa9, 0x04, 0x37, 0x3d, 0xae, 0xd6, 0xa1, 0x4b, 0x9e, 0x1b, 0x3e, 0xc4,
0xe4, 0x25, 0xb5, 0xa0, 0x71, 0x71, 0xee, 0x8a, 0xc7, 0x71, 0x6f, 0xbe, 0xde, 0x85, 0x81, 0x87,
0xbf, 0x0c, 0x82, 0xf7, 0xb4, 0x8b, 0x63, 0xbe, 0x64, 0xa7, 0xfc, 0xfe, 0xcb, 0xfa, 0xf9, 0x6f,
0x0a, 0x47, 0xd3, 0x5d, 0xc2, 0x92, 0x0b, 0xd6, 0xee, 0xbf, 0x77, 0x39, 0x25, 0x73, 0x42, 0xa2,
0x58, 0x1e, 0xb3, 0x0b, 0xe7, 0x09, 0x89, 0x2d, 0x6a, 0x8e, 0x38, 0x21, 0x7d, 0xbc, 0xa9, 0x86,
0xb5, 0x73, 0xf8, 0x58, 0xef, 0x94, 0xab, 0x64, 0x85, 0xb2, 0x86, 0x41, 0xa2, 0x2e, 0xf0, 0x2a,
0x98, 0x64, 0x5d, 0xfb, 0x37, 0x93, 0x74, 0x93, 0xb0, 0xd3, 0x9e, 0xa8, 0x5b, 0x3d, 0x48, 0x87,
0x2b, 0xf3, 0xfa, 0x43, 0xb9, 0x6a, 0x3f, 0xfe, 0x6c, 0xf5, 0x20, 0x1b, 0x95, 0x75, 0xb3, 0x59,
0xf7, 0xa2, 0xf8, 0x7c, 0x5a, 0xf0, 0x45, 0x36, 0xd9, 0xe7, 0x29, 0x2f, 0x50, 0x65, 0x6d, 0x45,
0x8d, 0x50, 0xa2, 0xb2, 0xee, 0x50, 0x31, 0x89, 0x41, 0x33, 0x8a, 0x51, 0x9a, 0x4c, 0x71, 0x79,
0x62, 0x19, 0xaa, 0x01, 0x22, 0x31, 0x70, 0x82, 0x8e, 0x49, 0x24, 0xcb, 0x17, 0x91, 0xc4, 0x51,
0x2a, 0xfd, 0xed, 0xd2, 0x66, 0x2c, 0xb0, 0x73, 0x12, 0x39, 0x14, 0x1c, 0xed, 0x3c, 0x5d, 0x14,
0xd9, 0x51, 0x26, 0x38, 0xd9, 0x4e, 0x05, 0x74, 0xb6, 0xb3, 0x01, 0x9a, 0x6c, 0xa2, 0x16, 0x9f,
0xb2, 0x97, 0x55, 0x34, 0xd5, 0x7f, 0x42, 0xc7, 0x96, 0x53, 0xfd, 0x3e, 0x04, 0x39, 0x91, 0x4d,
0xb8, 0x38, 0xd4, 0x18, 0x70, 0x22, 0x27, 0x8c, 0x47, 0xdb, 0x9e, 0x26, 0x9b, 0xdd, 0xa0, 0xdb,
0xcf, 0x58, 0xac, 0x52, 0xe6, 0xf3, 0x53, 0x03, 0x7d, 0xfc, 0x28, 0xd0, 0xdc, 0xd6, 0x5b, 0xed,
0x99, 0xb1, 0xf8, 0xbc, 0xf5, 0xc6, 0x6b, 0x07, 0x2a, 0x11, 0xe2, 0xb6, 0x9e, 0x40, 0xdd, 0x43,
0x74, 0x14, 0xf3, 0xcc, 0x37, 0x44, 0x95, 0xbc, 0xcf, 0x10, 0x01, 0x67, 0xaa, 0x3b, 0x2d, 0x85,
0x99, 0x29, 0x87, 0x69, 0x9b, 0xb0, 0xd0, 0x84, 0x88, 0xea, 0x8e, 0x84, 0xcd, 0x3d, 0x29, 0xf6,
0x79, 0xdc, 0xfe, 0x16, 0xaa, 0x65, 0xe5, 0x98, 0xfe, 0x16, 0x8a, 0x62, 0xe9, 0x46, 0xca, 0x39,
0xd2, 0x61, 0xc5, 0x9e, 0x27, 0xb7, 0xfb, 0xc1, 0xe6, 0x51, 0xd9, 0xf2, 0xb9, 0x9f, 0xb2, 0xa8,
0x90, 0x5e, 0x77, 0x3c, 0x86, 0x0c, 0x46, 0x5c, 0xca, 0x79, 0x70, 0xb4, 0x85, 0x59, 0x9e, 0xf7,
0x79, 0x26, 0x58, 0x26, 0x5c, 0x5b, 0x98, 0x6d, 0x0c, 0x40, 0xdf, 0x16, 0x46, 0x29, 0xa0, 0x79,
0x7b, 0x98, 0xa4, 0x6c, 0xcc, 0xc4, 0xe3, 0x68, 0xce, 0x5c, 0xf3, 0xb6, 0xbe, 0x6a, 0x00, 0xb9,
0x6f, 0xde, 0x22, 0x0e, 0x2d, 0xf9, 0xa3, 0x79, 0x34, 0xd5, 0x5e, 0x1c, 0xda, 0xb5, 0xbc, 0xe5,
0x66, 0xb3, 0x1b, 0x44, 0x7e, 0x3e, 0x4d, 0x26, 0x8c, 0x7b, 0xfc, 0xd4, 0xf2, 0x3e, 0x7e, 0x30,
0x88, 0x32, 0xa7, 0xaa, 0xb5, 0xb2, 0x1e, 0x19, 0x65, 0x13, 0xa8, 0xc2, 0x86, 0x44, 0xa7, 0x20,
0xce, 0x97, 0x39, 0x11, 0x3c, 0x5a, 0x1f, 0xea, 0x0a, 0xcd, 0xb7, 0x3e, 0xf4, 0x0d, 0x59, 0x9f,
0xf5, 0xe1, 0x82, 0xc1, 0xe7, 0x2f, 0x61, 0x7d, 0x1c, 0x44, 0x22, 0xaa, 0xea, 0xe8, 0x4f, 0x13,
0x76, 0x01, 0x65, 0x9c, 0xa3, 0xbd, 0x8a, 0x1a, 0x56, 0x18, 0xae, 0xe9, 0x76, 0x7b, 0xf3, 0x1e,
0xdf, 0x90, 0x9d, 0x77, 0xfa, 0x46, 0x69, 0xfa, 0x6e, 0x6f, 0xde, 0xe3, 0x1b, 0xbe, 0xe7, 0xed,
0xf4, 0x8d, 0x3e, 0xea, 0xdd, 0xed, 0xcd, 0x83, 0xef, 0xdf, 0x0f, 0x82, 0xab, 0x2d, 0xe7, 0x55,
0x0e, 0x14, 0x8b, 0x64, 0xc9, 0x5c, 0xa9, 0x9c, 0x6d, 0x4f, 0xa3, 0xbe, 0x54, 0x8e, 0x56, 0x81,
0x28, 0xfe, 0x3c, 0x08, 0xde, 0x75, 0x45, 0xf1, 0x94, 0x97, 0x49, 0xfd, 0xe4, 0x78, 0xb7, 0x87,
0x51, 0x05, 0xfb, 0x0a, 0x16, 0x9f, 0x92, 0x79, 0xb0, 0xb1, 0xd0, 0x6a, 0x9e, 0xf2, 0x45, 0x11,
0xe3, 0x07, 0x1b, 0xdb, 0x9e, 0xa6, 0x88, 0x17, 0x0c, 0x9a, 0x36, 0x2f, 0x18, 0x16, 0xd3, 0x7c,
0x3a, 0xf1, 0x8d, 0xaa, 0xf3, 0xf5, 0x64, 0xaf, 0xbf, 0x02, 0xb8, 0xff, 0xa3, 0xca, 0xe9, 0xb1,
0x7f, 0x58, 0x04, 0x77, 0xfa, 0x58, 0x44, 0x0b, 0xe1, 0xee, 0xa5, 0x74, 0x20, 0x90, 0x7f, 0x0c,
0x82, 0x1b, 0xce, 0x40, 0xec, 0xd7, 0xbb, 0x1f, 0xf6, 0xb1, 0xed, 0x7e, 0xc5, 0xfb, 0xd1, 0xff,
0xa2, 0x0a, 0xd1, 0x7d, 0xae, 0x4a, 0x6b, 0xa5, 0xf1, 0xa0, 0xe0, 0x8b, 0xfc, 0x49, 0x31, 0x61,
0x05, 0xac, 0x58, 0xdf, 0xa4, 0x33, 0x30, 0x5e, 0xb7, 0xdf, 0xbf, 0xa4, 0x16, 0x84, 0xf3, 0xd7,
0x41, 0xb0, 0x66, 0xc1, 0xf0, 0x69, 0x52, 0x23, 0x1e, 0x9f, 0xe5, 0x06, 0x8d, 0x03, 0xfa, 0xf8,
0xb2, 0x6a, 0x38, 0x43, 0xad, 0xfa, 0x0d, 0x36, 0x6f, 0x57, 0x86, 0x5a, 0x77, 0x2b, 0xda, 0xb4,
0x37, 0x3a, 0x39, 0x97, 0x93, 0xfb, 0x2f, 0xf3, 0x28, 0x9b, 0xd0, 0x4e, 0xa4, 0xbc, 0xdb, 0x89,
0xe6, 0x70, 0x66, 0x5f, 0x49, 0x4f, 0xb8, 0x3a, 0x89, 0xb6, 0x28, 0x7d, 0x8d, 0x78, 0x33, 0xfb,
0x16, 0x4a, 0x78, 0x83, 0x65, 0xe7, 0xf3, 0x86, 0x56, 0xdb, 0xad, 0x3e, 0x28, 0xda, 0xe3, 0xb4,
0x37, 0x7d, 0x61, 0x70, 0xdb, 0x67, 0xa5, 0x75, 0x69, 0xb0, 0xd3, 0x93, 0x26, 0xdc, 0x8e, 0x99,
0x78, 0xc8, 0xa2, 0x09, 0x2b, 0xbc, 0x6e, 0x35, 0xd5, 0xcb, 0x6d, 0x93, 0x76, 0xb9, 0xdd, 0xe7,
0xe9, 0x62, 0x9e, 0xc1, 0x60, 0x92, 0x6e, 0x9b, 0x54, 0xb7, 0x5b, 0x44, 0xe3, 0x9a, 0xc6, 0xb8,
0xad, 0xff, 0x02, 0xe8, 0x96, 0xdf, 0x8c, 0xf5, 0xa7, 0x40, 0xdb, 0xbd, 0x58, 0xba, 0x9d, 0x30,
0x8d, 0x3a, 0xda, 0x89, 0x66, 0xd2, 0x4e, 0x4f, 0x1a, 0x17, 0x17, 0x0d, 0xb7, 0x7a, 0x3e, 0xed,
0x76, 0xd8, 0x6a, 0x4d, 0xa9, 0xbd, 0xfe, 0x0a, 0xb8, 0x94, 0x83, 0x59, 0x55, 0x6d, 0xdd, 0x87,
0x49, 0x9a, 0x86, 0xdb, 0x9e, 0x69, 0xa2, 0x20, 0x6f, 0x29, 0xe7, 0x80, 0x89, 0x99, 0xac, 0x4a,
0x9f, 0x2c, 0xec, 0xb2, 0x53, 0x53, 0xbd, 0x66, 0x72, 0x93, 0x46, 0x25, 0x41, 0xa3, 0xab, 0x75,
0x6b, 0x87, 0xfe, 0x8e, 0x6b, 0x35, 0x78, 0xb7, 0x37, 0x8f, 0x6e, 0xdb, 0x6b, 0x6a, 0xcc, 0x0b,
0xe1, 0xba, 0x6d, 0x97, 0x26, 0xc6, 0xcd, 0x4b, 0xf1, 0x9b, 0x1d, 0x54, 0xeb, 0x9a, 0x2d, 0x83,
0xc7, 0x1b, 0xf3, 0xa1, 0xaf, 0x6b, 0x1a, 0xd5, 0x9f, 0xe5, 0x62, 0xd0, 0x37, 0x8d, 0x28, 0x85,
0xc6, 0x57, 0x77, 0x9a, 0x53, 0x37, 0x81, 0x79, 0xce, 0xa2, 0x22, 0xca, 0x62, 0xfc, 0x87, 0xc0,
0xc6, 0x60, 0x8b, 0x24, 0xbe, 0xba, 0xf3, 0x6b, 0xa0, 0x4b, 0x5c, 0xfb, 0xd3, 0x4f, 0x47, 0xc9,
0xa8, 0xbf, 0xb1, 0xb4, 0xbf, 0xfc, 0xdc, 0xea, 0x41, 0xe2, 0x4b, 0x5c, 0x05, 0xe8, 0x52, 0x50,
0x3a, 0xfd, 0xc8, 0x63, 0xca, 0x46, 0x7d, 0x99, 0x3f, 0xad, 0x82, 0xce, 0x3d, 0xf3, 0xc7, 0x4a,
0xe2, 0x13, 0xb6, 0x72, 0x9d, 0x7b, 0x3a, 0x35, 0x93, 0x88, 0xef, 0xdc, 0x6b, 0xa3, 0x28, 0x71,
0x68, 0x26, 0xd7, 0xeb, 0x1e, 0xfd, 0x66, 0x4e, 0xbd, 0xd1, 0xc9, 0xa1, 0x7d, 0xff, 0x20, 0x59,
0x5a, 0x95, 0xb3, 0x23, 0xd0, 0x83, 0x64, 0xe9, 0x2e, 0x9c, 0xb7, 0x7b, 0xb1, 0xf8, 0x82, 0x38,
0x12, 0xec, 0xa5, 0xba, 0xb9, 0x75, 0x84, 0x5b, 0xcb, 0x5b, 0x57, 0xb7, 0x9b, 0xdd, 0xa0, 0x79,
0xe5, 0x7f, 0x5a, 0xf0, 0x98, 0x95, 0xe5, 0x7e, 0x35, 0x6d, 0x53, 0xf4, 0xca, 0x0f, 0xb2, 0xa1,
0x14, 0x12, 0xaf, 0xfc, 0x2d, 0x08, 0x6c, 0x3f, 0x0c, 0x5e, 0x7f, 0xc4, 0xa7, 0x63, 0x96, 0x4d,
0xc2, 0xf7, 0xec, 0x77, 0x75, 0x3e, 0x1d, 0x56, 0x3f, 0x6b, 0x7b, 0x6b, 0x94, 0xd8, 0x3c, 0x82,
0x1e, 0xb0, 0xb3, 0xc5, 0x74, 0xbc, 0xca, 0x62, 0xf4, 0x08, 0x5a, 0xff, 0x3e, 0xac, 0x04, 0xc4,
0x23, 0xa8, 0x05, 0x98, 0x57, 0xc0, 0xfa, 0xe7, 0xd3, 0x59, 0xc1, 0x5a, 0xef, 0xdf, 0x52, 0x41,
0x8a, 0x88, 0x57, 0x40, 0x84, 0xa0, 0x28, 0x4f, 0x0b, 0xc6, 0x9c, 0x51, 0x56, 0x02, 0x6f, 0x94,
0x00, 0x98, 0x43, 0xb0, 0xfe, 0x59, 0xbe, 0x36, 0x3e, 0xe2, 0x71, 0x94, 0x96, 0x82, 0x17, 0xf8,
0xbe, 0x46, 0xaa, 0x62, 0x88, 0x38, 0x04, 0x49, 0x18, 0xb5, 0xe1, 0x69, 0x92, 0x4d, 0x9d, 0x6d,
0xa8, 0x04, 0xde, 0x36, 0x00, 0x60, 0x16, 0xce, 0x31, 0x13, 0x45, 0x12, 0x97, 0x55, 0x61, 0x1e,
0x15, 0xd1, 0x9c, 0x09, 0x56, 0xe0, 0x3f, 0x73, 0x00, 0x64, 0x68, 0x31, 0xc4, 0xc2, 0xa1, 0x58,
0x70, 0xf8, 0xe3, 0xe0, 0xed, 0x6a, 0x45, 0xb1, 0x0c, 0xfe, 0xbd, 0x8b, 0xfb, 0xf5, 0x3f, 0x05,
0x13, 0x5e, 0xd1, 0x36, 0xc6, 0xa2, 0x60, 0xd1, 0x5c, 0xd9, 0x7e, 0x4b, 0xff, 0x5e, 0x83, 0x7b,
0x83, 0x7b, 0xef, 0xff, 0xeb, 0xcb, 0xb5, 0xc1, 0x17, 0x5f, 0xae, 0x0d, 0xfe, 0xf3, 0xe5, 0xda,
0xe0, 0x6f, 0xaf, 0xd6, 0x5e, 0xfb, 0xe2, 0xd5, 0xda, 0x6b, 0xff, 0x7e, 0xb5, 0xf6, 0xda, 0x67,
0xaf, 0xc3, 0x3f, 0x49, 0x73, 0xf6, 0x7f, 0xf5, 0x3f, 0x2c, 0x73, 0xf7, 0xbf, 0x01, 0x00, 0x00,
0xff, 0xff, 0xdc, 0x53, 0x3d, 0x0a, 0xb6, 0x46, 0x00, 0x00,
}
// This is a compile-time assertion to ensure that this generated file
@ -249,6 +252,8 @@ type ClientCommandsHandler interface {
// Workspace
// ***
WorkspaceCreate(context.Context, *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse
WorkspaceObjectListAdd(context.Context, *pb.RpcWorkspaceObjectListAddRequest) *pb.RpcWorkspaceObjectListAddResponse
WorkspaceObjectListRemove(context.Context, *pb.RpcWorkspaceObjectListRemoveRequest) *pb.RpcWorkspaceObjectListRemoveResponse
WorkspaceSelect(context.Context, *pb.RpcWorkspaceSelectRequest) *pb.RpcWorkspaceSelectResponse
WorkspaceGetCurrent(context.Context, *pb.RpcWorkspaceGetCurrentRequest) *pb.RpcWorkspaceGetCurrentResponse
WorkspaceGetAll(context.Context, *pb.RpcWorkspaceGetAllRequest) *pb.RpcWorkspaceGetAllResponse
@ -622,6 +627,46 @@ func WorkspaceCreate(b []byte) (resp []byte) {
return resp
}
func WorkspaceObjectListAdd(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
if r := recover(); r != nil {
resp, _ = (&pb.RpcWorkspaceObjectListAddResponse{Error: &pb.RpcWorkspaceObjectListAddResponseError{Code: pb.RpcWorkspaceObjectListAddResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
PanicHandler(r)
}
}
}()
in := new(pb.RpcWorkspaceObjectListAddRequest)
if err := in.Unmarshal(b); err != nil {
resp, _ = (&pb.RpcWorkspaceObjectListAddResponse{Error: &pb.RpcWorkspaceObjectListAddResponseError{Code: pb.RpcWorkspaceObjectListAddResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
return resp
}
resp, _ = clientCommandsHandler.WorkspaceObjectListAdd(context.Background(), in).Marshal()
return resp
}
func WorkspaceObjectListRemove(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
if r := recover(); r != nil {
resp, _ = (&pb.RpcWorkspaceObjectListRemoveResponse{Error: &pb.RpcWorkspaceObjectListRemoveResponseError{Code: pb.RpcWorkspaceObjectListRemoveResponseError_UNKNOWN_ERROR, Description: "panic recovered"}}).Marshal()
PanicHandler(r)
}
}
}()
in := new(pb.RpcWorkspaceObjectListRemoveRequest)
if err := in.Unmarshal(b); err != nil {
resp, _ = (&pb.RpcWorkspaceObjectListRemoveResponse{Error: &pb.RpcWorkspaceObjectListRemoveResponseError{Code: pb.RpcWorkspaceObjectListRemoveResponseError_BAD_INPUT, Description: err.Error()}}).Marshal()
return resp
}
resp, _ = clientCommandsHandler.WorkspaceObjectListRemove(context.Background(), in).Marshal()
return resp
}
func WorkspaceSelect(b []byte) (resp []byte) {
defer func() {
if PanicHandler != nil {
@ -3746,6 +3791,10 @@ func CommandAsync(cmd string, data []byte, callback func(data []byte)) {
cd = WalletCloseSession(data)
case "WorkspaceCreate":
cd = WorkspaceCreate(data)
case "WorkspaceObjectListAdd":
cd = WorkspaceObjectListAdd(data)
case "WorkspaceObjectListRemove":
cd = WorkspaceObjectListRemove(data)
case "WorkspaceSelect":
cd = WorkspaceSelect(data)
case "WorkspaceGetCurrent":

View file

@ -6,8 +6,6 @@ import (
"fmt"
"time"
"github.com/globalsign/mgo/bson"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/table"
"github.com/anytypeio/go-anytype-middleware/core/session"
@ -556,7 +554,7 @@ func (s *service) UploadFileBlockWithHash(ctx *session.Context, contextId string
hash = res.Hash
return nil
})
return hash, err
}
@ -745,7 +743,8 @@ func (s *service) DeleteObjectFromWorkspace(workspaceId string, objectId string)
return fmt.Errorf("incorrect object with workspace id")
}
if bson.IsObjectIdHex(objectId) {
st, _ := coresb.SmartBlockTypeFromID(objectId)
if st == coresb.SmartBlockTypeSubObject {
return workspace.DeleteSubObject(objectId)
}

View file

@ -81,7 +81,9 @@ const (
type key int
const (
collectionRelations = "rel"
collectionRelations = "rel"
collectionObjectType = "ot"
collectionRelationOptions = "opt"
)
const CallerKey key = 0
@ -1400,7 +1402,7 @@ func SubState(st *state.State, collection string, fullId string) (*state.State,
if collection == source.WorkspaceCollection {
return nil, fmt.Errorf("substate not supported")
}
subId := strings.TrimPrefix(fullId, collection+addr.VirtualObjectSeparator)
subId := strings.TrimPrefix(fullId, collection+addr.SubObjectCollectionIdSeparator)
data := pbtypes.GetStruct(st.GetCollection(collection), subId)
if data == nil || data.Fields == nil {
return nil, fmt.Errorf("no data for subId %s: %v", collection, subId)
@ -1444,6 +1446,39 @@ func SubState(st *state.State, collection string, fullId string) (*state.State,
template.WithDefaultFeaturedRelations(subst)
template.WithDataview(dataview, false)(subst)
} else if collection == collectionObjectType {
relKey := pbtypes.GetString(data, bundle.RelationKeyRelationKey.String())
dataview := model.BlockContentOfDataview{
Dataview: &model.BlockContentDataview{
Source: []string{fullId},
Views: []*model.BlockContentDataviewView{
{
Id: uuid.New().String(),
Type: model.BlockContentDataviewView_Table,
Name: "All",
Sorts: []*model.BlockContentDataviewSort{
{
RelationKey: relKey,
Type: model.BlockContentDataviewSort_Asc,
},
},
Relations: []*model.BlockContentDataviewRelation{{
Key: bundle.RelationKeyName.String(),
IsVisible: true,
},
},
Filters: nil,
},
},
},
}
template.WithAllBlocksEditsRestricted(subst)
template.WithForcedDetail(bundle.RelationKeyLayout, pbtypes.Int64(int64(model.ObjectType_objectType)))(subst)
template.WithTitle(subst)
template.WithDescription(subst)
template.WithDefaultFeaturedRelations(subst)
template.WithDataview(dataview, false)(subst)
} else if collection == collectionRelationOptions {
dataview := model.BlockContentOfDataview{
Dataview: &model.BlockContentDataview{

View file

@ -54,8 +54,8 @@ func NewDocFromSnapshot(rootId string, snapshot *pb.ChangeSnapshot) Doc {
store: snapshot.Data.Collections,
}
// migrate old relations from dataview block
// do not consider other possible dataview blocks
s.objectTypes, s.objectTypesToMigrate = relationutils.MigrateObjectTypeIds(s.objectTypes)
s.InjectDerivedDetails()
return s
}
@ -309,6 +309,12 @@ func (s *State) changeObjectTypeAdd(add *pb.ChangeObjectTypeAdd) error {
return nil
}
}
// in-place migration for bundled object types moved into workspace
url, migrated := relationutils.MigrateObjectTypeId(add.Url)
if migrated {
s.SetObjectTypesToMigrate(append(s.ObjectTypesToMigrate(), add.Url))
add.Url = url
}
objectTypes := append(s.ObjectTypes(), add.Url)
s.SetObjectTypes(objectTypes)
// Set only the first(0) object type to the detail
@ -319,6 +325,20 @@ func (s *State) changeObjectTypeAdd(add *pb.ChangeObjectTypeAdd) error {
func (s *State) changeObjectTypeRemove(remove *pb.ChangeObjectTypeRemove) error {
var found bool
// in-place migration for bundled object types moved into workspace
url, migrated := relationutils.MigrateObjectTypeId(remove.Url)
if migrated {
// todo: should we also migrate all the object types from the history of object?
s.objectTypesToMigrate = slice.Filter(s.ObjectTypesToMigrate(), func(s string) bool {
if s == remove.Url {
found = true
return false
}
return true
})
remove.Url = url
}
s.objectTypes = slice.Filter(s.ObjectTypes(), func(s string) bool {
if s == remove.Url {
found = true

View file

@ -89,8 +89,9 @@ type State struct {
extraRelations []*model.Relation
aggregatedOptionsByRelation map[string][]*model.RelationOption
store *types.Struct
objectTypes []string
store *types.Struct
objectTypes []string
objectTypesToMigrate []string
changesStructureIgnoreIds []string
@ -669,6 +670,9 @@ func (s *State) intermediateApply() {
if s.objectTypes != nil {
s.parent.objectTypes = s.objectTypes
}
if s.objectTypesToMigrate != nil {
s.parent.objectTypesToMigrate = s.objectTypesToMigrate
}
if s.store != nil {
s.parent.store = s.store
}
@ -847,6 +851,11 @@ func (s *State) SetObjectTypes(objectTypes []string) *State {
return s
}
func (s *State) SetObjectTypesToMigrate(objectTypes []string) *State {
s.objectTypesToMigrate = objectTypes
return s
}
func (s *State) InjectDerivedDetails() {
if objTypes := s.ObjectTypes(); len(objTypes) > 0 && objTypes[0] == bundle.TypeKeySet.URL() {
@ -888,7 +897,7 @@ func ListSmartblockTypes(objectId string) ([]int, error) {
res = append(res, int(t))
}
return res, nil
} else if !strings.HasPrefix(objectId, "b") {
} else if strings.HasPrefix(objectId, addr.ObjectTypeKeyToIdPrefix) && !strings.HasPrefix(objectId, "b") {
return nil, fmt.Errorf("incorrect object type URL format")
}
@ -959,6 +968,13 @@ func (s *State) ObjectTypes() []string {
return s.objectTypes
}
func (s *State) ObjectTypesToMigrate() []string {
if s.objectTypes == nil && s.parent != nil {
return s.parent.ObjectTypesToMigrate()
}
return s.objectTypesToMigrate
}
// ObjectType returns only the first objectType and produce warning in case the state has more than 1 object type
// this method is useful because we have decided that currently objects can have only one object type, while preserving the ability to unlock this later
func (s *State) ObjectType() string {
@ -1150,6 +1166,9 @@ func (s *State) Copy() *State {
objTypes := make([]string, len(s.ObjectTypes()))
copy(objTypes, s.ObjectTypes())
objTypesToMigrate := make([]string, len(s.ObjectTypesToMigrate()))
copy(objTypesToMigrate, s.ObjectTypesToMigrate())
agOptsCopy := make(map[string][]*model.RelationOption, len(s.AggregatedOptionsByRelation()))
for k, v := range s.AggregatedOptionsByRelation() {
agOptsCopy[k] = pbtypes.CopyRelationOptions(v)
@ -1171,6 +1190,7 @@ func (s *State) Copy() *State {
extraRelations: pbtypes.CopyRelations(s.OldExtraRelations()),
aggregatedOptionsByRelation: agOptsCopy,
objectTypes: objTypes,
objectTypesToMigrate: objTypesToMigrate,
noObjectType: s.noObjectType,
store: pbtypes.CopyStruct(s.Store()),
}

View file

@ -1,128 +1,33 @@
package editor
import (
"errors"
"fmt"
"strings"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/basic"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/clipboard"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/dataview"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/smartblock"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/state"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/template"
"github.com/anytypeio/go-anytype-middleware/core/block/source"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/stext"
"github.com/gogo/protobuf/types"
)
var (
ErrSubObjectNotFound = errors.New("sub object not found")
ErrCollectionNotFound = errors.New("collection not found")
ErrSubObjectAlreadyExists = fmt.Errorf("subobject already exists in the collection")
)
const defaultCollectionName = "opt"
// todo: extract collection of subobjects into a separate smartblock impl
func getCollectionAndKeyFromId(id string) (collection, key string) {
parts := strings.Split(id, addr.VirtualObjectSeparator)
if len(parts) == 1 {
collection = defaultCollectionName
key = parts[0]
} else {
collection = parts[0]
key = parts[1]
}
return
}
func (w *Workspaces) Open(subId string) (sb smartblock.SmartBlock, err error) {
w.Lock()
defer w.Unlock()
collection, key := getCollectionAndKeyFromId(subId)
if coll, exists := w.collections[collection]; exists {
if sub, exists := coll[key]; exists {
return sub, nil
} else {
return nil, ErrSubObjectNotFound
}
}
return nil, ErrCollectionNotFound
}
func (w *Workspaces) Locked() bool {
w.Lock()
defer w.Unlock()
if w.IsLocked() {
return true
}
for _, coll := range w.collections {
for _, sub := range coll {
if sub.IsLocked() {
return true
}
}
}
return false
}
func (w *Workspaces) updateSubObject(info smartblock.ApplyInfo) (err error) {
if len(info.Changes) == 0 {
return nil
}
st := w.NewState()
for _, ch := range info.Changes {
if keySet := ch.GetStoreKeySet(); keySet != nil {
if len(keySet.Path) >= 2 {
if coll, ok := w.collections[keySet.Path[0]]; ok {
if opt, ok := coll[keySet.Path[1]]; ok {
if e := opt.SetStruct(pbtypes.GetStruct(w.NewState().GetCollection(keySet.Path[0]), keySet.Path[1])); e != nil {
log.With("threadId", w.Id()).Errorf("options: can't set struct: %v", e)
}
} else {
if err = w.initSubObject(st, keySet.Path[0], keySet.Path[1]); err != nil {
return
}
}
}
}
}
}
return
}
func (w *Workspaces) onSubObjectChange(collection, subId string) func(p source.PushChangeParams) (string, error) {
return func(p source.PushChangeParams) (string, error) {
st := w.NewState()
coll, exists := w.collections[collection]
if !exists {
return "", fmt.Errorf("collection not found")
}
if _, ok := coll[subId]; !ok {
return "", fmt.Errorf("onSubObjectChange: subObject '%s' not exists in collection '%s'", subId, collection)
}
changed := st.SetInStore([]string{collection, subId}, pbtypes.Struct(p.State.CombinedDetails()))
if !changed {
return "", nil
}
return "", w.Apply(st, smartblock.NoHooks)
}
}
func NewSubObject() *SubObject {
sb := smartblock.New()
return &SubObject{
Set: NewSet(),
SmartBlock: sb,
Basic: basic.NewBasic(sb),
IHistory: basic.NewHistory(sb),
Text: stext.NewText(sb),
Clipboard: clipboard.NewClipboard(sb, nil),
Dataview: dataview.NewDataview(sb),
}
}
type SubObject struct {
*Set
smartblock.SmartBlock
basic.Basic
basic.IHistory
stext.Text
clipboard.Clipboard
dataview.Dataview
}
func (o *SubObject) Init(ctx *smartblock.InitContext) (err error) {
@ -139,31 +44,3 @@ func (o *SubObject) SetStruct(st *types.Struct) error {
s.SetDetails(st)
return o.Apply(s)
}
func (w *Workspaces) initSubObject(st *state.State, collection string, subId string) (err error) {
subObj := NewSubObject()
var fullId string
if collection == "" || collection == defaultCollectionName {
fullId = subId
collection = defaultCollectionName
} else {
fullId = collection + addr.VirtualObjectSeparator + subId
}
subState, err := smartblock.SubState(st, collection, fullId)
if err != nil {
return
}
template.WithForcedDetail(bundle.RelationKeyWorkspaceId, pbtypes.String(w.Id()))(subState)
if _, exists := w.collections[collection]; !exists {
w.collections[collection] = map[string]*SubObject{}
}
w.collections[collection][subId] = subObj
if err = subObj.Init(&smartblock.InitContext{
Source: w.sourceService.NewStaticSource(fullId, model.SmartBlockType_SubObject, subState, w.onSubObjectChange(collection, subId)),
App: w.app,
}); err != nil {
return
}
return
}

View file

@ -0,0 +1,177 @@
package editor
import (
"errors"
"fmt"
"strings"
"github.com/anytypeio/go-anytype-middleware/app"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/smartblock"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/state"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/template"
"github.com/anytypeio/go-anytype-middleware/core/block/source"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
)
var (
ErrSubObjectNotFound = errors.New("sub object not found")
ErrCollectionNotFound = errors.New("collection not found")
ErrSubObjectAlreadyExists = fmt.Errorf("subobject already exists in the collection")
)
type SubObjectCollection struct {
*Set
defaultCollectionName string
collections map[string]map[string]*SubObject
sourceService source.Service
app *app.App
}
func NewSubObjectCollection(defaultCollectionName string) *SubObjectCollection {
return &SubObjectCollection{
Set: NewSet(),
defaultCollectionName: defaultCollectionName,
collections: map[string]map[string]*SubObject{},
}
}
func (c *SubObjectCollection) getCollectionAndKeyFromId(id string) (collection, key string) {
parts := strings.Split(id, addr.SubObjectCollectionIdSeparator)
if len(parts) == 1 {
collection = c.defaultCollectionName
key = parts[0]
} else {
collection = parts[0]
key = parts[1]
}
return
}
func (c *SubObjectCollection) Open(subId string) (sb smartblock.SmartBlock, err error) {
c.Lock()
defer c.Unlock()
collection, key := c.getCollectionAndKeyFromId(subId)
if coll, exists := c.collections[collection]; exists {
if sub, exists := coll[key]; exists {
return sub, nil
} else {
return nil, ErrSubObjectNotFound
}
}
return nil, ErrCollectionNotFound
}
func (c *SubObjectCollection) DeleteSubObject(objectId string) error {
st := c.NewState()
collection, key := c.getCollectionAndKeyFromId(objectId)
err := c.ObjectStore().DeleteObject(objectId)
if err != nil {
log.Errorf("error deleting subobject from store %s %s %v", objectId, c.Id(), err.Error())
}
st.RemoveFromStore([]string{collection, key})
return c.Apply(st, smartblock.NoEvent, smartblock.NoHistory)
}
func (c *SubObjectCollection) Locked() bool {
c.Lock()
defer c.Unlock()
if c.IsLocked() {
return true
}
for _, coll := range c.collections {
for _, sub := range coll {
if sub.IsLocked() {
return true
}
}
}
return false
}
func (c *SubObjectCollection) updateSubObject(info smartblock.ApplyInfo) (err error) {
if len(info.Changes) == 0 {
return nil
}
st := c.NewState()
for _, ch := range info.Changes {
if keySet := ch.GetStoreKeySet(); keySet != nil {
if len(keySet.Path) >= 2 {
if coll, ok := c.collections[keySet.Path[0]]; ok {
if opt, ok := coll[keySet.Path[1]]; ok {
if e := opt.SetStruct(pbtypes.GetStruct(c.NewState().GetCollection(keySet.Path[0]), keySet.Path[1])); e != nil {
log.With("threadId", c.Id()).Errorf("options: can't set struct: %v", e)
}
} else {
if err = c.initSubObject(st, keySet.Path[0], keySet.Path[1]); err != nil {
return
}
}
}
}
}
}
return
}
func (c *SubObjectCollection) onSubObjectChange(collection, subId string) func(p source.PushChangeParams) (string, error) {
return func(p source.PushChangeParams) (string, error) {
st := c.NewState()
coll, exists := c.collections[collection]
if !exists {
return "", fmt.Errorf("collection not found")
}
if _, ok := coll[subId]; !ok {
return "", fmt.Errorf("onSubObjectChange: subObject '%s' not exists in collection '%s'", subId, collection)
}
changed := st.SetInStore([]string{collection, subId}, pbtypes.Struct(p.State.CombinedDetails()))
if !changed {
return "", nil
}
return "", c.Apply(st, smartblock.NoHooks)
}
}
func (c *SubObjectCollection) Init(ctx *smartblock.InitContext) error {
c.app = ctx.App
c.sourceService = c.app.MustComponent(source.CName).(source.Service)
return c.SmartBlock.Init(ctx)
}
func (c *SubObjectCollection) initSubObject(st *state.State, collection string, subId string) (err error) {
subObj := NewSubObject()
var fullId string
if collection == "" || collection == c.defaultCollectionName {
fullId = subId
collection = c.defaultCollectionName
} else {
fullId = collection + addr.SubObjectCollectionIdSeparator + subId
}
subState, err := smartblock.SubState(st, collection, fullId)
if err != nil {
return
}
template.WithForcedDetail(bundle.RelationKeyWorkspaceId, pbtypes.String(c.Id()))(subState)
if _, exists := c.collections[collection]; !exists {
c.collections[collection] = map[string]*SubObject{}
}
c.collections[collection][subId] = subObj
if err = subObj.Init(&smartblock.InitContext{
Source: c.sourceService.NewStaticSource(fullId, model.SmartBlockType_SubObject, subState, c.onSubObjectChange(collection, subId)),
App: c.app,
}); err != nil {
return
}
return
}

View file

@ -2,6 +2,8 @@ package editor
import (
"fmt"
"github.com/anytypeio/go-anytype-middleware/util/slice"
"strings"
"time"
"github.com/globalsign/mgo/bson"
@ -31,32 +33,38 @@ import (
)
const (
collectionKeySignature = "signature"
collectionKeyAccount = "account"
collectionKeyAddrs = "addrs"
collectionKeyId = "id"
collectionKeyKey = "key"
collectionKeySignature = "signature"
collectionKeyAccount = "account"
collectionKeyAddrs = "addrs"
collectionKeyId = "id"
collectionKeyKey = "key"
)
const (
collectionKeyRelationOptions = "opt"
collectionKeyRelations = "rel"
collectionKeyObjectTypes = "ot"
)
var objectTypeToCollection = map[bundle.TypeKey]string{
bundle.TypeKeyObjectType: collectionKeyObjectTypes,
bundle.TypeKeyRelation: collectionKeyRelations,
bundle.TypeKeyRelationOption: collectionKeyRelationOptions,
}
func NewWorkspace(dmservice DetailsModifier) *Workspaces {
return &Workspaces{
Set: NewSet(),
DetailsModifier: dmservice,
collections: map[string]map[string]*SubObject{},
SubObjectCollection: NewSubObjectCollection(collectionKeyRelationOptions),
DetailsModifier: dmservice,
}
}
type Workspaces struct {
*Set
*SubObjectCollection
DetailsModifier DetailsModifier
threadService threads.Service
threadQueue threads.ThreadQueue
changedRelationIds, changedRelationIdsOptions []string
collections map[string]map[string]*SubObject
sourceService source.Service
app *app.App
}
@ -98,16 +106,6 @@ func (p *Workspaces) DeleteObject(objectId string) error {
return p.Apply(st, smartblock.NoEvent, smartblock.NoHistory)
}
func (p *Workspaces) DeleteSubObject(objectId string) error {
st := p.NewState()
err := p.ObjectStore().DeleteObject(objectId)
if err != nil {
log.Errorf("error deleting sub object from store %s %s %v", objectId, p.Id(), err.Error())
}
st.RemoveFromStore([]string{collectionKeyRelationOptions, objectId})
return p.Apply(st, smartblock.NoEvent, smartblock.NoHistory)
}
func (p *Workspaces) GetAllObjects() []string {
st := p.NewState()
workspaceCollection := st.GetCollection(source.WorkspaceCollection)
@ -215,6 +213,8 @@ func (p *Workspaces) SetIsHighlighted(objectId string, value bool) error {
}
func (p *Workspaces) Init(ctx *smartblock.InitContext) (err error) {
p.SubObjectCollection.Init(ctx)
p.app = ctx.App
p.sourceService = p.app.MustComponent(source.CName).(source.Service)
@ -222,9 +222,6 @@ func (p *Workspaces) Init(ctx *smartblock.InitContext) (err error) {
return fmt.Errorf("source type should be a workspace or an old account")
}
if err = p.SmartBlock.Init(ctx); err != nil {
return
}
p.threadService = p.Anytype().ThreadsService()
p.threadQueue = p.Anytype().ThreadsService().ThreadQueue()
@ -535,7 +532,7 @@ func (w *Workspaces) createRelation(st *state.State, details *types.Struct) (id
}
object = pbtypes.CopyStruct(details)
key := pbtypes.GetString(object, bundle.RelationKeyRelationKey.String())
key := pbtypes.GetString(details, bundle.RelationKeyRelationKey.String())
if key == "" {
key = bson.NewObjectId().Hex()
} else {
@ -559,38 +556,6 @@ func (w *Workspaces) createRelation(st *state.State, details *types.Struct) (id
return
}
func (w *Workspaces) CreateRelation(details *types.Struct) (id string, object *types.Struct, err error) {
st := w.NewState()
id, object, err = w.createRelation(st, details)
if err != nil {
return
}
if err = w.Apply(st, smartblock.NoHooks); err != nil {
return
}
return
}
func (w *Workspaces) CreateRelations(details []*types.Struct) (ids []string, objects []*types.Struct, err error) {
st := w.NewState()
for _, rel := range details {
id, object, err2 := w.createRelation(st, rel)
if err2 != nil {
if err2 != ErrSubObjectAlreadyExists {
log.Errorf("failed to createRelation: %s", err2.Error())
}
continue
}
ids = append(ids, id)
objects = append(objects, object)
}
if err = w.Apply(st, smartblock.NoHooks); err != nil {
return
}
return
}
func (w *Workspaces) createRelationOption(st *state.State, details *types.Struct) (id string, object *types.Struct, err error) {
if details == nil || details.Fields == nil {
return "", nil, fmt.Errorf("create option: no data")
@ -607,7 +572,7 @@ func (w *Workspaces) createRelationOption(st *state.State, details *types.Struct
}
object = pbtypes.CopyStruct(details)
key := pbtypes.GetString(object, bundle.RelationKeyId.String())
key := pbtypes.GetString(details, bundle.RelationKeyId.String())
if key == "" {
key = bson.NewObjectId().Hex()
} else {
@ -629,9 +594,105 @@ func (w *Workspaces) createRelationOption(st *state.State, details *types.Struct
return
}
func (w *Workspaces) CreateRelationOption(details *types.Struct) (id string, object *types.Struct, err error) {
func (w *Workspaces) createObjectType(st *state.State, details *types.Struct) (id string, object *types.Struct, err error) {
if details == nil || details.Fields == nil {
return "", nil, fmt.Errorf("create object type: no data")
}
if pbtypes.GetString(details, bundle.RelationKeyName.String()) == "" {
return "", nil, fmt.Errorf("name is empty")
}
var recommendedRelationKeys = pbtypes.GetStringList(details, bundle.RelationKeyRecommendedRelations.String())
object = pbtypes.CopyStruct(details)
key := pbtypes.GetString(details, bundle.RelationKeyId.String())
if key == "" {
key = bson.NewObjectId().Hex()
} else {
key = strings.TrimPrefix(key, addr.BundledObjectTypeURLPrefix)
// no need to check for the generated bson's
if st.HasInStore([]string{collectionKeyObjectTypes, key}) {
return id, object, ErrSubObjectAlreadyExists
}
if bundle.HasObjectType(key) {
object.Fields[bundle.RelationKeySource.String()] = pbtypes.String(addr.BundledObjectTypeURLPrefix + key)
}
}
rawLayout := pbtypes.GetFloat64(details, bundle.RelationKeyRecommendedLayout.String())
layout, err := bundle.GetLayout(model.ObjectTypeLayout(rawLayout))
if err != nil {
return "", nil, fmt.Errorf("invalid layout: %w", err)
}
for _, rel := range bundle.RequiredInternalRelations {
if bundle.MustGetRelation(rel).Hidden {
continue
}
relId := addr.RelationKeyToIdPrefix + rel.String()
if slice.FindPos(recommendedRelationKeys, relId) != -1 {
continue
}
recommendedRelationKeys = append(recommendedRelationKeys, relId)
}
for _, rel := range layout.RequiredRelations {
relId := addr.RelationKeyToIdPrefix + rel.Key
if slice.FindPos(recommendedRelationKeys, relId) != -1 {
continue
}
recommendedRelationKeys = append(recommendedRelationKeys, relId)
}
object.Fields[bundle.RelationKeyType.String()] = pbtypes.String(bundle.TypeKeyObjectType.URL())
object.Fields[bundle.RelationKeyLayout.String()] = pbtypes.Float64(float64(model.ObjectType_objectType))
object.Fields[bundle.RelationKeyRecommendedRelations.String()] = pbtypes.StringList(recommendedRelationKeys)
st.SetInStore([]string{collectionKeyObjectTypes, key}, pbtypes.Struct(object))
if err = w.initSubObject(st, collectionKeyObjectTypes, key); err != nil {
return
}
id = addr.ObjectTypeKeyToIdPrefix + key
return
}
func (w *Workspaces) createObject(st *state.State, details *types.Struct) (id string, object *types.Struct, err error) {
if details == nil || details.Fields == nil {
return "", nil, fmt.Errorf("create object type: no data")
}
if pbtypes.GetString(details, bundle.RelationKeyType.String()) == "" {
return "", nil, fmt.Errorf("type is empty")
}
switch pbtypes.GetString(details, bundle.RelationKeyType.String()) {
case bundle.TypeKeyObjectType.URL():
return w.createObjectType(st, details)
case bundle.TypeKeyRelation.URL():
return w.createRelation(st, details)
case bundle.TypeKeyRelationOption.URL():
return w.createRelationOption(st, details)
default:
return "", nil, fmt.Errorf("invalid type: %s", pbtypes.GetString(details, bundle.RelationKeyType.String()))
}
}
func (w *Workspaces) removeObject(st *state.State, objectId string) (err error) {
collection, key := w.getCollectionAndKeyFromId(objectId)
st.RemoveFromStore([]string{collection, key})
if v, exists := w.collections[collection]; exists {
delete(v, key)
}
w.sourceService.RemoveStaticSource(objectId)
return nil
}
func (w *Workspaces) CreateSubObject(details *types.Struct) (id string, object *types.Struct, err error) {
st := w.NewState()
id, object, err = w.createRelationOption(st, details)
id, object, err = w.createObjectType(st, details)
if err != nil {
return "", nil, err
}
@ -641,18 +702,47 @@ func (w *Workspaces) CreateRelationOption(details *types.Struct) (id string, obj
return
}
func (w *Workspaces) CreateRelationOptions(details []*types.Struct) (ids []string, objects []*types.Struct, err error) {
func (w *Workspaces) CreateSubObjects(details []*types.Struct) (ids []string, objects []*types.Struct, err error) {
st := w.NewState()
for _, rel := range details {
id, object, err2 := w.createRelationOption(st, rel)
if err2 != nil {
log.Errorf("failed to createRelationOption: %s", err2.Error())
var (
id string
object *types.Struct
)
for _, det := range details {
id, object, err = w.createObject(st, det)
if err != nil {
if err != ErrSubObjectAlreadyExists {
log.Errorf("failed to create sub object: %s", err.Error())
}
continue
}
ids = append(ids, id)
objects = append(objects, object)
}
if len(ids) == 0 {
return
}
// reset error in case we have at least 1 object created
err = nil
if err = w.Apply(st, smartblock.NoHooks); err != nil {
return
}
return
}
func (w *Workspaces) RemoveSubObjects(objectIds []string) (err error) {
st := w.NewState()
for _, id := range objectIds {
err = w.removeObject(st, id)
if err != nil {
log.Errorf("failed to remove sub object: %s", err.Error())
continue
}
}
// reset error in case we have at least 1 object created
err = nil
if err = w.Apply(st, smartblock.NoHooks); err != nil {
return
}

View file

@ -164,7 +164,7 @@ type Service interface {
SetFileStyle(ctx *session.Context, contextId string, style model.BlockContentFileStyle, blockIds ...string) error
UploadFile(req pb.RpcFileUploadRequest) (hash string, err error)
UploadFileBlockWithHash(ctx *session.Context, contextId string, req pb.RpcBlockUploadRequest) (hash string, err error)
UploadFileBlockWithHash(ctx *session.Context, contextId string, req pb.RpcBlockUploadRequest) (hash string, err error)
UploadBlockFile(ctx *session.Context, req pb.RpcBlockUploadRequest, groupId string) error
UploadBlockFileSync(ctx *session.Context, req pb.RpcBlockUploadRequest) (err error)
CreateAndUploadFile(ctx *session.Context, req pb.RpcBlockFileCreateAndUploadRequest) (id string, err error)
@ -192,10 +192,6 @@ type Service interface {
UpdateDataviewGroupOrder(ctx *session.Context, req pb.RpcBlockDataviewGroupOrderUpdateRequest) error
UpdateDataviewObjectOrder(ctx *session.Context, req pb.RpcBlockDataviewObjectOrderUpdateRequest) error
CreateRelation(details *types.Struct) (id string, object *types.Struct, err error)
CreateRelationOption(details *types.Struct) (id string, newDetails *types.Struct, err error)
RemoveListOption(ctx *session.Context, ids []string, checkInObjects bool) error
BookmarkFetch(ctx *session.Context, req pb.RpcBlockBookmarkFetchRequest) error
BookmarkFetchSync(ctx *session.Context, req pb.RpcBlockBookmarkFetchRequest) (err error)
BookmarkCreateAndFetch(ctx *session.Context, req pb.RpcBlockBookmarkCreateAndFetchRequest) (id string, err error)
@ -243,6 +239,13 @@ type Service interface {
GetAllWorkspaces(req *pb.RpcWorkspaceGetAllRequest) ([]string, error)
SetIsHighlighted(req *pb.RpcWorkspaceSetIsHighlightedRequest) error
AddSubObjectToWorkspace(sourceObjectId, workspaceId string) (id string, object *types.Struct, err error)
AddSubObjectsToWorkspace(sourceObjectIds []string, workspaceId string) (ids []string, objects []*types.Struct, err error)
CreateSubObjectInWorkspace(details *types.Struct, workspaceId string) (id string, newDetails *types.Struct, err error)
CreateSubObjectsInWorkspace(details []*types.Struct) (ids []string, objects []*types.Struct, err error)
RemoveSubObjectsInWorkspace(objectIds []string, workspaceId string) (err error)
RemoveListOption(ctx *session.Context, ids []string, checkInObjects bool) error // deprecated, need to use RemoveSubObjectsInWorkspace
ObjectAddWithObjectId(req *pb.RpcObjectAddWithObjectIdRequest) error
ObjectShareByLink(req *pb.RpcObjectShareByLinkRequest) (string, error)
@ -527,6 +530,72 @@ func (s *service) CreateWorkspace(req *pb.RpcWorkspaceCreateRequest) (workspaceI
return id, err
}
func (s *service) AddSubObjectToWorkspace(sourceObjectId, workspaceId string) (id string, object *types.Struct, err error) {
// todo: we should add route to object via workspace
err = s.Do(sourceObjectId, func(b smartblock.SmartBlock) error {
d := b.Details()
if pbtypes.GetString(d, bundle.RelationKeyWorkspaceId.String()) == workspaceId {
return errors.New("object already in collection")
}
err = s.Do(workspaceId, func(b smartblock.SmartBlock) error {
ws, ok := b.(*editor.Workspaces)
if !ok {
return fmt.Errorf("incorrect workspace id")
}
id, object, err = ws.CreateSubObject(d)
return err
})
return err
})
return
}
func (s *service) AddSubObjectsToWorkspace(sourceObjectIds []string, workspaceId string) (ids []string, objects []*types.Struct, err error) {
// todo: we should add route to object via workspace
var details = make([]*types.Struct, 0, len(sourceObjectIds))
for _, sourceObjectId := range sourceObjectIds {
err = s.Do(sourceObjectId, func(b smartblock.SmartBlock) error {
d := b.Details()
if pbtypes.GetString(d, bundle.RelationKeyWorkspaceId.String()) == workspaceId {
return errors.New("object already in collection")
}
details = append(details, d)
return nil
})
if err != nil {
return
}
}
err = s.Do(workspaceId, func(b smartblock.SmartBlock) error {
ws, ok := b.(*editor.Workspaces)
if !ok {
return fmt.Errorf("incorrect workspace id")
}
ids, objects, err = ws.CreateSubObjects(details)
return err
})
return
}
func (s *service) RemoveSubObjectsInWorkspace(objectIds []string, workspaceId string) (err error) {
err = s.Do(workspaceId, func(b smartblock.SmartBlock) error {
ws, ok := b.(*editor.Workspaces)
if !ok {
return fmt.Errorf("incorrect workspace id")
}
err = ws.RemoveSubObjects(objectIds)
return err
})
return
}
func (s *service) SelectWorkspace(req *pb.RpcWorkspaceSelectRequest) error {
panic("should be removed")
}
@ -1094,53 +1163,28 @@ func (s *service) createObject(ctx *session.Context, contextBlock smartblock.Sma
return
}
func (s *service) CreateRelationOption(opt *types.Struct) (id string, newDetails *types.Struct, err error) {
func (s *service) CreateSubObjectInWorkspace(details *types.Struct, workspaceId string) (id string, newDetails *types.Struct, err error) {
// todo: rewrite to the current workspace id
err = s.Do(s.anytype.PredefinedBlocks().Account, func(b smartblock.SmartBlock) error {
err = s.Do(workspaceId, func(b smartblock.SmartBlock) error {
workspace, ok := b.(*editor.Workspaces)
if !ok {
return fmt.Errorf("incorrect object with workspace id")
return fmt.Errorf("object is not a workspace")
}
id, newDetails, err = workspace.CreateRelationOption(opt)
id, newDetails, err = workspace.CreateSubObject(details)
return err
})
return
}
func (s *service) CreateRelation(rel *types.Struct) (id string, object *types.Struct, err error) {
func (s *service) CreateSubObjectsInWorkspace(details []*types.Struct) (ids []string, objects []*types.Struct, err error) {
// todo: rewrite to the current workspace id
err = s.Do(s.anytype.PredefinedBlocks().Account, func(b smartblock.SmartBlock) error {
workspace, ok := b.(*editor.Workspaces)
if !ok {
return fmt.Errorf("incorrect object with workspace id")
}
id, object, err = workspace.CreateRelation(rel)
return err
})
return
}
func (s *service) CreateRelations(rel []*types.Struct) (ids []string, objects []*types.Struct, err error) {
// todo: rewrite to the current workspace id
err = s.Do(s.anytype.PredefinedBlocks().Account, func(b smartblock.SmartBlock) error {
workspace, ok := b.(*editor.Workspaces)
if !ok {
return fmt.Errorf("incorrect object with workspace id")
}
ids, objects, err = workspace.CreateRelations(rel)
return err
})
return
}
func (s *service) CreateRelationOptions(rel []*types.Struct) (ids []string, objects []*types.Struct, err error) {
// todo: rewrite to the current workspace id
err = s.Do(s.anytype.PredefinedBlocks().Account, func(b smartblock.SmartBlock) error {
workspace, ok := b.(*editor.Workspaces)
if !ok {
return fmt.Errorf("incorrect object with workspace id")
}
ids, objects, err = workspace.CreateRelationOptions(rel)
ids, objects, err = workspace.CreateSubObjects(details)
return err
})
return

View file

@ -2,15 +2,14 @@ package source
import (
"context"
"github.com/anytypeio/go-anytype-middleware/core/relation/relationutils"
"github.com/anytypeio/go-anytype-middleware/pb"
"github.com/anytypeio/go-anytype-middleware/change"
"github.com/anytypeio/go-anytype-middleware/core/block/editor/state"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/core"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/gogo/protobuf/types"
)
@ -53,29 +52,11 @@ func getDetailsForBundledObjectType(id string) (extraRels []*model.RelationLink,
}
extraRels = []*model.RelationLink{bundle.MustGetRelationLink(bundle.RelationKeyRecommendedRelations), bundle.MustGetRelationLink(bundle.RelationKeyRecommendedLayout)}
var relationKeys []string
for i := range ot.RelationLinks {
extraRels = append(extraRels, ot.RelationLinks[i])
relationKeys = append(relationKeys, addr.RelationKeyToIdPrefix+ot.RelationLinks[i].Key)
}
det := &types.Struct{Fields: map[string]*types.Value{
bundle.RelationKeyType.String(): pbtypes.String(bundle.TypeKeyObjectType.URL()),
bundle.RelationKeyLayout.String(): pbtypes.Float64(float64(model.ObjectType_objectType)),
bundle.RelationKeyName.String(): pbtypes.String(ot.Name),
bundle.RelationKeyCreator.String(): pbtypes.String(addr.AnytypeProfileId),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(ot.IconEmoji),
bundle.RelationKeyRecommendedRelations.String(): pbtypes.StringList(relationKeys),
bundle.RelationKeyRecommendedLayout.String(): pbtypes.Float64(float64(ot.Layout)),
bundle.RelationKeyDescription.String(): pbtypes.String(ot.Description),
bundle.RelationKeyId.String(): pbtypes.String(id),
bundle.RelationKeyIsHidden.String(): pbtypes.Bool(ot.Hidden),
bundle.RelationKeyIsArchived.String(): pbtypes.Bool(false),
bundle.RelationKeyIsReadonly.String(): pbtypes.Bool(ot.Readonly),
bundle.RelationKeyWorkspaceId.String(): pbtypes.String(addr.AnytypeMarketplaceWorkspace),
}}
return extraRels, det, nil
return extraRels, (&relationutils.ObjectType{ot}).ToStruct(), nil
}
func (v *bundledObjectType) ReadDoc(ctx context.Context, receiver ChangeReceiver, empty bool) (doc state.Doc, err error) {

View file

@ -25,6 +25,8 @@ type Service interface {
NewSource(id string, listenToOwnChanges bool) (s Source, err error)
RegisterStaticSource(id string, new func() Source)
NewStaticSource(id string, sbType model.SmartBlockType, doc *state.State, pushChange func(p PushChangeParams) (string, error)) SourceWithType
RemoveStaticSource(id string)
GetDetailsFromIdBasedSource(id string) (*types.Struct, error)
SourceTypeBySbType(blockType smartblock.SmartBlockType) (SourceType, error)
app.Component
@ -104,3 +106,9 @@ func (s *service) RegisterStaticSource(id string, new func() Source) {
defer s.mu.Unlock()
s.staticIds[id] = new
}
func (s *service) RemoveStaticSource(id string) {
s.mu.Lock()
defer s.mu.Unlock()
delete(s.staticIds, id)
}

View file

@ -45,7 +45,7 @@ const (
ForceThreadsObjectsReindexCounter int32 = 7 // reindex thread-based objects
ForceFilesReindexCounter int32 = 6 // reindex ipfs-file-based objects
ForceBundledObjectsReindexCounter int32 = 4 // reindex objects like anytypeProfile
ForceIdxRebuildCounter int32 = 18 // erases localstore indexes and reindex all type of objects (no need to increase ForceThreadsObjectsReindexCounter & ForceFilesReindexCounter)
ForceIdxRebuildCounter int32 = 22 // erases localstore indexes and reindex all type of objects (no need to increase ForceThreadsObjectsReindexCounter & ForceFilesReindexCounter)
ForceFulltextIndexCounter int32 = 3 // performs fulltext indexing for all type of objects (useful when we change fulltext config)
ForceFilestoreKeysReindexCounter int32 = 1
)
@ -636,12 +636,45 @@ func (i *indexer) migrateRelations(rels []*model.Relation) {
if i.relationBulkMigration != nil {
i.relationBulkMigration.AddRelations(rels)
} else {
err := i.relationService.Migrate(rels)
err := i.relationService.MigrateRelations(rels)
if err != nil {
log.Errorf("migrateRelations got error: %s", err.Error())
}
}
}
func (i *indexer) migrateObjectTypes(ots []string) {
if len(ots) == 0 {
return
}
var typesModels []*model.ObjectType // do not make
for _, ot := range ots {
t, err := bundle.GetTypeByUrl(ot)
if err != nil {
continue
}
typesModels = append(typesModels, t)
}
if len(typesModels) == 0 {
return
}
i.relationMigratorMu.Lock()
defer i.relationMigratorMu.Unlock()
if i.relationBulkMigration != nil {
i.relationBulkMigration.AddObjectTypes(typesModels)
} else {
err := i.relationService.MigrateObjectTypes(typesModels)
if err != nil {
log.Errorf("migrateObjectTypes got error: %s", err.Error())
}
}
}
func (i *indexer) reindexDoc(ctx context.Context, id string, indexesWereRemoved bool) error {
t, err := smartblock.SmartBlockTypeFromID(id)
if err != nil {
@ -747,6 +780,7 @@ func (i *indexer) index(ctx context.Context, info doc.DocInfo) error {
if sbType != smartblock.SmartBlockTypeSubObject && sbType != smartblock.SmartBlockTypeWorkspace {
// avoid recursions
i.migrateRelations(extractRelationsFromState(info.State))
i.migrateObjectTypes(info.State.ObjectTypesToMigrate())
}
if !indexDetails && !indexLinks {
saveIndexedHash()

View file

@ -141,7 +141,7 @@ func (mw *Middleware) objectCreate(req *pb.RpcObjectCreateRequest) (id string, d
Source: pbtypes.GetStringList(req.Details, bundle.RelationKeySetOf.String()),
})
case bundle.TypeKeyObjectType:
return mw.objectTypeCreate(&pb.RpcObjectCreateObjectTypeRequest{
return mw.objectCreateObjectType(&pb.RpcObjectCreateObjectTypeRequest{
Details: req.Details,
InternalFlags: req.InternalFlags,
})

View file

@ -0,0 +1,77 @@
package relationutils
import (
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/gogo/protobuf/types"
)
type ObjectType struct {
*model.ObjectType
}
func (ot *ObjectType) ToStruct() *types.Struct {
var relationKeys []string
for i := range ot.RelationLinks {
relationKeys = append(relationKeys, addr.RelationKeyToIdPrefix+ot.RelationLinks[i].Key)
}
return &types.Struct{Fields: map[string]*types.Value{
bundle.RelationKeyType.String(): pbtypes.String(bundle.TypeKeyObjectType.URL()),
bundle.RelationKeyLayout.String(): pbtypes.Float64(float64(model.ObjectType_objectType)),
bundle.RelationKeyName.String(): pbtypes.String(ot.Name),
bundle.RelationKeyCreator.String(): pbtypes.String(addr.AnytypeProfileId),
bundle.RelationKeyIconEmoji.String(): pbtypes.String(ot.IconEmoji),
bundle.RelationKeyRecommendedRelations.String(): pbtypes.StringList(relationKeys),
bundle.RelationKeyRecommendedLayout.String(): pbtypes.Float64(float64(ot.Layout)),
bundle.RelationKeyDescription.String(): pbtypes.String(ot.Description),
bundle.RelationKeyId.String(): pbtypes.String(ot.Url),
bundle.RelationKeyIsHidden.String(): pbtypes.Bool(ot.Hidden),
bundle.RelationKeyIsArchived.String(): pbtypes.Bool(false),
bundle.RelationKeyIsReadonly.String(): pbtypes.Bool(ot.Readonly),
bundle.RelationKeyWorkspaceId.String(): pbtypes.String(addr.AnytypeMarketplaceWorkspace),
}}
}
// MigrateObjectTypeIds returns 2 slices:
// normalized contains the slice of normalized ids. it contains original slice if there is nothing to normalize(no bundled object type IDs exist in the object)
// idsToMigrate - contains the slice of ids that are converted during the first step, nil if no ids were converted
func MigrateObjectTypeIds(ids []string) (normalized []string, idsToMigrate []string) {
// shortcut if there is nothing to migrate
hasIdsToMigrate := false
for i := range ids {
_, err := bundle.TypeKeyFromUrl(ids[i])
if err == nil {
hasIdsToMigrate = true
break
}
}
if !hasIdsToMigrate {
return ids, nil
}
// in-place migration for bundled object types moved into workspace
normalized = make([]string, len(ids))
idsToMigrate = make([]string, 0, len(ids))
for i := range ids {
t, err := bundle.TypeKeyFromUrl(ids[i])
if err == nil {
idsToMigrate = append(idsToMigrate, ids[i])
normalized[i] = addr.ObjectTypeKeyToIdPrefix + t.String()
} else {
normalized[i] = ids[i]
}
}
return normalized, idsToMigrate
}
func MigrateObjectTypeId(id string) (normalized string, isMigrated bool) {
t, err := bundle.TypeKeyFromUrl(id)
if err == nil {
return addr.ObjectTypeKeyToIdPrefix + t.String(), true
}
return id, false
}

View file

@ -40,30 +40,31 @@ type Service interface {
FetchKey(key string, opts ...FetchOption) (relation *relationutils.Relation, err error)
FetchLinks(links pbtypes.RelationLinks) (relations relationutils.Relations, err error)
CreateBulkMigration() BulkMigration
Migrate(relations []*model.Relation) error
MigrateRelations(relations []*model.Relation) error
MigrateObjectTypes(relations []*model.ObjectType) error
ValidateFormat(key string, v *types.Value) error
app.Component
}
type BulkMigration interface {
AddRelations(relations []*model.Relation)
AddObjectTypes(objectType []*model.ObjectType)
Commit() error
}
type relationCreator interface {
CreateRelation(details *types.Struct) (id string, object *types.Struct, err error)
CreateRelationOption(details *types.Struct) (id string, newDetails *types.Struct, err error)
CreateRelations(details []*types.Struct) (id []string, object []*types.Struct, err error)
CreateRelationOptions(details []*types.Struct) (id []string, newDetails []*types.Struct, err error)
type subObjectCreator interface {
CreateSubObjectInWorkspace(details *types.Struct, workspaceId string) (id string, newDetails *types.Struct, err error)
CreateSubObjectsInWorkspace(details []*types.Struct) (ids []string, objects []*types.Struct, err error)
}
var errSubobjectAlreadyExists = fmt.Errorf("subobject already exists in the collection")
type bulkMigration struct {
cache map[string]struct{}
s relationCreator
s subObjectCreator
relations []*types.Struct
options []*types.Struct
types []*types.Struct
mu sync.Mutex
}
@ -87,15 +88,24 @@ func (b *bulkMigration) AddRelations(relations []*model.Relation) {
}
}
func (b *bulkMigration) AddObjectTypes(objectTypes []*model.ObjectType) {
b.mu.Lock()
defer b.mu.Unlock()
for _, ot := range objectTypes {
if _, exists := b.cache["type"+ot.Url]; exists {
continue
}
b.types = append(b.types, (&relationutils.ObjectType{ObjectType: ot}).ToStruct())
b.cache["type"+ot.Url] = struct{}{}
}
}
func (b *bulkMigration) Commit() error {
b.mu.Lock()
defer b.mu.Unlock()
if len(b.options) == 0 && len(b.relations) == 0 {
return nil
}
if len(b.relations) > 0 {
ids, _, err1 := b.s.CreateRelations(b.relations)
ids, _, err1 := b.s.CreateSubObjectsInWorkspace(b.relations)
log.Errorf("relations migration done %d/%d: %v", len(ids), len(b.relations), err1)
if err1 != nil && err1.Error() != errSubobjectAlreadyExists.Error() {
@ -103,35 +113,50 @@ func (b *bulkMigration) Commit() error {
}
}
if len(b.options) > 0 {
ids, _, err1 := b.s.CreateRelationOptions(b.options)
ids, _, err1 := b.s.CreateSubObjectsInWorkspace(b.options)
log.Errorf("options migration done %d/%d: %v", len(ids), len(b.options), err1)
if err1 != nil && err1.Error() != errSubobjectAlreadyExists.Error() {
return err1
}
}
if len(b.types) > 0 {
ids, _, err1 := b.s.CreateSubObjectsInWorkspace(b.types)
log.Errorf("objectTypes migration done %d/%d: %v", len(ids), len(b.types), err1)
if err1 != nil && err1.Error() != errSubobjectAlreadyExists.Error() {
return err1
}
}
b.options = nil
b.relations = nil
b.types = nil
return nil
}
type service struct {
objectStore objectstore.ObjectStore
relationCreator relationCreator
relationCreator subObjectCreator
mu sync.RWMutex
}
func (s *service) Migrate(relations []*model.Relation) error {
func (s *service) MigrateRelations(relations []*model.Relation) error {
b := s.CreateBulkMigration()
b.AddRelations(relations)
return b.Commit()
}
func (s *service) MigrateObjectTypes(types []*model.ObjectType) error {
b := s.CreateBulkMigration()
b.AddObjectTypes(types)
return b.Commit()
}
func (s *service) Init(a *app.App) (err error) {
s.objectStore = a.MustComponent(objectstore.CName).(objectstore.ObjectStore)
s.relationCreator = a.MustComponent(blockServiceCName).(relationCreator)
s.relationCreator = a.MustComponent(blockServiceCName).(subObjectCreator)
return
}

View file

@ -6,7 +6,6 @@ import (
"fmt"
"strings"
"github.com/anytypeio/go-anytype-middleware/util/internalflag"
"github.com/anytypeio/go-anytype-middleware/util/slice"
"github.com/gogo/protobuf/types"
@ -14,7 +13,6 @@ import (
"github.com/anytypeio/go-anytype-middleware/pb"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/core"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/core/smartblock"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/objectstore"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
@ -145,7 +143,7 @@ func (mw *Middleware) ObjectCreateObjectType(cctx context.Context, req *pb.RpcOb
return m
}
id, newDetails, err := mw.objectTypeCreate(req)
id, newDetails, err := mw.objectCreateObjectType(req)
if err != nil {
return response(pb.RpcObjectCreateObjectTypeResponseError_UNKNOWN_ERROR, "", nil, err)
}
@ -153,56 +151,6 @@ func (mw *Middleware) ObjectCreateObjectType(cctx context.Context, req *pb.RpcOb
return response(pb.RpcObjectCreateObjectTypeResponseError_NULL, id, newDetails, nil)
}
func (mw *Middleware) objectTypeCreate(req *pb.RpcObjectCreateObjectTypeRequest) (id string, newDetails *types.Struct, err error) {
if req.Details == nil {
req.Details = &types.Struct{Fields: map[string]*types.Value{}}
}
req.Details = internalflag.PutToDetails(req.Details, req.InternalFlags)
var sbId string
var recommendedRelationKeys []string
rawLayout := pbtypes.GetFloat64(req.Details, bundle.RelationKeyRecommendedLayout.String())
layout, err := bundle.GetLayout(model.ObjectTypeLayout(rawLayout))
if err != nil {
return "", nil, fmt.Errorf("invalid layout: %w", err)
}
for _, rel := range bundle.RequiredInternalRelations {
recommendedRelationKeys = append(recommendedRelationKeys, addr.RelationKeyToIdPrefix+rel.String())
}
for _, rel := range layout.RequiredRelations {
// todo: check if relation is installed?
k := addr.RelationKeyToIdPrefix + rel.Key
if slice.FindPos(recommendedRelationKeys, k) != -1 {
continue
}
recommendedRelationKeys = append(recommendedRelationKeys, k)
}
details := req.Details
details.Fields[bundle.RelationKeyType.String()] = pbtypes.String(bundle.TypeKeyObjectType.URL())
details.Fields[bundle.RelationKeyLayout.String()] = pbtypes.Float64(float64(model.ObjectType_objectType))
details.Fields[bundle.RelationKeyRecommendedRelations.String()] = pbtypes.StringList(recommendedRelationKeys)
err = mw.doBlockService(func(bs block.Service) (err error) {
sbId, _, err = bs.CreateSmartBlock(context.TODO(), smartblock.SmartBlockTypeObjectType, details, nil) // TODO: add relationIds
if err != nil {
return err
}
return nil
})
if err != nil {
return
}
details.Fields[bundle.RelationKeyId.String()] = pbtypes.String(sbId)
return sbId, details, nil
}
func (mw *Middleware) ObjectCreateSet(cctx context.Context, req *pb.RpcObjectCreateSetRequest) *pb.RpcObjectCreateSetResponse {
ctx := mw.newContext(cctx)
response := func(code pb.RpcObjectCreateSetResponseErrorCode, id string, newDetails *types.Struct, err error) *pb.RpcObjectCreateSetResponse {
@ -299,20 +247,29 @@ func (mw *Middleware) objectCreateRelationOption(req *pb.RpcObjectCreateRelation
req.Details.Fields[bundle.RelationKeyType.String()] = pbtypes.String(bundle.TypeKeyRelationOption.URL())
req.Details.Fields[bundle.RelationKeyLayout.String()] = pbtypes.Float64(float64(model.ObjectType_relationOption))
var id string
var newDetails *types.Struct
var object *types.Struct
err := mw.doBlockService(func(rs block.Service) error {
var err error
id, newDetails, err = rs.CreateRelationOption(req.Details)
id, object, err = rs.CreateSubObjectInWorkspace(req.Details, mw.GetAnytype().PredefinedBlocks().Account)
return err
})
return id, newDetails, err
return id, object, err
}
func (mw *Middleware) objectCreateObjectType(req *pb.RpcObjectCreateObjectTypeRequest) (id string, object *types.Struct, err error) {
req.Details.Fields[bundle.RelationKeyType.String()] = pbtypes.String(bundle.TypeKeyObjectType.URL())
err = mw.doBlockService(func(rs block.Service) error {
id, object, err = rs.CreateSubObjectInWorkspace(req.Details, mw.GetAnytype().PredefinedBlocks().Account)
return err
})
return
}
func (mw *Middleware) objectCreateRelation(req *pb.RpcObjectCreateRelationRequest) (id string, object *types.Struct, err error) {
req.Details.Fields[bundle.RelationKeyType.String()] = pbtypes.String(bundle.TypeKeyRelation.URL())
err = mw.doBlockService(func(rs block.Service) error {
var err2 error
id, object, err2 = rs.CreateRelation(req.Details)
return err2
id, object, err = rs.CreateSubObjectInWorkspace(req.Details, mw.GetAnytype().PredefinedBlocks().Account)
return err
})
return
}

View file

@ -3,6 +3,8 @@ package subscription
import (
"context"
"fmt"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr"
"strings"
"sync"
"time"
@ -313,6 +315,10 @@ func (s *service) filtersFromSource(sources []string) (filter.Filter, error) {
if sbt == smartblock.SmartBlockTypeObjectType || sbt == smartblock.SmartBlockTypeBundledObjectType {
objTypeIds = append(objTypeIds, source)
} else {
if strings.HasPrefix(source, addr.ObjectTypeKeyToIdPrefix) {
objTypeIds = append(objTypeIds, source)
continue
}
relKey, err := pbtypes.RelationIdToKey(source)
if err != nil {
return nil, fmt.Errorf("failed to get relation key from id %s: %s", relKey, err.Error())

View file

@ -113,3 +113,55 @@ func (mw *Middleware) WorkspaceGetCurrent(cctx context.Context, req *pb.RpcWorks
return response(workspaceId, pb.RpcWorkspaceGetCurrentResponseError_NULL, nil)
}
func (mw *Middleware) WorkspaceObjectListAdd(cctx context.Context, req *pb.RpcWorkspaceObjectListAddRequest) *pb.RpcWorkspaceObjectListAddResponse {
response := func(ids []string, code pb.RpcWorkspaceObjectListAddResponseErrorCode, err error) *pb.RpcWorkspaceObjectListAddResponse {
m := &pb.RpcWorkspaceObjectListAddResponse{Ids: ids, Error: &pb.RpcWorkspaceObjectListAddResponseError{Code: code}}
if err != nil {
m.Error.Description = err.Error()
}
return m
}
var (
ids []string
)
err := mw.doBlockService(func(bs block.Service) (err error) {
ids, _, err = bs.AddSubObjectsToWorkspace(req.ObjectIds, mw.GetAnytype().PredefinedBlocks().Account)
return
})
if err != nil {
return response(ids, pb.RpcWorkspaceObjectListAddResponseError_UNKNOWN_ERROR, err)
}
return response(ids, pb.RpcWorkspaceObjectListAddResponseError_NULL, nil)
}
func (mw *Middleware) WorkspaceObjectListRemove(cctx context.Context, req *pb.RpcWorkspaceObjectListRemoveRequest) *pb.RpcWorkspaceObjectListRemoveResponse {
response := func(ids []string, code pb.RpcWorkspaceObjectListRemoveResponseErrorCode, err error) *pb.RpcWorkspaceObjectListRemoveResponse {
m := &pb.RpcWorkspaceObjectListRemoveResponse{Ids: ids, Error: &pb.RpcWorkspaceObjectListRemoveResponseError{Code: code}}
if err != nil {
m.Error.Description = err.Error()
}
return m
}
var (
ids []string
)
err := mw.doBlockService(func(bs block.Service) (err error) {
err = bs.RemoveSubObjectsInWorkspace(req.ObjectIds, mw.GetAnytype().PredefinedBlocks().Account)
return
})
if err != nil {
return response(ids, pb.RpcWorkspaceObjectListRemoveResponseError_UNKNOWN_ERROR, err)
}
return response(ids, pb.RpcWorkspaceObjectListRemoveResponseError_NULL, nil)
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -589,6 +589,53 @@ message Rpc {
}
}
message Object {
message ListAdd {
message Request {
repeated string objectIds = 1;
}
message Response {
Error error = 1;
repeated string ids = 2;
message Error {
Code code = 1;
string description = 2;
enum Code {
NULL = 0;
UNKNOWN_ERROR = 1;
BAD_INPUT = 2;
// ...
}
}
}
}
message ListRemove {
message Request {
repeated string objectIds = 1;
}
message Response {
Error error = 1;
repeated string ids = 2;
message Error {
Code code = 1;
string description = 2;
enum Code {
NULL = 0;
UNKNOWN_ERROR = 1;
BAD_INPUT = 2;
// ...
}
}
}
}
}
message SetIsHighlighted {
message Request {
string objectId = 1;

View file

@ -20,6 +20,8 @@ service ClientCommands {
// Workspace
// ***
rpc WorkspaceCreate (anytype.Rpc.Workspace.Create.Request) returns (anytype.Rpc.Workspace.Create.Response);
rpc WorkspaceObjectListAdd (anytype.Rpc.Workspace.Object.ListAdd.Request) returns (anytype.Rpc.Workspace.Object.ListAdd.Response);
rpc WorkspaceObjectListRemove (anytype.Rpc.Workspace.Object.ListRemove.Request) returns (anytype.Rpc.Workspace.Object.ListRemove.Response);
rpc WorkspaceSelect (anytype.Rpc.Workspace.Select.Request) returns (anytype.Rpc.Workspace.Select.Response);
rpc WorkspaceGetCurrent (anytype.Rpc.Workspace.GetCurrent.Request) returns (anytype.Rpc.Workspace.GetCurrent.Response);
rpc WorkspaceGetAll (anytype.Rpc.Workspace.GetAll.Request) returns (anytype.Rpc.Workspace.GetAll.Response);

View file

@ -26,208 +26,211 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("pb/protos/service/service.proto", fileDescriptor_93a29dc403579097) }
var fileDescriptor_93a29dc403579097 = []byte{
// 3214 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0xdf, 0x6f, 0x1d, 0x47,
0x15, 0xc7, 0x7b, 0x5f, 0x28, 0x6c, 0x69, 0x81, 0x2d, 0x94, 0x12, 0x5a, 0x27, 0x4d, 0x1b, 0xff,
0x88, 0xe3, 0xeb, 0x34, 0x81, 0x22, 0x78, 0x41, 0x37, 0x76, 0x9c, 0x58, 0x8d, 0x93, 0xe0, 0xeb,
0x34, 0x52, 0x25, 0x24, 0xd6, 0xbb, 0x93, 0x7b, 0x17, 0xef, 0xdd, 0x59, 0x76, 0xe7, 0x5e, 0xc7,
0x20, 0x90, 0x10, 0x08, 0x44, 0x85, 0x04, 0x12, 0x8f, 0xfc, 0x11, 0xfc, 0x1b, 0x3c, 0xf6, 0x91,
0x47, 0xd4, 0xfe, 0x23, 0x68, 0x77, 0xce, 0xcc, 0xec, 0x9c, 0x9d, 0x33, 0xbb, 0xe6, 0xa9, 0x70,
0xcf, 0xe7, 0x9c, 0xef, 0xfc, 0x9e, 0x33, 0x33, 0x1b, 0x07, 0x57, 0x8b, 0xd3, 0xdd, 0xa2, 0xe4,
0x82, 0x57, 0xbb, 0x15, 0x2b, 0x57, 0x69, 0xcc, 0xd4, 0x7f, 0xc7, 0xcd, 0xcf, 0xe1, 0xab, 0x51,
0x7e, 0x21, 0x2e, 0x0a, 0x76, 0xe5, 0x6d, 0x43, 0xc6, 0x7c, 0xb1, 0x88, 0xf2, 0xa4, 0x92, 0xc8,
0x95, 0xb7, 0x8c, 0x85, 0xad, 0x58, 0x2e, 0xe0, 0xf7, 0x3b, 0xff, 0xfa, 0x6c, 0x14, 0xbc, 0xb1,
0x97, 0xa5, 0x2c, 0x17, 0x7b, 0xe0, 0x11, 0x7e, 0x1a, 0xbc, 0x3e, 0x29, 0x8a, 0x07, 0x4c, 0x7c,
0xc2, 0xca, 0x2a, 0xe5, 0x79, 0xf8, 0xfe, 0x18, 0x04, 0xc6, 0xc7, 0x45, 0x3c, 0x9e, 0x14, 0xc5,
0xd8, 0x18, 0xc7, 0xc7, 0xec, 0x57, 0x4b, 0x56, 0x89, 0x2b, 0x1f, 0xf8, 0xa1, 0xaa, 0xe0, 0x79,
0xc5, 0xc2, 0x17, 0xc1, 0xb7, 0x26, 0x45, 0x31, 0x65, 0x62, 0x9f, 0xd5, 0x15, 0x98, 0x8a, 0x48,
0xb0, 0x70, 0xa3, 0xe3, 0x6a, 0x03, 0x5a, 0x63, 0xb3, 0x1f, 0x04, 0x9d, 0x93, 0xe0, 0xb5, 0x5a,
0x67, 0xbe, 0x14, 0x09, 0x3f, 0xcf, 0xc3, 0xf7, 0xba, 0x8e, 0x60, 0xd2, 0xb1, 0xaf, 0xfb, 0x10,
0x88, 0xfa, 0x3c, 0xf8, 0xfa, 0xf3, 0x28, 0xcb, 0x98, 0xd8, 0x2b, 0x59, 0x5d, 0x70, 0xdb, 0x47,
0x9a, 0xc6, 0xd2, 0xa6, 0xe3, 0xbe, 0xef, 0x65, 0x20, 0xf0, 0xa7, 0xc1, 0xeb, 0xd2, 0x72, 0xcc,
0x62, 0xbe, 0x62, 0x65, 0xe8, 0xf4, 0x02, 0x23, 0xd1, 0xe4, 0x1d, 0x08, 0xc7, 0xde, 0xe3, 0xf9,
0x8a, 0x95, 0xc2, 0x1d, 0x1b, 0x8c, 0xfe, 0xd8, 0x06, 0x82, 0xd8, 0x59, 0xf0, 0x66, 0xbb, 0x41,
0xa6, 0xac, 0x6a, 0x06, 0xcc, 0x16, 0x5d, 0x67, 0x40, 0xb4, 0xce, 0xcd, 0x21, 0x28, 0xa8, 0xa5,
0x41, 0x08, 0x6a, 0x19, 0xaf, 0xb4, 0xd8, 0xa6, 0x33, 0x42, 0x8b, 0xd0, 0x5a, 0x5b, 0x03, 0x48,
0x90, 0xfa, 0x45, 0xf0, 0x8d, 0xe7, 0xbc, 0x3c, 0xab, 0x8a, 0x28, 0x66, 0xd0, 0xd9, 0x37, 0x6c,
0x6f, 0x65, 0xc5, 0xfd, 0xbd, 0xde, 0x87, 0x39, 0x14, 0xa6, 0x2c, 0x63, 0xb1, 0x20, 0x15, 0xa4,
0xb9, 0x57, 0x41, 0x63, 0xad, 0xce, 0x51, 0xc6, 0x07, 0x4c, 0xec, 0x2d, 0xcb, 0x92, 0xe5, 0x02,
0x77, 0x8e, 0x76, 0x37, 0x08, 0xd5, 0x39, 0x6e, 0xd4, 0x51, 0x9f, 0x07, 0x4c, 0x4c, 0xb2, 0x8c,
0xac, 0x8f, 0x34, 0xf7, 0xd6, 0x47, 0x63, 0xa0, 0xf0, 0xbb, 0xe0, 0x7b, 0xad, 0x16, 0x13, 0x87,
0xd5, 0xc3, 0x74, 0x36, 0xcf, 0xd2, 0xd9, 0x5c, 0xb0, 0x24, 0xdc, 0x25, 0x1b, 0xc5, 0x06, 0xb5,
0xea, 0xed, 0xe1, 0x0e, 0x8e, 0x1a, 0xde, 0x7f, 0x59, 0xf0, 0x92, 0xee, 0x31, 0x69, 0xee, 0xad,
0xa1, 0xc6, 0x40, 0xe1, 0xe7, 0xc1, 0x1b, 0x93, 0x38, 0xe6, 0xcb, 0x5c, 0xaf, 0x03, 0x68, 0x55,
0x95, 0xc6, 0xce, 0x42, 0x70, 0xa3, 0x87, 0x32, 0x2b, 0x01, 0xd8, 0x60, 0x48, 0xbf, 0xef, 0xf4,
0x43, 0x03, 0xfa, 0x03, 0x3f, 0xd4, 0x89, 0xbd, 0xcf, 0x32, 0x46, 0xc6, 0x96, 0xc6, 0x9e, 0xd8,
0x1a, 0xea, 0xc4, 0x86, 0x89, 0xe2, 0x8e, 0x8d, 0xa6, 0xc9, 0x07, 0x7e, 0xa8, 0xb5, 0x51, 0x40,
0x6c, 0xc1, 0x0b, 0xbc, 0x51, 0x28, 0x27, 0xc1, 0x0b, 0x6a, 0xa3, 0xb0, 0x91, 0x4e, 0xd4, 0x23,
0xbe, 0x62, 0x44, 0xd4, 0xda, 0xd4, 0x13, 0x15, 0x10, 0x33, 0xa1, 0x55, 0xff, 0xf1, 0xfc, 0x45,
0x3a, 0x7b, 0x56, 0x24, 0x75, 0x2f, 0x6e, 0xb9, 0x3b, 0xa8, 0x85, 0x10, 0x13, 0x9a, 0x40, 0x41,
0xed, 0x67, 0x41, 0xf0, 0xe4, 0xf4, 0x97, 0x2c, 0x16, 0x4f, 0x0a, 0x96, 0x87, 0xd7, 0x2c, 0x4f,
0x69, 0x18, 0xd7, 0x16, 0x1d, 0xfb, 0x3d, 0x0f, 0x61, 0x9a, 0x45, 0xfe, 0xde, 0x2c, 0xba, 0xa1,
0xd3, 0xa3, 0x31, 0x11, 0xcd, 0x82, 0x10, 0x5c, 0xd0, 0xe9, 0x9c, 0x9f, 0xbb, 0x0b, 0x5a, 0x5b,
0xfc, 0x05, 0x05, 0xc2, 0x6c, 0xf4, 0x50, 0x50, 0xd7, 0x46, 0xaf, 0x8a, 0xe1, 0xdb, 0xe8, 0x31,
0x03, 0x81, 0x79, 0xf0, 0xed, 0x76, 0xe0, 0x7b, 0x9c, 0x9f, 0x2d, 0xa2, 0xf2, 0x2c, 0xbc, 0x49,
0x3b, 0x2b, 0x46, 0x0b, 0x6d, 0x0f, 0x62, 0xcd, 0xa2, 0xd5, 0x16, 0x9c, 0x32, 0xbc, 0x68, 0x59,
0xfe, 0x53, 0x46, 0x2d, 0x5a, 0x0e, 0x0c, 0x77, 0xea, 0x83, 0x32, 0x2a, 0xe6, 0xee, 0x4e, 0x6d,
0x4c, 0xfe, 0x4e, 0x55, 0x08, 0xee, 0x81, 0x29, 0x8b, 0xca, 0x78, 0xee, 0xee, 0x01, 0x69, 0xf3,
0xf7, 0x80, 0x66, 0x20, 0x70, 0x19, 0x7c, 0xa7, 0x1d, 0x78, 0xba, 0x3c, 0xad, 0xe2, 0x32, 0x3d,
0x65, 0xe1, 0x36, 0xed, 0xad, 0x21, 0x2d, 0x75, 0x6b, 0x18, 0x0c, 0x9a, 0x7f, 0x1e, 0x05, 0xef,
0x48, 0xe6, 0x98, 0x65, 0x91, 0x48, 0x79, 0x2e, 0xd1, 0xfd, 0xb4, 0x12, 0x69, 0x1e, 0x8b, 0xf0,
0x8e, 0x2b, 0x9c, 0x9b, 0xd5, 0x45, 0xb8, 0x7b, 0x29, 0x1f, 0x93, 0x42, 0x41, 0xed, 0x55, 0x29,
0x0f, 0x93, 0x0a, 0xa5, 0x50, 0xaa, 0x36, 0x2d, 0x82, 0x48, 0xa1, 0xdc, 0x24, 0x48, 0xbd, 0x0c,
0xbe, 0xdb, 0x6e, 0xe8, 0x67, 0x79, 0xa5, 0x9b, 0x7a, 0x87, 0x6e, 0xbd, 0x16, 0xa6, 0x45, 0xc7,
0x43, 0x71, 0x50, 0x8e, 0x83, 0x6f, 0x2a, 0x65, 0xb1, 0xcf, 0x44, 0x94, 0x66, 0x55, 0xb8, 0xee,
0x8e, 0xa1, 0xec, 0x5a, 0x6b, 0xa3, 0x97, 0xc3, 0x13, 0x6b, 0x7f, 0x59, 0x64, 0x69, 0xdc, 0xcd,
0x10, 0xc1, 0x57, 0x9b, 0xfd, 0x13, 0xab, 0x8d, 0x99, 0xe5, 0x5e, 0x57, 0x43, 0xfe, 0x8f, 0x93,
0x8b, 0x02, 0x2f, 0xf7, 0xa6, 0x84, 0x06, 0x21, 0x96, 0x7b, 0x02, 0xc5, 0xf5, 0x99, 0x32, 0xf1,
0x28, 0xba, 0xe0, 0x4b, 0x62, 0xa1, 0xd0, 0x66, 0x7f, 0x7d, 0xda, 0x18, 0x28, 0x2c, 0x83, 0xb7,
0xb4, 0xc2, 0x61, 0x2e, 0x58, 0x99, 0x47, 0xd9, 0x41, 0x16, 0xcd, 0xaa, 0x90, 0x98, 0x4d, 0x36,
0xa5, 0xf5, 0x76, 0x06, 0xd2, 0x8e, 0x66, 0x3c, 0xac, 0x0e, 0xa2, 0x15, 0x2f, 0x53, 0x41, 0x37,
0xa3, 0x41, 0x7a, 0x9b, 0xd1, 0x42, 0x9d, 0x6a, 0x93, 0x32, 0x9e, 0xa7, 0x2b, 0x96, 0x78, 0xd4,
0x14, 0x32, 0x40, 0xad, 0x85, 0x62, 0xb5, 0x47, 0x69, 0xd5, 0x1a, 0x88, 0x4e, 0x35, 0x0b, 0xf1,
0xab, 0x61, 0x14, 0xcf, 0xab, 0xc6, 0x2e, 0xd3, 0xbc, 0x75, 0xd2, 0xdf, 0xce, 0xf4, 0x36, 0x7a,
0x39, 0xbc, 0x6c, 0xd4, 0x46, 0xbb, 0x11, 0x77, 0xa8, 0x18, 0xee, 0x86, 0x1c, 0x0f, 0xc5, 0x49,
0x65, 0x3d, 0x58, 0xfc, 0xca, 0x9d, 0x01, 0x33, 0x1e, 0x8a, 0xe3, 0x6e, 0x9c, 0x14, 0x45, 0x76,
0x71, 0xc2, 0x16, 0x45, 0x46, 0x76, 0xa3, 0x85, 0xf8, 0xbb, 0x11, 0xa3, 0x78, 0xc3, 0x3e, 0xe1,
0x75, 0x3a, 0xe0, 0xdc, 0xb0, 0x1b, 0x93, 0x7f, 0xc3, 0x56, 0x08, 0xde, 0x57, 0x27, 0x49, 0xf2,
0x3c, 0x15, 0x73, 0xf9, 0x7f, 0x0e, 0x13, 0xf7, 0xbe, 0x8a, 0x20, 0xff, 0xbe, 0xda, 0x85, 0xcd,
0x6d, 0x92, 0xca, 0xfc, 0xa2, 0x92, 0xdd, 0xbb, 0x78, 0x94, 0xe6, 0x67, 0xa1, 0x7b, 0x05, 0x37,
0x00, 0x71, 0x9b, 0xe4, 0x04, 0x71, 0xdd, 0xea, 0x74, 0xf6, 0x5e, 0xc9, 0xa2, 0x24, 0x2e, 0x97,
0x8b, 0xd3, 0xca, 0x5d, 0x37, 0x04, 0xf9, 0xeb, 0xd6, 0x85, 0x71, 0xa6, 0x38, 0x65, 0xa2, 0x2d,
0x49, 0x2d, 0x0f, 0x2e, 0xc5, 0xed, 0x41, 0x2c, 0x4e, 0xa3, 0x9f, 0xe5, 0x09, 0x77, 0xa7, 0xd1,
0xb5, 0xc5, 0x9f, 0x46, 0x03, 0x81, 0x43, 0x1e, 0x33, 0x2a, 0x64, 0x6d, 0xf1, 0x87, 0x04, 0x02,
0x37, 0xcb, 0xe1, 0xa2, 0x3e, 0x3b, 0x1f, 0x45, 0xe5, 0x59, 0x73, 0xc3, 0xe7, 0x6c, 0x16, 0x9b,
0xf1, 0x37, 0x4b, 0x87, 0x75, 0x2d, 0x7a, 0x70, 0xec, 0x27, 0x17, 0x3d, 0x74, 0xee, 0xdf, 0xe8,
0xe5, 0xf0, 0x02, 0xa0, 0x12, 0xf8, 0x03, 0x26, 0xe2, 0xb9, 0x7b, 0x01, 0xb0, 0x10, 0xff, 0x02,
0x80, 0x51, 0x5c, 0xa5, 0x13, 0xae, 0x0f, 0x20, 0xeb, 0xee, 0x29, 0xde, 0x39, 0x7c, 0x6c, 0xf4,
0x72, 0x38, 0x81, 0x97, 0x0d, 0xeb, 0x4e, 0xe0, 0xa5, 0xcd, 0x9f, 0xc0, 0x6b, 0x06, 0x97, 0x5e,
0x1a, 0xea, 0xe6, 0x74, 0x97, 0xde, 0xd8, 0xfd, 0xa5, 0xb7, 0x38, 0xf7, 0x39, 0x4d, 0xa5, 0xd5,
0xbe, 0x73, 0x9a, 0x62, 0x86, 0x9c, 0xd3, 0x5a, 0x2c, 0x08, 0xfe, 0x7e, 0x14, 0x5c, 0x71, 0x29,
0x3e, 0x29, 0x1a, 0xdd, 0xdb, 0xfd, 0xb1, 0x24, 0xa9, 0xd5, 0x3f, 0xbc, 0x84, 0x07, 0x94, 0xe1,
0x37, 0xc1, 0xdb, 0xca, 0x54, 0xb7, 0xc6, 0x31, 0x5b, 0xf0, 0x15, 0x83, 0x02, 0xd8, 0x5b, 0x9a,
0x2e, 0x3f, 0xe6, 0xb4, 0xfc, 0xee, 0x60, 0xde, 0xe4, 0x9f, 0x76, 0xb9, 0x2a, 0x94, 0x7f, 0xea,
0x18, 0x60, 0x26, 0xf2, 0x4f, 0x07, 0x86, 0x77, 0x0b, 0x85, 0x4c, 0x92, 0xc4, 0xb9, 0x5b, 0xe8,
0x10, 0x93, 0x24, 0xf1, 0xee, 0x16, 0x08, 0xc4, 0x63, 0x47, 0x99, 0x21, 0x55, 0xba, 0xe9, 0x8b,
0x80, 0xd2, 0xa5, 0xed, 0x41, 0xac, 0xb9, 0x18, 0xed, 0x54, 0xec, 0x80, 0x45, 0x62, 0x59, 0x76,
0x2e, 0x46, 0xbb, 0xe5, 0x56, 0x20, 0x71, 0x31, 0xea, 0x75, 0x20, 0x8f, 0xb7, 0xb2, 0x8b, 0x75,
0x19, 0xee, 0xf8, 0x42, 0xda, 0xac, 0xf7, 0x78, 0x4b, 0xfb, 0x40, 0x49, 0xfe, 0x38, 0x0a, 0xbe,
0x6f, 0xa3, 0xf5, 0x80, 0x9b, 0xac, 0xa2, 0x34, 0x8b, 0x4e, 0x33, 0x16, 0x7e, 0xe8, 0x0b, 0x6a,
0xa1, 0xba, 0x1c, 0x77, 0x2e, 0xe3, 0x82, 0x4f, 0x3a, 0x72, 0xbe, 0xb5, 0x0e, 0x6f, 0xb7, 0xe8,
0x59, 0xe9, 0x38, 0xbf, 0xed, 0x0c, 0xa4, 0x41, 0xf6, 0x5c, 0xc9, 0xd6, 0x3f, 0xb7, 0x1b, 0xc0,
0x99, 0xbf, 0x82, 0x6f, 0xab, 0x26, 0xde, 0xfc, 0xd5, 0x89, 0x83, 0xb0, 0x50, 0xf9, 0x51, 0x5b,
0xb8, 0x9e, 0x5d, 0xb7, 0x7a, 0x03, 0xb5, 0xa7, 0xd8, 0xce, 0x40, 0x1a, 0x54, 0x7f, 0x1b, 0xbc,
0xdd, 0x55, 0x95, 0x23, 0xc3, 0x39, 0xea, 0xed, 0x50, 0x12, 0xf4, 0x8e, 0x7a, 0xc2, 0xc1, 0x5c,
0xa5, 0x3c, 0x4c, 0x2b, 0xc1, 0xcb, 0x8b, 0xe9, 0x9c, 0x9f, 0xab, 0xb7, 0x52, 0x7b, 0x99, 0x00,
0x60, 0xdc, 0x22, 0x88, 0xab, 0x14, 0x37, 0xd9, 0x91, 0x32, 0x6f, 0xaa, 0x15, 0x21, 0xd5, 0x22,
0x7a, 0xa4, 0x6c, 0xd2, 0x2c, 0x92, 0xaa, 0x56, 0xe6, 0x01, 0x78, 0xc3, 0x5d, 0xd4, 0xee, 0x23,
0xf0, 0x66, 0x3f, 0x68, 0x0e, 0x21, 0x07, 0x69, 0xc6, 0x9e, 0xbc, 0x78, 0x91, 0xf1, 0x28, 0x41,
0x87, 0x90, 0xda, 0x32, 0x06, 0x13, 0x71, 0x08, 0x41, 0x88, 0xd9, 0x44, 0x6a, 0x43, 0x3d, 0x3a,
0x55, 0xe4, 0x1b, 0x5d, 0xb7, 0x96, 0x99, 0xd8, 0x44, 0x1c, 0x98, 0x49, 0x69, 0x6b, 0xe3, 0xb3,
0xa2, 0x09, 0x7e, 0xad, 0xeb, 0x25, 0x2d, 0x44, 0x4a, 0x6b, 0x13, 0x26, 0x53, 0xaa, 0x7f, 0xdf,
0xe7, 0xe7, 0x79, 0x13, 0xd4, 0x51, 0x51, 0x65, 0x23, 0x32, 0x25, 0xcc, 0x40, 0xe0, 0x8f, 0x83,
0xaf, 0x36, 0x81, 0x4b, 0x5e, 0x84, 0x6b, 0x0e, 0x87, 0xb2, 0xf5, 0xaa, 0x71, 0x95, 0xb4, 0x9b,
0x33, 0xd0, 0xe3, 0x68, 0x95, 0xce, 0xf4, 0xa2, 0x22, 0xe7, 0x08, 0x3e, 0x03, 0x19, 0x66, 0xdc,
0x82, 0x88, 0x33, 0x10, 0x09, 0x83, 0xe6, 0x3f, 0x46, 0xc1, 0x35, 0xc3, 0x3c, 0x50, 0x17, 0x57,
0x87, 0xf9, 0x0b, 0x5e, 0x1f, 0x08, 0xeb, 0x43, 0x5a, 0x15, 0x7e, 0x44, 0x85, 0x74, 0xf3, 0xba,
0x28, 0x3f, 0xba, 0xb4, 0x9f, 0x49, 0x93, 0xd4, 0xa1, 0x5a, 0xae, 0xc5, 0x07, 0x25, 0x5f, 0x48,
0x0f, 0x94, 0x26, 0xe9, 0xb3, 0x37, 0xe6, 0x88, 0x34, 0xc9, 0xc7, 0xb7, 0xf6, 0x5a, 0x4a, 0xbd,
0xd9, 0x61, 0xee, 0x0c, 0x8b, 0x68, 0xed, 0x33, 0x77, 0x2f, 0xe5, 0x63, 0x5e, 0xe5, 0x74, 0x41,
0x32, 0x9e, 0xe3, 0x17, 0x3f, 0x13, 0xa5, 0x36, 0x12, 0xaf, 0x72, 0x1d, 0xc8, 0xac, 0x42, 0xca,
0x24, 0x8f, 0x4a, 0x93, 0x2c, 0x43, 0xab, 0x90, 0x76, 0xd5, 0x00, 0xb1, 0x0a, 0x39, 0x41, 0xd0,
0x39, 0x0e, 0x5e, 0xab, 0x3b, 0xf7, 0x69, 0xc9, 0x56, 0x29, 0xc3, 0x6f, 0x47, 0x2d, 0x0b, 0x31,
0x9d, 0x6d, 0xc2, 0x3c, 0xe2, 0x3e, 0xcb, 0xab, 0x22, 0x8b, 0xaa, 0x39, 0xbc, 0x5d, 0xd8, 0x75,
0x56, 0x46, 0xfc, 0x7a, 0x71, 0xa3, 0x87, 0x32, 0xc7, 0x1f, 0x65, 0xd3, 0x2b, 0xc6, 0xba, 0xdb,
0xb5, 0xb3, 0x6a, 0x6c, 0xf4, 0x72, 0x66, 0x75, 0xbe, 0x97, 0xf1, 0xf8, 0x0c, 0x96, 0x39, 0xbb,
0xd6, 0x8d, 0x05, 0xaf, 0x73, 0xd7, 0x7d, 0x88, 0x59, 0xe8, 0x1a, 0xc3, 0x31, 0x2b, 0xb2, 0x28,
0xc6, 0xaf, 0x6a, 0xd2, 0x07, 0x6c, 0xc4, 0x42, 0x87, 0x19, 0x54, 0x5c, 0x78, 0xad, 0x73, 0x15,
0x17, 0x3d, 0xd6, 0x5d, 0xf7, 0x21, 0x66, 0xa9, 0x6f, 0x0c, 0xd3, 0x22, 0x4b, 0x05, 0x1a, 0x1b,
0xd2, 0xa3, 0xb1, 0x10, 0x63, 0xc3, 0x26, 0x50, 0xc8, 0x23, 0x56, 0xce, 0x98, 0x33, 0x64, 0x63,
0xf1, 0x86, 0x54, 0x04, 0x84, 0x7c, 0x1c, 0x7c, 0x4d, 0xd6, 0x9d, 0x17, 0x17, 0xe1, 0x55, 0x57,
0xb5, 0x78, 0x71, 0xa1, 0x03, 0x5e, 0xa3, 0x01, 0x54, 0xc4, 0xa7, 0x51, 0x25, 0xdc, 0x45, 0x6c,
0x2c, 0xde, 0x22, 0x2a, 0xc2, 0xec, 0x43, 0xb2, 0x88, 0x4b, 0x81, 0xf6, 0x21, 0x28, 0x40, 0xeb,
0x31, 0xe1, 0x2a, 0x69, 0x37, 0xd3, 0x4b, 0xf6, 0x0a, 0x13, 0x07, 0x29, 0xcb, 0x92, 0x0a, 0x4d,
0x2f, 0x68, 0x77, 0x65, 0x25, 0xa6, 0x57, 0x97, 0x42, 0x43, 0x09, 0x6e, 0x7a, 0x5c, 0xb5, 0x43,
0x97, 0x3c, 0xd7, 0x7d, 0x88, 0xc9, 0x4b, 0x1a, 0x43, 0xeb, 0xe2, 0xdc, 0x55, 0x1e, 0xc7, 0xbd,
0xf9, 0x7a, 0x1f, 0x06, 0x0a, 0x9f, 0x8d, 0x82, 0x77, 0xb5, 0xc4, 0x11, 0x5f, 0xb1, 0x13, 0x7e,
0xff, 0x65, 0xf3, 0xfc, 0x37, 0x83, 0xad, 0xe9, 0x2e, 0x11, 0xc9, 0x05, 0x6b, 0xf9, 0x1f, 0x5c,
0xce, 0xc9, 0xec, 0x90, 0xa8, 0x2c, 0x8f, 0xd9, 0xb9, 0x73, 0x87, 0xc4, 0x11, 0x35, 0x47, 0xec,
0x90, 0x3e, 0xde, 0x9c, 0x86, 0xb5, 0x38, 0x7c, 0xb0, 0x76, 0xc2, 0x55, 0xb2, 0x42, 0x45, 0xc3,
0x20, 0x71, 0x2e, 0xf0, 0x3a, 0x98, 0x64, 0x5d, 0xeb, 0x9b, 0x41, 0xba, 0x49, 0xc4, 0xe9, 0x0e,
0xd4, 0xad, 0x01, 0xa4, 0x43, 0xca, 0xbc, 0xfe, 0x50, 0x52, 0xdd, 0xc7, 0x9f, 0xad, 0x01, 0x64,
0xeb, 0x64, 0xdd, 0xae, 0xd6, 0xbd, 0x28, 0x3e, 0x9b, 0x95, 0x7c, 0x99, 0x27, 0x7b, 0x3c, 0xe3,
0x25, 0x3a, 0x59, 0x5b, 0xa5, 0x46, 0x28, 0x71, 0xb2, 0xee, 0x71, 0x31, 0x89, 0x41, 0xbb, 0x14,
0x93, 0x2c, 0x9d, 0xe1, 0xe3, 0x89, 0x15, 0xa8, 0x01, 0x88, 0xc4, 0xc0, 0x09, 0x3a, 0x06, 0x91,
0x3c, 0xbe, 0x88, 0x34, 0x8e, 0x32, 0xa9, 0xb7, 0x4b, 0x87, 0xb1, 0xc0, 0xde, 0x41, 0xe4, 0x70,
0x70, 0xd4, 0xf3, 0x64, 0x59, 0xe6, 0x87, 0xb9, 0xe0, 0x64, 0x3d, 0x15, 0xd0, 0x5b, 0xcf, 0x16,
0x68, 0xb2, 0x89, 0xc6, 0x7c, 0xc2, 0x5e, 0xd6, 0xa5, 0xa9, 0xff, 0x13, 0x3a, 0x96, 0x9c, 0xfa,
0xf7, 0x31, 0xd8, 0x89, 0x6c, 0xc2, 0xc5, 0xa1, 0xca, 0x80, 0x88, 0x1c, 0x30, 0x1e, 0x6f, 0x7b,
0x98, 0x6c, 0xf6, 0x83, 0x6e, 0x9d, 0xa9, 0xb8, 0xc8, 0x98, 0x4f, 0xa7, 0x01, 0x86, 0xe8, 0x28,
0xd0, 0xdc, 0xd6, 0x5b, 0xf5, 0x99, 0xb3, 0xf8, 0xac, 0xf3, 0xc6, 0x6b, 0x17, 0x54, 0x22, 0xc4,
0x6d, 0x3d, 0x81, 0xba, 0xbb, 0xe8, 0x30, 0xe6, 0xb9, 0xaf, 0x8b, 0x6a, 0xfb, 0x90, 0x2e, 0x02,
0xce, 0x9c, 0xee, 0xb4, 0x15, 0x46, 0xa6, 0xec, 0xa6, 0x6d, 0x22, 0x42, 0x1b, 0x22, 0x4e, 0x77,
0x24, 0x6c, 0xee, 0x49, 0xb1, 0xe6, 0x51, 0xf7, 0x5b, 0xa8, 0x4e, 0x94, 0x23, 0xfa, 0x5b, 0x28,
0x8a, 0xa5, 0x2b, 0x29, 0xc7, 0x48, 0x4f, 0x14, 0x7b, 0x9c, 0xdc, 0x1a, 0x06, 0x9b, 0x47, 0x65,
0x4b, 0x73, 0x2f, 0x63, 0x51, 0x29, 0x55, 0x77, 0x3c, 0x81, 0x0c, 0x46, 0x5c, 0xca, 0x79, 0x70,
0xb4, 0x84, 0x59, 0xca, 0x7b, 0x3c, 0x17, 0x2c, 0x17, 0xae, 0x25, 0xcc, 0x0e, 0x06, 0xa0, 0x6f,
0x09, 0xa3, 0x1c, 0xd0, 0xb8, 0x3d, 0x48, 0x33, 0x36, 0x65, 0xe2, 0x71, 0xb4, 0x60, 0xae, 0x71,
0xdb, 0x5c, 0x35, 0x80, 0xdd, 0x37, 0x6e, 0x11, 0x87, 0xa6, 0xfc, 0xe1, 0x22, 0x9a, 0x69, 0x15,
0x87, 0x77, 0x63, 0xef, 0xc8, 0x6c, 0xf6, 0x83, 0x48, 0xe7, 0x93, 0x34, 0x61, 0xdc, 0xa3, 0xd3,
0xd8, 0x87, 0xe8, 0x60, 0x10, 0x65, 0x4e, 0x75, 0x6d, 0xe5, 0x79, 0x64, 0x92, 0x27, 0x70, 0x0a,
0x1b, 0x13, 0x8d, 0x82, 0x38, 0x5f, 0xe6, 0x44, 0xf0, 0x68, 0x7e, 0xa8, 0x2b, 0x34, 0xdf, 0xfc,
0xd0, 0x37, 0x64, 0x43, 0xe6, 0x87, 0x0b, 0x06, 0xcd, 0x5f, 0xc3, 0xfc, 0xd8, 0x8f, 0x44, 0x54,
0x9f, 0xa3, 0x3f, 0x49, 0xd9, 0x39, 0x1c, 0xe3, 0x1c, 0xf5, 0x55, 0xd4, 0xb8, 0xc6, 0xf0, 0x99,
0x6e, 0x77, 0x30, 0xef, 0xd1, 0x86, 0xec, 0xbc, 0x57, 0x1b, 0xa5, 0xe9, 0xbb, 0x83, 0x79, 0x8f,
0x36, 0x7c, 0xcf, 0xdb, 0xab, 0x8d, 0x3e, 0xea, 0xdd, 0x1d, 0xcc, 0x83, 0xf6, 0x1f, 0x46, 0xc1,
0x95, 0x8e, 0x78, 0x9d, 0x03, 0xc5, 0x22, 0x5d, 0x31, 0x57, 0x2a, 0x67, 0xc7, 0xd3, 0xa8, 0x2f,
0x95, 0xa3, 0x5d, 0xa0, 0x14, 0x7f, 0x19, 0x05, 0xef, 0xb8, 0x4a, 0xf1, 0x94, 0x57, 0x69, 0xf3,
0xe4, 0x78, 0x77, 0x40, 0x50, 0x05, 0xfb, 0x0e, 0x2c, 0x3e, 0x27, 0xf3, 0x60, 0x63, 0xa1, 0xf5,
0x38, 0xe5, 0xcb, 0x32, 0xc6, 0x0f, 0x36, 0x76, 0x3c, 0x4d, 0x11, 0x2f, 0x18, 0x34, 0x6d, 0x5e,
0x30, 0x2c, 0xa6, 0xfd, 0x74, 0xe2, 0xeb, 0x55, 0xe7, 0xeb, 0xc9, 0xed, 0xe1, 0x0e, 0x20, 0xff,
0x27, 0x95, 0xd3, 0x63, 0x7d, 0x98, 0x04, 0x77, 0x86, 0x44, 0x44, 0x13, 0xe1, 0xee, 0xa5, 0x7c,
0xa0, 0x20, 0xff, 0x1c, 0x05, 0xd7, 0x9d, 0x05, 0xb1, 0x5f, 0xef, 0x7e, 0x3c, 0x24, 0xb6, 0xfb,
0x15, 0xef, 0x27, 0xff, 0x8f, 0x2b, 0x94, 0xee, 0xaf, 0xea, 0x68, 0xad, 0x3c, 0x1e, 0x94, 0x7c,
0x59, 0x3c, 0x29, 0x13, 0x56, 0xc2, 0x8c, 0xf5, 0x0d, 0x3a, 0x03, 0xe3, 0x79, 0xfb, 0xc3, 0x4b,
0x7a, 0x41, 0x71, 0xfe, 0x36, 0x0a, 0xd6, 0x2c, 0x18, 0x3e, 0x4d, 0x6a, 0x95, 0xc7, 0x17, 0xb9,
0x45, 0xe3, 0x02, 0x7d, 0x74, 0x59, 0x37, 0x9c, 0xa1, 0xd6, 0xed, 0x06, 0x8b, 0xb7, 0x2b, 0x43,
0x6d, 0x9a, 0x15, 0x2d, 0xda, 0x1b, 0xbd, 0x9c, 0x4b, 0xe4, 0xfe, 0xcb, 0x22, 0xca, 0x13, 0x5a,
0x44, 0xda, 0xfb, 0x45, 0x34, 0x87, 0x33, 0xfb, 0xda, 0x7a, 0xcc, 0xd5, 0x4e, 0xb4, 0x45, 0xf9,
0x6b, 0xc4, 0x9b, 0xd9, 0x77, 0x50, 0x42, 0x0d, 0xa6, 0x9d, 0x4f, 0x0d, 0xcd, 0xb6, 0x9b, 0x43,
0x50, 0xb4, 0xc6, 0x69, 0x35, 0x7d, 0x61, 0x70, 0xcb, 0x17, 0xa5, 0x73, 0x69, 0xb0, 0x33, 0x90,
0x26, 0x64, 0xa7, 0x4c, 0x3c, 0x64, 0x51, 0xc2, 0x4a, 0xaf, 0xac, 0xa6, 0x06, 0xc9, 0xb6, 0x69,
0x97, 0xec, 0x1e, 0xcf, 0x96, 0x8b, 0x1c, 0x3a, 0x93, 0x94, 0x6d, 0x53, 0xfd, 0xb2, 0x88, 0xc6,
0x67, 0x1a, 0x23, 0xdb, 0xfc, 0x0b, 0xa0, 0x9b, 0xfe, 0x30, 0xd6, 0x3f, 0x05, 0xda, 0x1e, 0xc4,
0xd2, 0xf5, 0x84, 0x61, 0xd4, 0x53, 0x4f, 0x34, 0x92, 0x76, 0x06, 0xd2, 0xf8, 0x70, 0xd1, 0x92,
0xd5, 0xe3, 0x69, 0xb7, 0x27, 0x56, 0x67, 0x48, 0xdd, 0x1e, 0xee, 0x80, 0x8f, 0x72, 0x30, 0xaa,
0xea, 0xa5, 0xfb, 0x20, 0xcd, 0xb2, 0x70, 0xdb, 0x33, 0x4c, 0x14, 0xe4, 0x3d, 0xca, 0x39, 0x60,
0x62, 0x24, 0xab, 0xa3, 0x4f, 0x1e, 0xf6, 0xc5, 0x69, 0xa8, 0x41, 0x23, 0xb9, 0x4d, 0xa3, 0x23,
0x41, 0xab, 0xa9, 0x75, 0x6d, 0xc7, 0xfe, 0x86, 0xeb, 0x54, 0x78, 0x77, 0x30, 0x8f, 0x6e, 0xdb,
0x1b, 0x6a, 0xca, 0x4b, 0xe1, 0xba, 0x6d, 0x97, 0x21, 0xa6, 0xed, 0x4b, 0xf1, 0x1b, 0x3d, 0x54,
0xe7, 0x9a, 0x2d, 0x87, 0xc7, 0x1b, 0xf3, 0xa1, 0xaf, 0x6b, 0x18, 0x35, 0x9f, 0xe5, 0x62, 0xd0,
0x37, 0x8c, 0x28, 0x87, 0xd6, 0x57, 0x77, 0x9a, 0x53, 0x37, 0x81, 0x45, 0xc1, 0xa2, 0x32, 0xca,
0x63, 0x16, 0x52, 0x01, 0x3b, 0x24, 0xf1, 0xd5, 0x9d, 0xdf, 0x03, 0x5d, 0xe2, 0xda, 0x9f, 0x7e,
0x3a, 0x8e, 0x8c, 0xfa, 0x1b, 0x4b, 0xfb, 0xcb, 0xcf, 0xad, 0x01, 0x24, 0xbe, 0xc4, 0x55, 0x80,
0x3e, 0x0a, 0x4a, 0xd1, 0x0f, 0x3d, 0xa1, 0x6c, 0xd4, 0x97, 0xf9, 0xd3, 0x2e, 0x68, 0xdf, 0x33,
0xff, 0x58, 0x49, 0x7c, 0xcc, 0x2e, 0x5c, 0xfb, 0x9e, 0x4e, 0xcd, 0x24, 0xe2, 0xdb, 0xf7, 0xba,
0x28, 0x4a, 0x1c, 0xda, 0xc9, 0xf5, 0xba, 0xc7, 0xbf, 0x9d, 0x53, 0x6f, 0xf4, 0x72, 0x68, 0xdd,
0xdf, 0x4f, 0x57, 0xd6, 0xc9, 0xd9, 0x51, 0xd0, 0xfd, 0x74, 0xe5, 0x3e, 0x38, 0x6f, 0x0f, 0x62,
0xf1, 0x05, 0x71, 0x24, 0xd8, 0x4b, 0x75, 0x73, 0xeb, 0x28, 0x6e, 0x63, 0xef, 0x5c, 0xdd, 0x6e,
0xf6, 0x83, 0xe6, 0x95, 0xff, 0x69, 0xc9, 0x63, 0x56, 0x55, 0x7b, 0xf5, 0xb0, 0xcd, 0xd0, 0x2b,
0x3f, 0xd8, 0xc6, 0xd2, 0x48, 0xbc, 0xf2, 0x77, 0x20, 0x88, 0xfd, 0x30, 0x78, 0xf5, 0x11, 0x9f,
0x4d, 0x59, 0x9e, 0x84, 0xef, 0xda, 0xef, 0xea, 0x7c, 0x36, 0xae, 0x7f, 0xd6, 0xf1, 0xd6, 0x28,
0xb3, 0x79, 0x04, 0xdd, 0x67, 0xa7, 0xcb, 0xd9, 0xf4, 0x22, 0x8f, 0xd1, 0x23, 0x68, 0xf3, 0xfb,
0xb8, 0x36, 0x10, 0x8f, 0xa0, 0x16, 0x60, 0x5e, 0x01, 0x9b, 0x9f, 0x4f, 0xe6, 0x25, 0xeb, 0xbc,
0x7f, 0x4b, 0x07, 0x69, 0x22, 0x5e, 0x01, 0x11, 0x82, 0x4a, 0x79, 0x52, 0x32, 0xe6, 0x2c, 0x65,
0x6d, 0xf0, 0x96, 0x12, 0x00, 0xb3, 0x09, 0x36, 0x3f, 0xcb, 0xd7, 0xc6, 0x47, 0x3c, 0x8e, 0xb2,
0x4a, 0xf0, 0x12, 0xdf, 0xd7, 0x48, 0x57, 0x0c, 0x11, 0x9b, 0x20, 0x09, 0xa3, 0x3a, 0x3c, 0x4d,
0xf3, 0x99, 0xb3, 0x0e, 0xb5, 0xc1, 0x5b, 0x07, 0x00, 0xcc, 0xc4, 0x39, 0x62, 0xa2, 0x4c, 0xe3,
0xaa, 0x3e, 0x98, 0x47, 0x65, 0xb4, 0x60, 0x82, 0x95, 0xf8, 0x9f, 0x39, 0x00, 0x32, 0xb6, 0x18,
0x62, 0xe2, 0x50, 0x2c, 0x08, 0xfe, 0x34, 0x78, 0xb3, 0x9e, 0x51, 0x2c, 0x87, 0xbf, 0xf9, 0x70,
0xbf, 0xf9, 0x73, 0x28, 0xe1, 0x5b, 0x3a, 0xc6, 0x54, 0x94, 0x2c, 0x5a, 0xa8, 0xd8, 0x6f, 0xe8,
0xdf, 0x1b, 0xf0, 0xf6, 0xe8, 0xde, 0x7b, 0xff, 0xfe, 0x62, 0x6d, 0xf4, 0xf9, 0x17, 0x6b, 0xa3,
0xff, 0x7e, 0xb1, 0x36, 0xfa, 0xfb, 0x97, 0x6b, 0xaf, 0x7c, 0xfe, 0xe5, 0xda, 0x2b, 0xff, 0xf9,
0x72, 0xed, 0x95, 0x4f, 0x5f, 0x85, 0x3f, 0xcb, 0x72, 0xfa, 0x95, 0xe6, 0x8f, 0xab, 0xdc, 0xfd,
0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0xa5, 0xc1, 0xd7, 0xba, 0x45, 0x00, 0x00,
// 3258 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x9c, 0xdd, 0x8e, 0x1c, 0x47,
0xf5, 0xc0, 0x33, 0x37, 0xff, 0xfc, 0xe9, 0x90, 0x00, 0x1d, 0x30, 0xc1, 0x24, 0x6b, 0xc7, 0x89,
0xf7, 0xc3, 0xeb, 0x9d, 0xdd, 0xd8, 0x10, 0x04, 0x37, 0x68, 0xbc, 0xeb, 0xb5, 0x57, 0xf1, 0xda,
0x66, 0x67, 0x1d, 0x4b, 0x91, 0x90, 0xe8, 0xed, 0x29, 0xcf, 0x34, 0xdb, 0xd3, 0xd5, 0x74, 0xd7,
0xcc, 0x7a, 0x40, 0x20, 0x10, 0x08, 0x04, 0x8a, 0x04, 0x12, 0x97, 0x3c, 0x02, 0x2f, 0xc2, 0x65,
0x2e, 0xb9, 0x44, 0xf1, 0x8b, 0xa0, 0xee, 0x3a, 0x55, 0xd5, 0x75, 0xba, 0x4e, 0x75, 0x2f, 0x57,
0x81, 0x39, 0xbf, 0xf3, 0x51, 0xdf, 0xe7, 0x54, 0xf5, 0x3a, 0xb8, 0x96, 0x9f, 0xed, 0xe6, 0x05,
0x17, 0xbc, 0xdc, 0x2d, 0x59, 0xb1, 0x4c, 0x62, 0xa6, 0xfe, 0x3b, 0xac, 0x7f, 0x0e, 0x5f, 0x8f,
0xb2, 0x95, 0x58, 0xe5, 0xec, 0xea, 0x3b, 0x86, 0x8c, 0xf9, 0x7c, 0x1e, 0x65, 0x93, 0x52, 0x22,
0x57, 0xaf, 0x18, 0x09, 0x5b, 0xb2, 0x4c, 0xc0, 0xef, 0x77, 0xfe, 0xf9, 0xf9, 0x20, 0x78, 0x6b,
0x3f, 0x4d, 0x58, 0x26, 0xf6, 0x41, 0x23, 0xfc, 0x2c, 0x78, 0x73, 0x94, 0xe7, 0x0f, 0x98, 0xf8,
0x94, 0x15, 0x65, 0xc2, 0xb3, 0xf0, 0x83, 0x21, 0x38, 0x18, 0x9e, 0xe4, 0xf1, 0x70, 0x94, 0xe7,
0x43, 0x23, 0x1c, 0x9e, 0xb0, 0x5f, 0x2c, 0x58, 0x29, 0xae, 0x7e, 0xe8, 0x87, 0xca, 0x9c, 0x67,
0x25, 0x0b, 0x5f, 0x04, 0xdf, 0x18, 0xe5, 0xf9, 0x98, 0x89, 0x03, 0x56, 0x35, 0x60, 0x2c, 0x22,
0xc1, 0xc2, 0x8d, 0x96, 0xaa, 0x0d, 0x68, 0x1f, 0x9b, 0xdd, 0x20, 0xf8, 0x39, 0x0d, 0xde, 0xa8,
0xfc, 0xcc, 0x16, 0x62, 0xc2, 0x2f, 0xb2, 0xf0, 0xfd, 0xb6, 0x22, 0x88, 0xb4, 0xed, 0x1b, 0x3e,
0x04, 0xac, 0x3e, 0x0f, 0xbe, 0xfa, 0x3c, 0x4a, 0x53, 0x26, 0xf6, 0x0b, 0x56, 0x05, 0x6e, 0xeb,
0x48, 0xd1, 0x50, 0xca, 0xb4, 0xdd, 0x0f, 0xbc, 0x0c, 0x18, 0xfe, 0x2c, 0x78, 0x53, 0x4a, 0x4e,
0x58, 0xcc, 0x97, 0xac, 0x08, 0x9d, 0x5a, 0x20, 0x24, 0xba, 0xbc, 0x05, 0x61, 0xdb, 0xfb, 0x3c,
0x5b, 0xb2, 0x42, 0xb8, 0x6d, 0x83, 0xd0, 0x6f, 0xdb, 0x40, 0x60, 0x3b, 0x0d, 0xde, 0x6e, 0x76,
0xc8, 0x98, 0x95, 0xf5, 0x84, 0xd9, 0xa2, 0xdb, 0x0c, 0x88, 0xf6, 0x73, 0xab, 0x0f, 0x0a, 0xde,
0x92, 0x20, 0x04, 0x6f, 0x29, 0x2f, 0xb5, 0xb3, 0x4d, 0xa7, 0x85, 0x06, 0xa1, 0x7d, 0x6d, 0xf5,
0x20, 0xc1, 0xd5, 0xcf, 0x82, 0xaf, 0x3d, 0xe7, 0xc5, 0x79, 0x99, 0x47, 0x31, 0x83, 0xc1, 0xbe,
0x69, 0x6b, 0x2b, 0x29, 0x1e, 0xef, 0xf5, 0x2e, 0x0c, 0x3c, 0x5c, 0x04, 0x57, 0xb4, 0xf0, 0xc9,
0xd9, 0xcf, 0x59, 0x2c, 0x1e, 0x25, 0xa5, 0x18, 0x4d, 0x26, 0xe1, 0x0e, 0x61, 0x41, 0x52, 0x43,
0xc0, 0xb4, 0xc3, 0x61, 0x5f, 0x1c, 0x1c, 0xff, 0x76, 0x10, 0x7c, 0xc7, 0xe1, 0xf9, 0x84, 0xcd,
0xf9, 0x92, 0x85, 0x7b, 0xdd, 0xd6, 0x24, 0xa9, 0xfd, 0x7f, 0x74, 0x09, 0x0d, 0x47, 0xef, 0x8e,
0x59, 0xca, 0x62, 0x41, 0xf6, 0xae, 0x14, 0x77, 0xf6, 0xae, 0xc6, 0x1a, 0x13, 0x53, 0x09, 0x1f,
0x30, 0xb1, 0xbf, 0x28, 0x0a, 0x96, 0x09, 0x3c, 0x31, 0xb5, 0xba, 0x41, 0xa8, 0x89, 0xe9, 0x46,
0x1d, 0xed, 0x79, 0xc0, 0xc4, 0x28, 0x4d, 0xc9, 0xf6, 0x48, 0x71, 0x67, 0x7b, 0x34, 0x06, 0x1e,
0x7e, 0xd3, 0x18, 0xb3, 0x31, 0x13, 0x47, 0xe5, 0xc3, 0x64, 0x3a, 0x4b, 0x93, 0xe9, 0x4c, 0xb0,
0x49, 0xb8, 0x4b, 0x76, 0x8a, 0x0d, 0x6a, 0xaf, 0x7b, 0xfd, 0x15, 0x1c, 0x2d, 0xbc, 0xff, 0x32,
0xe7, 0x05, 0x3d, 0x62, 0x52, 0xdc, 0xd9, 0x42, 0x8d, 0x81, 0x87, 0x9f, 0x06, 0x6f, 0x8d, 0xe2,
0x98, 0x2f, 0x32, 0xbd, 0x07, 0xa2, 0x13, 0x45, 0x0a, 0x5b, 0x9b, 0xe0, 0xcd, 0x0e, 0xca, 0xec,
0x82, 0x20, 0x83, 0xe5, 0xfc, 0x81, 0x53, 0x0f, 0x2d, 0xe6, 0x0f, 0xfd, 0x50, 0xcb, 0xf6, 0x01,
0x4b, 0x19, 0x69, 0x5b, 0x0a, 0x3b, 0x6c, 0x6b, 0xa8, 0x65, 0x1b, 0x16, 0x8a, 0xdb, 0x36, 0x5a,
0x26, 0x1f, 0xfa, 0xa1, 0xc6, 0x21, 0x09, 0xb6, 0x05, 0xcf, 0xf1, 0x21, 0xa9, 0x94, 0x04, 0xcf,
0xa9, 0x43, 0xd2, 0x46, 0x5a, 0x56, 0x8f, 0xab, 0x0d, 0xc5, 0x6d, 0xf5, 0xb8, 0xb9, 0x83, 0xdc,
0xf0, 0x21, 0x66, 0x41, 0xab, 0xf1, 0xe3, 0xd9, 0x8b, 0x64, 0xfa, 0x2c, 0x9f, 0x54, 0xa3, 0xb8,
0xe5, 0x1e, 0xa0, 0x06, 0x42, 0x2c, 0x68, 0x02, 0x05, 0x6f, 0x3f, 0x09, 0x02, 0xb9, 0x7d, 0x3d,
0xc9, 0x59, 0x16, 0x5e, 0xb7, 0x34, 0x61, 0x5f, 0xab, 0x24, 0xda, 0xf6, 0xfb, 0x1e, 0xc2, 0x74,
0x8b, 0xfc, 0xbd, 0x3e, 0x70, 0x42, 0xa7, 0x46, 0x2d, 0x22, 0xba, 0x05, 0x21, 0x38, 0xd0, 0xf1,
0x8c, 0x5f, 0xb8, 0x03, 0xad, 0x24, 0xfe, 0x40, 0x81, 0x30, 0x49, 0x0e, 0x04, 0xea, 0x4a, 0x72,
0x54, 0x18, 0xbe, 0x24, 0x07, 0x33, 0x60, 0x98, 0x07, 0xdf, 0x6c, 0x1a, 0xbe, 0xc7, 0xf9, 0xf9,
0x3c, 0x2a, 0xce, 0xc3, 0x5b, 0xb4, 0xb2, 0x62, 0xb4, 0xa3, 0xed, 0x5e, 0xac, 0xd9, 0xb4, 0x9a,
0x0e, 0xc7, 0x0c, 0x6f, 0x5a, 0x96, 0xfe, 0x98, 0x51, 0x9b, 0x96, 0x03, 0xc3, 0x83, 0xfa, 0xa0,
0x88, 0xf2, 0x99, 0x7b, 0x50, 0x6b, 0x91, 0x7f, 0x50, 0x15, 0x82, 0x47, 0x60, 0xcc, 0xa2, 0x22,
0x9e, 0xb9, 0x47, 0x40, 0xca, 0xfc, 0x23, 0xa0, 0x19, 0x30, 0x5c, 0x04, 0xdf, 0x6a, 0x1a, 0x1e,
0x2f, 0xce, 0xca, 0xb8, 0x48, 0xce, 0x58, 0xb8, 0x4d, 0x6b, 0x6b, 0x48, 0xbb, 0xba, 0xdd, 0x0f,
0x06, 0x9f, 0x7f, 0x1a, 0x04, 0xef, 0x4a, 0xe6, 0x84, 0xa5, 0x91, 0x48, 0x78, 0x26, 0xd1, 0x83,
0xa4, 0x14, 0x49, 0x16, 0x8b, 0xf0, 0x8e, 0xcb, 0x9c, 0x9b, 0xd5, 0x21, 0xdc, 0xbd, 0x94, 0x8e,
0x49, 0x1f, 0xa1, 0xf5, 0x2a, 0xca, 0xa3, 0x49, 0x89, 0xd2, 0x47, 0xd5, 0x9a, 0x06, 0x41, 0xa4,
0x8f, 0x6e, 0x12, 0x5c, 0xbd, 0x0c, 0xbe, 0xdd, 0xec, 0xe8, 0x67, 0x59, 0xa9, 0xbb, 0x7a, 0x87,
0xee, 0xbd, 0x06, 0x46, 0x64, 0x77, 0x1e, 0x1c, 0x3c, 0xc7, 0xc1, 0xd7, 0x95, 0x67, 0x71, 0xc0,
0x44, 0x94, 0xa4, 0x65, 0xb8, 0xee, 0xb6, 0xa1, 0xe4, 0xda, 0xd7, 0x46, 0x27, 0x87, 0x17, 0xd6,
0xc1, 0x22, 0x4f, 0x93, 0xb8, 0x9d, 0x1d, 0x83, 0xae, 0x16, 0xfb, 0x17, 0x56, 0x13, 0x33, 0xdb,
0xbd, 0x6e, 0x86, 0xfc, 0x1f, 0xa7, 0xab, 0x1c, 0x6f, 0xf7, 0x26, 0x42, 0x83, 0x10, 0xdb, 0x3d,
0x81, 0xe2, 0xf6, 0x8c, 0x99, 0x78, 0x14, 0xad, 0xf8, 0x82, 0xd8, 0x28, 0xb4, 0xd8, 0xdf, 0x9e,
0x26, 0x06, 0x1e, 0x16, 0xc1, 0x15, 0xed, 0xe1, 0x28, 0x13, 0xac, 0xc8, 0xa2, 0xf4, 0x30, 0x8d,
0xa6, 0x65, 0x48, 0xac, 0x26, 0x9b, 0xd2, 0xfe, 0x76, 0x7a, 0xd2, 0x8e, 0x6e, 0x3c, 0x2a, 0x0f,
0xa3, 0x25, 0x2f, 0x12, 0x41, 0x77, 0xa3, 0x41, 0x3a, 0xbb, 0xd1, 0x42, 0x9d, 0xde, 0x46, 0x45,
0x3c, 0x4b, 0x96, 0x6c, 0xe2, 0xf1, 0xa6, 0x90, 0x1e, 0xde, 0x1a, 0x28, 0xf6, 0x56, 0x55, 0x18,
0x66, 0x22, 0x3a, 0xbd, 0x59, 0x88, 0xdf, 0x1b, 0x46, 0xf1, 0xba, 0xaa, 0xe5, 0x32, 0xcd, 0x5b,
0x27, 0xf5, 0xed, 0x4c, 0x6f, 0xa3, 0x93, 0xc3, 0xdb, 0x46, 0x25, 0xb4, 0x3b, 0x71, 0x87, 0xb2,
0xe1, 0xee, 0xc8, 0x61, 0x5f, 0x9c, 0xf4, 0xac, 0x27, 0x8b, 0xdf, 0x73, 0x6b, 0xc2, 0x0c, 0xfb,
0xe2, 0x78, 0x18, 0x47, 0x79, 0x9e, 0xae, 0x4e, 0xd9, 0x3c, 0x4f, 0xc9, 0x61, 0xb4, 0x10, 0xff,
0x30, 0x62, 0x14, 0x1f, 0xd8, 0xa7, 0xbc, 0x4a, 0x07, 0x9c, 0x07, 0x76, 0x2d, 0xf2, 0x1f, 0xd8,
0x0a, 0xc1, 0xe7, 0xea, 0x68, 0x32, 0x79, 0x9e, 0x88, 0x99, 0xfc, 0x3f, 0x47, 0x13, 0xf7, 0xb9,
0x8a, 0x20, 0xff, 0xb9, 0xda, 0x86, 0xcd, 0x4d, 0x9a, 0xca, 0xfc, 0xa2, 0x82, 0xdd, 0x5b, 0x3d,
0x4a, 0xb2, 0xf3, 0xd0, 0xbd, 0x83, 0x1b, 0x80, 0xb8, 0x49, 0x73, 0x82, 0xb8, 0x6d, 0x55, 0x3a,
0x7b, 0xaf, 0x60, 0xd1, 0x24, 0x2e, 0x16, 0xf3, 0xb3, 0xd2, 0xdd, 0x36, 0x04, 0xf9, 0xdb, 0xd6,
0x86, 0x71, 0xa6, 0x38, 0x66, 0xa2, 0xe9, 0x92, 0xda, 0x1e, 0x5c, 0x1e, 0xb7, 0x7b, 0xb1, 0x38,
0x8d, 0x7e, 0x96, 0x4d, 0xb8, 0x3b, 0x8d, 0xae, 0x24, 0xfe, 0x34, 0x1a, 0x08, 0x6c, 0xf2, 0x84,
0x51, 0x26, 0x2b, 0x89, 0xdf, 0x24, 0x10, 0xb8, 0x5b, 0x8e, 0xe6, 0x55, 0xed, 0x7c, 0x1c, 0x15,
0xe7, 0xf5, 0xed, 0xa6, 0xb3, 0x5b, 0x6c, 0xc6, 0xdf, 0x2d, 0x2d, 0xd6, 0xb5, 0xe9, 0x41, 0xd9,
0x4f, 0x6e, 0x7a, 0xa8, 0xee, 0xdf, 0xe8, 0xe4, 0xf0, 0x06, 0xa0, 0x12, 0xf8, 0x43, 0x26, 0xe2,
0x99, 0x7b, 0x03, 0xb0, 0x10, 0xff, 0x06, 0x80, 0x51, 0xdc, 0xa4, 0x53, 0xae, 0x0b, 0x90, 0x75,
0xf7, 0x12, 0x6f, 0x15, 0x1f, 0x1b, 0x9d, 0x1c, 0x4e, 0xe0, 0x65, 0xc7, 0xba, 0x13, 0x78, 0x29,
0xf3, 0x27, 0xf0, 0x9a, 0xc1, 0xd1, 0x4b, 0x41, 0xd5, 0x9d, 0xee, 0xe8, 0x8d, 0xdc, 0x1f, 0xbd,
0xc5, 0xb9, 0xeb, 0x34, 0x95, 0x56, 0xfb, 0xea, 0x34, 0xc5, 0xf4, 0xa9, 0xd3, 0x1a, 0x2c, 0x38,
0xfc, 0xdd, 0x20, 0xb8, 0xea, 0xf2, 0xf8, 0x24, 0xaf, 0xfd, 0xee, 0x75, 0xdb, 0x92, 0x24, 0x71,
0x25, 0xe9, 0xd7, 0x80, 0x18, 0x7e, 0x15, 0xbc, 0xa3, 0x44, 0xe6, 0xc6, 0x12, 0x02, 0xb0, 0x8f,
0x34, 0x1d, 0x3f, 0xe6, 0xb4, 0xfb, 0xdd, 0xde, 0xbc, 0xc9, 0x3f, 0xed, 0xb8, 0x4a, 0x94, 0x7f,
0x6a, 0x1b, 0x20, 0x26, 0xf2, 0x4f, 0x07, 0x86, 0x4f, 0x0b, 0x85, 0x8c, 0x26, 0x13, 0xe7, 0x69,
0xa1, 0x4d, 0x34, 0xaf, 0x98, 0x37, 0xbb, 0x41, 0x3c, 0x77, 0x94, 0x18, 0x52, 0xa5, 0x5b, 0x3e,
0x0b, 0x28, 0x5d, 0xda, 0xee, 0xc5, 0x9a, 0x8b, 0xd1, 0x56, 0xc3, 0x0e, 0x59, 0x24, 0x16, 0x45,
0xeb, 0x62, 0xb4, 0x1d, 0xb7, 0x02, 0x89, 0x8b, 0x51, 0xaf, 0x02, 0x59, 0xde, 0xca, 0x21, 0xd6,
0x31, 0xdc, 0xf1, 0x99, 0xb4, 0x59, 0x6f, 0x79, 0x4b, 0xeb, 0x40, 0x24, 0x7f, 0x18, 0x04, 0xdf,
0xb5, 0xd1, 0xfa, 0xea, 0x7f, 0x19, 0x25, 0x69, 0x74, 0x96, 0xb2, 0xf0, 0x23, 0x9f, 0x51, 0x0b,
0xd5, 0x71, 0xdc, 0xb9, 0x8c, 0x0a, 0xae, 0x74, 0xe4, 0x7a, 0x6b, 0x14, 0x6f, 0xb7, 0xe9, 0x55,
0xe9, 0xa8, 0xdf, 0x76, 0x7a, 0xd2, 0xe6, 0x39, 0xc5, 0xfc, 0xdc, 0xec, 0x00, 0x67, 0xfe, 0x0a,
0xba, 0x8d, 0x96, 0x78, 0xf3, 0x57, 0x27, 0x0e, 0x8e, 0x85, 0xca, 0x8f, 0x9a, 0x8e, 0xab, 0xd5,
0x75, 0xbb, 0xd3, 0x50, 0x73, 0x89, 0xed, 0xf4, 0xa4, 0xc1, 0xeb, 0xaf, 0x83, 0x77, 0xda, 0x5e,
0xe1, 0x09, 0x67, 0xb7, 0xd3, 0x14, 0x7a, 0xc1, 0xd9, 0xeb, 0xaf, 0x60, 0xae, 0x52, 0x1e, 0x26,
0xa5, 0xe0, 0xc5, 0x6a, 0x3c, 0xe3, 0x17, 0xea, 0x9d, 0xd8, 0xde, 0x26, 0x00, 0x18, 0x36, 0x08,
0xe2, 0x2a, 0xc5, 0x4d, 0xb6, 0x5c, 0x99, 0xf7, 0xe4, 0x92, 0x70, 0xd5, 0x20, 0x3a, 0x5c, 0xd9,
0xa4, 0xd9, 0x24, 0x55, 0xab, 0xcc, 0xe3, 0xf7, 0x86, 0x3b, 0xd4, 0xf6, 0x03, 0xf8, 0x66, 0x37,
0x68, 0x8a, 0x90, 0xc3, 0x24, 0x65, 0x4f, 0x5e, 0xbc, 0x48, 0x79, 0x34, 0x41, 0x45, 0x48, 0x25,
0x19, 0x82, 0x88, 0x28, 0x42, 0x10, 0x62, 0x0e, 0x91, 0x4a, 0x50, 0xcd, 0x4e, 0x65, 0xf9, 0x66,
0x5b, 0xad, 0x21, 0x26, 0x0e, 0x11, 0x07, 0x66, 0x52, 0xda, 0x4a, 0xf8, 0x2c, 0xaf, 0x8d, 0x5f,
0x6f, 0x6b, 0x49, 0x09, 0x91, 0xd2, 0xda, 0x84, 0xc9, 0x94, 0xaa, 0xdf, 0x0f, 0xf8, 0x45, 0x56,
0x1b, 0x75, 0x34, 0x54, 0xc9, 0x88, 0x4c, 0x09, 0x33, 0x60, 0xf8, 0x93, 0xe0, 0xff, 0x6b, 0xc3,
0x05, 0xcf, 0xc3, 0x35, 0x87, 0x42, 0xd1, 0x78, 0xd5, 0xb8, 0x46, 0xca, 0x4d, 0x0d, 0xf4, 0x38,
0x5a, 0x26, 0x53, 0xbd, 0xa9, 0xc8, 0x35, 0x82, 0x6b, 0x20, 0xc3, 0x0c, 0x1b, 0x10, 0x51, 0x03,
0x91, 0x30, 0xf8, 0xfc, 0xfb, 0x20, 0xb8, 0x6e, 0x98, 0x07, 0xea, 0xe2, 0xea, 0x28, 0x7b, 0xc1,
0xab, 0x82, 0xb0, 0x2a, 0xd2, 0xca, 0xf0, 0x63, 0xca, 0xa4, 0x9b, 0xd7, 0xa1, 0xfc, 0xe0, 0xd2,
0x7a, 0x26, 0x4d, 0x52, 0x45, 0xb5, 0xdc, 0x8b, 0x0f, 0x0b, 0x3e, 0x97, 0x1a, 0x28, 0x4d, 0xd2,
0xb5, 0x37, 0xe6, 0x88, 0x34, 0xc9, 0xc7, 0x37, 0xce, 0x5a, 0xca, 0x7b, 0x7d, 0xc2, 0xdc, 0xe9,
0x67, 0xd1, 0x3a, 0x67, 0xee, 0x5e, 0x4a, 0xc7, 0xbc, 0xca, 0xe9, 0x40, 0x52, 0x9e, 0xe1, 0x17,
0x3f, 0x63, 0xa5, 0x12, 0x12, 0xaf, 0x72, 0x2d, 0xc8, 0xec, 0x42, 0x4a, 0x24, 0x4b, 0xa5, 0x51,
0x9a, 0xa2, 0x5d, 0x48, 0xab, 0x6a, 0x80, 0xd8, 0x85, 0x9c, 0x20, 0xf8, 0x39, 0x09, 0xde, 0xa8,
0x06, 0xf7, 0x69, 0xc1, 0x96, 0x09, 0xc3, 0x6f, 0x47, 0x0d, 0x09, 0xb1, 0x9c, 0x6d, 0xc2, 0x3c,
0xe2, 0x3e, 0xcb, 0xca, 0x3c, 0x8d, 0xca, 0x19, 0xbc, 0x5d, 0xd8, 0x6d, 0x56, 0x42, 0xfc, 0x7a,
0x71, 0xb3, 0x83, 0x32, 0xe5, 0x8f, 0x92, 0xe9, 0x1d, 0x63, 0xdd, 0xad, 0xda, 0xda, 0x35, 0x36,
0x3a, 0x39, 0xb3, 0x3b, 0xdf, 0x4b, 0x79, 0x7c, 0x0e, 0xdb, 0x9c, 0xdd, 0xea, 0x5a, 0x82, 0xf7,
0xb9, 0x1b, 0x3e, 0xc4, 0x6c, 0x74, 0xb5, 0xe0, 0x84, 0xe5, 0x69, 0x14, 0xe3, 0x57, 0x35, 0xa9,
0x03, 0x32, 0x62, 0xa3, 0xc3, 0x0c, 0x0a, 0x17, 0x5e, 0xeb, 0x5c, 0xe1, 0xa2, 0xc7, 0xba, 0x1b,
0x3e, 0xc4, 0x6c, 0xf5, 0xb5, 0x60, 0x9c, 0xa7, 0x89, 0x40, 0x73, 0x43, 0x6a, 0xd4, 0x12, 0x62,
0x6e, 0xd8, 0x04, 0x32, 0x79, 0xcc, 0x8a, 0x29, 0x73, 0x9a, 0xac, 0x25, 0x5e, 0x93, 0x8a, 0x00,
0x93, 0x8f, 0x83, 0xaf, 0xc8, 0xb6, 0xf3, 0x7c, 0x15, 0x5e, 0x73, 0x35, 0x8b, 0xe7, 0x2b, 0x6d,
0xf0, 0x3a, 0x0d, 0xa0, 0x10, 0x9f, 0x46, 0xa5, 0x70, 0x87, 0x58, 0x4b, 0xbc, 0x21, 0x2a, 0xc2,
0x9c, 0x43, 0x32, 0xc4, 0x85, 0x40, 0xe7, 0x10, 0x04, 0xd0, 0x78, 0x4c, 0xb8, 0x46, 0xca, 0xcd,
0xf2, 0x92, 0xa3, 0xc2, 0xc4, 0x61, 0xc2, 0xd2, 0x49, 0x89, 0x96, 0x17, 0xf4, 0xbb, 0x92, 0x12,
0xcb, 0xab, 0x4d, 0xa1, 0xa9, 0x04, 0x37, 0x3d, 0xae, 0xd6, 0xa1, 0x4b, 0x9e, 0x1b, 0x3e, 0xc4,
0xe4, 0x25, 0xb5, 0xa0, 0x71, 0x71, 0xee, 0x8a, 0xc7, 0x71, 0x6f, 0xbe, 0xde, 0x85, 0x81, 0x87,
0xbf, 0x0c, 0x82, 0xf7, 0xb4, 0x8b, 0x63, 0xbe, 0x64, 0xa7, 0xfc, 0xfe, 0xcb, 0xfa, 0xf9, 0x6f,
0x0a, 0x47, 0xd3, 0x5d, 0xc2, 0x92, 0x0b, 0xd6, 0xee, 0xbf, 0x77, 0x39, 0x25, 0x73, 0x42, 0xa2,
0x58, 0x1e, 0xb3, 0x0b, 0xe7, 0x09, 0x89, 0x2d, 0x6a, 0x8e, 0x38, 0x21, 0x7d, 0xbc, 0xa9, 0x86,
0xb5, 0x73, 0xf8, 0x58, 0xef, 0x94, 0xab, 0x64, 0x85, 0xb2, 0x86, 0x41, 0xa2, 0x2e, 0xf0, 0x2a,
0x98, 0x64, 0x5d, 0xfb, 0x37, 0x93, 0x74, 0x93, 0xb0, 0xd3, 0x9e, 0xa8, 0x5b, 0x3d, 0x48, 0x87,
0x2b, 0xf3, 0xfa, 0x43, 0xb9, 0x6a, 0x3f, 0xfe, 0x6c, 0xf5, 0x20, 0x1b, 0x95, 0x75, 0xb3, 0x59,
0xf7, 0xa2, 0xf8, 0x7c, 0x5a, 0xf0, 0x45, 0x36, 0xd9, 0xe7, 0x29, 0x2f, 0x50, 0x65, 0x6d, 0x45,
0x8d, 0x50, 0xa2, 0xb2, 0xee, 0x50, 0x31, 0x89, 0x41, 0x33, 0x8a, 0x51, 0x9a, 0x4c, 0x71, 0x79,
0x62, 0x19, 0xaa, 0x01, 0x22, 0x31, 0x70, 0x82, 0x8e, 0x49, 0x24, 0xcb, 0x17, 0x91, 0xc4, 0x51,
0x2a, 0xfd, 0xed, 0xd2, 0x66, 0x2c, 0xb0, 0x73, 0x12, 0x39, 0x14, 0x1c, 0xed, 0x3c, 0x5d, 0x14,
0xd9, 0x51, 0x26, 0x38, 0xd9, 0x4e, 0x05, 0x74, 0xb6, 0xb3, 0x01, 0x9a, 0x6c, 0xa2, 0x16, 0x9f,
0xb2, 0x97, 0x55, 0x34, 0xd5, 0x7f, 0x42, 0xc7, 0x96, 0x53, 0xfd, 0x3e, 0x04, 0x39, 0x91, 0x4d,
0xb8, 0x38, 0xd4, 0x18, 0x70, 0x22, 0x27, 0x8c, 0x47, 0xdb, 0x9e, 0x26, 0x9b, 0xdd, 0xa0, 0xdb,
0xcf, 0x58, 0xac, 0x52, 0xe6, 0xf3, 0x53, 0x03, 0x7d, 0xfc, 0x28, 0xd0, 0xdc, 0xd6, 0x5b, 0xed,
0x99, 0xb1, 0xf8, 0xbc, 0xf5, 0xc6, 0x6b, 0x07, 0x2a, 0x11, 0xe2, 0xb6, 0x9e, 0x40, 0xdd, 0x43,
0x74, 0x14, 0xf3, 0xcc, 0x37, 0x44, 0x95, 0xbc, 0xcf, 0x10, 0x01, 0x67, 0xaa, 0x3b, 0x2d, 0x85,
0x99, 0x29, 0x87, 0x69, 0x9b, 0xb0, 0xd0, 0x84, 0x88, 0xea, 0x8e, 0x84, 0xcd, 0x3d, 0x29, 0xf6,
0x79, 0xdc, 0xfe, 0x16, 0xaa, 0x65, 0xe5, 0x98, 0xfe, 0x16, 0x8a, 0x62, 0xe9, 0x46, 0xca, 0x39,
0xd2, 0x61, 0xc5, 0x9e, 0x27, 0xb7, 0xfb, 0xc1, 0xe6, 0x51, 0xd9, 0xf2, 0xb9, 0x9f, 0xb2, 0xa8,
0x90, 0x5e, 0x77, 0x3c, 0x86, 0x0c, 0x46, 0x5c, 0xca, 0x79, 0x70, 0xb4, 0x85, 0x59, 0x9e, 0xf7,
0x79, 0x26, 0x58, 0x26, 0x5c, 0x5b, 0x98, 0x6d, 0x0c, 0x40, 0xdf, 0x16, 0x46, 0x29, 0xa0, 0x79,
0x7b, 0x98, 0xa4, 0x6c, 0xcc, 0xc4, 0xe3, 0x68, 0xce, 0x5c, 0xf3, 0xb6, 0xbe, 0x6a, 0x00, 0xb9,
0x6f, 0xde, 0x22, 0x0e, 0x2d, 0xf9, 0xa3, 0x79, 0x34, 0xd5, 0x5e, 0x1c, 0xda, 0xb5, 0xbc, 0xe5,
0x66, 0xb3, 0x1b, 0x44, 0x7e, 0x3e, 0x4d, 0x26, 0x8c, 0x7b, 0xfc, 0xd4, 0xf2, 0x3e, 0x7e, 0x30,
0x88, 0x32, 0xa7, 0xaa, 0xb5, 0xb2, 0x1e, 0x19, 0x65, 0x13, 0xa8, 0xc2, 0x86, 0x44, 0xa7, 0x20,
0xce, 0x97, 0x39, 0x11, 0x3c, 0x5a, 0x1f, 0xea, 0x0a, 0xcd, 0xb7, 0x3e, 0xf4, 0x0d, 0x59, 0x9f,
0xf5, 0xe1, 0x82, 0xc1, 0xe7, 0x2f, 0x61, 0x7d, 0x1c, 0x44, 0x22, 0xaa, 0xea, 0xe8, 0x4f, 0x13,
0x76, 0x01, 0x65, 0x9c, 0xa3, 0xbd, 0x8a, 0x1a, 0x56, 0x18, 0xae, 0xe9, 0x76, 0x7b, 0xf3, 0x1e,
0xdf, 0x90, 0x9d, 0x77, 0xfa, 0x46, 0x69, 0xfa, 0x6e, 0x6f, 0xde, 0xe3, 0x1b, 0xbe, 0xe7, 0xed,
0xf4, 0x8d, 0x3e, 0xea, 0xdd, 0xed, 0xcd, 0x83, 0xef, 0xdf, 0x0f, 0x82, 0xab, 0x2d, 0xe7, 0x55,
0x0e, 0x14, 0x8b, 0x64, 0xc9, 0x5c, 0xa9, 0x9c, 0x6d, 0x4f, 0xa3, 0xbe, 0x54, 0x8e, 0x56, 0x81,
0x28, 0xfe, 0x3c, 0x08, 0xde, 0x75, 0x45, 0xf1, 0x94, 0x97, 0x49, 0xfd, 0xe4, 0x78, 0xb7, 0x87,
0x51, 0x05, 0xfb, 0x0a, 0x16, 0x9f, 0x92, 0x79, 0xb0, 0xb1, 0xd0, 0x6a, 0x9e, 0xf2, 0x45, 0x11,
0xe3, 0x07, 0x1b, 0xdb, 0x9e, 0xa6, 0x88, 0x17, 0x0c, 0x9a, 0x36, 0x2f, 0x18, 0x16, 0xd3, 0x7c,
0x3a, 0xf1, 0x8d, 0xaa, 0xf3, 0xf5, 0x64, 0xaf, 0xbf, 0x02, 0xb8, 0xff, 0xa3, 0xca, 0xe9, 0xb1,
0x7f, 0x58, 0x04, 0x77, 0xfa, 0x58, 0x44, 0x0b, 0xe1, 0xee, 0xa5, 0x74, 0x20, 0x90, 0x7f, 0x0c,
0x82, 0x1b, 0xce, 0x40, 0xec, 0xd7, 0xbb, 0x1f, 0xf6, 0xb1, 0xed, 0x7e, 0xc5, 0xfb, 0xd1, 0xff,
0xa2, 0x0a, 0xd1, 0x7d, 0xae, 0x4a, 0x6b, 0xa5, 0xf1, 0xa0, 0xe0, 0x8b, 0xfc, 0x49, 0x31, 0x61,
0x05, 0xac, 0x58, 0xdf, 0xa4, 0x33, 0x30, 0x5e, 0xb7, 0xdf, 0xbf, 0xa4, 0x16, 0x84, 0xf3, 0xd7,
0x41, 0xb0, 0x66, 0xc1, 0xf0, 0x69, 0x52, 0x23, 0x1e, 0x9f, 0xe5, 0x06, 0x8d, 0x03, 0xfa, 0xf8,
0xb2, 0x6a, 0x38, 0x43, 0xad, 0xfa, 0x0d, 0x36, 0x6f, 0x57, 0x86, 0x5a, 0x77, 0x2b, 0xda, 0xb4,
0x37, 0x3a, 0x39, 0x97, 0x93, 0xfb, 0x2f, 0xf3, 0x28, 0x9b, 0xd0, 0x4e, 0xa4, 0xbc, 0xdb, 0x89,
0xe6, 0x70, 0x66, 0x5f, 0x49, 0x4f, 0xb8, 0x3a, 0x89, 0xb6, 0x28, 0x7d, 0x8d, 0x78, 0x33, 0xfb,
0x16, 0x4a, 0x78, 0x83, 0x65, 0xe7, 0xf3, 0x86, 0x56, 0xdb, 0xad, 0x3e, 0x28, 0xda, 0xe3, 0xb4,
0x37, 0x7d, 0x61, 0x70, 0xdb, 0x67, 0xa5, 0x75, 0x69, 0xb0, 0xd3, 0x93, 0x26, 0xdc, 0x8e, 0x99,
0x78, 0xc8, 0xa2, 0x09, 0x2b, 0xbc, 0x6e, 0x35, 0xd5, 0xcb, 0x6d, 0x93, 0x76, 0xb9, 0xdd, 0xe7,
0xe9, 0x62, 0x9e, 0xc1, 0x60, 0x92, 0x6e, 0x9b, 0x54, 0xb7, 0x5b, 0x44, 0xe3, 0x9a, 0xc6, 0xb8,
0xad, 0xff, 0x02, 0xe8, 0x96, 0xdf, 0x8c, 0xf5, 0xa7, 0x40, 0xdb, 0xbd, 0x58, 0xba, 0x9d, 0x30,
0x8d, 0x3a, 0xda, 0x89, 0x66, 0xd2, 0x4e, 0x4f, 0x1a, 0x17, 0x17, 0x0d, 0xb7, 0x7a, 0x3e, 0xed,
0x76, 0xd8, 0x6a, 0x4d, 0xa9, 0xbd, 0xfe, 0x0a, 0xb8, 0x94, 0x83, 0x59, 0x55, 0x6d, 0xdd, 0x87,
0x49, 0x9a, 0x86, 0xdb, 0x9e, 0x69, 0xa2, 0x20, 0x6f, 0x29, 0xe7, 0x80, 0x89, 0x99, 0xac, 0x4a,
0x9f, 0x2c, 0xec, 0xb2, 0x53, 0x53, 0xbd, 0x66, 0x72, 0x93, 0x46, 0x25, 0x41, 0xa3, 0xab, 0x75,
0x6b, 0x87, 0xfe, 0x8e, 0x6b, 0x35, 0x78, 0xb7, 0x37, 0x8f, 0x6e, 0xdb, 0x6b, 0x6a, 0xcc, 0x0b,
0xe1, 0xba, 0x6d, 0x97, 0x26, 0xc6, 0xcd, 0x4b, 0xf1, 0x9b, 0x1d, 0x54, 0xeb, 0x9a, 0x2d, 0x83,
0xc7, 0x1b, 0xf3, 0xa1, 0xaf, 0x6b, 0x1a, 0xd5, 0x9f, 0xe5, 0x62, 0xd0, 0x37, 0x8d, 0x28, 0x85,
0xc6, 0x57, 0x77, 0x9a, 0x53, 0x37, 0x81, 0x79, 0xce, 0xa2, 0x22, 0xca, 0x62, 0xfc, 0x87, 0xc0,
0xc6, 0x60, 0x8b, 0x24, 0xbe, 0xba, 0xf3, 0x6b, 0xa0, 0x4b, 0x5c, 0xfb, 0xd3, 0x4f, 0x47, 0xc9,
0xa8, 0xbf, 0xb1, 0xb4, 0xbf, 0xfc, 0xdc, 0xea, 0x41, 0xe2, 0x4b, 0x5c, 0x05, 0xe8, 0x52, 0x50,
0x3a, 0xfd, 0xc8, 0x63, 0xca, 0x46, 0x7d, 0x99, 0x3f, 0xad, 0x82, 0xce, 0x3d, 0xf3, 0xc7, 0x4a,
0xe2, 0x13, 0xb6, 0x72, 0x9d, 0x7b, 0x3a, 0x35, 0x93, 0x88, 0xef, 0xdc, 0x6b, 0xa3, 0x28, 0x71,
0x68, 0x26, 0xd7, 0xeb, 0x1e, 0xfd, 0x66, 0x4e, 0xbd, 0xd1, 0xc9, 0xa1, 0x7d, 0xff, 0x20, 0x59,
0x5a, 0x95, 0xb3, 0x23, 0xd0, 0x83, 0x64, 0xe9, 0x2e, 0x9c, 0xb7, 0x7b, 0xb1, 0xf8, 0x82, 0x38,
0x12, 0xec, 0xa5, 0xba, 0xb9, 0x75, 0x84, 0x5b, 0xcb, 0x5b, 0x57, 0xb7, 0x9b, 0xdd, 0xa0, 0x79,
0xe5, 0x7f, 0x5a, 0xf0, 0x98, 0x95, 0xe5, 0x7e, 0x35, 0x6d, 0x53, 0xf4, 0xca, 0x0f, 0xb2, 0xa1,
0x14, 0x12, 0xaf, 0xfc, 0x2d, 0x08, 0x6c, 0x3f, 0x0c, 0x5e, 0x7f, 0xc4, 0xa7, 0x63, 0x96, 0x4d,
0xc2, 0xf7, 0xec, 0x77, 0x75, 0x3e, 0x1d, 0x56, 0x3f, 0x6b, 0x7b, 0x6b, 0x94, 0xd8, 0x3c, 0x82,
0x1e, 0xb0, 0xb3, 0xc5, 0x74, 0xbc, 0xca, 0x62, 0xf4, 0x08, 0x5a, 0xff, 0x3e, 0xac, 0x04, 0xc4,
0x23, 0xa8, 0x05, 0x98, 0x57, 0xc0, 0xfa, 0xe7, 0xd3, 0x59, 0xc1, 0x5a, 0xef, 0xdf, 0x52, 0x41,
0x8a, 0x88, 0x57, 0x40, 0x84, 0xa0, 0x28, 0x4f, 0x0b, 0xc6, 0x9c, 0x51, 0x56, 0x02, 0x6f, 0x94,
0x00, 0x98, 0x43, 0xb0, 0xfe, 0x59, 0xbe, 0x36, 0x3e, 0xe2, 0x71, 0x94, 0x96, 0x82, 0x17, 0xf8,
0xbe, 0x46, 0xaa, 0x62, 0x88, 0x38, 0x04, 0x49, 0x18, 0xb5, 0xe1, 0x69, 0x92, 0x4d, 0x9d, 0x6d,
0xa8, 0x04, 0xde, 0x36, 0x00, 0x60, 0x16, 0xce, 0x31, 0x13, 0x45, 0x12, 0x97, 0x55, 0x61, 0x1e,
0x15, 0xd1, 0x9c, 0x09, 0x56, 0xe0, 0x3f, 0x73, 0x00, 0x64, 0x68, 0x31, 0xc4, 0xc2, 0xa1, 0x58,
0x70, 0xf8, 0xe3, 0xe0, 0xed, 0x6a, 0x45, 0xb1, 0x0c, 0xfe, 0xbd, 0x8b, 0xfb, 0xf5, 0x3f, 0x05,
0x13, 0x5e, 0xd1, 0x36, 0xc6, 0xa2, 0x60, 0xd1, 0x5c, 0xd9, 0x7e, 0x4b, 0xff, 0x5e, 0x83, 0x7b,
0x83, 0x7b, 0xef, 0xff, 0xeb, 0xcb, 0xb5, 0xc1, 0x17, 0x5f, 0xae, 0x0d, 0xfe, 0xf3, 0xe5, 0xda,
0xe0, 0x6f, 0xaf, 0xd6, 0x5e, 0xfb, 0xe2, 0xd5, 0xda, 0x6b, 0xff, 0x7e, 0xb5, 0xf6, 0xda, 0x67,
0xaf, 0xc3, 0x3f, 0x49, 0x73, 0xf6, 0x7f, 0xf5, 0x3f, 0x2c, 0x73, 0xf7, 0xbf, 0x01, 0x00, 0x00,
0xff, 0xff, 0xdc, 0x53, 0x3d, 0x0a, 0xb6, 0x46, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -255,6 +258,8 @@ type ClientCommandsClient interface {
// Workspace
// ***
WorkspaceCreate(ctx context.Context, in *pb.RpcWorkspaceCreateRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceCreateResponse, error)
WorkspaceObjectListAdd(ctx context.Context, in *pb.RpcWorkspaceObjectListAddRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceObjectListAddResponse, error)
WorkspaceObjectListRemove(ctx context.Context, in *pb.RpcWorkspaceObjectListRemoveRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceObjectListRemoveResponse, error)
WorkspaceSelect(ctx context.Context, in *pb.RpcWorkspaceSelectRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceSelectResponse, error)
WorkspaceGetCurrent(ctx context.Context, in *pb.RpcWorkspaceGetCurrentRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceGetCurrentResponse, error)
WorkspaceGetAll(ctx context.Context, in *pb.RpcWorkspaceGetAllRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceGetAllResponse, error)
@ -533,6 +538,24 @@ func (c *clientCommandsClient) WorkspaceCreate(ctx context.Context, in *pb.RpcWo
return out, nil
}
func (c *clientCommandsClient) WorkspaceObjectListAdd(ctx context.Context, in *pb.RpcWorkspaceObjectListAddRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceObjectListAddResponse, error) {
out := new(pb.RpcWorkspaceObjectListAddResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/WorkspaceObjectListAdd", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *clientCommandsClient) WorkspaceObjectListRemove(ctx context.Context, in *pb.RpcWorkspaceObjectListRemoveRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceObjectListRemoveResponse, error) {
out := new(pb.RpcWorkspaceObjectListRemoveResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/WorkspaceObjectListRemove", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *clientCommandsClient) WorkspaceSelect(ctx context.Context, in *pb.RpcWorkspaceSelectRequest, opts ...grpc.CallOption) (*pb.RpcWorkspaceSelectResponse, error) {
out := new(pb.RpcWorkspaceSelectResponse)
err := c.cc.Invoke(ctx, "/anytype.ClientCommands/WorkspaceSelect", in, out, opts...)
@ -1975,6 +1998,8 @@ type ClientCommandsServer interface {
// Workspace
// ***
WorkspaceCreate(context.Context, *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse
WorkspaceObjectListAdd(context.Context, *pb.RpcWorkspaceObjectListAddRequest) *pb.RpcWorkspaceObjectListAddResponse
WorkspaceObjectListRemove(context.Context, *pb.RpcWorkspaceObjectListRemoveRequest) *pb.RpcWorkspaceObjectListRemoveResponse
WorkspaceSelect(context.Context, *pb.RpcWorkspaceSelectRequest) *pb.RpcWorkspaceSelectResponse
WorkspaceGetCurrent(context.Context, *pb.RpcWorkspaceGetCurrentRequest) *pb.RpcWorkspaceGetCurrentResponse
WorkspaceGetAll(context.Context, *pb.RpcWorkspaceGetAllRequest) *pb.RpcWorkspaceGetAllResponse
@ -2195,6 +2220,12 @@ func (*UnimplementedClientCommandsServer) WalletCloseSession(ctx context.Context
func (*UnimplementedClientCommandsServer) WorkspaceCreate(ctx context.Context, req *pb.RpcWorkspaceCreateRequest) *pb.RpcWorkspaceCreateResponse {
return nil
}
func (*UnimplementedClientCommandsServer) WorkspaceObjectListAdd(ctx context.Context, req *pb.RpcWorkspaceObjectListAddRequest) *pb.RpcWorkspaceObjectListAddResponse {
return nil
}
func (*UnimplementedClientCommandsServer) WorkspaceObjectListRemove(ctx context.Context, req *pb.RpcWorkspaceObjectListRemoveRequest) *pb.RpcWorkspaceObjectListRemoveResponse {
return nil
}
func (*UnimplementedClientCommandsServer) WorkspaceSelect(ctx context.Context, req *pb.RpcWorkspaceSelectRequest) *pb.RpcWorkspaceSelectResponse {
return nil
}
@ -2830,6 +2861,42 @@ func _ClientCommands_WorkspaceCreate_Handler(srv interface{}, ctx context.Contex
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_WorkspaceObjectListAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcWorkspaceObjectListAddRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ClientCommandsServer).WorkspaceObjectListAdd(ctx, in), nil
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/anytype.ClientCommands/WorkspaceObjectListAdd",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ClientCommandsServer).WorkspaceObjectListAdd(ctx, req.(*pb.RpcWorkspaceObjectListAddRequest)), nil
}
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_WorkspaceObjectListRemove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcWorkspaceObjectListRemoveRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ClientCommandsServer).WorkspaceObjectListRemove(ctx, in), nil
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/anytype.ClientCommands/WorkspaceObjectListRemove",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ClientCommandsServer).WorkspaceObjectListRemove(ctx, req.(*pb.RpcWorkspaceObjectListRemoveRequest)), nil
}
return interceptor(ctx, in, info, handler)
}
func _ClientCommands_WorkspaceSelect_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(pb.RpcWorkspaceSelectRequest)
if err := dec(in); err != nil {
@ -5682,6 +5749,14 @@ var _ClientCommands_serviceDesc = grpc.ServiceDesc{
MethodName: "WorkspaceCreate",
Handler: _ClientCommands_WorkspaceCreate_Handler,
},
{
MethodName: "WorkspaceObjectListAdd",
Handler: _ClientCommands_WorkspaceObjectListAdd_Handler,
},
{
MethodName: "WorkspaceObjectListRemove",
Handler: _ClientCommands_WorkspaceObjectListRemove_Handler,
},
{
MethodName: "WorkspaceSelect",
Handler: _ClientCommands_WorkspaceSelect_Handler,

View file

@ -4,7 +4,9 @@ import (
"crypto/sha256"
"encoding/json"
"fmt"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/localstore/addr"
"github.com/anytypeio/go-anytype-middleware/util/slice"
"io/ioutil"
"log"
"os"
@ -168,6 +170,19 @@ func generateTypes() error {
return err
}
for i, t := range types {
types[i].Relations = slice.Filter(t.Relations, func(s string) bool {
for _, r := range bundle.RequiredInternalRelations {
if s == r.String() {
return false
}
}
return true
})
}
b, _ = json.Marshal(types)
ioutil.WriteFile("pkg/lib/bundle/types.json", b, 0755)
f := NewFile("bundle")
f.PackageComment("Code generated by pkg/lib/bundle/generator. DO NOT EDIT.\nsource: pkg/lib/bundle/types.json")
f.ImportName(relPbPkg, "model")

View file

@ -6,7 +6,7 @@ package bundle
import "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
const RelationChecksum = "7fbd46473909c01de3b49e01682e922a02946dd49695034725a55584c0e49631"
const RelationChecksum = "eaa11fe5ca522636918109cc4afd1a945c5cad5667ba8dfeb1045837a42084c5"
type RelationKey string
@ -2333,7 +2333,6 @@ var (
DataSource: model.Relation_derived,
Description: "Relation that stores the object's type",
Format: model.RelationFormat_object,
Hidden: true,
Id: "_brtype",
Key: "type",
MaxCount: 1,

View file

@ -1186,7 +1186,7 @@
{
"description": "Relation that stores the object's type",
"format": "object",
"hidden": true,
"hidden": false,
"key": "type",
"maxCount": 1,
"name": "Object type",

View file

@ -0,0 +1,7 @@
{
"relations": [
"page",
"note",
"task"
]
}

View file

@ -6,7 +6,7 @@ package bundle
import "github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
const TypeChecksum = "dceb8ca5a8c6d10c340c03078e3519f500a7ffa4437ab1a450fb6c70e465ad87"
const TypeChecksum = "7a2dd4e59229ab4b645f0fc5522471018b8c2bd91742ea60770711542db441f7"
type TypeKey string
@ -71,7 +71,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Action Plan",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyTasks), MustGetRelationLink(RelationKeyResources), MustGetRelationLink(RelationKeyResult), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyResponsible)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyTasks), MustGetRelationLink(RelationKeyResources), MustGetRelationLink(RelationKeyResult), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyResponsible)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "actionPlan",
},
@ -82,7 +82,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Article",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "article",
},
@ -93,7 +93,7 @@ var (
Layout: model.ObjectType_file,
Name: "Audio",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyArtist), MustGetRelationLink(RelationKeyAudioAlbum), MustGetRelationLink(RelationKeyAudioAlbumTrackNumber), MustGetRelationLink(RelationKeyAudioGenre), MustGetRelationLink(RelationKeyReleasedYear), MustGetRelationLink(RelationKeyThumbnailImage), MustGetRelationLink(RelationKeyComposer), MustGetRelationLink(RelationKeyDurationInSeconds), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeyAudioArtist), MustGetRelationLink(RelationKeyAudioLyrics)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyArtist), MustGetRelationLink(RelationKeyAudioAlbum), MustGetRelationLink(RelationKeyAudioAlbumTrackNumber), MustGetRelationLink(RelationKeyAudioGenre), MustGetRelationLink(RelationKeyReleasedYear), MustGetRelationLink(RelationKeyThumbnailImage), MustGetRelationLink(RelationKeyComposer), MustGetRelationLink(RelationKeyDurationInSeconds), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyFileExt), MustGetRelationLink(RelationKeyAudioArtist), MustGetRelationLink(RelationKeyAudioLyrics)},
Types: []model.SmartBlockType{model.SmartBlockType_File},
Url: TypePrefix + "audio",
},
@ -104,7 +104,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Book",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyAuthor), MustGetRelationLink(RelationKeyCategory), MustGetRelationLink(RelationKeyRating), MustGetRelationLink(RelationKeyStatus)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyAuthor), MustGetRelationLink(RelationKeyCategory), MustGetRelationLink(RelationKeyRating), MustGetRelationLink(RelationKeyStatus)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "book",
},
@ -115,7 +115,7 @@ var (
Layout: model.ObjectType_bookmark,
Name: "Bookmark",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeySource), MustGetRelationLink(RelationKeyPicture), MustGetRelationLink(RelationKeyNotes), MustGetRelationLink(RelationKeyQuote)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeySource), MustGetRelationLink(RelationKeyPicture), MustGetRelationLink(RelationKeyNotes), MustGetRelationLink(RelationKeyQuote)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "bookmark",
},
@ -126,7 +126,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Bug (Software)",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyHowToReproduce), MustGetRelationLink(RelationKeyResult), MustGetRelationLink(RelationKeyAdditional), MustGetRelationLink(RelationKeyAttachments), MustGetRelationLink(RelationKeyAssignee), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyPriority)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyHowToReproduce), MustGetRelationLink(RelationKeyResult), MustGetRelationLink(RelationKeyAdditional), MustGetRelationLink(RelationKeyAttachments), MustGetRelationLink(RelationKeyAssignee), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyPriority)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "bug",
},
@ -137,7 +137,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Class Note",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyClass), MustGetRelationLink(RelationKeyClassType), MustGetRelationLink(RelationKeyRecords), MustGetRelationLink(RelationKeyQuestions), MustGetRelationLink(RelationKeyMaterials), MustGetRelationLink(RelationKeyTasks), MustGetRelationLink(RelationKeyReflection)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyClass), MustGetRelationLink(RelationKeyClassType), MustGetRelationLink(RelationKeyRecords), MustGetRelationLink(RelationKeyQuestions), MustGetRelationLink(RelationKeyMaterials), MustGetRelationLink(RelationKeyTasks), MustGetRelationLink(RelationKeyReflection)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "classNote",
},
@ -148,7 +148,7 @@ var (
Layout: model.ObjectType_profile,
Name: "Company",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyStory), MustGetRelationLink(RelationKeyFounded), MustGetRelationLink(RelationKeyCeo), MustGetRelationLink(RelationKeyFounders), MustGetRelationLink(RelationKeyOwner), MustGetRelationLink(RelationKeyNumberOfEmployees), MustGetRelationLink(RelationKeyHeadquarters), MustGetRelationLink(RelationKeyWebsite), MustGetRelationLink(RelationKeySocialProfile), MustGetRelationLink(RelationKeyStockprice), MustGetRelationLink(RelationKeyTickerSymbol), MustGetRelationLink(RelationKeyAddress), MustGetRelationLink(RelationKeySubsidiaries)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyStory), MustGetRelationLink(RelationKeyFounded), MustGetRelationLink(RelationKeyCeo), MustGetRelationLink(RelationKeyFounders), MustGetRelationLink(RelationKeyOwner), MustGetRelationLink(RelationKeyNumberOfEmployees), MustGetRelationLink(RelationKeyHeadquarters), MustGetRelationLink(RelationKeyWebsite), MustGetRelationLink(RelationKeySocialProfile), MustGetRelationLink(RelationKeyStockprice), MustGetRelationLink(RelationKeyTickerSymbol), MustGetRelationLink(RelationKeyAddress), MustGetRelationLink(RelationKeySubsidiaries)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "company",
},
@ -159,7 +159,7 @@ var (
Layout: model.ObjectType_profile,
Name: "Contact",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyPhone), MustGetRelationLink(RelationKeyEmail), MustGetRelationLink(RelationKeyDateOfBirth), MustGetRelationLink(RelationKeyPlaceOfBirth), MustGetRelationLink(RelationKeyCompany), MustGetRelationLink(RelationKeySocialProfile), MustGetRelationLink(RelationKeyJob), MustGetRelationLink(RelationKeyLinkedContacts), MustGetRelationLink(RelationKeyOccupation), MustGetRelationLink(RelationKeyInstagram), MustGetRelationLink(RelationKeyGender), MustGetRelationLink(RelationKeyFacebook)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyPhone), MustGetRelationLink(RelationKeyEmail), MustGetRelationLink(RelationKeyDateOfBirth), MustGetRelationLink(RelationKeyPlaceOfBirth), MustGetRelationLink(RelationKeyCompany), MustGetRelationLink(RelationKeySocialProfile), MustGetRelationLink(RelationKeyJob), MustGetRelationLink(RelationKeyLinkedContacts), MustGetRelationLink(RelationKeyOccupation), MustGetRelationLink(RelationKeyInstagram), MustGetRelationLink(RelationKeyGender), MustGetRelationLink(RelationKeyFacebook)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "contact",
},
@ -170,7 +170,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Daily Plan",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyNotes), MustGetRelationLink(RelationKeyTasks), MustGetRelationLink(RelationKeyEvents)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyNotes), MustGetRelationLink(RelationKeyTasks), MustGetRelationLink(RelationKeyEvents)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "dailyPlan",
},
@ -181,20 +181,19 @@ var (
Layout: model.ObjectType_basic,
Name: "Daily Reflection",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyIntentions), MustGetRelationLink(RelationKeyHappenings), MustGetRelationLink(RelationKeyGratefulFor), MustGetRelationLink(RelationKeyMood), MustGetRelationLink(RelationKeyWorriedAbout), MustGetRelationLink(RelationKeyTasks)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIntentions), MustGetRelationLink(RelationKeyHappenings), MustGetRelationLink(RelationKeyGratefulFor), MustGetRelationLink(RelationKeyMood), MustGetRelationLink(RelationKeyWorriedAbout), MustGetRelationLink(RelationKeyTasks)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "dailyReflection",
},
TypeKeyDashboard: {
Description: "Internal home dashboard with favourite objects",
Hidden: true,
Layout: model.ObjectType_dashboard,
Name: "Dashboard",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
Types: []model.SmartBlockType{model.SmartBlockType_Home},
Url: TypePrefix + "dashboard",
Description: "Internal home dashboard with favourite objects",
Hidden: true,
Layout: model.ObjectType_dashboard,
Name: "Dashboard",
Readonly: true,
Types: []model.SmartBlockType{model.SmartBlockType_Home},
Url: TypePrefix + "dashboard",
},
TypeKeyDate: {
@ -203,7 +202,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Date",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag)},
Types: []model.SmartBlockType{model.SmartBlockType_Date},
Url: TypePrefix + "date",
},
@ -214,7 +213,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Diary Entry",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyMood)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyMood)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "diaryEntry",
},
@ -225,7 +224,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Document",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "document",
},
@ -236,7 +235,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Feature",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyHypothesisAssumptions), MustGetRelationLink(RelationKeyProblem), MustGetRelationLink(RelationKeyUserStories), MustGetRelationLink(RelationKeyLogic), MustGetRelationLink(RelationKeyMeasureOfSuccess), MustGetRelationLink(RelationKeyAttachments), MustGetRelationLink(RelationKeyAssignee), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyPriority)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyHypothesisAssumptions), MustGetRelationLink(RelationKeyProblem), MustGetRelationLink(RelationKeyUserStories), MustGetRelationLink(RelationKeyLogic), MustGetRelationLink(RelationKeyMeasureOfSuccess), MustGetRelationLink(RelationKeyAttachments), MustGetRelationLink(RelationKeyAssignee), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyPriority)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "feature",
},
@ -247,7 +246,7 @@ var (
Layout: model.ObjectType_file,
Name: "File",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyFileExt)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyFileExt)},
Types: []model.SmartBlockType{model.SmartBlockType_File},
Url: TypePrefix + "file",
},
@ -258,7 +257,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Goal",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyProgress), MustGetRelationLink(RelationKeyStatus), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyTasks)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyProgress), MustGetRelationLink(RelationKeyStatus), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyTasks)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "goal",
},
@ -269,7 +268,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Habit Track",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyRunning), MustGetRelationLink(RelationKeyMeditation), MustGetRelationLink(RelationKey7hourssleep), MustGetRelationLink(RelationKeyJournaling), MustGetRelationLink(RelationKeyHealthyEating)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyRunning), MustGetRelationLink(RelationKeyMeditation), MustGetRelationLink(RelationKey7hourssleep), MustGetRelationLink(RelationKeyJournaling), MustGetRelationLink(RelationKeyHealthyEating)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "habitTrack",
},
@ -280,7 +279,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Idea",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyProblem), MustGetRelationLink(RelationKeySolution), MustGetRelationLink(RelationKeyAlternative)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyProblem), MustGetRelationLink(RelationKeySolution), MustGetRelationLink(RelationKeyAlternative)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "idea",
},
@ -291,7 +290,7 @@ var (
Layout: model.ObjectType_image,
Name: "Image",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyWidthInPixels), MustGetRelationLink(RelationKeyCamera), MustGetRelationLink(RelationKeyHeightInPixels), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyCameraIso), MustGetRelationLink(RelationKeyAperture), MustGetRelationLink(RelationKeyExposure), MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyFocalRatio), MustGetRelationLink(RelationKeyFileExt)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyWidthInPixels), MustGetRelationLink(RelationKeyCamera), MustGetRelationLink(RelationKeyHeightInPixels), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyCameraIso), MustGetRelationLink(RelationKeyAperture), MustGetRelationLink(RelationKeyExposure), MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyFocalRatio), MustGetRelationLink(RelationKeyFileExt)},
Types: []model.SmartBlockType{model.SmartBlockType_File},
Url: TypePrefix + "image",
},
@ -302,7 +301,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Invoice",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyCompany), MustGetRelationLink(RelationKeyAddress), MustGetRelationLink(RelationKeyBillTo), MustGetRelationLink(RelationKeyBillToAddress), MustGetRelationLink(RelationKeyShipTo), MustGetRelationLink(RelationKeyShipToAddress), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyTotal), MustGetRelationLink(RelationKeyNumber)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyCompany), MustGetRelationLink(RelationKeyAddress), MustGetRelationLink(RelationKeyBillTo), MustGetRelationLink(RelationKeyBillToAddress), MustGetRelationLink(RelationKeyShipTo), MustGetRelationLink(RelationKeyShipToAddress), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyTotal), MustGetRelationLink(RelationKeyNumber)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "invoice",
},
@ -313,7 +312,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Meeting Note",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyParticipants), MustGetRelationLink(RelationKeyAgenda), MustGetRelationLink(RelationKeyTasks)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyParticipants), MustGetRelationLink(RelationKeyAgenda), MustGetRelationLink(RelationKeyTasks)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "meetingNote",
},
@ -324,7 +323,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Movie",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyDirector), MustGetRelationLink(RelationKeyStars), MustGetRelationLink(RelationKeyGenre), MustGetRelationLink(RelationKeyTrailer), MustGetRelationLink(RelationKeyRating), MustGetRelationLink(RelationKeyImdbRating), MustGetRelationLink(RelationKeyRottenTomatoesRating), MustGetRelationLink(RelationKeyStatus)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyDirector), MustGetRelationLink(RelationKeyStars), MustGetRelationLink(RelationKeyGenre), MustGetRelationLink(RelationKeyTrailer), MustGetRelationLink(RelationKeyRating), MustGetRelationLink(RelationKeyImdbRating), MustGetRelationLink(RelationKeyRottenTomatoesRating), MustGetRelationLink(RelationKeyStatus)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "movie",
},
@ -335,7 +334,7 @@ var (
Layout: model.ObjectType_note,
Name: "Note",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "note",
},
@ -346,7 +345,7 @@ var (
Layout: model.ObjectType_objectType,
Name: "Type",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyRecommendedRelations), MustGetRelationLink(RelationKeyRecommendedLayout), MustGetRelationLink(RelationKeyMpAddedToLibrary)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyRecommendedRelations), MustGetRelationLink(RelationKeyRecommendedLayout)},
Types: []model.SmartBlockType{model.SmartBlockType_STObjectType, model.SmartBlockType_BundledObjectType},
Url: TypePrefix + "objectType",
},
@ -357,7 +356,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Page",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "page",
},
@ -368,7 +367,7 @@ var (
Layout: model.ObjectType_profile,
Name: "Human",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag)},
Types: []model.SmartBlockType{model.SmartBlockType_Page, model.SmartBlockType_ProfilePage},
Url: TypePrefix + "profile",
},
@ -379,7 +378,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Project",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyObjectives), MustGetRelationLink(RelationKeyScope), MustGetRelationLink(RelationKeyTimeframe), MustGetRelationLink(RelationKeyBudget), MustGetRelationLink(RelationKeyStakeholders), MustGetRelationLink(RelationKeyTasks)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyObjectives), MustGetRelationLink(RelationKeyScope), MustGetRelationLink(RelationKeyTimeframe), MustGetRelationLink(RelationKeyBudget), MustGetRelationLink(RelationKeyStakeholders), MustGetRelationLink(RelationKeyTasks)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "project",
},
@ -390,7 +389,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Recipe",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyTime), MustGetRelationLink(RelationKeyServings), MustGetRelationLink(RelationKeyIngredients), MustGetRelationLink(RelationKeyInstructions), MustGetRelationLink(RelationKeyDifficulty)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyTime), MustGetRelationLink(RelationKeyServings), MustGetRelationLink(RelationKeyIngredients), MustGetRelationLink(RelationKeyInstructions), MustGetRelationLink(RelationKeyDifficulty)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "recipe",
},
@ -402,21 +401,20 @@ var (
Layout: model.ObjectType_relation,
Name: "Relation",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyMpAddedToLibrary), MustGetRelationLink(RelationKeyRelationFormat), MustGetRelationLink(RelationKeyRelationMaxCount), MustGetRelationLink(RelationKeyRelationDefaultValue), MustGetRelationLink(RelationKeyRelationFormatObjectTypes)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyRelationFormat), MustGetRelationLink(RelationKeyRelationMaxCount), MustGetRelationLink(RelationKeyRelationDefaultValue), MustGetRelationLink(RelationKeyRelationFormatObjectTypes)},
Types: []model.SmartBlockType{model.SmartBlockType_SubObject, model.SmartBlockType_BundledRelation},
Url: TypePrefix + "relation",
},
TypeKeyRelationOption: {
Description: "Object that contains a relation option",
Hidden: true,
IconEmoji: "🥚",
Layout: model.ObjectType_relationOption,
Name: "Relation option",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
Types: []model.SmartBlockType{model.SmartBlockType_SubObject},
Url: TypePrefix + "relationOption",
Description: "Object that contains a relation option",
Hidden: true,
IconEmoji: "🥚",
Layout: model.ObjectType_relationOption,
Name: "Relation option",
Readonly: true,
Types: []model.SmartBlockType{model.SmartBlockType_SubObject},
Url: TypePrefix + "relationOption",
},
TypeKeyResume: {
@ -425,7 +423,7 @@ var (
Layout: model.ObjectType_profile,
Name: "Resume",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyCandidate), MustGetRelationLink(RelationKeyJob), MustGetRelationLink(RelationKeyPhone), MustGetRelationLink(RelationKeyEmail), MustGetRelationLink(RelationKeyLocation), MustGetRelationLink(RelationKeyWebsite), MustGetRelationLink(RelationKeySocialProfile)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyCandidate), MustGetRelationLink(RelationKeyJob), MustGetRelationLink(RelationKeyPhone), MustGetRelationLink(RelationKeyEmail), MustGetRelationLink(RelationKeyLocation), MustGetRelationLink(RelationKeyWebsite), MustGetRelationLink(RelationKeySocialProfile)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "resume",
},
@ -436,7 +434,7 @@ var (
Layout: model.ObjectType_set,
Name: "Set",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeySetOf)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeySetOf)},
Types: []model.SmartBlockType{model.SmartBlockType_Set},
Url: TypePrefix + "set",
},
@ -448,7 +446,7 @@ var (
Layout: model.ObjectType_space,
Name: "Space",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag)},
Types: []model.SmartBlockType{model.SmartBlockType_Workspace},
Url: TypePrefix + "space",
},
@ -459,7 +457,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Task",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyAssignee), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyAttachments), MustGetRelationLink(RelationKeyStatus), MustGetRelationLink(RelationKeyDone), MustGetRelationLink(RelationKeyPriority), MustGetRelationLink(RelationKeyTasks), MustGetRelationLink(RelationKeyLinkedProjects)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyAssignee), MustGetRelationLink(RelationKeyDueDate), MustGetRelationLink(RelationKeyAttachments), MustGetRelationLink(RelationKeyStatus), MustGetRelationLink(RelationKeyDone), MustGetRelationLink(RelationKeyPriority), MustGetRelationLink(RelationKeyTasks), MustGetRelationLink(RelationKeyLinkedProjects)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "task",
},
@ -470,7 +468,7 @@ var (
Layout: model.ObjectType_basic,
Name: "Template",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyTargetObjectType), MustGetRelationLink(RelationKeyTemplateIsBundled)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTargetObjectType), MustGetRelationLink(RelationKeyTemplateIsBundled)},
Types: []model.SmartBlockType{model.SmartBlockType_Template},
Url: TypePrefix + "template",
},
@ -481,7 +479,7 @@ var (
Layout: model.ObjectType_file,
Name: "Video",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyDurationInSeconds), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyCamera), MustGetRelationLink(RelationKeyThumbnailImage), MustGetRelationLink(RelationKeyHeightInPixels), MustGetRelationLink(RelationKeyWidthInPixels), MustGetRelationLink(RelationKeyCameraIso), MustGetRelationLink(RelationKeyAperture), MustGetRelationLink(RelationKeyExposure), MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyFileExt)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyDurationInSeconds), MustGetRelationLink(RelationKeySizeInBytes), MustGetRelationLink(RelationKeyFileMimeType), MustGetRelationLink(RelationKeyCamera), MustGetRelationLink(RelationKeyThumbnailImage), MustGetRelationLink(RelationKeyHeightInPixels), MustGetRelationLink(RelationKeyWidthInPixels), MustGetRelationLink(RelationKeyCameraIso), MustGetRelationLink(RelationKeyAperture), MustGetRelationLink(RelationKeyExposure), MustGetRelationLink(RelationKeyAddedDate), MustGetRelationLink(RelationKeyFileExt)},
Types: []model.SmartBlockType{model.SmartBlockType_File},
Url: TypePrefix + "video",
},
@ -492,7 +490,7 @@ var (
Layout: model.ObjectType_todo,
Name: "Weekly Plan",
Readonly: true,
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyId), MustGetRelationLink(RelationKeyName), MustGetRelationLink(RelationKeyDescription), MustGetRelationLink(RelationKeyType), MustGetRelationLink(RelationKeyCreator), MustGetRelationLink(RelationKeyCreatedDate), MustGetRelationLink(RelationKeyLayout), MustGetRelationLink(RelationKeyLastModifiedBy), MustGetRelationLink(RelationKeyIconImage), MustGetRelationLink(RelationKeyIconEmoji), MustGetRelationLink(RelationKeyCoverId), MustGetRelationLink(RelationKeyLastModifiedDate), MustGetRelationLink(RelationKeyLastOpenedDate), MustGetRelationLink(RelationKeyCoverX), MustGetRelationLink(RelationKeyCoverY), MustGetRelationLink(RelationKeyCoverScale), MustGetRelationLink(RelationKeyToBeDeletedDate), MustGetRelationLink(RelationKeyFeaturedRelations), MustGetRelationLink(RelationKeyCoverType), MustGetRelationLink(RelationKeyLayoutAlign), MustGetRelationLink(RelationKeyIsHidden), MustGetRelationLink(RelationKeyIsArchived), MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyIsFavorite), MustGetRelationLink(RelationKeyIsDraft), MustGetRelationLink(RelationKeyWorkspaceId), MustGetRelationLink(RelationKeyInternalFlags), MustGetRelationLink(RelationKeyNotes), MustGetRelationLink(RelationKeyEvents), MustGetRelationLink(RelationKeyTasks)},
RelationLinks: []*model.RelationLink{MustGetRelationLink(RelationKeyTag), MustGetRelationLink(RelationKeyNotes), MustGetRelationLink(RelationKeyEvents), MustGetRelationLink(RelationKeyTasks)},
Types: []model.SmartBlockType{model.SmartBlockType_Page},
Url: TypePrefix + "weeklyPlan",
},

File diff suppressed because it is too large Load diff

View file

@ -44,17 +44,21 @@ func SmartBlockTypeFromID(id string) (SmartBlockType, error) {
if strings.HasPrefix(id, addr.BundledRelationURLPrefix) {
return SmartBlockTypeBundledRelation, nil
}
if strings.HasPrefix(id, addr.RelationKeyToIdPrefix) {
return SmartBlockTypeSubObject, nil
}
// workaround for options that have no prefix
if bson.IsObjectIdHex(id) {
return SmartBlockTypeSubObject, nil
}
if strings.HasPrefix(id, addr.BundledObjectTypeURLPrefix) {
return SmartBlockTypeBundledObjectType, nil
}
if len(strings.Split(id, addr.SubObjectCollectionIdSeparator)) == 2 {
return SmartBlockTypeSubObject, nil
}
// workaround for options that have no prefix
// todo: remove this after migration to the new records format
if bson.IsObjectIdHex(id) {
return SmartBlockTypeSubObject, nil
}
if strings.HasPrefix(id, addr.AnytypeProfileId) {
return SmartBlockTypeProfilePage, nil
}

View file

@ -7,8 +7,9 @@ import (
)
const (
VirtualObjectSeparator = "-"
RelationKeyToIdPrefix = "rel-" //
SubObjectCollectionIdSeparator = "-"
RelationKeyToIdPrefix = "rel-" //
ObjectTypeKeyToIdPrefix = "ot-" //
BundledRelationURLPrefix = "_br"
BundledObjectTypeURLPrefix = "_ot"
@ -40,5 +41,5 @@ func ExtractVirtualSourceType(id string) (model.SmartBlockType, error) {
// returns the
func GetVirtualCollectionObjectId(collectionName, key string) string {
return collectionName + VirtualObjectSeparator + key
return collectionName + SubObjectCollectionIdSeparator + key
}

View file

@ -2458,6 +2458,9 @@ func objTypeCompactEncode(objType string) (string, error) {
if strings.HasPrefix(objType, addr.BundledObjectTypeURLPrefix) {
return objType, nil
}
if strings.HasPrefix(objType, addr.ObjectTypeKeyToIdPrefix) {
return objType, nil
}
if strings.HasPrefix(objType, "ba") {
return objType, nil
}
@ -2476,8 +2479,6 @@ func GetObjectType(store ObjectStore, url string) (*model.ObjectType, error) {
return nil, err
}
return objectType, nil
} else if !strings.HasPrefix(url, "b") {
return nil, fmt.Errorf("incorrect object type URL format")
}
ois, err := store.GetByIDs(url)

View file

@ -131,7 +131,7 @@ func (b *builtinTemplate) registerBuiltin(rd io.ReadCloser) (err error) {
func (b *builtinTemplate) validate(st *state.State) (err error) {
cd := st.CombinedDetails()
if st.ObjectType() != bundle.TypeKeyTemplate.URL() {
if st.ObjectType() != addr.ObjectTypeKeyToIdPrefix+bundle.TypeKeyTemplate.String() {
return fmt.Errorf("bundled template validation: %s unexpected object type: %v", st.RootId(), st.ObjectType())
}
if !pbtypes.GetBool(cd, bundle.RelationKeyTemplateIsBundled.String()) {