1// Code generated by protoc-gen-go. DO NOT EDIT. 2// source: signalling.proto 3 4package tdproto 5 6import ( 7 fmt "fmt" 8 proto "github.com/ooni/psiphon/oopsi/github.com/golang/protobuf/proto" 9 math "math" 10) 11 12// Reference imports to suppress errors if they are not otherwise used. 13var _ = proto.Marshal 14var _ = fmt.Errorf 15var _ = math.Inf 16 17// This is a compile-time assertion to ensure that this generated file 18// is compatible with the proto package it is being compiled against. 19// A compilation error at this line likely means your copy of the 20// proto package needs to be updated. 21const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package 22 23type KeyType int32 24 25const ( 26 KeyType_AES_GCM_128 KeyType = 90 27 KeyType_AES_GCM_256 KeyType = 91 28) 29 30var KeyType_name = map[int32]string{ 31 90: "AES_GCM_128", 32 91: "AES_GCM_256", 33} 34 35var KeyType_value = map[string]int32{ 36 "AES_GCM_128": 90, 37 "AES_GCM_256": 91, 38} 39 40func (x KeyType) Enum() *KeyType { 41 p := new(KeyType) 42 *p = x 43 return p 44} 45 46func (x KeyType) String() string { 47 return proto.EnumName(KeyType_name, int32(x)) 48} 49 50func (x *KeyType) UnmarshalJSON(data []byte) error { 51 value, err := proto.UnmarshalJSONEnum(KeyType_value, data, "KeyType") 52 if err != nil { 53 return err 54 } 55 *x = KeyType(value) 56 return nil 57} 58 59func (KeyType) EnumDescriptor() ([]byte, []int) { 60 return fileDescriptor_39f66308029891ad, []int{0} 61} 62 63// State transitions of the client 64type C2S_Transition int32 65 66const ( 67 C2S_Transition_C2S_NO_CHANGE C2S_Transition = 0 68 C2S_Transition_C2S_SESSION_INIT C2S_Transition = 1 69 C2S_Transition_C2S_SESSION_COVERT_INIT C2S_Transition = 11 70 C2S_Transition_C2S_EXPECT_RECONNECT C2S_Transition = 2 71 C2S_Transition_C2S_SESSION_CLOSE C2S_Transition = 3 72 C2S_Transition_C2S_YIELD_UPLOAD C2S_Transition = 4 73 C2S_Transition_C2S_ACQUIRE_UPLOAD C2S_Transition = 5 74 C2S_Transition_C2S_EXPECT_UPLOADONLY_RECONN C2S_Transition = 6 75 C2S_Transition_C2S_ERROR C2S_Transition = 255 76) 77 78var C2S_Transition_name = map[int32]string{ 79 0: "C2S_NO_CHANGE", 80 1: "C2S_SESSION_INIT", 81 11: "C2S_SESSION_COVERT_INIT", 82 2: "C2S_EXPECT_RECONNECT", 83 3: "C2S_SESSION_CLOSE", 84 4: "C2S_YIELD_UPLOAD", 85 5: "C2S_ACQUIRE_UPLOAD", 86 6: "C2S_EXPECT_UPLOADONLY_RECONN", 87 255: "C2S_ERROR", 88} 89 90var C2S_Transition_value = map[string]int32{ 91 "C2S_NO_CHANGE": 0, 92 "C2S_SESSION_INIT": 1, 93 "C2S_SESSION_COVERT_INIT": 11, 94 "C2S_EXPECT_RECONNECT": 2, 95 "C2S_SESSION_CLOSE": 3, 96 "C2S_YIELD_UPLOAD": 4, 97 "C2S_ACQUIRE_UPLOAD": 5, 98 "C2S_EXPECT_UPLOADONLY_RECONN": 6, 99 "C2S_ERROR": 255, 100} 101 102func (x C2S_Transition) Enum() *C2S_Transition { 103 p := new(C2S_Transition) 104 *p = x 105 return p 106} 107 108func (x C2S_Transition) String() string { 109 return proto.EnumName(C2S_Transition_name, int32(x)) 110} 111 112func (x *C2S_Transition) UnmarshalJSON(data []byte) error { 113 value, err := proto.UnmarshalJSONEnum(C2S_Transition_value, data, "C2S_Transition") 114 if err != nil { 115 return err 116 } 117 *x = C2S_Transition(value) 118 return nil 119} 120 121func (C2S_Transition) EnumDescriptor() ([]byte, []int) { 122 return fileDescriptor_39f66308029891ad, []int{1} 123} 124 125// State transitions of the server 126type S2C_Transition int32 127 128const ( 129 S2C_Transition_S2C_NO_CHANGE S2C_Transition = 0 130 S2C_Transition_S2C_SESSION_INIT S2C_Transition = 1 131 S2C_Transition_S2C_SESSION_COVERT_INIT S2C_Transition = 11 132 S2C_Transition_S2C_CONFIRM_RECONNECT S2C_Transition = 2 133 S2C_Transition_S2C_SESSION_CLOSE S2C_Transition = 3 134 // TODO should probably also allow EXPECT_RECONNECT here, for DittoTap 135 S2C_Transition_S2C_ERROR S2C_Transition = 255 136) 137 138var S2C_Transition_name = map[int32]string{ 139 0: "S2C_NO_CHANGE", 140 1: "S2C_SESSION_INIT", 141 11: "S2C_SESSION_COVERT_INIT", 142 2: "S2C_CONFIRM_RECONNECT", 143 3: "S2C_SESSION_CLOSE", 144 255: "S2C_ERROR", 145} 146 147var S2C_Transition_value = map[string]int32{ 148 "S2C_NO_CHANGE": 0, 149 "S2C_SESSION_INIT": 1, 150 "S2C_SESSION_COVERT_INIT": 11, 151 "S2C_CONFIRM_RECONNECT": 2, 152 "S2C_SESSION_CLOSE": 3, 153 "S2C_ERROR": 255, 154} 155 156func (x S2C_Transition) Enum() *S2C_Transition { 157 p := new(S2C_Transition) 158 *p = x 159 return p 160} 161 162func (x S2C_Transition) String() string { 163 return proto.EnumName(S2C_Transition_name, int32(x)) 164} 165 166func (x *S2C_Transition) UnmarshalJSON(data []byte) error { 167 value, err := proto.UnmarshalJSONEnum(S2C_Transition_value, data, "S2C_Transition") 168 if err != nil { 169 return err 170 } 171 *x = S2C_Transition(value) 172 return nil 173} 174 175func (S2C_Transition) EnumDescriptor() ([]byte, []int) { 176 return fileDescriptor_39f66308029891ad, []int{2} 177} 178 179// Should accompany all S2C_ERROR messages. 180type ErrorReasonS2C int32 181 182const ( 183 ErrorReasonS2C_NO_ERROR ErrorReasonS2C = 0 184 ErrorReasonS2C_COVERT_STREAM ErrorReasonS2C = 1 185 ErrorReasonS2C_CLIENT_REPORTED ErrorReasonS2C = 2 186 ErrorReasonS2C_CLIENT_PROTOCOL ErrorReasonS2C = 3 187 ErrorReasonS2C_STATION_INTERNAL ErrorReasonS2C = 4 188 ErrorReasonS2C_DECOY_OVERLOAD ErrorReasonS2C = 5 189 ErrorReasonS2C_CLIENT_STREAM ErrorReasonS2C = 100 190 ErrorReasonS2C_CLIENT_TIMEOUT ErrorReasonS2C = 101 191) 192 193var ErrorReasonS2C_name = map[int32]string{ 194 0: "NO_ERROR", 195 1: "COVERT_STREAM", 196 2: "CLIENT_REPORTED", 197 3: "CLIENT_PROTOCOL", 198 4: "STATION_INTERNAL", 199 5: "DECOY_OVERLOAD", 200 100: "CLIENT_STREAM", 201 101: "CLIENT_TIMEOUT", 202} 203 204var ErrorReasonS2C_value = map[string]int32{ 205 "NO_ERROR": 0, 206 "COVERT_STREAM": 1, 207 "CLIENT_REPORTED": 2, 208 "CLIENT_PROTOCOL": 3, 209 "STATION_INTERNAL": 4, 210 "DECOY_OVERLOAD": 5, 211 "CLIENT_STREAM": 100, 212 "CLIENT_TIMEOUT": 101, 213} 214 215func (x ErrorReasonS2C) Enum() *ErrorReasonS2C { 216 p := new(ErrorReasonS2C) 217 *p = x 218 return p 219} 220 221func (x ErrorReasonS2C) String() string { 222 return proto.EnumName(ErrorReasonS2C_name, int32(x)) 223} 224 225func (x *ErrorReasonS2C) UnmarshalJSON(data []byte) error { 226 value, err := proto.UnmarshalJSONEnum(ErrorReasonS2C_value, data, "ErrorReasonS2C") 227 if err != nil { 228 return err 229 } 230 *x = ErrorReasonS2C(value) 231 return nil 232} 233 234func (ErrorReasonS2C) EnumDescriptor() ([]byte, []int) { 235 return fileDescriptor_39f66308029891ad, []int{3} 236} 237 238type TransportType int32 239 240const ( 241 TransportType_Null TransportType = 0 242 TransportType_Min TransportType = 1 243 TransportType_Obfs4 TransportType = 2 244) 245 246var TransportType_name = map[int32]string{ 247 0: "Null", 248 1: "Min", 249 2: "Obfs4", 250} 251 252var TransportType_value = map[string]int32{ 253 "Null": 0, 254 "Min": 1, 255 "Obfs4": 2, 256} 257 258func (x TransportType) Enum() *TransportType { 259 p := new(TransportType) 260 *p = x 261 return p 262} 263 264func (x TransportType) String() string { 265 return proto.EnumName(TransportType_name, int32(x)) 266} 267 268func (x *TransportType) UnmarshalJSON(data []byte) error { 269 value, err := proto.UnmarshalJSONEnum(TransportType_value, data, "TransportType") 270 if err != nil { 271 return err 272 } 273 *x = TransportType(value) 274 return nil 275} 276 277func (TransportType) EnumDescriptor() ([]byte, []int) { 278 return fileDescriptor_39f66308029891ad, []int{4} 279} 280 281type RegistrationSource int32 282 283const ( 284 RegistrationSource_Unspecified RegistrationSource = 0 285 RegistrationSource_Detector RegistrationSource = 1 286 RegistrationSource_API RegistrationSource = 2 287 RegistrationSource_DetectorPrescan RegistrationSource = 3 288) 289 290var RegistrationSource_name = map[int32]string{ 291 0: "Unspecified", 292 1: "Detector", 293 2: "API", 294 3: "DetectorPrescan", 295} 296 297var RegistrationSource_value = map[string]int32{ 298 "Unspecified": 0, 299 "Detector": 1, 300 "API": 2, 301 "DetectorPrescan": 3, 302} 303 304func (x RegistrationSource) Enum() *RegistrationSource { 305 p := new(RegistrationSource) 306 *p = x 307 return p 308} 309 310func (x RegistrationSource) String() string { 311 return proto.EnumName(RegistrationSource_name, int32(x)) 312} 313 314func (x *RegistrationSource) UnmarshalJSON(data []byte) error { 315 value, err := proto.UnmarshalJSONEnum(RegistrationSource_value, data, "RegistrationSource") 316 if err != nil { 317 return err 318 } 319 *x = RegistrationSource(value) 320 return nil 321} 322 323func (RegistrationSource) EnumDescriptor() ([]byte, []int) { 324 return fileDescriptor_39f66308029891ad, []int{5} 325} 326 327type PubKey struct { 328 // A public key, as used by the station. 329 Key []byte `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` 330 Type *KeyType `protobuf:"varint,2,opt,name=type,enum=tapdance.KeyType" json:"type,omitempty"` 331 XXX_NoUnkeyedLiteral struct{} `json:"-"` 332 XXX_unrecognized []byte `json:"-"` 333 XXX_sizecache int32 `json:"-"` 334} 335 336func (m *PubKey) Reset() { *m = PubKey{} } 337func (m *PubKey) String() string { return proto.CompactTextString(m) } 338func (*PubKey) ProtoMessage() {} 339func (*PubKey) Descriptor() ([]byte, []int) { 340 return fileDescriptor_39f66308029891ad, []int{0} 341} 342 343func (m *PubKey) XXX_Unmarshal(b []byte) error { 344 return xxx_messageInfo_PubKey.Unmarshal(m, b) 345} 346func (m *PubKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 347 return xxx_messageInfo_PubKey.Marshal(b, m, deterministic) 348} 349func (m *PubKey) XXX_Merge(src proto.Message) { 350 xxx_messageInfo_PubKey.Merge(m, src) 351} 352func (m *PubKey) XXX_Size() int { 353 return xxx_messageInfo_PubKey.Size(m) 354} 355func (m *PubKey) XXX_DiscardUnknown() { 356 xxx_messageInfo_PubKey.DiscardUnknown(m) 357} 358 359var xxx_messageInfo_PubKey proto.InternalMessageInfo 360 361func (m *PubKey) GetKey() []byte { 362 if m != nil { 363 return m.Key 364 } 365 return nil 366} 367 368func (m *PubKey) GetType() KeyType { 369 if m != nil && m.Type != nil { 370 return *m.Type 371 } 372 return KeyType_AES_GCM_128 373} 374 375type TLSDecoySpec struct { 376 // The hostname/SNI to use for this host 377 // 378 // The hostname is the only required field, although other 379 // fields are expected to be present in most cases. 380 Hostname *string `protobuf:"bytes,1,opt,name=hostname" json:"hostname,omitempty"` 381 // The 32-bit ipv4 address, in network byte order 382 // 383 // If the IPv4 address is absent, then it may be resolved via 384 // DNS by the client, or the client may discard this decoy spec 385 // if local DNS is untrusted, or the service may be multihomed. 386 Ipv4Addr *uint32 `protobuf:"fixed32,2,opt,name=ipv4addr" json:"ipv4addr,omitempty"` 387 // The 128-bit ipv6 address, in network byte order 388 Ipv6Addr []byte `protobuf:"bytes,6,opt,name=ipv6addr" json:"ipv6addr,omitempty"` 389 // The Tapdance station public key to use when contacting this 390 // decoy 391 // 392 // If omitted, the default station public key (if any) is used. 393 Pubkey *PubKey `protobuf:"bytes,3,opt,name=pubkey" json:"pubkey,omitempty"` 394 // The maximum duration, in milliseconds, to maintain an open 395 // connection to this decoy (because the decoy may close the 396 // connection itself after this length of time) 397 // 398 // If omitted, a default of 30,000 milliseconds is assumed. 399 Timeout *uint32 `protobuf:"varint,4,opt,name=timeout" json:"timeout,omitempty"` 400 // The maximum TCP window size to attempt to use for this decoy. 401 // 402 // If omitted, a default of 15360 is assumed. 403 // 404 // TODO: the default is based on the current heuristic of only 405 // using decoys that permit windows of 15KB or larger. If this 406 // heuristic changes, then this default doesn't make sense. 407 Tcpwin *uint32 `protobuf:"varint,5,opt,name=tcpwin" json:"tcpwin,omitempty"` 408 XXX_NoUnkeyedLiteral struct{} `json:"-"` 409 XXX_unrecognized []byte `json:"-"` 410 XXX_sizecache int32 `json:"-"` 411} 412 413func (m *TLSDecoySpec) Reset() { *m = TLSDecoySpec{} } 414func (m *TLSDecoySpec) String() string { return proto.CompactTextString(m) } 415func (*TLSDecoySpec) ProtoMessage() {} 416func (*TLSDecoySpec) Descriptor() ([]byte, []int) { 417 return fileDescriptor_39f66308029891ad, []int{1} 418} 419 420func (m *TLSDecoySpec) XXX_Unmarshal(b []byte) error { 421 return xxx_messageInfo_TLSDecoySpec.Unmarshal(m, b) 422} 423func (m *TLSDecoySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 424 return xxx_messageInfo_TLSDecoySpec.Marshal(b, m, deterministic) 425} 426func (m *TLSDecoySpec) XXX_Merge(src proto.Message) { 427 xxx_messageInfo_TLSDecoySpec.Merge(m, src) 428} 429func (m *TLSDecoySpec) XXX_Size() int { 430 return xxx_messageInfo_TLSDecoySpec.Size(m) 431} 432func (m *TLSDecoySpec) XXX_DiscardUnknown() { 433 xxx_messageInfo_TLSDecoySpec.DiscardUnknown(m) 434} 435 436var xxx_messageInfo_TLSDecoySpec proto.InternalMessageInfo 437 438func (m *TLSDecoySpec) GetHostname() string { 439 if m != nil && m.Hostname != nil { 440 return *m.Hostname 441 } 442 return "" 443} 444 445func (m *TLSDecoySpec) GetIpv4Addr() uint32 { 446 if m != nil && m.Ipv4Addr != nil { 447 return *m.Ipv4Addr 448 } 449 return 0 450} 451 452func (m *TLSDecoySpec) GetIpv6Addr() []byte { 453 if m != nil { 454 return m.Ipv6Addr 455 } 456 return nil 457} 458 459func (m *TLSDecoySpec) GetPubkey() *PubKey { 460 if m != nil { 461 return m.Pubkey 462 } 463 return nil 464} 465 466func (m *TLSDecoySpec) GetTimeout() uint32 { 467 if m != nil && m.Timeout != nil { 468 return *m.Timeout 469 } 470 return 0 471} 472 473func (m *TLSDecoySpec) GetTcpwin() uint32 { 474 if m != nil && m.Tcpwin != nil { 475 return *m.Tcpwin 476 } 477 return 0 478} 479 480type ClientConf struct { 481 DecoyList *DecoyList `protobuf:"bytes,1,opt,name=decoy_list,json=decoyList" json:"decoy_list,omitempty"` 482 Generation *uint32 `protobuf:"varint,2,opt,name=generation" json:"generation,omitempty"` 483 DefaultPubkey *PubKey `protobuf:"bytes,3,opt,name=default_pubkey,json=defaultPubkey" json:"default_pubkey,omitempty"` 484 DarkDecoyBlocks *DarkDecoyBlocks `protobuf:"bytes,4,opt,name=dark_decoy_blocks,json=darkDecoyBlocks" json:"dark_decoy_blocks,omitempty"` 485 ConjurePubkey *PubKey `protobuf:"bytes,5,opt,name=conjure_pubkey,json=conjurePubkey" json:"conjure_pubkey,omitempty"` 486 XXX_NoUnkeyedLiteral struct{} `json:"-"` 487 XXX_unrecognized []byte `json:"-"` 488 XXX_sizecache int32 `json:"-"` 489} 490 491func (m *ClientConf) Reset() { *m = ClientConf{} } 492func (m *ClientConf) String() string { return proto.CompactTextString(m) } 493func (*ClientConf) ProtoMessage() {} 494func (*ClientConf) Descriptor() ([]byte, []int) { 495 return fileDescriptor_39f66308029891ad, []int{2} 496} 497 498func (m *ClientConf) XXX_Unmarshal(b []byte) error { 499 return xxx_messageInfo_ClientConf.Unmarshal(m, b) 500} 501func (m *ClientConf) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 502 return xxx_messageInfo_ClientConf.Marshal(b, m, deterministic) 503} 504func (m *ClientConf) XXX_Merge(src proto.Message) { 505 xxx_messageInfo_ClientConf.Merge(m, src) 506} 507func (m *ClientConf) XXX_Size() int { 508 return xxx_messageInfo_ClientConf.Size(m) 509} 510func (m *ClientConf) XXX_DiscardUnknown() { 511 xxx_messageInfo_ClientConf.DiscardUnknown(m) 512} 513 514var xxx_messageInfo_ClientConf proto.InternalMessageInfo 515 516func (m *ClientConf) GetDecoyList() *DecoyList { 517 if m != nil { 518 return m.DecoyList 519 } 520 return nil 521} 522 523func (m *ClientConf) GetGeneration() uint32 { 524 if m != nil && m.Generation != nil { 525 return *m.Generation 526 } 527 return 0 528} 529 530func (m *ClientConf) GetDefaultPubkey() *PubKey { 531 if m != nil { 532 return m.DefaultPubkey 533 } 534 return nil 535} 536 537func (m *ClientConf) GetDarkDecoyBlocks() *DarkDecoyBlocks { 538 if m != nil { 539 return m.DarkDecoyBlocks 540 } 541 return nil 542} 543 544func (m *ClientConf) GetConjurePubkey() *PubKey { 545 if m != nil { 546 return m.ConjurePubkey 547 } 548 return nil 549} 550 551type DecoyList struct { 552 TlsDecoys []*TLSDecoySpec `protobuf:"bytes,1,rep,name=tls_decoys,json=tlsDecoys" json:"tls_decoys,omitempty"` 553 XXX_NoUnkeyedLiteral struct{} `json:"-"` 554 XXX_unrecognized []byte `json:"-"` 555 XXX_sizecache int32 `json:"-"` 556} 557 558func (m *DecoyList) Reset() { *m = DecoyList{} } 559func (m *DecoyList) String() string { return proto.CompactTextString(m) } 560func (*DecoyList) ProtoMessage() {} 561func (*DecoyList) Descriptor() ([]byte, []int) { 562 return fileDescriptor_39f66308029891ad, []int{3} 563} 564 565func (m *DecoyList) XXX_Unmarshal(b []byte) error { 566 return xxx_messageInfo_DecoyList.Unmarshal(m, b) 567} 568func (m *DecoyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 569 return xxx_messageInfo_DecoyList.Marshal(b, m, deterministic) 570} 571func (m *DecoyList) XXX_Merge(src proto.Message) { 572 xxx_messageInfo_DecoyList.Merge(m, src) 573} 574func (m *DecoyList) XXX_Size() int { 575 return xxx_messageInfo_DecoyList.Size(m) 576} 577func (m *DecoyList) XXX_DiscardUnknown() { 578 xxx_messageInfo_DecoyList.DiscardUnknown(m) 579} 580 581var xxx_messageInfo_DecoyList proto.InternalMessageInfo 582 583func (m *DecoyList) GetTlsDecoys() []*TLSDecoySpec { 584 if m != nil { 585 return m.TlsDecoys 586 } 587 return nil 588} 589 590type DarkDecoyBlocks struct { 591 Blocks []string `protobuf:"bytes,1,rep,name=blocks" json:"blocks,omitempty"` 592 XXX_NoUnkeyedLiteral struct{} `json:"-"` 593 XXX_unrecognized []byte `json:"-"` 594 XXX_sizecache int32 `json:"-"` 595} 596 597func (m *DarkDecoyBlocks) Reset() { *m = DarkDecoyBlocks{} } 598func (m *DarkDecoyBlocks) String() string { return proto.CompactTextString(m) } 599func (*DarkDecoyBlocks) ProtoMessage() {} 600func (*DarkDecoyBlocks) Descriptor() ([]byte, []int) { 601 return fileDescriptor_39f66308029891ad, []int{4} 602} 603 604func (m *DarkDecoyBlocks) XXX_Unmarshal(b []byte) error { 605 return xxx_messageInfo_DarkDecoyBlocks.Unmarshal(m, b) 606} 607func (m *DarkDecoyBlocks) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 608 return xxx_messageInfo_DarkDecoyBlocks.Marshal(b, m, deterministic) 609} 610func (m *DarkDecoyBlocks) XXX_Merge(src proto.Message) { 611 xxx_messageInfo_DarkDecoyBlocks.Merge(m, src) 612} 613func (m *DarkDecoyBlocks) XXX_Size() int { 614 return xxx_messageInfo_DarkDecoyBlocks.Size(m) 615} 616func (m *DarkDecoyBlocks) XXX_DiscardUnknown() { 617 xxx_messageInfo_DarkDecoyBlocks.DiscardUnknown(m) 618} 619 620var xxx_messageInfo_DarkDecoyBlocks proto.InternalMessageInfo 621 622func (m *DarkDecoyBlocks) GetBlocks() []string { 623 if m != nil { 624 return m.Blocks 625 } 626 return nil 627} 628 629type StationToClient struct { 630 // Should accompany (at least) SESSION_INIT and CONFIRM_RECONNECT. 631 ProtocolVersion *uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion" json:"protocol_version,omitempty"` 632 // There might be a state transition. May be absent; absence should be 633 // treated identically to NO_CHANGE. 634 StateTransition *S2C_Transition `protobuf:"varint,2,opt,name=state_transition,json=stateTransition,enum=tapdance.S2C_Transition" json:"state_transition,omitempty"` 635 // The station can send client config info piggybacked 636 // on any message, as it sees fit 637 ConfigInfo *ClientConf `protobuf:"bytes,3,opt,name=config_info,json=configInfo" json:"config_info,omitempty"` 638 // If state_transition == S2C_ERROR, this field is the explanation. 639 ErrReason *ErrorReasonS2C `protobuf:"varint,4,opt,name=err_reason,json=errReason,enum=tapdance.ErrorReasonS2C" json:"err_reason,omitempty"` 640 // Signals client to stop connecting for following amount of seconds 641 TmpBackoff *uint32 `protobuf:"varint,5,opt,name=tmp_backoff,json=tmpBackoff" json:"tmp_backoff,omitempty"` 642 // Sent in SESSION_INIT, identifies the station that picked up 643 StationId *string `protobuf:"bytes,6,opt,name=station_id,json=stationId" json:"station_id,omitempty"` 644 // Random-sized junk to defeat packet size fingerprinting. 645 Padding []byte `protobuf:"bytes,100,opt,name=padding" json:"padding,omitempty"` 646 XXX_NoUnkeyedLiteral struct{} `json:"-"` 647 XXX_unrecognized []byte `json:"-"` 648 XXX_sizecache int32 `json:"-"` 649} 650 651func (m *StationToClient) Reset() { *m = StationToClient{} } 652func (m *StationToClient) String() string { return proto.CompactTextString(m) } 653func (*StationToClient) ProtoMessage() {} 654func (*StationToClient) Descriptor() ([]byte, []int) { 655 return fileDescriptor_39f66308029891ad, []int{5} 656} 657 658func (m *StationToClient) XXX_Unmarshal(b []byte) error { 659 return xxx_messageInfo_StationToClient.Unmarshal(m, b) 660} 661func (m *StationToClient) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 662 return xxx_messageInfo_StationToClient.Marshal(b, m, deterministic) 663} 664func (m *StationToClient) XXX_Merge(src proto.Message) { 665 xxx_messageInfo_StationToClient.Merge(m, src) 666} 667func (m *StationToClient) XXX_Size() int { 668 return xxx_messageInfo_StationToClient.Size(m) 669} 670func (m *StationToClient) XXX_DiscardUnknown() { 671 xxx_messageInfo_StationToClient.DiscardUnknown(m) 672} 673 674var xxx_messageInfo_StationToClient proto.InternalMessageInfo 675 676func (m *StationToClient) GetProtocolVersion() uint32 { 677 if m != nil && m.ProtocolVersion != nil { 678 return *m.ProtocolVersion 679 } 680 return 0 681} 682 683func (m *StationToClient) GetStateTransition() S2C_Transition { 684 if m != nil && m.StateTransition != nil { 685 return *m.StateTransition 686 } 687 return S2C_Transition_S2C_NO_CHANGE 688} 689 690func (m *StationToClient) GetConfigInfo() *ClientConf { 691 if m != nil { 692 return m.ConfigInfo 693 } 694 return nil 695} 696 697func (m *StationToClient) GetErrReason() ErrorReasonS2C { 698 if m != nil && m.ErrReason != nil { 699 return *m.ErrReason 700 } 701 return ErrorReasonS2C_NO_ERROR 702} 703 704func (m *StationToClient) GetTmpBackoff() uint32 { 705 if m != nil && m.TmpBackoff != nil { 706 return *m.TmpBackoff 707 } 708 return 0 709} 710 711func (m *StationToClient) GetStationId() string { 712 if m != nil && m.StationId != nil { 713 return *m.StationId 714 } 715 return "" 716} 717 718func (m *StationToClient) GetPadding() []byte { 719 if m != nil { 720 return m.Padding 721 } 722 return nil 723} 724 725type RegistrationFlags struct { 726 UploadOnly *bool `protobuf:"varint,1,opt,name=upload_only,json=uploadOnly" json:"upload_only,omitempty"` 727 DarkDecoy *bool `protobuf:"varint,2,opt,name=dark_decoy,json=darkDecoy" json:"dark_decoy,omitempty"` 728 ProxyHeader *bool `protobuf:"varint,3,opt,name=proxy_header,json=proxyHeader" json:"proxy_header,omitempty"` 729 Use_TIL *bool `protobuf:"varint,4,opt,name=use_TIL,json=useTIL" json:"use_TIL,omitempty"` 730 Prescanned *bool `protobuf:"varint,5,opt,name=prescanned" json:"prescanned,omitempty"` 731 XXX_NoUnkeyedLiteral struct{} `json:"-"` 732 XXX_unrecognized []byte `json:"-"` 733 XXX_sizecache int32 `json:"-"` 734} 735 736func (m *RegistrationFlags) Reset() { *m = RegistrationFlags{} } 737func (m *RegistrationFlags) String() string { return proto.CompactTextString(m) } 738func (*RegistrationFlags) ProtoMessage() {} 739func (*RegistrationFlags) Descriptor() ([]byte, []int) { 740 return fileDescriptor_39f66308029891ad, []int{6} 741} 742 743func (m *RegistrationFlags) XXX_Unmarshal(b []byte) error { 744 return xxx_messageInfo_RegistrationFlags.Unmarshal(m, b) 745} 746func (m *RegistrationFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 747 return xxx_messageInfo_RegistrationFlags.Marshal(b, m, deterministic) 748} 749func (m *RegistrationFlags) XXX_Merge(src proto.Message) { 750 xxx_messageInfo_RegistrationFlags.Merge(m, src) 751} 752func (m *RegistrationFlags) XXX_Size() int { 753 return xxx_messageInfo_RegistrationFlags.Size(m) 754} 755func (m *RegistrationFlags) XXX_DiscardUnknown() { 756 xxx_messageInfo_RegistrationFlags.DiscardUnknown(m) 757} 758 759var xxx_messageInfo_RegistrationFlags proto.InternalMessageInfo 760 761func (m *RegistrationFlags) GetUploadOnly() bool { 762 if m != nil && m.UploadOnly != nil { 763 return *m.UploadOnly 764 } 765 return false 766} 767 768func (m *RegistrationFlags) GetDarkDecoy() bool { 769 if m != nil && m.DarkDecoy != nil { 770 return *m.DarkDecoy 771 } 772 return false 773} 774 775func (m *RegistrationFlags) GetProxyHeader() bool { 776 if m != nil && m.ProxyHeader != nil { 777 return *m.ProxyHeader 778 } 779 return false 780} 781 782func (m *RegistrationFlags) GetUse_TIL() bool { 783 if m != nil && m.Use_TIL != nil { 784 return *m.Use_TIL 785 } 786 return false 787} 788 789func (m *RegistrationFlags) GetPrescanned() bool { 790 if m != nil && m.Prescanned != nil { 791 return *m.Prescanned 792 } 793 return false 794} 795 796type ClientToStation struct { 797 ProtocolVersion *uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion" json:"protocol_version,omitempty"` 798 // The client reports its decoy list's version number here, which the 799 // station can use to decide whether to send an updated one. The station 800 // should always send a list if this field is set to 0. 801 DecoyListGeneration *uint32 `protobuf:"varint,2,opt,name=decoy_list_generation,json=decoyListGeneration" json:"decoy_list_generation,omitempty"` 802 StateTransition *C2S_Transition `protobuf:"varint,3,opt,name=state_transition,json=stateTransition,enum=tapdance.C2S_Transition" json:"state_transition,omitempty"` 803 // The position in the overall session's upload sequence where the current 804 // YIELD=>ACQUIRE switchover is happening. 805 UploadSync *uint64 `protobuf:"varint,4,opt,name=upload_sync,json=uploadSync" json:"upload_sync,omitempty"` 806 // List of decoys that client have unsuccessfully tried in current session. 807 // Could be sent in chunks 808 FailedDecoys []string `protobuf:"bytes,10,rep,name=failed_decoys,json=failedDecoys" json:"failed_decoys,omitempty"` 809 Stats *SessionStats `protobuf:"bytes,11,opt,name=stats" json:"stats,omitempty"` 810 // NullTransport, MinTransport, Obfs4Transport, etc. Transport type we want from phantom proxy 811 Transport *TransportType `protobuf:"varint,12,opt,name=transport,enum=tapdance.TransportType" json:"transport,omitempty"` 812 // Station is only required to check this variable during session initialization. 813 // If set, station must facilitate connection to said target by itself, i.e. write into squid 814 // socket an HTTP/SOCKS/any other connection request. 815 // covert_address must have exactly one ':' colon, that separates host (literal IP address or 816 // resolvable hostname) and port 817 // TODO: make it required for initialization, and stop connecting any client straight to squid? 818 CovertAddress *string `protobuf:"bytes,20,opt,name=covert_address,json=covertAddress" json:"covert_address,omitempty"` 819 // Used in dark decoys to signal which dark decoy it will connect to. 820 MaskedDecoyServerName *string `protobuf:"bytes,21,opt,name=masked_decoy_server_name,json=maskedDecoyServerName" json:"masked_decoy_server_name,omitempty"` 821 // Used to indicate to server if client is registering v4, v6 or both 822 V6Support *bool `protobuf:"varint,22,opt,name=v6_support,json=v6Support" json:"v6_support,omitempty"` 823 V4Support *bool `protobuf:"varint,23,opt,name=v4_support,json=v4Support" json:"v4_support,omitempty"` 824 // A collection of optional flags for the registration. 825 Flags *RegistrationFlags `protobuf:"bytes,24,opt,name=flags" json:"flags,omitempty"` 826 // Random-sized junk to defeat packet size fingerprinting. 827 Padding []byte `protobuf:"bytes,100,opt,name=padding" json:"padding,omitempty"` 828 XXX_NoUnkeyedLiteral struct{} `json:"-"` 829 XXX_unrecognized []byte `json:"-"` 830 XXX_sizecache int32 `json:"-"` 831} 832 833func (m *ClientToStation) Reset() { *m = ClientToStation{} } 834func (m *ClientToStation) String() string { return proto.CompactTextString(m) } 835func (*ClientToStation) ProtoMessage() {} 836func (*ClientToStation) Descriptor() ([]byte, []int) { 837 return fileDescriptor_39f66308029891ad, []int{7} 838} 839 840func (m *ClientToStation) XXX_Unmarshal(b []byte) error { 841 return xxx_messageInfo_ClientToStation.Unmarshal(m, b) 842} 843func (m *ClientToStation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 844 return xxx_messageInfo_ClientToStation.Marshal(b, m, deterministic) 845} 846func (m *ClientToStation) XXX_Merge(src proto.Message) { 847 xxx_messageInfo_ClientToStation.Merge(m, src) 848} 849func (m *ClientToStation) XXX_Size() int { 850 return xxx_messageInfo_ClientToStation.Size(m) 851} 852func (m *ClientToStation) XXX_DiscardUnknown() { 853 xxx_messageInfo_ClientToStation.DiscardUnknown(m) 854} 855 856var xxx_messageInfo_ClientToStation proto.InternalMessageInfo 857 858func (m *ClientToStation) GetProtocolVersion() uint32 { 859 if m != nil && m.ProtocolVersion != nil { 860 return *m.ProtocolVersion 861 } 862 return 0 863} 864 865func (m *ClientToStation) GetDecoyListGeneration() uint32 { 866 if m != nil && m.DecoyListGeneration != nil { 867 return *m.DecoyListGeneration 868 } 869 return 0 870} 871 872func (m *ClientToStation) GetStateTransition() C2S_Transition { 873 if m != nil && m.StateTransition != nil { 874 return *m.StateTransition 875 } 876 return C2S_Transition_C2S_NO_CHANGE 877} 878 879func (m *ClientToStation) GetUploadSync() uint64 { 880 if m != nil && m.UploadSync != nil { 881 return *m.UploadSync 882 } 883 return 0 884} 885 886func (m *ClientToStation) GetFailedDecoys() []string { 887 if m != nil { 888 return m.FailedDecoys 889 } 890 return nil 891} 892 893func (m *ClientToStation) GetStats() *SessionStats { 894 if m != nil { 895 return m.Stats 896 } 897 return nil 898} 899 900func (m *ClientToStation) GetTransport() TransportType { 901 if m != nil && m.Transport != nil { 902 return *m.Transport 903 } 904 return TransportType_Null 905} 906 907func (m *ClientToStation) GetCovertAddress() string { 908 if m != nil && m.CovertAddress != nil { 909 return *m.CovertAddress 910 } 911 return "" 912} 913 914func (m *ClientToStation) GetMaskedDecoyServerName() string { 915 if m != nil && m.MaskedDecoyServerName != nil { 916 return *m.MaskedDecoyServerName 917 } 918 return "" 919} 920 921func (m *ClientToStation) GetV6Support() bool { 922 if m != nil && m.V6Support != nil { 923 return *m.V6Support 924 } 925 return false 926} 927 928func (m *ClientToStation) GetV4Support() bool { 929 if m != nil && m.V4Support != nil { 930 return *m.V4Support 931 } 932 return false 933} 934 935func (m *ClientToStation) GetFlags() *RegistrationFlags { 936 if m != nil { 937 return m.Flags 938 } 939 return nil 940} 941 942func (m *ClientToStation) GetPadding() []byte { 943 if m != nil { 944 return m.Padding 945 } 946 return nil 947} 948 949type C2SWrapper struct { 950 SharedSecret []byte `protobuf:"bytes,1,opt,name=shared_secret,json=sharedSecret" json:"shared_secret,omitempty"` 951 RegistrationPayload *ClientToStation `protobuf:"bytes,3,opt,name=registration_payload,json=registrationPayload" json:"registration_payload,omitempty"` 952 RegistrationSource *RegistrationSource `protobuf:"varint,4,opt,name=registration_source,json=registrationSource,enum=tapdance.RegistrationSource" json:"registration_source,omitempty"` 953 // client source address when receiving a registration 954 RegistrationAddress []byte `protobuf:"bytes,6,opt,name=registration_address,json=registrationAddress" json:"registration_address,omitempty"` 955 // Decoy address used when registering over Decoy registrar 956 DecoyAddress []byte `protobuf:"bytes,7,opt,name=decoy_address,json=decoyAddress" json:"decoy_address,omitempty"` 957 XXX_NoUnkeyedLiteral struct{} `json:"-"` 958 XXX_unrecognized []byte `json:"-"` 959 XXX_sizecache int32 `json:"-"` 960} 961 962func (m *C2SWrapper) Reset() { *m = C2SWrapper{} } 963func (m *C2SWrapper) String() string { return proto.CompactTextString(m) } 964func (*C2SWrapper) ProtoMessage() {} 965func (*C2SWrapper) Descriptor() ([]byte, []int) { 966 return fileDescriptor_39f66308029891ad, []int{8} 967} 968 969func (m *C2SWrapper) XXX_Unmarshal(b []byte) error { 970 return xxx_messageInfo_C2SWrapper.Unmarshal(m, b) 971} 972func (m *C2SWrapper) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 973 return xxx_messageInfo_C2SWrapper.Marshal(b, m, deterministic) 974} 975func (m *C2SWrapper) XXX_Merge(src proto.Message) { 976 xxx_messageInfo_C2SWrapper.Merge(m, src) 977} 978func (m *C2SWrapper) XXX_Size() int { 979 return xxx_messageInfo_C2SWrapper.Size(m) 980} 981func (m *C2SWrapper) XXX_DiscardUnknown() { 982 xxx_messageInfo_C2SWrapper.DiscardUnknown(m) 983} 984 985var xxx_messageInfo_C2SWrapper proto.InternalMessageInfo 986 987func (m *C2SWrapper) GetSharedSecret() []byte { 988 if m != nil { 989 return m.SharedSecret 990 } 991 return nil 992} 993 994func (m *C2SWrapper) GetRegistrationPayload() *ClientToStation { 995 if m != nil { 996 return m.RegistrationPayload 997 } 998 return nil 999} 1000 1001func (m *C2SWrapper) GetRegistrationSource() RegistrationSource { 1002 if m != nil && m.RegistrationSource != nil { 1003 return *m.RegistrationSource 1004 } 1005 return RegistrationSource_Unspecified 1006} 1007 1008func (m *C2SWrapper) GetRegistrationAddress() []byte { 1009 if m != nil { 1010 return m.RegistrationAddress 1011 } 1012 return nil 1013} 1014 1015func (m *C2SWrapper) GetDecoyAddress() []byte { 1016 if m != nil { 1017 return m.DecoyAddress 1018 } 1019 return nil 1020} 1021 1022type SessionStats struct { 1023 FailedDecoysAmount *uint32 `protobuf:"varint,20,opt,name=failed_decoys_amount,json=failedDecoysAmount" json:"failed_decoys_amount,omitempty"` 1024 // Applicable to whole session: 1025 TotalTimeToConnect *uint32 `protobuf:"varint,31,opt,name=total_time_to_connect,json=totalTimeToConnect" json:"total_time_to_connect,omitempty"` 1026 // Last (i.e. successful) decoy: 1027 RttToStation *uint32 `protobuf:"varint,33,opt,name=rtt_to_station,json=rttToStation" json:"rtt_to_station,omitempty"` 1028 TlsToDecoy *uint32 `protobuf:"varint,38,opt,name=tls_to_decoy,json=tlsToDecoy" json:"tls_to_decoy,omitempty"` 1029 TcpToDecoy *uint32 `protobuf:"varint,39,opt,name=tcp_to_decoy,json=tcpToDecoy" json:"tcp_to_decoy,omitempty"` 1030 XXX_NoUnkeyedLiteral struct{} `json:"-"` 1031 XXX_unrecognized []byte `json:"-"` 1032 XXX_sizecache int32 `json:"-"` 1033} 1034 1035func (m *SessionStats) Reset() { *m = SessionStats{} } 1036func (m *SessionStats) String() string { return proto.CompactTextString(m) } 1037func (*SessionStats) ProtoMessage() {} 1038func (*SessionStats) Descriptor() ([]byte, []int) { 1039 return fileDescriptor_39f66308029891ad, []int{9} 1040} 1041 1042func (m *SessionStats) XXX_Unmarshal(b []byte) error { 1043 return xxx_messageInfo_SessionStats.Unmarshal(m, b) 1044} 1045func (m *SessionStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { 1046 return xxx_messageInfo_SessionStats.Marshal(b, m, deterministic) 1047} 1048func (m *SessionStats) XXX_Merge(src proto.Message) { 1049 xxx_messageInfo_SessionStats.Merge(m, src) 1050} 1051func (m *SessionStats) XXX_Size() int { 1052 return xxx_messageInfo_SessionStats.Size(m) 1053} 1054func (m *SessionStats) XXX_DiscardUnknown() { 1055 xxx_messageInfo_SessionStats.DiscardUnknown(m) 1056} 1057 1058var xxx_messageInfo_SessionStats proto.InternalMessageInfo 1059 1060func (m *SessionStats) GetFailedDecoysAmount() uint32 { 1061 if m != nil && m.FailedDecoysAmount != nil { 1062 return *m.FailedDecoysAmount 1063 } 1064 return 0 1065} 1066 1067func (m *SessionStats) GetTotalTimeToConnect() uint32 { 1068 if m != nil && m.TotalTimeToConnect != nil { 1069 return *m.TotalTimeToConnect 1070 } 1071 return 0 1072} 1073 1074func (m *SessionStats) GetRttToStation() uint32 { 1075 if m != nil && m.RttToStation != nil { 1076 return *m.RttToStation 1077 } 1078 return 0 1079} 1080 1081func (m *SessionStats) GetTlsToDecoy() uint32 { 1082 if m != nil && m.TlsToDecoy != nil { 1083 return *m.TlsToDecoy 1084 } 1085 return 0 1086} 1087 1088func (m *SessionStats) GetTcpToDecoy() uint32 { 1089 if m != nil && m.TcpToDecoy != nil { 1090 return *m.TcpToDecoy 1091 } 1092 return 0 1093} 1094 1095func init() { 1096 proto.RegisterEnum("tapdance.KeyType", KeyType_name, KeyType_value) 1097 proto.RegisterEnum("tapdance.C2S_Transition", C2S_Transition_name, C2S_Transition_value) 1098 proto.RegisterEnum("tapdance.S2C_Transition", S2C_Transition_name, S2C_Transition_value) 1099 proto.RegisterEnum("tapdance.ErrorReasonS2C", ErrorReasonS2C_name, ErrorReasonS2C_value) 1100 proto.RegisterEnum("tapdance.TransportType", TransportType_name, TransportType_value) 1101 proto.RegisterEnum("tapdance.RegistrationSource", RegistrationSource_name, RegistrationSource_value) 1102 proto.RegisterType((*PubKey)(nil), "tapdance.PubKey") 1103 proto.RegisterType((*TLSDecoySpec)(nil), "tapdance.TLSDecoySpec") 1104 proto.RegisterType((*ClientConf)(nil), "tapdance.ClientConf") 1105 proto.RegisterType((*DecoyList)(nil), "tapdance.DecoyList") 1106 proto.RegisterType((*DarkDecoyBlocks)(nil), "tapdance.DarkDecoyBlocks") 1107 proto.RegisterType((*StationToClient)(nil), "tapdance.StationToClient") 1108 proto.RegisterType((*RegistrationFlags)(nil), "tapdance.RegistrationFlags") 1109 proto.RegisterType((*ClientToStation)(nil), "tapdance.ClientToStation") 1110 proto.RegisterType((*C2SWrapper)(nil), "tapdance.C2SWrapper") 1111 proto.RegisterType((*SessionStats)(nil), "tapdance.SessionStats") 1112} 1113 1114func init() { proto.RegisterFile("signalling.proto", fileDescriptor_39f66308029891ad) } 1115 1116var fileDescriptor_39f66308029891ad = []byte{ 1117 // 1451 bytes of a gzipped FileDescriptorProto 1118 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x72, 0xdb, 0xba, 1119 0x11, 0x36, 0xfd, 0x2b, 0xad, 0xfe, 0x68, 0xf8, 0x8f, 0xe9, 0x39, 0xa7, 0xc7, 0x47, 0x69, 0x5a, 1120 0xc7, 0x6d, 0x33, 0xb5, 0xc6, 0x76, 0x7a, 0xab, 0xd0, 0x4c, 0xa2, 0x89, 0x2c, 0x2a, 0x20, 0x9d, 1121 0x36, 0xed, 0x05, 0x86, 0x26, 0x21, 0x87, 0x35, 0x4d, 0x72, 0x00, 0xc8, 0xad, 0xde, 0xa4, 0x7d, 1122 0x81, 0x5e, 0x75, 0xa6, 0x6f, 0xd0, 0x17, 0xc8, 0x33, 0xf4, 0xba, 0x8f, 0xd1, 0x0e, 0x00, 0x52, 1123 0xa2, 0xec, 0x34, 0x9d, 0xde, 0x09, 0xdf, 0x2e, 0xb0, 0xfb, 0xed, 0x7e, 0xbb, 0x14, 0x98, 0x3c, 1124 0xbe, 0x49, 0x83, 0x24, 0x89, 0xd3, 0x9b, 0x17, 0x39, 0xcb, 0x44, 0x86, 0x6a, 0x22, 0xc8, 0xa3, 1125 0x20, 0x0d, 0x69, 0xb7, 0x0f, 0x9b, 0xe3, 0xe9, 0xf5, 0x3b, 0x3a, 0x43, 0x26, 0xac, 0xdd, 0xd2, 1126 0x99, 0x65, 0x1c, 0x1a, 0x47, 0x4d, 0x2c, 0x7f, 0xa2, 0x67, 0xb0, 0x2e, 0x66, 0x39, 0xb5, 0x56, 1127 0x0f, 0x8d, 0xa3, 0x76, 0x6f, 0xfb, 0x45, 0x79, 0xe9, 0xc5, 0x3b, 0x3a, 0xf3, 0x67, 0x39, 0xc5, 1128 0xca, 0xdc, 0xfd, 0x87, 0x01, 0x4d, 0x7f, 0xe8, 0x5d, 0xd0, 0x30, 0x9b, 0x79, 0x39, 0x0d, 0xd1, 1129 0x8f, 0xa0, 0xf6, 0x29, 0xe3, 0x22, 0x0d, 0xee, 0xa8, 0x7a, 0xae, 0x8e, 0xe7, 0x67, 0x69, 0x8b, 1130 0xf3, 0xfb, 0xd3, 0x20, 0x8a, 0x98, 0x7a, 0x77, 0x0b, 0xcf, 0xcf, 0x85, 0xed, 0x5c, 0xd9, 0x36, 1131 0x55, 0x1a, 0xf3, 0x33, 0x3a, 0x82, 0xcd, 0x7c, 0x7a, 0x2d, 0x13, 0x5c, 0x3b, 0x34, 0x8e, 0x1a, 1132 0x3d, 0x73, 0x91, 0x8d, 0xce, 0x1f, 0x17, 0x76, 0x64, 0xc1, 0x96, 0x88, 0xef, 0x68, 0x36, 0x15, 1133 0xd6, 0xfa, 0xa1, 0x71, 0xd4, 0xc2, 0xe5, 0x11, 0xed, 0xc3, 0xa6, 0x08, 0xf3, 0x3f, 0xc6, 0xa9, 1134 0xb5, 0xa1, 0x0c, 0xc5, 0xa9, 0xfb, 0x97, 0x55, 0x00, 0x3b, 0x89, 0x69, 0x2a, 0xec, 0x2c, 0x9d, 1135 0xa0, 0x1e, 0x40, 0x24, 0xb9, 0x90, 0x24, 0xe6, 0x42, 0x11, 0x68, 0xf4, 0x76, 0x16, 0xe1, 0x14, 1136 0xcf, 0x61, 0xcc, 0x05, 0xae, 0x47, 0xe5, 0x4f, 0xf4, 0x63, 0x80, 0x1b, 0x9a, 0x52, 0x16, 0x88, 1137 0x38, 0x4b, 0x15, 0xb1, 0x16, 0xae, 0x20, 0xe8, 0x25, 0xb4, 0x23, 0x3a, 0x09, 0xa6, 0x89, 0x20, 1138 0xff, 0x83, 0x46, 0xab, 0xf0, 0x1b, 0x6b, 0x36, 0x0e, 0x6c, 0x47, 0x01, 0xbb, 0x25, 0x3a, 0xa3, 1139 0xeb, 0x24, 0x0b, 0x6f, 0xb9, 0xe2, 0xd5, 0xe8, 0x3d, 0xa9, 0xe4, 0x14, 0xb0, 0x5b, 0x95, 0xd7, 1140 0x2b, 0xe5, 0x80, 0x3b, 0xd1, 0x32, 0x20, 0xe3, 0x87, 0x59, 0xfa, 0x87, 0x29, 0xa3, 0x65, 0xfc, 1141 0x8d, 0xff, 0x16, 0xbf, 0xf0, 0xd3, 0xf1, 0xbb, 0xaf, 0xa0, 0x3e, 0x27, 0x8c, 0xce, 0x00, 0x44, 1142 0xc2, 0x75, 0x2e, 0xdc, 0x32, 0x0e, 0xd7, 0x8e, 0x1a, 0xbd, 0xfd, 0xc5, 0x0b, 0x55, 0x11, 0xe0, 1143 0xba, 0x48, 0xb8, 0x3a, 0xf1, 0xee, 0x73, 0xe8, 0x3c, 0x48, 0x50, 0xb6, 0xa2, 0xe0, 0x22, 0x5f, 1144 0xa9, 0xe3, 0xe2, 0xd4, 0xfd, 0xbc, 0x0a, 0x1d, 0x4f, 0xa8, 0x9a, 0xf9, 0x99, 0xee, 0x09, 0x7a, 1145 0x0e, 0xa6, 0x52, 0x6d, 0x98, 0x25, 0xe4, 0x9e, 0x32, 0x2e, 0x2b, 0x6c, 0xa8, 0x0a, 0x77, 0x4a, 1146 0xfc, 0x83, 0x86, 0x91, 0x0d, 0x26, 0x17, 0x81, 0xa0, 0x44, 0xb0, 0x20, 0xe5, 0xf1, 0xbc, 0x19, 1147 0xed, 0x9e, 0xb5, 0x48, 0xd3, 0xeb, 0xd9, 0xc4, 0x9f, 0xdb, 0x71, 0x47, 0xdd, 0x58, 0x00, 0xe8, 1148 0x0c, 0x1a, 0x61, 0x96, 0x4e, 0xe2, 0x1b, 0x12, 0xa7, 0x93, 0xac, 0x68, 0xd4, 0xee, 0xe2, 0xfe, 1149 0x42, 0x2a, 0x18, 0xb4, 0xe3, 0x20, 0x9d, 0x64, 0xe8, 0x25, 0x00, 0x65, 0x8c, 0x30, 0x1a, 0xf0, 1150 0x2c, 0x55, 0x2d, 0x5a, 0x8a, 0xea, 0x30, 0x96, 0x31, 0xac, 0x8c, 0x5e, 0xcf, 0xc6, 0x75, 0xca, 1151 0x8a, 0x13, 0xfa, 0x1e, 0x1a, 0xe2, 0x2e, 0x27, 0xd7, 0x41, 0x78, 0x9b, 0x4d, 0x26, 0x85, 0x36, 1152 0x41, 0xdc, 0xe5, 0xaf, 0x34, 0x82, 0xbe, 0x03, 0xe0, 0xba, 0x26, 0x24, 0x8e, 0xd4, 0x64, 0xd4, 1153 0x71, 0xbd, 0x40, 0x06, 0x91, 0x14, 0x7c, 0x1e, 0x44, 0x51, 0x9c, 0xde, 0x58, 0x91, 0x9a, 0x9a, 1154 0xf2, 0xd8, 0xfd, 0xbb, 0x01, 0xdb, 0x98, 0xde, 0xc4, 0x5c, 0x68, 0x19, 0xbe, 0x4e, 0x82, 0x1b, 1155 0x2e, 0xe3, 0x4d, 0xf3, 0x24, 0x0b, 0x22, 0x92, 0xa5, 0x89, 0x1e, 0xf8, 0x1a, 0x06, 0x0d, 0xb9, 1156 0x69, 0x32, 0x93, 0xf1, 0x16, 0x9a, 0x53, 0xf5, 0xab, 0xe1, 0xfa, 0x5c, 0x51, 0xe8, 0x07, 0x68, 1157 0xe6, 0x2c, 0xfb, 0xd3, 0x8c, 0x7c, 0xa2, 0x41, 0x44, 0x99, 0x2a, 0x50, 0x0d, 0x37, 0x14, 0xf6, 1158 0x56, 0x41, 0xe8, 0x00, 0xb6, 0xa6, 0x9c, 0x12, 0x7f, 0x30, 0x54, 0x85, 0xa8, 0xe1, 0xcd, 0x29, 1159 0xa7, 0xfe, 0x60, 0x28, 0xe7, 0x24, 0x67, 0x94, 0x87, 0x41, 0x9a, 0xd2, 0x48, 0x51, 0xad, 0xe1, 1160 0x0a, 0xd2, 0xfd, 0xbc, 0x0e, 0x1d, 0x5d, 0x5f, 0x3f, 0x2b, 0x74, 0xf0, 0xff, 0xf4, 0xbf, 0x07, 1161 0x7b, 0x8b, 0xd1, 0x25, 0x8f, 0x26, 0x72, 0x67, 0x3e, 0xb0, 0x6f, 0x16, 0xa3, 0xf9, 0x25, 0xcd, 1162 0xac, 0x3d, 0xec, 0x9e, 0xdd, 0xf3, 0xbe, 0xaa, 0x99, 0x45, 0x4d, 0xf9, 0x2c, 0x0d, 0x15, 0xe9, 1163 0xf5, 0xb2, 0xa6, 0xde, 0x2c, 0x0d, 0xd1, 0x53, 0x68, 0x4d, 0x82, 0x38, 0xa1, 0x51, 0x39, 0x3d, 1164 0xa0, 0x74, 0xdf, 0xd4, 0xa0, 0x1e, 0x14, 0xf4, 0x0b, 0xd8, 0x90, 0x0f, 0x73, 0xab, 0xa1, 0x34, 1165 0x57, 0x19, 0x2d, 0x8f, 0x72, 0x49, 0x50, 0x96, 0x84, 0x63, 0xed, 0x84, 0xce, 0xa0, 0xae, 0x52, 1166 0xce, 0x33, 0x26, 0xac, 0xa6, 0xca, 0xf8, 0xa0, 0x32, 0x8c, 0xa5, 0x49, 0x6d, 0xea, 0x85, 0x27, 1167 0x7a, 0x26, 0x57, 0xc1, 0x3d, 0x65, 0x82, 0xc8, 0xc5, 0x4a, 0x39, 0xb7, 0x76, 0x95, 0xa2, 0x5a, 1168 0x1a, 0xed, 0x6b, 0x10, 0xbd, 0x04, 0xeb, 0x2e, 0xe0, 0xb7, 0x65, 0xc2, 0x84, 0x53, 0x76, 0x4f, 1169 0x19, 0x51, 0x4b, 0x7d, 0x4f, 0x5d, 0xd8, 0xd3, 0x76, 0x3d, 0xf2, 0xca, 0x3a, 0x92, 0x1b, 0xfe, 1170 0x3b, 0x80, 0xfb, 0x73, 0xc2, 0xa7, 0xb9, 0xca, 0x6b, 0x5f, 0xab, 0xe7, 0xfe, 0xdc, 0xd3, 0x80, 1171 0x32, 0x9f, 0xce, 0xcd, 0x07, 0x85, 0xf9, 0xb4, 0x34, 0x9f, 0xc0, 0xc6, 0x44, 0xaa, 0xd4, 0xb2, 1172 0x54, 0x09, 0xbe, 0x59, 0x10, 0x7a, 0x24, 0x64, 0xac, 0x3d, 0xbf, 0xa2, 0xff, 0xbf, 0xca, 0xc5, 1173 0xde, 0xf3, 0x7e, 0xc3, 0x82, 0x3c, 0xa7, 0x4c, 0xf6, 0x80, 0x7f, 0x0a, 0x18, 0x8d, 0x08, 0xa7, 1174 0x21, 0xa3, 0xa2, 0xf8, 0xd6, 0x35, 0x35, 0xe8, 0x29, 0x0c, 0x0d, 0x61, 0x97, 0x55, 0x22, 0x91, 1175 0x3c, 0x98, 0xc9, 0x26, 0x16, 0x6b, 0xe0, 0xc9, 0xc3, 0x35, 0x30, 0x97, 0x29, 0xde, 0xa9, 0x5e, 1176 0x1b, 0xeb, 0x5b, 0xe8, 0x12, 0x96, 0x60, 0xc2, 0xb3, 0x29, 0x0b, 0x69, 0xb1, 0x1d, 0xbe, 0xfd, 1177 0x32, 0x39, 0x4f, 0xf9, 0x60, 0xc4, 0x1e, 0x61, 0xe8, 0xe4, 0x41, 0x72, 0x65, 0x07, 0xf5, 0xd7, 1178 0x72, 0x29, 0x54, 0xd9, 0xc7, 0xa7, 0xd0, 0xd2, 0x0d, 0x2c, 0x7d, 0xb7, 0x34, 0x69, 0x05, 0x16, 1179 0x4e, 0xdd, 0x7f, 0x1a, 0xd0, 0xac, 0x4a, 0x0c, 0xfd, 0x0a, 0x76, 0x97, 0xe4, 0x4a, 0x82, 0xbb, 1180 0x6c, 0x9a, 0x0a, 0x25, 0x95, 0x16, 0x46, 0x55, 0xd5, 0xf6, 0x95, 0x05, 0x9d, 0xc0, 0x9e, 0xc8, 1181 0x44, 0x90, 0x10, 0xf9, 0xb5, 0x25, 0x22, 0x23, 0x61, 0x96, 0xa6, 0x34, 0x14, 0xd6, 0xf7, 0xfa, 1182 0x8a, 0x32, 0xfa, 0xf1, 0x1d, 0xf5, 0x33, 0x5b, 0x5b, 0xd0, 0x4f, 0xa0, 0xcd, 0x84, 0x90, 0xbe, 1183 0xc5, 0x32, 0xb3, 0x7e, 0x50, 0xbe, 0x4d, 0x26, 0x2a, 0xe3, 0x7f, 0x08, 0x4d, 0xf9, 0xd1, 0x11, 1184 0x59, 0xb1, 0x8f, 0x7e, 0x5a, 0xec, 0xc7, 0x84, 0xfb, 0x99, 0x5e, 0x48, 0xd2, 0x23, 0xcc, 0x17, 1185 0x1e, 0x3f, 0x2b, 0x3c, 0xc2, 0xbc, 0xf0, 0x38, 0xfe, 0x39, 0x6c, 0x15, 0xff, 0x59, 0x50, 0x07, 1186 0x1a, 0x7d, 0xc7, 0x23, 0x6f, 0xec, 0x4b, 0x72, 0xd2, 0xfb, 0xb5, 0xf9, 0xbb, 0x2a, 0xd0, 0x3b, 1187 0x3b, 0x37, 0x7f, 0x7f, 0xfc, 0x2f, 0x03, 0xda, 0xcb, 0xf3, 0x8e, 0xb6, 0xa1, 0x25, 0x91, 0x91, 1188 0x4b, 0xec, 0xb7, 0xfd, 0xd1, 0x1b, 0xc7, 0x5c, 0x41, 0xbb, 0x60, 0x4a, 0xc8, 0x73, 0x3c, 0x6f, 1189 0xe0, 0x8e, 0xc8, 0x60, 0x34, 0xf0, 0x4d, 0x03, 0x7d, 0x03, 0x07, 0x55, 0xd4, 0x76, 0x3f, 0x38, 1190 0xd8, 0xd7, 0xc6, 0x06, 0xb2, 0x60, 0x57, 0x1a, 0x9d, 0xdf, 0x8e, 0x1d, 0xdb, 0x27, 0xd8, 0xb1, 1191 0xdd, 0xd1, 0xc8, 0xb1, 0x7d, 0x73, 0x15, 0xed, 0xc1, 0xf6, 0xd2, 0xb5, 0xa1, 0xeb, 0x39, 0xe6, 1192 0x5a, 0x19, 0xe3, 0xe3, 0xc0, 0x19, 0x5e, 0x90, 0xab, 0xf1, 0xd0, 0xed, 0x5f, 0x98, 0xeb, 0x68, 1193 0x1f, 0x90, 0x44, 0xfb, 0xf6, 0xfb, 0xab, 0x01, 0x76, 0x4a, 0x7c, 0x03, 0x1d, 0xc2, 0xb7, 0x95, 1194 0xe7, 0x35, 0xec, 0x8e, 0x86, 0x1f, 0x8b, 0x48, 0xe6, 0x26, 0x6a, 0x43, 0x5d, 0x79, 0x60, 0xec, 1195 0x62, 0xf3, 0xdf, 0xc6, 0xf1, 0x9f, 0x0d, 0x68, 0x2f, 0x7f, 0x0d, 0x25, 0x53, 0x89, 0x3c, 0x60, 1196 0x2a, 0xa1, 0xc7, 0x4c, 0xab, 0xe8, 0x32, 0xd3, 0x27, 0xb0, 0x27, 0x8d, 0xb6, 0x3b, 0x7a, 0x3d, 1197 0xc0, 0x97, 0x0f, 0xa9, 0x2e, 0xdd, 0x2b, 0xa8, 0xb6, 0xa1, 0x2e, 0xe1, 0x79, 0x6a, 0x7f, 0x33, 1198 0xa0, 0xbd, 0xfc, 0xc9, 0x44, 0x4d, 0xa8, 0x8d, 0xdc, 0xc2, 0x63, 0x45, 0xb5, 0x44, 0xc7, 0xf4, 1199 0x7c, 0xec, 0xf4, 0x2f, 0x4d, 0x03, 0xed, 0x40, 0xc7, 0x1e, 0x0e, 0x9c, 0x91, 0xac, 0xed, 0xd8, 1200 0xc5, 0xbe, 0x73, 0x61, 0xae, 0x56, 0xc0, 0x31, 0x76, 0x7d, 0xd7, 0x76, 0x87, 0xba, 0xb0, 0x9e, 1201 0xdf, 0xf7, 0x35, 0x1d, 0xdf, 0xc1, 0xa3, 0xfe, 0xd0, 0x5c, 0x47, 0x08, 0xda, 0x17, 0x8e, 0xed, 1202 0x7e, 0x24, 0xf2, 0xdd, 0xa2, 0xa8, 0x32, 0x8c, 0xbe, 0x5e, 0x84, 0x89, 0xa4, 0x5b, 0x01, 0xf9, 1203 0x83, 0x4b, 0xc7, 0xbd, 0xf2, 0x4d, 0x7a, 0xfc, 0x4b, 0x68, 0x2d, 0x2d, 0x5c, 0x54, 0x83, 0xf5, 1204 0xd1, 0x34, 0x49, 0xcc, 0x15, 0xb4, 0x05, 0x6b, 0x97, 0x71, 0x6a, 0x1a, 0xa8, 0x0e, 0x1b, 0xee, 1205 0xf5, 0x84, 0x9f, 0x9a, 0xab, 0xc7, 0xef, 0x01, 0x3d, 0x9e, 0x78, 0xa9, 0xc4, 0xab, 0x94, 0xe7, 1206 0x34, 0x8c, 0x27, 0x31, 0x8d, 0xcc, 0x15, 0xc9, 0xf8, 0x82, 0x0a, 0x1a, 0x8a, 0x8c, 0x99, 0x86, 1207 0x7c, 0xa8, 0x3f, 0x1e, 0x68, 0x4a, 0x25, 0x3c, 0xd6, 0x9f, 0x4e, 0x73, 0xed, 0x3f, 0x01, 0x00, 1208 0x00, 0xff, 0xff, 0xe7, 0xd7, 0xdf, 0x07, 0xe5, 0x0b, 0x00, 0x00, 1209} 1210