github.com/kchristidis/fabric@v1.0.4-0.20171028114726-837acd08cde1/protos/common/configtx.pb.go (about) 1 // Code generated by protoc-gen-go. DO NOT EDIT. 2 // source: common/configtx.proto 3 4 package common 5 6 import proto "github.com/golang/protobuf/proto" 7 import fmt "fmt" 8 import math "math" 9 10 // Reference imports to suppress errors if they are not otherwise used. 11 var _ = proto.Marshal 12 var _ = fmt.Errorf 13 var _ = math.Inf 14 15 // ConfigEnvelope is designed to contain _all_ configuration for a chain with no dependency 16 // on previous configuration transactions. 17 // 18 // It is generated with the following scheme: 19 // 1. Retrieve the existing configuration 20 // 2. Note the config properties (ConfigValue, ConfigPolicy, ConfigGroup) to be modified 21 // 3. Add any intermediate ConfigGroups to the ConfigUpdate.read_set (sparsely) 22 // 4. Add any additional desired dependencies to ConfigUpdate.read_set (sparsely) 23 // 5. Modify the config properties, incrementing each version by 1, set them in the ConfigUpdate.write_set 24 // Note: any element not modified but specified should already be in the read_set, so may be specified sparsely 25 // 6. Create ConfigUpdate message and marshal it into ConfigUpdateEnvelope.update and encode the required signatures 26 // a) Each signature is of type ConfigSignature 27 // b) The ConfigSignature signature is over the concatenation of signature_header and the ConfigUpdate bytes (which includes a ChainHeader) 28 // 5. Submit new Config for ordering in Envelope signed by submitter 29 // a) The Envelope Payload has data set to the marshaled ConfigEnvelope 30 // b) The Envelope Payload has a header of type Header.Type.CONFIG_UPDATE 31 // 32 // The configuration manager will verify: 33 // 1. All items in the read_set exist at the read versions 34 // 2. All items in the write_set at a different version than, or not in, the read_set have been appropriately signed according to their mod_policy 35 // 3. The new configuration satisfies the ConfigSchema 36 type ConfigEnvelope struct { 37 Config *Config `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` 38 LastUpdate *Envelope `protobuf:"bytes,2,opt,name=last_update,json=lastUpdate" json:"last_update,omitempty"` 39 } 40 41 func (m *ConfigEnvelope) Reset() { *m = ConfigEnvelope{} } 42 func (m *ConfigEnvelope) String() string { return proto.CompactTextString(m) } 43 func (*ConfigEnvelope) ProtoMessage() {} 44 func (*ConfigEnvelope) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } 45 46 func (m *ConfigEnvelope) GetConfig() *Config { 47 if m != nil { 48 return m.Config 49 } 50 return nil 51 } 52 53 func (m *ConfigEnvelope) GetLastUpdate() *Envelope { 54 if m != nil { 55 return m.LastUpdate 56 } 57 return nil 58 } 59 60 type ConfigGroupSchema struct { 61 Groups map[string]*ConfigGroupSchema `protobuf:"bytes,1,rep,name=groups" json:"groups,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` 62 Values map[string]*ConfigValueSchema `protobuf:"bytes,2,rep,name=values" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` 63 Policies map[string]*ConfigPolicySchema `protobuf:"bytes,3,rep,name=policies" json:"policies,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` 64 } 65 66 func (m *ConfigGroupSchema) Reset() { *m = ConfigGroupSchema{} } 67 func (m *ConfigGroupSchema) String() string { return proto.CompactTextString(m) } 68 func (*ConfigGroupSchema) ProtoMessage() {} 69 func (*ConfigGroupSchema) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } 70 71 func (m *ConfigGroupSchema) GetGroups() map[string]*ConfigGroupSchema { 72 if m != nil { 73 return m.Groups 74 } 75 return nil 76 } 77 78 func (m *ConfigGroupSchema) GetValues() map[string]*ConfigValueSchema { 79 if m != nil { 80 return m.Values 81 } 82 return nil 83 } 84 85 func (m *ConfigGroupSchema) GetPolicies() map[string]*ConfigPolicySchema { 86 if m != nil { 87 return m.Policies 88 } 89 return nil 90 } 91 92 type ConfigValueSchema struct { 93 } 94 95 func (m *ConfigValueSchema) Reset() { *m = ConfigValueSchema{} } 96 func (m *ConfigValueSchema) String() string { return proto.CompactTextString(m) } 97 func (*ConfigValueSchema) ProtoMessage() {} 98 func (*ConfigValueSchema) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } 99 100 type ConfigPolicySchema struct { 101 } 102 103 func (m *ConfigPolicySchema) Reset() { *m = ConfigPolicySchema{} } 104 func (m *ConfigPolicySchema) String() string { return proto.CompactTextString(m) } 105 func (*ConfigPolicySchema) ProtoMessage() {} 106 func (*ConfigPolicySchema) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } 107 108 // Config represents the config for a particular channel 109 type Config struct { 110 Sequence uint64 `protobuf:"varint,1,opt,name=sequence" json:"sequence,omitempty"` 111 ChannelGroup *ConfigGroup `protobuf:"bytes,2,opt,name=channel_group,json=channelGroup" json:"channel_group,omitempty"` 112 } 113 114 func (m *Config) Reset() { *m = Config{} } 115 func (m *Config) String() string { return proto.CompactTextString(m) } 116 func (*Config) ProtoMessage() {} 117 func (*Config) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } 118 119 func (m *Config) GetSequence() uint64 { 120 if m != nil { 121 return m.Sequence 122 } 123 return 0 124 } 125 126 func (m *Config) GetChannelGroup() *ConfigGroup { 127 if m != nil { 128 return m.ChannelGroup 129 } 130 return nil 131 } 132 133 type ConfigUpdateEnvelope struct { 134 ConfigUpdate []byte `protobuf:"bytes,1,opt,name=config_update,json=configUpdate,proto3" json:"config_update,omitempty"` 135 Signatures []*ConfigSignature `protobuf:"bytes,2,rep,name=signatures" json:"signatures,omitempty"` 136 } 137 138 func (m *ConfigUpdateEnvelope) Reset() { *m = ConfigUpdateEnvelope{} } 139 func (m *ConfigUpdateEnvelope) String() string { return proto.CompactTextString(m) } 140 func (*ConfigUpdateEnvelope) ProtoMessage() {} 141 func (*ConfigUpdateEnvelope) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } 142 143 func (m *ConfigUpdateEnvelope) GetConfigUpdate() []byte { 144 if m != nil { 145 return m.ConfigUpdate 146 } 147 return nil 148 } 149 150 func (m *ConfigUpdateEnvelope) GetSignatures() []*ConfigSignature { 151 if m != nil { 152 return m.Signatures 153 } 154 return nil 155 } 156 157 // ConfigUpdate is used to submit a subset of config and to have the orderer apply to Config 158 // it is always submitted inside a ConfigUpdateEnvelope which allows the addition of signatures 159 // resulting in a new total configuration. The update is applied as follows: 160 // 1. The versions from all of the elements in the read_set is verified against the versions in the existing config. 161 // If there is a mismatch in the read versions, then the config update fails and is rejected. 162 // 2. Any elements in the write_set with the same version as the read_set are ignored. 163 // 3. The corresponding mod_policy for every remaining element in the write_set is collected. 164 // 4. Each policy is checked against the signatures from the ConfigUpdateEnvelope, any failing to verify are rejected 165 // 5. The write_set is applied to the Config and the ConfigGroupSchema verifies that the updates were legal 166 type ConfigUpdate struct { 167 ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId" json:"channel_id,omitempty"` 168 ReadSet *ConfigGroup `protobuf:"bytes,2,opt,name=read_set,json=readSet" json:"read_set,omitempty"` 169 WriteSet *ConfigGroup `protobuf:"bytes,3,opt,name=write_set,json=writeSet" json:"write_set,omitempty"` 170 } 171 172 func (m *ConfigUpdate) Reset() { *m = ConfigUpdate{} } 173 func (m *ConfigUpdate) String() string { return proto.CompactTextString(m) } 174 func (*ConfigUpdate) ProtoMessage() {} 175 func (*ConfigUpdate) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } 176 177 func (m *ConfigUpdate) GetChannelId() string { 178 if m != nil { 179 return m.ChannelId 180 } 181 return "" 182 } 183 184 func (m *ConfigUpdate) GetReadSet() *ConfigGroup { 185 if m != nil { 186 return m.ReadSet 187 } 188 return nil 189 } 190 191 func (m *ConfigUpdate) GetWriteSet() *ConfigGroup { 192 if m != nil { 193 return m.WriteSet 194 } 195 return nil 196 } 197 198 // ConfigGroup is the hierarchical data structure for holding config 199 type ConfigGroup struct { 200 Version uint64 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` 201 Groups map[string]*ConfigGroup `protobuf:"bytes,2,rep,name=groups" json:"groups,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` 202 Values map[string]*ConfigValue `protobuf:"bytes,3,rep,name=values" json:"values,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` 203 Policies map[string]*ConfigPolicy `protobuf:"bytes,4,rep,name=policies" json:"policies,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` 204 ModPolicy string `protobuf:"bytes,5,opt,name=mod_policy,json=modPolicy" json:"mod_policy,omitempty"` 205 } 206 207 func (m *ConfigGroup) Reset() { *m = ConfigGroup{} } 208 func (m *ConfigGroup) String() string { return proto.CompactTextString(m) } 209 func (*ConfigGroup) ProtoMessage() {} 210 func (*ConfigGroup) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } 211 212 func (m *ConfigGroup) GetVersion() uint64 { 213 if m != nil { 214 return m.Version 215 } 216 return 0 217 } 218 219 func (m *ConfigGroup) GetGroups() map[string]*ConfigGroup { 220 if m != nil { 221 return m.Groups 222 } 223 return nil 224 } 225 226 func (m *ConfigGroup) GetValues() map[string]*ConfigValue { 227 if m != nil { 228 return m.Values 229 } 230 return nil 231 } 232 233 func (m *ConfigGroup) GetPolicies() map[string]*ConfigPolicy { 234 if m != nil { 235 return m.Policies 236 } 237 return nil 238 } 239 240 func (m *ConfigGroup) GetModPolicy() string { 241 if m != nil { 242 return m.ModPolicy 243 } 244 return "" 245 } 246 247 // ConfigValue represents an individual piece of config data 248 type ConfigValue struct { 249 Version uint64 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` 250 Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` 251 ModPolicy string `protobuf:"bytes,3,opt,name=mod_policy,json=modPolicy" json:"mod_policy,omitempty"` 252 } 253 254 func (m *ConfigValue) Reset() { *m = ConfigValue{} } 255 func (m *ConfigValue) String() string { return proto.CompactTextString(m) } 256 func (*ConfigValue) ProtoMessage() {} 257 func (*ConfigValue) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } 258 259 func (m *ConfigValue) GetVersion() uint64 { 260 if m != nil { 261 return m.Version 262 } 263 return 0 264 } 265 266 func (m *ConfigValue) GetValue() []byte { 267 if m != nil { 268 return m.Value 269 } 270 return nil 271 } 272 273 func (m *ConfigValue) GetModPolicy() string { 274 if m != nil { 275 return m.ModPolicy 276 } 277 return "" 278 } 279 280 type ConfigPolicy struct { 281 Version uint64 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` 282 Policy *Policy `protobuf:"bytes,2,opt,name=policy" json:"policy,omitempty"` 283 ModPolicy string `protobuf:"bytes,3,opt,name=mod_policy,json=modPolicy" json:"mod_policy,omitempty"` 284 } 285 286 func (m *ConfigPolicy) Reset() { *m = ConfigPolicy{} } 287 func (m *ConfigPolicy) String() string { return proto.CompactTextString(m) } 288 func (*ConfigPolicy) ProtoMessage() {} 289 func (*ConfigPolicy) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } 290 291 func (m *ConfigPolicy) GetVersion() uint64 { 292 if m != nil { 293 return m.Version 294 } 295 return 0 296 } 297 298 func (m *ConfigPolicy) GetPolicy() *Policy { 299 if m != nil { 300 return m.Policy 301 } 302 return nil 303 } 304 305 func (m *ConfigPolicy) GetModPolicy() string { 306 if m != nil { 307 return m.ModPolicy 308 } 309 return "" 310 } 311 312 type ConfigSignature struct { 313 SignatureHeader []byte `protobuf:"bytes,1,opt,name=signature_header,json=signatureHeader,proto3" json:"signature_header,omitempty"` 314 Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` 315 } 316 317 func (m *ConfigSignature) Reset() { *m = ConfigSignature{} } 318 func (m *ConfigSignature) String() string { return proto.CompactTextString(m) } 319 func (*ConfigSignature) ProtoMessage() {} 320 func (*ConfigSignature) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } 321 322 func (m *ConfigSignature) GetSignatureHeader() []byte { 323 if m != nil { 324 return m.SignatureHeader 325 } 326 return nil 327 } 328 329 func (m *ConfigSignature) GetSignature() []byte { 330 if m != nil { 331 return m.Signature 332 } 333 return nil 334 } 335 336 func init() { 337 proto.RegisterType((*ConfigEnvelope)(nil), "common.ConfigEnvelope") 338 proto.RegisterType((*ConfigGroupSchema)(nil), "common.ConfigGroupSchema") 339 proto.RegisterType((*ConfigValueSchema)(nil), "common.ConfigValueSchema") 340 proto.RegisterType((*ConfigPolicySchema)(nil), "common.ConfigPolicySchema") 341 proto.RegisterType((*Config)(nil), "common.Config") 342 proto.RegisterType((*ConfigUpdateEnvelope)(nil), "common.ConfigUpdateEnvelope") 343 proto.RegisterType((*ConfigUpdate)(nil), "common.ConfigUpdate") 344 proto.RegisterType((*ConfigGroup)(nil), "common.ConfigGroup") 345 proto.RegisterType((*ConfigValue)(nil), "common.ConfigValue") 346 proto.RegisterType((*ConfigPolicy)(nil), "common.ConfigPolicy") 347 proto.RegisterType((*ConfigSignature)(nil), "common.ConfigSignature") 348 } 349 350 func init() { proto.RegisterFile("common/configtx.proto", fileDescriptor1) } 351 352 var fileDescriptor1 = []byte{ 353 // 674 bytes of a gzipped FileDescriptorProto 354 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x55, 0xdb, 0x6e, 0xd3, 0x40, 355 0x10, 0x55, 0xe2, 0xd6, 0x4d, 0x26, 0xe9, 0x85, 0x6d, 0x10, 0xc6, 0x02, 0x51, 0x0c, 0x94, 0x16, 356 0x24, 0xa7, 0x94, 0x87, 0x56, 0x48, 0x7d, 0xa1, 0xaa, 0x80, 0x97, 0x0a, 0x1c, 0x2e, 0x52, 0x85, 357 0x88, 0x5c, 0x7b, 0xeb, 0x58, 0x75, 0xbc, 0x66, 0xbd, 0x2e, 0xe4, 0x2b, 0xf8, 0x40, 0xfe, 0x80, 358 0xaf, 0x40, 0xde, 0x5d, 0x9b, 0x75, 0xe2, 0x24, 0xe2, 0x29, 0x99, 0x99, 0x73, 0xce, 0xec, 0xce, 359 0xce, 0x91, 0xe1, 0xb6, 0x47, 0xc6, 0x63, 0x12, 0xf7, 0x3d, 0x12, 0x5f, 0x85, 0x01, 0xfb, 0x69, 360 0x27, 0x94, 0x30, 0x82, 0x74, 0x91, 0x36, 0xb7, 0xcb, 0x72, 0xfe, 0x23, 0x8a, 0x66, 0xc1, 0x49, 361 0x48, 0x14, 0x7a, 0x21, 0x4e, 0x45, 0xda, 0xba, 0x86, 0x8d, 0x53, 0xae, 0x72, 0x16, 0xdf, 0xe0, 362 0x88, 0x24, 0x18, 0xed, 0x82, 0x2e, 0x74, 0x8d, 0xc6, 0x4e, 0x63, 0xaf, 0x73, 0xb8, 0x61, 0x4b, 363 0x1d, 0x81, 0x73, 0x64, 0x15, 0xbd, 0x80, 0x4e, 0xe4, 0xa6, 0x6c, 0x98, 0x25, 0xbe, 0xcb, 0xb0, 364 0xd1, 0xe4, 0xe0, 0xad, 0x02, 0x5c, 0xc8, 0x39, 0x90, 0x83, 0x3e, 0x71, 0x8c, 0xf5, 0x5b, 0x83, 365 0x5b, 0x42, 0xe5, 0x0d, 0x25, 0x59, 0x32, 0xf0, 0x46, 0x78, 0xec, 0xa2, 0x13, 0xd0, 0x83, 0x3c, 366 0x4c, 0x8d, 0xc6, 0x8e, 0xb6, 0xd7, 0x39, 0x7c, 0x52, 0x6d, 0xa8, 0x40, 0x6d, 0xfe, 0x3f, 0x3d, 367 0x8b, 0x19, 0x9d, 0x38, 0x92, 0x94, 0xd3, 0x6f, 0xdc, 0x28, 0xc3, 0xa9, 0xd1, 0x5c, 0x46, 0xff, 368 0xcc, 0x71, 0x92, 0x2e, 0x48, 0xe8, 0x14, 0x5a, 0xc5, 0x48, 0x0c, 0x8d, 0x0b, 0x3c, 0x9d, 0x2f, 369 0xf0, 0x5e, 0x22, 0x85, 0x44, 0x49, 0x34, 0x3f, 0x42, 0x47, 0x39, 0x1a, 0xda, 0x02, 0xed, 0x1a, 370 0x4f, 0xf8, 0xfc, 0xda, 0x4e, 0xfe, 0x17, 0xf5, 0x61, 0x95, 0xf7, 0x93, 0x63, 0xba, 0x3b, 0xb7, 371 0x85, 0x23, 0x70, 0xaf, 0x9a, 0xc7, 0x8d, 0x5c, 0x55, 0x39, 0xf1, 0x7f, 0xab, 0x72, 0xee, 0xac, 372 0xea, 0x17, 0x58, 0xaf, 0x5c, 0xa3, 0x46, 0xf7, 0xa0, 0xaa, 0x6b, 0x56, 0x75, 0x39, 0x7b, 0x32, 373 0x23, 0x6c, 0x6d, 0x17, 0x8f, 0xab, 0x34, 0xb6, 0x7a, 0x80, 0x66, 0x59, 0xd6, 0x37, 0xd0, 0x45, 374 0x16, 0x99, 0xd0, 0x4a, 0xf1, 0xf7, 0x0c, 0xc7, 0x1e, 0xe6, 0x27, 0x58, 0x71, 0xca, 0x18, 0x1d, 375 0xc3, 0xba, 0x37, 0x72, 0xe3, 0x18, 0x47, 0x43, 0xfe, 0xd6, 0xf2, 0x38, 0xdb, 0x35, 0xc3, 0x73, 376 0xba, 0x12, 0xc9, 0x23, 0x8b, 0x41, 0x4f, 0x14, 0xc5, 0xe2, 0x95, 0xbb, 0xfd, 0x08, 0xd6, 0xc5, 377 0xf6, 0x16, 0x5b, 0x9b, 0xb7, 0xec, 0x3a, 0x5d, 0x4f, 0x01, 0xa3, 0x23, 0x80, 0x34, 0x0c, 0x62, 378 0x97, 0x65, 0xb4, 0x5c, 0xaa, 0x3b, 0xd5, 0x9e, 0x83, 0xa2, 0xee, 0x28, 0x50, 0xeb, 0x57, 0x03, 379 0xba, 0x6a, 0x5b, 0x74, 0x1f, 0xa0, 0xb8, 0x40, 0xe8, 0xcb, 0x01, 0xb7, 0x65, 0xe6, 0x9d, 0x8f, 380 0x6c, 0x68, 0x51, 0xec, 0xfa, 0xc3, 0x14, 0xb3, 0x45, 0x57, 0x5b, 0xcb, 0x41, 0x03, 0xcc, 0xd0, 381 0x01, 0xb4, 0x7f, 0xd0, 0x90, 0x61, 0x4e, 0xd0, 0xe6, 0x13, 0x5a, 0x1c, 0x35, 0xc0, 0xcc, 0xfa, 382 0xa3, 0x41, 0x47, 0xa9, 0x20, 0x03, 0xd6, 0x6e, 0x30, 0x4d, 0x43, 0x12, 0xcb, 0x61, 0x17, 0x21, 383 0x3a, 0x2a, 0x4d, 0x28, 0x2e, 0xfc, 0xa0, 0x46, 0xb8, 0xd6, 0x7e, 0x47, 0xa5, 0xfd, 0xb4, 0xf9, 384 0xc4, 0x3a, 0xe3, 0x9d, 0x28, 0xc6, 0x5b, 0xe1, 0xd4, 0x87, 0x75, 0xd4, 0x39, 0x96, 0xcb, 0x67, 385 0x3b, 0x26, 0xfe, 0x90, 0xc7, 0x13, 0x63, 0x55, 0xcc, 0x76, 0x4c, 0x7c, 0xb1, 0x67, 0xe6, 0xf9, 386 0x32, 0x47, 0xee, 0x57, 0x77, 0xbc, 0x76, 0x90, 0x8a, 0x6b, 0xce, 0x97, 0x79, 0x71, 0xb1, 0x1e, 387 0xe7, 0xaa, 0x7a, 0x1f, 0x96, 0xbb, 0xf0, 0x59, 0x55, 0xb1, 0x57, 0xe7, 0x42, 0xd5, 0x7f, 0x5f, 388 0x8b, 0xb7, 0xe6, 0xcd, 0x16, 0xbc, 0x75, 0x4f, 0x15, 0xee, 0x4a, 0x89, 0xa9, 0x81, 0x6a, 0x53, 389 0x03, 0xb5, 0x48, 0xb1, 0xdb, 0x22, 0x5e, 0x20, 0xbf, 0x0b, 0xba, 0x14, 0x69, 0x56, 0x3f, 0x20, 390 0xf2, 0xc8, 0xb2, 0xba, 0xac, 0xe1, 0x05, 0x6c, 0x4e, 0x99, 0x0d, 0xed, 0xc3, 0x56, 0x69, 0xb7, 391 0xe1, 0x08, 0xbb, 0x3e, 0xa6, 0xd2, 0xc1, 0x9b, 0x65, 0xfe, 0x2d, 0x4f, 0xa3, 0x7b, 0xd0, 0x2e, 392 0x53, 0xf2, 0x9e, 0xff, 0x12, 0xaf, 0x07, 0xf0, 0x98, 0xd0, 0xc0, 0x1e, 0x4d, 0x12, 0x4c, 0x23, 393 0xec, 0x07, 0x98, 0xda, 0x57, 0xee, 0x25, 0x0d, 0x3d, 0xf1, 0x55, 0x4c, 0xe5, 0x89, 0x2f, 0x9e, 394 0x07, 0x21, 0x1b, 0x65, 0x97, 0x79, 0xd8, 0x57, 0xc0, 0x7d, 0x01, 0xee, 0x0b, 0xb0, 0xfc, 0xce, 395 0x5e, 0xea, 0x3c, 0x7c, 0xf9, 0x37, 0x00, 0x00, 0xff, 0xff, 0x25, 0x75, 0xfb, 0xf8, 0x9e, 0x07, 396 0x00, 0x00, 397 }