From bae97ebd550bf0acdc4ffd0fc2d13dc3b0849c24 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 13:06:54 -0700 Subject: [PATCH 01/14] CHANGELOG-3.4: update functional tester Signed-off-by: Gyuho Lee --- CHANGELOG-3.4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG-3.4.md b/CHANGELOG-3.4.md index 55b318d44e2..d5f9c62a7a6 100644 --- a/CHANGELOG-3.4.md +++ b/CHANGELOG-3.4.md @@ -30,7 +30,7 @@ See [code changes](https://github.com/coreos/etcd/compare/v3.3.0...v3.4.0) and [ - Futhermore, when `--auto-compaction-mode=periodic --auto-compaction-retention=30m` and writes per minute are about 1000, `v3.3.0`, `v3.3.1`, and `v3.3.2` compact revision 30000, 33000, and 36000, for every 3-minute, while `v3.3.3` *or later* compacts revision 30000, 60000, and 90000, for every 30-minute. - Improve [lease expire/revoke operation performance](https://github.com/coreos/etcd/pull/9418), address [lease scalability issue](https://github.com/coreos/etcd/issues/9496). - Make [Lease `Lookup` non-blocking with concurrent `Grant`/`Revoke`](https://github.com/coreos/etcd/pull/9229). -- Improve functional tester coverage: use [proxy layer to run network fault tests in CIs](https://github.com/coreos/etcd/pull/9081), enable [TLS](https://github.com/coreos/etcd/issues/8943), add [liveness mode](https://github.com/coreos/etcd/issues/9230), [shuffle test sequence](https://github.com/coreos/etcd/issues/9381). +- Improve [functional tester](https://github.com/coreos/etcd/tree/master/tools/functional-tester) coverage: use [proxy layer to run network fault tests in CI](https://github.com/coreos/etcd/pull/9081), enable [TLS both for server and client](https://github.com/coreos/etcd/pull/9534), add [liveness mode](https://github.com/coreos/etcd/issues/9230), and [shuffle test sequence](https://github.com/coreos/etcd/issues/9381). ### Breaking Changes From 13bf22ba51ed5c5b7aaa968c3ebd6a67f6aa5052 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 13:11:22 -0700 Subject: [PATCH 02/14] functional-tester: update README Signed-off-by: Gyuho Lee --- tools/functional-tester/README.md | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/tools/functional-tester/README.md b/tools/functional-tester/README.md index ca1e3ae97e7..61e5c08aee7 100644 --- a/tools/functional-tester/README.md +++ b/tools/functional-tester/README.md @@ -2,19 +2,7 @@ etcd functional test suite tests the functionality of an etcd cluster with a focus on failure resistance under high pressure. It sets up an etcd cluster and inject failures into the cluster by killing the process or isolate the network of the process. It expects the etcd cluster to recover within a short amount of time after fixing the fault. -etcd functional test suite has two components: etcd-agent and etcd-tester. etcd-agent runs on every test machines and etcd-tester is a single controller of the test. etcd-tester controls all the etcd-agent to start etcd clusters and simulate various failure cases. - -## Requirements - -The environment of the cluster must be stable enough, so etcd test suite can assume that most of the failures are generated by itself. - -## etcd agent - -etcd agent is a daemon on each machines. It can start, stop, restart, isolate and terminate an etcd process. The agent exposes these functionality via HTTP RPC. - -## etcd tester - -etcd functional tester control the progress of the functional tests. It calls the RPC of the etcd agent to simulate various test cases. For example, it can start a three members cluster by sending three start RPC calls to three different etcd agents. It can make one of the member failed by sending stop RPC call to one etcd agent. +etcd functional test suite has two components: etcd-agent and etcd-tester. etcd-agent runs on every test machine, and etcd-tester is a single controller of the test. tester controls agents: start etcd process, stop, terminate, inject failures, and so on. ### Run locally From 1580289ba3ccde1360473f35a13cf0e73cbdeace Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 13:36:49 -0700 Subject: [PATCH 03/14] functional-tester/rpcpb: add TLS flags Signed-off-by: Gyuho Lee --- tools/functional-tester/rpcpb/etcd_config.go | 18 +- .../rpcpb/etcd_config_test.go | 49 +- tools/functional-tester/rpcpb/rpc.pb.go | 738 ++++++++++++++---- tools/functional-tester/rpcpb/rpc.proto | 37 +- 4 files changed, 648 insertions(+), 194 deletions(-) diff --git a/tools/functional-tester/rpcpb/etcd_config.go b/tools/functional-tester/rpcpb/etcd_config.go index f381894f47b..0debd3a472a 100644 --- a/tools/functional-tester/rpcpb/etcd_config.go +++ b/tools/functional-tester/rpcpb/etcd_config.go @@ -30,8 +30,19 @@ var etcdFields = []string{ "ListenClientURLs", "AdvertiseClientURLs", + "ClientAutoTLS", + "ClientCertAuth", + "ClientCertFile", + "ClientKeyFile", + "ClientTrustedCAFile", + "ListenPeerURLs", "InitialAdvertisePeerURLs", + "PeerAutoTLS", + "PeerClientCertAuth", + "PeerCertFile", + "PeerKeyFile", + "PeerTrustedCAFile", "InitialCluster", "InitialClusterState", @@ -72,12 +83,17 @@ func (cfg *Etcd) Flags() (fs []string) { default: panic(fmt.Errorf("field %q (%v) cannot be parsed", name, fv.Type().Kind())) } + fname := field.Tag.Get("yaml") + // TODO: remove this if fname == "initial-corrupt-check" { fname = "experimental-" + fname } - fs = append(fs, fmt.Sprintf("--%s=%s", fname, sv)) + + if sv != "" { + fs = append(fs, fmt.Sprintf("--%s=%s", fname, sv)) + } } return fs } diff --git a/tools/functional-tester/rpcpb/etcd_config_test.go b/tools/functional-tester/rpcpb/etcd_config_test.go index fce8075dd68..1f7feed7580 100644 --- a/tools/functional-tester/rpcpb/etcd_config_test.go +++ b/tools/functional-tester/rpcpb/etcd_config_test.go @@ -21,23 +21,40 @@ import ( func TestEtcdFlags(t *testing.T) { cfg := &Etcd{ - Name: "s1", - DataDir: "/tmp/etcd-agent-data-1/etcd.data", - WALDir: "/tmp/etcd-agent-data-1/etcd.data/member/wal", - HeartbeatIntervalMs: 100, - ElectionTimeoutMs: 1000, - ListenClientURLs: []string{"127.0.0.1:1379"}, - AdvertiseClientURLs: []string{"127.0.0.1:13790"}, + Name: "s1", + DataDir: "/tmp/etcd-agent-data-1/etcd.data", + WALDir: "/tmp/etcd-agent-data-1/etcd.data/member/wal", + + HeartbeatIntervalMs: 100, + ElectionTimeoutMs: 1000, + + ListenClientURLs: []string{"127.0.0.1:1379"}, + AdvertiseClientURLs: []string{"127.0.0.1:13790"}, + ClientAutoTLS: true, + ClientCertAuth: false, + ClientCertFile: "", + ClientKeyFile: "", + ClientTrustedCAFile: "", + ListenPeerURLs: []string{"127.0.0.1:1380"}, InitialAdvertisePeerURLs: []string{"127.0.0.1:13800"}, - InitialCluster: "s1=127.0.0.1:13800,s2=127.0.0.1:23800,s3=127.0.0.1:33800", - InitialClusterState: "new", - InitialClusterToken: "tkn", - SnapshotCount: 10000, - QuotaBackendBytes: 10740000000, - PreVote: true, - InitialCorruptCheck: true, + PeerAutoTLS: true, + PeerClientCertAuth: false, + PeerCertFile: "", + PeerKeyFile: "", + PeerTrustedCAFile: "", + + InitialCluster: "s1=127.0.0.1:13800,s2=127.0.0.1:23800,s3=127.0.0.1:33800", + InitialClusterState: "new", + InitialClusterToken: "tkn", + + SnapshotCount: 10000, + QuotaBackendBytes: 10740000000, + + PreVote: true, + InitialCorruptCheck: true, } + exp := []string{ "--name=s1", "--data-dir=/tmp/etcd-agent-data-1/etcd.data", @@ -46,8 +63,12 @@ func TestEtcdFlags(t *testing.T) { "--election-timeout=1000", "--listen-client-urls=127.0.0.1:1379", "--advertise-client-urls=127.0.0.1:13790", + "--auto-tls=true", + "--client-cert-auth=false", "--listen-peer-urls=127.0.0.1:1380", "--initial-advertise-peer-urls=127.0.0.1:13800", + "--peer-auto-tls=true", + "--peer-client-cert-auth=false", "--initial-cluster=s1=127.0.0.1:13800,s2=127.0.0.1:23800,s3=127.0.0.1:33800", "--initial-cluster-state=new", "--initial-cluster-token=tkn", diff --git a/tools/functional-tester/rpcpb/rpc.pb.go b/tools/functional-tester/rpcpb/rpc.pb.go index 5c075f3d5a5..7146d2635b9 100644 --- a/tools/functional-tester/rpcpb/rpc.pb.go +++ b/tools/functional-tester/rpcpb/rpc.pb.go @@ -237,15 +237,25 @@ type Etcd struct { ElectionTimeoutMs int64 `protobuf:"varint,12,opt,name=ElectionTimeoutMs,proto3" json:"ElectionTimeoutMs,omitempty" yaml:"election-timeout"` ListenClientURLs []string `protobuf:"bytes,21,rep,name=ListenClientURLs" json:"ListenClientURLs,omitempty" yaml:"listen-client-urls"` AdvertiseClientURLs []string `protobuf:"bytes,22,rep,name=AdvertiseClientURLs" json:"AdvertiseClientURLs,omitempty" yaml:"advertise-client-urls"` - ListenPeerURLs []string `protobuf:"bytes,23,rep,name=ListenPeerURLs" json:"ListenPeerURLs,omitempty" yaml:"listen-peer-urls"` - InitialAdvertisePeerURLs []string `protobuf:"bytes,24,rep,name=InitialAdvertisePeerURLs" json:"InitialAdvertisePeerURLs,omitempty" yaml:"initial-advertise-peer-urls"` - InitialCluster string `protobuf:"bytes,31,opt,name=InitialCluster,proto3" json:"InitialCluster,omitempty" yaml:"initial-cluster"` - InitialClusterState string `protobuf:"bytes,32,opt,name=InitialClusterState,proto3" json:"InitialClusterState,omitempty" yaml:"initial-cluster-state"` - InitialClusterToken string `protobuf:"bytes,33,opt,name=InitialClusterToken,proto3" json:"InitialClusterToken,omitempty" yaml:"initial-cluster-token"` - SnapshotCount int64 `protobuf:"varint,41,opt,name=SnapshotCount,proto3" json:"SnapshotCount,omitempty" yaml:"snapshot-count"` - QuotaBackendBytes int64 `protobuf:"varint,42,opt,name=QuotaBackendBytes,proto3" json:"QuotaBackendBytes,omitempty" yaml:"quota-backend-bytes"` - PreVote bool `protobuf:"varint,43,opt,name=PreVote,proto3" json:"PreVote,omitempty" yaml:"pre-vote"` - InitialCorruptCheck bool `protobuf:"varint,44,opt,name=InitialCorruptCheck,proto3" json:"InitialCorruptCheck,omitempty" yaml:"initial-corrupt-check"` + ClientAutoTLS bool `protobuf:"varint,23,opt,name=ClientAutoTLS,proto3" json:"ClientAutoTLS,omitempty" yaml:"auto-tls"` + ClientCertAuth bool `protobuf:"varint,24,opt,name=ClientCertAuth,proto3" json:"ClientCertAuth,omitempty" yaml:"client-cert-auth"` + ClientCertFile string `protobuf:"bytes,25,opt,name=ClientCertFile,proto3" json:"ClientCertFile,omitempty" yaml:"cert-file"` + ClientKeyFile string `protobuf:"bytes,26,opt,name=ClientKeyFile,proto3" json:"ClientKeyFile,omitempty" yaml:"key-file"` + ClientTrustedCAFile string `protobuf:"bytes,27,opt,name=ClientTrustedCAFile,proto3" json:"ClientTrustedCAFile,omitempty" yaml:"trusted-ca-file"` + ListenPeerURLs []string `protobuf:"bytes,31,rep,name=ListenPeerURLs" json:"ListenPeerURLs,omitempty" yaml:"listen-peer-urls"` + InitialAdvertisePeerURLs []string `protobuf:"bytes,32,rep,name=InitialAdvertisePeerURLs" json:"InitialAdvertisePeerURLs,omitempty" yaml:"initial-advertise-peer-urls"` + PeerAutoTLS bool `protobuf:"varint,33,opt,name=PeerAutoTLS,proto3" json:"PeerAutoTLS,omitempty" yaml:"peer-auto-tls"` + PeerClientCertAuth bool `protobuf:"varint,34,opt,name=PeerClientCertAuth,proto3" json:"PeerClientCertAuth,omitempty" yaml:"peer-client-cert-auth"` + PeerCertFile string `protobuf:"bytes,35,opt,name=PeerCertFile,proto3" json:"PeerCertFile,omitempty" yaml:"peer-cert-file"` + PeerKeyFile string `protobuf:"bytes,36,opt,name=PeerKeyFile,proto3" json:"PeerKeyFile,omitempty" yaml:"peer-key-file"` + PeerTrustedCAFile string `protobuf:"bytes,37,opt,name=PeerTrustedCAFile,proto3" json:"PeerTrustedCAFile,omitempty" yaml:"peer-trusted-ca-file"` + InitialCluster string `protobuf:"bytes,41,opt,name=InitialCluster,proto3" json:"InitialCluster,omitempty" yaml:"initial-cluster"` + InitialClusterState string `protobuf:"bytes,42,opt,name=InitialClusterState,proto3" json:"InitialClusterState,omitempty" yaml:"initial-cluster-state"` + InitialClusterToken string `protobuf:"bytes,43,opt,name=InitialClusterToken,proto3" json:"InitialClusterToken,omitempty" yaml:"initial-cluster-token"` + SnapshotCount int64 `protobuf:"varint,51,opt,name=SnapshotCount,proto3" json:"SnapshotCount,omitempty" yaml:"snapshot-count"` + QuotaBackendBytes int64 `protobuf:"varint,52,opt,name=QuotaBackendBytes,proto3" json:"QuotaBackendBytes,omitempty" yaml:"quota-backend-bytes"` + PreVote bool `protobuf:"varint,63,opt,name=PreVote,proto3" json:"PreVote,omitempty" yaml:"pre-vote"` + InitialCorruptCheck bool `protobuf:"varint,64,opt,name=InitialCorruptCheck,proto3" json:"InitialCorruptCheck,omitempty" yaml:"initial-corrupt-check"` } func (m *Etcd) Reset() { *m = Etcd{} } @@ -557,9 +567,57 @@ func (m *Etcd) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], s) } } + if m.ClientAutoTLS { + dAtA[i] = 0xb8 + i++ + dAtA[i] = 0x1 + i++ + if m.ClientAutoTLS { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.ClientCertAuth { + dAtA[i] = 0xc0 + i++ + dAtA[i] = 0x1 + i++ + if m.ClientCertAuth { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if len(m.ClientCertFile) > 0 { + dAtA[i] = 0xca + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientCertFile))) + i += copy(dAtA[i:], m.ClientCertFile) + } + if len(m.ClientKeyFile) > 0 { + dAtA[i] = 0xd2 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientKeyFile))) + i += copy(dAtA[i:], m.ClientKeyFile) + } + if len(m.ClientTrustedCAFile) > 0 { + dAtA[i] = 0xda + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientTrustedCAFile))) + i += copy(dAtA[i:], m.ClientTrustedCAFile) + } if len(m.ListenPeerURLs) > 0 { for _, s := range m.ListenPeerURLs { - dAtA[i] = 0xba + dAtA[i] = 0xfa i++ dAtA[i] = 0x1 i++ @@ -576,9 +634,9 @@ func (m *Etcd) MarshalTo(dAtA []byte) (int, error) { } if len(m.InitialAdvertisePeerURLs) > 0 { for _, s := range m.InitialAdvertisePeerURLs { - dAtA[i] = 0xc2 + dAtA[i] = 0x82 i++ - dAtA[i] = 0x1 + dAtA[i] = 0x2 i++ l = len(s) for l >= 1<<7 { @@ -591,16 +649,64 @@ func (m *Etcd) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], s) } } + if m.PeerAutoTLS { + dAtA[i] = 0x88 + i++ + dAtA[i] = 0x2 + i++ + if m.PeerAutoTLS { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.PeerClientCertAuth { + dAtA[i] = 0x90 + i++ + dAtA[i] = 0x2 + i++ + if m.PeerClientCertAuth { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if len(m.PeerCertFile) > 0 { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x2 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerCertFile))) + i += copy(dAtA[i:], m.PeerCertFile) + } + if len(m.PeerKeyFile) > 0 { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x2 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerKeyFile))) + i += copy(dAtA[i:], m.PeerKeyFile) + } + if len(m.PeerTrustedCAFile) > 0 { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x2 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerTrustedCAFile))) + i += copy(dAtA[i:], m.PeerTrustedCAFile) + } if len(m.InitialCluster) > 0 { - dAtA[i] = 0xfa + dAtA[i] = 0xca i++ - dAtA[i] = 0x1 + dAtA[i] = 0x2 i++ i = encodeVarintRpc(dAtA, i, uint64(len(m.InitialCluster))) i += copy(dAtA[i:], m.InitialCluster) } if len(m.InitialClusterState) > 0 { - dAtA[i] = 0x82 + dAtA[i] = 0xd2 i++ dAtA[i] = 0x2 i++ @@ -608,7 +714,7 @@ func (m *Etcd) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.InitialClusterState) } if len(m.InitialClusterToken) > 0 { - dAtA[i] = 0x8a + dAtA[i] = 0xda i++ dAtA[i] = 0x2 i++ @@ -616,23 +722,23 @@ func (m *Etcd) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.InitialClusterToken) } if m.SnapshotCount != 0 { - dAtA[i] = 0xc8 + dAtA[i] = 0x98 i++ - dAtA[i] = 0x2 + dAtA[i] = 0x3 i++ i = encodeVarintRpc(dAtA, i, uint64(m.SnapshotCount)) } if m.QuotaBackendBytes != 0 { - dAtA[i] = 0xd0 + dAtA[i] = 0xa0 i++ - dAtA[i] = 0x2 + dAtA[i] = 0x3 i++ i = encodeVarintRpc(dAtA, i, uint64(m.QuotaBackendBytes)) } if m.PreVote { - dAtA[i] = 0xd8 + dAtA[i] = 0xf8 i++ - dAtA[i] = 0x2 + dAtA[i] = 0x3 i++ if m.PreVote { dAtA[i] = 1 @@ -642,9 +748,9 @@ func (m *Etcd) MarshalTo(dAtA []byte) (int, error) { i++ } if m.InitialCorruptCheck { - dAtA[i] = 0xe0 + dAtA[i] = 0x80 i++ - dAtA[i] = 0x2 + dAtA[i] = 0x4 i++ if m.InitialCorruptCheck { dAtA[i] = 1 @@ -1106,6 +1212,24 @@ func (m *Etcd) Size() (n int) { n += 2 + l + sovRpc(uint64(l)) } } + if m.ClientAutoTLS { + n += 3 + } + if m.ClientCertAuth { + n += 3 + } + l = len(m.ClientCertFile) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.ClientKeyFile) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.ClientTrustedCAFile) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } if len(m.ListenPeerURLs) > 0 { for _, s := range m.ListenPeerURLs { l = len(s) @@ -1118,6 +1242,24 @@ func (m *Etcd) Size() (n int) { n += 2 + l + sovRpc(uint64(l)) } } + if m.PeerAutoTLS { + n += 3 + } + if m.PeerClientCertAuth { + n += 3 + } + l = len(m.PeerCertFile) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.PeerKeyFile) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.PeerTrustedCAFile) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } l = len(m.InitialCluster) if l > 0 { n += 2 + l + sovRpc(uint64(l)) @@ -1532,6 +1674,133 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { m.AdvertiseClientURLs = append(m.AdvertiseClientURLs, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 23: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientAutoTLS", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ClientAutoTLS = bool(v != 0) + case 24: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientCertAuth", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ClientCertAuth = bool(v != 0) + case 25: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientCertFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientCertFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 26: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientKeyFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientKeyFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 27: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientTrustedCAFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientTrustedCAFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 31: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ListenPeerURLs", wireType) } @@ -1560,7 +1829,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { } m.ListenPeerURLs = append(m.ListenPeerURLs, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 24: + case 32: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field InitialAdvertisePeerURLs", wireType) } @@ -1589,7 +1858,134 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { } m.InitialAdvertisePeerURLs = append(m.InitialAdvertisePeerURLs, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 31: + case 33: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerAutoTLS", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.PeerAutoTLS = bool(v != 0) + case 34: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerClientCertAuth", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.PeerClientCertAuth = bool(v != 0) + case 35: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerCertFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerCertFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 36: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerKeyFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerKeyFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 37: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerTrustedCAFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerTrustedCAFile = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 41: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field InitialCluster", wireType) } @@ -1618,7 +2014,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { } m.InitialCluster = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 32: + case 42: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field InitialClusterState", wireType) } @@ -1647,7 +2043,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { } m.InitialClusterState = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 33: + case 43: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field InitialClusterToken", wireType) } @@ -1676,7 +2072,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { } m.InitialClusterToken = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 41: + case 51: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field SnapshotCount", wireType) } @@ -1695,7 +2091,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { break } } - case 42: + case 52: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field QuotaBackendBytes", wireType) } @@ -1714,7 +2110,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { break } } - case 43: + case 63: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field PreVote", wireType) } @@ -1734,7 +2130,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { } } m.PreVote = bool(v != 0) - case 44: + case 64: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field InitialCorruptCheck", wireType) } @@ -2995,137 +3391,149 @@ var ( func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) } var fileDescriptorRpc = []byte{ - // 2099 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0x5b, 0x77, 0xdb, 0x58, - 0x15, 0x8e, 0x92, 0x26, 0x4d, 0x4e, 0x6e, 0xea, 0x49, 0xd3, 0xa8, 0x97, 0x89, 0x52, 0x95, 0x96, - 0x34, 0x8c, 0x52, 0x68, 0x59, 0xc0, 0x94, 0x19, 0x3a, 0x8e, 0xa3, 0x36, 0x26, 0x8a, 0xed, 0x1e, - 0x2b, 0x6d, 0xe7, 0xc9, 0xc8, 0xd2, 0xb1, 0x2d, 0xa2, 0x48, 0xaa, 0x74, 0x9c, 0x71, 0xe6, 0x0f, - 0xb0, 0x78, 0xe3, 0x91, 0x1f, 0xc1, 0xfc, 0x8f, 0xce, 0x05, 0x18, 0xe0, 0x8d, 0x07, 0x03, 0x65, - 0xb1, 0x16, 0xcf, 0x5e, 0xfc, 0x00, 0xd6, 0xb9, 0xd8, 0x96, 0x7c, 0x49, 0xfb, 0x96, 0xb3, 0xf7, - 0xf7, 0x7d, 0xda, 0x67, 0x9f, 0x7d, 0xf6, 0x3e, 0x0e, 0x58, 0x8d, 0x23, 0x27, 0xaa, 0x3d, 0x88, - 0x23, 0x67, 0x37, 0x8a, 0x43, 0x12, 0xc2, 0x59, 0x66, 0xb8, 0xa1, 0x37, 0x3c, 0xd2, 0x6c, 0xd5, - 0x76, 0x9d, 0xf0, 0xf4, 0x41, 0x23, 0x6c, 0x84, 0x0f, 0x98, 0xb7, 0xd6, 0xaa, 0xb3, 0x15, 0x5b, - 0xb0, 0xbf, 0x38, 0x4b, 0xfb, 0xef, 0x3c, 0xb8, 0x64, 0x10, 0xc7, 0x85, 0x77, 0xc0, 0xa5, 0xa2, - 0x7d, 0x8a, 0x15, 0x69, 0x4b, 0xda, 0x5e, 0xd8, 0x5b, 0xed, 0x76, 0xd4, 0xc5, 0x73, 0xfb, 0xd4, - 0x7f, 0xac, 0x05, 0xf6, 0x29, 0xd6, 0x10, 0x73, 0x42, 0x1d, 0x5c, 0xde, 0xb7, 0x89, 0xbd, 0xef, - 0xc5, 0xca, 0x34, 0xc3, 0xad, 0x75, 0x3b, 0xea, 0x2a, 0xc7, 0xb9, 0x36, 0xb1, 0x75, 0xd7, 0x8b, - 0x35, 0xd4, 0xc3, 0xc0, 0x1d, 0x30, 0xf7, 0x32, 0x67, 0x52, 0xf4, 0x0c, 0x43, 0xc3, 0x6e, 0x47, - 0x5d, 0xe1, 0xe8, 0xcf, 0x6d, 0x9f, 0x83, 0x05, 0x02, 0x96, 0xc0, 0xda, 0x01, 0xb6, 0x63, 0x52, - 0xc3, 0x36, 0x29, 0x04, 0x04, 0xc7, 0x67, 0xb6, 0x7f, 0x94, 0x28, 0x8b, 0x5b, 0xd2, 0xf6, 0xcc, - 0xde, 0x07, 0xdd, 0x8e, 0x7a, 0x9d, 0x13, 0x9b, 0x3d, 0x90, 0xee, 0x09, 0x94, 0x86, 0xc6, 0x31, - 0x61, 0x01, 0x5c, 0x31, 0x7c, 0xec, 0x10, 0x2f, 0x0c, 0x2c, 0xef, 0x14, 0x87, 0x2d, 0x72, 0x94, - 0x28, 0x4b, 0x4c, 0xee, 0x66, 0xb7, 0xa3, 0x6e, 0x70, 0x39, 0x2c, 0x20, 0x3a, 0xe1, 0x18, 0x0d, - 0x8d, 0xb2, 0x60, 0x01, 0xc8, 0xa6, 0x97, 0x10, 0x1c, 0xe4, 0x7d, 0x0f, 0x07, 0xe4, 0x18, 0x99, - 0x89, 0xb2, 0xbe, 0x35, 0xb3, 0xbd, 0x90, 0x0e, 0xcc, 0x67, 0x08, 0xdd, 0x61, 0x10, 0xbd, 0x15, - 0xfb, 0x89, 0x86, 0x46, 0x68, 0x10, 0x81, 0xb5, 0x9c, 0x7b, 0x86, 0x63, 0xe2, 0x25, 0x38, 0xa5, - 0x76, 0x8d, 0xa9, 0x6d, 0x75, 0x3b, 0xea, 0x2d, 0xae, 0x66, 0xf7, 0x40, 0x59, 0xc1, 0x71, 0x64, - 0x98, 0x07, 0x2b, 0xfc, 0x3b, 0x65, 0x8c, 0x63, 0x26, 0xb7, 0xc1, 0xe4, 0x52, 0xdb, 0x14, 0xc1, - 0x45, 0x18, 0xc7, 0x42, 0x69, 0x88, 0x02, 0x6b, 0x40, 0x29, 0x04, 0x1e, 0xf1, 0x6c, 0xbf, 0xff, - 0x89, 0xbe, 0x9c, 0xc2, 0xe4, 0xee, 0x75, 0x3b, 0xaa, 0xc6, 0xe5, 0x3c, 0x8e, 0xd4, 0x07, 0x51, - 0xa6, 0x94, 0x27, 0xea, 0xc0, 0x3d, 0xb0, 0x22, 0x7c, 0x79, 0xbf, 0x95, 0x10, 0x1c, 0x2b, 0x2a, - 0xab, 0x8b, 0x1b, 0xdd, 0x8e, 0x7a, 0x2d, 0xab, 0xec, 0x70, 0x80, 0x86, 0x86, 0x18, 0x34, 0x81, - 0x59, 0x4b, 0x85, 0xd8, 0x04, 0x2b, 0x5b, 0x4c, 0x28, 0x95, 0xc0, 0x21, 0x21, 0x3d, 0xa1, 0x30, - 0x0d, 0x8d, 0x23, 0x8f, 0x6a, 0x5a, 0xe1, 0x09, 0x0e, 0x94, 0xdb, 0xef, 0xd2, 0x24, 0x14, 0x36, - 0xa2, 0xc9, 0xc8, 0xf0, 0x09, 0x58, 0xae, 0x04, 0x76, 0x94, 0x34, 0x43, 0x92, 0x0f, 0x5b, 0x01, - 0x51, 0xee, 0xb3, 0xd2, 0xbb, 0xde, 0xed, 0xa8, 0xeb, 0x5c, 0x2d, 0x11, 0x6e, 0xdd, 0xa1, 0x7e, - 0x0d, 0x65, 0xf1, 0xd0, 0x04, 0x57, 0x9e, 0xb7, 0x42, 0x62, 0xef, 0xd9, 0xce, 0x09, 0x0e, 0xdc, - 0xbd, 0x73, 0x82, 0x13, 0x65, 0x87, 0x89, 0x6c, 0x76, 0x3b, 0xea, 0x0d, 0x2e, 0xf2, 0x9a, 0x42, - 0xf4, 0x1a, 0xc7, 0xe8, 0x35, 0x0a, 0xd2, 0xd0, 0x28, 0x91, 0xde, 0xdc, 0x72, 0x8c, 0x5f, 0x84, - 0x04, 0x2b, 0x3f, 0xd8, 0x92, 0xb6, 0xe7, 0xd3, 0x37, 0x37, 0x8a, 0xb1, 0x7e, 0x16, 0xd2, 0xec, - 0xf4, 0x30, 0xe9, 0x8c, 0x84, 0x71, 0xdc, 0x8a, 0x48, 0xbe, 0x89, 0x9d, 0x13, 0xe5, 0x43, 0x46, - 0x1d, 0x97, 0x11, 0x8e, 0xd2, 0x1d, 0x0a, 0x4b, 0x65, 0x24, 0x45, 0xd6, 0x7e, 0x3b, 0x0b, 0xe6, - 0x8e, 0xf0, 0x69, 0x0d, 0xc7, 0xf0, 0x13, 0xb0, 0x44, 0x9b, 0x8e, 0xd1, 0xc6, 0x4e, 0xd9, 0x26, - 0x4d, 0xd1, 0x74, 0x52, 0xb9, 0xc1, 0xc4, 0x71, 0x75, 0xdc, 0xc6, 0x8e, 0x1e, 0xd9, 0xa4, 0xa9, - 0xa1, 0x0c, 0x1c, 0x3e, 0x02, 0x0b, 0xb9, 0x06, 0x0e, 0x48, 0xce, 0x75, 0x63, 0xd6, 0x21, 0x16, - 0xf6, 0xd6, 0xbb, 0x1d, 0xf5, 0x8a, 0xb8, 0x3a, 0xd4, 0xa5, 0xdb, 0xae, 0x1b, 0x6b, 0x68, 0x80, - 0xa3, 0xf9, 0x7c, 0x6a, 0x7b, 0x7e, 0x14, 0x7a, 0x01, 0x39, 0xb0, 0xac, 0x32, 0x23, 0x2f, 0x31, - 0x72, 0x2a, 0x9f, 0xf5, 0x1e, 0x44, 0x6f, 0x12, 0x12, 0x09, 0x95, 0x51, 0x22, 0xcd, 0xe7, 0x9e, - 0x9d, 0x60, 0xda, 0xdb, 0xf0, 0x70, 0x27, 0xac, 0xd9, 0x09, 0x16, 0x9d, 0x50, 0x60, 0xe0, 0x63, - 0xb0, 0x48, 0x77, 0x60, 0x86, 0x0d, 0xb6, 0xdf, 0x3a, 0xa3, 0x28, 0xdd, 0x8e, 0x7a, 0x35, 0xb5, - 0x5f, 0x3f, 0x6c, 0x88, 0xed, 0xa6, 0xc1, 0x30, 0x07, 0x96, 0xe9, 0x92, 0x5f, 0x78, 0xcb, 0xac, - 0x28, 0x5f, 0x49, 0xec, 0x18, 0x52, 0xb7, 0x86, 0xd1, 0x45, 0xa3, 0x20, 0xf4, 0x0e, 0x66, 0x19, - 0xf0, 0x19, 0x58, 0x1d, 0x18, 0xca, 0x71, 0xd8, 0x3e, 0x57, 0xbe, 0xe6, 0x22, 0xb7, 0xba, 0x1d, - 0x55, 0x19, 0x15, 0x89, 0x28, 0x46, 0x43, 0xc3, 0xac, 0x5e, 0x2c, 0xf4, 0x46, 0x73, 0x99, 0x6f, - 0xc6, 0xc7, 0xc2, 0xda, 0x81, 0x10, 0xc9, 0x32, 0x60, 0x19, 0xc0, 0x81, 0xaa, 0x11, 0xb8, 0x2c, - 0xaf, 0xca, 0xb7, 0xbc, 0x04, 0xd4, 0x6e, 0x47, 0xbd, 0x39, 0x1a, 0x0e, 0x16, 0x30, 0x0d, 0x8d, - 0xe1, 0xc2, 0x1f, 0xf1, 0x11, 0xa6, 0x7c, 0x49, 0x67, 0xd2, 0xe2, 0xc3, 0xc5, 0x5d, 0x36, 0x09, - 0x77, 0xa9, 0x2d, 0x3d, 0xc8, 0xa8, 0xa0, 0x86, 0x18, 0x54, 0xfb, 0xfb, 0x12, 0x98, 0xb3, 0x30, - 0x6b, 0x28, 0x4f, 0xc0, 0x32, 0xff, 0xab, 0x88, 0xc9, 0xe7, 0x61, 0x7c, 0x32, 0x5a, 0x8c, 0x84, - 0xb9, 0xf5, 0x80, 0xfb, 0x35, 0x94, 0xc5, 0xc3, 0x9f, 0x00, 0xc0, 0x0d, 0xac, 0xa2, 0xf8, 0x5c, - 0xbc, 0xd6, 0xed, 0xa8, 0x30, 0xc3, 0xe6, 0x95, 0x94, 0x42, 0xd2, 0xb6, 0xbd, 0x8f, 0x7d, 0xfb, - 0xdc, 0xb4, 0x09, 0x0e, 0x9c, 0x73, 0x31, 0xec, 0x96, 0xd3, 0x6d, 0xdb, 0xa5, 0x7e, 0xdd, 0xe7, - 0x00, 0xfd, 0x94, 0xb6, 0xed, 0x2c, 0x05, 0xfe, 0x12, 0xc8, 0x59, 0x0b, 0x3a, 0x63, 0x45, 0xbd, - 0x9c, 0x2e, 0xea, 0x61, 0x19, 0x3d, 0x3e, 0xd3, 0xd0, 0x08, 0x0f, 0x7e, 0x06, 0xd6, 0x8f, 0x23, - 0xd7, 0x26, 0xd8, 0x1d, 0x8a, 0x6b, 0x99, 0x09, 0xde, 0xe9, 0x76, 0x54, 0x95, 0x0b, 0xb6, 0x38, - 0x4c, 0x1f, 0x8d, 0x6f, 0xbc, 0x02, 0xcd, 0x11, 0x0a, 0x5b, 0x81, 0x6b, 0x7a, 0xa7, 0x1e, 0x51, - 0xd6, 0xb7, 0xa4, 0xed, 0xd9, 0x74, 0x8e, 0x62, 0xea, 0xd3, 0x7d, 0xea, 0xd4, 0x50, 0x0a, 0x09, - 0x3f, 0x05, 0xcb, 0x46, 0xdb, 0x23, 0xa5, 0x80, 0xde, 0xc0, 0x56, 0x8c, 0x95, 0x6b, 0x23, 0xe5, - 0xd6, 0xf6, 0x88, 0x1e, 0x06, 0x7a, 0x9d, 0x03, 0x68, 0xb9, 0xa5, 0x09, 0xf0, 0x00, 0xc8, 0xf9, - 0x30, 0x48, 0xd8, 0xb0, 0x73, 0xce, 0x79, 0x1b, 0xdb, 0x18, 0x2e, 0x7d, 0x67, 0x80, 0xe8, 0xb5, - 0xb0, 0x11, 0x16, 0xfc, 0x08, 0x2c, 0x1a, 0x81, 0x5d, 0xf3, 0x71, 0x39, 0x8a, 0xc3, 0xba, 0xa2, - 0x30, 0x91, 0x8d, 0x6e, 0x47, 0x5d, 0x13, 0x91, 0x30, 0xa7, 0x1e, 0x51, 0x2f, 0xbd, 0xc2, 0x03, - 0x2c, 0xfc, 0x18, 0x2c, 0x89, 0x78, 0xf2, 0x76, 0x82, 0x13, 0x45, 0x65, 0x03, 0x35, 0x75, 0xff, - 0x45, 0xf4, 0xba, 0x43, 0xdd, 0x1a, 0xca, 0xa0, 0x69, 0xa1, 0x88, 0x35, 0xcb, 0xea, 0x51, 0xc2, - 0xa6, 0x5d, 0xa6, 0x50, 0x7a, 0x7c, 0x7e, 0x20, 0xac, 0x50, 0xb2, 0x14, 0x3a, 0x7b, 0x85, 0xa5, - 0xd2, 0x6c, 0xd5, 0xeb, 0x3e, 0x66, 0xe3, 0x2d, 0x93, 0xca, 0x9e, 0x48, 0xc2, 0x01, 0x03, 0x0d, - 0xc1, 0x80, 0x87, 0xa9, 0x16, 0x9a, 0x0f, 0x4f, 0x4f, 0xed, 0xc0, 0x4d, 0x14, 0x6d, 0xf8, 0x21, - 0x34, 0x68, 0xa1, 0x8e, 0xc0, 0xa4, 0x3b, 0x68, 0x8f, 0x47, 0x77, 0x85, 0x5a, 0x41, 0x80, 0xe3, - 0xfe, 0x14, 0xb8, 0xcf, 0xae, 0x4e, 0x6a, 0x57, 0x31, 0xf3, 0xa7, 0xe7, 0xc0, 0x10, 0x85, 0xbe, - 0xcc, 0x8c, 0x36, 0xc1, 0x71, 0x60, 0xfb, 0x7d, 0x99, 0x1d, 0x26, 0x93, 0x0a, 0x08, 0x0b, 0x44, - 0x5a, 0x68, 0x84, 0x46, 0x8f, 0xb7, 0x42, 0x62, 0x9c, 0x24, 0xd6, 0x79, 0x84, 0x13, 0x05, 0xb3, - 0x6d, 0xa5, 0x8e, 0x37, 0x61, 0x4e, 0x9d, 0x50, 0xaf, 0x86, 0xd2, 0x58, 0x5a, 0xa5, 0x7c, 0x79, - 0x88, 0xcf, 0x2b, 0xde, 0x17, 0x98, 0xf5, 0xf7, 0xd9, 0x74, 0x6a, 0x05, 0xf9, 0x04, 0x9f, 0xeb, - 0x89, 0xf7, 0x05, 0xad, 0xd2, 0x0c, 0x81, 0x36, 0xc5, 0x8c, 0xc1, 0xb4, 0xe3, 0x06, 0x56, 0x1a, - 0x4c, 0x26, 0x35, 0x6e, 0x87, 0x64, 0x74, 0x9f, 0xc2, 0x34, 0x34, 0x86, 0x0b, 0x5f, 0x80, 0xab, - 0x03, 0x6b, 0xab, 0x5e, 0xf7, 0xda, 0xc8, 0x0e, 0x1a, 0x58, 0x69, 0x32, 0x4d, 0xad, 0xdb, 0x51, - 0x37, 0x47, 0x35, 0x19, 0x4e, 0x8f, 0x29, 0x50, 0x43, 0x63, 0xf9, 0xf0, 0x57, 0x60, 0x63, 0x9c, - 0xdd, 0x6a, 0x07, 0x8a, 0xc7, 0xa4, 0x53, 0xcf, 0xc4, 0x09, 0xd2, 0x3a, 0x69, 0x07, 0x1a, 0x9a, - 0x24, 0x43, 0x87, 0x55, 0xdf, 0x65, 0xb5, 0x83, 0x52, 0x94, 0x28, 0xbf, 0x66, 0xca, 0xa9, 0x23, - 0x4d, 0x29, 0x93, 0x76, 0xa0, 0x87, 0x51, 0xa2, 0xa1, 0x61, 0xd6, 0xe0, 0x58, 0xf8, 0xbc, 0x48, - 0xf8, 0xe0, 0x9c, 0xcd, 0xbc, 0xc1, 0xb8, 0x0e, 0x1f, 0x33, 0x49, 0xff, 0x58, 0x04, 0x01, 0xfe, - 0x18, 0x2c, 0x70, 0xc3, 0xf3, 0x72, 0x85, 0x4f, 0xcc, 0xd9, 0xf4, 0x4b, 0x43, 0xb0, 0x5f, 0xd3, - 0xaf, 0x0f, 0x80, 0xda, 0x6f, 0x24, 0x70, 0x19, 0xe1, 0xd7, 0x2d, 0x9c, 0x10, 0xb8, 0x0b, 0x16, - 0x4a, 0x11, 0x8e, 0x6d, 0xfa, 0x83, 0x82, 0x4d, 0x96, 0x95, 0x87, 0xb2, 0x98, 0x4f, 0x7d, 0x3b, - 0x1a, 0x40, 0xe0, 0xdd, 0xde, 0x1b, 0x49, 0xe1, 0xc3, 0x6c, 0x59, 0x80, 0xb9, 0x11, 0xf5, 0x1e, - 0x50, 0x77, 0x7b, 0xe3, 0x8b, 0xfd, 0xb2, 0x1a, 0xc0, 0xb8, 0x11, 0x09, 0xa7, 0xf6, 0x31, 0x98, - 0x47, 0x38, 0x89, 0xc2, 0x20, 0xc1, 0x50, 0x01, 0x97, 0x2b, 0x2d, 0xc7, 0xc1, 0x49, 0xc2, 0xe2, - 0x98, 0x47, 0xbd, 0x25, 0xbc, 0x06, 0xe6, 0xe8, 0x3b, 0xb8, 0x95, 0xf0, 0xe1, 0x85, 0xc4, 0x6a, - 0xe7, 0x1f, 0x52, 0x2a, 0x78, 0xb8, 0x02, 0x40, 0x31, 0x24, 0x15, 0x62, 0xc7, 0x04, 0xbb, 0xf2, - 0x14, 0xbc, 0x0a, 0x64, 0xf1, 0xca, 0x63, 0x36, 0x3a, 0x56, 0x65, 0x09, 0xae, 0x82, 0x45, 0x84, - 0x93, 0xbe, 0x61, 0x1a, 0x2e, 0x81, 0xf9, 0x43, 0xcf, 0xf7, 0xd9, 0x6a, 0x86, 0xba, 0x69, 0x27, - 0xc8, 0xc5, 0x4e, 0xd3, 0x3b, 0xc3, 0xf2, 0x25, 0xaa, 0xb2, 0x8f, 0x13, 0x12, 0x87, 0xe7, 0x14, - 0xc1, 0x5e, 0x6b, 0xf2, 0x2c, 0xbc, 0x0e, 0xd6, 0xf7, 0x7c, 0xdb, 0x39, 0x69, 0x86, 0x3e, 0xfb, - 0xf5, 0x50, 0x0e, 0x63, 0x62, 0xb5, 0x51, 0x5b, 0x76, 0xe1, 0x4d, 0xb0, 0x71, 0x1c, 0xd4, 0xc6, - 0x3a, 0x31, 0x5c, 0x07, 0x57, 0x58, 0xbf, 0xcb, 0x98, 0xeb, 0x70, 0x03, 0xac, 0x1d, 0x07, 0xee, - 0x88, 0xa3, 0xb1, 0xf3, 0x9f, 0x79, 0x1e, 0x8f, 0x68, 0xb5, 0x94, 0x7f, 0x58, 0x30, 0xcd, 0x6a, - 0xa9, 0x68, 0x54, 0x9f, 0x96, 0x4c, 0xb3, 0xf4, 0xd2, 0x40, 0xf2, 0x14, 0xfc, 0x10, 0x6c, 0x8f, - 0x98, 0xab, 0xc7, 0x45, 0xab, 0x60, 0x56, 0x2d, 0x54, 0x78, 0xf6, 0xcc, 0x40, 0xd5, 0x4a, 0x31, - 0x57, 0xae, 0x1c, 0x94, 0x2c, 0x9e, 0x02, 0x86, 0x36, 0x8d, 0xdc, 0xbe, 0x81, 0xe4, 0x69, 0x78, - 0x0f, 0x68, 0x29, 0xc3, 0x24, 0xe2, 0x4c, 0x9f, 0xf8, 0xfc, 0xb8, 0x84, 0x8e, 0x8f, 0xe4, 0x4b, - 0x2c, 0x77, 0xd4, 0x90, 0x33, 0x4d, 0x79, 0x16, 0xee, 0x80, 0x7b, 0x7b, 0x66, 0x2e, 0x7f, 0x78, - 0x50, 0x32, 0x8d, 0x6a, 0xd9, 0x30, 0x50, 0xb5, 0x5c, 0x42, 0x56, 0xd5, 0x7a, 0x55, 0x45, 0xaf, - 0xb2, 0x11, 0xbb, 0x30, 0x07, 0x3e, 0x79, 0x3f, 0xec, 0xa4, 0x68, 0x30, 0xfc, 0x1e, 0xd8, 0x9a, - 0x2c, 0x21, 0xf6, 0x56, 0x87, 0x3f, 0x07, 0x3f, 0x7d, 0x17, 0x6a, 0xd2, 0x27, 0x1a, 0x17, 0x7f, - 0x42, 0x64, 0xa1, 0x09, 0x6f, 0x83, 0x0f, 0x26, 0xa3, 0x68, 0x6a, 0x3c, 0xf8, 0x7d, 0xa0, 0xed, - 0x1b, 0x66, 0xee, 0xb3, 0x8b, 0xd3, 0xf2, 0x46, 0x82, 0xbb, 0xe0, 0x3e, 0xca, 0x15, 0xf7, 0x4b, - 0x47, 0xd5, 0xf7, 0xc0, 0x7f, 0x25, 0xc1, 0x5f, 0x80, 0x8f, 0xde, 0x0d, 0x9c, 0xb4, 0xc1, 0xaf, - 0x25, 0x68, 0x80, 0x4f, 0xdf, 0xfb, 0x7b, 0x93, 0x64, 0xbe, 0x91, 0xe0, 0x6d, 0x70, 0x6b, 0x3c, - 0x5f, 0x9c, 0xc3, 0xb7, 0x12, 0xdc, 0x06, 0x77, 0x2e, 0xfc, 0x92, 0x40, 0xfe, 0x51, 0x82, 0x3f, - 0x03, 0x8f, 0x2e, 0x82, 0x4c, 0x0a, 0xe3, 0x4f, 0x12, 0x7c, 0x02, 0x1e, 0xbf, 0xc7, 0x37, 0x26, - 0x09, 0xfc, 0xf9, 0x82, 0x7d, 0x88, 0xc3, 0xfe, 0xee, 0xdd, 0xfb, 0x10, 0xc8, 0xbf, 0x48, 0x70, - 0x13, 0x5c, 0x1f, 0x0f, 0xa1, 0x35, 0xf1, 0x57, 0x09, 0xde, 0x05, 0x5b, 0x17, 0x2a, 0x51, 0xd8, - 0xdf, 0x24, 0xa8, 0x80, 0xb5, 0x62, 0xa9, 0xfa, 0x34, 0x57, 0x30, 0xab, 0x2f, 0x0b, 0xd6, 0x41, - 0xb5, 0x62, 0x21, 0xa3, 0x52, 0x91, 0xff, 0x30, 0x4d, 0x43, 0xc9, 0x78, 0x8a, 0x25, 0xe1, 0xac, - 0x3e, 0x2d, 0xa1, 0xaa, 0x59, 0x78, 0x61, 0x14, 0x29, 0xf2, 0xcb, 0x69, 0xb8, 0x0a, 0x00, 0x85, - 0x95, 0x4b, 0x85, 0xa2, 0x55, 0x91, 0x7f, 0x37, 0x03, 0x97, 0xc1, 0xbc, 0xf1, 0xca, 0x32, 0x50, - 0x31, 0x67, 0xca, 0xff, 0x9b, 0xd9, 0x09, 0x01, 0x18, 0xbc, 0x17, 0xe0, 0x1c, 0x98, 0x3e, 0x7c, - 0x21, 0x4f, 0xc1, 0x05, 0x30, 0x6b, 0x1a, 0xb9, 0x8a, 0x21, 0x4b, 0x70, 0x0d, 0xac, 0x1a, 0xa6, - 0x91, 0xb7, 0x0a, 0xa5, 0x62, 0x15, 0x1d, 0x17, 0x8b, 0xac, 0x6f, 0xc8, 0x60, 0xe9, 0x65, 0xce, - 0xca, 0x1f, 0xf4, 0x2c, 0x33, 0xb4, 0x3f, 0x99, 0xa5, 0xfc, 0x61, 0x15, 0xe5, 0xf2, 0x06, 0xea, - 0x99, 0x2f, 0x51, 0x20, 0x13, 0xea, 0x59, 0x66, 0x1f, 0x3e, 0x01, 0x0b, 0x56, 0x6c, 0x07, 0x49, - 0x14, 0xc6, 0x04, 0x3e, 0x4c, 0x2f, 0x56, 0xc4, 0xa4, 0x10, 0x03, 0xea, 0xc6, 0x6a, 0x7f, 0xcd, - 0xe7, 0x84, 0x36, 0xb5, 0x2d, 0xfd, 0x50, 0xda, 0xbb, 0xfa, 0xe6, 0x5f, 0x9b, 0x53, 0x6f, 0xde, - 0x6e, 0x4a, 0xdf, 0xbd, 0xdd, 0x94, 0xfe, 0xf9, 0x76, 0x53, 0xfa, 0xfd, 0xbf, 0x37, 0xa7, 0x6a, - 0x73, 0xec, 0x9f, 0x86, 0x8f, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x2d, 0x31, 0xfa, 0xc2, 0x7d, - 0x14, 0x00, 0x00, + // 2292 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0xdd, 0x56, 0xdb, 0xd8, + 0xf5, 0x47, 0x10, 0x18, 0x38, 0x7c, 0x39, 0x87, 0x10, 0x94, 0x64, 0x06, 0x11, 0x65, 0x92, 0x3f, + 0xc3, 0xbf, 0x22, 0x6d, 0x32, 0xab, 0x6d, 0xd2, 0x4c, 0x13, 0x63, 0x94, 0xe0, 0x22, 0x6c, 0xe7, + 0x58, 0x24, 0x99, 0x2b, 0x57, 0x96, 0x8f, 0xb1, 0x8a, 0x90, 0x1c, 0xe9, 0x98, 0x31, 0xf3, 0x02, + 0xb3, 0x7a, 0xd7, 0xcb, 0x3e, 0x44, 0xe7, 0x3d, 0x32, 0x1f, 0x6d, 0xa7, 0xed, 0x5d, 0x2f, 0xdc, + 0x36, 0x5d, 0x7d, 0x01, 0xaf, 0x3e, 0x40, 0xd7, 0xf9, 0x10, 0x3e, 0x92, 0x6d, 0x92, 0x3b, 0xb4, + 0xf7, 0xef, 0xf7, 0xd3, 0x39, 0x7b, 0x6f, 0xed, 0xbd, 0x0d, 0x58, 0x8e, 0xda, 0x6e, 0xbb, 0x7e, + 0x37, 0x6a, 0xbb, 0xdb, 0xed, 0x28, 0x24, 0x21, 0x9c, 0x66, 0x86, 0xeb, 0xc6, 0x91, 0x47, 0x5a, + 0x9d, 0xfa, 0xb6, 0x1b, 0x9e, 0xdc, 0x3d, 0x0a, 0x8f, 0xc2, 0xbb, 0xcc, 0x5b, 0xef, 0x34, 0xd9, + 0x13, 0x7b, 0x60, 0x7f, 0x71, 0x96, 0xfe, 0xd5, 0x12, 0xb8, 0x64, 0x12, 0xb7, 0x01, 0x6f, 0x81, + 0x4b, 0x25, 0xe7, 0x04, 0xab, 0xca, 0x86, 0xb2, 0x39, 0xb7, 0xb3, 0xdc, 0xef, 0x69, 0xf3, 0x67, + 0xce, 0x89, 0xff, 0x50, 0x0f, 0x9c, 0x13, 0xac, 0x23, 0xe6, 0x84, 0x06, 0xf8, 0x60, 0xd7, 0x21, + 0xce, 0xae, 0x17, 0xa9, 0x93, 0x0c, 0xb7, 0xd2, 0xef, 0x69, 0xcb, 0x1c, 0xd7, 0x70, 0x88, 0x63, + 0x34, 0xbc, 0x48, 0x47, 0x09, 0x06, 0x6e, 0x81, 0x99, 0x97, 0x79, 0x8b, 0xa2, 0xa7, 0x18, 0x1a, + 0xf6, 0x7b, 0xda, 0x12, 0x47, 0x7f, 0xe1, 0xf8, 0x1c, 0x2c, 0x10, 0xb0, 0x0c, 0x56, 0xf6, 0xb0, + 0x13, 0x91, 0x3a, 0x76, 0x48, 0x31, 0x20, 0x38, 0x3a, 0x75, 0xfc, 0x83, 0x58, 0x9d, 0xdf, 0x50, + 0x36, 0xa7, 0x76, 0x3e, 0xea, 0xf7, 0xb4, 0x6b, 0x9c, 0xd8, 0x4a, 0x40, 0x86, 0x27, 0x50, 0x3a, + 0x1a, 0xc5, 0x84, 0x45, 0x70, 0xd9, 0xf4, 0xb1, 0x4b, 0xbc, 0x30, 0xb0, 0xbd, 0x13, 0x1c, 0x76, + 0xc8, 0x41, 0xac, 0x2e, 0x30, 0xb9, 0x1b, 0xfd, 0x9e, 0xb6, 0xc6, 0xe5, 0xb0, 0x80, 0x18, 0x84, + 0x63, 0x74, 0x34, 0xcc, 0x82, 0x45, 0x90, 0xb3, 0xbc, 0x98, 0xe0, 0xa0, 0xe0, 0x7b, 0x38, 0x20, + 0x87, 0xc8, 0x8a, 0xd5, 0xd5, 0x8d, 0xa9, 0xcd, 0x39, 0xf9, 0x60, 0x3e, 0x43, 0x18, 0x2e, 0x83, + 0x18, 0x9d, 0xc8, 0x8f, 0x75, 0x34, 0x44, 0x83, 0x08, 0xac, 0xe4, 0x1b, 0xa7, 0x38, 0x22, 0x5e, + 0x8c, 0x25, 0xb5, 0xab, 0x4c, 0x6d, 0xa3, 0xdf, 0xd3, 0x3e, 0xe4, 0x6a, 0x4e, 0x02, 0x4a, 0x0b, + 0x8e, 0x22, 0xc3, 0x07, 0x60, 0x91, 0x3f, 0xe5, 0x3b, 0x24, 0xb4, 0xad, 0xaa, 0xba, 0xb6, 0xa1, + 0x6c, 0xce, 0xca, 0xb9, 0x71, 0x3a, 0x24, 0x34, 0x08, 0x15, 0x48, 0x23, 0x61, 0x01, 0x2c, 0x71, + 0x43, 0x01, 0x47, 0xd4, 0xd8, 0x52, 0x55, 0xc6, 0x95, 0x22, 0x24, 0xde, 0xef, 0xe2, 0x88, 0x18, + 0x4e, 0x87, 0xb4, 0x74, 0x94, 0xa1, 0xc0, 0x47, 0xb2, 0xc8, 0x53, 0xcf, 0xc7, 0xea, 0x35, 0x96, + 0xee, 0x2b, 0xfd, 0x9e, 0x96, 0x13, 0x22, 0x94, 0xdd, 0xf4, 0x7c, 0x9c, 0x62, 0x53, 0xec, 0xe0, + 0xf4, 0xfb, 0xf8, 0x8c, 0x91, 0xaf, 0x67, 0x2b, 0xeb, 0x18, 0x9f, 0x09, 0x6e, 0x1a, 0x09, 0x2d, + 0xb0, 0xc2, 0x0d, 0x76, 0xd4, 0x89, 0x09, 0x6e, 0x14, 0xf2, 0x4c, 0xe0, 0x06, 0x13, 0xb8, 0xde, + 0xef, 0x69, 0x57, 0xb9, 0x00, 0xe1, 0x6e, 0xc3, 0x75, 0x84, 0xce, 0x28, 0x1a, 0x8d, 0x05, 0x4f, + 0x57, 0x05, 0xe3, 0x88, 0x65, 0x45, 0x63, 0x59, 0x91, 0x62, 0x21, 0x72, 0xdc, 0xc6, 0x38, 0x12, + 0x09, 0xc9, 0x50, 0x60, 0x1d, 0xa8, 0xc5, 0xc0, 0x23, 0x9e, 0xe3, 0x9f, 0x67, 0xea, 0x5c, 0x6e, + 0x83, 0xc9, 0xdd, 0xe9, 0xf7, 0x34, 0x9d, 0xcb, 0x79, 0x1c, 0x69, 0x0c, 0x92, 0x2d, 0x29, 0x8f, + 0xd5, 0x81, 0x0f, 0xc1, 0x3c, 0xfd, 0x3b, 0xc9, 0xf6, 0x4d, 0x96, 0x31, 0xb5, 0xdf, 0xd3, 0xae, + 0x70, 0x59, 0x26, 0x32, 0x48, 0xb9, 0x0c, 0x86, 0x15, 0x00, 0xe9, 0x63, 0x26, 0xe9, 0x3a, 0x93, + 0x90, 0xca, 0x8f, 0x49, 0x0c, 0x67, 0x7e, 0x04, 0x17, 0x7e, 0x06, 0x16, 0x98, 0x35, 0xc9, 0xfd, + 0x2d, 0x16, 0xfd, 0x6b, 0xfd, 0x9e, 0xb6, 0x2a, 0x6b, 0x0d, 0x0a, 0x20, 0x05, 0x4f, 0x2e, 0x93, + 0x24, 0xff, 0x63, 0xc6, 0xce, 0x5e, 0x66, 0x50, 0x01, 0x32, 0x18, 0x1e, 0x80, 0xcb, 0xf4, 0x31, + 0x9d, 0xfd, 0xdb, 0x4c, 0x41, 0xeb, 0xf7, 0xb4, 0x1b, 0x92, 0xc2, 0x50, 0x09, 0x0c, 0x33, 0xe1, + 0x0e, 0x58, 0x12, 0x31, 0x2f, 0xf8, 0xd4, 0x1e, 0xa9, 0x9f, 0x64, 0x2b, 0x29, 0xc9, 0x98, 0xcb, + 0x01, 0x3a, 0xca, 0x30, 0xe8, 0xf7, 0x9d, 0xb6, 0x54, 0x89, 0x43, 0xb0, 0xba, 0xc5, 0x84, 0xa4, + 0x00, 0x67, 0x84, 0x8c, 0x98, 0xc2, 0x74, 0x34, 0x8a, 0x3c, 0xac, 0x69, 0x87, 0xc7, 0x38, 0x50, + 0xff, 0xff, 0x5d, 0x9a, 0x84, 0xc2, 0x86, 0x34, 0x19, 0x19, 0x3e, 0x06, 0x8b, 0xd5, 0xc0, 0x69, + 0xc7, 0xad, 0x90, 0x14, 0xc2, 0x4e, 0x40, 0xd4, 0xfb, 0xac, 0x33, 0x4a, 0x69, 0x8b, 0x85, 0xdb, + 0x70, 0xa9, 0x5f, 0x47, 0x69, 0x3c, 0xb4, 0xc0, 0xe5, 0xe7, 0x9d, 0x90, 0x38, 0x3b, 0x8e, 0x7b, + 0x8c, 0x83, 0xc6, 0xce, 0x19, 0xc1, 0xb1, 0xfa, 0x29, 0x13, 0x59, 0xef, 0xf7, 0xb4, 0xeb, 0x5c, + 0xe4, 0x35, 0x85, 0x18, 0x75, 0x8e, 0x31, 0xea, 0x14, 0xa4, 0xa3, 0x61, 0x22, 0x1d, 0x2c, 0x95, + 0x08, 0xbf, 0x08, 0x09, 0x56, 0x1f, 0x67, 0x9b, 0x57, 0x3b, 0xc2, 0xc6, 0x69, 0x48, 0xa3, 0x93, + 0x60, 0xe4, 0x88, 0x84, 0x51, 0xd4, 0x69, 0x93, 0x42, 0x0b, 0xbb, 0xc7, 0xea, 0x93, 0x6c, 0x19, + 0x9f, 0x47, 0x84, 0xa3, 0x0c, 0x97, 0xc2, 0xa4, 0x88, 0x48, 0x64, 0xfd, 0xb7, 0xd3, 0x60, 0xe6, + 0x00, 0x9f, 0xd4, 0x71, 0x44, 0x4b, 0x9a, 0xce, 0x44, 0xb3, 0x8b, 0xdd, 0x8a, 0x43, 0x5a, 0x62, + 0x26, 0x4a, 0xb1, 0xc1, 0xc4, 0x6d, 0x18, 0xb8, 0x8b, 0x5d, 0xa3, 0xed, 0xd0, 0xef, 0x22, 0x05, + 0x87, 0xf7, 0xc1, 0x5c, 0xfe, 0x88, 0x36, 0xd9, 0x46, 0x23, 0x62, 0x03, 0x6c, 0x6e, 0x67, 0xb5, + 0xdf, 0xd3, 0x2e, 0x8b, 0x5e, 0x4c, 0x5d, 0x86, 0xd3, 0x68, 0x44, 0x3a, 0x1a, 0xe0, 0x68, 0x3c, + 0x9f, 0x3a, 0x9e, 0xdf, 0x0e, 0xbd, 0x80, 0xec, 0xd9, 0x76, 0x85, 0x91, 0x17, 0x18, 0x59, 0x8a, + 0x67, 0x33, 0x81, 0x18, 0x2d, 0x42, 0xda, 0x42, 0x65, 0x98, 0x48, 0xe3, 0xb9, 0xe3, 0xc4, 0x98, + 0x8e, 0x5e, 0x9c, 0x6d, 0xa7, 0x75, 0x27, 0xc6, 0x62, 0x50, 0x0b, 0x0c, 0xfd, 0x08, 0xe9, 0x0d, + 0xac, 0xf0, 0x88, 0xdd, 0xb7, 0x99, 0xfd, 0x08, 0xd9, 0x7d, 0xfd, 0xf0, 0x48, 0x5c, 0x57, 0x06, + 0xc3, 0x3c, 0x58, 0xa4, 0x8f, 0xa2, 0xa3, 0x5a, 0x55, 0xf5, 0x1b, 0x85, 0xa5, 0x41, 0xfa, 0x6a, + 0x18, 0x5d, 0x74, 0x13, 0x3e, 0x85, 0x52, 0x0c, 0xf8, 0x0c, 0x2c, 0x0f, 0x0c, 0x95, 0x28, 0xec, + 0x9e, 0xa9, 0xdf, 0x72, 0x91, 0x0f, 0xfb, 0x3d, 0x4d, 0x1d, 0x16, 0x69, 0x53, 0x8c, 0x8e, 0xb2, + 0xac, 0xe4, 0x2c, 0xf4, 0xd3, 0xe6, 0x32, 0xdf, 0x8d, 0x3e, 0x0b, 0x6b, 0x09, 0x42, 0x24, 0xcd, + 0xa0, 0x0d, 0x72, 0xa0, 0x6a, 0x06, 0x0d, 0x16, 0x57, 0xf5, 0x7b, 0x25, 0xdb, 0x55, 0xe4, 0xe3, + 0x60, 0x01, 0xd3, 0xd1, 0x08, 0x2e, 0xfc, 0x09, 0xdf, 0xb0, 0xd4, 0xaf, 0xe9, 0xca, 0x34, 0x7f, + 0x6f, 0x7e, 0x9b, 0x2d, 0x6a, 0xdb, 0xd4, 0x26, 0xef, 0x59, 0x54, 0x50, 0x47, 0x0c, 0xaa, 0xff, + 0x7d, 0x01, 0xcc, 0xd8, 0x98, 0x35, 0x94, 0xc7, 0x60, 0x91, 0xff, 0x55, 0xc2, 0xe4, 0x8b, 0x30, + 0x3a, 0x1e, 0x2e, 0x46, 0xc2, 0xdc, 0x46, 0xc0, 0xfd, 0x3a, 0x4a, 0xe3, 0xe1, 0x4f, 0x01, 0xe0, + 0x06, 0x56, 0x51, 0x7c, 0x6d, 0xbb, 0xda, 0xef, 0x69, 0x30, 0xc5, 0xe6, 0x95, 0x24, 0x21, 0xe9, + 0x38, 0xdc, 0xc5, 0xbe, 0x73, 0x66, 0x39, 0x04, 0x07, 0xee, 0x99, 0xd8, 0xc5, 0x16, 0xe5, 0x71, + 0xd8, 0xa0, 0x7e, 0xc3, 0xe7, 0x00, 0xe3, 0x84, 0x8e, 0xc3, 0x34, 0x05, 0xfe, 0x0a, 0xe4, 0xd2, + 0x16, 0x74, 0xca, 0x8a, 0x7a, 0x51, 0x2e, 0xea, 0xac, 0x8c, 0x11, 0x9d, 0xea, 0x68, 0x88, 0x07, + 0x3f, 0x07, 0xab, 0x87, 0xed, 0x86, 0x43, 0x70, 0x23, 0x73, 0xae, 0x45, 0x26, 0x78, 0xab, 0xdf, + 0xd3, 0x34, 0x2e, 0xd8, 0xe1, 0x30, 0x63, 0xf8, 0x7c, 0xa3, 0x15, 0x68, 0x8c, 0x50, 0xd8, 0x09, + 0x1a, 0x96, 0x77, 0xe2, 0x11, 0x75, 0x75, 0x43, 0xd9, 0x9c, 0x96, 0x63, 0x14, 0x51, 0x9f, 0xe1, + 0x53, 0xa7, 0x8e, 0x24, 0x24, 0x7c, 0x02, 0x16, 0xcd, 0xae, 0x47, 0xca, 0x01, 0xfd, 0x02, 0x3b, + 0x11, 0x56, 0xaf, 0x0e, 0x95, 0x5b, 0xd7, 0x23, 0x46, 0x18, 0x18, 0x4d, 0x0e, 0xa0, 0xe5, 0x26, + 0x13, 0xe0, 0x1e, 0xc8, 0x15, 0xc2, 0x20, 0x66, 0x4b, 0x84, 0x7b, 0xc6, 0xdb, 0xd8, 0x5a, 0xb6, + 0xf4, 0xdd, 0x01, 0x22, 0x69, 0x61, 0x43, 0x2c, 0xf8, 0x00, 0xcc, 0x9b, 0x81, 0x53, 0xf7, 0x71, + 0xa5, 0x1d, 0x85, 0x4d, 0xb1, 0xc7, 0xad, 0xf5, 0x7b, 0xda, 0x8a, 0x38, 0x09, 0x73, 0x1a, 0x6d, + 0xea, 0xa5, 0x9f, 0xf0, 0x00, 0x0b, 0x1f, 0x81, 0x05, 0x71, 0x9e, 0x82, 0x13, 0xe3, 0x64, 0xef, + 0x91, 0xbe, 0x7f, 0x71, 0x7a, 0xc3, 0xa5, 0x6e, 0x1d, 0xa5, 0xd0, 0xb4, 0x50, 0xc4, 0x33, 0x8b, + 0xea, 0x01, 0x5d, 0x74, 0x32, 0x85, 0x92, 0xf0, 0x79, 0x42, 0x58, 0xa1, 0xa4, 0x29, 0x74, 0xf6, + 0x0a, 0x4b, 0xb5, 0xd5, 0x69, 0x36, 0x7d, 0x2c, 0xd6, 0x1a, 0x29, 0x94, 0x89, 0x48, 0xcc, 0x01, + 0x03, 0x0d, 0xc1, 0x80, 0xfb, 0x52, 0x0b, 0x2d, 0x84, 0x27, 0x27, 0x4e, 0xd0, 0x88, 0x55, 0x3d, + 0xbb, 0xa7, 0x0f, 0x5a, 0xa8, 0x2b, 0x30, 0x72, 0x07, 0x4d, 0x78, 0xf4, 0x56, 0xa8, 0x13, 0x04, + 0x38, 0x3a, 0x9f, 0x02, 0x7c, 0x19, 0x90, 0x6e, 0x15, 0x31, 0xbf, 0x3c, 0x07, 0x32, 0x14, 0xfa, + 0xc3, 0xc1, 0xec, 0x12, 0x1c, 0x05, 0x8e, 0x7f, 0x2e, 0xc3, 0x57, 0x01, 0xe9, 0x40, 0x58, 0x20, + 0x64, 0xa1, 0x21, 0x1a, 0x4d, 0x6f, 0x95, 0x44, 0x38, 0x8e, 0xed, 0xb3, 0x36, 0x8e, 0x55, 0xcc, + 0xae, 0x25, 0xa5, 0x37, 0x66, 0x4e, 0x83, 0x50, 0xaf, 0x8e, 0x64, 0x2c, 0xad, 0x52, 0xfe, 0xb8, + 0x8f, 0xcf, 0xaa, 0xde, 0x97, 0x98, 0xf5, 0xf7, 0x69, 0x39, 0xb4, 0x82, 0x4c, 0xd7, 0xac, 0xd8, + 0xfb, 0x92, 0x56, 0x69, 0x8a, 0x40, 0x9b, 0x62, 0xca, 0x60, 0x39, 0xd1, 0x11, 0x56, 0x8f, 0x98, + 0x8c, 0x34, 0x6e, 0x33, 0x32, 0x86, 0x4f, 0x61, 0x3a, 0x1a, 0xc1, 0x85, 0x2f, 0xc0, 0x95, 0x81, + 0xb5, 0xd3, 0x6c, 0x7a, 0x5d, 0xe4, 0x04, 0x47, 0x58, 0x6d, 0x31, 0x4d, 0xbd, 0xdf, 0xd3, 0xd6, + 0x87, 0x35, 0x19, 0xce, 0x88, 0x28, 0x50, 0x47, 0x23, 0xf9, 0xf0, 0xd7, 0x60, 0x6d, 0x94, 0xdd, + 0xee, 0x06, 0xaa, 0xc7, 0xa4, 0xa5, 0xf5, 0x7b, 0x8c, 0xb4, 0x41, 0xba, 0x81, 0x8e, 0xc6, 0xc9, + 0xd0, 0x61, 0x75, 0xee, 0xb2, 0xbb, 0x41, 0xb9, 0x1d, 0xab, 0xbf, 0x61, 0xca, 0x52, 0x4a, 0x25, + 0x65, 0xd2, 0x0d, 0x8c, 0xb0, 0x1d, 0xeb, 0x28, 0xcb, 0x1a, 0xa4, 0x85, 0xcf, 0x8b, 0x98, 0x0f, + 0xce, 0xe9, 0xd4, 0x0e, 0xc6, 0x75, 0xf8, 0x98, 0x89, 0xcf, 0xd3, 0x22, 0x08, 0xf0, 0x53, 0x30, + 0xc7, 0x0d, 0xcf, 0x2b, 0x55, 0x3e, 0x31, 0xa7, 0xe5, 0x4d, 0x43, 0xb0, 0x5f, 0xd3, 0xb7, 0x0f, + 0x80, 0xfa, 0x57, 0x0a, 0xf8, 0x00, 0xe1, 0xd7, 0x1d, 0x1c, 0x13, 0xb8, 0x0d, 0xe6, 0xca, 0x6d, + 0x1c, 0x39, 0xf4, 0xf7, 0x2e, 0x9b, 0x2c, 0x4b, 0xf7, 0x72, 0x62, 0x3e, 0x9d, 0xdb, 0xd1, 0x00, + 0x02, 0x6f, 0x27, 0x3b, 0x92, 0xca, 0x87, 0xd9, 0xa2, 0x00, 0x73, 0x23, 0x4a, 0x16, 0xa8, 0xdb, + 0xc9, 0xf8, 0x62, 0x3f, 0xfc, 0x07, 0x30, 0x6e, 0x44, 0xc2, 0xa9, 0x3f, 0x02, 0xb3, 0x08, 0xc7, + 0xed, 0x30, 0x88, 0x31, 0x54, 0xc1, 0x07, 0xd5, 0x8e, 0xeb, 0xe2, 0x38, 0x66, 0xe7, 0x98, 0x45, + 0xc9, 0x23, 0xbc, 0x0a, 0x66, 0xe8, 0x1e, 0xdc, 0x89, 0xf9, 0xf0, 0x42, 0xe2, 0x69, 0xeb, 0x1f, + 0x8a, 0x74, 0x78, 0xb8, 0x04, 0x40, 0x29, 0x24, 0x55, 0xe2, 0x44, 0x04, 0x37, 0x72, 0x13, 0xf0, + 0x0a, 0xc8, 0x89, 0x2d, 0x8f, 0xd9, 0xe8, 0x58, 0xcd, 0x29, 0x70, 0x19, 0xcc, 0x23, 0x1c, 0x9f, + 0x1b, 0x26, 0xe1, 0x02, 0x98, 0xdd, 0xf7, 0x7c, 0x9f, 0x3d, 0x4d, 0x51, 0x37, 0xed, 0x04, 0xf9, + 0xc8, 0x6d, 0x79, 0xa7, 0x38, 0x77, 0x89, 0xaa, 0xec, 0xe2, 0x98, 0x44, 0xe1, 0x19, 0x45, 0xb0, + 0x6d, 0x2d, 0x37, 0x0d, 0xaf, 0x81, 0xd5, 0x1d, 0xdf, 0x71, 0x8f, 0x5b, 0xa1, 0xcf, 0x7e, 0x95, + 0x55, 0xc2, 0x88, 0xd8, 0x5d, 0xd4, 0xcd, 0x35, 0xe0, 0x0d, 0xb0, 0x76, 0x18, 0xd4, 0x47, 0x3a, + 0x31, 0x5c, 0x05, 0x97, 0x59, 0xbf, 0x4b, 0x99, 0x9b, 0x70, 0x0d, 0xac, 0x1c, 0x06, 0x8d, 0x21, + 0xc7, 0xd1, 0xd6, 0x7f, 0x66, 0xf9, 0x79, 0x44, 0xab, 0xa5, 0xfc, 0xfd, 0xa2, 0x65, 0xd5, 0xca, + 0x25, 0xb3, 0xf6, 0xb4, 0x6c, 0x59, 0xe5, 0x97, 0x26, 0xca, 0x4d, 0xc0, 0x1f, 0x81, 0xcd, 0x21, + 0x73, 0xed, 0xb0, 0x64, 0x17, 0xad, 0x9a, 0x8d, 0x8a, 0xcf, 0x9e, 0x99, 0xa8, 0x56, 0x2d, 0xe5, + 0x2b, 0xd5, 0xbd, 0xb2, 0xcd, 0x43, 0xc0, 0xd0, 0x96, 0x99, 0xdf, 0x35, 0x51, 0x6e, 0x12, 0xde, + 0x01, 0xba, 0x64, 0x18, 0x47, 0x9c, 0x3a, 0x27, 0x3e, 0x3f, 0x2c, 0xa3, 0xc3, 0x83, 0xdc, 0x25, + 0x16, 0x3b, 0x6a, 0xc8, 0x5b, 0x56, 0x6e, 0x1a, 0x6e, 0x81, 0x3b, 0x3b, 0x56, 0xbe, 0xb0, 0xbf, + 0x57, 0xb6, 0xcc, 0x5a, 0xc5, 0x34, 0x51, 0xad, 0x52, 0x46, 0x76, 0xcd, 0x7e, 0x55, 0x43, 0xaf, + 0xd2, 0x27, 0x6e, 0xc0, 0x3c, 0xf8, 0xec, 0xfd, 0xb0, 0xe3, 0x4e, 0x83, 0xe1, 0xc7, 0x60, 0x63, + 0xbc, 0x84, 0xb8, 0x5b, 0x13, 0xfe, 0x02, 0xfc, 0xec, 0x5d, 0xa8, 0x71, 0xaf, 0x38, 0xba, 0xf8, + 0x15, 0x22, 0x0a, 0x2d, 0x78, 0x13, 0x7c, 0x34, 0x1e, 0x45, 0x43, 0xe3, 0xc1, 0xff, 0x03, 0xfa, + 0xae, 0x69, 0xe5, 0x3f, 0xbf, 0x38, 0x2c, 0x6f, 0x14, 0xb8, 0x0d, 0x3e, 0x41, 0xf9, 0xd2, 0x6e, + 0xf9, 0xa0, 0xf6, 0x1e, 0xf8, 0x6f, 0x14, 0xf8, 0x4b, 0xf0, 0xe0, 0xdd, 0xc0, 0x71, 0x17, 0xfc, + 0x56, 0x81, 0x26, 0x78, 0xf2, 0xde, 0xef, 0x1b, 0x27, 0xf3, 0x9d, 0x02, 0x6f, 0x82, 0x0f, 0x47, + 0xf3, 0x45, 0x1e, 0xbe, 0x57, 0xe0, 0x26, 0xb8, 0x75, 0xe1, 0x9b, 0x04, 0xf2, 0x8f, 0x0a, 0xfc, + 0x39, 0xb8, 0x7f, 0x11, 0x64, 0xdc, 0x31, 0xfe, 0xa4, 0xc0, 0xc7, 0xe0, 0xe1, 0x7b, 0xbc, 0x63, + 0x9c, 0xc0, 0x9f, 0x2f, 0xb8, 0x87, 0x48, 0xf6, 0x0f, 0xef, 0xbe, 0x87, 0x40, 0xfe, 0x45, 0x81, + 0xeb, 0xe0, 0xda, 0x68, 0x08, 0xad, 0x89, 0xbf, 0x2a, 0xf0, 0x36, 0xd8, 0xb8, 0x50, 0x89, 0xc2, + 0xfe, 0xa6, 0x40, 0x15, 0xac, 0x94, 0xca, 0xb5, 0xa7, 0xf9, 0xa2, 0x55, 0x7b, 0x59, 0xb4, 0xf7, + 0x6a, 0x55, 0x1b, 0x99, 0xd5, 0x6a, 0xee, 0x0f, 0x93, 0xf4, 0x28, 0x29, 0x4f, 0xa9, 0x2c, 0x9c, + 0xb5, 0xa7, 0x65, 0x54, 0xb3, 0x8a, 0x2f, 0xcc, 0x12, 0x45, 0x7e, 0x3d, 0x09, 0x97, 0x01, 0xa0, + 0xb0, 0x4a, 0xb9, 0x58, 0xb2, 0xab, 0xb9, 0xdf, 0x4d, 0xc1, 0x45, 0x30, 0x6b, 0xbe, 0xb2, 0x4d, + 0x54, 0xca, 0x5b, 0xb9, 0xff, 0x4e, 0x6d, 0x85, 0x00, 0x0c, 0xf6, 0x05, 0x38, 0x03, 0x26, 0xf7, + 0x5f, 0xe4, 0x26, 0xe0, 0x1c, 0x98, 0xb6, 0xcc, 0x7c, 0xd5, 0xcc, 0x29, 0x70, 0x05, 0x2c, 0x9b, + 0x96, 0x59, 0xb0, 0x8b, 0xe5, 0x52, 0x0d, 0x1d, 0x96, 0x4a, 0xac, 0x6f, 0xe4, 0xc0, 0xc2, 0xcb, + 0xbc, 0x5d, 0xd8, 0x4b, 0x2c, 0x53, 0xb4, 0x3f, 0x59, 0xe5, 0xc2, 0x7e, 0x0d, 0xe5, 0x0b, 0x26, + 0x4a, 0xcc, 0x97, 0x28, 0x90, 0x09, 0x25, 0x96, 0xe9, 0x7b, 0x8f, 0xc1, 0x9c, 0x1d, 0x39, 0x41, + 0xdc, 0x0e, 0x23, 0x02, 0xef, 0xc9, 0x0f, 0x4b, 0x62, 0x52, 0x88, 0x01, 0x75, 0x7d, 0xf9, 0xfc, + 0x99, 0xcf, 0x09, 0x7d, 0x62, 0x53, 0xf9, 0xb1, 0xb2, 0x73, 0xe5, 0xcd, 0xbf, 0xd6, 0x27, 0xde, + 0xbc, 0x5d, 0x57, 0x7e, 0x78, 0xbb, 0xae, 0xfc, 0xf3, 0xed, 0xba, 0xf2, 0xfb, 0x7f, 0xaf, 0x4f, + 0xd4, 0x67, 0xd8, 0xff, 0xb4, 0xef, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x02, 0xb3, 0xfd, 0x10, + 0x1c, 0x17, 0x00, 0x00, } diff --git a/tools/functional-tester/rpcpb/rpc.proto b/tools/functional-tester/rpcpb/rpc.proto index f44f245d1a1..5defeace09f 100644 --- a/tools/functional-tester/rpcpb/rpc.proto +++ b/tools/functional-tester/rpcpb/rpc.proto @@ -48,20 +48,29 @@ message Etcd { repeated string ListenClientURLs = 21 [(gogoproto.moretags) = "yaml:\"listen-client-urls\""]; repeated string AdvertiseClientURLs = 22 [(gogoproto.moretags) = "yaml:\"advertise-client-urls\""]; - repeated string ListenPeerURLs = 23 [(gogoproto.moretags) = "yaml:\"listen-peer-urls\""]; - repeated string InitialAdvertisePeerURLs = 24 [(gogoproto.moretags) = "yaml:\"initial-advertise-peer-urls\""]; - - string InitialCluster = 31 [(gogoproto.moretags) = "yaml:\"initial-cluster\""]; - string InitialClusterState = 32 [(gogoproto.moretags) = "yaml:\"initial-cluster-state\""]; - string InitialClusterToken = 33 [(gogoproto.moretags) = "yaml:\"initial-cluster-token\""]; - - int64 SnapshotCount = 41 [(gogoproto.moretags) = "yaml:\"snapshot-count\""]; - int64 QuotaBackendBytes = 42 [(gogoproto.moretags) = "yaml:\"quota-backend-bytes\""]; - - bool PreVote = 43 [(gogoproto.moretags) = "yaml:\"pre-vote\""]; - bool InitialCorruptCheck = 44 [(gogoproto.moretags) = "yaml:\"initial-corrupt-check\""]; - - // TODO: support TLS + bool ClientAutoTLS = 23 [(gogoproto.moretags) = "yaml:\"auto-tls\""]; + bool ClientCertAuth = 24 [(gogoproto.moretags) = "yaml:\"client-cert-auth\""]; + string ClientCertFile = 25 [(gogoproto.moretags) = "yaml:\"cert-file\""]; + string ClientKeyFile = 26 [(gogoproto.moretags) = "yaml:\"key-file\""]; + string ClientTrustedCAFile = 27 [(gogoproto.moretags) = "yaml:\"trusted-ca-file\""]; + + repeated string ListenPeerURLs = 31 [(gogoproto.moretags) = "yaml:\"listen-peer-urls\""]; + repeated string InitialAdvertisePeerURLs = 32 [(gogoproto.moretags) = "yaml:\"initial-advertise-peer-urls\""]; + bool PeerAutoTLS = 33 [(gogoproto.moretags) = "yaml:\"peer-auto-tls\""]; + bool PeerClientCertAuth = 34 [(gogoproto.moretags) = "yaml:\"peer-client-cert-auth\""]; + string PeerCertFile = 35 [(gogoproto.moretags) = "yaml:\"peer-cert-file\""]; + string PeerKeyFile = 36 [(gogoproto.moretags) = "yaml:\"peer-key-file\""]; + string PeerTrustedCAFile = 37 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-file\""]; + + string InitialCluster = 41 [(gogoproto.moretags) = "yaml:\"initial-cluster\""]; + string InitialClusterState = 42 [(gogoproto.moretags) = "yaml:\"initial-cluster-state\""]; + string InitialClusterToken = 43 [(gogoproto.moretags) = "yaml:\"initial-cluster-token\""]; + + int64 SnapshotCount = 51 [(gogoproto.moretags) = "yaml:\"snapshot-count\""]; + int64 QuotaBackendBytes = 52 [(gogoproto.moretags) = "yaml:\"quota-backend-bytes\""]; + + bool PreVote = 63 [(gogoproto.moretags) = "yaml:\"pre-vote\""]; + bool InitialCorruptCheck = 64 [(gogoproto.moretags) = "yaml:\"initial-corrupt-check\""]; } message Member { From 09a4e059c5c239f2e613208074fc56346b1dc4fb Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 14:01:05 -0700 Subject: [PATCH 04/14] functional-tester/rpcpb: rename "AdvertisePeerURLs", add more tests Signed-off-by: Gyuho Lee --- tools/functional-tester/rpcpb/etcd_config.go | 2 +- .../rpcpb/etcd_config_test.go | 30 +- tools/functional-tester/rpcpb/rpc.pb.go | 346 +++++++++--------- tools/functional-tester/rpcpb/rpc.proto | 2 +- 4 files changed, 190 insertions(+), 190 deletions(-) diff --git a/tools/functional-tester/rpcpb/etcd_config.go b/tools/functional-tester/rpcpb/etcd_config.go index 0debd3a472a..fec65ea78ec 100644 --- a/tools/functional-tester/rpcpb/etcd_config.go +++ b/tools/functional-tester/rpcpb/etcd_config.go @@ -37,7 +37,7 @@ var etcdFields = []string{ "ClientTrustedCAFile", "ListenPeerURLs", - "InitialAdvertisePeerURLs", + "AdvertisePeerURLs", "PeerAutoTLS", "PeerClientCertAuth", "PeerCertFile", diff --git a/tools/functional-tester/rpcpb/etcd_config_test.go b/tools/functional-tester/rpcpb/etcd_config_test.go index 1f7feed7580..fce23624476 100644 --- a/tools/functional-tester/rpcpb/etcd_config_test.go +++ b/tools/functional-tester/rpcpb/etcd_config_test.go @@ -28,23 +28,23 @@ func TestEtcdFlags(t *testing.T) { HeartbeatIntervalMs: 100, ElectionTimeoutMs: 1000, - ListenClientURLs: []string{"127.0.0.1:1379"}, - AdvertiseClientURLs: []string{"127.0.0.1:13790"}, + ListenClientURLs: []string{"https://127.0.0.1:1379"}, + AdvertiseClientURLs: []string{"https://127.0.0.1:13790"}, ClientAutoTLS: true, ClientCertAuth: false, ClientCertFile: "", ClientKeyFile: "", ClientTrustedCAFile: "", - ListenPeerURLs: []string{"127.0.0.1:1380"}, - InitialAdvertisePeerURLs: []string{"127.0.0.1:13800"}, - PeerAutoTLS: true, - PeerClientCertAuth: false, - PeerCertFile: "", - PeerKeyFile: "", - PeerTrustedCAFile: "", + ListenPeerURLs: []string{"https://127.0.0.1:1380"}, + AdvertisePeerURLs: []string{"https://127.0.0.1:13800"}, + PeerAutoTLS: true, + PeerClientCertAuth: false, + PeerCertFile: "", + PeerKeyFile: "", + PeerTrustedCAFile: "", - InitialCluster: "s1=127.0.0.1:13800,s2=127.0.0.1:23800,s3=127.0.0.1:33800", + InitialCluster: "s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800", InitialClusterState: "new", InitialClusterToken: "tkn", @@ -61,15 +61,15 @@ func TestEtcdFlags(t *testing.T) { "--wal-dir=/tmp/etcd-agent-data-1/etcd.data/member/wal", "--heartbeat-interval=100", "--election-timeout=1000", - "--listen-client-urls=127.0.0.1:1379", - "--advertise-client-urls=127.0.0.1:13790", + "--listen-client-urls=https://127.0.0.1:1379", + "--advertise-client-urls=https://127.0.0.1:13790", "--auto-tls=true", "--client-cert-auth=false", - "--listen-peer-urls=127.0.0.1:1380", - "--initial-advertise-peer-urls=127.0.0.1:13800", + "--listen-peer-urls=https://127.0.0.1:1380", + "--initial-advertise-peer-urls=https://127.0.0.1:13800", "--peer-auto-tls=true", "--peer-client-cert-auth=false", - "--initial-cluster=s1=127.0.0.1:13800,s2=127.0.0.1:23800,s3=127.0.0.1:33800", + "--initial-cluster=s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800", "--initial-cluster-state=new", "--initial-cluster-token=tkn", "--snapshot-count=10000", diff --git a/tools/functional-tester/rpcpb/rpc.pb.go b/tools/functional-tester/rpcpb/rpc.pb.go index 7146d2635b9..e8a24fa7462 100644 --- a/tools/functional-tester/rpcpb/rpc.pb.go +++ b/tools/functional-tester/rpcpb/rpc.pb.go @@ -234,28 +234,28 @@ type Etcd struct { HeartbeatIntervalMs int64 `protobuf:"varint,11,opt,name=HeartbeatIntervalMs,proto3" json:"HeartbeatIntervalMs,omitempty" yaml:"heartbeat-interval"` // ElectionTimeoutMs is the time (in milliseconds) for an election to timeout. // Default value is 1000, which is 1s. - ElectionTimeoutMs int64 `protobuf:"varint,12,opt,name=ElectionTimeoutMs,proto3" json:"ElectionTimeoutMs,omitempty" yaml:"election-timeout"` - ListenClientURLs []string `protobuf:"bytes,21,rep,name=ListenClientURLs" json:"ListenClientURLs,omitempty" yaml:"listen-client-urls"` - AdvertiseClientURLs []string `protobuf:"bytes,22,rep,name=AdvertiseClientURLs" json:"AdvertiseClientURLs,omitempty" yaml:"advertise-client-urls"` - ClientAutoTLS bool `protobuf:"varint,23,opt,name=ClientAutoTLS,proto3" json:"ClientAutoTLS,omitempty" yaml:"auto-tls"` - ClientCertAuth bool `protobuf:"varint,24,opt,name=ClientCertAuth,proto3" json:"ClientCertAuth,omitempty" yaml:"client-cert-auth"` - ClientCertFile string `protobuf:"bytes,25,opt,name=ClientCertFile,proto3" json:"ClientCertFile,omitempty" yaml:"cert-file"` - ClientKeyFile string `protobuf:"bytes,26,opt,name=ClientKeyFile,proto3" json:"ClientKeyFile,omitempty" yaml:"key-file"` - ClientTrustedCAFile string `protobuf:"bytes,27,opt,name=ClientTrustedCAFile,proto3" json:"ClientTrustedCAFile,omitempty" yaml:"trusted-ca-file"` - ListenPeerURLs []string `protobuf:"bytes,31,rep,name=ListenPeerURLs" json:"ListenPeerURLs,omitempty" yaml:"listen-peer-urls"` - InitialAdvertisePeerURLs []string `protobuf:"bytes,32,rep,name=InitialAdvertisePeerURLs" json:"InitialAdvertisePeerURLs,omitempty" yaml:"initial-advertise-peer-urls"` - PeerAutoTLS bool `protobuf:"varint,33,opt,name=PeerAutoTLS,proto3" json:"PeerAutoTLS,omitempty" yaml:"peer-auto-tls"` - PeerClientCertAuth bool `protobuf:"varint,34,opt,name=PeerClientCertAuth,proto3" json:"PeerClientCertAuth,omitempty" yaml:"peer-client-cert-auth"` - PeerCertFile string `protobuf:"bytes,35,opt,name=PeerCertFile,proto3" json:"PeerCertFile,omitempty" yaml:"peer-cert-file"` - PeerKeyFile string `protobuf:"bytes,36,opt,name=PeerKeyFile,proto3" json:"PeerKeyFile,omitempty" yaml:"peer-key-file"` - PeerTrustedCAFile string `protobuf:"bytes,37,opt,name=PeerTrustedCAFile,proto3" json:"PeerTrustedCAFile,omitempty" yaml:"peer-trusted-ca-file"` - InitialCluster string `protobuf:"bytes,41,opt,name=InitialCluster,proto3" json:"InitialCluster,omitempty" yaml:"initial-cluster"` - InitialClusterState string `protobuf:"bytes,42,opt,name=InitialClusterState,proto3" json:"InitialClusterState,omitempty" yaml:"initial-cluster-state"` - InitialClusterToken string `protobuf:"bytes,43,opt,name=InitialClusterToken,proto3" json:"InitialClusterToken,omitempty" yaml:"initial-cluster-token"` - SnapshotCount int64 `protobuf:"varint,51,opt,name=SnapshotCount,proto3" json:"SnapshotCount,omitempty" yaml:"snapshot-count"` - QuotaBackendBytes int64 `protobuf:"varint,52,opt,name=QuotaBackendBytes,proto3" json:"QuotaBackendBytes,omitempty" yaml:"quota-backend-bytes"` - PreVote bool `protobuf:"varint,63,opt,name=PreVote,proto3" json:"PreVote,omitempty" yaml:"pre-vote"` - InitialCorruptCheck bool `protobuf:"varint,64,opt,name=InitialCorruptCheck,proto3" json:"InitialCorruptCheck,omitempty" yaml:"initial-corrupt-check"` + ElectionTimeoutMs int64 `protobuf:"varint,12,opt,name=ElectionTimeoutMs,proto3" json:"ElectionTimeoutMs,omitempty" yaml:"election-timeout"` + ListenClientURLs []string `protobuf:"bytes,21,rep,name=ListenClientURLs" json:"ListenClientURLs,omitempty" yaml:"listen-client-urls"` + AdvertiseClientURLs []string `protobuf:"bytes,22,rep,name=AdvertiseClientURLs" json:"AdvertiseClientURLs,omitempty" yaml:"advertise-client-urls"` + ClientAutoTLS bool `protobuf:"varint,23,opt,name=ClientAutoTLS,proto3" json:"ClientAutoTLS,omitempty" yaml:"auto-tls"` + ClientCertAuth bool `protobuf:"varint,24,opt,name=ClientCertAuth,proto3" json:"ClientCertAuth,omitempty" yaml:"client-cert-auth"` + ClientCertFile string `protobuf:"bytes,25,opt,name=ClientCertFile,proto3" json:"ClientCertFile,omitempty" yaml:"cert-file"` + ClientKeyFile string `protobuf:"bytes,26,opt,name=ClientKeyFile,proto3" json:"ClientKeyFile,omitempty" yaml:"key-file"` + ClientTrustedCAFile string `protobuf:"bytes,27,opt,name=ClientTrustedCAFile,proto3" json:"ClientTrustedCAFile,omitempty" yaml:"trusted-ca-file"` + ListenPeerURLs []string `protobuf:"bytes,31,rep,name=ListenPeerURLs" json:"ListenPeerURLs,omitempty" yaml:"listen-peer-urls"` + AdvertisePeerURLs []string `protobuf:"bytes,32,rep,name=AdvertisePeerURLs" json:"AdvertisePeerURLs,omitempty" yaml:"initial-advertise-peer-urls"` + PeerAutoTLS bool `protobuf:"varint,33,opt,name=PeerAutoTLS,proto3" json:"PeerAutoTLS,omitempty" yaml:"peer-auto-tls"` + PeerClientCertAuth bool `protobuf:"varint,34,opt,name=PeerClientCertAuth,proto3" json:"PeerClientCertAuth,omitempty" yaml:"peer-client-cert-auth"` + PeerCertFile string `protobuf:"bytes,35,opt,name=PeerCertFile,proto3" json:"PeerCertFile,omitempty" yaml:"peer-cert-file"` + PeerKeyFile string `protobuf:"bytes,36,opt,name=PeerKeyFile,proto3" json:"PeerKeyFile,omitempty" yaml:"peer-key-file"` + PeerTrustedCAFile string `protobuf:"bytes,37,opt,name=PeerTrustedCAFile,proto3" json:"PeerTrustedCAFile,omitempty" yaml:"peer-trusted-ca-file"` + InitialCluster string `protobuf:"bytes,41,opt,name=InitialCluster,proto3" json:"InitialCluster,omitempty" yaml:"initial-cluster"` + InitialClusterState string `protobuf:"bytes,42,opt,name=InitialClusterState,proto3" json:"InitialClusterState,omitempty" yaml:"initial-cluster-state"` + InitialClusterToken string `protobuf:"bytes,43,opt,name=InitialClusterToken,proto3" json:"InitialClusterToken,omitempty" yaml:"initial-cluster-token"` + SnapshotCount int64 `protobuf:"varint,51,opt,name=SnapshotCount,proto3" json:"SnapshotCount,omitempty" yaml:"snapshot-count"` + QuotaBackendBytes int64 `protobuf:"varint,52,opt,name=QuotaBackendBytes,proto3" json:"QuotaBackendBytes,omitempty" yaml:"quota-backend-bytes"` + PreVote bool `protobuf:"varint,63,opt,name=PreVote,proto3" json:"PreVote,omitempty" yaml:"pre-vote"` + InitialCorruptCheck bool `protobuf:"varint,64,opt,name=InitialCorruptCheck,proto3" json:"InitialCorruptCheck,omitempty" yaml:"initial-corrupt-check"` } func (m *Etcd) Reset() { *m = Etcd{} } @@ -632,8 +632,8 @@ func (m *Etcd) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], s) } } - if len(m.InitialAdvertisePeerURLs) > 0 { - for _, s := range m.InitialAdvertisePeerURLs { + if len(m.AdvertisePeerURLs) > 0 { + for _, s := range m.AdvertisePeerURLs { dAtA[i] = 0x82 i++ dAtA[i] = 0x2 @@ -1236,8 +1236,8 @@ func (m *Etcd) Size() (n int) { n += 2 + l + sovRpc(uint64(l)) } } - if len(m.InitialAdvertisePeerURLs) > 0 { - for _, s := range m.InitialAdvertisePeerURLs { + if len(m.AdvertisePeerURLs) > 0 { + for _, s := range m.AdvertisePeerURLs { l = len(s) n += 2 + l + sovRpc(uint64(l)) } @@ -1831,7 +1831,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 32: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialAdvertisePeerURLs", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AdvertisePeerURLs", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1856,7 +1856,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.InitialAdvertisePeerURLs = append(m.InitialAdvertisePeerURLs, string(dAtA[iNdEx:postIndex])) + m.AdvertisePeerURLs = append(m.AdvertisePeerURLs, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 33: if wireType != 0 { @@ -3391,149 +3391,149 @@ var ( func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) } var fileDescriptorRpc = []byte{ - // 2292 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0xdd, 0x56, 0xdb, 0xd8, - 0xf5, 0x47, 0x10, 0x18, 0x38, 0x7c, 0x39, 0x87, 0x10, 0x94, 0x64, 0x06, 0x11, 0x65, 0x92, 0x3f, - 0xc3, 0xbf, 0x22, 0x6d, 0x32, 0xab, 0x6d, 0xd2, 0x4c, 0x13, 0x63, 0x94, 0xe0, 0x22, 0x6c, 0xe7, - 0x58, 0x24, 0x99, 0x2b, 0x57, 0x96, 0x8f, 0xb1, 0x8a, 0x90, 0x1c, 0xe9, 0x98, 0x31, 0xf3, 0x02, - 0xb3, 0x7a, 0xd7, 0xcb, 0x3e, 0x44, 0xe7, 0x3d, 0x32, 0x1f, 0x6d, 0xa7, 0xed, 0x5d, 0x2f, 0xdc, - 0x36, 0x5d, 0x7d, 0x01, 0xaf, 0x3e, 0x40, 0xd7, 0xf9, 0x10, 0x3e, 0x92, 0x6d, 0x92, 0x3b, 0xb4, - 0xf7, 0xef, 0xf7, 0xd3, 0x39, 0x7b, 0x6f, 0xed, 0xbd, 0x0d, 0x58, 0x8e, 0xda, 0x6e, 0xbb, 0x7e, - 0x37, 0x6a, 0xbb, 0xdb, 0xed, 0x28, 0x24, 0x21, 0x9c, 0x66, 0x86, 0xeb, 0xc6, 0x91, 0x47, 0x5a, - 0x9d, 0xfa, 0xb6, 0x1b, 0x9e, 0xdc, 0x3d, 0x0a, 0x8f, 0xc2, 0xbb, 0xcc, 0x5b, 0xef, 0x34, 0xd9, - 0x13, 0x7b, 0x60, 0x7f, 0x71, 0x96, 0xfe, 0xd5, 0x12, 0xb8, 0x64, 0x12, 0xb7, 0x01, 0x6f, 0x81, - 0x4b, 0x25, 0xe7, 0x04, 0xab, 0xca, 0x86, 0xb2, 0x39, 0xb7, 0xb3, 0xdc, 0xef, 0x69, 0xf3, 0x67, - 0xce, 0x89, 0xff, 0x50, 0x0f, 0x9c, 0x13, 0xac, 0x23, 0xe6, 0x84, 0x06, 0xf8, 0x60, 0xd7, 0x21, - 0xce, 0xae, 0x17, 0xa9, 0x93, 0x0c, 0xb7, 0xd2, 0xef, 0x69, 0xcb, 0x1c, 0xd7, 0x70, 0x88, 0x63, - 0x34, 0xbc, 0x48, 0x47, 0x09, 0x06, 0x6e, 0x81, 0x99, 0x97, 0x79, 0x8b, 0xa2, 0xa7, 0x18, 0x1a, - 0xf6, 0x7b, 0xda, 0x12, 0x47, 0x7f, 0xe1, 0xf8, 0x1c, 0x2c, 0x10, 0xb0, 0x0c, 0x56, 0xf6, 0xb0, - 0x13, 0x91, 0x3a, 0x76, 0x48, 0x31, 0x20, 0x38, 0x3a, 0x75, 0xfc, 0x83, 0x58, 0x9d, 0xdf, 0x50, - 0x36, 0xa7, 0x76, 0x3e, 0xea, 0xf7, 0xb4, 0x6b, 0x9c, 0xd8, 0x4a, 0x40, 0x86, 0x27, 0x50, 0x3a, - 0x1a, 0xc5, 0x84, 0x45, 0x70, 0xd9, 0xf4, 0xb1, 0x4b, 0xbc, 0x30, 0xb0, 0xbd, 0x13, 0x1c, 0x76, - 0xc8, 0x41, 0xac, 0x2e, 0x30, 0xb9, 0x1b, 0xfd, 0x9e, 0xb6, 0xc6, 0xe5, 0xb0, 0x80, 0x18, 0x84, - 0x63, 0x74, 0x34, 0xcc, 0x82, 0x45, 0x90, 0xb3, 0xbc, 0x98, 0xe0, 0xa0, 0xe0, 0x7b, 0x38, 0x20, - 0x87, 0xc8, 0x8a, 0xd5, 0xd5, 0x8d, 0xa9, 0xcd, 0x39, 0xf9, 0x60, 0x3e, 0x43, 0x18, 0x2e, 0x83, - 0x18, 0x9d, 0xc8, 0x8f, 0x75, 0x34, 0x44, 0x83, 0x08, 0xac, 0xe4, 0x1b, 0xa7, 0x38, 0x22, 0x5e, - 0x8c, 0x25, 0xb5, 0xab, 0x4c, 0x6d, 0xa3, 0xdf, 0xd3, 0x3e, 0xe4, 0x6a, 0x4e, 0x02, 0x4a, 0x0b, - 0x8e, 0x22, 0xc3, 0x07, 0x60, 0x91, 0x3f, 0xe5, 0x3b, 0x24, 0xb4, 0xad, 0xaa, 0xba, 0xb6, 0xa1, - 0x6c, 0xce, 0xca, 0xb9, 0x71, 0x3a, 0x24, 0x34, 0x08, 0x15, 0x48, 0x23, 0x61, 0x01, 0x2c, 0x71, - 0x43, 0x01, 0x47, 0xd4, 0xd8, 0x52, 0x55, 0xc6, 0x95, 0x22, 0x24, 0xde, 0xef, 0xe2, 0x88, 0x18, - 0x4e, 0x87, 0xb4, 0x74, 0x94, 0xa1, 0xc0, 0x47, 0xb2, 0xc8, 0x53, 0xcf, 0xc7, 0xea, 0x35, 0x96, - 0xee, 0x2b, 0xfd, 0x9e, 0x96, 0x13, 0x22, 0x94, 0xdd, 0xf4, 0x7c, 0x9c, 0x62, 0x53, 0xec, 0xe0, - 0xf4, 0xfb, 0xf8, 0x8c, 0x91, 0xaf, 0x67, 0x2b, 0xeb, 0x18, 0x9f, 0x09, 0x6e, 0x1a, 0x09, 0x2d, - 0xb0, 0xc2, 0x0d, 0x76, 0xd4, 0x89, 0x09, 0x6e, 0x14, 0xf2, 0x4c, 0xe0, 0x06, 0x13, 0xb8, 0xde, - 0xef, 0x69, 0x57, 0xb9, 0x00, 0xe1, 0x6e, 0xc3, 0x75, 0x84, 0xce, 0x28, 0x1a, 0x8d, 0x05, 0x4f, - 0x57, 0x05, 0xe3, 0x88, 0x65, 0x45, 0x63, 0x59, 0x91, 0x62, 0x21, 0x72, 0xdc, 0xc6, 0x38, 0x12, - 0x09, 0xc9, 0x50, 0x60, 0x1d, 0xa8, 0xc5, 0xc0, 0x23, 0x9e, 0xe3, 0x9f, 0x67, 0xea, 0x5c, 0x6e, - 0x83, 0xc9, 0xdd, 0xe9, 0xf7, 0x34, 0x9d, 0xcb, 0x79, 0x1c, 0x69, 0x0c, 0x92, 0x2d, 0x29, 0x8f, - 0xd5, 0x81, 0x0f, 0xc1, 0x3c, 0xfd, 0x3b, 0xc9, 0xf6, 0x4d, 0x96, 0x31, 0xb5, 0xdf, 0xd3, 0xae, - 0x70, 0x59, 0x26, 0x32, 0x48, 0xb9, 0x0c, 0x86, 0x15, 0x00, 0xe9, 0x63, 0x26, 0xe9, 0x3a, 0x93, - 0x90, 0xca, 0x8f, 0x49, 0x0c, 0x67, 0x7e, 0x04, 0x17, 0x7e, 0x06, 0x16, 0x98, 0x35, 0xc9, 0xfd, - 0x2d, 0x16, 0xfd, 0x6b, 0xfd, 0x9e, 0xb6, 0x2a, 0x6b, 0x0d, 0x0a, 0x20, 0x05, 0x4f, 0x2e, 0x93, - 0x24, 0xff, 0x63, 0xc6, 0xce, 0x5e, 0x66, 0x50, 0x01, 0x32, 0x18, 0x1e, 0x80, 0xcb, 0xf4, 0x31, - 0x9d, 0xfd, 0xdb, 0x4c, 0x41, 0xeb, 0xf7, 0xb4, 0x1b, 0x92, 0xc2, 0x50, 0x09, 0x0c, 0x33, 0xe1, - 0x0e, 0x58, 0x12, 0x31, 0x2f, 0xf8, 0xd4, 0x1e, 0xa9, 0x9f, 0x64, 0x2b, 0x29, 0xc9, 0x98, 0xcb, - 0x01, 0x3a, 0xca, 0x30, 0xe8, 0xf7, 0x9d, 0xb6, 0x54, 0x89, 0x43, 0xb0, 0xba, 0xc5, 0x84, 0xa4, - 0x00, 0x67, 0x84, 0x8c, 0x98, 0xc2, 0x74, 0x34, 0x8a, 0x3c, 0xac, 0x69, 0x87, 0xc7, 0x38, 0x50, - 0xff, 0xff, 0x5d, 0x9a, 0x84, 0xc2, 0x86, 0x34, 0x19, 0x19, 0x3e, 0x06, 0x8b, 0xd5, 0xc0, 0x69, - 0xc7, 0xad, 0x90, 0x14, 0xc2, 0x4e, 0x40, 0xd4, 0xfb, 0xac, 0x33, 0x4a, 0x69, 0x8b, 0x85, 0xdb, - 0x70, 0xa9, 0x5f, 0x47, 0x69, 0x3c, 0xb4, 0xc0, 0xe5, 0xe7, 0x9d, 0x90, 0x38, 0x3b, 0x8e, 0x7b, - 0x8c, 0x83, 0xc6, 0xce, 0x19, 0xc1, 0xb1, 0xfa, 0x29, 0x13, 0x59, 0xef, 0xf7, 0xb4, 0xeb, 0x5c, - 0xe4, 0x35, 0x85, 0x18, 0x75, 0x8e, 0x31, 0xea, 0x14, 0xa4, 0xa3, 0x61, 0x22, 0x1d, 0x2c, 0x95, - 0x08, 0xbf, 0x08, 0x09, 0x56, 0x1f, 0x67, 0x9b, 0x57, 0x3b, 0xc2, 0xc6, 0x69, 0x48, 0xa3, 0x93, - 0x60, 0xe4, 0x88, 0x84, 0x51, 0xd4, 0x69, 0x93, 0x42, 0x0b, 0xbb, 0xc7, 0xea, 0x93, 0x6c, 0x19, - 0x9f, 0x47, 0x84, 0xa3, 0x0c, 0x97, 0xc2, 0xa4, 0x88, 0x48, 0x64, 0xfd, 0xb7, 0xd3, 0x60, 0xe6, - 0x00, 0x9f, 0xd4, 0x71, 0x44, 0x4b, 0x9a, 0xce, 0x44, 0xb3, 0x8b, 0xdd, 0x8a, 0x43, 0x5a, 0x62, - 0x26, 0x4a, 0xb1, 0xc1, 0xc4, 0x6d, 0x18, 0xb8, 0x8b, 0x5d, 0xa3, 0xed, 0xd0, 0xef, 0x22, 0x05, - 0x87, 0xf7, 0xc1, 0x5c, 0xfe, 0x88, 0x36, 0xd9, 0x46, 0x23, 0x62, 0x03, 0x6c, 0x6e, 0x67, 0xb5, - 0xdf, 0xd3, 0x2e, 0x8b, 0x5e, 0x4c, 0x5d, 0x86, 0xd3, 0x68, 0x44, 0x3a, 0x1a, 0xe0, 0x68, 0x3c, - 0x9f, 0x3a, 0x9e, 0xdf, 0x0e, 0xbd, 0x80, 0xec, 0xd9, 0x76, 0x85, 0x91, 0x17, 0x18, 0x59, 0x8a, - 0x67, 0x33, 0x81, 0x18, 0x2d, 0x42, 0xda, 0x42, 0x65, 0x98, 0x48, 0xe3, 0xb9, 0xe3, 0xc4, 0x98, - 0x8e, 0x5e, 0x9c, 0x6d, 0xa7, 0x75, 0x27, 0xc6, 0x62, 0x50, 0x0b, 0x0c, 0xfd, 0x08, 0xe9, 0x0d, - 0xac, 0xf0, 0x88, 0xdd, 0xb7, 0x99, 0xfd, 0x08, 0xd9, 0x7d, 0xfd, 0xf0, 0x48, 0x5c, 0x57, 0x06, - 0xc3, 0x3c, 0x58, 0xa4, 0x8f, 0xa2, 0xa3, 0x5a, 0x55, 0xf5, 0x1b, 0x85, 0xa5, 0x41, 0xfa, 0x6a, - 0x18, 0x5d, 0x74, 0x13, 0x3e, 0x85, 0x52, 0x0c, 0xf8, 0x0c, 0x2c, 0x0f, 0x0c, 0x95, 0x28, 0xec, - 0x9e, 0xa9, 0xdf, 0x72, 0x91, 0x0f, 0xfb, 0x3d, 0x4d, 0x1d, 0x16, 0x69, 0x53, 0x8c, 0x8e, 0xb2, - 0xac, 0xe4, 0x2c, 0xf4, 0xd3, 0xe6, 0x32, 0xdf, 0x8d, 0x3e, 0x0b, 0x6b, 0x09, 0x42, 0x24, 0xcd, - 0xa0, 0x0d, 0x72, 0xa0, 0x6a, 0x06, 0x0d, 0x16, 0x57, 0xf5, 0x7b, 0x25, 0xdb, 0x55, 0xe4, 0xe3, - 0x60, 0x01, 0xd3, 0xd1, 0x08, 0x2e, 0xfc, 0x09, 0xdf, 0xb0, 0xd4, 0xaf, 0xe9, 0xca, 0x34, 0x7f, - 0x6f, 0x7e, 0x9b, 0x2d, 0x6a, 0xdb, 0xd4, 0x26, 0xef, 0x59, 0x54, 0x50, 0x47, 0x0c, 0xaa, 0xff, - 0x7d, 0x01, 0xcc, 0xd8, 0x98, 0x35, 0x94, 0xc7, 0x60, 0x91, 0xff, 0x55, 0xc2, 0xe4, 0x8b, 0x30, - 0x3a, 0x1e, 0x2e, 0x46, 0xc2, 0xdc, 0x46, 0xc0, 0xfd, 0x3a, 0x4a, 0xe3, 0xe1, 0x4f, 0x01, 0xe0, - 0x06, 0x56, 0x51, 0x7c, 0x6d, 0xbb, 0xda, 0xef, 0x69, 0x30, 0xc5, 0xe6, 0x95, 0x24, 0x21, 0xe9, - 0x38, 0xdc, 0xc5, 0xbe, 0x73, 0x66, 0x39, 0x04, 0x07, 0xee, 0x99, 0xd8, 0xc5, 0x16, 0xe5, 0x71, - 0xd8, 0xa0, 0x7e, 0xc3, 0xe7, 0x00, 0xe3, 0x84, 0x8e, 0xc3, 0x34, 0x05, 0xfe, 0x0a, 0xe4, 0xd2, - 0x16, 0x74, 0xca, 0x8a, 0x7a, 0x51, 0x2e, 0xea, 0xac, 0x8c, 0x11, 0x9d, 0xea, 0x68, 0x88, 0x07, - 0x3f, 0x07, 0xab, 0x87, 0xed, 0x86, 0x43, 0x70, 0x23, 0x73, 0xae, 0x45, 0x26, 0x78, 0xab, 0xdf, - 0xd3, 0x34, 0x2e, 0xd8, 0xe1, 0x30, 0x63, 0xf8, 0x7c, 0xa3, 0x15, 0x68, 0x8c, 0x50, 0xd8, 0x09, - 0x1a, 0x96, 0x77, 0xe2, 0x11, 0x75, 0x75, 0x43, 0xd9, 0x9c, 0x96, 0x63, 0x14, 0x51, 0x9f, 0xe1, - 0x53, 0xa7, 0x8e, 0x24, 0x24, 0x7c, 0x02, 0x16, 0xcd, 0xae, 0x47, 0xca, 0x01, 0xfd, 0x02, 0x3b, - 0x11, 0x56, 0xaf, 0x0e, 0x95, 0x5b, 0xd7, 0x23, 0x46, 0x18, 0x18, 0x4d, 0x0e, 0xa0, 0xe5, 0x26, - 0x13, 0xe0, 0x1e, 0xc8, 0x15, 0xc2, 0x20, 0x66, 0x4b, 0x84, 0x7b, 0xc6, 0xdb, 0xd8, 0x5a, 0xb6, - 0xf4, 0xdd, 0x01, 0x22, 0x69, 0x61, 0x43, 0x2c, 0xf8, 0x00, 0xcc, 0x9b, 0x81, 0x53, 0xf7, 0x71, - 0xa5, 0x1d, 0x85, 0x4d, 0xb1, 0xc7, 0xad, 0xf5, 0x7b, 0xda, 0x8a, 0x38, 0x09, 0x73, 0x1a, 0x6d, - 0xea, 0xa5, 0x9f, 0xf0, 0x00, 0x0b, 0x1f, 0x81, 0x05, 0x71, 0x9e, 0x82, 0x13, 0xe3, 0x64, 0xef, - 0x91, 0xbe, 0x7f, 0x71, 0x7a, 0xc3, 0xa5, 0x6e, 0x1d, 0xa5, 0xd0, 0xb4, 0x50, 0xc4, 0x33, 0x8b, - 0xea, 0x01, 0x5d, 0x74, 0x32, 0x85, 0x92, 0xf0, 0x79, 0x42, 0x58, 0xa1, 0xa4, 0x29, 0x74, 0xf6, - 0x0a, 0x4b, 0xb5, 0xd5, 0x69, 0x36, 0x7d, 0x2c, 0xd6, 0x1a, 0x29, 0x94, 0x89, 0x48, 0xcc, 0x01, - 0x03, 0x0d, 0xc1, 0x80, 0xfb, 0x52, 0x0b, 0x2d, 0x84, 0x27, 0x27, 0x4e, 0xd0, 0x88, 0x55, 0x3d, - 0xbb, 0xa7, 0x0f, 0x5a, 0xa8, 0x2b, 0x30, 0x72, 0x07, 0x4d, 0x78, 0xf4, 0x56, 0xa8, 0x13, 0x04, - 0x38, 0x3a, 0x9f, 0x02, 0x7c, 0x19, 0x90, 0x6e, 0x15, 0x31, 0xbf, 0x3c, 0x07, 0x32, 0x14, 0xfa, - 0xc3, 0xc1, 0xec, 0x12, 0x1c, 0x05, 0x8e, 0x7f, 0x2e, 0xc3, 0x57, 0x01, 0xe9, 0x40, 0x58, 0x20, - 0x64, 0xa1, 0x21, 0x1a, 0x4d, 0x6f, 0x95, 0x44, 0x38, 0x8e, 0xed, 0xb3, 0x36, 0x8e, 0x55, 0xcc, - 0xae, 0x25, 0xa5, 0x37, 0x66, 0x4e, 0x83, 0x50, 0xaf, 0x8e, 0x64, 0x2c, 0xad, 0x52, 0xfe, 0xb8, - 0x8f, 0xcf, 0xaa, 0xde, 0x97, 0x98, 0xf5, 0xf7, 0x69, 0x39, 0xb4, 0x82, 0x4c, 0xd7, 0xac, 0xd8, - 0xfb, 0x92, 0x56, 0x69, 0x8a, 0x40, 0x9b, 0x62, 0xca, 0x60, 0x39, 0xd1, 0x11, 0x56, 0x8f, 0x98, - 0x8c, 0x34, 0x6e, 0x33, 0x32, 0x86, 0x4f, 0x61, 0x3a, 0x1a, 0xc1, 0x85, 0x2f, 0xc0, 0x95, 0x81, - 0xb5, 0xd3, 0x6c, 0x7a, 0x5d, 0xe4, 0x04, 0x47, 0x58, 0x6d, 0x31, 0x4d, 0xbd, 0xdf, 0xd3, 0xd6, - 0x87, 0x35, 0x19, 0xce, 0x88, 0x28, 0x50, 0x47, 0x23, 0xf9, 0xf0, 0xd7, 0x60, 0x6d, 0x94, 0xdd, - 0xee, 0x06, 0xaa, 0xc7, 0xa4, 0xa5, 0xf5, 0x7b, 0x8c, 0xb4, 0x41, 0xba, 0x81, 0x8e, 0xc6, 0xc9, - 0xd0, 0x61, 0x75, 0xee, 0xb2, 0xbb, 0x41, 0xb9, 0x1d, 0xab, 0xbf, 0x61, 0xca, 0x52, 0x4a, 0x25, - 0x65, 0xd2, 0x0d, 0x8c, 0xb0, 0x1d, 0xeb, 0x28, 0xcb, 0x1a, 0xa4, 0x85, 0xcf, 0x8b, 0x98, 0x0f, - 0xce, 0xe9, 0xd4, 0x0e, 0xc6, 0x75, 0xf8, 0x98, 0x89, 0xcf, 0xd3, 0x22, 0x08, 0xf0, 0x53, 0x30, - 0xc7, 0x0d, 0xcf, 0x2b, 0x55, 0x3e, 0x31, 0xa7, 0xe5, 0x4d, 0x43, 0xb0, 0x5f, 0xd3, 0xb7, 0x0f, - 0x80, 0xfa, 0x57, 0x0a, 0xf8, 0x00, 0xe1, 0xd7, 0x1d, 0x1c, 0x13, 0xb8, 0x0d, 0xe6, 0xca, 0x6d, - 0x1c, 0x39, 0xf4, 0xf7, 0x2e, 0x9b, 0x2c, 0x4b, 0xf7, 0x72, 0x62, 0x3e, 0x9d, 0xdb, 0xd1, 0x00, - 0x02, 0x6f, 0x27, 0x3b, 0x92, 0xca, 0x87, 0xd9, 0xa2, 0x00, 0x73, 0x23, 0x4a, 0x16, 0xa8, 0xdb, - 0xc9, 0xf8, 0x62, 0x3f, 0xfc, 0x07, 0x30, 0x6e, 0x44, 0xc2, 0xa9, 0x3f, 0x02, 0xb3, 0x08, 0xc7, - 0xed, 0x30, 0x88, 0x31, 0x54, 0xc1, 0x07, 0xd5, 0x8e, 0xeb, 0xe2, 0x38, 0x66, 0xe7, 0x98, 0x45, - 0xc9, 0x23, 0xbc, 0x0a, 0x66, 0xe8, 0x1e, 0xdc, 0x89, 0xf9, 0xf0, 0x42, 0xe2, 0x69, 0xeb, 0x1f, - 0x8a, 0x74, 0x78, 0xb8, 0x04, 0x40, 0x29, 0x24, 0x55, 0xe2, 0x44, 0x04, 0x37, 0x72, 0x13, 0xf0, - 0x0a, 0xc8, 0x89, 0x2d, 0x8f, 0xd9, 0xe8, 0x58, 0xcd, 0x29, 0x70, 0x19, 0xcc, 0x23, 0x1c, 0x9f, - 0x1b, 0x26, 0xe1, 0x02, 0x98, 0xdd, 0xf7, 0x7c, 0x9f, 0x3d, 0x4d, 0x51, 0x37, 0xed, 0x04, 0xf9, - 0xc8, 0x6d, 0x79, 0xa7, 0x38, 0x77, 0x89, 0xaa, 0xec, 0xe2, 0x98, 0x44, 0xe1, 0x19, 0x45, 0xb0, - 0x6d, 0x2d, 0x37, 0x0d, 0xaf, 0x81, 0xd5, 0x1d, 0xdf, 0x71, 0x8f, 0x5b, 0xa1, 0xcf, 0x7e, 0x95, - 0x55, 0xc2, 0x88, 0xd8, 0x5d, 0xd4, 0xcd, 0x35, 0xe0, 0x0d, 0xb0, 0x76, 0x18, 0xd4, 0x47, 0x3a, - 0x31, 0x5c, 0x05, 0x97, 0x59, 0xbf, 0x4b, 0x99, 0x9b, 0x70, 0x0d, 0xac, 0x1c, 0x06, 0x8d, 0x21, - 0xc7, 0xd1, 0xd6, 0x7f, 0x66, 0xf9, 0x79, 0x44, 0xab, 0xa5, 0xfc, 0xfd, 0xa2, 0x65, 0xd5, 0xca, - 0x25, 0xb3, 0xf6, 0xb4, 0x6c, 0x59, 0xe5, 0x97, 0x26, 0xca, 0x4d, 0xc0, 0x1f, 0x81, 0xcd, 0x21, - 0x73, 0xed, 0xb0, 0x64, 0x17, 0xad, 0x9a, 0x8d, 0x8a, 0xcf, 0x9e, 0x99, 0xa8, 0x56, 0x2d, 0xe5, - 0x2b, 0xd5, 0xbd, 0xb2, 0xcd, 0x43, 0xc0, 0xd0, 0x96, 0x99, 0xdf, 0x35, 0x51, 0x6e, 0x12, 0xde, - 0x01, 0xba, 0x64, 0x18, 0x47, 0x9c, 0x3a, 0x27, 0x3e, 0x3f, 0x2c, 0xa3, 0xc3, 0x83, 0xdc, 0x25, - 0x16, 0x3b, 0x6a, 0xc8, 0x5b, 0x56, 0x6e, 0x1a, 0x6e, 0x81, 0x3b, 0x3b, 0x56, 0xbe, 0xb0, 0xbf, - 0x57, 0xb6, 0xcc, 0x5a, 0xc5, 0x34, 0x51, 0xad, 0x52, 0x46, 0x76, 0xcd, 0x7e, 0x55, 0x43, 0xaf, - 0xd2, 0x27, 0x6e, 0xc0, 0x3c, 0xf8, 0xec, 0xfd, 0xb0, 0xe3, 0x4e, 0x83, 0xe1, 0xc7, 0x60, 0x63, - 0xbc, 0x84, 0xb8, 0x5b, 0x13, 0xfe, 0x02, 0xfc, 0xec, 0x5d, 0xa8, 0x71, 0xaf, 0x38, 0xba, 0xf8, - 0x15, 0x22, 0x0a, 0x2d, 0x78, 0x13, 0x7c, 0x34, 0x1e, 0x45, 0x43, 0xe3, 0xc1, 0xff, 0x03, 0xfa, - 0xae, 0x69, 0xe5, 0x3f, 0xbf, 0x38, 0x2c, 0x6f, 0x14, 0xb8, 0x0d, 0x3e, 0x41, 0xf9, 0xd2, 0x6e, - 0xf9, 0xa0, 0xf6, 0x1e, 0xf8, 0x6f, 0x14, 0xf8, 0x4b, 0xf0, 0xe0, 0xdd, 0xc0, 0x71, 0x17, 0xfc, - 0x56, 0x81, 0x26, 0x78, 0xf2, 0xde, 0xef, 0x1b, 0x27, 0xf3, 0x9d, 0x02, 0x6f, 0x82, 0x0f, 0x47, - 0xf3, 0x45, 0x1e, 0xbe, 0x57, 0xe0, 0x26, 0xb8, 0x75, 0xe1, 0x9b, 0x04, 0xf2, 0x8f, 0x0a, 0xfc, - 0x39, 0xb8, 0x7f, 0x11, 0x64, 0xdc, 0x31, 0xfe, 0xa4, 0xc0, 0xc7, 0xe0, 0xe1, 0x7b, 0xbc, 0x63, - 0x9c, 0xc0, 0x9f, 0x2f, 0xb8, 0x87, 0x48, 0xf6, 0x0f, 0xef, 0xbe, 0x87, 0x40, 0xfe, 0x45, 0x81, - 0xeb, 0xe0, 0xda, 0x68, 0x08, 0xad, 0x89, 0xbf, 0x2a, 0xf0, 0x36, 0xd8, 0xb8, 0x50, 0x89, 0xc2, - 0xfe, 0xa6, 0x40, 0x15, 0xac, 0x94, 0xca, 0xb5, 0xa7, 0xf9, 0xa2, 0x55, 0x7b, 0x59, 0xb4, 0xf7, - 0x6a, 0x55, 0x1b, 0x99, 0xd5, 0x6a, 0xee, 0x0f, 0x93, 0xf4, 0x28, 0x29, 0x4f, 0xa9, 0x2c, 0x9c, - 0xb5, 0xa7, 0x65, 0x54, 0xb3, 0x8a, 0x2f, 0xcc, 0x12, 0x45, 0x7e, 0x3d, 0x09, 0x97, 0x01, 0xa0, - 0xb0, 0x4a, 0xb9, 0x58, 0xb2, 0xab, 0xb9, 0xdf, 0x4d, 0xc1, 0x45, 0x30, 0x6b, 0xbe, 0xb2, 0x4d, - 0x54, 0xca, 0x5b, 0xb9, 0xff, 0x4e, 0x6d, 0x85, 0x00, 0x0c, 0xf6, 0x05, 0x38, 0x03, 0x26, 0xf7, - 0x5f, 0xe4, 0x26, 0xe0, 0x1c, 0x98, 0xb6, 0xcc, 0x7c, 0xd5, 0xcc, 0x29, 0x70, 0x05, 0x2c, 0x9b, - 0x96, 0x59, 0xb0, 0x8b, 0xe5, 0x52, 0x0d, 0x1d, 0x96, 0x4a, 0xac, 0x6f, 0xe4, 0xc0, 0xc2, 0xcb, - 0xbc, 0x5d, 0xd8, 0x4b, 0x2c, 0x53, 0xb4, 0x3f, 0x59, 0xe5, 0xc2, 0x7e, 0x0d, 0xe5, 0x0b, 0x26, - 0x4a, 0xcc, 0x97, 0x28, 0x90, 0x09, 0x25, 0x96, 0xe9, 0x7b, 0x8f, 0xc1, 0x9c, 0x1d, 0x39, 0x41, - 0xdc, 0x0e, 0x23, 0x02, 0xef, 0xc9, 0x0f, 0x4b, 0x62, 0x52, 0x88, 0x01, 0x75, 0x7d, 0xf9, 0xfc, - 0x99, 0xcf, 0x09, 0x7d, 0x62, 0x53, 0xf9, 0xb1, 0xb2, 0x73, 0xe5, 0xcd, 0xbf, 0xd6, 0x27, 0xde, - 0xbc, 0x5d, 0x57, 0x7e, 0x78, 0xbb, 0xae, 0xfc, 0xf3, 0xed, 0xba, 0xf2, 0xfb, 0x7f, 0xaf, 0x4f, - 0xd4, 0x67, 0xd8, 0xff, 0xb4, 0xef, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x02, 0xb3, 0xfd, 0x10, - 0x1c, 0x17, 0x00, 0x00, + // 2291 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0x5d, 0x5b, 0xdb, 0xc8, + 0xf5, 0x47, 0x10, 0x08, 0x0c, 0x6f, 0x66, 0x08, 0x41, 0x79, 0x59, 0x44, 0x94, 0x4d, 0xfe, 0x2c, + 0xff, 0x8a, 0xb4, 0xc9, 0x3e, 0x6d, 0x93, 0x66, 0x9b, 0x18, 0xa3, 0x04, 0x17, 0x61, 0x3b, 0x63, + 0x91, 0x64, 0xaf, 0x5c, 0x21, 0x8f, 0xb1, 0x8a, 0x90, 0x1c, 0x69, 0xcc, 0x9a, 0xfd, 0x02, 0x7d, + 0x7a, 0xd7, 0xcb, 0x7e, 0x88, 0xee, 0xf7, 0xc8, 0xbe, 0xb4, 0xdd, 0xb6, 0x77, 0xbd, 0x70, 0xdb, + 0xf4, 0xe9, 0x17, 0xf0, 0xd3, 0x9b, 0xde, 0xf5, 0x99, 0x17, 0xe1, 0x91, 0x6c, 0x93, 0xdc, 0x31, + 0xe7, 0xfc, 0x7e, 0x3f, 0xcd, 0x9c, 0x33, 0x73, 0xce, 0x31, 0x60, 0x31, 0x6a, 0xb9, 0xad, 0xc3, + 0x7b, 0x51, 0xcb, 0xdd, 0x6a, 0x45, 0x21, 0x09, 0xe1, 0x24, 0x33, 0x5c, 0x37, 0x8e, 0x3c, 0xd2, + 0x6c, 0x1f, 0x6e, 0xb9, 0xe1, 0xc9, 0xbd, 0xa3, 0xf0, 0x28, 0xbc, 0xc7, 0xbc, 0x87, 0xed, 0x06, + 0x5b, 0xb1, 0x05, 0xfb, 0x8b, 0xb3, 0xf4, 0xff, 0xce, 0x83, 0x4b, 0x26, 0x71, 0xeb, 0xf0, 0x36, + 0xb8, 0x54, 0x72, 0x4e, 0xb0, 0xaa, 0xac, 0x2b, 0x1b, 0x33, 0xdb, 0x8b, 0xbd, 0xae, 0x36, 0x7b, + 0xe6, 0x9c, 0xf8, 0x8f, 0xf4, 0xc0, 0x39, 0xc1, 0x3a, 0x62, 0x4e, 0x68, 0x80, 0xcb, 0x3b, 0x0e, + 0x71, 0x76, 0xbc, 0x48, 0x1d, 0x67, 0xb8, 0xe5, 0x5e, 0x57, 0x5b, 0xe4, 0xb8, 0xba, 0x43, 0x1c, + 0xa3, 0xee, 0x45, 0x3a, 0x4a, 0x30, 0x70, 0x13, 0x4c, 0xbd, 0xca, 0x5b, 0x14, 0x3d, 0xc1, 0xd0, + 0xb0, 0xd7, 0xd5, 0x16, 0x38, 0xfa, 0x0b, 0xc7, 0xe7, 0x60, 0x81, 0x80, 0x65, 0xb0, 0xbc, 0x8b, + 0x9d, 0x88, 0x1c, 0x62, 0x87, 0x14, 0x03, 0x82, 0xa3, 0x53, 0xc7, 0xdf, 0x8f, 0xd5, 0xd9, 0x75, + 0x65, 0x63, 0x62, 0xfb, 0xa3, 0x5e, 0x57, 0xbb, 0xc6, 0x89, 0xcd, 0x04, 0x64, 0x78, 0x02, 0xa5, + 0xa3, 0x61, 0x4c, 0x58, 0x04, 0x4b, 0xa6, 0x8f, 0x5d, 0xe2, 0x85, 0x81, 0xed, 0x9d, 0xe0, 0xb0, + 0x4d, 0xf6, 0x63, 0x75, 0x8e, 0xc9, 0xdd, 0xe8, 0x75, 0xb5, 0x55, 0x2e, 0x87, 0x05, 0xc4, 0x20, + 0x1c, 0xa3, 0xa3, 0x41, 0x16, 0x2c, 0x82, 0x9c, 0xe5, 0xc5, 0x04, 0x07, 0x05, 0xdf, 0xc3, 0x01, + 0x39, 0x40, 0x56, 0xac, 0xae, 0xac, 0x4f, 0x6c, 0xcc, 0xc8, 0x1b, 0xf3, 0x19, 0xc2, 0x70, 0x19, + 0xc4, 0x68, 0x47, 0x7e, 0xac, 0xa3, 0x01, 0x1a, 0x44, 0x60, 0x39, 0x5f, 0x3f, 0xc5, 0x11, 0xf1, + 0x62, 0x2c, 0xa9, 0x5d, 0x65, 0x6a, 0xeb, 0xbd, 0xae, 0x76, 0x93, 0xab, 0x39, 0x09, 0x28, 0x2d, + 0x38, 0x8c, 0x0c, 0x1f, 0x82, 0x79, 0xbe, 0xca, 0xb7, 0x49, 0x68, 0x5b, 0x55, 0x75, 0x75, 0x5d, + 0xd9, 0x98, 0x96, 0x73, 0xe3, 0xb4, 0x49, 0x68, 0x10, 0x2a, 0x90, 0x46, 0xc2, 0x02, 0x58, 0xe0, + 0x86, 0x02, 0x8e, 0xa8, 0xb1, 0xa9, 0xaa, 0x8c, 0x2b, 0x45, 0x48, 0x7c, 0xdf, 0xc5, 0x11, 0x31, + 0x9c, 0x36, 0x69, 0xea, 0x28, 0x43, 0x81, 0x8f, 0x65, 0x91, 0x67, 0x9e, 0x8f, 0xd5, 0x6b, 0x2c, + 0xdd, 0x57, 0x7a, 0x5d, 0x2d, 0x27, 0x44, 0x28, 0xbb, 0xe1, 0xf9, 0x38, 0xc5, 0xa6, 0xd8, 0xfe, + 0xee, 0xf7, 0xf0, 0x19, 0x23, 0x5f, 0xcf, 0xde, 0xac, 0x63, 0x7c, 0x26, 0xb8, 0x69, 0x24, 0xb4, + 0xc0, 0x32, 0x37, 0xd8, 0x51, 0x3b, 0x26, 0xb8, 0x5e, 0xc8, 0x33, 0x81, 0x1b, 0x4c, 0xe0, 0x7a, + 0xaf, 0xab, 0x5d, 0xe5, 0x02, 0x84, 0xbb, 0x0d, 0xd7, 0x11, 0x3a, 0xc3, 0x68, 0x34, 0x16, 0x3c, + 0x5d, 0x15, 0x8c, 0x23, 0x96, 0x15, 0x8d, 0x65, 0x45, 0x8a, 0x85, 0xc8, 0x71, 0x0b, 0xe3, 0x48, + 0x24, 0x24, 0x43, 0x81, 0x36, 0x58, 0x3a, 0x4f, 0xd1, 0xb9, 0xce, 0x3a, 0xd3, 0xb9, 0xdb, 0xeb, + 0x6a, 0x3a, 0xd7, 0xf1, 0x02, 0x8f, 0x78, 0x8e, 0x6f, 0xf4, 0xb3, 0x2c, 0x49, 0x0e, 0x0a, 0xc0, + 0x47, 0x60, 0x96, 0xfe, 0x9d, 0xe4, 0xf7, 0x16, 0xcb, 0x91, 0xda, 0xeb, 0x6a, 0x57, 0xb8, 0x1e, + 0x63, 0xf7, 0x93, 0x2c, 0x83, 0x61, 0x05, 0x40, 0xba, 0xcc, 0xa4, 0x59, 0x67, 0x12, 0xd2, 0x85, + 0x63, 0x12, 0x83, 0xb9, 0x1e, 0xc2, 0x85, 0x9f, 0x81, 0x39, 0x66, 0x4d, 0xb2, 0x7d, 0x9b, 0xc5, + 0xfb, 0x5a, 0xaf, 0xab, 0xad, 0xc8, 0x5a, 0xfd, 0x94, 0xa7, 0xe0, 0xc9, 0x61, 0x92, 0x74, 0x7f, + 0xcc, 0xd8, 0xd9, 0xc3, 0xf4, 0x73, 0x2e, 0x83, 0xe1, 0x3e, 0x58, 0xa2, 0xcb, 0x74, 0xbe, 0xef, + 0x30, 0x05, 0xad, 0xd7, 0xd5, 0x6e, 0x48, 0x0a, 0x03, 0x49, 0x1f, 0x64, 0xc2, 0x6d, 0xb0, 0x50, + 0xe4, 0xa9, 0x28, 0xf8, 0xd4, 0x1e, 0xa9, 0x9f, 0x64, 0xef, 0x4e, 0x92, 0x2a, 0x97, 0x03, 0x74, + 0x94, 0x61, 0xd0, 0x17, 0x9d, 0xb6, 0x54, 0x89, 0x43, 0xb0, 0xba, 0xc9, 0x84, 0xa4, 0x00, 0x67, + 0x84, 0x8c, 0x98, 0xc2, 0x74, 0x34, 0x8c, 0x3c, 0xa8, 0x69, 0x87, 0xc7, 0x38, 0x50, 0xff, 0xff, + 0x7d, 0x9a, 0x84, 0xc2, 0x06, 0x34, 0x19, 0x19, 0x3e, 0x01, 0xf3, 0xd5, 0xc0, 0x69, 0xc5, 0xcd, + 0x90, 0x14, 0xc2, 0x76, 0x40, 0xd4, 0x07, 0xac, 0x16, 0x4a, 0x69, 0x8b, 0x85, 0xdb, 0x70, 0xa9, + 0x5f, 0x47, 0x69, 0x3c, 0xb4, 0xc0, 0xd2, 0x8b, 0x76, 0x48, 0x9c, 0x6d, 0xc7, 0x3d, 0xc6, 0x41, + 0x7d, 0xfb, 0x8c, 0xe0, 0x58, 0xfd, 0x94, 0x89, 0xac, 0xf5, 0xba, 0xda, 0x75, 0x2e, 0xf2, 0x86, + 0x42, 0x8c, 0x43, 0x8e, 0x31, 0x0e, 0x29, 0x48, 0x47, 0x83, 0x44, 0xda, 0x4a, 0x2a, 0x11, 0x7e, + 0x19, 0x12, 0xac, 0x3e, 0xc9, 0x96, 0xab, 0x56, 0x84, 0x8d, 0xd3, 0x90, 0x46, 0x27, 0xc1, 0xc8, + 0x11, 0x09, 0xa3, 0xa8, 0xdd, 0x22, 0x85, 0x26, 0x76, 0x8f, 0xd5, 0xa7, 0xd9, 0x6b, 0x7c, 0x1e, + 0x11, 0x8e, 0x32, 0x5c, 0x0a, 0x93, 0x22, 0x22, 0x91, 0xf5, 0xdf, 0x4c, 0x82, 0xa9, 0x7d, 0x7c, + 0x72, 0x88, 0x23, 0x7a, 0xa5, 0x69, 0x17, 0x34, 0x3b, 0xd8, 0xad, 0x38, 0xa4, 0x29, 0xba, 0xa0, + 0x14, 0x1b, 0x4c, 0xdc, 0xba, 0x81, 0x3b, 0xd8, 0x35, 0x5a, 0x0e, 0x7d, 0x17, 0x29, 0x38, 0x7c, + 0x00, 0x66, 0xf2, 0x47, 0xb4, 0xac, 0xd6, 0xeb, 0x11, 0x6b, 0x59, 0x33, 0xdb, 0x2b, 0xbd, 0xae, + 0xb6, 0x24, 0xaa, 0x2f, 0x75, 0x19, 0x4e, 0xbd, 0x1e, 0xe9, 0xa8, 0x8f, 0xa3, 0xf1, 0x7c, 0xe6, + 0x78, 0x7e, 0x2b, 0xf4, 0x02, 0xb2, 0x6b, 0xdb, 0x15, 0x46, 0x9e, 0x63, 0x64, 0x29, 0x9e, 0x8d, + 0x04, 0x62, 0x34, 0x09, 0x69, 0x09, 0x95, 0x41, 0x22, 0x8d, 0xe7, 0xb6, 0x13, 0x63, 0xda, 0x6c, + 0x71, 0xb6, 0x80, 0x1e, 0x3a, 0x31, 0x16, 0xad, 0x59, 0x60, 0xe8, 0x23, 0xa4, 0x27, 0xb0, 0xc2, + 0x23, 0x76, 0xde, 0x46, 0xf6, 0x11, 0xb2, 0xf3, 0xfa, 0xe1, 0x91, 0x38, 0xae, 0x0c, 0x86, 0x79, + 0x30, 0x4f, 0x97, 0xa2, 0x86, 0x5a, 0x55, 0xf5, 0x6b, 0x85, 0xa5, 0x41, 0x7a, 0x35, 0x8c, 0x2e, + 0xaa, 0x09, 0xef, 0x3b, 0x29, 0x06, 0x7c, 0x0e, 0x16, 0xfb, 0x86, 0x4a, 0x14, 0x76, 0xce, 0xd4, + 0x6f, 0xb8, 0xc8, 0xcd, 0x5e, 0x57, 0x53, 0x07, 0x45, 0x5a, 0x14, 0xa3, 0xa3, 0x2c, 0x2b, 0xd9, + 0x0b, 0x7d, 0xda, 0x5c, 0xe6, 0xdb, 0xe1, 0x7b, 0x61, 0x25, 0x41, 0x88, 0xa4, 0x19, 0xb4, 0x40, + 0xf6, 0x55, 0xcd, 0xa0, 0xce, 0xe2, 0xaa, 0x7e, 0xa7, 0x64, 0xab, 0x8a, 0xbc, 0x1d, 0x2c, 0x60, + 0x3a, 0x1a, 0xc2, 0x85, 0x3f, 0xe2, 0x33, 0x95, 0xfa, 0x15, 0x1d, 0x92, 0x66, 0xef, 0xcf, 0x6e, + 0xb1, 0xd1, 0x6c, 0x8b, 0xda, 0xe4, 0xc9, 0x8a, 0x0a, 0xea, 0x88, 0x41, 0xf5, 0xbf, 0xcd, 0x81, + 0x29, 0x1b, 0xb3, 0x82, 0xf2, 0x04, 0xcc, 0xf3, 0xbf, 0x4a, 0x98, 0x7c, 0x11, 0x46, 0xc7, 0x83, + 0x97, 0x91, 0x30, 0xb7, 0x11, 0x70, 0xbf, 0x8e, 0xd2, 0x78, 0xf8, 0x63, 0x00, 0xb8, 0x81, 0xdd, + 0x28, 0x3e, 0xa8, 0x5d, 0xed, 0x75, 0x35, 0x98, 0x62, 0xf3, 0x9b, 0x24, 0x21, 0x69, 0x03, 0xdc, + 0xc1, 0xbe, 0x73, 0x66, 0x39, 0x04, 0x07, 0xee, 0x99, 0x98, 0xbe, 0xe6, 0xe5, 0x06, 0x58, 0xa7, + 0x7e, 0xc3, 0xe7, 0x00, 0xe3, 0x84, 0x36, 0xc0, 0x34, 0x05, 0xfe, 0x02, 0xe4, 0xd2, 0x16, 0x74, + 0xca, 0x2e, 0xf5, 0xbc, 0x7c, 0xa9, 0xb3, 0x32, 0x46, 0x74, 0xaa, 0xa3, 0x01, 0x1e, 0xfc, 0x1c, + 0xac, 0x1c, 0xb4, 0xea, 0x0e, 0xc1, 0xf5, 0xcc, 0xbe, 0xe6, 0x99, 0xe0, 0xed, 0x5e, 0x57, 0xd3, + 0xb8, 0x60, 0x9b, 0xc3, 0x8c, 0xc1, 0xfd, 0x0d, 0x57, 0xa0, 0x31, 0x42, 0x61, 0x3b, 0xa8, 0x5b, + 0xde, 0x89, 0x47, 0xd4, 0x95, 0x75, 0x65, 0x63, 0x52, 0x8e, 0x51, 0x44, 0x7d, 0x86, 0x4f, 0x9d, + 0x3a, 0x92, 0x90, 0xf0, 0x29, 0x98, 0x37, 0x3b, 0x1e, 0x29, 0x07, 0xf4, 0x05, 0xb6, 0x23, 0xac, + 0x5e, 0x1d, 0xb8, 0x6e, 0x1d, 0x8f, 0x18, 0x61, 0x60, 0x34, 0x38, 0x80, 0x5e, 0x37, 0x99, 0x00, + 0x77, 0x41, 0xae, 0x10, 0x06, 0x31, 0x1b, 0x1b, 0xdc, 0x33, 0x5e, 0xc6, 0x56, 0xb3, 0x57, 0xdf, + 0xed, 0x23, 0x92, 0x12, 0x36, 0xc0, 0x82, 0x0f, 0xc1, 0xac, 0x19, 0x38, 0x87, 0x3e, 0xae, 0xb4, + 0xa2, 0xb0, 0x21, 0x26, 0xb7, 0xd5, 0x5e, 0x57, 0x5b, 0x16, 0x3b, 0x61, 0x4e, 0xa3, 0x45, 0xbd, + 0xf4, 0x09, 0xf7, 0xb1, 0xf0, 0x31, 0x98, 0x13, 0xfb, 0x29, 0x38, 0x31, 0x4e, 0x26, 0x1d, 0xe9, + 0xfd, 0x8b, 0xdd, 0x1b, 0x2e, 0x75, 0xeb, 0x28, 0x85, 0xa6, 0x17, 0x45, 0xac, 0x59, 0x54, 0xf7, + 0xe9, 0x84, 0x93, 0xb9, 0x28, 0x09, 0x9f, 0x27, 0x84, 0x5d, 0x94, 0x34, 0x85, 0xf6, 0x5e, 0x61, + 0xa9, 0x36, 0xdb, 0x8d, 0x86, 0x8f, 0xc5, 0x58, 0x23, 0x85, 0x32, 0x11, 0x89, 0x39, 0xa0, 0xaf, + 0x21, 0x18, 0x70, 0x4f, 0x2a, 0xa1, 0x85, 0xf0, 0xe4, 0xc4, 0x09, 0xea, 0xb1, 0xaa, 0x67, 0x27, + 0xf3, 0x7e, 0x09, 0x75, 0x05, 0x46, 0xae, 0xa0, 0x09, 0x8f, 0x9e, 0x0a, 0xb5, 0x83, 0x00, 0x47, + 0xe7, 0x5d, 0x80, 0x0f, 0x03, 0xd2, 0xa9, 0x22, 0xe6, 0x97, 0xfb, 0x40, 0x86, 0x42, 0x7f, 0x2a, + 0x98, 0x1d, 0x82, 0xa3, 0xc0, 0xf1, 0xcf, 0x65, 0xf8, 0x28, 0x20, 0x6d, 0x08, 0x0b, 0x84, 0x2c, + 0x34, 0x40, 0xa3, 0xe9, 0xad, 0x92, 0x08, 0xc7, 0xb1, 0x7d, 0xd6, 0xc2, 0xb1, 0x8a, 0xd9, 0xb1, + 0xa4, 0xf4, 0xc6, 0xcc, 0x69, 0x10, 0xea, 0xd5, 0x91, 0x8c, 0xa5, 0xb7, 0x94, 0x2f, 0xf7, 0xf0, + 0x59, 0xd5, 0xfb, 0x12, 0xb3, 0xfa, 0x3e, 0x29, 0x87, 0x56, 0x90, 0xe9, 0x98, 0x15, 0x7b, 0x5f, + 0xd2, 0x5b, 0x9a, 0x22, 0xd0, 0xa2, 0x98, 0x32, 0x58, 0x4e, 0x74, 0x84, 0xd5, 0x23, 0x26, 0x23, + 0xb5, 0xdb, 0x8c, 0x8c, 0xe1, 0x53, 0x98, 0x8e, 0x86, 0x70, 0xe1, 0x4b, 0x70, 0xa5, 0x6f, 0x6d, + 0x37, 0x1a, 0x5e, 0x07, 0x39, 0xc1, 0x11, 0x56, 0x9b, 0x4c, 0x53, 0xef, 0x75, 0xb5, 0xb5, 0x41, + 0x4d, 0x86, 0x33, 0x22, 0x0a, 0xd4, 0xd1, 0x50, 0x3e, 0xfc, 0x25, 0x58, 0x1d, 0x66, 0xb7, 0x3b, + 0x81, 0xea, 0x31, 0x69, 0x69, 0xee, 0x1e, 0x21, 0x6d, 0x90, 0x4e, 0xa0, 0xa3, 0x51, 0x32, 0xb4, + 0x59, 0x9d, 0xbb, 0xec, 0x4e, 0x50, 0x6e, 0xc5, 0xea, 0xaf, 0x98, 0xb2, 0x94, 0x52, 0x49, 0x99, + 0x74, 0x02, 0x23, 0x6c, 0xc5, 0x3a, 0xca, 0xb2, 0xfa, 0x69, 0xe1, 0xfd, 0x22, 0xe6, 0x8d, 0x73, + 0x32, 0x35, 0x83, 0x71, 0x1d, 0xde, 0x66, 0xe2, 0xf3, 0xb4, 0x08, 0x02, 0xfc, 0x14, 0xcc, 0x70, + 0xc3, 0x8b, 0x4a, 0x95, 0x77, 0xcc, 0x49, 0x79, 0xd2, 0x10, 0xec, 0x37, 0xf4, 0xeb, 0x7d, 0xa0, + 0xfe, 0x6b, 0x05, 0x5c, 0x46, 0xf8, 0x4d, 0x1b, 0xc7, 0x04, 0x6e, 0x81, 0x99, 0x72, 0x0b, 0x47, + 0x0e, 0xfd, 0x85, 0xcb, 0x3a, 0xcb, 0xc2, 0xfd, 0x9c, 0xe8, 0x4f, 0xe7, 0x76, 0xd4, 0x87, 0xc0, + 0x3b, 0xc9, 0x8c, 0xa4, 0xf2, 0x66, 0x36, 0x2f, 0xc0, 0xdc, 0x88, 0x92, 0x01, 0xea, 0x4e, 0xd2, + 0xbe, 0xd8, 0x4f, 0xfd, 0x3e, 0x8c, 0x1b, 0x91, 0x70, 0xea, 0x8f, 0xc1, 0x34, 0xc2, 0x71, 0x2b, + 0x0c, 0x62, 0x0c, 0x55, 0x70, 0xb9, 0xda, 0x76, 0x5d, 0x1c, 0xc7, 0x6c, 0x1f, 0xd3, 0x28, 0x59, + 0xc2, 0xab, 0x60, 0x8a, 0xce, 0xc1, 0xed, 0x98, 0x37, 0x2f, 0x24, 0x56, 0x9b, 0x7f, 0x57, 0xa4, + 0xcd, 0xc3, 0x05, 0x00, 0x4a, 0x21, 0xa9, 0x12, 0x27, 0x22, 0xb8, 0x9e, 0x1b, 0x83, 0x57, 0x40, + 0x4e, 0x4c, 0x79, 0xcc, 0x46, 0xdb, 0x6a, 0x4e, 0x81, 0x8b, 0x60, 0x16, 0xe1, 0xf8, 0xdc, 0x30, + 0x0e, 0xe7, 0xc0, 0xf4, 0x9e, 0xe7, 0xfb, 0x6c, 0x35, 0x41, 0xdd, 0xb4, 0x12, 0xe4, 0x23, 0xb7, + 0xe9, 0x9d, 0xe2, 0xdc, 0x25, 0xaa, 0xb2, 0x83, 0x63, 0x12, 0x85, 0x67, 0x14, 0xc1, 0xa6, 0xb5, + 0xdc, 0x24, 0xbc, 0x06, 0x56, 0xb6, 0x7d, 0xc7, 0x3d, 0x6e, 0x86, 0x3e, 0xfb, 0x55, 0x56, 0x09, + 0x23, 0x62, 0x77, 0x50, 0x27, 0x57, 0x87, 0x37, 0xc0, 0xea, 0x41, 0x70, 0x38, 0xd4, 0x89, 0xe1, + 0x0a, 0x58, 0x62, 0xf5, 0x2e, 0x65, 0x6e, 0xc0, 0x55, 0xb0, 0x7c, 0x10, 0xd4, 0x07, 0x1c, 0x47, + 0x9b, 0xff, 0x9e, 0xe6, 0xfb, 0x11, 0xa5, 0x96, 0xf2, 0xf7, 0x8a, 0x96, 0x55, 0x2b, 0x97, 0xcc, + 0xda, 0xb3, 0xb2, 0x65, 0x95, 0x5f, 0x99, 0x28, 0x37, 0x06, 0x7f, 0x00, 0x36, 0x06, 0xcc, 0xb5, + 0x83, 0x92, 0x5d, 0xb4, 0x6a, 0x36, 0x2a, 0x3e, 0x7f, 0x6e, 0xa2, 0x5a, 0xb5, 0x94, 0xaf, 0x54, + 0x77, 0xcb, 0x36, 0x0f, 0x01, 0x43, 0x5b, 0x66, 0x7e, 0xc7, 0x44, 0xb9, 0x71, 0x78, 0x17, 0xe8, + 0x92, 0x61, 0x14, 0x71, 0xe2, 0x9c, 0xf8, 0xe2, 0xa0, 0x8c, 0x0e, 0xf6, 0x73, 0x97, 0x58, 0xec, + 0xa8, 0x21, 0x6f, 0x59, 0xb9, 0x49, 0xb8, 0x09, 0xee, 0x6e, 0x5b, 0xf9, 0xc2, 0xde, 0x6e, 0xd9, + 0x32, 0x6b, 0x15, 0xd3, 0x44, 0xb5, 0x4a, 0x19, 0xd9, 0x35, 0xfb, 0x75, 0x0d, 0xbd, 0x4e, 0xef, + 0xb8, 0x0e, 0xf3, 0xe0, 0xb3, 0x0f, 0xc3, 0x8e, 0xda, 0x0d, 0x86, 0x1f, 0x83, 0xf5, 0xd1, 0x12, + 0xe2, 0x6c, 0x0d, 0xf8, 0x33, 0xf0, 0x93, 0xf7, 0xa1, 0x46, 0x7d, 0xe2, 0xe8, 0xe2, 0x4f, 0x88, + 0x28, 0x34, 0xe1, 0x2d, 0xf0, 0xd1, 0x68, 0x14, 0x0d, 0x8d, 0x07, 0xff, 0x0f, 0xe8, 0x3b, 0xa6, + 0x95, 0xff, 0xfc, 0xe2, 0xb0, 0xbc, 0x55, 0xe0, 0x16, 0xf8, 0x04, 0xe5, 0x4b, 0x3b, 0xe5, 0xfd, + 0xda, 0x07, 0xe0, 0xbf, 0x56, 0xe0, 0xcf, 0xc1, 0xc3, 0xf7, 0x03, 0x47, 0x1d, 0xf0, 0x1b, 0x05, + 0x9a, 0xe0, 0xe9, 0x07, 0x7f, 0x6f, 0x94, 0xcc, 0xb7, 0x0a, 0xbc, 0x05, 0x6e, 0x0e, 0xe7, 0x8b, + 0x3c, 0x7c, 0xa7, 0xc0, 0x0d, 0x70, 0xfb, 0xc2, 0x2f, 0x09, 0xe4, 0x1f, 0x14, 0xf8, 0x53, 0xf0, + 0xe0, 0x22, 0xc8, 0xa8, 0x6d, 0xfc, 0x51, 0x81, 0x4f, 0xc0, 0xa3, 0x0f, 0xf8, 0xc6, 0x28, 0x81, + 0x3f, 0x5d, 0x70, 0x0e, 0x91, 0xec, 0xef, 0xdf, 0x7f, 0x0e, 0x81, 0xfc, 0xb3, 0x02, 0xd7, 0xc0, + 0xb5, 0xe1, 0x10, 0x7a, 0x27, 0xfe, 0xa2, 0xc0, 0x3b, 0x60, 0xfd, 0x42, 0x25, 0x0a, 0xfb, 0xab, + 0x02, 0x55, 0xb0, 0x5c, 0x2a, 0xd7, 0x9e, 0xe5, 0x8b, 0x56, 0xed, 0x55, 0xd1, 0xde, 0xad, 0x55, + 0x6d, 0x64, 0x56, 0xab, 0xb9, 0xdf, 0x8f, 0xd3, 0xad, 0xa4, 0x3c, 0xa5, 0xb2, 0x70, 0xd6, 0x9e, + 0x95, 0x51, 0xcd, 0x2a, 0xbe, 0x34, 0x4b, 0x14, 0xf9, 0xd5, 0x38, 0x5c, 0x04, 0x80, 0xc2, 0x2a, + 0xe5, 0x62, 0xc9, 0xae, 0xe6, 0x7e, 0x3b, 0x01, 0xe7, 0xc1, 0xb4, 0xf9, 0xda, 0x36, 0x51, 0x29, + 0x6f, 0xe5, 0xfe, 0x33, 0xb1, 0x19, 0x02, 0xd0, 0x9f, 0x17, 0xe0, 0x14, 0x18, 0xdf, 0x7b, 0x99, + 0x1b, 0x83, 0x33, 0x60, 0xd2, 0x32, 0xf3, 0x55, 0x33, 0xa7, 0xc0, 0x65, 0xb0, 0x68, 0x5a, 0x66, + 0xc1, 0x2e, 0x96, 0x4b, 0x35, 0x74, 0x50, 0x2a, 0xb1, 0xba, 0x91, 0x03, 0x73, 0xaf, 0xf2, 0x76, + 0x61, 0x37, 0xb1, 0x4c, 0xd0, 0xfa, 0x64, 0x95, 0x0b, 0x7b, 0x35, 0x94, 0x2f, 0x98, 0x28, 0x31, + 0x5f, 0xa2, 0x40, 0x26, 0x94, 0x58, 0x26, 0xef, 0x3f, 0x01, 0x33, 0x76, 0xe4, 0x04, 0x71, 0x2b, + 0x8c, 0x08, 0xbc, 0x2f, 0x2f, 0x16, 0x44, 0xa7, 0x10, 0x0d, 0xea, 0xfa, 0xe2, 0xf9, 0x9a, 0xf7, + 0x09, 0x7d, 0x6c, 0x43, 0xf9, 0xa1, 0xb2, 0x7d, 0xe5, 0xed, 0x3f, 0xd7, 0xc6, 0xde, 0xbe, 0x5b, + 0x53, 0xbe, 0x7f, 0xb7, 0xa6, 0xfc, 0xe3, 0xdd, 0x9a, 0xf2, 0xbb, 0x7f, 0xad, 0x8d, 0x1d, 0x4e, + 0xb1, 0xff, 0x62, 0x3f, 0xf8, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x95, 0x9d, 0x8e, 0x65, 0x0e, + 0x17, 0x00, 0x00, } diff --git a/tools/functional-tester/rpcpb/rpc.proto b/tools/functional-tester/rpcpb/rpc.proto index 5defeace09f..747966d25aa 100644 --- a/tools/functional-tester/rpcpb/rpc.proto +++ b/tools/functional-tester/rpcpb/rpc.proto @@ -55,7 +55,7 @@ message Etcd { string ClientTrustedCAFile = 27 [(gogoproto.moretags) = "yaml:\"trusted-ca-file\""]; repeated string ListenPeerURLs = 31 [(gogoproto.moretags) = "yaml:\"listen-peer-urls\""]; - repeated string InitialAdvertisePeerURLs = 32 [(gogoproto.moretags) = "yaml:\"initial-advertise-peer-urls\""]; + repeated string AdvertisePeerURLs = 32 [(gogoproto.moretags) = "yaml:\"initial-advertise-peer-urls\""]; bool PeerAutoTLS = 33 [(gogoproto.moretags) = "yaml:\"peer-auto-tls\""]; bool PeerClientCertAuth = 34 [(gogoproto.moretags) = "yaml:\"peer-client-cert-auth\""]; string PeerCertFile = 35 [(gogoproto.moretags) = "yaml:\"peer-cert-file\""]; From f4f59750a898b68415704f65ad4c450a0ff14afb Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 14:01:27 -0700 Subject: [PATCH 05/14] functional-tester/agent: use "AdvertisePeerURLs" Signed-off-by: Gyuho Lee --- tools/functional-tester/agent/handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/functional-tester/agent/handler.go b/tools/functional-tester/agent/handler.go index 0ef16d392e4..4e316f5eca0 100644 --- a/tools/functional-tester/agent/handler.go +++ b/tools/functional-tester/agent/handler.go @@ -133,7 +133,7 @@ func (srv *Server) startProxy() error { } if srv.Member.EtcdPeerProxy { - advertisePeerURL, advertisePeerURLPort, err := getURLAndPort(srv.Member.Etcd.InitialAdvertisePeerURLs[0]) + advertisePeerURL, advertisePeerURLPort, err := getURLAndPort(srv.Member.Etcd.AdvertisePeerURLs[0]) if err != nil { return err } From b70f9e16397529f992df7750f0354f0269b56222 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 14:05:04 -0700 Subject: [PATCH 06/14] functional-tester/tester: add TLS flags Signed-off-by: Gyuho Lee --- tools/functional-tester/tester/cluster.go | 148 +++++++++++++----- .../functional-tester/tester/cluster_test.go | 126 +++++++++------ .../functional-tester/tester/local-test.yaml | 60 +++++-- 3 files changed, 233 insertions(+), 101 deletions(-) diff --git a/tools/functional-tester/tester/cluster.go b/tools/functional-tester/tester/cluster.go index 915d571897a..5a1e178c0a6 100644 --- a/tools/functional-tester/tester/cluster.go +++ b/tools/functional-tester/tester/cluster.go @@ -21,6 +21,7 @@ import ( "io/ioutil" "math/rand" "net/http" + "net/url" "path/filepath" "strings" "time" @@ -72,43 +73,43 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { return nil, err } - for i := range clus.Members { - if clus.Members[i].BaseDir == "" { - return nil, fmt.Errorf("Members[i].BaseDir cannot be empty (got %q)", clus.Members[i].BaseDir) + for i, mem := range clus.Members { + if mem.BaseDir == "" { + return nil, fmt.Errorf("Members[i].BaseDir cannot be empty (got %q)", mem.BaseDir) } - if clus.Members[i].EtcdLogPath == "" { - return nil, fmt.Errorf("Members[i].EtcdLogPath cannot be empty (got %q)", clus.Members[i].EtcdLogPath) + if mem.EtcdLogPath == "" { + return nil, fmt.Errorf("Members[i].EtcdLogPath cannot be empty (got %q)", mem.EtcdLogPath) } - if clus.Members[i].Etcd.Name == "" { - return nil, fmt.Errorf("'--name' cannot be empty (got %+v)", clus.Members[i]) + if mem.Etcd.Name == "" { + return nil, fmt.Errorf("'--name' cannot be empty (got %+v)", mem) } - if clus.Members[i].Etcd.DataDir == "" { - return nil, fmt.Errorf("'--data-dir' cannot be empty (got %+v)", clus.Members[i]) + if mem.Etcd.DataDir == "" { + return nil, fmt.Errorf("'--data-dir' cannot be empty (got %+v)", mem) } - if clus.Members[i].Etcd.SnapshotCount == 0 { - return nil, fmt.Errorf("'--snapshot-count' cannot be 0 (got %+v)", clus.Members[i].Etcd.SnapshotCount) + if mem.Etcd.SnapshotCount == 0 { + return nil, fmt.Errorf("'--snapshot-count' cannot be 0 (got %+v)", mem.Etcd.SnapshotCount) } - if clus.Members[i].Etcd.DataDir == "" { - return nil, fmt.Errorf("'--data-dir' cannot be empty (got %q)", clus.Members[i].Etcd.DataDir) + if mem.Etcd.DataDir == "" { + return nil, fmt.Errorf("'--data-dir' cannot be empty (got %q)", mem.Etcd.DataDir) } - if clus.Members[i].Etcd.WALDir == "" { - clus.Members[i].Etcd.WALDir = filepath.Join(clus.Members[i].Etcd.DataDir, "member", "wal") + if mem.Etcd.WALDir == "" { + clus.Members[i].Etcd.WALDir = filepath.Join(mem.Etcd.DataDir, "member", "wal") } - if clus.Members[i].Etcd.HeartbeatIntervalMs == 0 { - return nil, fmt.Errorf("'--heartbeat-interval' cannot be 0 (got %+v)", clus.Members[i].Etcd) + if mem.Etcd.HeartbeatIntervalMs == 0 { + return nil, fmt.Errorf("'--heartbeat-interval' cannot be 0 (got %+v)", mem.Etcd) } - if clus.Members[i].Etcd.ElectionTimeoutMs == 0 { - return nil, fmt.Errorf("'--election-timeout' cannot be 0 (got %+v)", clus.Members[i].Etcd) + if mem.Etcd.ElectionTimeoutMs == 0 { + return nil, fmt.Errorf("'--election-timeout' cannot be 0 (got %+v)", mem.Etcd) } - if int64(clus.Tester.DelayLatencyMs) <= clus.Members[i].Etcd.ElectionTimeoutMs { - return nil, fmt.Errorf("delay latency %d ms must be greater than election timeout %d ms", clus.Tester.DelayLatencyMs, clus.Members[i].Etcd.ElectionTimeoutMs) + if int64(clus.Tester.DelayLatencyMs) <= mem.Etcd.ElectionTimeoutMs { + return nil, fmt.Errorf("delay latency %d ms must be greater than election timeout %d ms", clus.Tester.DelayLatencyMs, mem.Etcd.ElectionTimeoutMs) } port := "" listenClientPorts := make([]string, len(clus.Members)) - for i, u := range clus.Members[i].Etcd.ListenClientURLs { + for i, u := range mem.Etcd.ListenClientURLs { if !isValidURL(u) { return nil, fmt.Errorf("'--listen-client-urls' has valid URL %q", u) } @@ -117,7 +118,7 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { return nil, fmt.Errorf("'--listen-client-urls' has no port %q", u) } } - for i, u := range clus.Members[i].Etcd.AdvertiseClientURLs { + for i, u := range mem.Etcd.AdvertiseClientURLs { if !isValidURL(u) { return nil, fmt.Errorf("'--advertise-client-urls' has valid URL %q", u) } @@ -125,13 +126,13 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { if err != nil { return nil, fmt.Errorf("'--advertise-client-urls' has no port %q", u) } - if clus.Members[i].EtcdClientProxy && listenClientPorts[i] == port { + if mem.EtcdClientProxy && listenClientPorts[i] == port { return nil, fmt.Errorf("clus.Members[%d] requires client port proxy, but advertise port %q conflicts with listener port %q", i, port, listenClientPorts[i]) } } listenPeerPorts := make([]string, len(clus.Members)) - for i, u := range clus.Members[i].Etcd.ListenPeerURLs { + for i, u := range mem.Etcd.ListenPeerURLs { if !isValidURL(u) { return nil, fmt.Errorf("'--listen-peer-urls' has valid URL %q", u) } @@ -140,7 +141,7 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { return nil, fmt.Errorf("'--listen-peer-urls' has no port %q", u) } } - for i, u := range clus.Members[i].Etcd.InitialAdvertisePeerURLs { + for j, u := range mem.Etcd.AdvertisePeerURLs { if !isValidURL(u) { return nil, fmt.Errorf("'--initial-advertise-peer-urls' has valid URL %q", u) } @@ -148,28 +149,101 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { if err != nil { return nil, fmt.Errorf("'--initial-advertise-peer-urls' has no port %q", u) } - if clus.Members[i].EtcdPeerProxy && listenPeerPorts[i] == port { - return nil, fmt.Errorf("clus.Members[%d] requires peer port proxy, but advertise port %q conflicts with listener port %q", i, port, listenPeerPorts[i]) + if mem.EtcdPeerProxy && listenPeerPorts[j] == port { + return nil, fmt.Errorf("clus.Members[%d] requires peer port proxy, but advertise port %q conflicts with listener port %q", i, port, listenPeerPorts[j]) } } - if !strings.HasPrefix(clus.Members[i].EtcdLogPath, clus.Members[i].BaseDir) { - return nil, fmt.Errorf("EtcdLogPath must be prefixed with BaseDir (got %q)", clus.Members[i].EtcdLogPath) + if !strings.HasPrefix(mem.EtcdLogPath, mem.BaseDir) { + return nil, fmt.Errorf("EtcdLogPath must be prefixed with BaseDir (got %q)", mem.EtcdLogPath) } - if !strings.HasPrefix(clus.Members[i].Etcd.DataDir, clus.Members[i].BaseDir) { - return nil, fmt.Errorf("Etcd.DataDir must be prefixed with BaseDir (got %q)", clus.Members[i].Etcd.DataDir) + if !strings.HasPrefix(mem.Etcd.DataDir, mem.BaseDir) { + return nil, fmt.Errorf("Etcd.DataDir must be prefixed with BaseDir (got %q)", mem.Etcd.DataDir) } // TODO: support separate WALDir that can be handled via failure-archive - if !strings.HasPrefix(clus.Members[i].Etcd.WALDir, clus.Members[i].BaseDir) { - return nil, fmt.Errorf("Etcd.WALDir must be prefixed with BaseDir (got %q)", clus.Members[i].Etcd.WALDir) + if !strings.HasPrefix(mem.Etcd.WALDir, mem.BaseDir) { + return nil, fmt.Errorf("Etcd.WALDir must be prefixed with BaseDir (got %q)", mem.Etcd.WALDir) } - if len(clus.Tester.FailureCases) == 0 { - return nil, errors.New("FailureCases not found") + // TODO: only support generated certs with TLS generator + // deprecate auto TLS + if mem.Etcd.ClientAutoTLS && mem.Etcd.ClientCertAuth { + return nil, fmt.Errorf("Etcd.ClientAutoTLS and Etcd.ClientCertAuth are both 'true'") + } + if mem.Etcd.ClientAutoTLS && mem.Etcd.ClientCertFile != "" { + return nil, fmt.Errorf("Etcd.ClientAutoTLS 'true', but Etcd.ClientCertFile is %q", mem.Etcd.ClientCertFile) + } + if mem.Etcd.ClientCertAuth && mem.Etcd.ClientCertFile == "" { + return nil, fmt.Errorf("Etcd.ClientCertAuth 'true', but Etcd.ClientCertFile is %q", mem.Etcd.PeerCertFile) + } + if mem.Etcd.ClientAutoTLS && mem.Etcd.ClientKeyFile != "" { + return nil, fmt.Errorf("Etcd.ClientAutoTLS 'true', but Etcd.ClientKeyFile is %q", mem.Etcd.ClientKeyFile) + } + if mem.Etcd.ClientAutoTLS && mem.Etcd.ClientTrustedCAFile != "" { + return nil, fmt.Errorf("Etcd.ClientAutoTLS 'true', but Etcd.ClientTrustedCAFile is %q", mem.Etcd.ClientTrustedCAFile) + } + if mem.Etcd.PeerAutoTLS && mem.Etcd.PeerClientCertAuth { + return nil, fmt.Errorf("Etcd.PeerAutoTLS and Etcd.PeerClientCertAuth are both 'true'") + } + if mem.Etcd.PeerAutoTLS && mem.Etcd.PeerCertFile != "" { + return nil, fmt.Errorf("Etcd.PeerAutoTLS 'true', but Etcd.PeerCertFile is %q", mem.Etcd.PeerCertFile) + } + if mem.Etcd.PeerClientCertAuth && mem.Etcd.PeerCertFile == "" { + return nil, fmt.Errorf("Etcd.PeerClientCertAuth 'true', but Etcd.PeerCertFile is %q", mem.Etcd.PeerCertFile) + } + if mem.Etcd.PeerAutoTLS && mem.Etcd.PeerKeyFile != "" { + return nil, fmt.Errorf("Etcd.PeerAutoTLS 'true', but Etcd.PeerKeyFile is %q", mem.Etcd.PeerKeyFile) + } + if mem.Etcd.PeerAutoTLS && mem.Etcd.PeerTrustedCAFile != "" { + return nil, fmt.Errorf("Etcd.PeerAutoTLS 'true', but Etcd.PeerTrustedCAFile is %q", mem.Etcd.PeerTrustedCAFile) + } + + if mem.Etcd.ClientAutoTLS || mem.Etcd.ClientCertFile != "" { + for _, cu := range mem.Etcd.ListenClientURLs { + u, err := url.Parse(cu) + if err != nil { + return nil, err + } + if u.Scheme != "https" { // TODO: support unix + return nil, fmt.Errorf("client TLS is enabled with wrong scheme %q", cu) + } + } + for _, cu := range mem.Etcd.AdvertiseClientURLs { + u, err := url.Parse(cu) + if err != nil { + return nil, err + } + if u.Scheme != "https" { // TODO: support unix + return nil, fmt.Errorf("client TLS is enabled with wrong scheme %q", cu) + } + } + } + if mem.Etcd.PeerAutoTLS || mem.Etcd.PeerCertFile != "" { + for _, cu := range mem.Etcd.ListenPeerURLs { + u, err := url.Parse(cu) + if err != nil { + return nil, err + } + if u.Scheme != "https" { // TODO: support unix + return nil, fmt.Errorf("peer TLS is enabled with wrong scheme %q", cu) + } + } + for _, cu := range mem.Etcd.AdvertisePeerURLs { + u, err := url.Parse(cu) + if err != nil { + return nil, err + } + if u.Scheme != "https" { // TODO: support unix + return nil, fmt.Errorf("peer TLS is enabled with wrong scheme %q", cu) + } + } } } + if len(clus.Tester.FailureCases) == 0 { + return nil, errors.New("FailureCases not found") + } if clus.Tester.DelayLatencyMs <= clus.Tester.DelayLatencyMsRv*5 { return nil, fmt.Errorf("delay latency %d ms must be greater than 5x of delay latency random variable %d ms", clus.Tester.DelayLatencyMs, clus.Tester.DelayLatencyMsRv) } @@ -198,8 +272,6 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { return clus, err } -// TODO: status handler - var dialOpts = []grpc.DialOption{ grpc.WithInsecure(), grpc.WithTimeout(5 * time.Second), diff --git a/tools/functional-tester/tester/cluster_test.go b/tools/functional-tester/tester/cluster_test.go index 9d1e3a49c87..1a5d88ab63d 100644 --- a/tools/functional-tester/tester/cluster_test.go +++ b/tools/functional-tester/tester/cluster_test.go @@ -38,22 +38,32 @@ func Test_newCluster(t *testing.T) { EtcdPeerProxy: true, EtcdClientEndpoint: "127.0.0.1:1379", Etcd: &rpcpb.Etcd{ - Name: "s1", - DataDir: "/tmp/etcd-agent-data-1/etcd.data", - WALDir: "/tmp/etcd-agent-data-1/etcd.data/member/wal", - HeartbeatIntervalMs: 100, - ElectionTimeoutMs: 1000, - ListenClientURLs: []string{"http://127.0.0.1:1379"}, - AdvertiseClientURLs: []string{"http://127.0.0.1:1379"}, - ListenPeerURLs: []string{"http://127.0.0.1:1380"}, - InitialAdvertisePeerURLs: []string{"http://127.0.0.1:13800"}, - InitialCluster: "s1=http://127.0.0.1:13800,s2=http://127.0.0.1:23800,s3=http://127.0.0.1:33800", - InitialClusterState: "new", - InitialClusterToken: "tkn", - SnapshotCount: 10000, - QuotaBackendBytes: 10740000000, - PreVote: true, - InitialCorruptCheck: true, + Name: "s1", + DataDir: "/tmp/etcd-agent-data-1/etcd.data", + WALDir: "/tmp/etcd-agent-data-1/etcd.data/member/wal", + HeartbeatIntervalMs: 100, + ElectionTimeoutMs: 1000, + ListenClientURLs: []string{"https://127.0.0.1:1379"}, + AdvertiseClientURLs: []string{"https://127.0.0.1:1379"}, + ClientAutoTLS: true, + ClientCertAuth: false, + ClientCertFile: "", + ClientKeyFile: "", + ClientTrustedCAFile: "", + ListenPeerURLs: []string{"https://127.0.0.1:1380"}, + AdvertisePeerURLs: []string{"https://127.0.0.1:13800"}, + PeerAutoTLS: true, + PeerClientCertAuth: false, + PeerCertFile: "", + PeerKeyFile: "", + PeerTrustedCAFile: "", + InitialCluster: "s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800", + InitialClusterState: "new", + InitialClusterToken: "tkn", + SnapshotCount: 10000, + QuotaBackendBytes: 10740000000, + PreVote: true, + InitialCorruptCheck: true, }, }, { @@ -67,22 +77,32 @@ func Test_newCluster(t *testing.T) { EtcdPeerProxy: true, EtcdClientEndpoint: "127.0.0.1:2379", Etcd: &rpcpb.Etcd{ - Name: "s2", - DataDir: "/tmp/etcd-agent-data-2/etcd.data", - WALDir: "/tmp/etcd-agent-data-2/etcd.data/member/wal", - HeartbeatIntervalMs: 100, - ElectionTimeoutMs: 1000, - ListenClientURLs: []string{"http://127.0.0.1:2379"}, - AdvertiseClientURLs: []string{"http://127.0.0.1:2379"}, - ListenPeerURLs: []string{"http://127.0.0.1:2380"}, - InitialAdvertisePeerURLs: []string{"http://127.0.0.1:23800"}, - InitialCluster: "s1=http://127.0.0.1:13800,s2=http://127.0.0.1:23800,s3=http://127.0.0.1:33800", - InitialClusterState: "new", - InitialClusterToken: "tkn", - SnapshotCount: 10000, - QuotaBackendBytes: 10740000000, - PreVote: true, - InitialCorruptCheck: true, + Name: "s2", + DataDir: "/tmp/etcd-agent-data-2/etcd.data", + WALDir: "/tmp/etcd-agent-data-2/etcd.data/member/wal", + HeartbeatIntervalMs: 100, + ElectionTimeoutMs: 1000, + ListenClientURLs: []string{"https://127.0.0.1:2379"}, + AdvertiseClientURLs: []string{"https://127.0.0.1:2379"}, + ClientAutoTLS: true, + ClientCertAuth: false, + ClientCertFile: "", + ClientKeyFile: "", + ClientTrustedCAFile: "", + ListenPeerURLs: []string{"https://127.0.0.1:2380"}, + AdvertisePeerURLs: []string{"https://127.0.0.1:23800"}, + PeerAutoTLS: true, + PeerClientCertAuth: false, + PeerCertFile: "", + PeerKeyFile: "", + PeerTrustedCAFile: "", + InitialCluster: "s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800", + InitialClusterState: "new", + InitialClusterToken: "tkn", + SnapshotCount: 10000, + QuotaBackendBytes: 10740000000, + PreVote: true, + InitialCorruptCheck: true, }, }, { @@ -96,22 +116,32 @@ func Test_newCluster(t *testing.T) { EtcdPeerProxy: true, EtcdClientEndpoint: "127.0.0.1:3379", Etcd: &rpcpb.Etcd{ - Name: "s3", - DataDir: "/tmp/etcd-agent-data-3/etcd.data", - WALDir: "/tmp/etcd-agent-data-3/etcd.data/member/wal", - HeartbeatIntervalMs: 100, - ElectionTimeoutMs: 1000, - ListenClientURLs: []string{"http://127.0.0.1:3379"}, - AdvertiseClientURLs: []string{"http://127.0.0.1:3379"}, - ListenPeerURLs: []string{"http://127.0.0.1:3380"}, - InitialAdvertisePeerURLs: []string{"http://127.0.0.1:33800"}, - InitialCluster: "s1=http://127.0.0.1:13800,s2=http://127.0.0.1:23800,s3=http://127.0.0.1:33800", - InitialClusterState: "new", - InitialClusterToken: "tkn", - SnapshotCount: 10000, - QuotaBackendBytes: 10740000000, - PreVote: true, - InitialCorruptCheck: true, + Name: "s3", + DataDir: "/tmp/etcd-agent-data-3/etcd.data", + WALDir: "/tmp/etcd-agent-data-3/etcd.data/member/wal", + HeartbeatIntervalMs: 100, + ElectionTimeoutMs: 1000, + ListenClientURLs: []string{"https://127.0.0.1:3379"}, + AdvertiseClientURLs: []string{"https://127.0.0.1:3379"}, + ClientAutoTLS: true, + ClientCertAuth: false, + ClientCertFile: "", + ClientKeyFile: "", + ClientTrustedCAFile: "", + ListenPeerURLs: []string{"https://127.0.0.1:3380"}, + AdvertisePeerURLs: []string{"https://127.0.0.1:33800"}, + PeerAutoTLS: true, + PeerClientCertAuth: false, + PeerCertFile: "", + PeerKeyFile: "", + PeerTrustedCAFile: "", + InitialCluster: "s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800", + InitialClusterState: "new", + InitialClusterToken: "tkn", + SnapshotCount: 10000, + QuotaBackendBytes: 10740000000, + PreVote: true, + InitialCorruptCheck: true, }, }, }, diff --git a/tools/functional-tester/tester/local-test.yaml b/tools/functional-tester/tester/local-test.yaml index d3f2f188983..8cd09d84ba2 100644 --- a/tools/functional-tester/tester/local-test.yaml +++ b/tools/functional-tester/tester/local-test.yaml @@ -14,11 +14,21 @@ agent-configs: wal-dir: /tmp/etcd-agent-data-1/etcd.data/member/wal heartbeat-interval: 100 election-timeout: 1000 - listen-client-urls: ["http://127.0.0.1:1379"] - advertise-client-urls: ["http://127.0.0.1:1379"] - listen-peer-urls: ["http://127.0.0.1:1380"] - initial-advertise-peer-urls: ["http://127.0.0.1:13800"] - initial-cluster: s1=http://127.0.0.1:13800,s2=http://127.0.0.1:23800,s3=http://127.0.0.1:33800 + listen-client-urls: ["https://127.0.0.1:1379"] + advertise-client-urls: ["https://127.0.0.1:1379"] + auto-tls: true + client-cert-auth: false + cert-file: "" + key-file: "" + trusted-ca-file: "" + listen-peer-urls: ["https://127.0.0.1:1380"] + initial-advertise-peer-urls: ["https://127.0.0.1:13800"] + peer-auto-tls: true + peer-client-cert-auth: false + peer-cert-file: "" + peer-key-file: "" + peer-trusted-ca-file: "" + initial-cluster: s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800 initial-cluster-state: new initial-cluster-token: tkn snapshot-count: 10000 @@ -40,11 +50,21 @@ agent-configs: wal-dir: /tmp/etcd-agent-data-2/etcd.data/member/wal heartbeat-interval: 100 election-timeout: 1000 - listen-client-urls: ["http://127.0.0.1:2379"] - advertise-client-urls: ["http://127.0.0.1:2379"] - listen-peer-urls: ["http://127.0.0.1:2380"] - initial-advertise-peer-urls: ["http://127.0.0.1:23800"] - initial-cluster: s1=http://127.0.0.1:13800,s2=http://127.0.0.1:23800,s3=http://127.0.0.1:33800 + listen-client-urls: ["https://127.0.0.1:2379"] + advertise-client-urls: ["https://127.0.0.1:2379"] + auto-tls: true + client-cert-auth: false + cert-file: "" + key-file: "" + trusted-ca-file: "" + listen-peer-urls: ["https://127.0.0.1:2380"] + initial-advertise-peer-urls: ["https://127.0.0.1:23800"] + peer-auto-tls: true + peer-client-cert-auth: false + peer-cert-file: "" + peer-key-file: "" + peer-trusted-ca-file: "" + initial-cluster: s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800 initial-cluster-state: new initial-cluster-token: tkn snapshot-count: 10000 @@ -66,11 +86,21 @@ agent-configs: wal-dir: /tmp/etcd-agent-data-3/etcd.data/member/wal heartbeat-interval: 100 election-timeout: 1000 - listen-client-urls: ["http://127.0.0.1:3379"] - advertise-client-urls: ["http://127.0.0.1:3379"] - listen-peer-urls: ["http://127.0.0.1:3380"] - initial-advertise-peer-urls: ["http://127.0.0.1:33800"] - initial-cluster: s1=http://127.0.0.1:13800,s2=http://127.0.0.1:23800,s3=http://127.0.0.1:33800 + listen-client-urls: ["https://127.0.0.1:3379"] + advertise-client-urls: ["https://127.0.0.1:3379"] + auto-tls: true + client-cert-auth: false + cert-file: "" + key-file: "" + trusted-ca-file: "" + listen-peer-urls: ["https://127.0.0.1:3380"] + initial-advertise-peer-urls: ["https://127.0.0.1:33800"] + peer-auto-tls: true + peer-client-cert-auth: false + peer-cert-file: "" + peer-key-file: "" + peer-trusted-ca-file: "" + initial-cluster: s1=https://127.0.0.1:13800,s2=https://127.0.0.1:23800,s3=https://127.0.0.1:33800 initial-cluster-state: new initial-cluster-token: tkn snapshot-count: 10000 From 6ceb71efb15daec1a618a3e67f69cbbd45ff7aec Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 14:15:50 -0700 Subject: [PATCH 07/14] functional-tester/rpcpb: include "Member" in "Response" Signed-off-by: Gyuho Lee --- tools/functional-tester/rpcpb/rpc.pb.go | 610 ++++++++++++++++++------ tools/functional-tester/rpcpb/rpc.proto | 21 +- 2 files changed, 481 insertions(+), 150 deletions(-) diff --git a/tools/functional-tester/rpcpb/rpc.pb.go b/tools/functional-tester/rpcpb/rpc.pb.go index e8a24fa7462..e1edbfaf566 100644 --- a/tools/functional-tester/rpcpb/rpc.pb.go +++ b/tools/functional-tester/rpcpb/rpc.pb.go @@ -286,6 +286,18 @@ type Member struct { EtcdClientEndpoint string `protobuf:"bytes,204,opt,name=EtcdClientEndpoint,proto3" json:"EtcdClientEndpoint,omitempty" yaml:"etcd-client-endpoint"` // Etcd defines etcd binary configuration flags. Etcd *Etcd `protobuf:"bytes,301,opt,name=Etcd" json:"Etcd,omitempty" yaml:"etcd"` + // ClientCertData contains cert file contents from this member's etcd server. + ClientCertData string `protobuf:"bytes,401,opt,name=ClientCertData,proto3" json:"ClientCertData,omitempty" yaml:"client-cert-data"` + // ClientKeyData contains key file contents from this member's etcd server. + ClientKeyData string `protobuf:"bytes,402,opt,name=ClientKeyData,proto3" json:"ClientKeyData,omitempty" yaml:"client-key-data"` + // ClientTrustedCAData contains trusted CA file contents from this member's etcd server. + ClientTrustedCAData string `protobuf:"bytes,403,opt,name=ClientTrustedCAData,proto3" json:"ClientTrustedCAData,omitempty" yaml:"client-trusted-ca-data"` + // PeerCertData contains cert file contents from this member's etcd server. + PeerCertData string `protobuf:"bytes,501,opt,name=PeerCertData,proto3" json:"PeerCertData,omitempty" yaml:"peer-cert-data"` + // PeerKeyData contains key file contents from this member's etcd server. + PeerKeyData string `protobuf:"bytes,502,opt,name=PeerKeyData,proto3" json:"PeerKeyData,omitempty" yaml:"peer-key-data"` + // PeerTrustedCAData contains trusted CA file contents from this member's etcd server. + PeerTrustedCAData string `protobuf:"bytes,503,opt,name=PeerTrustedCAData,proto3" json:"PeerTrustedCAData,omitempty" yaml:"peer-trusted-ca-data"` } func (m *Member) Reset() { *m = Member{} } @@ -356,8 +368,10 @@ func (*Tester) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{2} type Request struct { Operation Operation `protobuf:"varint,1,opt,name=Operation,proto3,enum=rpcpb.Operation" json:"Operation,omitempty"` - Member *Member `protobuf:"bytes,2,opt,name=Member" json:"Member,omitempty"` - Tester *Tester `protobuf:"bytes,3,opt,name=Tester" json:"Tester,omitempty"` + // Member contains the same Member object from tester configuration. + Member *Member `protobuf:"bytes,2,opt,name=Member" json:"Member,omitempty"` + // Tester contains tester configuration. + Tester *Tester `protobuf:"bytes,3,opt,name=Tester" json:"Tester,omitempty"` } func (m *Request) Reset() { *m = Request{} } @@ -368,6 +382,8 @@ func (*Request) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{3 type Response struct { Success bool `protobuf:"varint,1,opt,name=Success,proto3" json:"Success,omitempty"` Status string `protobuf:"bytes,2,opt,name=Status,proto3" json:"Status,omitempty"` + // Member contains the same Member object from tester request. + Member *Member `protobuf:"bytes,3,opt,name=Member" json:"Member,omitempty"` } func (m *Response) Reset() { *m = Response{} } @@ -867,6 +883,54 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) { } i += n1 } + if len(m.ClientCertData) > 0 { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x19 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientCertData))) + i += copy(dAtA[i:], m.ClientCertData) + } + if len(m.ClientKeyData) > 0 { + dAtA[i] = 0x92 + i++ + dAtA[i] = 0x19 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientKeyData))) + i += copy(dAtA[i:], m.ClientKeyData) + } + if len(m.ClientTrustedCAData) > 0 { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x19 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientTrustedCAData))) + i += copy(dAtA[i:], m.ClientTrustedCAData) + } + if len(m.PeerCertData) > 0 { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x1f + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerCertData))) + i += copy(dAtA[i:], m.PeerCertData) + } + if len(m.PeerKeyData) > 0 { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x1f + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerKeyData))) + i += copy(dAtA[i:], m.PeerKeyData) + } + if len(m.PeerTrustedCAData) > 0 { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x1f + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerTrustedCAData))) + i += copy(dAtA[i:], m.PeerTrustedCAData) + } return i, nil } @@ -1167,6 +1231,16 @@ func (m *Response) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintRpc(dAtA, i, uint64(len(m.Status))) i += copy(dAtA[i:], m.Status) } + if m.Member != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintRpc(dAtA, i, uint64(m.Member.Size())) + n4, err := m.Member.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } return i, nil } @@ -1327,6 +1401,30 @@ func (m *Member) Size() (n int) { l = m.Etcd.Size() n += 2 + l + sovRpc(uint64(l)) } + l = len(m.ClientCertData) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.ClientKeyData) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.ClientTrustedCAData) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.PeerCertData) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.PeerKeyData) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } + l = len(m.PeerTrustedCAData) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } return n } @@ -1445,6 +1543,10 @@ func (m *Response) Size() (n int) { if l > 0 { n += 1 + l + sovRpc(uint64(l)) } + if m.Member != nil { + l = m.Member.Size() + n += 1 + l + sovRpc(uint64(l)) + } return n } @@ -2467,6 +2569,180 @@ func (m *Member) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 401: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientCertData", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientCertData = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 402: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientKeyData", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientKeyData = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 403: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientTrustedCAData", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientTrustedCAData = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 501: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerCertData", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerCertData = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 502: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerKeyData", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerKeyData = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 503: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerTrustedCAData", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerTrustedCAData = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRpc(dAtA[iNdEx:]) @@ -3262,6 +3538,39 @@ func (m *Response) Unmarshal(dAtA []byte) error { } m.Status = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Member", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Member == nil { + m.Member = &Member{} + } + if err := m.Member.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRpc(dAtA[iNdEx:]) @@ -3391,149 +3700,156 @@ var ( func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) } var fileDescriptorRpc = []byte{ - // 2291 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0x5d, 0x5b, 0xdb, 0xc8, - 0xf5, 0x47, 0x10, 0x08, 0x0c, 0x6f, 0x66, 0x08, 0x41, 0x79, 0x59, 0x44, 0x94, 0x4d, 0xfe, 0x2c, - 0xff, 0x8a, 0xb4, 0xc9, 0x3e, 0x6d, 0x93, 0x66, 0x9b, 0x18, 0xa3, 0x04, 0x17, 0x61, 0x3b, 0x63, - 0x91, 0x64, 0xaf, 0x5c, 0x21, 0x8f, 0xb1, 0x8a, 0x90, 0x1c, 0x69, 0xcc, 0x9a, 0xfd, 0x02, 0x7d, - 0x7a, 0xd7, 0xcb, 0x7e, 0x88, 0xee, 0xf7, 0xc8, 0xbe, 0xb4, 0xdd, 0xb6, 0x77, 0xbd, 0x70, 0xdb, - 0xf4, 0xe9, 0x17, 0xf0, 0xd3, 0x9b, 0xde, 0xf5, 0x99, 0x17, 0xe1, 0x91, 0x6c, 0x93, 0xdc, 0x31, - 0xe7, 0xfc, 0x7e, 0x3f, 0xcd, 0x9c, 0x33, 0x73, 0xce, 0x31, 0x60, 0x31, 0x6a, 0xb9, 0xad, 0xc3, - 0x7b, 0x51, 0xcb, 0xdd, 0x6a, 0x45, 0x21, 0x09, 0xe1, 0x24, 0x33, 0x5c, 0x37, 0x8e, 0x3c, 0xd2, - 0x6c, 0x1f, 0x6e, 0xb9, 0xe1, 0xc9, 0xbd, 0xa3, 0xf0, 0x28, 0xbc, 0xc7, 0xbc, 0x87, 0xed, 0x06, - 0x5b, 0xb1, 0x05, 0xfb, 0x8b, 0xb3, 0xf4, 0xff, 0xce, 0x83, 0x4b, 0x26, 0x71, 0xeb, 0xf0, 0x36, - 0xb8, 0x54, 0x72, 0x4e, 0xb0, 0xaa, 0xac, 0x2b, 0x1b, 0x33, 0xdb, 0x8b, 0xbd, 0xae, 0x36, 0x7b, - 0xe6, 0x9c, 0xf8, 0x8f, 0xf4, 0xc0, 0x39, 0xc1, 0x3a, 0x62, 0x4e, 0x68, 0x80, 0xcb, 0x3b, 0x0e, - 0x71, 0x76, 0xbc, 0x48, 0x1d, 0x67, 0xb8, 0xe5, 0x5e, 0x57, 0x5b, 0xe4, 0xb8, 0xba, 0x43, 0x1c, - 0xa3, 0xee, 0x45, 0x3a, 0x4a, 0x30, 0x70, 0x13, 0x4c, 0xbd, 0xca, 0x5b, 0x14, 0x3d, 0xc1, 0xd0, - 0xb0, 0xd7, 0xd5, 0x16, 0x38, 0xfa, 0x0b, 0xc7, 0xe7, 0x60, 0x81, 0x80, 0x65, 0xb0, 0xbc, 0x8b, - 0x9d, 0x88, 0x1c, 0x62, 0x87, 0x14, 0x03, 0x82, 0xa3, 0x53, 0xc7, 0xdf, 0x8f, 0xd5, 0xd9, 0x75, - 0x65, 0x63, 0x62, 0xfb, 0xa3, 0x5e, 0x57, 0xbb, 0xc6, 0x89, 0xcd, 0x04, 0x64, 0x78, 0x02, 0xa5, - 0xa3, 0x61, 0x4c, 0x58, 0x04, 0x4b, 0xa6, 0x8f, 0x5d, 0xe2, 0x85, 0x81, 0xed, 0x9d, 0xe0, 0xb0, - 0x4d, 0xf6, 0x63, 0x75, 0x8e, 0xc9, 0xdd, 0xe8, 0x75, 0xb5, 0x55, 0x2e, 0x87, 0x05, 0xc4, 0x20, - 0x1c, 0xa3, 0xa3, 0x41, 0x16, 0x2c, 0x82, 0x9c, 0xe5, 0xc5, 0x04, 0x07, 0x05, 0xdf, 0xc3, 0x01, - 0x39, 0x40, 0x56, 0xac, 0xae, 0xac, 0x4f, 0x6c, 0xcc, 0xc8, 0x1b, 0xf3, 0x19, 0xc2, 0x70, 0x19, - 0xc4, 0x68, 0x47, 0x7e, 0xac, 0xa3, 0x01, 0x1a, 0x44, 0x60, 0x39, 0x5f, 0x3f, 0xc5, 0x11, 0xf1, - 0x62, 0x2c, 0xa9, 0x5d, 0x65, 0x6a, 0xeb, 0xbd, 0xae, 0x76, 0x93, 0xab, 0x39, 0x09, 0x28, 0x2d, - 0x38, 0x8c, 0x0c, 0x1f, 0x82, 0x79, 0xbe, 0xca, 0xb7, 0x49, 0x68, 0x5b, 0x55, 0x75, 0x75, 0x5d, - 0xd9, 0x98, 0x96, 0x73, 0xe3, 0xb4, 0x49, 0x68, 0x10, 0x2a, 0x90, 0x46, 0xc2, 0x02, 0x58, 0xe0, - 0x86, 0x02, 0x8e, 0xa8, 0xb1, 0xa9, 0xaa, 0x8c, 0x2b, 0x45, 0x48, 0x7c, 0xdf, 0xc5, 0x11, 0x31, - 0x9c, 0x36, 0x69, 0xea, 0x28, 0x43, 0x81, 0x8f, 0x65, 0x91, 0x67, 0x9e, 0x8f, 0xd5, 0x6b, 0x2c, - 0xdd, 0x57, 0x7a, 0x5d, 0x2d, 0x27, 0x44, 0x28, 0xbb, 0xe1, 0xf9, 0x38, 0xc5, 0xa6, 0xd8, 0xfe, - 0xee, 0xf7, 0xf0, 0x19, 0x23, 0x5f, 0xcf, 0xde, 0xac, 0x63, 0x7c, 0x26, 0xb8, 0x69, 0x24, 0xb4, - 0xc0, 0x32, 0x37, 0xd8, 0x51, 0x3b, 0x26, 0xb8, 0x5e, 0xc8, 0x33, 0x81, 0x1b, 0x4c, 0xe0, 0x7a, - 0xaf, 0xab, 0x5d, 0xe5, 0x02, 0x84, 0xbb, 0x0d, 0xd7, 0x11, 0x3a, 0xc3, 0x68, 0x34, 0x16, 0x3c, - 0x5d, 0x15, 0x8c, 0x23, 0x96, 0x15, 0x8d, 0x65, 0x45, 0x8a, 0x85, 0xc8, 0x71, 0x0b, 0xe3, 0x48, - 0x24, 0x24, 0x43, 0x81, 0x36, 0x58, 0x3a, 0x4f, 0xd1, 0xb9, 0xce, 0x3a, 0xd3, 0xb9, 0xdb, 0xeb, - 0x6a, 0x3a, 0xd7, 0xf1, 0x02, 0x8f, 0x78, 0x8e, 0x6f, 0xf4, 0xb3, 0x2c, 0x49, 0x0e, 0x0a, 0xc0, - 0x47, 0x60, 0x96, 0xfe, 0x9d, 0xe4, 0xf7, 0x16, 0xcb, 0x91, 0xda, 0xeb, 0x6a, 0x57, 0xb8, 0x1e, - 0x63, 0xf7, 0x93, 0x2c, 0x83, 0x61, 0x05, 0x40, 0xba, 0xcc, 0xa4, 0x59, 0x67, 0x12, 0xd2, 0x85, - 0x63, 0x12, 0x83, 0xb9, 0x1e, 0xc2, 0x85, 0x9f, 0x81, 0x39, 0x66, 0x4d, 0xb2, 0x7d, 0x9b, 0xc5, - 0xfb, 0x5a, 0xaf, 0xab, 0xad, 0xc8, 0x5a, 0xfd, 0x94, 0xa7, 0xe0, 0xc9, 0x61, 0x92, 0x74, 0x7f, - 0xcc, 0xd8, 0xd9, 0xc3, 0xf4, 0x73, 0x2e, 0x83, 0xe1, 0x3e, 0x58, 0xa2, 0xcb, 0x74, 0xbe, 0xef, - 0x30, 0x05, 0xad, 0xd7, 0xd5, 0x6e, 0x48, 0x0a, 0x03, 0x49, 0x1f, 0x64, 0xc2, 0x6d, 0xb0, 0x50, - 0xe4, 0xa9, 0x28, 0xf8, 0xd4, 0x1e, 0xa9, 0x9f, 0x64, 0xef, 0x4e, 0x92, 0x2a, 0x97, 0x03, 0x74, - 0x94, 0x61, 0xd0, 0x17, 0x9d, 0xb6, 0x54, 0x89, 0x43, 0xb0, 0xba, 0xc9, 0x84, 0xa4, 0x00, 0x67, - 0x84, 0x8c, 0x98, 0xc2, 0x74, 0x34, 0x8c, 0x3c, 0xa8, 0x69, 0x87, 0xc7, 0x38, 0x50, 0xff, 0xff, - 0x7d, 0x9a, 0x84, 0xc2, 0x06, 0x34, 0x19, 0x19, 0x3e, 0x01, 0xf3, 0xd5, 0xc0, 0x69, 0xc5, 0xcd, - 0x90, 0x14, 0xc2, 0x76, 0x40, 0xd4, 0x07, 0xac, 0x16, 0x4a, 0x69, 0x8b, 0x85, 0xdb, 0x70, 0xa9, - 0x5f, 0x47, 0x69, 0x3c, 0xb4, 0xc0, 0xd2, 0x8b, 0x76, 0x48, 0x9c, 0x6d, 0xc7, 0x3d, 0xc6, 0x41, - 0x7d, 0xfb, 0x8c, 0xe0, 0x58, 0xfd, 0x94, 0x89, 0xac, 0xf5, 0xba, 0xda, 0x75, 0x2e, 0xf2, 0x86, - 0x42, 0x8c, 0x43, 0x8e, 0x31, 0x0e, 0x29, 0x48, 0x47, 0x83, 0x44, 0xda, 0x4a, 0x2a, 0x11, 0x7e, - 0x19, 0x12, 0xac, 0x3e, 0xc9, 0x96, 0xab, 0x56, 0x84, 0x8d, 0xd3, 0x90, 0x46, 0x27, 0xc1, 0xc8, - 0x11, 0x09, 0xa3, 0xa8, 0xdd, 0x22, 0x85, 0x26, 0x76, 0x8f, 0xd5, 0xa7, 0xd9, 0x6b, 0x7c, 0x1e, - 0x11, 0x8e, 0x32, 0x5c, 0x0a, 0x93, 0x22, 0x22, 0x91, 0xf5, 0xdf, 0x4c, 0x82, 0xa9, 0x7d, 0x7c, - 0x72, 0x88, 0x23, 0x7a, 0xa5, 0x69, 0x17, 0x34, 0x3b, 0xd8, 0xad, 0x38, 0xa4, 0x29, 0xba, 0xa0, - 0x14, 0x1b, 0x4c, 0xdc, 0xba, 0x81, 0x3b, 0xd8, 0x35, 0x5a, 0x0e, 0x7d, 0x17, 0x29, 0x38, 0x7c, - 0x00, 0x66, 0xf2, 0x47, 0xb4, 0xac, 0xd6, 0xeb, 0x11, 0x6b, 0x59, 0x33, 0xdb, 0x2b, 0xbd, 0xae, - 0xb6, 0x24, 0xaa, 0x2f, 0x75, 0x19, 0x4e, 0xbd, 0x1e, 0xe9, 0xa8, 0x8f, 0xa3, 0xf1, 0x7c, 0xe6, - 0x78, 0x7e, 0x2b, 0xf4, 0x02, 0xb2, 0x6b, 0xdb, 0x15, 0x46, 0x9e, 0x63, 0x64, 0x29, 0x9e, 0x8d, - 0x04, 0x62, 0x34, 0x09, 0x69, 0x09, 0x95, 0x41, 0x22, 0x8d, 0xe7, 0xb6, 0x13, 0x63, 0xda, 0x6c, - 0x71, 0xb6, 0x80, 0x1e, 0x3a, 0x31, 0x16, 0xad, 0x59, 0x60, 0xe8, 0x23, 0xa4, 0x27, 0xb0, 0xc2, - 0x23, 0x76, 0xde, 0x46, 0xf6, 0x11, 0xb2, 0xf3, 0xfa, 0xe1, 0x91, 0x38, 0xae, 0x0c, 0x86, 0x79, - 0x30, 0x4f, 0x97, 0xa2, 0x86, 0x5a, 0x55, 0xf5, 0x6b, 0x85, 0xa5, 0x41, 0x7a, 0x35, 0x8c, 0x2e, - 0xaa, 0x09, 0xef, 0x3b, 0x29, 0x06, 0x7c, 0x0e, 0x16, 0xfb, 0x86, 0x4a, 0x14, 0x76, 0xce, 0xd4, - 0x6f, 0xb8, 0xc8, 0xcd, 0x5e, 0x57, 0x53, 0x07, 0x45, 0x5a, 0x14, 0xa3, 0xa3, 0x2c, 0x2b, 0xd9, - 0x0b, 0x7d, 0xda, 0x5c, 0xe6, 0xdb, 0xe1, 0x7b, 0x61, 0x25, 0x41, 0x88, 0xa4, 0x19, 0xb4, 0x40, - 0xf6, 0x55, 0xcd, 0xa0, 0xce, 0xe2, 0xaa, 0x7e, 0xa7, 0x64, 0xab, 0x8a, 0xbc, 0x1d, 0x2c, 0x60, - 0x3a, 0x1a, 0xc2, 0x85, 0x3f, 0xe2, 0x33, 0x95, 0xfa, 0x15, 0x1d, 0x92, 0x66, 0xef, 0xcf, 0x6e, - 0xb1, 0xd1, 0x6c, 0x8b, 0xda, 0xe4, 0xc9, 0x8a, 0x0a, 0xea, 0x88, 0x41, 0xf5, 0xbf, 0xcd, 0x81, - 0x29, 0x1b, 0xb3, 0x82, 0xf2, 0x04, 0xcc, 0xf3, 0xbf, 0x4a, 0x98, 0x7c, 0x11, 0x46, 0xc7, 0x83, - 0x97, 0x91, 0x30, 0xb7, 0x11, 0x70, 0xbf, 0x8e, 0xd2, 0x78, 0xf8, 0x63, 0x00, 0xb8, 0x81, 0xdd, - 0x28, 0x3e, 0xa8, 0x5d, 0xed, 0x75, 0x35, 0x98, 0x62, 0xf3, 0x9b, 0x24, 0x21, 0x69, 0x03, 0xdc, - 0xc1, 0xbe, 0x73, 0x66, 0x39, 0x04, 0x07, 0xee, 0x99, 0x98, 0xbe, 0xe6, 0xe5, 0x06, 0x58, 0xa7, - 0x7e, 0xc3, 0xe7, 0x00, 0xe3, 0x84, 0x36, 0xc0, 0x34, 0x05, 0xfe, 0x02, 0xe4, 0xd2, 0x16, 0x74, - 0xca, 0x2e, 0xf5, 0xbc, 0x7c, 0xa9, 0xb3, 0x32, 0x46, 0x74, 0xaa, 0xa3, 0x01, 0x1e, 0xfc, 0x1c, - 0xac, 0x1c, 0xb4, 0xea, 0x0e, 0xc1, 0xf5, 0xcc, 0xbe, 0xe6, 0x99, 0xe0, 0xed, 0x5e, 0x57, 0xd3, - 0xb8, 0x60, 0x9b, 0xc3, 0x8c, 0xc1, 0xfd, 0x0d, 0x57, 0xa0, 0x31, 0x42, 0x61, 0x3b, 0xa8, 0x5b, - 0xde, 0x89, 0x47, 0xd4, 0x95, 0x75, 0x65, 0x63, 0x52, 0x8e, 0x51, 0x44, 0x7d, 0x86, 0x4f, 0x9d, - 0x3a, 0x92, 0x90, 0xf0, 0x29, 0x98, 0x37, 0x3b, 0x1e, 0x29, 0x07, 0xf4, 0x05, 0xb6, 0x23, 0xac, - 0x5e, 0x1d, 0xb8, 0x6e, 0x1d, 0x8f, 0x18, 0x61, 0x60, 0x34, 0x38, 0x80, 0x5e, 0x37, 0x99, 0x00, - 0x77, 0x41, 0xae, 0x10, 0x06, 0x31, 0x1b, 0x1b, 0xdc, 0x33, 0x5e, 0xc6, 0x56, 0xb3, 0x57, 0xdf, - 0xed, 0x23, 0x92, 0x12, 0x36, 0xc0, 0x82, 0x0f, 0xc1, 0xac, 0x19, 0x38, 0x87, 0x3e, 0xae, 0xb4, - 0xa2, 0xb0, 0x21, 0x26, 0xb7, 0xd5, 0x5e, 0x57, 0x5b, 0x16, 0x3b, 0x61, 0x4e, 0xa3, 0x45, 0xbd, - 0xf4, 0x09, 0xf7, 0xb1, 0xf0, 0x31, 0x98, 0x13, 0xfb, 0x29, 0x38, 0x31, 0x4e, 0x26, 0x1d, 0xe9, - 0xfd, 0x8b, 0xdd, 0x1b, 0x2e, 0x75, 0xeb, 0x28, 0x85, 0xa6, 0x17, 0x45, 0xac, 0x59, 0x54, 0xf7, - 0xe9, 0x84, 0x93, 0xb9, 0x28, 0x09, 0x9f, 0x27, 0x84, 0x5d, 0x94, 0x34, 0x85, 0xf6, 0x5e, 0x61, - 0xa9, 0x36, 0xdb, 0x8d, 0x86, 0x8f, 0xc5, 0x58, 0x23, 0x85, 0x32, 0x11, 0x89, 0x39, 0xa0, 0xaf, - 0x21, 0x18, 0x70, 0x4f, 0x2a, 0xa1, 0x85, 0xf0, 0xe4, 0xc4, 0x09, 0xea, 0xb1, 0xaa, 0x67, 0x27, - 0xf3, 0x7e, 0x09, 0x75, 0x05, 0x46, 0xae, 0xa0, 0x09, 0x8f, 0x9e, 0x0a, 0xb5, 0x83, 0x00, 0x47, - 0xe7, 0x5d, 0x80, 0x0f, 0x03, 0xd2, 0xa9, 0x22, 0xe6, 0x97, 0xfb, 0x40, 0x86, 0x42, 0x7f, 0x2a, - 0x98, 0x1d, 0x82, 0xa3, 0xc0, 0xf1, 0xcf, 0x65, 0xf8, 0x28, 0x20, 0x6d, 0x08, 0x0b, 0x84, 0x2c, - 0x34, 0x40, 0xa3, 0xe9, 0xad, 0x92, 0x08, 0xc7, 0xb1, 0x7d, 0xd6, 0xc2, 0xb1, 0x8a, 0xd9, 0xb1, - 0xa4, 0xf4, 0xc6, 0xcc, 0x69, 0x10, 0xea, 0xd5, 0x91, 0x8c, 0xa5, 0xb7, 0x94, 0x2f, 0xf7, 0xf0, - 0x59, 0xd5, 0xfb, 0x12, 0xb3, 0xfa, 0x3e, 0x29, 0x87, 0x56, 0x90, 0xe9, 0x98, 0x15, 0x7b, 0x5f, - 0xd2, 0x5b, 0x9a, 0x22, 0xd0, 0xa2, 0x98, 0x32, 0x58, 0x4e, 0x74, 0x84, 0xd5, 0x23, 0x26, 0x23, - 0xb5, 0xdb, 0x8c, 0x8c, 0xe1, 0x53, 0x98, 0x8e, 0x86, 0x70, 0xe1, 0x4b, 0x70, 0xa5, 0x6f, 0x6d, - 0x37, 0x1a, 0x5e, 0x07, 0x39, 0xc1, 0x11, 0x56, 0x9b, 0x4c, 0x53, 0xef, 0x75, 0xb5, 0xb5, 0x41, - 0x4d, 0x86, 0x33, 0x22, 0x0a, 0xd4, 0xd1, 0x50, 0x3e, 0xfc, 0x25, 0x58, 0x1d, 0x66, 0xb7, 0x3b, - 0x81, 0xea, 0x31, 0x69, 0x69, 0xee, 0x1e, 0x21, 0x6d, 0x90, 0x4e, 0xa0, 0xa3, 0x51, 0x32, 0xb4, - 0x59, 0x9d, 0xbb, 0xec, 0x4e, 0x50, 0x6e, 0xc5, 0xea, 0xaf, 0x98, 0xb2, 0x94, 0x52, 0x49, 0x99, - 0x74, 0x02, 0x23, 0x6c, 0xc5, 0x3a, 0xca, 0xb2, 0xfa, 0x69, 0xe1, 0xfd, 0x22, 0xe6, 0x8d, 0x73, - 0x32, 0x35, 0x83, 0x71, 0x1d, 0xde, 0x66, 0xe2, 0xf3, 0xb4, 0x08, 0x02, 0xfc, 0x14, 0xcc, 0x70, - 0xc3, 0x8b, 0x4a, 0x95, 0x77, 0xcc, 0x49, 0x79, 0xd2, 0x10, 0xec, 0x37, 0xf4, 0xeb, 0x7d, 0xa0, - 0xfe, 0x6b, 0x05, 0x5c, 0x46, 0xf8, 0x4d, 0x1b, 0xc7, 0x04, 0x6e, 0x81, 0x99, 0x72, 0x0b, 0x47, - 0x0e, 0xfd, 0x85, 0xcb, 0x3a, 0xcb, 0xc2, 0xfd, 0x9c, 0xe8, 0x4f, 0xe7, 0x76, 0xd4, 0x87, 0xc0, - 0x3b, 0xc9, 0x8c, 0xa4, 0xf2, 0x66, 0x36, 0x2f, 0xc0, 0xdc, 0x88, 0x92, 0x01, 0xea, 0x4e, 0xd2, - 0xbe, 0xd8, 0x4f, 0xfd, 0x3e, 0x8c, 0x1b, 0x91, 0x70, 0xea, 0x8f, 0xc1, 0x34, 0xc2, 0x71, 0x2b, - 0x0c, 0x62, 0x0c, 0x55, 0x70, 0xb9, 0xda, 0x76, 0x5d, 0x1c, 0xc7, 0x6c, 0x1f, 0xd3, 0x28, 0x59, - 0xc2, 0xab, 0x60, 0x8a, 0xce, 0xc1, 0xed, 0x98, 0x37, 0x2f, 0x24, 0x56, 0x9b, 0x7f, 0x57, 0xa4, - 0xcd, 0xc3, 0x05, 0x00, 0x4a, 0x21, 0xa9, 0x12, 0x27, 0x22, 0xb8, 0x9e, 0x1b, 0x83, 0x57, 0x40, - 0x4e, 0x4c, 0x79, 0xcc, 0x46, 0xdb, 0x6a, 0x4e, 0x81, 0x8b, 0x60, 0x16, 0xe1, 0xf8, 0xdc, 0x30, - 0x0e, 0xe7, 0xc0, 0xf4, 0x9e, 0xe7, 0xfb, 0x6c, 0x35, 0x41, 0xdd, 0xb4, 0x12, 0xe4, 0x23, 0xb7, - 0xe9, 0x9d, 0xe2, 0xdc, 0x25, 0xaa, 0xb2, 0x83, 0x63, 0x12, 0x85, 0x67, 0x14, 0xc1, 0xa6, 0xb5, - 0xdc, 0x24, 0xbc, 0x06, 0x56, 0xb6, 0x7d, 0xc7, 0x3d, 0x6e, 0x86, 0x3e, 0xfb, 0x55, 0x56, 0x09, - 0x23, 0x62, 0x77, 0x50, 0x27, 0x57, 0x87, 0x37, 0xc0, 0xea, 0x41, 0x70, 0x38, 0xd4, 0x89, 0xe1, - 0x0a, 0x58, 0x62, 0xf5, 0x2e, 0x65, 0x6e, 0xc0, 0x55, 0xb0, 0x7c, 0x10, 0xd4, 0x07, 0x1c, 0x47, - 0x9b, 0xff, 0x9e, 0xe6, 0xfb, 0x11, 0xa5, 0x96, 0xf2, 0xf7, 0x8a, 0x96, 0x55, 0x2b, 0x97, 0xcc, - 0xda, 0xb3, 0xb2, 0x65, 0x95, 0x5f, 0x99, 0x28, 0x37, 0x06, 0x7f, 0x00, 0x36, 0x06, 0xcc, 0xb5, - 0x83, 0x92, 0x5d, 0xb4, 0x6a, 0x36, 0x2a, 0x3e, 0x7f, 0x6e, 0xa2, 0x5a, 0xb5, 0x94, 0xaf, 0x54, - 0x77, 0xcb, 0x36, 0x0f, 0x01, 0x43, 0x5b, 0x66, 0x7e, 0xc7, 0x44, 0xb9, 0x71, 0x78, 0x17, 0xe8, - 0x92, 0x61, 0x14, 0x71, 0xe2, 0x9c, 0xf8, 0xe2, 0xa0, 0x8c, 0x0e, 0xf6, 0x73, 0x97, 0x58, 0xec, - 0xa8, 0x21, 0x6f, 0x59, 0xb9, 0x49, 0xb8, 0x09, 0xee, 0x6e, 0x5b, 0xf9, 0xc2, 0xde, 0x6e, 0xd9, - 0x32, 0x6b, 0x15, 0xd3, 0x44, 0xb5, 0x4a, 0x19, 0xd9, 0x35, 0xfb, 0x75, 0x0d, 0xbd, 0x4e, 0xef, - 0xb8, 0x0e, 0xf3, 0xe0, 0xb3, 0x0f, 0xc3, 0x8e, 0xda, 0x0d, 0x86, 0x1f, 0x83, 0xf5, 0xd1, 0x12, - 0xe2, 0x6c, 0x0d, 0xf8, 0x33, 0xf0, 0x93, 0xf7, 0xa1, 0x46, 0x7d, 0xe2, 0xe8, 0xe2, 0x4f, 0x88, - 0x28, 0x34, 0xe1, 0x2d, 0xf0, 0xd1, 0x68, 0x14, 0x0d, 0x8d, 0x07, 0xff, 0x0f, 0xe8, 0x3b, 0xa6, - 0x95, 0xff, 0xfc, 0xe2, 0xb0, 0xbc, 0x55, 0xe0, 0x16, 0xf8, 0x04, 0xe5, 0x4b, 0x3b, 0xe5, 0xfd, - 0xda, 0x07, 0xe0, 0xbf, 0x56, 0xe0, 0xcf, 0xc1, 0xc3, 0xf7, 0x03, 0x47, 0x1d, 0xf0, 0x1b, 0x05, - 0x9a, 0xe0, 0xe9, 0x07, 0x7f, 0x6f, 0x94, 0xcc, 0xb7, 0x0a, 0xbc, 0x05, 0x6e, 0x0e, 0xe7, 0x8b, - 0x3c, 0x7c, 0xa7, 0xc0, 0x0d, 0x70, 0xfb, 0xc2, 0x2f, 0x09, 0xe4, 0x1f, 0x14, 0xf8, 0x53, 0xf0, - 0xe0, 0x22, 0xc8, 0xa8, 0x6d, 0xfc, 0x51, 0x81, 0x4f, 0xc0, 0xa3, 0x0f, 0xf8, 0xc6, 0x28, 0x81, - 0x3f, 0x5d, 0x70, 0x0e, 0x91, 0xec, 0xef, 0xdf, 0x7f, 0x0e, 0x81, 0xfc, 0xb3, 0x02, 0xd7, 0xc0, - 0xb5, 0xe1, 0x10, 0x7a, 0x27, 0xfe, 0xa2, 0xc0, 0x3b, 0x60, 0xfd, 0x42, 0x25, 0x0a, 0xfb, 0xab, - 0x02, 0x55, 0xb0, 0x5c, 0x2a, 0xd7, 0x9e, 0xe5, 0x8b, 0x56, 0xed, 0x55, 0xd1, 0xde, 0xad, 0x55, - 0x6d, 0x64, 0x56, 0xab, 0xb9, 0xdf, 0x8f, 0xd3, 0xad, 0xa4, 0x3c, 0xa5, 0xb2, 0x70, 0xd6, 0x9e, - 0x95, 0x51, 0xcd, 0x2a, 0xbe, 0x34, 0x4b, 0x14, 0xf9, 0xd5, 0x38, 0x5c, 0x04, 0x80, 0xc2, 0x2a, - 0xe5, 0x62, 0xc9, 0xae, 0xe6, 0x7e, 0x3b, 0x01, 0xe7, 0xc1, 0xb4, 0xf9, 0xda, 0x36, 0x51, 0x29, - 0x6f, 0xe5, 0xfe, 0x33, 0xb1, 0x19, 0x02, 0xd0, 0x9f, 0x17, 0xe0, 0x14, 0x18, 0xdf, 0x7b, 0x99, - 0x1b, 0x83, 0x33, 0x60, 0xd2, 0x32, 0xf3, 0x55, 0x33, 0xa7, 0xc0, 0x65, 0xb0, 0x68, 0x5a, 0x66, - 0xc1, 0x2e, 0x96, 0x4b, 0x35, 0x74, 0x50, 0x2a, 0xb1, 0xba, 0x91, 0x03, 0x73, 0xaf, 0xf2, 0x76, - 0x61, 0x37, 0xb1, 0x4c, 0xd0, 0xfa, 0x64, 0x95, 0x0b, 0x7b, 0x35, 0x94, 0x2f, 0x98, 0x28, 0x31, - 0x5f, 0xa2, 0x40, 0x26, 0x94, 0x58, 0x26, 0xef, 0x3f, 0x01, 0x33, 0x76, 0xe4, 0x04, 0x71, 0x2b, - 0x8c, 0x08, 0xbc, 0x2f, 0x2f, 0x16, 0x44, 0xa7, 0x10, 0x0d, 0xea, 0xfa, 0xe2, 0xf9, 0x9a, 0xf7, - 0x09, 0x7d, 0x6c, 0x43, 0xf9, 0xa1, 0xb2, 0x7d, 0xe5, 0xed, 0x3f, 0xd7, 0xc6, 0xde, 0xbe, 0x5b, - 0x53, 0xbe, 0x7f, 0xb7, 0xa6, 0xfc, 0xe3, 0xdd, 0x9a, 0xf2, 0xbb, 0x7f, 0xad, 0x8d, 0x1d, 0x4e, - 0xb1, 0xff, 0x62, 0x3f, 0xf8, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x95, 0x9d, 0x8e, 0x65, 0x0e, - 0x17, 0x00, 0x00, + // 2404 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0xcb, 0x76, 0xdb, 0xc8, + 0xd1, 0x16, 0x44, 0x4b, 0x23, 0xb5, 0x6e, 0x54, 0xcb, 0xb2, 0x60, 0x7b, 0x46, 0x94, 0xe1, 0xf1, + 0xfc, 0x1a, 0xfd, 0x81, 0x9c, 0xd8, 0x73, 0x92, 0xd8, 0x73, 0xb1, 0x29, 0x0a, 0xb6, 0x18, 0x41, + 0x24, 0xdd, 0x84, 0x6c, 0xcf, 0x8a, 0x81, 0xc0, 0xa6, 0x88, 0x08, 0x02, 0x68, 0xa0, 0xa9, 0xa1, + 0xe6, 0x05, 0xb2, 0xcd, 0x65, 0x93, 0x87, 0xc8, 0x2c, 0xf3, 0x0e, 0x9e, 0x4b, 0x92, 0x49, 0xb2, + 0xcb, 0x82, 0x49, 0x9c, 0x93, 0x17, 0xe0, 0xc9, 0xe5, 0x64, 0x97, 0xd3, 0x17, 0x90, 0x0d, 0x90, + 0x94, 0xbd, 0x63, 0x57, 0x7d, 0xdf, 0x87, 0xee, 0xaa, 0x46, 0x55, 0x41, 0x02, 0x4b, 0x61, 0xcb, + 0x69, 0x1d, 0xdd, 0x0e, 0x5b, 0xce, 0x76, 0x2b, 0x0c, 0x48, 0x00, 0xa7, 0x98, 0xe1, 0x9a, 0x7e, + 0xec, 0x92, 0x66, 0xfb, 0x68, 0xdb, 0x09, 0x4e, 0x6f, 0x1f, 0x07, 0xc7, 0xc1, 0x6d, 0xe6, 0x3d, + 0x6a, 0x37, 0xd8, 0x8a, 0x2d, 0xd8, 0x2f, 0xce, 0xd2, 0xfe, 0xbb, 0x00, 0x2e, 0x19, 0xc4, 0xa9, + 0xc3, 0x9b, 0xe0, 0x52, 0xc9, 0x3e, 0xc5, 0xaa, 0xb2, 0xa1, 0x6c, 0xce, 0xee, 0x2c, 0xf5, 0xba, + 0xb9, 0xb9, 0x73, 0xfb, 0xd4, 0xbb, 0xaf, 0xf9, 0xf6, 0x29, 0xd6, 0x10, 0x73, 0x42, 0x1d, 0xbc, + 0xb5, 0x6b, 0x13, 0x7b, 0xd7, 0x0d, 0xd5, 0x49, 0x86, 0x5b, 0xe9, 0x75, 0x73, 0x4b, 0x1c, 0x57, + 0xb7, 0x89, 0xad, 0xd7, 0xdd, 0x50, 0x43, 0x31, 0x06, 0x6e, 0x81, 0xe9, 0x67, 0x79, 0x93, 0xa2, + 0x33, 0x0c, 0x0d, 0x7b, 0xdd, 0xdc, 0x22, 0x47, 0x7f, 0x66, 0x7b, 0x1c, 0x2c, 0x10, 0xb0, 0x0c, + 0x56, 0xf6, 0xb0, 0x1d, 0x92, 0x23, 0x6c, 0x93, 0xa2, 0x4f, 0x70, 0x78, 0x66, 0x7b, 0x07, 0x91, + 0x3a, 0xb7, 0xa1, 0x6c, 0x66, 0x76, 0xde, 0xe9, 0x75, 0x73, 0x57, 0x39, 0xb1, 0x19, 0x83, 0x74, + 0x57, 0xa0, 0x34, 0x34, 0x8a, 0x09, 0x8b, 0x60, 0xd9, 0xf0, 0xb0, 0x43, 0xdc, 0xc0, 0xb7, 0xdc, + 0x53, 0x1c, 0xb4, 0xc9, 0x41, 0xa4, 0xce, 0x33, 0xb9, 0xeb, 0xbd, 0x6e, 0x6e, 0x8d, 0xcb, 0x61, + 0x01, 0xd1, 0x09, 0xc7, 0x68, 0x68, 0x98, 0x05, 0x8b, 0x20, 0x6b, 0xba, 0x11, 0xc1, 0x7e, 0xc1, + 0x73, 0xb1, 0x4f, 0x0e, 0x91, 0x19, 0xa9, 0xab, 0x1b, 0x99, 0xcd, 0x59, 0x79, 0x63, 0x1e, 0x43, + 0xe8, 0x0e, 0x83, 0xe8, 0xed, 0xd0, 0x8b, 0x34, 0x34, 0x44, 0x83, 0x08, 0xac, 0xe4, 0xeb, 0x67, + 0x38, 0x24, 0x6e, 0x84, 0x25, 0xb5, 0x2b, 0x4c, 0x6d, 0xa3, 0xd7, 0xcd, 0xbd, 0xcd, 0xd5, 0xec, + 0x18, 0x94, 0x14, 0x1c, 0x45, 0x86, 0xf7, 0xc0, 0x02, 0x5f, 0xe5, 0xdb, 0x24, 0xb0, 0xcc, 0xaa, + 0xba, 0xb6, 0xa1, 0x6c, 0xce, 0xc8, 0xb9, 0xb1, 0xdb, 0x24, 0xd0, 0x09, 0x15, 0x48, 0x22, 0x61, + 0x01, 0x2c, 0x72, 0x43, 0x01, 0x87, 0xd4, 0xd8, 0x54, 0x55, 0xc6, 0x95, 0x22, 0x24, 0x9e, 0xef, + 0xe0, 0x90, 0xe8, 0x76, 0x9b, 0x34, 0x35, 0x94, 0xa2, 0xc0, 0x8f, 0x64, 0x91, 0x47, 0xae, 0x87, + 0xd5, 0xab, 0x2c, 0xdd, 0x97, 0x7b, 0xdd, 0x5c, 0x56, 0x88, 0x50, 0x76, 0xc3, 0xf5, 0x70, 0x82, + 0x4d, 0xb1, 0x83, 0xdd, 0xef, 0xe3, 0x73, 0x46, 0xbe, 0x96, 0xbe, 0x59, 0x27, 0xf8, 0x5c, 0x70, + 0x93, 0x48, 0x68, 0x82, 0x15, 0x6e, 0xb0, 0xc2, 0x76, 0x44, 0x70, 0xbd, 0x90, 0x67, 0x02, 0xd7, + 0x99, 0xc0, 0xb5, 0x5e, 0x37, 0x77, 0x85, 0x0b, 0x10, 0xee, 0xd6, 0x1d, 0x5b, 0xe8, 0x8c, 0xa2, + 0xd1, 0x58, 0xf0, 0x74, 0x55, 0x30, 0x0e, 0x59, 0x56, 0x72, 0x2c, 0x2b, 0x52, 0x2c, 0x44, 0x8e, + 0x5b, 0x18, 0x87, 0x22, 0x21, 0x29, 0x0a, 0xb4, 0xc0, 0x72, 0x3f, 0x45, 0x7d, 0x9d, 0x0d, 0xa6, + 0xf3, 0x5e, 0xaf, 0x9b, 0xd3, 0xb8, 0x8e, 0xeb, 0xbb, 0xc4, 0xb5, 0x3d, 0x7d, 0x90, 0x65, 0x49, + 0x72, 0x58, 0x00, 0xde, 0x07, 0x73, 0xf4, 0x77, 0x9c, 0xdf, 0x1b, 0x2c, 0x47, 0x6a, 0xaf, 0x9b, + 0xbb, 0xcc, 0xf5, 0x18, 0x7b, 0x90, 0x64, 0x19, 0x0c, 0x2b, 0x00, 0xd2, 0x65, 0x2a, 0xcd, 0x1a, + 0x93, 0x90, 0x2e, 0x1c, 0x93, 0x18, 0xce, 0xf5, 0x08, 0x2e, 0xfc, 0x18, 0xcc, 0x33, 0x6b, 0x9c, + 0xed, 0x9b, 0x2c, 0xde, 0x57, 0x7b, 0xdd, 0xdc, 0xaa, 0xac, 0x35, 0x48, 0x79, 0x02, 0x1e, 0x1f, + 0x26, 0x4e, 0xf7, 0xbb, 0x8c, 0x9d, 0x3e, 0xcc, 0x20, 0xe7, 0x32, 0x18, 0x1e, 0x80, 0x65, 0xba, + 0x4c, 0xe6, 0xfb, 0x16, 0x53, 0xc8, 0xf5, 0xba, 0xb9, 0xeb, 0x92, 0xc2, 0x50, 0xd2, 0x87, 0x99, + 0x70, 0x07, 0x2c, 0x16, 0x79, 0x2a, 0x0a, 0x1e, 0xb5, 0x87, 0xea, 0xfb, 0xe9, 0xbb, 0x13, 0xa7, + 0xca, 0xe1, 0x00, 0x0d, 0xa5, 0x18, 0xf4, 0x8d, 0x4e, 0x5a, 0xaa, 0xc4, 0x26, 0x58, 0xdd, 0x62, + 0x42, 0x52, 0x80, 0x53, 0x42, 0x7a, 0x44, 0x61, 0x1a, 0x1a, 0x45, 0x1e, 0xd6, 0xb4, 0x82, 0x13, + 0xec, 0xab, 0xff, 0xff, 0x3a, 0x4d, 0x42, 0x61, 0x43, 0x9a, 0x8c, 0x0c, 0x1f, 0x80, 0x85, 0xaa, + 0x6f, 0xb7, 0xa2, 0x66, 0x40, 0x0a, 0x41, 0xdb, 0x27, 0xea, 0x5d, 0x56, 0x0b, 0xa5, 0xb4, 0x45, + 0xc2, 0xad, 0x3b, 0xd4, 0xaf, 0xa1, 0x24, 0x1e, 0x9a, 0x60, 0xf9, 0x49, 0x3b, 0x20, 0xf6, 0x8e, + 0xed, 0x9c, 0x60, 0xbf, 0xbe, 0x73, 0x4e, 0x70, 0xa4, 0x7e, 0xc0, 0x44, 0xd6, 0x7b, 0xdd, 0xdc, + 0x35, 0x2e, 0xf2, 0x82, 0x42, 0xf4, 0x23, 0x8e, 0xd1, 0x8f, 0x28, 0x48, 0x43, 0xc3, 0x44, 0xda, + 0x4a, 0x2a, 0x21, 0x7e, 0x1a, 0x10, 0xac, 0x3e, 0x48, 0x97, 0xab, 0x56, 0x88, 0xf5, 0xb3, 0x80, + 0x46, 0x27, 0xc6, 0xc8, 0x11, 0x09, 0xc2, 0xb0, 0xdd, 0x22, 0x85, 0x26, 0x76, 0x4e, 0xd4, 0x87, + 0xe9, 0x6b, 0xdc, 0x8f, 0x08, 0x47, 0xe9, 0x0e, 0x85, 0x49, 0x11, 0x91, 0xc8, 0xda, 0x6f, 0x66, + 0xc0, 0xf4, 0x01, 0x3e, 0x3d, 0xc2, 0x21, 0xbd, 0xd2, 0xb4, 0x0b, 0x1a, 0x1d, 0xec, 0x54, 0x6c, + 0xd2, 0x14, 0x5d, 0x50, 0x8a, 0x0d, 0x26, 0x4e, 0x5d, 0xc7, 0x1d, 0xec, 0xe8, 0x2d, 0x9b, 0xbe, + 0x17, 0x09, 0x38, 0xbc, 0x0b, 0x66, 0xf3, 0xc7, 0xb4, 0xac, 0xd6, 0xeb, 0x21, 0x6b, 0x59, 0xb3, + 0x3b, 0xab, 0xbd, 0x6e, 0x6e, 0x59, 0x54, 0x5f, 0xea, 0xd2, 0xed, 0x7a, 0x3d, 0xd4, 0xd0, 0x00, + 0x47, 0xe3, 0xf9, 0xc8, 0x76, 0xbd, 0x56, 0xe0, 0xfa, 0x64, 0xcf, 0xb2, 0x2a, 0x8c, 0x3c, 0xcf, + 0xc8, 0x52, 0x3c, 0x1b, 0x31, 0x44, 0x6f, 0x12, 0xd2, 0x12, 0x2a, 0xc3, 0x44, 0x1a, 0xcf, 0x1d, + 0x3b, 0xc2, 0xb4, 0xd9, 0xe2, 0x74, 0x01, 0x3d, 0xb2, 0x23, 0x2c, 0x5a, 0xb3, 0xc0, 0xd0, 0x97, + 0x90, 0x9e, 0xc0, 0x0c, 0x8e, 0xd9, 0x79, 0x1b, 0xe9, 0x97, 0x90, 0x9d, 0xd7, 0x0b, 0x8e, 0xc5, + 0x71, 0x65, 0x30, 0xcc, 0x83, 0x05, 0xba, 0x14, 0x35, 0xd4, 0xac, 0xaa, 0x5f, 0x2a, 0x2c, 0x0d, + 0xd2, 0x5b, 0xc3, 0xe8, 0xa2, 0x9a, 0xf0, 0xbe, 0x93, 0x60, 0xc0, 0xc7, 0x60, 0x69, 0x60, 0xa8, + 0x84, 0x41, 0xe7, 0x5c, 0xfd, 0x8a, 0x8b, 0xbc, 0xdd, 0xeb, 0xe6, 0xd4, 0x61, 0x91, 0x16, 0xc5, + 0x68, 0x28, 0xcd, 0x8a, 0xf7, 0x42, 0x5f, 0x6d, 0x2e, 0xf3, 0xf5, 0xe8, 0xbd, 0xb0, 0x92, 0x20, + 0x44, 0x92, 0x0c, 0x5a, 0x20, 0x07, 0xaa, 0x86, 0x5f, 0x67, 0x71, 0x55, 0xbf, 0x51, 0xd2, 0x55, + 0x45, 0xde, 0x0e, 0x16, 0x30, 0x0d, 0x8d, 0xe0, 0xc2, 0xef, 0xf1, 0x99, 0x4a, 0xfd, 0x82, 0x0e, + 0x49, 0x73, 0x77, 0xe6, 0xb6, 0xd9, 0x68, 0xb6, 0x4d, 0x6d, 0xf2, 0x64, 0x45, 0x05, 0x35, 0xc4, + 0xc7, 0xaf, 0x5d, 0xb9, 0x87, 0xd2, 0xf9, 0x49, 0xfd, 0x39, 0x9f, 0x99, 0xc6, 0x74, 0x62, 0x3a, + 0x6d, 0x25, 0x7a, 0x29, 0xe5, 0xd0, 0x68, 0xf4, 0x3b, 0x24, 0x13, 0xf9, 0x45, 0x26, 0x5d, 0xcf, + 0x84, 0x08, 0xad, 0xaf, 0x5c, 0x23, 0xc9, 0x80, 0xd6, 0x50, 0x4f, 0x65, 0x42, 0xbf, 0xe4, 0x42, + 0x37, 0x7a, 0xdd, 0xdc, 0x3b, 0x09, 0x21, 0xa9, 0xcc, 0x72, 0xbd, 0x51, 0x74, 0xf8, 0xc9, 0xa0, + 0x65, 0x30, 0xb9, 0x7f, 0x65, 0xc6, 0xf7, 0x0c, 0x2e, 0x93, 0xc0, 0xc3, 0x0f, 0xfb, 0x3d, 0x83, + 0xd1, 0xff, 0x9d, 0x19, 0xdb, 0x34, 0x38, 0x5b, 0x46, 0xc3, 0x52, 0xaa, 0x69, 0x30, 0x89, 0xff, + 0x64, 0x5e, 0xd7, 0x35, 0xb8, 0xd2, 0x30, 0x55, 0xfb, 0xf3, 0x3c, 0x98, 0xb6, 0x30, 0x2b, 0xfe, + 0x0f, 0xc0, 0x02, 0xff, 0x55, 0xc2, 0xe4, 0xb3, 0x20, 0x3c, 0x19, 0x2e, 0x1c, 0x84, 0xb9, 0x75, + 0x9f, 0xfb, 0x35, 0x94, 0xc4, 0xc3, 0xef, 0x03, 0xc0, 0x0d, 0xec, 0xed, 0xe7, 0x43, 0xf5, 0x95, + 0x5e, 0x37, 0x07, 0x13, 0x6c, 0xfe, 0xd6, 0x4b, 0x48, 0x3a, 0xac, 0xec, 0x62, 0xcf, 0x3e, 0x37, + 0x6d, 0x82, 0x7d, 0xe7, 0x5c, 0x4c, 0xca, 0x0b, 0xf2, 0x75, 0xa9, 0x53, 0xbf, 0xee, 0x71, 0x80, + 0x7e, 0x4a, 0x87, 0x95, 0x24, 0x05, 0xfe, 0x08, 0x64, 0x93, 0x16, 0x74, 0xc6, 0x0a, 0xd0, 0x82, + 0x5c, 0x80, 0xd2, 0x32, 0x7a, 0x78, 0xa6, 0xa1, 0x21, 0x1e, 0xfc, 0x14, 0xac, 0x1e, 0xb6, 0xea, + 0x36, 0xc1, 0xf5, 0xd4, 0xbe, 0x16, 0x98, 0xe0, 0xcd, 0x5e, 0x37, 0x97, 0xe3, 0x82, 0x6d, 0x0e, + 0xd3, 0x87, 0xf7, 0x37, 0x5a, 0x81, 0xc6, 0x08, 0x05, 0x6d, 0xbf, 0x6e, 0xba, 0xa7, 0x2e, 0x51, + 0x57, 0x37, 0x94, 0xcd, 0x29, 0x39, 0x46, 0x21, 0xf5, 0xe9, 0x1e, 0x75, 0x6a, 0x48, 0x42, 0xc2, + 0x87, 0x60, 0xc1, 0xe8, 0xb8, 0xa4, 0xec, 0xd3, 0x6a, 0xd9, 0x0e, 0xb1, 0x7a, 0x65, 0xa8, 0x34, + 0x74, 0x5c, 0xa2, 0x07, 0xbe, 0xde, 0xe0, 0x00, 0x5a, 0x1a, 0x64, 0x02, 0xdc, 0x03, 0xd9, 0x42, + 0xe0, 0x47, 0x6c, 0xc4, 0x73, 0xce, 0x79, 0xcb, 0x59, 0x4b, 0x97, 0x29, 0x67, 0x80, 0x88, 0xdb, + 0xcd, 0x10, 0x0b, 0xde, 0x03, 0x73, 0x86, 0x6f, 0x1f, 0x79, 0xb8, 0xd2, 0x0a, 0x83, 0x86, 0x98, + 0xb2, 0xd7, 0x7a, 0xdd, 0xdc, 0x8a, 0xd8, 0x09, 0x73, 0xea, 0x2d, 0xea, 0xa5, 0xe5, 0x76, 0x80, + 0x85, 0x1f, 0x81, 0x79, 0xb1, 0x9f, 0x82, 0x1d, 0xe1, 0x78, 0x2a, 0x95, 0xee, 0xbe, 0xd8, 0xbd, + 0xee, 0x50, 0xb7, 0x86, 0x12, 0x68, 0x7a, 0x51, 0xc4, 0x9a, 0x45, 0xf5, 0x80, 0x4e, 0xa3, 0xa9, + 0x8b, 0x12, 0xf3, 0x79, 0x42, 0xd8, 0x45, 0x49, 0x52, 0xe8, 0x9c, 0x24, 0x2c, 0xd5, 0x66, 0xbb, + 0xd1, 0xf0, 0xb0, 0x18, 0x41, 0xa5, 0x50, 0xc6, 0x22, 0x11, 0x07, 0x0c, 0x34, 0x04, 0x03, 0xee, + 0x4b, 0xed, 0xae, 0x10, 0x9c, 0x9e, 0xda, 0x7e, 0x3d, 0x52, 0xb5, 0xf4, 0x57, 0xd4, 0xa0, 0xdd, + 0x39, 0x02, 0x23, 0x77, 0xbb, 0x98, 0x47, 0x4f, 0x85, 0xda, 0xbe, 0x8f, 0xc3, 0x7e, 0xc7, 0x7e, + 0x3f, 0x5d, 0x2d, 0x43, 0xe6, 0x97, 0x7b, 0x76, 0x8a, 0x42, 0x3f, 0xeb, 0x8c, 0x0e, 0xc1, 0xa1, + 0x6f, 0x7b, 0x7d, 0x19, 0x3e, 0xb6, 0x49, 0x1b, 0xc2, 0x02, 0x21, 0x0b, 0x0d, 0xd1, 0x68, 0x7a, + 0xab, 0x24, 0xc4, 0x51, 0x64, 0x9d, 0xb7, 0x70, 0xa4, 0x62, 0x76, 0x2c, 0x29, 0xbd, 0x11, 0x73, + 0xea, 0x84, 0x7a, 0x35, 0x24, 0x63, 0xe9, 0x2d, 0xe5, 0xcb, 0x7d, 0x7c, 0x5e, 0x75, 0x3f, 0xc7, + 0xac, 0x17, 0x4f, 0xc9, 0xa1, 0x15, 0x64, 0x5a, 0xdd, 0x22, 0xf7, 0x73, 0x7a, 0x4b, 0x13, 0x04, + 0xda, 0xc0, 0x12, 0x06, 0xd3, 0x0e, 0x8f, 0xb1, 0x7a, 0xcc, 0x64, 0xa4, 0xd1, 0x28, 0x25, 0xa3, + 0x7b, 0x14, 0xa6, 0xa1, 0x11, 0x5c, 0xf8, 0x14, 0x5c, 0x1e, 0x58, 0xdb, 0x8d, 0x86, 0xdb, 0x41, + 0xb6, 0x7f, 0x8c, 0xd5, 0x26, 0xd3, 0xd4, 0x7a, 0xdd, 0xdc, 0xfa, 0xb0, 0x26, 0xc3, 0xe9, 0x21, + 0x05, 0x6a, 0x68, 0x24, 0x1f, 0xfe, 0x18, 0xac, 0x8d, 0xb2, 0x5b, 0x1d, 0x5f, 0x75, 0x99, 0xb4, + 0xf4, 0x8d, 0x34, 0x46, 0x5a, 0x27, 0x1d, 0x5f, 0x43, 0xe3, 0x64, 0xe8, 0x60, 0xd1, 0x77, 0x59, + 0x1d, 0xbf, 0xdc, 0x8a, 0xd4, 0x9f, 0x30, 0x65, 0x29, 0xa5, 0x92, 0x32, 0xe9, 0xf8, 0x7a, 0xd0, + 0x8a, 0x34, 0x94, 0x66, 0x0d, 0xd2, 0xc2, 0xdb, 0x59, 0xc4, 0x87, 0x9c, 0xa9, 0xc4, 0xbc, 0xcc, + 0x75, 0x78, 0x23, 0x8c, 0xfa, 0x69, 0x11, 0x04, 0xf8, 0x01, 0x98, 0xe5, 0x86, 0x27, 0x95, 0x2a, + 0x9f, 0x6e, 0xa6, 0xe4, 0xa9, 0x50, 0xb0, 0x5f, 0xd0, 0xa7, 0x0f, 0x80, 0xda, 0x4f, 0x15, 0xf0, + 0x16, 0xc2, 0x2f, 0xda, 0x38, 0x22, 0x70, 0x1b, 0xcc, 0x96, 0x5b, 0x38, 0xb4, 0x89, 0x1b, 0xf8, + 0xac, 0xb3, 0x2c, 0xde, 0xc9, 0x8a, 0x59, 0xa2, 0x6f, 0x47, 0x03, 0x08, 0xbc, 0x15, 0xcf, 0xb3, + 0x2a, 0x1f, 0x3c, 0x16, 0x04, 0x98, 0x1b, 0x51, 0x3c, 0xec, 0xde, 0x8a, 0xdb, 0x17, 0xfb, 0xb3, + 0xcc, 0x00, 0xc6, 0x8d, 0x48, 0x38, 0x35, 0x07, 0xcc, 0x20, 0x1c, 0xb5, 0x02, 0x3f, 0xc2, 0x50, + 0x05, 0x6f, 0x55, 0xdb, 0x8e, 0x83, 0xa3, 0x88, 0xed, 0x63, 0x06, 0xc5, 0x4b, 0x78, 0x05, 0x4c, + 0xd3, 0x6f, 0x96, 0x76, 0xc4, 0x9b, 0x17, 0x12, 0x2b, 0x69, 0x2f, 0x99, 0x0b, 0xf6, 0xb2, 0xf5, + 0x17, 0x45, 0x3a, 0x23, 0x5c, 0x04, 0xa0, 0x14, 0x90, 0x2a, 0xb1, 0x43, 0x82, 0xeb, 0xd9, 0x09, + 0x78, 0x19, 0x64, 0xc5, 0xe0, 0xce, 0x6c, 0x74, 0x52, 0xca, 0x2a, 0x70, 0x09, 0xcc, 0x21, 0x1c, + 0xf5, 0x0d, 0x93, 0x70, 0x1e, 0xcc, 0xec, 0xbb, 0x9e, 0xc7, 0x56, 0x19, 0xea, 0xa6, 0x05, 0x23, + 0x1f, 0x3a, 0x4d, 0xf7, 0x0c, 0x67, 0x2f, 0x51, 0x95, 0x5d, 0x1c, 0x91, 0x30, 0x38, 0xa7, 0x08, + 0x36, 0x80, 0x67, 0xa7, 0xe0, 0x55, 0xb0, 0xba, 0xe3, 0xd9, 0xce, 0x49, 0x33, 0xf0, 0xd8, 0x87, + 0x76, 0x25, 0x08, 0x89, 0xd5, 0x41, 0x9d, 0x6c, 0x1d, 0x5e, 0x07, 0x6b, 0x87, 0xfe, 0xd1, 0x48, + 0x27, 0x86, 0xab, 0x60, 0x99, 0x95, 0xc5, 0x84, 0xb9, 0x01, 0xd7, 0xc0, 0xca, 0xa1, 0x5f, 0x1f, + 0x72, 0x1c, 0x6f, 0xfd, 0x63, 0x86, 0xef, 0x47, 0x54, 0x64, 0xca, 0xdf, 0x2f, 0x9a, 0x66, 0xad, + 0x5c, 0x32, 0x6a, 0x8f, 0xca, 0xa6, 0x59, 0x7e, 0x66, 0xa0, 0xec, 0x04, 0xfc, 0x0e, 0xd8, 0x1c, + 0x32, 0xd7, 0x0e, 0x4b, 0x56, 0xd1, 0xac, 0x59, 0xa8, 0xf8, 0xf8, 0xb1, 0x81, 0x6a, 0xd5, 0x52, + 0xbe, 0x52, 0xdd, 0x2b, 0x5b, 0x3c, 0x04, 0x0c, 0x6d, 0x1a, 0xf9, 0x5d, 0x03, 0x65, 0x27, 0xe1, + 0x7b, 0x40, 0x93, 0x0c, 0xe3, 0x88, 0x99, 0x3e, 0xf1, 0xc9, 0x61, 0x19, 0x1d, 0x1e, 0x64, 0x2f, + 0xb1, 0xd8, 0x51, 0x43, 0xde, 0x34, 0xb3, 0x53, 0x70, 0x0b, 0xbc, 0xb7, 0x63, 0xe6, 0x0b, 0xfb, + 0x7b, 0x65, 0xd3, 0xa8, 0x55, 0x0c, 0x03, 0xd5, 0x2a, 0x65, 0x64, 0xd5, 0xac, 0xe7, 0x35, 0xf4, + 0x3c, 0xb9, 0xe3, 0x3a, 0xcc, 0x83, 0x8f, 0xdf, 0x0c, 0x3b, 0x6e, 0x37, 0x18, 0xbe, 0x0b, 0x36, + 0xc6, 0x4b, 0x88, 0xb3, 0x35, 0xe0, 0x87, 0xe0, 0x07, 0xaf, 0x43, 0x8d, 0x7b, 0xc4, 0xf1, 0xc5, + 0x8f, 0x10, 0x51, 0x68, 0xc2, 0x1b, 0xe0, 0x9d, 0xf1, 0x28, 0x1a, 0x1a, 0x17, 0xfe, 0x1f, 0xd0, + 0x76, 0x0d, 0x33, 0xff, 0xe9, 0xc5, 0x61, 0x79, 0xa9, 0xc0, 0x6d, 0xf0, 0x3e, 0xca, 0x97, 0x76, + 0xcb, 0x07, 0xb5, 0x37, 0xc0, 0x7f, 0xa9, 0xc0, 0x4f, 0xc0, 0xbd, 0xd7, 0x03, 0xc7, 0x1d, 0xf0, + 0x2b, 0x05, 0x1a, 0xe0, 0xe1, 0x1b, 0x3f, 0x6f, 0x9c, 0xcc, 0xd7, 0x0a, 0xbc, 0x01, 0xde, 0x1e, + 0xcd, 0x17, 0x79, 0xf8, 0x46, 0x81, 0x9b, 0xe0, 0xe6, 0x85, 0x4f, 0x12, 0xc8, 0xdf, 0x2a, 0xf0, + 0x87, 0xe0, 0xee, 0x45, 0x90, 0x71, 0xdb, 0xf8, 0x9d, 0x02, 0x1f, 0x80, 0xfb, 0x6f, 0xf0, 0x8c, + 0x71, 0x02, 0xbf, 0xbf, 0xe0, 0x1c, 0x22, 0xd9, 0xdf, 0xbe, 0xfe, 0x1c, 0x02, 0xf9, 0x07, 0x05, + 0xae, 0x83, 0xab, 0xa3, 0x21, 0xf4, 0x4e, 0xfc, 0x51, 0x81, 0xb7, 0xc0, 0xc6, 0x85, 0x4a, 0x14, + 0xf6, 0x27, 0x05, 0xaa, 0x60, 0xa5, 0x54, 0xae, 0x3d, 0xca, 0x17, 0xcd, 0xda, 0xb3, 0xa2, 0xb5, + 0x57, 0xab, 0x5a, 0xc8, 0xa8, 0x56, 0xb3, 0xbf, 0x9e, 0xa4, 0x5b, 0x49, 0x78, 0x4a, 0x65, 0xe1, + 0xac, 0x3d, 0x2a, 0xa3, 0x9a, 0x59, 0x7c, 0x6a, 0x94, 0x28, 0xf2, 0x8b, 0x49, 0xb8, 0x04, 0x00, + 0x85, 0x55, 0xca, 0xc5, 0x92, 0x55, 0xcd, 0xfe, 0x2c, 0x03, 0x17, 0xc0, 0x8c, 0xf1, 0xdc, 0x32, + 0x50, 0x29, 0x6f, 0x66, 0xff, 0x99, 0xd9, 0x0a, 0x00, 0x18, 0x8c, 0x15, 0x70, 0x1a, 0x4c, 0xee, + 0x3f, 0xcd, 0x4e, 0xc0, 0x59, 0x30, 0x65, 0x1a, 0xf9, 0xaa, 0x91, 0x55, 0xe0, 0x0a, 0x58, 0x32, + 0x4c, 0xa3, 0x60, 0x15, 0xcb, 0xa5, 0x1a, 0x3a, 0x2c, 0x95, 0x58, 0xdd, 0xc8, 0x82, 0xf9, 0x67, + 0x79, 0xab, 0xb0, 0x17, 0x5b, 0x32, 0xb4, 0x3e, 0x99, 0xe5, 0xc2, 0x7e, 0x0d, 0xe5, 0x0b, 0x06, + 0x8a, 0xcd, 0x97, 0x28, 0x90, 0x09, 0xc5, 0x96, 0xa9, 0x3b, 0x0f, 0xc0, 0xac, 0x15, 0xda, 0x7e, + 0xd4, 0x0a, 0x42, 0x02, 0xef, 0xc8, 0x8b, 0x45, 0x51, 0xeb, 0x45, 0x1f, 0xbb, 0xb6, 0xd4, 0x5f, + 0xf3, 0x76, 0xa2, 0x4d, 0x6c, 0x2a, 0xdf, 0x55, 0x76, 0x2e, 0xbf, 0xfc, 0xdb, 0xfa, 0xc4, 0xcb, + 0x57, 0xeb, 0xca, 0xb7, 0xaf, 0xd6, 0x95, 0xbf, 0xbe, 0x5a, 0x57, 0x7e, 0xf5, 0xf7, 0xf5, 0x89, + 0xa3, 0x69, 0xf6, 0x8f, 0x89, 0xbb, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x8b, 0x82, 0xf1, + 0xe1, 0x18, 0x00, 0x00, } diff --git a/tools/functional-tester/rpcpb/rpc.proto b/tools/functional-tester/rpcpb/rpc.proto index 747966d25aa..5e869660abb 100644 --- a/tools/functional-tester/rpcpb/rpc.proto +++ b/tools/functional-tester/rpcpb/rpc.proto @@ -102,6 +102,20 @@ message Member { // Etcd defines etcd binary configuration flags. Etcd Etcd = 301 [(gogoproto.moretags) = "yaml:\"etcd\""]; + + // ClientCertData contains cert file contents from this member's etcd server. + string ClientCertData = 401 [(gogoproto.moretags) = "yaml:\"client-cert-data\""]; + // ClientKeyData contains key file contents from this member's etcd server. + string ClientKeyData = 402 [(gogoproto.moretags) = "yaml:\"client-key-data\""]; + // ClientTrustedCAData contains trusted CA file contents from this member's etcd server. + string ClientTrustedCAData = 403 [(gogoproto.moretags) = "yaml:\"client-trusted-ca-data\""]; + + // PeerCertData contains cert file contents from this member's etcd server. + string PeerCertData = 501 [(gogoproto.moretags) = "yaml:\"peer-cert-data\""]; + // PeerKeyData contains key file contents from this member's etcd server. + string PeerKeyData = 502 [(gogoproto.moretags) = "yaml:\"peer-key-data\""]; + // PeerTrustedCAData contains trusted CA file contents from this member's etcd server. + string PeerTrustedCAData = 503 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-data\""]; } enum FailureCase { @@ -216,14 +230,15 @@ message Tester { message Request { Operation Operation = 1; - + // Member contains the same Member object from tester configuration. Member Member = 2; + // Tester contains tester configuration. Tester Tester = 3; } message Response { bool Success = 1; string Status = 2; - - // TODO: support TLS + // Member contains the same Member object from tester request. + Member Member = 3; } From 161f09ab69bca2edf49adf3ef594dc870f3eea29 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 14:41:17 -0700 Subject: [PATCH 08/14] functional-tester/agent: responds with server-side TLS assets to tester Signed-off-by: Gyuho Lee --- tools/functional-tester/agent/handler.go | 140 +++++++++++++++++++++-- 1 file changed, 130 insertions(+), 10 deletions(-) diff --git a/tools/functional-tester/agent/handler.go b/tools/functional-tester/agent/handler.go index 4e316f5eca0..fd53ea52d00 100644 --- a/tools/functional-tester/agent/handler.go +++ b/tools/functional-tester/agent/handler.go @@ -17,9 +17,11 @@ package agent import ( "errors" "fmt" + "io/ioutil" "net/url" "os" "os/exec" + "path/filepath" "syscall" "time" @@ -72,6 +74,7 @@ func (srv *Server) handleInitialStartEtcd(req *rpcpb.Request) (*rpcpb.Response, return &rpcpb.Response{ Success: false, Status: fmt.Sprintf("%q is not valid; last server operation was %q", rpcpb.Operation_InitialStartEtcd.String(), srv.last.String()), + Member: req.Member, }, nil } @@ -84,16 +87,22 @@ func (srv *Server) handleInitialStartEtcd(req *rpcpb.Request) (*rpcpb.Response, } srv.lg.Info("created base directory", zap.String("path", srv.Member.BaseDir)) - if err = srv.createEtcdFile(); err != nil { + if err = srv.saveEtcdLogFile(); err != nil { return nil, err } + srv.creatEtcdCmd() - err = srv.startEtcdCmd() - if err != nil { + if err = srv.saveTLSAssets(); err != nil { + return nil, err + } + if err = srv.startEtcdCmd(); err != nil { return nil, err } srv.lg.Info("started etcd", zap.String("command-path", srv.etcdCmd.Path)) + if err = srv.loadAutoTLSAssets(); err != nil { + return nil, err + } // wait some time for etcd listener start // before setting up proxy @@ -104,7 +113,8 @@ func (srv *Server) handleInitialStartEtcd(req *rpcpb.Request) (*rpcpb.Response, return &rpcpb.Response{ Success: true, - Status: "successfully started etcd!", + Status: "start etcd PASS", + Member: srv.Member, }, nil } @@ -200,7 +210,7 @@ func (srv *Server) stopProxy() { } } -func (srv *Server) createEtcdFile() error { +func (srv *Server) saveEtcdLogFile() error { var err error srv.etcdLogFile, err = os.Create(srv.Member.EtcdLogPath) if err != nil { @@ -225,6 +235,110 @@ func (srv *Server) creatEtcdCmd() { srv.etcdCmd.Stderr = srv.etcdLogFile } +func (srv *Server) saveTLSAssets() error { + // if started with manual TLS, stores TLS assets + // from tester/client to disk before starting etcd process + // TODO: not implemented yet + if !srv.Member.Etcd.ClientAutoTLS { + if srv.Member.Etcd.ClientCertAuth { + return fmt.Errorf("manual TLS setup is not implemented yet, but Member.Etcd.ClientCertAuth is %v", srv.Member.Etcd.ClientCertAuth) + } + if srv.Member.Etcd.ClientCertFile != "" { + return fmt.Errorf("manual TLS setup is not implemented yet, but Member.Etcd.ClientCertFile is %q", srv.Member.Etcd.ClientCertFile) + } + if srv.Member.Etcd.ClientKeyFile != "" { + return fmt.Errorf("manual TLS setup is not implemented yet, but Member.Etcd.ClientKeyFile is %q", srv.Member.Etcd.ClientKeyFile) + } + if srv.Member.Etcd.ClientTrustedCAFile != "" { + return fmt.Errorf("manual TLS setup is not implemented yet, but Member.Etcd.ClientTrustedCAFile is %q", srv.Member.Etcd.ClientTrustedCAFile) + } + } + if !srv.Member.Etcd.PeerAutoTLS { + if srv.Member.Etcd.PeerClientCertAuth { + return fmt.Errorf("manual TLS setup is not implemented yet, but Member.Etcd.PeerClientCertAuth is %v", srv.Member.Etcd.PeerClientCertAuth) + } + if srv.Member.Etcd.PeerCertFile != "" { + return fmt.Errorf("manual TLS setup is not implemented yet, but Member.Etcd.PeerCertFile is %q", srv.Member.Etcd.PeerCertFile) + } + if srv.Member.Etcd.PeerKeyFile != "" { + return fmt.Errorf("manual TLS setup is not implemented yet, but Member.Etcd.PeerKeyFile is %q", srv.Member.Etcd.PeerKeyFile) + } + if srv.Member.Etcd.PeerTrustedCAFile != "" { + return fmt.Errorf("manual TLS setup is not implemented yet, but Member.Etcd.PeerTrustedCAFile is %q", srv.Member.Etcd.PeerTrustedCAFile) + } + } + + // TODO + return nil +} + +func (srv *Server) loadAutoTLSAssets() error { + // if started with auto TLS, sends back TLS assets to tester/client + if srv.Member.Etcd.ClientAutoTLS { + fdir := filepath.Join(srv.Member.Etcd.DataDir, "fixtures", "client") + + certPath := filepath.Join(fdir, "cert.pem") + if !fileutil.Exist(certPath) { + return fmt.Errorf("cannot find %q", certPath) + } + certData, err := ioutil.ReadFile(certPath) + if err != nil { + return fmt.Errorf("cannot read %q (%v)", certPath, err) + } + srv.Member.ClientCertData = string(certData) + + keyPath := filepath.Join(fdir, "key.pem") + if !fileutil.Exist(keyPath) { + return fmt.Errorf("cannot find %q", keyPath) + } + keyData, err := ioutil.ReadFile(keyPath) + if err != nil { + return fmt.Errorf("cannot read %q (%v)", keyPath, err) + } + srv.Member.ClientKeyData = string(keyData) + + srv.lg.Info( + "loaded client TLS assets", + zap.String("peer-cert-path", certPath), + zap.Int("peer-cert-length", len(certData)), + zap.String("peer-key-path", keyPath), + zap.Int("peer-key-length", len(keyData)), + ) + } + if srv.Member.Etcd.ClientAutoTLS { + fdir := filepath.Join(srv.Member.Etcd.DataDir, "fixtures", "peer") + + certPath := filepath.Join(fdir, "cert.pem") + if !fileutil.Exist(certPath) { + return fmt.Errorf("cannot find %q", certPath) + } + certData, err := ioutil.ReadFile(certPath) + if err != nil { + return fmt.Errorf("cannot read %q (%v)", certPath, err) + } + srv.Member.PeerCertData = string(certData) + + keyPath := filepath.Join(fdir, "key.pem") + if !fileutil.Exist(keyPath) { + return fmt.Errorf("cannot find %q", keyPath) + } + keyData, err := ioutil.ReadFile(keyPath) + if err != nil { + return fmt.Errorf("cannot read %q (%v)", keyPath, err) + } + srv.Member.PeerKeyData = string(keyData) + + srv.lg.Info( + "loaded peer TLS assets", + zap.String("peer-cert-path", certPath), + zap.Int("peer-cert-length", len(certData)), + zap.String("peer-key-path", keyPath), + zap.Int("peer-key-length", len(keyData)), + ) + } + return nil +} + // start but do not wait for it to complete func (srv *Server) startEtcdCmd() error { return srv.etcdCmd.Start() @@ -233,12 +347,17 @@ func (srv *Server) startEtcdCmd() error { func (srv *Server) handleRestartEtcd() (*rpcpb.Response, error) { srv.creatEtcdCmd() - srv.lg.Info("restarting etcd") - err := srv.startEtcdCmd() - if err != nil { + var err error + if err = srv.saveTLSAssets(); err != nil { + return nil, err + } + if err = srv.startEtcdCmd(); err != nil { return nil, err } srv.lg.Info("restarted etcd", zap.String("command-path", srv.etcdCmd.Path)) + if err = srv.loadAutoTLSAssets(); err != nil { + return nil, err + } // wait some time for etcd listener start // before setting up proxy @@ -251,7 +370,8 @@ func (srv *Server) handleRestartEtcd() (*rpcpb.Response, error) { return &rpcpb.Response{ Success: true, - Status: "successfully restarted etcd!", + Status: "restart etcd PASS", + Member: srv.Member, }, nil } @@ -293,7 +413,7 @@ func (srv *Server) handleFailArchive() (*rpcpb.Response, error) { } srv.lg.Info("archived data", zap.String("base-dir", srv.Member.BaseDir)) - if err = srv.createEtcdFile(); err != nil { + if err = srv.saveEtcdLogFile(); err != nil { return nil, err } From 8f71afd6e22662a3c029a72995ef4a163882b067 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 14:45:40 -0700 Subject: [PATCH 09/14] functional-tester/rpcpb: remove "EtcdClientTLS" field Signed-off-by: Gyuho Lee --- tools/functional-tester/rpcpb/rpc.pb.go | 364 +++++++++++------------- tools/functional-tester/rpcpb/rpc.proto | 12 +- 2 files changed, 168 insertions(+), 208 deletions(-) diff --git a/tools/functional-tester/rpcpb/rpc.pb.go b/tools/functional-tester/rpcpb/rpc.pb.go index e1edbfaf566..c3adb3029f3 100644 --- a/tools/functional-tester/rpcpb/rpc.pb.go +++ b/tools/functional-tester/rpcpb/rpc.pb.go @@ -274,18 +274,16 @@ type Member struct { BaseDir string `protobuf:"bytes,101,opt,name=BaseDir,proto3" json:"BaseDir,omitempty" yaml:"base-dir"` // EtcdLogPath is the log file to store current etcd server logs. EtcdLogPath string `protobuf:"bytes,102,opt,name=EtcdLogPath,proto3" json:"EtcdLogPath,omitempty" yaml:"etcd-log-path"` - // EtcdClientTLS is true when client traffic needs to be encrypted. - EtcdClientTLS bool `protobuf:"varint,201,opt,name=EtcdClientTLS,proto3" json:"EtcdClientTLS,omitempty" yaml:"etcd-client-tls"` // EtcdClientProxy is true when client traffic needs to be proxied. // If true, listen client URL port must be different than advertise client URL port. - EtcdClientProxy bool `protobuf:"varint,202,opt,name=EtcdClientProxy,proto3" json:"EtcdClientProxy,omitempty" yaml:"etcd-client-proxy"` + EtcdClientProxy bool `protobuf:"varint,201,opt,name=EtcdClientProxy,proto3" json:"EtcdClientProxy,omitempty" yaml:"etcd-client-proxy"` // EtcdPeerProxy is true when peer traffic needs to be proxied. // If true, listen peer URL port must be different than advertise peer URL port. - EtcdPeerProxy bool `protobuf:"varint,203,opt,name=EtcdPeerProxy,proto3" json:"EtcdPeerProxy,omitempty" yaml:"etcd-peer-proxy"` + EtcdPeerProxy bool `protobuf:"varint,202,opt,name=EtcdPeerProxy,proto3" json:"EtcdPeerProxy,omitempty" yaml:"etcd-peer-proxy"` // EtcdClientEndpoint is the etcd client endpoint. - EtcdClientEndpoint string `protobuf:"bytes,204,opt,name=EtcdClientEndpoint,proto3" json:"EtcdClientEndpoint,omitempty" yaml:"etcd-client-endpoint"` + EtcdClientEndpoint string `protobuf:"bytes,301,opt,name=EtcdClientEndpoint,proto3" json:"EtcdClientEndpoint,omitempty" yaml:"etcd-client-endpoint"` // Etcd defines etcd binary configuration flags. - Etcd *Etcd `protobuf:"bytes,301,opt,name=Etcd" json:"Etcd,omitempty" yaml:"etcd"` + Etcd *Etcd `protobuf:"bytes,302,opt,name=Etcd" json:"Etcd,omitempty" yaml:"etcd"` // ClientCertData contains cert file contents from this member's etcd server. ClientCertData string `protobuf:"bytes,401,opt,name=ClientCertData,proto3" json:"ClientCertData,omitempty" yaml:"client-cert-data"` // ClientKeyData contains key file contents from this member's etcd server. @@ -827,20 +825,8 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintRpc(dAtA, i, uint64(len(m.EtcdLogPath))) i += copy(dAtA[i:], m.EtcdLogPath) } - if m.EtcdClientTLS { - dAtA[i] = 0xc8 - i++ - dAtA[i] = 0xc - i++ - if m.EtcdClientTLS { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i++ - } if m.EtcdClientProxy { - dAtA[i] = 0xd0 + dAtA[i] = 0xc8 i++ dAtA[i] = 0xc i++ @@ -852,7 +838,7 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) { i++ } if m.EtcdPeerProxy { - dAtA[i] = 0xd8 + dAtA[i] = 0xd0 i++ dAtA[i] = 0xc i++ @@ -864,15 +850,15 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) { i++ } if len(m.EtcdClientEndpoint) > 0 { - dAtA[i] = 0xe2 + dAtA[i] = 0xea i++ - dAtA[i] = 0xc + dAtA[i] = 0x12 i++ i = encodeVarintRpc(dAtA, i, uint64(len(m.EtcdClientEndpoint))) i += copy(dAtA[i:], m.EtcdClientEndpoint) } if m.Etcd != nil { - dAtA[i] = 0xea + dAtA[i] = 0xf2 i++ dAtA[i] = 0x12 i++ @@ -1384,9 +1370,6 @@ func (m *Member) Size() (n int) { if l > 0 { n += 2 + l + sovRpc(uint64(l)) } - if m.EtcdClientTLS { - n += 3 - } if m.EtcdClientProxy { n += 3 } @@ -2448,26 +2431,6 @@ func (m *Member) Unmarshal(dAtA []byte) error { m.EtcdLogPath = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 201: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EtcdClientTLS", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRpc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.EtcdClientTLS = bool(v != 0) - case 202: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field EtcdClientProxy", wireType) } @@ -2487,7 +2450,7 @@ func (m *Member) Unmarshal(dAtA []byte) error { } } m.EtcdClientProxy = bool(v != 0) - case 203: + case 202: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field EtcdPeerProxy", wireType) } @@ -2507,7 +2470,7 @@ func (m *Member) Unmarshal(dAtA []byte) error { } } m.EtcdPeerProxy = bool(v != 0) - case 204: + case 301: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field EtcdClientEndpoint", wireType) } @@ -2536,7 +2499,7 @@ func (m *Member) Unmarshal(dAtA []byte) error { } m.EtcdClientEndpoint = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 301: + case 302: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Etcd", wireType) } @@ -3700,156 +3663,155 @@ var ( func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) } var fileDescriptorRpc = []byte{ - // 2404 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0xcb, 0x76, 0xdb, 0xc8, - 0xd1, 0x16, 0x44, 0x4b, 0x23, 0xb5, 0x6e, 0x54, 0xcb, 0xb2, 0x60, 0x7b, 0x46, 0x94, 0xe1, 0xf1, - 0xfc, 0x1a, 0xfd, 0x81, 0x9c, 0xd8, 0x73, 0x92, 0xd8, 0x73, 0xb1, 0x29, 0x0a, 0xb6, 0x18, 0x41, - 0x24, 0xdd, 0x84, 0x6c, 0xcf, 0x8a, 0x81, 0xc0, 0xa6, 0x88, 0x08, 0x02, 0x68, 0xa0, 0xa9, 0xa1, - 0xe6, 0x05, 0xb2, 0xcd, 0x65, 0x93, 0x87, 0xc8, 0x2c, 0xf3, 0x0e, 0x9e, 0x4b, 0x92, 0x49, 0xb2, - 0xcb, 0x82, 0x49, 0x9c, 0x93, 0x17, 0xe0, 0xc9, 0xe5, 0x64, 0x97, 0xd3, 0x17, 0x90, 0x0d, 0x90, - 0x94, 0xbd, 0x63, 0x57, 0x7d, 0xdf, 0x87, 0xee, 0xaa, 0x46, 0x55, 0x41, 0x02, 0x4b, 0x61, 0xcb, - 0x69, 0x1d, 0xdd, 0x0e, 0x5b, 0xce, 0x76, 0x2b, 0x0c, 0x48, 0x00, 0xa7, 0x98, 0xe1, 0x9a, 0x7e, - 0xec, 0x92, 0x66, 0xfb, 0x68, 0xdb, 0x09, 0x4e, 0x6f, 0x1f, 0x07, 0xc7, 0xc1, 0x6d, 0xe6, 0x3d, - 0x6a, 0x37, 0xd8, 0x8a, 0x2d, 0xd8, 0x2f, 0xce, 0xd2, 0xfe, 0xbb, 0x00, 0x2e, 0x19, 0xc4, 0xa9, - 0xc3, 0x9b, 0xe0, 0x52, 0xc9, 0x3e, 0xc5, 0xaa, 0xb2, 0xa1, 0x6c, 0xce, 0xee, 0x2c, 0xf5, 0xba, - 0xb9, 0xb9, 0x73, 0xfb, 0xd4, 0xbb, 0xaf, 0xf9, 0xf6, 0x29, 0xd6, 0x10, 0x73, 0x42, 0x1d, 0xbc, - 0xb5, 0x6b, 0x13, 0x7b, 0xd7, 0x0d, 0xd5, 0x49, 0x86, 0x5b, 0xe9, 0x75, 0x73, 0x4b, 0x1c, 0x57, - 0xb7, 0x89, 0xad, 0xd7, 0xdd, 0x50, 0x43, 0x31, 0x06, 0x6e, 0x81, 0xe9, 0x67, 0x79, 0x93, 0xa2, - 0x33, 0x0c, 0x0d, 0x7b, 0xdd, 0xdc, 0x22, 0x47, 0x7f, 0x66, 0x7b, 0x1c, 0x2c, 0x10, 0xb0, 0x0c, - 0x56, 0xf6, 0xb0, 0x1d, 0x92, 0x23, 0x6c, 0x93, 0xa2, 0x4f, 0x70, 0x78, 0x66, 0x7b, 0x07, 0x91, - 0x3a, 0xb7, 0xa1, 0x6c, 0x66, 0x76, 0xde, 0xe9, 0x75, 0x73, 0x57, 0x39, 0xb1, 0x19, 0x83, 0x74, - 0x57, 0xa0, 0x34, 0x34, 0x8a, 0x09, 0x8b, 0x60, 0xd9, 0xf0, 0xb0, 0x43, 0xdc, 0xc0, 0xb7, 0xdc, - 0x53, 0x1c, 0xb4, 0xc9, 0x41, 0xa4, 0xce, 0x33, 0xb9, 0xeb, 0xbd, 0x6e, 0x6e, 0x8d, 0xcb, 0x61, - 0x01, 0xd1, 0x09, 0xc7, 0x68, 0x68, 0x98, 0x05, 0x8b, 0x20, 0x6b, 0xba, 0x11, 0xc1, 0x7e, 0xc1, - 0x73, 0xb1, 0x4f, 0x0e, 0x91, 0x19, 0xa9, 0xab, 0x1b, 0x99, 0xcd, 0x59, 0x79, 0x63, 0x1e, 0x43, - 0xe8, 0x0e, 0x83, 0xe8, 0xed, 0xd0, 0x8b, 0x34, 0x34, 0x44, 0x83, 0x08, 0xac, 0xe4, 0xeb, 0x67, - 0x38, 0x24, 0x6e, 0x84, 0x25, 0xb5, 0x2b, 0x4c, 0x6d, 0xa3, 0xd7, 0xcd, 0xbd, 0xcd, 0xd5, 0xec, - 0x18, 0x94, 0x14, 0x1c, 0x45, 0x86, 0xf7, 0xc0, 0x02, 0x5f, 0xe5, 0xdb, 0x24, 0xb0, 0xcc, 0xaa, - 0xba, 0xb6, 0xa1, 0x6c, 0xce, 0xc8, 0xb9, 0xb1, 0xdb, 0x24, 0xd0, 0x09, 0x15, 0x48, 0x22, 0x61, - 0x01, 0x2c, 0x72, 0x43, 0x01, 0x87, 0xd4, 0xd8, 0x54, 0x55, 0xc6, 0x95, 0x22, 0x24, 0x9e, 0xef, - 0xe0, 0x90, 0xe8, 0x76, 0x9b, 0x34, 0x35, 0x94, 0xa2, 0xc0, 0x8f, 0x64, 0x91, 0x47, 0xae, 0x87, - 0xd5, 0xab, 0x2c, 0xdd, 0x97, 0x7b, 0xdd, 0x5c, 0x56, 0x88, 0x50, 0x76, 0xc3, 0xf5, 0x70, 0x82, - 0x4d, 0xb1, 0x83, 0xdd, 0xef, 0xe3, 0x73, 0x46, 0xbe, 0x96, 0xbe, 0x59, 0x27, 0xf8, 0x5c, 0x70, - 0x93, 0x48, 0x68, 0x82, 0x15, 0x6e, 0xb0, 0xc2, 0x76, 0x44, 0x70, 0xbd, 0x90, 0x67, 0x02, 0xd7, - 0x99, 0xc0, 0xb5, 0x5e, 0x37, 0x77, 0x85, 0x0b, 0x10, 0xee, 0xd6, 0x1d, 0x5b, 0xe8, 0x8c, 0xa2, - 0xd1, 0x58, 0xf0, 0x74, 0x55, 0x30, 0x0e, 0x59, 0x56, 0x72, 0x2c, 0x2b, 0x52, 0x2c, 0x44, 0x8e, - 0x5b, 0x18, 0x87, 0x22, 0x21, 0x29, 0x0a, 0xb4, 0xc0, 0x72, 0x3f, 0x45, 0x7d, 0x9d, 0x0d, 0xa6, - 0xf3, 0x5e, 0xaf, 0x9b, 0xd3, 0xb8, 0x8e, 0xeb, 0xbb, 0xc4, 0xb5, 0x3d, 0x7d, 0x90, 0x65, 0x49, - 0x72, 0x58, 0x00, 0xde, 0x07, 0x73, 0xf4, 0x77, 0x9c, 0xdf, 0x1b, 0x2c, 0x47, 0x6a, 0xaf, 0x9b, - 0xbb, 0xcc, 0xf5, 0x18, 0x7b, 0x90, 0x64, 0x19, 0x0c, 0x2b, 0x00, 0xd2, 0x65, 0x2a, 0xcd, 0x1a, - 0x93, 0x90, 0x2e, 0x1c, 0x93, 0x18, 0xce, 0xf5, 0x08, 0x2e, 0xfc, 0x18, 0xcc, 0x33, 0x6b, 0x9c, - 0xed, 0x9b, 0x2c, 0xde, 0x57, 0x7b, 0xdd, 0xdc, 0xaa, 0xac, 0x35, 0x48, 0x79, 0x02, 0x1e, 0x1f, - 0x26, 0x4e, 0xf7, 0xbb, 0x8c, 0x9d, 0x3e, 0xcc, 0x20, 0xe7, 0x32, 0x18, 0x1e, 0x80, 0x65, 0xba, - 0x4c, 0xe6, 0xfb, 0x16, 0x53, 0xc8, 0xf5, 0xba, 0xb9, 0xeb, 0x92, 0xc2, 0x50, 0xd2, 0x87, 0x99, - 0x70, 0x07, 0x2c, 0x16, 0x79, 0x2a, 0x0a, 0x1e, 0xb5, 0x87, 0xea, 0xfb, 0xe9, 0xbb, 0x13, 0xa7, - 0xca, 0xe1, 0x00, 0x0d, 0xa5, 0x18, 0xf4, 0x8d, 0x4e, 0x5a, 0xaa, 0xc4, 0x26, 0x58, 0xdd, 0x62, - 0x42, 0x52, 0x80, 0x53, 0x42, 0x7a, 0x44, 0x61, 0x1a, 0x1a, 0x45, 0x1e, 0xd6, 0xb4, 0x82, 0x13, - 0xec, 0xab, 0xff, 0xff, 0x3a, 0x4d, 0x42, 0x61, 0x43, 0x9a, 0x8c, 0x0c, 0x1f, 0x80, 0x85, 0xaa, - 0x6f, 0xb7, 0xa2, 0x66, 0x40, 0x0a, 0x41, 0xdb, 0x27, 0xea, 0x5d, 0x56, 0x0b, 0xa5, 0xb4, 0x45, - 0xc2, 0xad, 0x3b, 0xd4, 0xaf, 0xa1, 0x24, 0x1e, 0x9a, 0x60, 0xf9, 0x49, 0x3b, 0x20, 0xf6, 0x8e, - 0xed, 0x9c, 0x60, 0xbf, 0xbe, 0x73, 0x4e, 0x70, 0xa4, 0x7e, 0xc0, 0x44, 0xd6, 0x7b, 0xdd, 0xdc, - 0x35, 0x2e, 0xf2, 0x82, 0x42, 0xf4, 0x23, 0x8e, 0xd1, 0x8f, 0x28, 0x48, 0x43, 0xc3, 0x44, 0xda, - 0x4a, 0x2a, 0x21, 0x7e, 0x1a, 0x10, 0xac, 0x3e, 0x48, 0x97, 0xab, 0x56, 0x88, 0xf5, 0xb3, 0x80, - 0x46, 0x27, 0xc6, 0xc8, 0x11, 0x09, 0xc2, 0xb0, 0xdd, 0x22, 0x85, 0x26, 0x76, 0x4e, 0xd4, 0x87, - 0xe9, 0x6b, 0xdc, 0x8f, 0x08, 0x47, 0xe9, 0x0e, 0x85, 0x49, 0x11, 0x91, 0xc8, 0xda, 0x6f, 0x66, - 0xc0, 0xf4, 0x01, 0x3e, 0x3d, 0xc2, 0x21, 0xbd, 0xd2, 0xb4, 0x0b, 0x1a, 0x1d, 0xec, 0x54, 0x6c, - 0xd2, 0x14, 0x5d, 0x50, 0x8a, 0x0d, 0x26, 0x4e, 0x5d, 0xc7, 0x1d, 0xec, 0xe8, 0x2d, 0x9b, 0xbe, - 0x17, 0x09, 0x38, 0xbc, 0x0b, 0x66, 0xf3, 0xc7, 0xb4, 0xac, 0xd6, 0xeb, 0x21, 0x6b, 0x59, 0xb3, - 0x3b, 0xab, 0xbd, 0x6e, 0x6e, 0x59, 0x54, 0x5f, 0xea, 0xd2, 0xed, 0x7a, 0x3d, 0xd4, 0xd0, 0x00, - 0x47, 0xe3, 0xf9, 0xc8, 0x76, 0xbd, 0x56, 0xe0, 0xfa, 0x64, 0xcf, 0xb2, 0x2a, 0x8c, 0x3c, 0xcf, - 0xc8, 0x52, 0x3c, 0x1b, 0x31, 0x44, 0x6f, 0x12, 0xd2, 0x12, 0x2a, 0xc3, 0x44, 0x1a, 0xcf, 0x1d, - 0x3b, 0xc2, 0xb4, 0xd9, 0xe2, 0x74, 0x01, 0x3d, 0xb2, 0x23, 0x2c, 0x5a, 0xb3, 0xc0, 0xd0, 0x97, - 0x90, 0x9e, 0xc0, 0x0c, 0x8e, 0xd9, 0x79, 0x1b, 0xe9, 0x97, 0x90, 0x9d, 0xd7, 0x0b, 0x8e, 0xc5, - 0x71, 0x65, 0x30, 0xcc, 0x83, 0x05, 0xba, 0x14, 0x35, 0xd4, 0xac, 0xaa, 0x5f, 0x2a, 0x2c, 0x0d, - 0xd2, 0x5b, 0xc3, 0xe8, 0xa2, 0x9a, 0xf0, 0xbe, 0x93, 0x60, 0xc0, 0xc7, 0x60, 0x69, 0x60, 0xa8, - 0x84, 0x41, 0xe7, 0x5c, 0xfd, 0x8a, 0x8b, 0xbc, 0xdd, 0xeb, 0xe6, 0xd4, 0x61, 0x91, 0x16, 0xc5, - 0x68, 0x28, 0xcd, 0x8a, 0xf7, 0x42, 0x5f, 0x6d, 0x2e, 0xf3, 0xf5, 0xe8, 0xbd, 0xb0, 0x92, 0x20, - 0x44, 0x92, 0x0c, 0x5a, 0x20, 0x07, 0xaa, 0x86, 0x5f, 0x67, 0x71, 0x55, 0xbf, 0x51, 0xd2, 0x55, - 0x45, 0xde, 0x0e, 0x16, 0x30, 0x0d, 0x8d, 0xe0, 0xc2, 0xef, 0xf1, 0x99, 0x4a, 0xfd, 0x82, 0x0e, - 0x49, 0x73, 0x77, 0xe6, 0xb6, 0xd9, 0x68, 0xb6, 0x4d, 0x6d, 0xf2, 0x64, 0x45, 0x05, 0x35, 0xc4, - 0xc7, 0xaf, 0x5d, 0xb9, 0x87, 0xd2, 0xf9, 0x49, 0xfd, 0x39, 0x9f, 0x99, 0xc6, 0x74, 0x62, 0x3a, - 0x6d, 0x25, 0x7a, 0x29, 0xe5, 0xd0, 0x68, 0xf4, 0x3b, 0x24, 0x13, 0xf9, 0x45, 0x26, 0x5d, 0xcf, - 0x84, 0x08, 0xad, 0xaf, 0x5c, 0x23, 0xc9, 0x80, 0xd6, 0x50, 0x4f, 0x65, 0x42, 0xbf, 0xe4, 0x42, - 0x37, 0x7a, 0xdd, 0xdc, 0x3b, 0x09, 0x21, 0xa9, 0xcc, 0x72, 0xbd, 0x51, 0x74, 0xf8, 0xc9, 0xa0, - 0x65, 0x30, 0xb9, 0x7f, 0x65, 0xc6, 0xf7, 0x0c, 0x2e, 0x93, 0xc0, 0xc3, 0x0f, 0xfb, 0x3d, 0x83, - 0xd1, 0xff, 0x9d, 0x19, 0xdb, 0x34, 0x38, 0x5b, 0x46, 0xc3, 0x52, 0xaa, 0x69, 0x30, 0x89, 0xff, - 0x64, 0x5e, 0xd7, 0x35, 0xb8, 0xd2, 0x30, 0x55, 0xfb, 0xf3, 0x3c, 0x98, 0xb6, 0x30, 0x2b, 0xfe, - 0x0f, 0xc0, 0x02, 0xff, 0x55, 0xc2, 0xe4, 0xb3, 0x20, 0x3c, 0x19, 0x2e, 0x1c, 0x84, 0xb9, 0x75, - 0x9f, 0xfb, 0x35, 0x94, 0xc4, 0xc3, 0xef, 0x03, 0xc0, 0x0d, 0xec, 0xed, 0xe7, 0x43, 0xf5, 0x95, - 0x5e, 0x37, 0x07, 0x13, 0x6c, 0xfe, 0xd6, 0x4b, 0x48, 0x3a, 0xac, 0xec, 0x62, 0xcf, 0x3e, 0x37, - 0x6d, 0x82, 0x7d, 0xe7, 0x5c, 0x4c, 0xca, 0x0b, 0xf2, 0x75, 0xa9, 0x53, 0xbf, 0xee, 0x71, 0x80, - 0x7e, 0x4a, 0x87, 0x95, 0x24, 0x05, 0xfe, 0x08, 0x64, 0x93, 0x16, 0x74, 0xc6, 0x0a, 0xd0, 0x82, - 0x5c, 0x80, 0xd2, 0x32, 0x7a, 0x78, 0xa6, 0xa1, 0x21, 0x1e, 0xfc, 0x14, 0xac, 0x1e, 0xb6, 0xea, - 0x36, 0xc1, 0xf5, 0xd4, 0xbe, 0x16, 0x98, 0xe0, 0xcd, 0x5e, 0x37, 0x97, 0xe3, 0x82, 0x6d, 0x0e, - 0xd3, 0x87, 0xf7, 0x37, 0x5a, 0x81, 0xc6, 0x08, 0x05, 0x6d, 0xbf, 0x6e, 0xba, 0xa7, 0x2e, 0x51, - 0x57, 0x37, 0x94, 0xcd, 0x29, 0x39, 0x46, 0x21, 0xf5, 0xe9, 0x1e, 0x75, 0x6a, 0x48, 0x42, 0xc2, - 0x87, 0x60, 0xc1, 0xe8, 0xb8, 0xa4, 0xec, 0xd3, 0x6a, 0xd9, 0x0e, 0xb1, 0x7a, 0x65, 0xa8, 0x34, - 0x74, 0x5c, 0xa2, 0x07, 0xbe, 0xde, 0xe0, 0x00, 0x5a, 0x1a, 0x64, 0x02, 0xdc, 0x03, 0xd9, 0x42, - 0xe0, 0x47, 0x6c, 0xc4, 0x73, 0xce, 0x79, 0xcb, 0x59, 0x4b, 0x97, 0x29, 0x67, 0x80, 0x88, 0xdb, - 0xcd, 0x10, 0x0b, 0xde, 0x03, 0x73, 0x86, 0x6f, 0x1f, 0x79, 0xb8, 0xd2, 0x0a, 0x83, 0x86, 0x98, - 0xb2, 0xd7, 0x7a, 0xdd, 0xdc, 0x8a, 0xd8, 0x09, 0x73, 0xea, 0x2d, 0xea, 0xa5, 0xe5, 0x76, 0x80, - 0x85, 0x1f, 0x81, 0x79, 0xb1, 0x9f, 0x82, 0x1d, 0xe1, 0x78, 0x2a, 0x95, 0xee, 0xbe, 0xd8, 0xbd, - 0xee, 0x50, 0xb7, 0x86, 0x12, 0x68, 0x7a, 0x51, 0xc4, 0x9a, 0x45, 0xf5, 0x80, 0x4e, 0xa3, 0xa9, - 0x8b, 0x12, 0xf3, 0x79, 0x42, 0xd8, 0x45, 0x49, 0x52, 0xe8, 0x9c, 0x24, 0x2c, 0xd5, 0x66, 0xbb, - 0xd1, 0xf0, 0xb0, 0x18, 0x41, 0xa5, 0x50, 0xc6, 0x22, 0x11, 0x07, 0x0c, 0x34, 0x04, 0x03, 0xee, - 0x4b, 0xed, 0xae, 0x10, 0x9c, 0x9e, 0xda, 0x7e, 0x3d, 0x52, 0xb5, 0xf4, 0x57, 0xd4, 0xa0, 0xdd, - 0x39, 0x02, 0x23, 0x77, 0xbb, 0x98, 0x47, 0x4f, 0x85, 0xda, 0xbe, 0x8f, 0xc3, 0x7e, 0xc7, 0x7e, - 0x3f, 0x5d, 0x2d, 0x43, 0xe6, 0x97, 0x7b, 0x76, 0x8a, 0x42, 0x3f, 0xeb, 0x8c, 0x0e, 0xc1, 0xa1, - 0x6f, 0x7b, 0x7d, 0x19, 0x3e, 0xb6, 0x49, 0x1b, 0xc2, 0x02, 0x21, 0x0b, 0x0d, 0xd1, 0x68, 0x7a, - 0xab, 0x24, 0xc4, 0x51, 0x64, 0x9d, 0xb7, 0x70, 0xa4, 0x62, 0x76, 0x2c, 0x29, 0xbd, 0x11, 0x73, - 0xea, 0x84, 0x7a, 0x35, 0x24, 0x63, 0xe9, 0x2d, 0xe5, 0xcb, 0x7d, 0x7c, 0x5e, 0x75, 0x3f, 0xc7, - 0xac, 0x17, 0x4f, 0xc9, 0xa1, 0x15, 0x64, 0x5a, 0xdd, 0x22, 0xf7, 0x73, 0x7a, 0x4b, 0x13, 0x04, - 0xda, 0xc0, 0x12, 0x06, 0xd3, 0x0e, 0x8f, 0xb1, 0x7a, 0xcc, 0x64, 0xa4, 0xd1, 0x28, 0x25, 0xa3, - 0x7b, 0x14, 0xa6, 0xa1, 0x11, 0x5c, 0xf8, 0x14, 0x5c, 0x1e, 0x58, 0xdb, 0x8d, 0x86, 0xdb, 0x41, - 0xb6, 0x7f, 0x8c, 0xd5, 0x26, 0xd3, 0xd4, 0x7a, 0xdd, 0xdc, 0xfa, 0xb0, 0x26, 0xc3, 0xe9, 0x21, - 0x05, 0x6a, 0x68, 0x24, 0x1f, 0xfe, 0x18, 0xac, 0x8d, 0xb2, 0x5b, 0x1d, 0x5f, 0x75, 0x99, 0xb4, - 0xf4, 0x8d, 0x34, 0x46, 0x5a, 0x27, 0x1d, 0x5f, 0x43, 0xe3, 0x64, 0xe8, 0x60, 0xd1, 0x77, 0x59, - 0x1d, 0xbf, 0xdc, 0x8a, 0xd4, 0x9f, 0x30, 0x65, 0x29, 0xa5, 0x92, 0x32, 0xe9, 0xf8, 0x7a, 0xd0, - 0x8a, 0x34, 0x94, 0x66, 0x0d, 0xd2, 0xc2, 0xdb, 0x59, 0xc4, 0x87, 0x9c, 0xa9, 0xc4, 0xbc, 0xcc, - 0x75, 0x78, 0x23, 0x8c, 0xfa, 0x69, 0x11, 0x04, 0xf8, 0x01, 0x98, 0xe5, 0x86, 0x27, 0x95, 0x2a, - 0x9f, 0x6e, 0xa6, 0xe4, 0xa9, 0x50, 0xb0, 0x5f, 0xd0, 0xa7, 0x0f, 0x80, 0xda, 0x4f, 0x15, 0xf0, - 0x16, 0xc2, 0x2f, 0xda, 0x38, 0x22, 0x70, 0x1b, 0xcc, 0x96, 0x5b, 0x38, 0xb4, 0x89, 0x1b, 0xf8, - 0xac, 0xb3, 0x2c, 0xde, 0xc9, 0x8a, 0x59, 0xa2, 0x6f, 0x47, 0x03, 0x08, 0xbc, 0x15, 0xcf, 0xb3, - 0x2a, 0x1f, 0x3c, 0x16, 0x04, 0x98, 0x1b, 0x51, 0x3c, 0xec, 0xde, 0x8a, 0xdb, 0x17, 0xfb, 0xb3, - 0xcc, 0x00, 0xc6, 0x8d, 0x48, 0x38, 0x35, 0x07, 0xcc, 0x20, 0x1c, 0xb5, 0x02, 0x3f, 0xc2, 0x50, - 0x05, 0x6f, 0x55, 0xdb, 0x8e, 0x83, 0xa3, 0x88, 0xed, 0x63, 0x06, 0xc5, 0x4b, 0x78, 0x05, 0x4c, - 0xd3, 0x6f, 0x96, 0x76, 0xc4, 0x9b, 0x17, 0x12, 0x2b, 0x69, 0x2f, 0x99, 0x0b, 0xf6, 0xb2, 0xf5, - 0x17, 0x45, 0x3a, 0x23, 0x5c, 0x04, 0xa0, 0x14, 0x90, 0x2a, 0xb1, 0x43, 0x82, 0xeb, 0xd9, 0x09, - 0x78, 0x19, 0x64, 0xc5, 0xe0, 0xce, 0x6c, 0x74, 0x52, 0xca, 0x2a, 0x70, 0x09, 0xcc, 0x21, 0x1c, - 0xf5, 0x0d, 0x93, 0x70, 0x1e, 0xcc, 0xec, 0xbb, 0x9e, 0xc7, 0x56, 0x19, 0xea, 0xa6, 0x05, 0x23, - 0x1f, 0x3a, 0x4d, 0xf7, 0x0c, 0x67, 0x2f, 0x51, 0x95, 0x5d, 0x1c, 0x91, 0x30, 0x38, 0xa7, 0x08, - 0x36, 0x80, 0x67, 0xa7, 0xe0, 0x55, 0xb0, 0xba, 0xe3, 0xd9, 0xce, 0x49, 0x33, 0xf0, 0xd8, 0x87, - 0x76, 0x25, 0x08, 0x89, 0xd5, 0x41, 0x9d, 0x6c, 0x1d, 0x5e, 0x07, 0x6b, 0x87, 0xfe, 0xd1, 0x48, - 0x27, 0x86, 0xab, 0x60, 0x99, 0x95, 0xc5, 0x84, 0xb9, 0x01, 0xd7, 0xc0, 0xca, 0xa1, 0x5f, 0x1f, - 0x72, 0x1c, 0x6f, 0xfd, 0x63, 0x86, 0xef, 0x47, 0x54, 0x64, 0xca, 0xdf, 0x2f, 0x9a, 0x66, 0xad, - 0x5c, 0x32, 0x6a, 0x8f, 0xca, 0xa6, 0x59, 0x7e, 0x66, 0xa0, 0xec, 0x04, 0xfc, 0x0e, 0xd8, 0x1c, - 0x32, 0xd7, 0x0e, 0x4b, 0x56, 0xd1, 0xac, 0x59, 0xa8, 0xf8, 0xf8, 0xb1, 0x81, 0x6a, 0xd5, 0x52, - 0xbe, 0x52, 0xdd, 0x2b, 0x5b, 0x3c, 0x04, 0x0c, 0x6d, 0x1a, 0xf9, 0x5d, 0x03, 0x65, 0x27, 0xe1, - 0x7b, 0x40, 0x93, 0x0c, 0xe3, 0x88, 0x99, 0x3e, 0xf1, 0xc9, 0x61, 0x19, 0x1d, 0x1e, 0x64, 0x2f, - 0xb1, 0xd8, 0x51, 0x43, 0xde, 0x34, 0xb3, 0x53, 0x70, 0x0b, 0xbc, 0xb7, 0x63, 0xe6, 0x0b, 0xfb, - 0x7b, 0x65, 0xd3, 0xa8, 0x55, 0x0c, 0x03, 0xd5, 0x2a, 0x65, 0x64, 0xd5, 0xac, 0xe7, 0x35, 0xf4, - 0x3c, 0xb9, 0xe3, 0x3a, 0xcc, 0x83, 0x8f, 0xdf, 0x0c, 0x3b, 0x6e, 0x37, 0x18, 0xbe, 0x0b, 0x36, - 0xc6, 0x4b, 0x88, 0xb3, 0x35, 0xe0, 0x87, 0xe0, 0x07, 0xaf, 0x43, 0x8d, 0x7b, 0xc4, 0xf1, 0xc5, - 0x8f, 0x10, 0x51, 0x68, 0xc2, 0x1b, 0xe0, 0x9d, 0xf1, 0x28, 0x1a, 0x1a, 0x17, 0xfe, 0x1f, 0xd0, - 0x76, 0x0d, 0x33, 0xff, 0xe9, 0xc5, 0x61, 0x79, 0xa9, 0xc0, 0x6d, 0xf0, 0x3e, 0xca, 0x97, 0x76, - 0xcb, 0x07, 0xb5, 0x37, 0xc0, 0x7f, 0xa9, 0xc0, 0x4f, 0xc0, 0xbd, 0xd7, 0x03, 0xc7, 0x1d, 0xf0, - 0x2b, 0x05, 0x1a, 0xe0, 0xe1, 0x1b, 0x3f, 0x6f, 0x9c, 0xcc, 0xd7, 0x0a, 0xbc, 0x01, 0xde, 0x1e, - 0xcd, 0x17, 0x79, 0xf8, 0x46, 0x81, 0x9b, 0xe0, 0xe6, 0x85, 0x4f, 0x12, 0xc8, 0xdf, 0x2a, 0xf0, - 0x87, 0xe0, 0xee, 0x45, 0x90, 0x71, 0xdb, 0xf8, 0x9d, 0x02, 0x1f, 0x80, 0xfb, 0x6f, 0xf0, 0x8c, - 0x71, 0x02, 0xbf, 0xbf, 0xe0, 0x1c, 0x22, 0xd9, 0xdf, 0xbe, 0xfe, 0x1c, 0x02, 0xf9, 0x07, 0x05, - 0xae, 0x83, 0xab, 0xa3, 0x21, 0xf4, 0x4e, 0xfc, 0x51, 0x81, 0xb7, 0xc0, 0xc6, 0x85, 0x4a, 0x14, - 0xf6, 0x27, 0x05, 0xaa, 0x60, 0xa5, 0x54, 0xae, 0x3d, 0xca, 0x17, 0xcd, 0xda, 0xb3, 0xa2, 0xb5, - 0x57, 0xab, 0x5a, 0xc8, 0xa8, 0x56, 0xb3, 0xbf, 0x9e, 0xa4, 0x5b, 0x49, 0x78, 0x4a, 0x65, 0xe1, - 0xac, 0x3d, 0x2a, 0xa3, 0x9a, 0x59, 0x7c, 0x6a, 0x94, 0x28, 0xf2, 0x8b, 0x49, 0xb8, 0x04, 0x00, - 0x85, 0x55, 0xca, 0xc5, 0x92, 0x55, 0xcd, 0xfe, 0x2c, 0x03, 0x17, 0xc0, 0x8c, 0xf1, 0xdc, 0x32, - 0x50, 0x29, 0x6f, 0x66, 0xff, 0x99, 0xd9, 0x0a, 0x00, 0x18, 0x8c, 0x15, 0x70, 0x1a, 0x4c, 0xee, - 0x3f, 0xcd, 0x4e, 0xc0, 0x59, 0x30, 0x65, 0x1a, 0xf9, 0xaa, 0x91, 0x55, 0xe0, 0x0a, 0x58, 0x32, - 0x4c, 0xa3, 0x60, 0x15, 0xcb, 0xa5, 0x1a, 0x3a, 0x2c, 0x95, 0x58, 0xdd, 0xc8, 0x82, 0xf9, 0x67, - 0x79, 0xab, 0xb0, 0x17, 0x5b, 0x32, 0xb4, 0x3e, 0x99, 0xe5, 0xc2, 0x7e, 0x0d, 0xe5, 0x0b, 0x06, - 0x8a, 0xcd, 0x97, 0x28, 0x90, 0x09, 0xc5, 0x96, 0xa9, 0x3b, 0x0f, 0xc0, 0xac, 0x15, 0xda, 0x7e, - 0xd4, 0x0a, 0x42, 0x02, 0xef, 0xc8, 0x8b, 0x45, 0x51, 0xeb, 0x45, 0x1f, 0xbb, 0xb6, 0xd4, 0x5f, - 0xf3, 0x76, 0xa2, 0x4d, 0x6c, 0x2a, 0xdf, 0x55, 0x76, 0x2e, 0xbf, 0xfc, 0xdb, 0xfa, 0xc4, 0xcb, - 0x57, 0xeb, 0xca, 0xb7, 0xaf, 0xd6, 0x95, 0xbf, 0xbe, 0x5a, 0x57, 0x7e, 0xf5, 0xf7, 0xf5, 0x89, - 0xa3, 0x69, 0xf6, 0x8f, 0x89, 0xbb, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x8b, 0x82, 0xf1, - 0xe1, 0x18, 0x00, 0x00, + // 2390 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0xdb, 0x76, 0xdb, 0xc6, + 0xd5, 0x16, 0x44, 0x4b, 0x96, 0x46, 0x27, 0x6a, 0x64, 0x59, 0xb0, 0x9d, 0x08, 0x32, 0x1c, 0xe7, + 0x57, 0xf4, 0x17, 0x72, 0x6b, 0x67, 0xb5, 0xb5, 0x73, 0xb0, 0x29, 0x0a, 0xb6, 0x58, 0x41, 0x24, + 0x3d, 0x84, 0x6c, 0xe7, 0x8a, 0x85, 0xc0, 0xa1, 0x88, 0x0a, 0x02, 0x68, 0x60, 0xa8, 0x50, 0x79, + 0x81, 0xde, 0xf6, 0x70, 0xd3, 0x87, 0x68, 0xfa, 0x1c, 0x4e, 0x7a, 0x4a, 0xdb, 0xbb, 0x5e, 0xb0, + 0xad, 0xbb, 0xfa, 0x02, 0x5c, 0x3d, 0xac, 0xde, 0x75, 0xcd, 0x81, 0xe4, 0x00, 0x24, 0x65, 0xdf, + 0x69, 0xf6, 0xfe, 0xbe, 0x0f, 0x33, 0x7b, 0xcf, 0xec, 0xbd, 0x69, 0x83, 0xa5, 0xa8, 0xe9, 0x36, + 0x8f, 0xee, 0x44, 0x4d, 0x77, 0xbb, 0x19, 0x85, 0x24, 0x84, 0x53, 0xcc, 0x70, 0xdd, 0x38, 0xf6, + 0x48, 0xa3, 0x75, 0xb4, 0xed, 0x86, 0xa7, 0x77, 0x8e, 0xc3, 0xe3, 0xf0, 0x0e, 0xf3, 0x1e, 0xb5, + 0xea, 0x6c, 0xc5, 0x16, 0xec, 0x2f, 0xce, 0xd2, 0xff, 0xbb, 0x00, 0x2e, 0x99, 0xc4, 0xad, 0xc1, + 0x5b, 0xe0, 0x52, 0xd1, 0x39, 0xc5, 0xaa, 0xb2, 0xa1, 0x6c, 0xce, 0xee, 0x2c, 0x75, 0x3b, 0xda, + 0xdc, 0xb9, 0x73, 0xea, 0x3f, 0xd0, 0x03, 0xe7, 0x14, 0xeb, 0x88, 0x39, 0xa1, 0x01, 0x2e, 0xef, + 0x3a, 0xc4, 0xd9, 0xf5, 0x22, 0x75, 0x92, 0xe1, 0x56, 0xba, 0x1d, 0x6d, 0x89, 0xe3, 0x6a, 0x0e, + 0x71, 0x8c, 0x9a, 0x17, 0xe9, 0xa8, 0x87, 0x81, 0x5b, 0x60, 0xfa, 0x79, 0xce, 0xa2, 0xe8, 0x0c, + 0x43, 0xc3, 0x6e, 0x47, 0x5b, 0xe4, 0xe8, 0xcf, 0x1d, 0x9f, 0x83, 0x05, 0x02, 0x96, 0xc0, 0xca, + 0x1e, 0x76, 0x22, 0x72, 0x84, 0x1d, 0x52, 0x08, 0x08, 0x8e, 0xce, 0x1c, 0xff, 0x20, 0x56, 0xe7, + 0x36, 0x94, 0xcd, 0xcc, 0xce, 0xbb, 0xdd, 0x8e, 0x76, 0x8d, 0x13, 0x1b, 0x3d, 0x90, 0xe1, 0x09, + 0x94, 0x8e, 0x46, 0x31, 0x61, 0x01, 0x2c, 0x9b, 0x3e, 0x76, 0x89, 0x17, 0x06, 0xb6, 0x77, 0x8a, + 0xc3, 0x16, 0x39, 0x88, 0xd5, 0x79, 0x26, 0x77, 0xa3, 0xdb, 0xd1, 0xd6, 0xb8, 0x1c, 0x16, 0x10, + 0x83, 0x70, 0x8c, 0x8e, 0x86, 0x59, 0xb0, 0x00, 0xb2, 0x96, 0x17, 0x13, 0x1c, 0xe4, 0x7d, 0x0f, + 0x07, 0xe4, 0x10, 0x59, 0xb1, 0xba, 0xba, 0x91, 0xd9, 0x9c, 0x95, 0x37, 0xe6, 0x33, 0x84, 0xe1, + 0x32, 0x88, 0xd1, 0x8a, 0xfc, 0x58, 0x47, 0x43, 0x34, 0x88, 0xc0, 0x4a, 0xae, 0x76, 0x86, 0x23, + 0xe2, 0xc5, 0x58, 0x52, 0xbb, 0xca, 0xd4, 0x36, 0xba, 0x1d, 0xed, 0x1d, 0xae, 0xe6, 0xf4, 0x40, + 0x49, 0xc1, 0x51, 0x64, 0x78, 0x1f, 0x2c, 0xf0, 0x55, 0xae, 0x45, 0x42, 0xdb, 0xaa, 0xa8, 0x6b, + 0x1b, 0xca, 0xe6, 0x8c, 0x9c, 0x1b, 0xa7, 0x45, 0x42, 0x83, 0x50, 0x81, 0x24, 0x12, 0xe6, 0xc1, + 0x22, 0x37, 0xe4, 0x71, 0x44, 0x8d, 0x0d, 0x55, 0x65, 0x5c, 0x29, 0x42, 0xe2, 0xfb, 0x2e, 0x8e, + 0x88, 0xe1, 0xb4, 0x48, 0x43, 0x47, 0x29, 0x0a, 0xfc, 0x58, 0x16, 0x79, 0xec, 0xf9, 0x58, 0xbd, + 0xc6, 0xd2, 0x7d, 0xa5, 0xdb, 0xd1, 0xb2, 0x42, 0x84, 0xb2, 0xeb, 0x9e, 0x8f, 0x13, 0x6c, 0x8a, + 0x1d, 0xec, 0x7e, 0x1f, 0x9f, 0x33, 0xf2, 0xf5, 0xf4, 0xcd, 0x3a, 0xc1, 0xe7, 0x82, 0x9b, 0x44, + 0x42, 0x0b, 0xac, 0x70, 0x83, 0x1d, 0xb5, 0x62, 0x82, 0x6b, 0xf9, 0x1c, 0x13, 0xb8, 0xc1, 0x04, + 0xae, 0x77, 0x3b, 0xda, 0x55, 0x2e, 0x40, 0xb8, 0xdb, 0x70, 0x1d, 0xa1, 0x33, 0x8a, 0x46, 0x63, + 0xc1, 0xd3, 0x55, 0xc6, 0x38, 0x62, 0x59, 0xd1, 0x58, 0x56, 0xa4, 0x58, 0x88, 0x1c, 0x37, 0x31, + 0x8e, 0x44, 0x42, 0x52, 0x14, 0x68, 0x83, 0xe5, 0x7e, 0x8a, 0xfa, 0x3a, 0x1b, 0x4c, 0xe7, 0xfd, + 0x6e, 0x47, 0xd3, 0xb9, 0x8e, 0x17, 0x78, 0xc4, 0x73, 0x7c, 0x63, 0x90, 0x65, 0x49, 0x72, 0x58, + 0x00, 0x3e, 0x00, 0x73, 0xf4, 0xef, 0x5e, 0x7e, 0x6f, 0xb2, 0x1c, 0xa9, 0xdd, 0x8e, 0x76, 0x85, + 0xeb, 0x31, 0xf6, 0x20, 0xc9, 0x32, 0x18, 0x96, 0x01, 0xa4, 0xcb, 0x54, 0x9a, 0x75, 0x26, 0x21, + 0x5d, 0x38, 0x26, 0x31, 0x9c, 0xeb, 0x11, 0x5c, 0xf8, 0x09, 0x98, 0x67, 0xd6, 0x5e, 0xb6, 0x6f, + 0xb1, 0x78, 0x5f, 0xeb, 0x76, 0xb4, 0x55, 0x59, 0x6b, 0x90, 0xf2, 0x04, 0xbc, 0x77, 0x98, 0x5e, + 0xba, 0xdf, 0x63, 0xec, 0xf4, 0x61, 0x06, 0x39, 0x97, 0xc1, 0xf0, 0x00, 0x2c, 0xd3, 0x65, 0x32, + 0xdf, 0xb7, 0x99, 0x82, 0xd6, 0xed, 0x68, 0x37, 0x24, 0x85, 0xa1, 0xa4, 0x0f, 0x33, 0xe1, 0x0e, + 0x58, 0x2c, 0xf0, 0x54, 0xe4, 0x7d, 0x6a, 0x8f, 0xd4, 0x0f, 0xd2, 0x77, 0xa7, 0x97, 0x2a, 0x97, + 0x03, 0x74, 0x94, 0x62, 0xd0, 0x17, 0x9d, 0xb4, 0x54, 0x88, 0x43, 0xb0, 0xba, 0xc5, 0x84, 0xa4, + 0x00, 0xa7, 0x84, 0x8c, 0x98, 0xc2, 0x74, 0x34, 0x8a, 0x3c, 0xac, 0x69, 0x87, 0x27, 0x38, 0x50, + 0xff, 0xff, 0x4d, 0x9a, 0x84, 0xc2, 0x86, 0x34, 0x19, 0x19, 0x3e, 0x04, 0x0b, 0x95, 0xc0, 0x69, + 0xc6, 0x8d, 0x90, 0xe4, 0xc3, 0x56, 0x40, 0xd4, 0x7b, 0xac, 0x16, 0x4a, 0x69, 0x8b, 0x85, 0xdb, + 0x70, 0xa9, 0x5f, 0x47, 0x49, 0x3c, 0xb4, 0xc0, 0xf2, 0xd3, 0x56, 0x48, 0x9c, 0x1d, 0xc7, 0x3d, + 0xc1, 0x41, 0x6d, 0xe7, 0x9c, 0xe0, 0x58, 0xfd, 0x90, 0x89, 0xac, 0x77, 0x3b, 0xda, 0x75, 0x2e, + 0xf2, 0x92, 0x42, 0x8c, 0x23, 0x8e, 0x31, 0x8e, 0x28, 0x48, 0x47, 0xc3, 0x44, 0xda, 0x4a, 0xca, + 0x11, 0x7e, 0x16, 0x12, 0xac, 0x3e, 0x4c, 0x97, 0xab, 0x66, 0x84, 0x8d, 0xb3, 0x90, 0x46, 0xa7, + 0x87, 0x91, 0x23, 0x12, 0x46, 0x51, 0xab, 0x49, 0xf2, 0x0d, 0xec, 0x9e, 0xa8, 0x8f, 0xd2, 0xd7, + 0xb8, 0x1f, 0x11, 0x8e, 0x32, 0x5c, 0x0a, 0x93, 0x22, 0x22, 0x91, 0xf5, 0xee, 0x65, 0x30, 0x7d, + 0x80, 0x4f, 0x8f, 0x70, 0x44, 0xaf, 0x34, 0xed, 0x82, 0x66, 0x1b, 0xbb, 0x65, 0x87, 0x34, 0x44, + 0x17, 0x94, 0x62, 0x83, 0x89, 0x5b, 0x33, 0x70, 0x1b, 0xbb, 0x46, 0xd3, 0xa1, 0xef, 0x22, 0x01, + 0x87, 0xf7, 0xc0, 0x6c, 0xee, 0x98, 0x96, 0xd5, 0x5a, 0x2d, 0x62, 0x2d, 0x6b, 0x76, 0x67, 0xb5, + 0xdb, 0xd1, 0x96, 0x45, 0xf5, 0xa5, 0x2e, 0xc3, 0xa9, 0xd5, 0x22, 0x1d, 0x0d, 0x70, 0x34, 0x9e, + 0x8f, 0x1d, 0xcf, 0x6f, 0x86, 0x5e, 0x40, 0xf6, 0x6c, 0xbb, 0xcc, 0xc8, 0xf3, 0x8c, 0x2c, 0xc5, + 0xb3, 0xde, 0x83, 0x18, 0x0d, 0x42, 0x9a, 0x42, 0x65, 0x98, 0x48, 0xe3, 0xb9, 0xe3, 0xc4, 0x98, + 0x36, 0x5b, 0x9c, 0x2e, 0xa0, 0x47, 0x4e, 0x8c, 0x45, 0x6b, 0x16, 0x18, 0xfa, 0x08, 0xe9, 0x09, + 0xac, 0xf0, 0x98, 0x9d, 0xb7, 0x9e, 0x7e, 0x84, 0xec, 0xbc, 0x7e, 0x78, 0x2c, 0x8e, 0x2b, 0x83, + 0xe1, 0x13, 0xb0, 0x44, 0x97, 0xbc, 0x2a, 0x94, 0xa3, 0xb0, 0x7d, 0xae, 0x7e, 0xa5, 0xb0, 0x44, + 0xbc, 0xd3, 0xed, 0x68, 0xaa, 0x24, 0x20, 0xea, 0x49, 0x93, 0x62, 0x74, 0x94, 0x66, 0xc1, 0x1c, + 0x58, 0xa0, 0x26, 0xfa, 0x2e, 0xb9, 0xcc, 0xd7, 0x5c, 0x46, 0x7a, 0x7e, 0x4c, 0x86, 0xbd, 0x67, + 0x21, 0x92, 0x64, 0xd0, 0xea, 0x36, 0x50, 0x35, 0x83, 0x1a, 0x0b, 0x8a, 0xfa, 0xe5, 0x64, 0xba, + 0x24, 0xc8, 0xdb, 0xc1, 0x02, 0xa6, 0xa3, 0x11, 0x5c, 0xf8, 0x1d, 0x3e, 0x10, 0xa9, 0xbf, 0xa2, + 0x1a, 0x73, 0x77, 0xe7, 0xb6, 0xd9, 0x5c, 0xb5, 0x4d, 0x6d, 0xf2, 0x58, 0x44, 0x05, 0x75, 0xc4, + 0x67, 0xa7, 0x5d, 0xb9, 0x01, 0xd2, 0xe1, 0x47, 0xfd, 0x29, 0x1f, 0x78, 0xc6, 0xb4, 0x51, 0x3a, + 0x2a, 0x25, 0x1a, 0x21, 0xe5, 0xd0, 0x68, 0xf4, 0xdb, 0x1b, 0x13, 0xf9, 0x59, 0x26, 0x5d, 0x8c, + 0x84, 0x08, 0x2d, 0x8e, 0x5c, 0x23, 0xc9, 0x80, 0xf6, 0x50, 0x43, 0x64, 0x42, 0x3f, 0xe7, 0x42, + 0x37, 0xbb, 0x1d, 0xed, 0xdd, 0x84, 0x90, 0x54, 0x23, 0xb9, 0xde, 0x28, 0x3a, 0xfc, 0x74, 0x50, + 0xef, 0x99, 0xdc, 0xbf, 0x32, 0xe3, 0x0b, 0x3e, 0x97, 0x49, 0xe0, 0xe1, 0x47, 0xfd, 0x82, 0xcf, + 0xe8, 0xff, 0xce, 0x8c, 0xad, 0xf8, 0x9c, 0x2d, 0xa3, 0x61, 0x31, 0x55, 0xf1, 0x99, 0xc4, 0x7f, + 0x32, 0x6f, 0x2a, 0xf9, 0x5c, 0x69, 0x98, 0xaa, 0xff, 0x79, 0x1e, 0x4c, 0xdb, 0x98, 0x55, 0xee, + 0x87, 0x60, 0x81, 0xff, 0x55, 0xc4, 0xe4, 0xf3, 0x30, 0x3a, 0x19, 0x7e, 0xf5, 0x84, 0xb9, 0x8d, + 0x80, 0xfb, 0x75, 0x94, 0xc4, 0xc3, 0xef, 0x02, 0xc0, 0x0d, 0xec, 0xe9, 0xf2, 0x3b, 0x77, 0xb5, + 0xdb, 0xd1, 0x60, 0x82, 0xcd, 0x9f, 0xac, 0x84, 0xa4, 0x93, 0xc6, 0x2e, 0xf6, 0x9d, 0x73, 0xcb, + 0x21, 0x38, 0x70, 0xcf, 0xc5, 0x98, 0xbb, 0x20, 0x5f, 0x97, 0x1a, 0xf5, 0x1b, 0x3e, 0x07, 0x18, + 0xa7, 0x74, 0xd2, 0x48, 0x52, 0xe0, 0x0f, 0x40, 0x36, 0x69, 0x41, 0x67, 0xac, 0x7a, 0x2c, 0xc8, + 0xd5, 0x23, 0x2d, 0x63, 0x44, 0x67, 0x3a, 0x1a, 0xe2, 0xc1, 0xcf, 0xc0, 0xea, 0x61, 0xb3, 0xe6, + 0x10, 0x5c, 0x4b, 0xed, 0x6b, 0x81, 0x09, 0xde, 0xea, 0x76, 0x34, 0x8d, 0x0b, 0xb6, 0x38, 0xcc, + 0x18, 0xde, 0xdf, 0x68, 0x05, 0x1a, 0x23, 0x14, 0xb6, 0x82, 0x9a, 0xe5, 0x9d, 0x7a, 0x44, 0x5d, + 0xdd, 0x50, 0x36, 0xa7, 0xe4, 0x18, 0x45, 0xd4, 0x67, 0xf8, 0xd4, 0xa9, 0x23, 0x09, 0x09, 0x1f, + 0x81, 0x05, 0xb3, 0xed, 0x91, 0x52, 0x40, 0x4b, 0x5d, 0x2b, 0xc2, 0xea, 0xd5, 0xa1, 0xd2, 0xd0, + 0xf6, 0x88, 0x11, 0x06, 0x46, 0x9d, 0x03, 0x68, 0x69, 0x90, 0x09, 0x70, 0x0f, 0x64, 0xf3, 0x61, + 0x10, 0xb3, 0xf9, 0xcc, 0x3d, 0xe7, 0xfd, 0x62, 0x2d, 0x5d, 0xa6, 0xdc, 0x01, 0xa2, 0xd7, 0x2b, + 0x86, 0x58, 0xf0, 0x3e, 0x98, 0x33, 0x03, 0xe7, 0xc8, 0xc7, 0xe5, 0x66, 0x14, 0xd6, 0xc5, 0x88, + 0xbc, 0xd6, 0xed, 0x68, 0x2b, 0x62, 0x27, 0xcc, 0x69, 0x34, 0xa9, 0x97, 0xd6, 0xca, 0x01, 0x16, + 0x7e, 0x0c, 0xe6, 0xc5, 0x7e, 0xf2, 0x4e, 0x8c, 0x7b, 0x23, 0xa5, 0x74, 0xf7, 0xc5, 0xee, 0x0d, + 0x97, 0xba, 0x75, 0x94, 0x40, 0xd3, 0x8b, 0x22, 0xd6, 0x2c, 0xaa, 0x07, 0x74, 0x94, 0x4c, 0x5d, + 0x94, 0x1e, 0x9f, 0x27, 0x84, 0x5d, 0x94, 0x24, 0x85, 0x0e, 0x39, 0xc2, 0x52, 0x69, 0xb4, 0xea, + 0x75, 0x1f, 0x8b, 0xf9, 0x51, 0x0a, 0x65, 0x4f, 0x24, 0xe6, 0x80, 0x81, 0x86, 0x60, 0xc0, 0x7d, + 0xa9, 0x57, 0xe5, 0xc3, 0xd3, 0x53, 0x27, 0xa8, 0xc5, 0xaa, 0x9e, 0xfe, 0x09, 0x34, 0xe8, 0x55, + 0xae, 0xc0, 0xc8, 0xad, 0xaa, 0xc7, 0xa3, 0xa7, 0x42, 0xad, 0x20, 0xc0, 0x51, 0xbf, 0xdd, 0x7e, + 0x90, 0xae, 0x96, 0x11, 0xf3, 0xcb, 0x0d, 0x37, 0x45, 0xa1, 0xbf, 0xc9, 0xcc, 0x36, 0xc1, 0x51, + 0xe0, 0xf8, 0x7d, 0x19, 0x3e, 0x73, 0x49, 0x1b, 0xc2, 0x02, 0x21, 0x0b, 0x0d, 0xd1, 0x68, 0x7a, + 0x2b, 0x24, 0xc2, 0x71, 0x6c, 0x9f, 0x37, 0x71, 0xac, 0x62, 0x76, 0x2c, 0x29, 0xbd, 0x31, 0x73, + 0x1a, 0x84, 0x7a, 0x75, 0x24, 0x63, 0xe9, 0x2d, 0xe5, 0xcb, 0x7d, 0x7c, 0x5e, 0xf1, 0xbe, 0xc0, + 0xac, 0x91, 0x4e, 0xc9, 0xa1, 0x15, 0x64, 0x5a, 0xdd, 0x62, 0xef, 0x0b, 0x7a, 0x4b, 0x13, 0x04, + 0xda, 0xc0, 0x12, 0x06, 0xcb, 0x89, 0x8e, 0xb1, 0x7a, 0xcc, 0x64, 0xa4, 0xb9, 0x26, 0x25, 0x63, + 0xf8, 0x14, 0xa6, 0xa3, 0x11, 0x5c, 0xf8, 0x0c, 0x5c, 0x19, 0x58, 0x5b, 0xf5, 0xba, 0xd7, 0x46, + 0x4e, 0x70, 0x8c, 0xd5, 0x06, 0xd3, 0xd4, 0xbb, 0x1d, 0x6d, 0x7d, 0x58, 0x93, 0xe1, 0x8c, 0x88, + 0x02, 0x75, 0x34, 0x92, 0x0f, 0x7f, 0x08, 0xd6, 0x46, 0xd9, 0xed, 0x76, 0xa0, 0x7a, 0x4c, 0x5a, + 0xfa, 0x81, 0x33, 0x46, 0xda, 0x20, 0xed, 0x40, 0x47, 0xe3, 0x64, 0xe8, 0x60, 0xd1, 0x77, 0xd9, + 0xed, 0xa0, 0xd4, 0x8c, 0xd5, 0x1f, 0x31, 0x65, 0x29, 0xa5, 0x92, 0x32, 0x69, 0x07, 0x46, 0xd8, + 0x8c, 0x75, 0x94, 0x66, 0x0d, 0xd2, 0xc2, 0xdb, 0x59, 0xcc, 0xe7, 0x93, 0xa9, 0xc4, 0xb0, 0xcb, + 0x75, 0x78, 0x23, 0x8c, 0xfb, 0x69, 0x11, 0x04, 0xf8, 0x21, 0x98, 0xe5, 0x86, 0xa7, 0xe5, 0x0a, + 0x1f, 0x4b, 0xa6, 0xe4, 0x91, 0x4e, 0xb0, 0x5f, 0xd2, 0xaf, 0x0f, 0x80, 0xfa, 0x8f, 0x15, 0x70, + 0x19, 0xe1, 0x97, 0x2d, 0x1c, 0x13, 0xb8, 0x0d, 0x66, 0x4b, 0x4d, 0x1c, 0x39, 0xc4, 0x0b, 0x03, + 0xd6, 0x59, 0x16, 0xef, 0x66, 0xc5, 0x2c, 0xd1, 0xb7, 0xa3, 0x01, 0x04, 0xde, 0xee, 0x0d, 0xa3, + 0x2a, 0x1f, 0x3c, 0x16, 0x04, 0x98, 0x1b, 0x51, 0x6f, 0x52, 0xbd, 0xdd, 0x6b, 0x5f, 0xec, 0xdf, + 0x54, 0x06, 0x30, 0x6e, 0x44, 0xc2, 0xa9, 0xbb, 0x60, 0x06, 0xe1, 0xb8, 0x19, 0x06, 0x31, 0x86, + 0x2a, 0xb8, 0x5c, 0x69, 0xb9, 0x2e, 0x8e, 0x63, 0xb6, 0x8f, 0x19, 0xd4, 0x5b, 0xc2, 0xab, 0x60, + 0x9a, 0xfe, 0xe0, 0x68, 0xc5, 0xbc, 0x79, 0x21, 0xb1, 0x92, 0xf6, 0x92, 0xb9, 0x60, 0x2f, 0x5b, + 0x7f, 0x51, 0xa4, 0x33, 0xc2, 0x45, 0x00, 0x8a, 0x21, 0xa9, 0x10, 0x27, 0x22, 0xb8, 0x96, 0x9d, + 0x80, 0x57, 0x40, 0x56, 0x4c, 0xdd, 0xcc, 0x46, 0x27, 0xa5, 0xac, 0x02, 0x97, 0xc0, 0x1c, 0xc2, + 0x71, 0xdf, 0x30, 0x09, 0xe7, 0xc1, 0xcc, 0xbe, 0xe7, 0xfb, 0x6c, 0x95, 0xa1, 0x6e, 0x5a, 0x30, + 0x72, 0x91, 0xdb, 0xf0, 0xce, 0x70, 0xf6, 0x12, 0x55, 0xd9, 0xc5, 0x31, 0x89, 0xc2, 0x73, 0x8a, + 0x60, 0xd3, 0x73, 0x76, 0x0a, 0x5e, 0x03, 0xab, 0x3b, 0xbe, 0xe3, 0x9e, 0x34, 0x42, 0x9f, 0xfd, + 0x4a, 0x2e, 0x87, 0x11, 0xb1, 0xdb, 0xa8, 0x9d, 0xad, 0xc1, 0x1b, 0x60, 0xed, 0x30, 0x38, 0x1a, + 0xe9, 0xc4, 0x70, 0x15, 0x2c, 0xb3, 0xb2, 0x98, 0x30, 0xd7, 0xe1, 0x1a, 0x58, 0x39, 0x0c, 0x6a, + 0x43, 0x8e, 0xe3, 0xad, 0x7f, 0xcc, 0xf0, 0xfd, 0x88, 0x8a, 0x4c, 0xf9, 0xfb, 0x05, 0xcb, 0xaa, + 0x96, 0x8a, 0x66, 0xf5, 0x71, 0xc9, 0xb2, 0x4a, 0xcf, 0x4d, 0x94, 0x9d, 0x80, 0xdf, 0x02, 0x9b, + 0x43, 0xe6, 0xea, 0x61, 0xd1, 0x2e, 0x58, 0x55, 0x1b, 0x15, 0x9e, 0x3c, 0x31, 0x51, 0xb5, 0x52, + 0xcc, 0x95, 0x2b, 0x7b, 0x25, 0x9b, 0x87, 0x80, 0xa1, 0x2d, 0x33, 0xb7, 0x6b, 0xa2, 0xec, 0x24, + 0x7c, 0x1f, 0xe8, 0x92, 0x61, 0x1c, 0x31, 0xd3, 0x27, 0x3e, 0x3d, 0x2c, 0xa1, 0xc3, 0x83, 0xec, + 0x25, 0x16, 0x3b, 0x6a, 0xc8, 0x59, 0x56, 0x76, 0x0a, 0x6e, 0x81, 0xf7, 0x77, 0xac, 0x5c, 0x7e, + 0x7f, 0xaf, 0x64, 0x99, 0xd5, 0xb2, 0x69, 0xa2, 0x6a, 0xb9, 0x84, 0xec, 0xaa, 0xfd, 0xa2, 0x8a, + 0x5e, 0x24, 0x77, 0x5c, 0x83, 0x39, 0xf0, 0xc9, 0xdb, 0x61, 0xc7, 0xed, 0x06, 0xc3, 0xf7, 0xc0, + 0xc6, 0x78, 0x09, 0x71, 0xb6, 0x3a, 0xfc, 0x08, 0x7c, 0xef, 0x4d, 0xa8, 0x71, 0x9f, 0x38, 0xbe, + 0xf8, 0x13, 0x22, 0x0a, 0x0d, 0x78, 0x13, 0xbc, 0x3b, 0x1e, 0x45, 0x43, 0xe3, 0xc1, 0xff, 0x03, + 0xfa, 0xae, 0x69, 0xe5, 0x3e, 0xbb, 0x38, 0x2c, 0xaf, 0x14, 0xb8, 0x0d, 0x3e, 0x40, 0xb9, 0xe2, + 0x6e, 0xe9, 0xa0, 0xfa, 0x16, 0xf8, 0xaf, 0x14, 0xf8, 0x29, 0xb8, 0xff, 0x66, 0xe0, 0xb8, 0x03, + 0x7e, 0xad, 0x40, 0x13, 0x3c, 0x7a, 0xeb, 0xef, 0x8d, 0x93, 0xf9, 0xb5, 0x02, 0x6f, 0x82, 0x77, + 0x46, 0xf3, 0x45, 0x1e, 0x7e, 0xa3, 0xc0, 0x4d, 0x70, 0xeb, 0xc2, 0x2f, 0x09, 0xe4, 0x6f, 0x15, + 0xf8, 0x7d, 0x70, 0xef, 0x22, 0xc8, 0xb8, 0x6d, 0xfc, 0x4e, 0x81, 0x0f, 0xc1, 0x83, 0xb7, 0xf8, + 0xc6, 0x38, 0x81, 0xdf, 0x5f, 0x70, 0x0e, 0x91, 0xec, 0x6f, 0xde, 0x7c, 0x0e, 0x81, 0xfc, 0x83, + 0x02, 0xd7, 0xc1, 0xb5, 0xd1, 0x10, 0x7a, 0x27, 0xfe, 0xa8, 0xc0, 0xdb, 0x60, 0xe3, 0x42, 0x25, + 0x0a, 0xfb, 0x93, 0x02, 0x55, 0xb0, 0x52, 0x2c, 0x55, 0x1f, 0xe7, 0x0a, 0x56, 0xf5, 0x79, 0xc1, + 0xde, 0xab, 0x56, 0x6c, 0x64, 0x56, 0x2a, 0xd9, 0x5f, 0x4e, 0xd2, 0xad, 0x24, 0x3c, 0xc5, 0x92, + 0x70, 0x56, 0x1f, 0x97, 0x50, 0xd5, 0x2a, 0x3c, 0x33, 0x8b, 0x14, 0xf9, 0xe5, 0x24, 0x5c, 0x02, + 0x80, 0xc2, 0xca, 0xa5, 0x42, 0xd1, 0xae, 0x64, 0x7f, 0x92, 0x81, 0x0b, 0x60, 0xc6, 0x7c, 0x61, + 0x9b, 0xa8, 0x98, 0xb3, 0xb2, 0xff, 0xcc, 0x6c, 0x85, 0x00, 0x0c, 0xc6, 0x0a, 0x38, 0x0d, 0x26, + 0xf7, 0x9f, 0x65, 0x27, 0xe0, 0x2c, 0x98, 0xb2, 0xcc, 0x5c, 0xc5, 0xcc, 0x2a, 0x70, 0x05, 0x2c, + 0x99, 0x96, 0x99, 0xb7, 0x0b, 0xa5, 0x62, 0x15, 0x1d, 0x16, 0x8b, 0xac, 0x6e, 0x64, 0xc1, 0xfc, + 0xf3, 0x9c, 0x9d, 0xdf, 0xeb, 0x59, 0x32, 0xb4, 0x3e, 0x59, 0xa5, 0xfc, 0x7e, 0x15, 0xe5, 0xf2, + 0x26, 0xea, 0x99, 0x2f, 0x51, 0x20, 0x13, 0xea, 0x59, 0xa6, 0xee, 0x3e, 0x04, 0xb3, 0x76, 0xe4, + 0x04, 0x71, 0x33, 0x8c, 0x08, 0xbc, 0x2b, 0x2f, 0x16, 0x45, 0xad, 0x17, 0x7d, 0xec, 0xfa, 0x52, + 0x7f, 0xcd, 0xdb, 0x89, 0x3e, 0xb1, 0xa9, 0x7c, 0x5b, 0xd9, 0xb9, 0xf2, 0xea, 0x6f, 0xeb, 0x13, + 0xaf, 0x5e, 0xaf, 0x2b, 0xdf, 0xbc, 0x5e, 0x57, 0xfe, 0xfa, 0x7a, 0x5d, 0xf9, 0xc5, 0xdf, 0xd7, + 0x27, 0x8e, 0xa6, 0xd9, 0xff, 0x2a, 0xdc, 0xfb, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x90, + 0x3a, 0xc0, 0x9e, 0x18, 0x00, 0x00, } diff --git a/tools/functional-tester/rpcpb/rpc.proto b/tools/functional-tester/rpcpb/rpc.proto index 5e869660abb..258e264cf6f 100644 --- a/tools/functional-tester/rpcpb/rpc.proto +++ b/tools/functional-tester/rpcpb/rpc.proto @@ -89,19 +89,17 @@ message Member { // EtcdLogPath is the log file to store current etcd server logs. string EtcdLogPath = 102 [(gogoproto.moretags) = "yaml:\"etcd-log-path\""]; - // EtcdClientTLS is true when client traffic needs to be encrypted. - bool EtcdClientTLS = 201 [(gogoproto.moretags) = "yaml:\"etcd-client-tls\""]; // EtcdClientProxy is true when client traffic needs to be proxied. // If true, listen client URL port must be different than advertise client URL port. - bool EtcdClientProxy = 202 [(gogoproto.moretags) = "yaml:\"etcd-client-proxy\""]; + bool EtcdClientProxy = 201 [(gogoproto.moretags) = "yaml:\"etcd-client-proxy\""]; // EtcdPeerProxy is true when peer traffic needs to be proxied. // If true, listen peer URL port must be different than advertise peer URL port. - bool EtcdPeerProxy = 203 [(gogoproto.moretags) = "yaml:\"etcd-peer-proxy\""]; - // EtcdClientEndpoint is the etcd client endpoint. - string EtcdClientEndpoint = 204 [(gogoproto.moretags) = "yaml:\"etcd-client-endpoint\""]; + bool EtcdPeerProxy = 202 [(gogoproto.moretags) = "yaml:\"etcd-peer-proxy\""]; + // EtcdClientEndpoint is the etcd client endpoint. + string EtcdClientEndpoint = 301 [(gogoproto.moretags) = "yaml:\"etcd-client-endpoint\""]; // Etcd defines etcd binary configuration flags. - Etcd Etcd = 301 [(gogoproto.moretags) = "yaml:\"etcd\""]; + Etcd Etcd = 302 [(gogoproto.moretags) = "yaml:\"etcd\""]; // ClientCertData contains cert file contents from this member's etcd server. string ClientCertData = 401 [(gogoproto.moretags) = "yaml:\"client-cert-data\""]; From 63755e49fc8750b8c4b744c6fd3625d738ac9b02 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 15:08:05 -0700 Subject: [PATCH 10/14] functional-tester/rpcpb: add "etcd-client-tls", "tester-data-dir" Signed-off-by: Gyuho Lee --- tools/functional-tester/rpcpb/member.go | 74 ++- tools/functional-tester/rpcpb/rpc.pb.go | 629 +++++++++++++++++------- tools/functional-tester/rpcpb/rpc.proto | 19 +- 3 files changed, 536 insertions(+), 186 deletions(-) diff --git a/tools/functional-tester/rpcpb/member.go b/tools/functional-tester/rpcpb/member.go index a1b00f19bd5..e79c5bc8f7b 100644 --- a/tools/functional-tester/rpcpb/member.go +++ b/tools/functional-tester/rpcpb/member.go @@ -17,39 +17,85 @@ package rpcpb import ( "context" "fmt" + "net/url" "time" "github.com/coreos/etcd/clientv3" pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + "github.com/coreos/etcd/pkg/transport" grpc "google.golang.org/grpc" + "google.golang.org/grpc/credentials" ) -var dialOpts = []grpc.DialOption{ - grpc.WithInsecure(), - grpc.WithTimeout(5 * time.Second), - grpc.WithBlock(), -} - // DialEtcdGRPCServer creates a raw gRPC connection to an etcd member. func (m *Member) DialEtcdGRPCServer(opts ...grpc.DialOption) (*grpc.ClientConn, error) { - if m.EtcdClientTLS { - // TODO: support TLS - panic("client TLS not supported yet") - } - return grpc.Dial(m.EtcdClientEndpoint, append(dialOpts, opts...)...) + dialOpts := []grpc.DialOption{ + grpc.WithTimeout(5 * time.Second), + grpc.WithBlock(), + } + + secure := false + for _, cu := range m.Etcd.AdvertiseClientURLs { + u, err := url.Parse(cu) + if err != nil { + return nil, err + } + if u.Scheme == "https" { // TODO: handle unix + secure = true + } + } + + if secure { + // assume save TLS assets are already stord on disk + tlsInfo := transport.TLSInfo{ + CertFile: m.ClientCertPath, + KeyFile: m.ClientKeyPath, + TrustedCAFile: m.ClientTrustedCAPath, + } + tlsConfig, err := tlsInfo.ClientConfig() + if err != nil { + return nil, err + } + creds := credentials.NewTLS(tlsConfig) + dialOpts = append(dialOpts, grpc.WithTransportCredentials(creds)) + } else { + dialOpts = append(dialOpts, grpc.WithInsecure()) + } + dialOpts = append(dialOpts, opts...) + return grpc.Dial(m.EtcdClientEndpoint, dialOpts...) } // CreateEtcdClient creates a client from member. func (m *Member) CreateEtcdClient(opts ...grpc.DialOption) (*clientv3.Client, error) { + secure := false + for _, cu := range m.Etcd.AdvertiseClientURLs { + u, err := url.Parse(cu) + if err != nil { + return nil, err + } + if u.Scheme == "https" { // TODO: handle unix + secure = true + } + } + cfg := clientv3.Config{ Endpoints: []string{m.EtcdClientEndpoint}, DialTimeout: 5 * time.Second, DialOptions: opts, } - if m.EtcdClientTLS { - // TODO: support TLS - panic("client TLS not supported yet") + if secure { + // assume save TLS assets are already stord on disk + tlsInfo := transport.TLSInfo{ + CertFile: m.ClientCertPath, + KeyFile: m.ClientKeyPath, + TrustedCAFile: m.ClientTrustedCAPath, + } + tlsConfig, err := tlsInfo.ClientConfig() + if err != nil { + return nil, err + } + cfg.TLS = tlsConfig } return clientv3.New(cfg) } diff --git a/tools/functional-tester/rpcpb/rpc.pb.go b/tools/functional-tester/rpcpb/rpc.pb.go index c3adb3029f3..0f8a3a96842 100644 --- a/tools/functional-tester/rpcpb/rpc.pb.go +++ b/tools/functional-tester/rpcpb/rpc.pb.go @@ -286,16 +286,22 @@ type Member struct { Etcd *Etcd `protobuf:"bytes,302,opt,name=Etcd" json:"Etcd,omitempty" yaml:"etcd"` // ClientCertData contains cert file contents from this member's etcd server. ClientCertData string `protobuf:"bytes,401,opt,name=ClientCertData,proto3" json:"ClientCertData,omitempty" yaml:"client-cert-data"` + ClientCertPath string `protobuf:"bytes,402,opt,name=ClientCertPath,proto3" json:"ClientCertPath,omitempty" yaml:"client-cert-path"` // ClientKeyData contains key file contents from this member's etcd server. - ClientKeyData string `protobuf:"bytes,402,opt,name=ClientKeyData,proto3" json:"ClientKeyData,omitempty" yaml:"client-key-data"` + ClientKeyData string `protobuf:"bytes,403,opt,name=ClientKeyData,proto3" json:"ClientKeyData,omitempty" yaml:"client-key-data"` + ClientKeyPath string `protobuf:"bytes,404,opt,name=ClientKeyPath,proto3" json:"ClientKeyPath,omitempty" yaml:"client-key-path"` // ClientTrustedCAData contains trusted CA file contents from this member's etcd server. - ClientTrustedCAData string `protobuf:"bytes,403,opt,name=ClientTrustedCAData,proto3" json:"ClientTrustedCAData,omitempty" yaml:"client-trusted-ca-data"` + ClientTrustedCAData string `protobuf:"bytes,405,opt,name=ClientTrustedCAData,proto3" json:"ClientTrustedCAData,omitempty" yaml:"client-trusted-ca-data"` + ClientTrustedCAPath string `protobuf:"bytes,406,opt,name=ClientTrustedCAPath,proto3" json:"ClientTrustedCAPath,omitempty" yaml:"client-trusted-ca-path"` // PeerCertData contains cert file contents from this member's etcd server. PeerCertData string `protobuf:"bytes,501,opt,name=PeerCertData,proto3" json:"PeerCertData,omitempty" yaml:"peer-cert-data"` + PeerCertPath string `protobuf:"bytes,502,opt,name=PeerCertPath,proto3" json:"PeerCertPath,omitempty" yaml:"peer-cert-path"` // PeerKeyData contains key file contents from this member's etcd server. - PeerKeyData string `protobuf:"bytes,502,opt,name=PeerKeyData,proto3" json:"PeerKeyData,omitempty" yaml:"peer-key-data"` + PeerKeyData string `protobuf:"bytes,503,opt,name=PeerKeyData,proto3" json:"PeerKeyData,omitempty" yaml:"peer-key-data"` + PeerKeyPath string `protobuf:"bytes,504,opt,name=PeerKeyPath,proto3" json:"PeerKeyPath,omitempty" yaml:"peer-key-path"` // PeerTrustedCAData contains trusted CA file contents from this member's etcd server. - PeerTrustedCAData string `protobuf:"bytes,503,opt,name=PeerTrustedCAData,proto3" json:"PeerTrustedCAData,omitempty" yaml:"peer-trusted-ca-data"` + PeerTrustedCAData string `protobuf:"bytes,505,opt,name=PeerTrustedCAData,proto3" json:"PeerTrustedCAData,omitempty" yaml:"peer-trusted-ca-data"` + PeerTrustedCAPath string `protobuf:"bytes,506,opt,name=PeerTrustedCAPath,proto3" json:"PeerTrustedCAPath,omitempty" yaml:"peer-trusted-ca-path"` } func (m *Member) Reset() { *m = Member{} } @@ -304,8 +310,9 @@ func (*Member) ProtoMessage() {} func (*Member) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1} } type Tester struct { - TesterNetwork string `protobuf:"bytes,1,opt,name=TesterNetwork,proto3" json:"TesterNetwork,omitempty" yaml:"tester-network"` - TesterAddr string `protobuf:"bytes,2,opt,name=TesterAddr,proto3" json:"TesterAddr,omitempty" yaml:"tester-addr"` + TesterDataDir string `protobuf:"bytes,1,opt,name=TesterDataDir,proto3" json:"TesterDataDir,omitempty" yaml:"tester-data-dir"` + TesterNetwork string `protobuf:"bytes,2,opt,name=TesterNetwork,proto3" json:"TesterNetwork,omitempty" yaml:"tester-network"` + TesterAddr string `protobuf:"bytes,3,opt,name=TesterAddr,proto3" json:"TesterAddr,omitempty" yaml:"tester-addr"` // DelayLatencyMsRv is the delay latency in milliseconds, // to inject to simulated slow network. DelayLatencyMs uint32 `protobuf:"varint,11,opt,name=DelayLatencyMs,proto3" json:"DelayLatencyMs,omitempty" yaml:"delay-latency-ms"` @@ -877,22 +884,46 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientCertData))) i += copy(dAtA[i:], m.ClientCertData) } - if len(m.ClientKeyData) > 0 { + if len(m.ClientCertPath) > 0 { dAtA[i] = 0x92 i++ dAtA[i] = 0x19 i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientCertPath))) + i += copy(dAtA[i:], m.ClientCertPath) + } + if len(m.ClientKeyData) > 0 { + dAtA[i] = 0x9a + i++ + dAtA[i] = 0x19 + i++ i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientKeyData))) i += copy(dAtA[i:], m.ClientKeyData) } + if len(m.ClientKeyPath) > 0 { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x19 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientKeyPath))) + i += copy(dAtA[i:], m.ClientKeyPath) + } if len(m.ClientTrustedCAData) > 0 { - dAtA[i] = 0x9a + dAtA[i] = 0xaa i++ dAtA[i] = 0x19 i++ i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientTrustedCAData))) i += copy(dAtA[i:], m.ClientTrustedCAData) } + if len(m.ClientTrustedCAPath) > 0 { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x19 + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.ClientTrustedCAPath))) + i += copy(dAtA[i:], m.ClientTrustedCAPath) + } if len(m.PeerCertData) > 0 { dAtA[i] = 0xaa i++ @@ -901,22 +932,46 @@ func (m *Member) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerCertData))) i += copy(dAtA[i:], m.PeerCertData) } - if len(m.PeerKeyData) > 0 { + if len(m.PeerCertPath) > 0 { dAtA[i] = 0xb2 i++ dAtA[i] = 0x1f i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerCertPath))) + i += copy(dAtA[i:], m.PeerCertPath) + } + if len(m.PeerKeyData) > 0 { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x1f + i++ i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerKeyData))) i += copy(dAtA[i:], m.PeerKeyData) } + if len(m.PeerKeyPath) > 0 { + dAtA[i] = 0xc2 + i++ + dAtA[i] = 0x1f + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerKeyPath))) + i += copy(dAtA[i:], m.PeerKeyPath) + } if len(m.PeerTrustedCAData) > 0 { - dAtA[i] = 0xba + dAtA[i] = 0xca i++ dAtA[i] = 0x1f i++ i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerTrustedCAData))) i += copy(dAtA[i:], m.PeerTrustedCAData) } + if len(m.PeerTrustedCAPath) > 0 { + dAtA[i] = 0xd2 + i++ + dAtA[i] = 0x1f + i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.PeerTrustedCAPath))) + i += copy(dAtA[i:], m.PeerTrustedCAPath) + } return i, nil } @@ -935,14 +990,20 @@ func (m *Tester) MarshalTo(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.TesterNetwork) > 0 { + if len(m.TesterDataDir) > 0 { dAtA[i] = 0xa i++ + i = encodeVarintRpc(dAtA, i, uint64(len(m.TesterDataDir))) + i += copy(dAtA[i:], m.TesterDataDir) + } + if len(m.TesterNetwork) > 0 { + dAtA[i] = 0x12 + i++ i = encodeVarintRpc(dAtA, i, uint64(len(m.TesterNetwork))) i += copy(dAtA[i:], m.TesterNetwork) } if len(m.TesterAddr) > 0 { - dAtA[i] = 0x12 + dAtA[i] = 0x1a i++ i = encodeVarintRpc(dAtA, i, uint64(len(m.TesterAddr))) i += copy(dAtA[i:], m.TesterAddr) @@ -1388,32 +1449,60 @@ func (m *Member) Size() (n int) { if l > 0 { n += 2 + l + sovRpc(uint64(l)) } + l = len(m.ClientCertPath) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } l = len(m.ClientKeyData) if l > 0 { n += 2 + l + sovRpc(uint64(l)) } + l = len(m.ClientKeyPath) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } l = len(m.ClientTrustedCAData) if l > 0 { n += 2 + l + sovRpc(uint64(l)) } + l = len(m.ClientTrustedCAPath) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } l = len(m.PeerCertData) if l > 0 { n += 2 + l + sovRpc(uint64(l)) } + l = len(m.PeerCertPath) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } l = len(m.PeerKeyData) if l > 0 { n += 2 + l + sovRpc(uint64(l)) } + l = len(m.PeerKeyPath) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } l = len(m.PeerTrustedCAData) if l > 0 { n += 2 + l + sovRpc(uint64(l)) } + l = len(m.PeerTrustedCAPath) + if l > 0 { + n += 2 + l + sovRpc(uint64(l)) + } return n } func (m *Tester) Size() (n int) { var l int _ = l + l = len(m.TesterDataDir) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } l = len(m.TesterNetwork) if l > 0 { n += 1 + l + sovRpc(uint64(l)) @@ -2562,6 +2651,35 @@ func (m *Member) Unmarshal(dAtA []byte) error { m.ClientCertData = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 402: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientCertPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientCertPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 403: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ClientKeyData", wireType) } @@ -2590,7 +2708,36 @@ func (m *Member) Unmarshal(dAtA []byte) error { } m.ClientKeyData = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 403: + case 404: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientKeyPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientKeyPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 405: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ClientTrustedCAData", wireType) } @@ -2619,6 +2766,35 @@ func (m *Member) Unmarshal(dAtA []byte) error { } m.ClientTrustedCAData = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 406: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientTrustedCAPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientTrustedCAPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 501: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field PeerCertData", wireType) @@ -2649,6 +2825,35 @@ func (m *Member) Unmarshal(dAtA []byte) error { m.PeerCertData = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 502: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerCertPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerCertPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 503: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field PeerKeyData", wireType) } @@ -2677,7 +2882,36 @@ func (m *Member) Unmarshal(dAtA []byte) error { } m.PeerKeyData = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 503: + case 504: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerKeyPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerKeyPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 505: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field PeerTrustedCAData", wireType) } @@ -2706,6 +2940,35 @@ func (m *Member) Unmarshal(dAtA []byte) error { } m.PeerTrustedCAData = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 506: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerTrustedCAPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerTrustedCAPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRpc(dAtA[iNdEx:]) @@ -2757,6 +3020,35 @@ func (m *Tester) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TesterDataDir", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TesterDataDir = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field TesterNetwork", wireType) } @@ -2785,7 +3077,7 @@ func (m *Tester) Unmarshal(dAtA []byte) error { } m.TesterNetwork = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field TesterAddr", wireType) } @@ -3663,155 +3955,160 @@ var ( func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) } var fileDescriptorRpc = []byte{ - // 2390 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0xdb, 0x76, 0xdb, 0xc6, - 0xd5, 0x16, 0x44, 0x4b, 0x96, 0x46, 0x27, 0x6a, 0x64, 0x59, 0xb0, 0x9d, 0x08, 0x32, 0x1c, 0xe7, - 0x57, 0xf4, 0x17, 0x72, 0x6b, 0x67, 0xb5, 0xb5, 0x73, 0xb0, 0x29, 0x0a, 0xb6, 0x58, 0x41, 0x24, - 0x3d, 0x84, 0x6c, 0xe7, 0x8a, 0x85, 0xc0, 0xa1, 0x88, 0x0a, 0x02, 0x68, 0x60, 0xa8, 0x50, 0x79, - 0x81, 0xde, 0xf6, 0x70, 0xd3, 0x87, 0x68, 0xfa, 0x1c, 0x4e, 0x7a, 0x4a, 0xdb, 0xbb, 0x5e, 0xb0, - 0xad, 0xbb, 0xfa, 0x02, 0x5c, 0x3d, 0xac, 0xde, 0x75, 0xcd, 0x81, 0xe4, 0x00, 0x24, 0x65, 0xdf, - 0x69, 0xf6, 0xfe, 0xbe, 0x0f, 0x33, 0x7b, 0xcf, 0xec, 0xbd, 0x69, 0x83, 0xa5, 0xa8, 0xe9, 0x36, - 0x8f, 0xee, 0x44, 0x4d, 0x77, 0xbb, 0x19, 0x85, 0x24, 0x84, 0x53, 0xcc, 0x70, 0xdd, 0x38, 0xf6, - 0x48, 0xa3, 0x75, 0xb4, 0xed, 0x86, 0xa7, 0x77, 0x8e, 0xc3, 0xe3, 0xf0, 0x0e, 0xf3, 0x1e, 0xb5, - 0xea, 0x6c, 0xc5, 0x16, 0xec, 0x2f, 0xce, 0xd2, 0xff, 0xbb, 0x00, 0x2e, 0x99, 0xc4, 0xad, 0xc1, - 0x5b, 0xe0, 0x52, 0xd1, 0x39, 0xc5, 0xaa, 0xb2, 0xa1, 0x6c, 0xce, 0xee, 0x2c, 0x75, 0x3b, 0xda, - 0xdc, 0xb9, 0x73, 0xea, 0x3f, 0xd0, 0x03, 0xe7, 0x14, 0xeb, 0x88, 0x39, 0xa1, 0x01, 0x2e, 0xef, - 0x3a, 0xc4, 0xd9, 0xf5, 0x22, 0x75, 0x92, 0xe1, 0x56, 0xba, 0x1d, 0x6d, 0x89, 0xe3, 0x6a, 0x0e, - 0x71, 0x8c, 0x9a, 0x17, 0xe9, 0xa8, 0x87, 0x81, 0x5b, 0x60, 0xfa, 0x79, 0xce, 0xa2, 0xe8, 0x0c, - 0x43, 0xc3, 0x6e, 0x47, 0x5b, 0xe4, 0xe8, 0xcf, 0x1d, 0x9f, 0x83, 0x05, 0x02, 0x96, 0xc0, 0xca, - 0x1e, 0x76, 0x22, 0x72, 0x84, 0x1d, 0x52, 0x08, 0x08, 0x8e, 0xce, 0x1c, 0xff, 0x20, 0x56, 0xe7, - 0x36, 0x94, 0xcd, 0xcc, 0xce, 0xbb, 0xdd, 0x8e, 0x76, 0x8d, 0x13, 0x1b, 0x3d, 0x90, 0xe1, 0x09, - 0x94, 0x8e, 0x46, 0x31, 0x61, 0x01, 0x2c, 0x9b, 0x3e, 0x76, 0x89, 0x17, 0x06, 0xb6, 0x77, 0x8a, - 0xc3, 0x16, 0x39, 0x88, 0xd5, 0x79, 0x26, 0x77, 0xa3, 0xdb, 0xd1, 0xd6, 0xb8, 0x1c, 0x16, 0x10, - 0x83, 0x70, 0x8c, 0x8e, 0x86, 0x59, 0xb0, 0x00, 0xb2, 0x96, 0x17, 0x13, 0x1c, 0xe4, 0x7d, 0x0f, - 0x07, 0xe4, 0x10, 0x59, 0xb1, 0xba, 0xba, 0x91, 0xd9, 0x9c, 0x95, 0x37, 0xe6, 0x33, 0x84, 0xe1, - 0x32, 0x88, 0xd1, 0x8a, 0xfc, 0x58, 0x47, 0x43, 0x34, 0x88, 0xc0, 0x4a, 0xae, 0x76, 0x86, 0x23, - 0xe2, 0xc5, 0x58, 0x52, 0xbb, 0xca, 0xd4, 0x36, 0xba, 0x1d, 0xed, 0x1d, 0xae, 0xe6, 0xf4, 0x40, - 0x49, 0xc1, 0x51, 0x64, 0x78, 0x1f, 0x2c, 0xf0, 0x55, 0xae, 0x45, 0x42, 0xdb, 0xaa, 0xa8, 0x6b, - 0x1b, 0xca, 0xe6, 0x8c, 0x9c, 0x1b, 0xa7, 0x45, 0x42, 0x83, 0x50, 0x81, 0x24, 0x12, 0xe6, 0xc1, - 0x22, 0x37, 0xe4, 0x71, 0x44, 0x8d, 0x0d, 0x55, 0x65, 0x5c, 0x29, 0x42, 0xe2, 0xfb, 0x2e, 0x8e, - 0x88, 0xe1, 0xb4, 0x48, 0x43, 0x47, 0x29, 0x0a, 0xfc, 0x58, 0x16, 0x79, 0xec, 0xf9, 0x58, 0xbd, - 0xc6, 0xd2, 0x7d, 0xa5, 0xdb, 0xd1, 0xb2, 0x42, 0x84, 0xb2, 0xeb, 0x9e, 0x8f, 0x13, 0x6c, 0x8a, - 0x1d, 0xec, 0x7e, 0x1f, 0x9f, 0x33, 0xf2, 0xf5, 0xf4, 0xcd, 0x3a, 0xc1, 0xe7, 0x82, 0x9b, 0x44, - 0x42, 0x0b, 0xac, 0x70, 0x83, 0x1d, 0xb5, 0x62, 0x82, 0x6b, 0xf9, 0x1c, 0x13, 0xb8, 0xc1, 0x04, - 0xae, 0x77, 0x3b, 0xda, 0x55, 0x2e, 0x40, 0xb8, 0xdb, 0x70, 0x1d, 0xa1, 0x33, 0x8a, 0x46, 0x63, - 0xc1, 0xd3, 0x55, 0xc6, 0x38, 0x62, 0x59, 0xd1, 0x58, 0x56, 0xa4, 0x58, 0x88, 0x1c, 0x37, 0x31, - 0x8e, 0x44, 0x42, 0x52, 0x14, 0x68, 0x83, 0xe5, 0x7e, 0x8a, 0xfa, 0x3a, 0x1b, 0x4c, 0xe7, 0xfd, - 0x6e, 0x47, 0xd3, 0xb9, 0x8e, 0x17, 0x78, 0xc4, 0x73, 0x7c, 0x63, 0x90, 0x65, 0x49, 0x72, 0x58, - 0x00, 0x3e, 0x00, 0x73, 0xf4, 0xef, 0x5e, 0x7e, 0x6f, 0xb2, 0x1c, 0xa9, 0xdd, 0x8e, 0x76, 0x85, - 0xeb, 0x31, 0xf6, 0x20, 0xc9, 0x32, 0x18, 0x96, 0x01, 0xa4, 0xcb, 0x54, 0x9a, 0x75, 0x26, 0x21, - 0x5d, 0x38, 0x26, 0x31, 0x9c, 0xeb, 0x11, 0x5c, 0xf8, 0x09, 0x98, 0x67, 0xd6, 0x5e, 0xb6, 0x6f, - 0xb1, 0x78, 0x5f, 0xeb, 0x76, 0xb4, 0x55, 0x59, 0x6b, 0x90, 0xf2, 0x04, 0xbc, 0x77, 0x98, 0x5e, - 0xba, 0xdf, 0x63, 0xec, 0xf4, 0x61, 0x06, 0x39, 0x97, 0xc1, 0xf0, 0x00, 0x2c, 0xd3, 0x65, 0x32, - 0xdf, 0xb7, 0x99, 0x82, 0xd6, 0xed, 0x68, 0x37, 0x24, 0x85, 0xa1, 0xa4, 0x0f, 0x33, 0xe1, 0x0e, - 0x58, 0x2c, 0xf0, 0x54, 0xe4, 0x7d, 0x6a, 0x8f, 0xd4, 0x0f, 0xd2, 0x77, 0xa7, 0x97, 0x2a, 0x97, - 0x03, 0x74, 0x94, 0x62, 0xd0, 0x17, 0x9d, 0xb4, 0x54, 0x88, 0x43, 0xb0, 0xba, 0xc5, 0x84, 0xa4, - 0x00, 0xa7, 0x84, 0x8c, 0x98, 0xc2, 0x74, 0x34, 0x8a, 0x3c, 0xac, 0x69, 0x87, 0x27, 0x38, 0x50, - 0xff, 0xff, 0x4d, 0x9a, 0x84, 0xc2, 0x86, 0x34, 0x19, 0x19, 0x3e, 0x04, 0x0b, 0x95, 0xc0, 0x69, - 0xc6, 0x8d, 0x90, 0xe4, 0xc3, 0x56, 0x40, 0xd4, 0x7b, 0xac, 0x16, 0x4a, 0x69, 0x8b, 0x85, 0xdb, - 0x70, 0xa9, 0x5f, 0x47, 0x49, 0x3c, 0xb4, 0xc0, 0xf2, 0xd3, 0x56, 0x48, 0x9c, 0x1d, 0xc7, 0x3d, - 0xc1, 0x41, 0x6d, 0xe7, 0x9c, 0xe0, 0x58, 0xfd, 0x90, 0x89, 0xac, 0x77, 0x3b, 0xda, 0x75, 0x2e, - 0xf2, 0x92, 0x42, 0x8c, 0x23, 0x8e, 0x31, 0x8e, 0x28, 0x48, 0x47, 0xc3, 0x44, 0xda, 0x4a, 0xca, - 0x11, 0x7e, 0x16, 0x12, 0xac, 0x3e, 0x4c, 0x97, 0xab, 0x66, 0x84, 0x8d, 0xb3, 0x90, 0x46, 0xa7, - 0x87, 0x91, 0x23, 0x12, 0x46, 0x51, 0xab, 0x49, 0xf2, 0x0d, 0xec, 0x9e, 0xa8, 0x8f, 0xd2, 0xd7, - 0xb8, 0x1f, 0x11, 0x8e, 0x32, 0x5c, 0x0a, 0x93, 0x22, 0x22, 0x91, 0xf5, 0xee, 0x65, 0x30, 0x7d, - 0x80, 0x4f, 0x8f, 0x70, 0x44, 0xaf, 0x34, 0xed, 0x82, 0x66, 0x1b, 0xbb, 0x65, 0x87, 0x34, 0x44, - 0x17, 0x94, 0x62, 0x83, 0x89, 0x5b, 0x33, 0x70, 0x1b, 0xbb, 0x46, 0xd3, 0xa1, 0xef, 0x22, 0x01, - 0x87, 0xf7, 0xc0, 0x6c, 0xee, 0x98, 0x96, 0xd5, 0x5a, 0x2d, 0x62, 0x2d, 0x6b, 0x76, 0x67, 0xb5, - 0xdb, 0xd1, 0x96, 0x45, 0xf5, 0xa5, 0x2e, 0xc3, 0xa9, 0xd5, 0x22, 0x1d, 0x0d, 0x70, 0x34, 0x9e, - 0x8f, 0x1d, 0xcf, 0x6f, 0x86, 0x5e, 0x40, 0xf6, 0x6c, 0xbb, 0xcc, 0xc8, 0xf3, 0x8c, 0x2c, 0xc5, - 0xb3, 0xde, 0x83, 0x18, 0x0d, 0x42, 0x9a, 0x42, 0x65, 0x98, 0x48, 0xe3, 0xb9, 0xe3, 0xc4, 0x98, - 0x36, 0x5b, 0x9c, 0x2e, 0xa0, 0x47, 0x4e, 0x8c, 0x45, 0x6b, 0x16, 0x18, 0xfa, 0x08, 0xe9, 0x09, - 0xac, 0xf0, 0x98, 0x9d, 0xb7, 0x9e, 0x7e, 0x84, 0xec, 0xbc, 0x7e, 0x78, 0x2c, 0x8e, 0x2b, 0x83, - 0xe1, 0x13, 0xb0, 0x44, 0x97, 0xbc, 0x2a, 0x94, 0xa3, 0xb0, 0x7d, 0xae, 0x7e, 0xa5, 0xb0, 0x44, - 0xbc, 0xd3, 0xed, 0x68, 0xaa, 0x24, 0x20, 0xea, 0x49, 0x93, 0x62, 0x74, 0x94, 0x66, 0xc1, 0x1c, - 0x58, 0xa0, 0x26, 0xfa, 0x2e, 0xb9, 0xcc, 0xd7, 0x5c, 0x46, 0x7a, 0x7e, 0x4c, 0x86, 0xbd, 0x67, - 0x21, 0x92, 0x64, 0xd0, 0xea, 0x36, 0x50, 0x35, 0x83, 0x1a, 0x0b, 0x8a, 0xfa, 0xe5, 0x64, 0xba, - 0x24, 0xc8, 0xdb, 0xc1, 0x02, 0xa6, 0xa3, 0x11, 0x5c, 0xf8, 0x1d, 0x3e, 0x10, 0xa9, 0xbf, 0xa2, - 0x1a, 0x73, 0x77, 0xe7, 0xb6, 0xd9, 0x5c, 0xb5, 0x4d, 0x6d, 0xf2, 0x58, 0x44, 0x05, 0x75, 0xc4, - 0x67, 0xa7, 0x5d, 0xb9, 0x01, 0xd2, 0xe1, 0x47, 0xfd, 0x29, 0x1f, 0x78, 0xc6, 0xb4, 0x51, 0x3a, - 0x2a, 0x25, 0x1a, 0x21, 0xe5, 0xd0, 0x68, 0xf4, 0xdb, 0x1b, 0x13, 0xf9, 0x59, 0x26, 0x5d, 0x8c, - 0x84, 0x08, 0x2d, 0x8e, 0x5c, 0x23, 0xc9, 0x80, 0xf6, 0x50, 0x43, 0x64, 0x42, 0x3f, 0xe7, 0x42, - 0x37, 0xbb, 0x1d, 0xed, 0xdd, 0x84, 0x90, 0x54, 0x23, 0xb9, 0xde, 0x28, 0x3a, 0xfc, 0x74, 0x50, - 0xef, 0x99, 0xdc, 0xbf, 0x32, 0xe3, 0x0b, 0x3e, 0x97, 0x49, 0xe0, 0xe1, 0x47, 0xfd, 0x82, 0xcf, - 0xe8, 0xff, 0xce, 0x8c, 0xad, 0xf8, 0x9c, 0x2d, 0xa3, 0x61, 0x31, 0x55, 0xf1, 0x99, 0xc4, 0x7f, - 0x32, 0x6f, 0x2a, 0xf9, 0x5c, 0x69, 0x98, 0xaa, 0xff, 0x79, 0x1e, 0x4c, 0xdb, 0x98, 0x55, 0xee, - 0x87, 0x60, 0x81, 0xff, 0x55, 0xc4, 0xe4, 0xf3, 0x30, 0x3a, 0x19, 0x7e, 0xf5, 0x84, 0xb9, 0x8d, - 0x80, 0xfb, 0x75, 0x94, 0xc4, 0xc3, 0xef, 0x02, 0xc0, 0x0d, 0xec, 0xe9, 0xf2, 0x3b, 0x77, 0xb5, - 0xdb, 0xd1, 0x60, 0x82, 0xcd, 0x9f, 0xac, 0x84, 0xa4, 0x93, 0xc6, 0x2e, 0xf6, 0x9d, 0x73, 0xcb, - 0x21, 0x38, 0x70, 0xcf, 0xc5, 0x98, 0xbb, 0x20, 0x5f, 0x97, 0x1a, 0xf5, 0x1b, 0x3e, 0x07, 0x18, - 0xa7, 0x74, 0xd2, 0x48, 0x52, 0xe0, 0x0f, 0x40, 0x36, 0x69, 0x41, 0x67, 0xac, 0x7a, 0x2c, 0xc8, - 0xd5, 0x23, 0x2d, 0x63, 0x44, 0x67, 0x3a, 0x1a, 0xe2, 0xc1, 0xcf, 0xc0, 0xea, 0x61, 0xb3, 0xe6, - 0x10, 0x5c, 0x4b, 0xed, 0x6b, 0x81, 0x09, 0xde, 0xea, 0x76, 0x34, 0x8d, 0x0b, 0xb6, 0x38, 0xcc, - 0x18, 0xde, 0xdf, 0x68, 0x05, 0x1a, 0x23, 0x14, 0xb6, 0x82, 0x9a, 0xe5, 0x9d, 0x7a, 0x44, 0x5d, - 0xdd, 0x50, 0x36, 0xa7, 0xe4, 0x18, 0x45, 0xd4, 0x67, 0xf8, 0xd4, 0xa9, 0x23, 0x09, 0x09, 0x1f, - 0x81, 0x05, 0xb3, 0xed, 0x91, 0x52, 0x40, 0x4b, 0x5d, 0x2b, 0xc2, 0xea, 0xd5, 0xa1, 0xd2, 0xd0, - 0xf6, 0x88, 0x11, 0x06, 0x46, 0x9d, 0x03, 0x68, 0x69, 0x90, 0x09, 0x70, 0x0f, 0x64, 0xf3, 0x61, - 0x10, 0xb3, 0xf9, 0xcc, 0x3d, 0xe7, 0xfd, 0x62, 0x2d, 0x5d, 0xa6, 0xdc, 0x01, 0xa2, 0xd7, 0x2b, - 0x86, 0x58, 0xf0, 0x3e, 0x98, 0x33, 0x03, 0xe7, 0xc8, 0xc7, 0xe5, 0x66, 0x14, 0xd6, 0xc5, 0x88, - 0xbc, 0xd6, 0xed, 0x68, 0x2b, 0x62, 0x27, 0xcc, 0x69, 0x34, 0xa9, 0x97, 0xd6, 0xca, 0x01, 0x16, - 0x7e, 0x0c, 0xe6, 0xc5, 0x7e, 0xf2, 0x4e, 0x8c, 0x7b, 0x23, 0xa5, 0x74, 0xf7, 0xc5, 0xee, 0x0d, - 0x97, 0xba, 0x75, 0x94, 0x40, 0xd3, 0x8b, 0x22, 0xd6, 0x2c, 0xaa, 0x07, 0x74, 0x94, 0x4c, 0x5d, - 0x94, 0x1e, 0x9f, 0x27, 0x84, 0x5d, 0x94, 0x24, 0x85, 0x0e, 0x39, 0xc2, 0x52, 0x69, 0xb4, 0xea, - 0x75, 0x1f, 0x8b, 0xf9, 0x51, 0x0a, 0x65, 0x4f, 0x24, 0xe6, 0x80, 0x81, 0x86, 0x60, 0xc0, 0x7d, - 0xa9, 0x57, 0xe5, 0xc3, 0xd3, 0x53, 0x27, 0xa8, 0xc5, 0xaa, 0x9e, 0xfe, 0x09, 0x34, 0xe8, 0x55, - 0xae, 0xc0, 0xc8, 0xad, 0xaa, 0xc7, 0xa3, 0xa7, 0x42, 0xad, 0x20, 0xc0, 0x51, 0xbf, 0xdd, 0x7e, - 0x90, 0xae, 0x96, 0x11, 0xf3, 0xcb, 0x0d, 0x37, 0x45, 0xa1, 0xbf, 0xc9, 0xcc, 0x36, 0xc1, 0x51, - 0xe0, 0xf8, 0x7d, 0x19, 0x3e, 0x73, 0x49, 0x1b, 0xc2, 0x02, 0x21, 0x0b, 0x0d, 0xd1, 0x68, 0x7a, - 0x2b, 0x24, 0xc2, 0x71, 0x6c, 0x9f, 0x37, 0x71, 0xac, 0x62, 0x76, 0x2c, 0x29, 0xbd, 0x31, 0x73, - 0x1a, 0x84, 0x7a, 0x75, 0x24, 0x63, 0xe9, 0x2d, 0xe5, 0xcb, 0x7d, 0x7c, 0x5e, 0xf1, 0xbe, 0xc0, - 0xac, 0x91, 0x4e, 0xc9, 0xa1, 0x15, 0x64, 0x5a, 0xdd, 0x62, 0xef, 0x0b, 0x7a, 0x4b, 0x13, 0x04, - 0xda, 0xc0, 0x12, 0x06, 0xcb, 0x89, 0x8e, 0xb1, 0x7a, 0xcc, 0x64, 0xa4, 0xb9, 0x26, 0x25, 0x63, - 0xf8, 0x14, 0xa6, 0xa3, 0x11, 0x5c, 0xf8, 0x0c, 0x5c, 0x19, 0x58, 0x5b, 0xf5, 0xba, 0xd7, 0x46, - 0x4e, 0x70, 0x8c, 0xd5, 0x06, 0xd3, 0xd4, 0xbb, 0x1d, 0x6d, 0x7d, 0x58, 0x93, 0xe1, 0x8c, 0x88, - 0x02, 0x75, 0x34, 0x92, 0x0f, 0x7f, 0x08, 0xd6, 0x46, 0xd9, 0xed, 0x76, 0xa0, 0x7a, 0x4c, 0x5a, - 0xfa, 0x81, 0x33, 0x46, 0xda, 0x20, 0xed, 0x40, 0x47, 0xe3, 0x64, 0xe8, 0x60, 0xd1, 0x77, 0xd9, - 0xed, 0xa0, 0xd4, 0x8c, 0xd5, 0x1f, 0x31, 0x65, 0x29, 0xa5, 0x92, 0x32, 0x69, 0x07, 0x46, 0xd8, - 0x8c, 0x75, 0x94, 0x66, 0x0d, 0xd2, 0xc2, 0xdb, 0x59, 0xcc, 0xe7, 0x93, 0xa9, 0xc4, 0xb0, 0xcb, - 0x75, 0x78, 0x23, 0x8c, 0xfb, 0x69, 0x11, 0x04, 0xf8, 0x21, 0x98, 0xe5, 0x86, 0xa7, 0xe5, 0x0a, - 0x1f, 0x4b, 0xa6, 0xe4, 0x91, 0x4e, 0xb0, 0x5f, 0xd2, 0xaf, 0x0f, 0x80, 0xfa, 0x8f, 0x15, 0x70, - 0x19, 0xe1, 0x97, 0x2d, 0x1c, 0x13, 0xb8, 0x0d, 0x66, 0x4b, 0x4d, 0x1c, 0x39, 0xc4, 0x0b, 0x03, - 0xd6, 0x59, 0x16, 0xef, 0x66, 0xc5, 0x2c, 0xd1, 0xb7, 0xa3, 0x01, 0x04, 0xde, 0xee, 0x0d, 0xa3, - 0x2a, 0x1f, 0x3c, 0x16, 0x04, 0x98, 0x1b, 0x51, 0x6f, 0x52, 0xbd, 0xdd, 0x6b, 0x5f, 0xec, 0xdf, - 0x54, 0x06, 0x30, 0x6e, 0x44, 0xc2, 0xa9, 0xbb, 0x60, 0x06, 0xe1, 0xb8, 0x19, 0x06, 0x31, 0x86, - 0x2a, 0xb8, 0x5c, 0x69, 0xb9, 0x2e, 0x8e, 0x63, 0xb6, 0x8f, 0x19, 0xd4, 0x5b, 0xc2, 0xab, 0x60, - 0x9a, 0xfe, 0xe0, 0x68, 0xc5, 0xbc, 0x79, 0x21, 0xb1, 0x92, 0xf6, 0x92, 0xb9, 0x60, 0x2f, 0x5b, - 0x7f, 0x51, 0xa4, 0x33, 0xc2, 0x45, 0x00, 0x8a, 0x21, 0xa9, 0x10, 0x27, 0x22, 0xb8, 0x96, 0x9d, - 0x80, 0x57, 0x40, 0x56, 0x4c, 0xdd, 0xcc, 0x46, 0x27, 0xa5, 0xac, 0x02, 0x97, 0xc0, 0x1c, 0xc2, - 0x71, 0xdf, 0x30, 0x09, 0xe7, 0xc1, 0xcc, 0xbe, 0xe7, 0xfb, 0x6c, 0x95, 0xa1, 0x6e, 0x5a, 0x30, - 0x72, 0x91, 0xdb, 0xf0, 0xce, 0x70, 0xf6, 0x12, 0x55, 0xd9, 0xc5, 0x31, 0x89, 0xc2, 0x73, 0x8a, - 0x60, 0xd3, 0x73, 0x76, 0x0a, 0x5e, 0x03, 0xab, 0x3b, 0xbe, 0xe3, 0x9e, 0x34, 0x42, 0x9f, 0xfd, - 0x4a, 0x2e, 0x87, 0x11, 0xb1, 0xdb, 0xa8, 0x9d, 0xad, 0xc1, 0x1b, 0x60, 0xed, 0x30, 0x38, 0x1a, - 0xe9, 0xc4, 0x70, 0x15, 0x2c, 0xb3, 0xb2, 0x98, 0x30, 0xd7, 0xe1, 0x1a, 0x58, 0x39, 0x0c, 0x6a, - 0x43, 0x8e, 0xe3, 0xad, 0x7f, 0xcc, 0xf0, 0xfd, 0x88, 0x8a, 0x4c, 0xf9, 0xfb, 0x05, 0xcb, 0xaa, - 0x96, 0x8a, 0x66, 0xf5, 0x71, 0xc9, 0xb2, 0x4a, 0xcf, 0x4d, 0x94, 0x9d, 0x80, 0xdf, 0x02, 0x9b, - 0x43, 0xe6, 0xea, 0x61, 0xd1, 0x2e, 0x58, 0x55, 0x1b, 0x15, 0x9e, 0x3c, 0x31, 0x51, 0xb5, 0x52, - 0xcc, 0x95, 0x2b, 0x7b, 0x25, 0x9b, 0x87, 0x80, 0xa1, 0x2d, 0x33, 0xb7, 0x6b, 0xa2, 0xec, 0x24, - 0x7c, 0x1f, 0xe8, 0x92, 0x61, 0x1c, 0x31, 0xd3, 0x27, 0x3e, 0x3d, 0x2c, 0xa1, 0xc3, 0x83, 0xec, - 0x25, 0x16, 0x3b, 0x6a, 0xc8, 0x59, 0x56, 0x76, 0x0a, 0x6e, 0x81, 0xf7, 0x77, 0xac, 0x5c, 0x7e, - 0x7f, 0xaf, 0x64, 0x99, 0xd5, 0xb2, 0x69, 0xa2, 0x6a, 0xb9, 0x84, 0xec, 0xaa, 0xfd, 0xa2, 0x8a, - 0x5e, 0x24, 0x77, 0x5c, 0x83, 0x39, 0xf0, 0xc9, 0xdb, 0x61, 0xc7, 0xed, 0x06, 0xc3, 0xf7, 0xc0, - 0xc6, 0x78, 0x09, 0x71, 0xb6, 0x3a, 0xfc, 0x08, 0x7c, 0xef, 0x4d, 0xa8, 0x71, 0x9f, 0x38, 0xbe, - 0xf8, 0x13, 0x22, 0x0a, 0x0d, 0x78, 0x13, 0xbc, 0x3b, 0x1e, 0x45, 0x43, 0xe3, 0xc1, 0xff, 0x03, - 0xfa, 0xae, 0x69, 0xe5, 0x3e, 0xbb, 0x38, 0x2c, 0xaf, 0x14, 0xb8, 0x0d, 0x3e, 0x40, 0xb9, 0xe2, - 0x6e, 0xe9, 0xa0, 0xfa, 0x16, 0xf8, 0xaf, 0x14, 0xf8, 0x29, 0xb8, 0xff, 0x66, 0xe0, 0xb8, 0x03, - 0x7e, 0xad, 0x40, 0x13, 0x3c, 0x7a, 0xeb, 0xef, 0x8d, 0x93, 0xf9, 0xb5, 0x02, 0x6f, 0x82, 0x77, - 0x46, 0xf3, 0x45, 0x1e, 0x7e, 0xa3, 0xc0, 0x4d, 0x70, 0xeb, 0xc2, 0x2f, 0x09, 0xe4, 0x6f, 0x15, - 0xf8, 0x7d, 0x70, 0xef, 0x22, 0xc8, 0xb8, 0x6d, 0xfc, 0x4e, 0x81, 0x0f, 0xc1, 0x83, 0xb7, 0xf8, - 0xc6, 0x38, 0x81, 0xdf, 0x5f, 0x70, 0x0e, 0x91, 0xec, 0x6f, 0xde, 0x7c, 0x0e, 0x81, 0xfc, 0x83, - 0x02, 0xd7, 0xc1, 0xb5, 0xd1, 0x10, 0x7a, 0x27, 0xfe, 0xa8, 0xc0, 0xdb, 0x60, 0xe3, 0x42, 0x25, - 0x0a, 0xfb, 0x93, 0x02, 0x55, 0xb0, 0x52, 0x2c, 0x55, 0x1f, 0xe7, 0x0a, 0x56, 0xf5, 0x79, 0xc1, - 0xde, 0xab, 0x56, 0x6c, 0x64, 0x56, 0x2a, 0xd9, 0x5f, 0x4e, 0xd2, 0xad, 0x24, 0x3c, 0xc5, 0x92, - 0x70, 0x56, 0x1f, 0x97, 0x50, 0xd5, 0x2a, 0x3c, 0x33, 0x8b, 0x14, 0xf9, 0xe5, 0x24, 0x5c, 0x02, - 0x80, 0xc2, 0xca, 0xa5, 0x42, 0xd1, 0xae, 0x64, 0x7f, 0x92, 0x81, 0x0b, 0x60, 0xc6, 0x7c, 0x61, - 0x9b, 0xa8, 0x98, 0xb3, 0xb2, 0xff, 0xcc, 0x6c, 0x85, 0x00, 0x0c, 0xc6, 0x0a, 0x38, 0x0d, 0x26, - 0xf7, 0x9f, 0x65, 0x27, 0xe0, 0x2c, 0x98, 0xb2, 0xcc, 0x5c, 0xc5, 0xcc, 0x2a, 0x70, 0x05, 0x2c, - 0x99, 0x96, 0x99, 0xb7, 0x0b, 0xa5, 0x62, 0x15, 0x1d, 0x16, 0x8b, 0xac, 0x6e, 0x64, 0xc1, 0xfc, - 0xf3, 0x9c, 0x9d, 0xdf, 0xeb, 0x59, 0x32, 0xb4, 0x3e, 0x59, 0xa5, 0xfc, 0x7e, 0x15, 0xe5, 0xf2, - 0x26, 0xea, 0x99, 0x2f, 0x51, 0x20, 0x13, 0xea, 0x59, 0xa6, 0xee, 0x3e, 0x04, 0xb3, 0x76, 0xe4, - 0x04, 0x71, 0x33, 0x8c, 0x08, 0xbc, 0x2b, 0x2f, 0x16, 0x45, 0xad, 0x17, 0x7d, 0xec, 0xfa, 0x52, - 0x7f, 0xcd, 0xdb, 0x89, 0x3e, 0xb1, 0xa9, 0x7c, 0x5b, 0xd9, 0xb9, 0xf2, 0xea, 0x6f, 0xeb, 0x13, - 0xaf, 0x5e, 0xaf, 0x2b, 0xdf, 0xbc, 0x5e, 0x57, 0xfe, 0xfa, 0x7a, 0x5d, 0xf9, 0xc5, 0xdf, 0xd7, - 0x27, 0x8e, 0xa6, 0xd9, 0xff, 0x2a, 0xdc, 0xfb, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x90, - 0x3a, 0xc0, 0x9e, 0x18, 0x00, 0x00, + // 2480 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0x5b, 0x57, 0xdb, 0xd8, + 0x15, 0x46, 0x38, 0x30, 0x70, 0xb8, 0x99, 0x43, 0x08, 0x4a, 0x32, 0xc1, 0x44, 0x99, 0xa4, 0x84, + 0x56, 0xa4, 0x4d, 0x66, 0xb5, 0x4d, 0xe6, 0x92, 0x18, 0xa3, 0x04, 0x17, 0x61, 0x3b, 0xc7, 0x22, + 0xc9, 0x3c, 0xb9, 0x42, 0x3e, 0xc6, 0x2a, 0x42, 0x72, 0xa4, 0x63, 0xc6, 0xcc, 0x1f, 0xe8, 0x6b, + 0xef, 0xab, 0x0f, 0x5d, 0xfd, 0x05, 0x9d, 0xfe, 0x8e, 0xcc, 0xf4, 0x36, 0x6d, 0xdf, 0xdd, 0x36, + 0x5d, 0xfd, 0x03, 0x5e, 0xbd, 0x4d, 0x9f, 0xba, 0xce, 0xc5, 0xf6, 0x91, 0x6c, 0x43, 0xde, 0x7c, + 0xf6, 0xfe, 0xbe, 0x4f, 0xfb, 0xec, 0x2d, 0x9d, 0xbd, 0x0f, 0x80, 0x85, 0xb0, 0xe1, 0x34, 0x0e, + 0xee, 0x84, 0x0d, 0x67, 0xb3, 0x11, 0x06, 0x24, 0x80, 0x13, 0xcc, 0x70, 0x45, 0x3f, 0x74, 0x49, + 0xbd, 0x79, 0xb0, 0xe9, 0x04, 0xc7, 0x77, 0x0e, 0x83, 0xc3, 0xe0, 0x0e, 0xf3, 0x1e, 0x34, 0x6b, + 0x6c, 0xc5, 0x16, 0xec, 0x17, 0x67, 0x69, 0x5f, 0xce, 0x81, 0x0b, 0x06, 0x71, 0xaa, 0xf0, 0x06, + 0xb8, 0x50, 0xb0, 0x8f, 0xb1, 0xaa, 0xac, 0x29, 0xeb, 0xd3, 0x5b, 0x0b, 0x9d, 0x76, 0x66, 0xe6, + 0xd4, 0x3e, 0xf6, 0x1e, 0x68, 0xbe, 0x7d, 0x8c, 0x35, 0xc4, 0x9c, 0x50, 0x07, 0x6f, 0x6d, 0xdb, + 0xc4, 0xde, 0x76, 0x43, 0x75, 0x9c, 0xe1, 0x96, 0x3a, 0xed, 0xcc, 0x02, 0xc7, 0x55, 0x6d, 0x62, + 0xeb, 0x55, 0x37, 0xd4, 0x50, 0x17, 0x03, 0x37, 0xc0, 0xe4, 0xf3, 0xac, 0x49, 0xd1, 0x29, 0x86, + 0x86, 0x9d, 0x76, 0x66, 0x9e, 0xa3, 0x3f, 0xb6, 0x3d, 0x0e, 0x16, 0x08, 0x58, 0x04, 0x4b, 0x3b, + 0xd8, 0x0e, 0xc9, 0x01, 0xb6, 0x49, 0xde, 0x27, 0x38, 0x3c, 0xb1, 0xbd, 0xbd, 0x48, 0x9d, 0x59, + 0x53, 0xd6, 0x53, 0x5b, 0xd7, 0x3a, 0xed, 0xcc, 0x65, 0x4e, 0xac, 0x77, 0x41, 0xba, 0x2b, 0x50, + 0x1a, 0x1a, 0xc6, 0x84, 0x79, 0xb0, 0x68, 0x78, 0xd8, 0x21, 0x6e, 0xe0, 0x5b, 0xee, 0x31, 0x0e, + 0x9a, 0x64, 0x2f, 0x52, 0x67, 0x99, 0xdc, 0xd5, 0x4e, 0x3b, 0xb3, 0xc2, 0xe5, 0xb0, 0x80, 0xe8, + 0x84, 0x63, 0x34, 0x34, 0xc8, 0x82, 0x79, 0x90, 0x36, 0xdd, 0x88, 0x60, 0x3f, 0xe7, 0xb9, 0xd8, + 0x27, 0xfb, 0xc8, 0x8c, 0xd4, 0xe5, 0xb5, 0xd4, 0xfa, 0xb4, 0x1c, 0x98, 0xc7, 0x10, 0xba, 0xc3, + 0x20, 0x7a, 0x33, 0xf4, 0x22, 0x0d, 0x0d, 0xd0, 0x20, 0x02, 0x4b, 0xd9, 0xea, 0x09, 0x0e, 0x89, + 0x1b, 0x61, 0x49, 0xed, 0x12, 0x53, 0x5b, 0xeb, 0xb4, 0x33, 0x6f, 0x73, 0x35, 0xbb, 0x0b, 0x8a, + 0x0b, 0x0e, 0x23, 0xc3, 0xfb, 0x60, 0x8e, 0xaf, 0xb2, 0x4d, 0x12, 0x58, 0x66, 0x59, 0x5d, 0x59, + 0x53, 0xd6, 0xa7, 0xe4, 0xda, 0xd8, 0x4d, 0x12, 0xe8, 0x84, 0x0a, 0xc4, 0x91, 0x30, 0x07, 0xe6, + 0xb9, 0x21, 0x87, 0x43, 0x6a, 0xac, 0xab, 0x2a, 0xe3, 0x4a, 0x19, 0x12, 0xcf, 0x77, 0x70, 0x48, + 0x74, 0xbb, 0x49, 0xea, 0x1a, 0x4a, 0x50, 0xe0, 0xfb, 0xb2, 0xc8, 0x63, 0xd7, 0xc3, 0xea, 0x65, + 0x56, 0xee, 0x8b, 0x9d, 0x76, 0x26, 0x2d, 0x44, 0x28, 0xbb, 0xe6, 0x7a, 0x38, 0xc6, 0xa6, 0xd8, + 0x7e, 0xf4, 0xbb, 0xf8, 0x94, 0x91, 0xaf, 0x24, 0xdf, 0xac, 0x23, 0x7c, 0x2a, 0xb8, 0x71, 0x24, + 0x34, 0xc1, 0x12, 0x37, 0x58, 0x61, 0x33, 0x22, 0xb8, 0x9a, 0xcb, 0x32, 0x81, 0xab, 0x4c, 0xe0, + 0x4a, 0xa7, 0x9d, 0xb9, 0xc4, 0x05, 0x08, 0x77, 0xeb, 0x8e, 0x2d, 0x74, 0x86, 0xd1, 0x68, 0x2e, + 0x78, 0xb9, 0x4a, 0x18, 0x87, 0xac, 0x2a, 0x19, 0x56, 0x15, 0x29, 0x17, 0xa2, 0xc6, 0x0d, 0x8c, + 0x43, 0x51, 0x90, 0x04, 0x05, 0x5a, 0x60, 0xb1, 0x57, 0xa2, 0x9e, 0xce, 0x1a, 0xd3, 0xb9, 0xd5, + 0x69, 0x67, 0x34, 0xae, 0xe3, 0xfa, 0x2e, 0x71, 0x6d, 0x4f, 0xef, 0x57, 0x59, 0x92, 0x1c, 0x14, + 0x80, 0x0f, 0xc0, 0x0c, 0xfd, 0xdd, 0xad, 0xef, 0x75, 0x56, 0x23, 0xb5, 0xd3, 0xce, 0x5c, 0xe4, + 0x7a, 0x8c, 0xdd, 0x2f, 0xb2, 0x0c, 0x86, 0x25, 0x00, 0xe9, 0x32, 0x51, 0x66, 0x8d, 0x49, 0x48, + 0x2f, 0x1c, 0x93, 0x18, 0xac, 0xf5, 0x10, 0x2e, 0xfc, 0x00, 0xcc, 0x32, 0x6b, 0xb7, 0xda, 0x37, + 0x58, 0xbe, 0x2f, 0x77, 0xda, 0x99, 0x65, 0x59, 0xab, 0x5f, 0xf2, 0x18, 0xbc, 0xbb, 0x99, 0x6e, + 0xb9, 0xdf, 0x61, 0xec, 0xe4, 0x66, 0xfa, 0x35, 0x97, 0xc1, 0x70, 0x0f, 0x2c, 0xd2, 0x65, 0xbc, + 0xde, 0x37, 0x99, 0x42, 0xa6, 0xd3, 0xce, 0x5c, 0x95, 0x14, 0x06, 0x8a, 0x3e, 0xc8, 0x84, 0x5b, + 0x60, 0x3e, 0xcf, 0x4b, 0x91, 0xf3, 0xa8, 0x3d, 0x54, 0x6f, 0x27, 0xdf, 0x9d, 0x6e, 0xa9, 0x1c, + 0x0e, 0xd0, 0x50, 0x82, 0x41, 0xbf, 0xe8, 0xb8, 0xa5, 0x4c, 0x6c, 0x82, 0xd5, 0x0d, 0x26, 0x24, + 0x25, 0x38, 0x21, 0xa4, 0x47, 0x14, 0xa6, 0xa1, 0x61, 0xe4, 0x41, 0x4d, 0x2b, 0x38, 0xc2, 0xbe, + 0xfa, 0xd5, 0xf3, 0x34, 0x09, 0x85, 0x0d, 0x68, 0x32, 0x32, 0x7c, 0x08, 0xe6, 0xca, 0xbe, 0xdd, + 0x88, 0xea, 0x01, 0xc9, 0x05, 0x4d, 0x9f, 0xa8, 0xf7, 0xd8, 0x59, 0x28, 0x95, 0x2d, 0x12, 0x6e, + 0xdd, 0xa1, 0x7e, 0x0d, 0xc5, 0xf1, 0xd0, 0x04, 0x8b, 0x4f, 0x9b, 0x01, 0xb1, 0xb7, 0x6c, 0xe7, + 0x08, 0xfb, 0xd5, 0xad, 0x53, 0x82, 0x23, 0xf5, 0x5d, 0x26, 0xb2, 0xda, 0x69, 0x67, 0xae, 0x70, + 0x91, 0x97, 0x14, 0xa2, 0x1f, 0x70, 0x8c, 0x7e, 0x40, 0x41, 0x1a, 0x1a, 0x24, 0xd2, 0x56, 0x52, + 0x0a, 0xf1, 0xb3, 0x80, 0x60, 0xf5, 0x61, 0xf2, 0xb8, 0x6a, 0x84, 0x58, 0x3f, 0x09, 0x68, 0x76, + 0xba, 0x18, 0x39, 0x23, 0x41, 0x18, 0x36, 0x1b, 0x24, 0x57, 0xc7, 0xce, 0x91, 0xfa, 0x28, 0xf9, + 0x1a, 0xf7, 0x32, 0xc2, 0x51, 0xba, 0x43, 0x61, 0x52, 0x46, 0x24, 0xb2, 0xf6, 0xcb, 0x19, 0x30, + 0xb9, 0x87, 0x8f, 0x0f, 0x70, 0x48, 0x5f, 0x69, 0xda, 0x05, 0x8d, 0x16, 0x76, 0x4a, 0x36, 0xa9, + 0x8b, 0x2e, 0x28, 0xe5, 0x06, 0x13, 0xa7, 0xaa, 0xe3, 0x16, 0x76, 0xf4, 0x86, 0x4d, 0xbf, 0x8b, + 0x18, 0x1c, 0xde, 0x03, 0xd3, 0xd9, 0x43, 0x7a, 0xac, 0x56, 0xab, 0x21, 0x6b, 0x59, 0xd3, 0x5b, + 0xcb, 0x9d, 0x76, 0x66, 0x51, 0x9c, 0xbe, 0xd4, 0xa5, 0xdb, 0xd5, 0x6a, 0xa8, 0xa1, 0x3e, 0x8e, + 0xe6, 0xf3, 0xb1, 0xed, 0x7a, 0x8d, 0xc0, 0xf5, 0xc9, 0x8e, 0x65, 0x95, 0x18, 0x79, 0x96, 0x91, + 0xa5, 0x7c, 0xd6, 0xba, 0x10, 0xbd, 0x4e, 0x48, 0x43, 0xa8, 0x0c, 0x12, 0x69, 0x3e, 0xb7, 0xec, + 0x08, 0xd3, 0x66, 0x8b, 0x93, 0x07, 0xe8, 0x81, 0x1d, 0x61, 0xd1, 0x9a, 0x05, 0x86, 0x7e, 0x84, + 0x74, 0x07, 0x66, 0x70, 0xc8, 0xf6, 0x5b, 0x4b, 0x7e, 0x84, 0x6c, 0xbf, 0x5e, 0x70, 0x28, 0xb6, + 0x2b, 0x83, 0xe1, 0x13, 0xb0, 0x40, 0x97, 0xfc, 0x54, 0x28, 0x85, 0x41, 0xeb, 0x54, 0xfd, 0x4c, + 0x61, 0x85, 0x78, 0xbb, 0xd3, 0xce, 0xa8, 0x92, 0x80, 0x38, 0x4f, 0x1a, 0x14, 0xa3, 0xa1, 0x24, + 0x0b, 0x66, 0xc1, 0x1c, 0x35, 0xd1, 0xef, 0x92, 0xcb, 0x7c, 0xce, 0x65, 0xa4, 0xcf, 0x8f, 0xc9, + 0xb0, 0xef, 0x59, 0x88, 0xc4, 0x19, 0xf4, 0x74, 0xeb, 0xab, 0x1a, 0x7e, 0x95, 0x25, 0x45, 0xfd, + 0x74, 0x3c, 0x79, 0x24, 0xc8, 0xe1, 0x60, 0x01, 0xd3, 0xd0, 0x10, 0x2e, 0xfc, 0x06, 0x1f, 0x88, + 0xd4, 0x5f, 0x53, 0x8d, 0x99, 0xbb, 0x33, 0x9b, 0x6c, 0xae, 0xda, 0xa4, 0x36, 0x79, 0x2c, 0xa2, + 0x82, 0x1a, 0xe2, 0xb3, 0xd3, 0xb6, 0xdc, 0x00, 0xe9, 0xf0, 0xa3, 0xfe, 0x90, 0x0f, 0x3c, 0x23, + 0xda, 0x28, 0x1d, 0x95, 0x62, 0x8d, 0x90, 0x72, 0xe2, 0x2a, 0xac, 0x2a, 0x3f, 0x3a, 0x53, 0x85, + 0x57, 0x26, 0xc1, 0xa1, 0x39, 0xed, 0x35, 0x49, 0x16, 0xca, 0x8f, 0x53, 0xc9, 0x23, 0x4d, 0x88, + 0xd0, 0x23, 0x96, 0x47, 0x12, 0x67, 0xc4, 0x24, 0x58, 0x1c, 0x3f, 0x39, 0x4b, 0x82, 0x87, 0x11, + 0x67, 0x40, 0x6b, 0xa0, 0x33, 0xb3, 0x58, 0x7e, 0xca, 0x85, 0xae, 0x77, 0xda, 0x99, 0x6b, 0x31, + 0x21, 0xe9, 0xb0, 0xe6, 0x21, 0x0d, 0xa3, 0x0f, 0x51, 0x65, 0xe1, 0xfd, 0xec, 0x0d, 0x54, 0x79, + 0x94, 0xc3, 0xe8, 0xf0, 0xc3, 0x7e, 0x3b, 0x63, 0x41, 0xfe, 0x2b, 0x35, 0xba, 0x9f, 0xf1, 0xe0, + 0x62, 0x78, 0x99, 0xcf, 0xc2, 0xf9, 0xf7, 0x19, 0x7c, 0x71, 0x78, 0xc8, 0x78, 0xf8, 0x5e, 0xaf, + 0x1f, 0xb2, 0xc7, 0xff, 0x27, 0x35, 0xb2, 0x21, 0xf2, 0xa7, 0xcb, 0x68, 0x89, 0xcc, 0x9e, 0xfd, + 0xdf, 0xd1, 0x64, 0xf1, 0x21, 0x4b, 0x68, 0x58, 0x48, 0x74, 0x53, 0xf6, 0xfc, 0x2f, 0x53, 0xe7, + 0xb5, 0x53, 0x1e, 0xc6, 0x20, 0x75, 0x40, 0x8f, 0x85, 0xf4, 0xbf, 0x73, 0xf5, 0x78, 0x64, 0x83, + 0x54, 0xed, 0x17, 0x73, 0x60, 0xd2, 0xc2, 0xac, 0xcb, 0x3e, 0x02, 0x73, 0xfc, 0x57, 0xf7, 0xfe, + 0xa1, 0x0c, 0x0c, 0x79, 0xcc, 0xad, 0xf7, 0xaf, 0x21, 0x71, 0x02, 0xed, 0x7f, 0xdc, 0x50, 0xc0, + 0xe4, 0xe3, 0x20, 0x3c, 0x12, 0x37, 0x18, 0xa9, 0x4c, 0x42, 0xc1, 0xe7, 0xfe, 0x9e, 0x80, 0xc0, + 0xc3, 0x6f, 0x02, 0xc0, 0x0d, 0xec, 0xa0, 0xe6, 0xbb, 0xba, 0xd4, 0x69, 0x67, 0x60, 0x8c, 0xcd, + 0x0f, 0x68, 0x09, 0x49, 0xe7, 0xca, 0x6d, 0xec, 0xd9, 0xa7, 0xa6, 0x4d, 0xb0, 0xef, 0x9c, 0x8a, + 0x4b, 0xcd, 0x9c, 0xfc, 0x59, 0x57, 0xa9, 0x5f, 0xf7, 0x38, 0x40, 0x3f, 0xa6, 0x73, 0x65, 0x9c, + 0x02, 0xbf, 0x03, 0xd2, 0x71, 0x0b, 0x3a, 0x61, 0xbd, 0x62, 0x4e, 0xee, 0x15, 0x49, 0x19, 0x3d, + 0x3c, 0xd1, 0xd0, 0x00, 0x0f, 0x7e, 0x04, 0x96, 0xf7, 0x1b, 0x55, 0x9b, 0xe0, 0x6a, 0x22, 0xae, + 0x39, 0x26, 0x78, 0xa3, 0xd3, 0xce, 0x64, 0xb8, 0x60, 0x93, 0xc3, 0xf4, 0xc1, 0xf8, 0x86, 0x2b, + 0xd0, 0x1c, 0xa1, 0xa0, 0xe9, 0x57, 0x4d, 0xf7, 0xd8, 0x25, 0xea, 0xf2, 0x9a, 0xb2, 0x3e, 0x21, + 0xe7, 0x28, 0xa4, 0x3e, 0xdd, 0xa3, 0x4e, 0x0d, 0x49, 0x48, 0x5a, 0x5e, 0xa3, 0xe5, 0x92, 0xa2, + 0x4f, 0x1b, 0x5b, 0x33, 0xc4, 0xea, 0xa5, 0x81, 0x46, 0xd0, 0x72, 0x89, 0x1e, 0xf8, 0x7a, 0x8d, + 0x03, 0x68, 0x23, 0x90, 0x09, 0x70, 0x07, 0xa4, 0x73, 0x81, 0x1f, 0xb1, 0x69, 0xdc, 0x39, 0xe5, + 0xd3, 0xc1, 0x4a, 0xb2, 0x29, 0x39, 0x7d, 0x44, 0x77, 0x32, 0x18, 0x60, 0xc1, 0xfb, 0x60, 0xc6, + 0xf0, 0xed, 0x03, 0x0f, 0x97, 0x1a, 0x61, 0x50, 0x13, 0x17, 0xa2, 0x95, 0x4e, 0x3b, 0xb3, 0x24, + 0x22, 0x61, 0x4e, 0xbd, 0x41, 0xbd, 0xb4, 0x33, 0xf6, 0xb1, 0xf0, 0x7d, 0x30, 0x2b, 0xe2, 0xc9, + 0xd9, 0x11, 0xee, 0x5e, 0x20, 0xa4, 0xaf, 0x51, 0x44, 0xaf, 0x3b, 0xd4, 0xad, 0xa1, 0x18, 0x9a, + 0xbe, 0x28, 0x62, 0xcd, 0xb2, 0xba, 0x47, 0x2f, 0x0e, 0x89, 0x17, 0xa5, 0xcb, 0xe7, 0x05, 0x61, + 0x2f, 0x4a, 0x9c, 0x42, 0x47, 0x5a, 0x61, 0x29, 0xd7, 0x9b, 0xb5, 0x9a, 0x87, 0xc5, 0x6d, 0x41, + 0x4a, 0x65, 0x57, 0x24, 0xe2, 0x80, 0xbe, 0x86, 0x60, 0xc0, 0x5d, 0x69, 0x32, 0xc9, 0x05, 0xc7, + 0xc7, 0xb6, 0x5f, 0x8d, 0x54, 0x2d, 0x79, 0xe1, 0xed, 0x4f, 0x26, 0x8e, 0xc0, 0xc8, 0x83, 0x49, + 0x97, 0x47, 0x77, 0x85, 0x9a, 0xbe, 0x8f, 0xc3, 0xde, 0x70, 0x75, 0x3b, 0xd9, 0xd5, 0x42, 0xe6, + 0x97, 0xc7, 0xab, 0x04, 0x85, 0xde, 0xc0, 0x8d, 0x16, 0xc1, 0xa1, 0x6f, 0x7b, 0x3d, 0x19, 0x3e, + 0x61, 0x4b, 0x01, 0x61, 0x81, 0x90, 0x85, 0x06, 0x68, 0xb4, 0xbc, 0x65, 0x12, 0xe2, 0x28, 0xb2, + 0x4e, 0x1b, 0x38, 0x52, 0x31, 0xdb, 0x96, 0x54, 0xde, 0x88, 0x39, 0x75, 0x42, 0xbd, 0x1a, 0x92, + 0xb1, 0xf4, 0x2d, 0xe5, 0xcb, 0x5d, 0x7c, 0x5a, 0x76, 0x3f, 0xc1, 0x6c, 0x6c, 0x9a, 0x90, 0x53, + 0x2b, 0xc8, 0xf4, 0xbc, 0x8d, 0xdc, 0x4f, 0xe8, 0x5b, 0x1a, 0x23, 0xd0, 0x71, 0x25, 0x66, 0x30, + 0xed, 0xf0, 0x10, 0xab, 0x87, 0x4c, 0x46, 0x9a, 0x62, 0x13, 0x32, 0xba, 0x47, 0x61, 0x1a, 0x1a, + 0xc2, 0x85, 0xcf, 0xc0, 0xc5, 0xbe, 0xb5, 0x59, 0xab, 0xb9, 0x2d, 0x64, 0xfb, 0x87, 0x58, 0xad, + 0x33, 0x4d, 0xad, 0xd3, 0xce, 0xac, 0x0e, 0x6a, 0x32, 0x9c, 0x1e, 0x52, 0xa0, 0x86, 0x86, 0xf2, + 0xe1, 0x77, 0xc1, 0xca, 0x30, 0xbb, 0xd5, 0xf2, 0x55, 0x97, 0x49, 0x4b, 0xd7, 0xd9, 0x11, 0xd2, + 0x3a, 0x69, 0xf9, 0x1a, 0x1a, 0x25, 0x43, 0xc7, 0xc8, 0x9e, 0xcb, 0x6a, 0xf9, 0xc5, 0x46, 0xa4, + 0x7e, 0x8f, 0x29, 0x4b, 0x25, 0x95, 0x94, 0x49, 0xcb, 0xd7, 0x83, 0x46, 0xa4, 0xa1, 0x24, 0xab, + 0x5f, 0x16, 0xde, 0xdd, 0x23, 0x3e, 0x8d, 0x4e, 0xc4, 0xae, 0x36, 0x5c, 0x87, 0xcf, 0x05, 0x51, + 0xaf, 0x2c, 0x82, 0x00, 0xdf, 0x05, 0xd3, 0xdc, 0xf0, 0xb4, 0x54, 0xe6, 0x43, 0xe8, 0x84, 0x3c, + 0xc0, 0x0b, 0xf6, 0x4b, 0xfa, 0xf4, 0x3e, 0x50, 0xfb, 0xbe, 0x02, 0xde, 0x42, 0xf8, 0x65, 0x13, + 0x47, 0x04, 0x6e, 0x82, 0xe9, 0x62, 0x03, 0x87, 0x36, 0x71, 0x03, 0x9f, 0xf5, 0xa6, 0xf9, 0xbb, + 0x69, 0x31, 0x39, 0xf6, 0xec, 0xa8, 0x0f, 0x81, 0x37, 0xbb, 0x57, 0x0f, 0x95, 0x8f, 0x99, 0x73, + 0x02, 0xcc, 0x8d, 0xa8, 0x7b, 0x2f, 0xb9, 0xd9, 0x6d, 0x80, 0xac, 0xdf, 0xf4, 0x61, 0xdc, 0x88, + 0x84, 0x53, 0x73, 0xc0, 0x14, 0xc2, 0x51, 0x23, 0xf0, 0x23, 0x0c, 0x55, 0xf0, 0x56, 0xb9, 0xe9, + 0x38, 0x38, 0x8a, 0x58, 0x1c, 0x53, 0xa8, 0xbb, 0x84, 0x97, 0xc0, 0x24, 0xbd, 0x5e, 0x36, 0x23, + 0xde, 0xfa, 0x90, 0x58, 0x49, 0xb1, 0xa4, 0xce, 0x88, 0x65, 0xe3, 0x2f, 0x8a, 0xb4, 0x47, 0x38, + 0x0f, 0x40, 0x21, 0x20, 0x65, 0x62, 0x87, 0x04, 0x57, 0xd3, 0x63, 0xf0, 0x22, 0x48, 0x8b, 0x3b, + 0x16, 0xb3, 0xd1, 0xb9, 0x38, 0xad, 0xc0, 0x05, 0x30, 0x83, 0x70, 0xd4, 0x33, 0x8c, 0xc3, 0x59, + 0x30, 0xb5, 0xeb, 0x7a, 0x1e, 0x5b, 0xa5, 0xa8, 0x9b, 0x1e, 0x18, 0xd9, 0xd0, 0xa9, 0xbb, 0x27, + 0x38, 0x7d, 0x81, 0xaa, 0x6c, 0xe3, 0x88, 0x84, 0xc1, 0x29, 0x45, 0xb0, 0xbb, 0x52, 0x7a, 0x02, + 0x5e, 0x06, 0xcb, 0x5b, 0x9e, 0xed, 0x1c, 0xd5, 0x03, 0x8f, 0xfd, 0x4d, 0xa4, 0x14, 0x84, 0xc4, + 0x6a, 0xa1, 0x56, 0xba, 0x0a, 0xaf, 0x82, 0x95, 0x7d, 0xff, 0x60, 0xa8, 0x13, 0xc3, 0x65, 0xb0, + 0xc8, 0x8e, 0xc5, 0x98, 0xb9, 0x06, 0x57, 0xc0, 0xd2, 0xbe, 0x5f, 0x1d, 0x70, 0x1c, 0x6e, 0xfc, + 0x63, 0x8a, 0xc7, 0x23, 0x4e, 0x64, 0xca, 0xdf, 0xcd, 0x9b, 0x66, 0xa5, 0x58, 0x30, 0x2a, 0x8f, + 0x8b, 0xa6, 0x59, 0x7c, 0x6e, 0xa0, 0xf4, 0x18, 0xfc, 0x1a, 0x58, 0x1f, 0x30, 0x57, 0xf6, 0x0b, + 0x56, 0xde, 0xac, 0x58, 0x28, 0xff, 0xe4, 0x89, 0x81, 0x2a, 0xe5, 0x42, 0xb6, 0x54, 0xde, 0x29, + 0x5a, 0x3c, 0x05, 0x0c, 0x6d, 0x1a, 0xd9, 0x6d, 0x03, 0xa5, 0xc7, 0xe1, 0x2d, 0xa0, 0x49, 0x86, + 0x51, 0xc4, 0x54, 0x8f, 0xf8, 0x74, 0xbf, 0x88, 0xf6, 0xf7, 0xd2, 0x17, 0x58, 0xee, 0xa8, 0x21, + 0x6b, 0x9a, 0xe9, 0x09, 0xb8, 0x01, 0x6e, 0x6d, 0x99, 0xd9, 0xdc, 0xee, 0x4e, 0xd1, 0x34, 0x2a, + 0x25, 0xc3, 0x40, 0x95, 0x52, 0x11, 0x59, 0x15, 0xeb, 0x45, 0x05, 0xbd, 0x88, 0x47, 0x5c, 0x85, + 0x59, 0xf0, 0xc1, 0x9b, 0x61, 0x47, 0x45, 0x83, 0xe1, 0x3b, 0x60, 0x6d, 0xb4, 0x84, 0xd8, 0x5b, + 0x0d, 0xbe, 0x07, 0xbe, 0x75, 0x1e, 0x6a, 0xd4, 0x23, 0x0e, 0xcf, 0x7e, 0x84, 0xc8, 0x42, 0x1d, + 0x5e, 0x07, 0xd7, 0x46, 0xa3, 0x68, 0x6a, 0x5c, 0xf8, 0x15, 0xa0, 0x6d, 0x1b, 0x66, 0xf6, 0xa3, + 0xb3, 0xd3, 0xf2, 0x4a, 0x81, 0x9b, 0xe0, 0x36, 0xca, 0x16, 0xb6, 0x8b, 0x7b, 0x95, 0x37, 0xc0, + 0x7f, 0xa6, 0xc0, 0x0f, 0xc1, 0xfd, 0xf3, 0x81, 0xa3, 0x36, 0xf8, 0xb9, 0x02, 0x0d, 0xf0, 0xe8, + 0x8d, 0x9f, 0x37, 0x4a, 0xe6, 0x37, 0x0a, 0xbc, 0x0e, 0xde, 0x1e, 0xce, 0x17, 0x75, 0xf8, 0xad, + 0x02, 0xd7, 0xc1, 0x8d, 0x33, 0x9f, 0x24, 0x90, 0xbf, 0x53, 0xe0, 0xb7, 0xc1, 0xbd, 0xb3, 0x20, + 0xa3, 0xc2, 0xf8, 0xbd, 0x02, 0x1f, 0x82, 0x07, 0x6f, 0xf0, 0x8c, 0x51, 0x02, 0x7f, 0x38, 0x63, + 0x1f, 0xa2, 0xd8, 0x5f, 0x9c, 0xbf, 0x0f, 0x81, 0xfc, 0xa3, 0x02, 0x57, 0xc1, 0xe5, 0xe1, 0x10, + 0xfa, 0x4e, 0xfc, 0x49, 0x81, 0x37, 0xc1, 0xda, 0x99, 0x4a, 0x14, 0xf6, 0x67, 0x05, 0xaa, 0x60, + 0xa9, 0x50, 0xac, 0x3c, 0xce, 0xe6, 0xcd, 0xca, 0xf3, 0xbc, 0xb5, 0x53, 0x29, 0x5b, 0xc8, 0x28, + 0x97, 0xd3, 0xbf, 0x1a, 0xa7, 0xa1, 0xc4, 0x3c, 0x85, 0xa2, 0x70, 0x56, 0x1e, 0x17, 0x51, 0xc5, + 0xcc, 0x3f, 0x33, 0x0a, 0x14, 0xf9, 0xe9, 0x38, 0x5c, 0x00, 0x80, 0xc2, 0x4a, 0xc5, 0x7c, 0xc1, + 0x2a, 0xa7, 0x7f, 0x90, 0x82, 0x73, 0x60, 0xca, 0x78, 0x61, 0x19, 0xa8, 0x90, 0x35, 0xd3, 0xff, + 0x4c, 0x6d, 0x04, 0x00, 0xf4, 0xc7, 0x0a, 0x38, 0x09, 0xc6, 0x77, 0x9f, 0xa5, 0xc7, 0xe0, 0x34, + 0x98, 0x30, 0x8d, 0x6c, 0xd9, 0x48, 0x2b, 0x70, 0x09, 0x2c, 0x18, 0xa6, 0x91, 0xb3, 0xf2, 0xc5, + 0x42, 0x05, 0xed, 0x17, 0x0a, 0xec, 0xdc, 0x48, 0x83, 0xd9, 0xe7, 0x59, 0x2b, 0xb7, 0xd3, 0xb5, + 0xa4, 0xe8, 0xf9, 0x64, 0x16, 0x73, 0xbb, 0x15, 0x94, 0xcd, 0x19, 0xa8, 0x6b, 0xbe, 0x40, 0x81, + 0x4c, 0xa8, 0x6b, 0x99, 0xb8, 0xfb, 0x10, 0x4c, 0x5b, 0xa1, 0xed, 0x47, 0x8d, 0x20, 0x24, 0xf0, + 0xae, 0xbc, 0x98, 0x17, 0x67, 0xbd, 0xe8, 0x63, 0x57, 0x16, 0x7a, 0x6b, 0xde, 0x4e, 0xb4, 0xb1, + 0x75, 0xe5, 0xeb, 0xca, 0xd6, 0xc5, 0x57, 0x7f, 0x5b, 0x1d, 0x7b, 0xf5, 0x7a, 0x55, 0xf9, 0xe2, + 0xf5, 0xaa, 0xf2, 0xd7, 0xd7, 0xab, 0xca, 0xcf, 0xff, 0xbe, 0x3a, 0x76, 0x30, 0xc9, 0xfe, 0x87, + 0x74, 0xef, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x10, 0x53, 0x17, 0x6b, 0x8c, 0x1a, 0x00, 0x00, } diff --git a/tools/functional-tester/rpcpb/rpc.proto b/tools/functional-tester/rpcpb/rpc.proto index 258e264cf6f..3a0845b46ea 100644 --- a/tools/functional-tester/rpcpb/rpc.proto +++ b/tools/functional-tester/rpcpb/rpc.proto @@ -103,17 +103,23 @@ message Member { // ClientCertData contains cert file contents from this member's etcd server. string ClientCertData = 401 [(gogoproto.moretags) = "yaml:\"client-cert-data\""]; + string ClientCertPath = 402 [(gogoproto.moretags) = "yaml:\"client-cert-path\""]; // ClientKeyData contains key file contents from this member's etcd server. - string ClientKeyData = 402 [(gogoproto.moretags) = "yaml:\"client-key-data\""]; + string ClientKeyData = 403 [(gogoproto.moretags) = "yaml:\"client-key-data\""]; + string ClientKeyPath = 404 [(gogoproto.moretags) = "yaml:\"client-key-path\""]; // ClientTrustedCAData contains trusted CA file contents from this member's etcd server. - string ClientTrustedCAData = 403 [(gogoproto.moretags) = "yaml:\"client-trusted-ca-data\""]; + string ClientTrustedCAData = 405 [(gogoproto.moretags) = "yaml:\"client-trusted-ca-data\""]; + string ClientTrustedCAPath = 406 [(gogoproto.moretags) = "yaml:\"client-trusted-ca-path\""]; // PeerCertData contains cert file contents from this member's etcd server. string PeerCertData = 501 [(gogoproto.moretags) = "yaml:\"peer-cert-data\""]; + string PeerCertPath = 502 [(gogoproto.moretags) = "yaml:\"peer-cert-path\""]; // PeerKeyData contains key file contents from this member's etcd server. - string PeerKeyData = 502 [(gogoproto.moretags) = "yaml:\"peer-key-data\""]; + string PeerKeyData = 503 [(gogoproto.moretags) = "yaml:\"peer-key-data\""]; + string PeerKeyPath = 504 [(gogoproto.moretags) = "yaml:\"peer-key-path\""]; // PeerTrustedCAData contains trusted CA file contents from this member's etcd server. - string PeerTrustedCAData = 503 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-data\""]; + string PeerTrustedCAData = 505 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-data\""]; + string PeerTrustedCAPath = 506 [(gogoproto.moretags) = "yaml:\"peer-trusted-ca-path\""]; } enum FailureCase { @@ -165,8 +171,9 @@ enum StressType { } message Tester { - string TesterNetwork = 1 [(gogoproto.moretags) = "yaml:\"tester-network\""]; - string TesterAddr = 2 [(gogoproto.moretags) = "yaml:\"tester-addr\""]; + string TesterDataDir = 1 [(gogoproto.moretags) = "yaml:\"tester-data-dir\""]; + string TesterNetwork = 2 [(gogoproto.moretags) = "yaml:\"tester-network\""]; + string TesterAddr = 3 [(gogoproto.moretags) = "yaml:\"tester-addr\""]; // DelayLatencyMsRv is the delay latency in milliseconds, // to inject to simulated slow network. From 4998db4e6408d212ae775f9dcced659237eedeb9 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 15:34:03 -0700 Subject: [PATCH 11/14] functional-tester/tester: send TLS client requests, cleanup Signed-off-by: Gyuho Lee --- tools/functional-tester/tester/cluster.go | 87 +++++++++++++++++-- .../functional-tester/tester/cluster_test.go | 4 +- .../tester/cluster_tester.go | 12 ++- .../functional-tester/tester/local-test.yaml | 4 +- 4 files changed, 94 insertions(+), 13 deletions(-) diff --git a/tools/functional-tester/tester/cluster.go b/tools/functional-tester/tester/cluster.go index 5a1e178c0a6..68b54bce1ee 100644 --- a/tools/functional-tester/tester/cluster.go +++ b/tools/functional-tester/tester/cluster.go @@ -27,6 +27,7 @@ import ( "time" "github.com/coreos/etcd/pkg/debugutil" + "github.com/coreos/etcd/pkg/fileutil" "github.com/coreos/etcd/tools/functional-tester/rpcpb" "github.com/prometheus/client_golang/prometheus/promhttp" @@ -201,7 +202,8 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { if mem.Etcd.ClientAutoTLS || mem.Etcd.ClientCertFile != "" { for _, cu := range mem.Etcd.ListenClientURLs { - u, err := url.Parse(cu) + var u *url.URL + u, err = url.Parse(cu) if err != nil { return nil, err } @@ -210,7 +212,8 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { } } for _, cu := range mem.Etcd.AdvertiseClientURLs { - u, err := url.Parse(cu) + var u *url.URL + u, err = url.Parse(cu) if err != nil { return nil, err } @@ -221,7 +224,8 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { } if mem.Etcd.PeerAutoTLS || mem.Etcd.PeerCertFile != "" { for _, cu := range mem.Etcd.ListenPeerURLs { - u, err := url.Parse(cu) + var u *url.URL + u, err = url.Parse(cu) if err != nil { return nil, err } @@ -230,7 +234,8 @@ func newCluster(lg *zap.Logger, fpath string) (*Cluster, error) { } } for _, cu := range mem.Etcd.AdvertisePeerURLs { - u, err := url.Parse(cu) + var u *url.URL + u, err = url.Parse(cu) if err != nil { return nil, err } @@ -619,9 +624,79 @@ func (clus *Cluster) sendOperation(idx int, op rpcpb.Operation) error { } if !resp.Success { - err = errors.New(resp.Status) + return errors.New(resp.Status) } - return err + + m, secure := clus.Members[idx], false + for _, cu := range m.Etcd.AdvertiseClientURLs { + u, err := url.Parse(cu) + if err != nil { + return err + } + if u.Scheme == "https" { // TODO: handle unix + secure = true + } + } + + // store TLS assets from agents/servers onto disk + if secure && (op == rpcpb.Operation_InitialStartEtcd || op == rpcpb.Operation_RestartEtcd) { + dirClient := filepath.Join( + clus.Tester.TesterDataDir, + clus.Members[idx].Etcd.Name, + "fixtures", + "client", + ) + if err = fileutil.TouchDirAll(dirClient); err != nil { + return err + } + + clientCertData := []byte(resp.Member.ClientCertData) + if len(clientCertData) == 0 { + return fmt.Errorf("got empty client cert from %q", m.EtcdClientEndpoint) + } + clientCertPath := filepath.Join(dirClient, "cert.pem") + if err = ioutil.WriteFile(clientCertPath, clientCertData, 0644); err != nil { // overwrite if exists + return err + } + resp.Member.ClientCertPath = clientCertPath + clus.lg.Info( + "saved client cert file", + zap.String("path", clientCertPath), + ) + + clientKeyData := []byte(resp.Member.ClientKeyData) + if len(clientKeyData) == 0 { + return fmt.Errorf("got empty client key from %q", m.EtcdClientEndpoint) + } + clientKeyPath := filepath.Join(dirClient, "key.pem") + if err = ioutil.WriteFile(clientKeyPath, clientKeyData, 0644); err != nil { // overwrite if exists + return err + } + resp.Member.ClientKeyPath = clientKeyPath + clus.lg.Info( + "saved client key file", + zap.String("path", clientKeyPath), + ) + + clientTrustedCAData := []byte(resp.Member.ClientTrustedCAData) + if len(clientTrustedCAData) != 0 { + // TODO: disable this when auto TLS is deprecated + clientTrustedCAPath := filepath.Join(dirClient, "ca.pem") + if err = ioutil.WriteFile(clientTrustedCAPath, clientTrustedCAData, 0644); err != nil { // overwrite if exists + return err + } + resp.Member.ClientTrustedCAPath = clientTrustedCAPath + clus.lg.Info( + "saved client trusted CA file", + zap.String("path", clientTrustedCAPath), + ) + } + + // no need to store peer certs for tester clients + + clus.Members[idx] = resp.Member + } + return nil } // DestroyEtcdAgents terminates all tester connections to agents and etcd servers. diff --git a/tools/functional-tester/tester/cluster_test.go b/tools/functional-tester/tester/cluster_test.go index 1a5d88ab63d..e2b34e9e4de 100644 --- a/tools/functional-tester/tester/cluster_test.go +++ b/tools/functional-tester/tester/cluster_test.go @@ -33,7 +33,6 @@ func Test_newCluster(t *testing.T) { FailpointHTTPAddr: "http://127.0.0.1:7381", BaseDir: "/tmp/etcd-agent-data-1", EtcdLogPath: "/tmp/etcd-agent-data-1/current-etcd.log", - EtcdClientTLS: false, EtcdClientProxy: false, EtcdPeerProxy: true, EtcdClientEndpoint: "127.0.0.1:1379", @@ -72,7 +71,6 @@ func Test_newCluster(t *testing.T) { FailpointHTTPAddr: "http://127.0.0.1:7382", BaseDir: "/tmp/etcd-agent-data-2", EtcdLogPath: "/tmp/etcd-agent-data-2/current-etcd.log", - EtcdClientTLS: false, EtcdClientProxy: false, EtcdPeerProxy: true, EtcdClientEndpoint: "127.0.0.1:2379", @@ -111,7 +109,6 @@ func Test_newCluster(t *testing.T) { FailpointHTTPAddr: "http://127.0.0.1:7383", BaseDir: "/tmp/etcd-agent-data-3", EtcdLogPath: "/tmp/etcd-agent-data-3/current-etcd.log", - EtcdClientTLS: false, EtcdClientProxy: false, EtcdPeerProxy: true, EtcdClientEndpoint: "127.0.0.1:3379", @@ -146,6 +143,7 @@ func Test_newCluster(t *testing.T) { }, }, Tester: &rpcpb.Tester{ + TesterDataDir: "/tmp/etcd-tester-data", TesterNetwork: "tcp", TesterAddr: "127.0.0.1:9028", DelayLatencyMs: 5000, diff --git a/tools/functional-tester/tester/cluster_tester.go b/tools/functional-tester/tester/cluster_tester.go index 1db87a4572f..b30c568dc60 100644 --- a/tools/functional-tester/tester/cluster_tester.go +++ b/tools/functional-tester/tester/cluster_tester.go @@ -19,6 +19,7 @@ import ( "os" "time" + "github.com/coreos/etcd/pkg/fileutil" "github.com/coreos/etcd/tools/functional-tester/rpcpb" "go.uber.org/zap" @@ -30,7 +31,13 @@ const compactQPS = 50000 // StartTester starts tester. func (clus *Cluster) StartTester() { - // TODO: upate status + if err := fileutil.TouchDirAll(clus.Tester.TesterDataDir); err != nil { + clus.lg.Panic( + "failed to create test data directory", + zap.String("dir", clus.Tester.TesterDataDir), + zap.Error(err), + ) + } var preModifiedKey int64 for round := 0; round < int(clus.Tester.RoundLimit) || clus.Tester.RoundLimit == -1; round++ { @@ -124,6 +131,7 @@ func (clus *Cluster) doRound() error { zap.Int("round", clus.rd), zap.Int("case", clus.cs), zap.String("desc", fa.Desc()), + zap.Int("total-failures", len(clus.failures)), ) clus.lg.Info("wait health before injecting failures") @@ -208,6 +216,7 @@ func (clus *Cluster) doRound() error { zap.Int("round", clus.rd), zap.Int("case", clus.cs), zap.String("desc", fa.Desc()), + zap.Int("total-failures", len(clus.failures)), zap.Duration("took", time.Since(caseNow)), ) } @@ -216,6 +225,7 @@ func (clus *Cluster) doRound() error { "round ALL PASS", zap.Int("round", clus.rd), zap.Strings("failures", clus.failureStrings()), + zap.Int("total-failures", len(clus.failures)), zap.Duration("took", time.Since(roundNow)), ) return nil diff --git a/tools/functional-tester/tester/local-test.yaml b/tools/functional-tester/tester/local-test.yaml index 8cd09d84ba2..aab38036f33 100644 --- a/tools/functional-tester/tester/local-test.yaml +++ b/tools/functional-tester/tester/local-test.yaml @@ -4,7 +4,6 @@ agent-configs: failpoint-http-addr: http://127.0.0.1:7381 base-dir: /tmp/etcd-agent-data-1 etcd-log-path: /tmp/etcd-agent-data-1/current-etcd.log - etcd-client-tls: false etcd-client-proxy: false etcd-peer-proxy: true etcd-client-endpoint: 127.0.0.1:1379 @@ -40,7 +39,6 @@ agent-configs: failpoint-http-addr: http://127.0.0.1:7382 base-dir: /tmp/etcd-agent-data-2 etcd-log-path: /tmp/etcd-agent-data-2/current-etcd.log - etcd-client-tls: false etcd-client-proxy: false etcd-peer-proxy: true etcd-client-endpoint: 127.0.0.1:2379 @@ -76,7 +74,6 @@ agent-configs: failpoint-http-addr: http://127.0.0.1:7383 base-dir: /tmp/etcd-agent-data-3 etcd-log-path: /tmp/etcd-agent-data-3/current-etcd.log - etcd-client-tls: false etcd-client-proxy: false etcd-peer-proxy: true etcd-client-endpoint: 127.0.0.1:3379 @@ -109,6 +106,7 @@ agent-configs: initial-corrupt-check: true tester-config: + tester-data-dir: /tmp/etcd-tester-data tester-network: tcp tester-addr: 127.0.0.1:9028 From 31a4b692ee165ae72337ea7566b40341222c4bcb Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 15:41:37 -0700 Subject: [PATCH 12/14] functional-tester/agent: wait before loading TLS Signed-off-by: Gyuho Lee --- tools/functional-tester/agent/handler.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tools/functional-tester/agent/handler.go b/tools/functional-tester/agent/handler.go index fd53ea52d00..182bc2e8e9f 100644 --- a/tools/functional-tester/agent/handler.go +++ b/tools/functional-tester/agent/handler.go @@ -275,8 +275,17 @@ func (srv *Server) saveTLSAssets() error { func (srv *Server) loadAutoTLSAssets() error { // if started with auto TLS, sends back TLS assets to tester/client if srv.Member.Etcd.ClientAutoTLS { + // in case of slow disk + time.Sleep(time.Second) + fdir := filepath.Join(srv.Member.Etcd.DataDir, "fixtures", "client") + srv.lg.Info( + "loading client TLS assets", + zap.String("dir", fdir), + zap.String("endpoint", srv.EtcdClientEndpoint), + ) + certPath := filepath.Join(fdir, "cert.pem") if !fileutil.Exist(certPath) { return fmt.Errorf("cannot find %q", certPath) @@ -306,8 +315,17 @@ func (srv *Server) loadAutoTLSAssets() error { ) } if srv.Member.Etcd.ClientAutoTLS { + // in case of slow disk + time.Sleep(time.Second) + fdir := filepath.Join(srv.Member.Etcd.DataDir, "fixtures", "peer") + srv.lg.Info( + "loading client TLS assets", + zap.String("dir", fdir), + zap.String("endpoint", srv.EtcdClientEndpoint), + ) + certPath := filepath.Join(fdir, "cert.pem") if !fileutil.Exist(certPath) { return fmt.Errorf("cannot find %q", certPath) From 62e512d4cc1344f8ffab9b2480b00bca17e7bb49 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 15:49:50 -0700 Subject: [PATCH 13/14] functional-tester/rpcpb: create client with "InsecureSkipVerify" Signed-off-by: Gyuho Lee --- tools/functional-tester/rpcpb/member.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/functional-tester/rpcpb/member.go b/tools/functional-tester/rpcpb/member.go index e79c5bc8f7b..fede9f00c8c 100644 --- a/tools/functional-tester/rpcpb/member.go +++ b/tools/functional-tester/rpcpb/member.go @@ -52,6 +52,10 @@ func (m *Member) DialEtcdGRPCServer(opts ...grpc.DialOption) (*grpc.ClientConn, CertFile: m.ClientCertPath, KeyFile: m.ClientKeyPath, TrustedCAFile: m.ClientTrustedCAPath, + + // TODO: remove this with generated certs + // only need it for auto TLS + InsecureSkipVerify: true, } tlsConfig, err := tlsInfo.ClientConfig() if err != nil { @@ -90,6 +94,10 @@ func (m *Member) CreateEtcdClient(opts ...grpc.DialOption) (*clientv3.Client, er CertFile: m.ClientCertPath, KeyFile: m.ClientKeyPath, TrustedCAFile: m.ClientTrustedCAPath, + + // TODO: remove this with generated certs + // only need it for auto TLS + InsecureSkipVerify: true, } tlsConfig, err := tlsInfo.ClientConfig() if err != nil { From a0b094ca89b7f99100cdadac925e01a3e655aaed Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Thu, 5 Apr 2018 15:52:19 -0700 Subject: [PATCH 14/14] functional-tester/agent: add TODO for proxy TLS Signed-off-by: Gyuho Lee --- tools/functional-tester/agent/handler.go | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/functional-tester/agent/handler.go b/tools/functional-tester/agent/handler.go index 182bc2e8e9f..a69e013e73a 100644 --- a/tools/functional-tester/agent/handler.go +++ b/tools/functional-tester/agent/handler.go @@ -118,6 +118,7 @@ func (srv *Server) handleInitialStartEtcd(req *rpcpb.Request) (*rpcpb.Response, }, nil } +// TODO: support TLS func (srv *Server) startProxy() error { if srv.Member.EtcdClientProxy { advertiseClientURL, advertiseClientURLPort, err := getURLAndPort(srv.Member.Etcd.AdvertiseClientURLs[0])