package freezer; option optimize_for = SPEED; message Server { repeated ConfigKeyValuePair config = 2; optional BanList ban_list = 3; repeated Channel channels = 4; repeated User users = 5; } message ConfigKeyValuePair { required string key = 1; optional string value = 2; } message Ban { optional bytes ip = 1; optional uint32 mask = 2; optional string username = 3; optional string cert_hash = 4; optional string reason = 5; optional int64 start = 6; optional uint32 duration = 7; } message BanList { repeated Ban bans = 1; } message User { optional uint32 id = 1; optional string name = 2; optional string password = 3; optional string cert_hash = 4; optional string email = 5; optional string texture_blob = 6; optional string comment_blob = 7; optional uint32 last_channel_id = 8; optional uint64 last_active = 9; } message UserRemove { optional uint32 id = 1; } message Channel { optional uint32 id = 1; optional string name = 2; optional uint32 parent_id = 3; optional int64 position = 4; optional bool inherit_acl = 5; repeated uint32 links = 6; repeated ACL acl = 7; repeated Group groups = 8; optional string description_blob = 9; } message ChannelRemove { optional uint32 id = 1; } message ACL { optional uint32 user_id = 1; optional string group = 2; optional bool apply_here = 3; optional bool apply_subs = 4; optional uint32 allow = 5; optional uint32 deny = 6; } message Group { optional string name = 1; optional bool inherit = 2; optional bool inheritable = 3; repeated uint32 add = 4; repeated uint32 remove = 5; }