Browse code

vendor: update swarmkit to 6478bc19

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>

Tonis Tiigi authored on 2016/07/09 03:41:07
Showing 19 changed files
... ...
@@ -139,7 +139,7 @@ clone git github.com/docker/docker-credential-helpers v0.3.0
139 139
 clone git github.com/docker/containerd 1b3a81545ca79456086dc2aa424357be98b962ee
140 140
 
141 141
 # cluster
142
-clone git github.com/docker/swarmkit 16fa595d3b6fec012830179dc8e9b2d90335527d
142
+clone git github.com/docker/swarmkit 6478bc19cf4bc1d7ba2d6f04ccaacf099508f4a0
143 143
 clone git github.com/golang/mock bd3c8e81be01eef76d4b503f5e687d2d1354d2d9
144 144
 clone git github.com/gogo/protobuf 43a2e0b1c32252bfbbdf81f7faa7a88fb3fa4028
145 145
 clone git github.com/cloudflare/cfssl b895b0549c0ff676f92cf09ba971ae02bb41367b
... ...
@@ -197,6 +197,11 @@ func (a *Agent) run(ctx context.Context) {
197 197
 			sessionq = nil
198 198
 			// if we're here before <-registered, do nothing for that event
199 199
 			registered = nil
200
+
201
+			// Bounce the connection.
202
+			if a.config.Picker != nil {
203
+				a.config.Picker.Reset()
204
+			}
200 205
 		case <-session.closed:
201 206
 			log.G(ctx).Debugf("agent: rebuild session")
202 207
 
... ...
@@ -19,9 +19,15 @@ type Config struct {
19 19
 	// updated with managers weights as observed by the agent.
20 20
 	Managers picker.Remotes
21 21
 
22
-	// Conn specifies the client connection Agent will use
22
+	// Conn specifies the client connection Agent will use.
23 23
 	Conn *grpc.ClientConn
24 24
 
25
+	// Picker is the picker used by Conn.
26
+	// TODO(aaronl): This is only part of the config to allow resetting the
27
+	// GRPC connection. This should be refactored to address the coupling
28
+	// between Conn and Picker.
29
+	Picker *picker.Picker
30
+
25 31
 	// Executor specifies the executor to use for the agent.
26 32
 	Executor exec.Executor
27 33
 
... ...
@@ -375,8 +375,9 @@ func (n *Node) runAgent(ctx context.Context, db *bolt.DB, creds credentials.Tran
375 375
 	if ctx.Err() != nil {
376 376
 		return ctx.Err()
377 377
 	}
378
+	picker := picker.NewPicker(n.remotes, manager.Addr)
378 379
 	conn, err := grpc.Dial(manager.Addr,
379
-		grpc.WithPicker(picker.NewPicker(n.remotes, manager.Addr)),
380
+		grpc.WithPicker(picker),
380 381
 		grpc.WithTransportCredentials(creds),
381 382
 		grpc.WithBackoffMaxDelay(maxSessionFailureBackoff))
382 383
 	if err != nil {
... ...
@@ -389,6 +390,7 @@ func (n *Node) runAgent(ctx context.Context, db *bolt.DB, creds credentials.Tran
389 389
 		Executor:         n.config.Executor,
390 390
 		DB:               db,
391 391
 		Conn:             conn,
392
+		Picker:           picker,
392 393
 		NotifyRoleChange: n.roleChangeReq,
393 394
 	})
394 395
 	if err != nil {
... ...
@@ -12,6 +12,8 @@ import (
12 12
 	"google.golang.org/grpc/codes"
13 13
 )
14 14
 
15
+const dispatcherRPCTimeout = 5 * time.Second
16
+
15 17
 var (
16 18
 	errSessionDisconnect = errors.New("agent: session disconnect") // instructed to disconnect
17 19
 	errSessionClosed     = errors.New("agent: session closed")
... ...
@@ -88,16 +90,39 @@ func (s *session) start(ctx context.Context) error {
88 88
 		description.Hostname = s.agent.config.Hostname
89 89
 	}
90 90
 
91
-	stream, err := client.Session(ctx, &api.SessionRequest{
92
-		Description: description,
93
-	})
94
-	if err != nil {
95
-		return err
96
-	}
91
+	errChan := make(chan error, 1)
92
+	var (
93
+		msg    *api.SessionMessage
94
+		stream api.Dispatcher_SessionClient
95
+	)
96
+	// Note: we don't defer cancellation of this context, because the
97
+	// streaming RPC is used after this function returned. We only cancel
98
+	// it in the timeout case to make sure the goroutine completes.
99
+	sessionCtx, cancelSession := context.WithCancel(ctx)
100
+
101
+	// Need to run Session in a goroutine since there's no way to set a
102
+	// timeout for an individual Recv call in a stream.
103
+	go func() {
104
+		stream, err = client.Session(sessionCtx, &api.SessionRequest{
105
+			Description: description,
106
+		})
107
+		if err != nil {
108
+			errChan <- err
109
+			return
110
+		}
97 111
 
98
-	msg, err := stream.Recv()
99
-	if err != nil {
100
-		return err
112
+		msg, err = stream.Recv()
113
+		errChan <- err
114
+	}()
115
+
116
+	select {
117
+	case err := <-errChan:
118
+		if err != nil {
119
+			return err
120
+		}
121
+	case <-time.After(dispatcherRPCTimeout):
122
+		cancelSession()
123
+		return errors.New("session initiation timed out")
101 124
 	}
102 125
 
103 126
 	s.sessionID = msg.SessionID
... ...
@@ -115,9 +140,11 @@ func (s *session) heartbeat(ctx context.Context) error {
115 115
 	for {
116 116
 		select {
117 117
 		case <-heartbeat.C:
118
-			resp, err := client.Heartbeat(ctx, &api.HeartbeatRequest{
118
+			heartbeatCtx, cancel := context.WithTimeout(ctx, dispatcherRPCTimeout)
119
+			resp, err := client.Heartbeat(heartbeatCtx, &api.HeartbeatRequest{
119 120
 				SessionID: s.sessionID,
120 121
 			})
122
+			cancel()
121 123
 			if err != nil {
122 124
 				if grpc.Code(err) == codes.NotFound {
123 125
 					err = errNodeNotRegistered
... ...
@@ -159,6 +159,15 @@ type Task struct {
159 159
 	// A copy of runtime state of service endpoint from Service
160 160
 	// object to be distributed to agents as part of the task.
161 161
 	Endpoint *Endpoint `protobuf:"bytes,12,opt,name=endpoint" json:"endpoint,omitempty"`
162
+	// LogDriver specifies the selected log driver to use for the task. Agent
163
+	// processes should always favor the value in this field.
164
+	//
165
+	// If present in the TaskSpec, this will be a copy of that value. The
166
+	// orchestrator may choose to insert a value here, which should be honored,
167
+	// such a cluster default or policy-based value.
168
+	//
169
+	// If not present, the daemon's default will be used.
170
+	LogDriver *Driver `protobuf:"bytes,13,opt,name=log_driver,json=logDriver" json:"log_driver,omitempty"`
162 171
 }
163 172
 
164 173
 func (m *Task) Reset()                    { *m = Task{} }
... ...
@@ -334,6 +343,7 @@ func (m *Task) Copy() *Task {
334 334
 		Status:             *m.Status.Copy(),
335 335
 		DesiredState:       m.DesiredState,
336 336
 		Endpoint:           m.Endpoint.Copy(),
337
+		LogDriver:          m.LogDriver.Copy(),
337 338
 	}
338 339
 
339 340
 	if m.Networks != nil {
... ...
@@ -498,7 +508,7 @@ func (this *Task) GoString() string {
498 498
 	if this == nil {
499 499
 		return "nil"
500 500
 	}
501
-	s := make([]string, 0, 16)
501
+	s := make([]string, 0, 17)
502 502
 	s = append(s, "&api.Task{")
503 503
 	s = append(s, "ID: "+fmt.Sprintf("%#v", this.ID)+",\n")
504 504
 	s = append(s, "Meta: "+strings.Replace(this.Meta.GoString(), `&`, ``, 1)+",\n")
... ...
@@ -516,6 +526,9 @@ func (this *Task) GoString() string {
516 516
 	if this.Endpoint != nil {
517 517
 		s = append(s, "Endpoint: "+fmt.Sprintf("%#v", this.Endpoint)+",\n")
518 518
 	}
519
+	if this.LogDriver != nil {
520
+		s = append(s, "LogDriver: "+fmt.Sprintf("%#v", this.LogDriver)+",\n")
521
+	}
519 522
 	s = append(s, "}")
520 523
 	return strings.Join(s, "")
521 524
 }
... ...
@@ -962,6 +975,16 @@ func (m *Task) MarshalTo(data []byte) (int, error) {
962 962
 		}
963 963
 		i += n20
964 964
 	}
965
+	if m.LogDriver != nil {
966
+		data[i] = 0x6a
967
+		i++
968
+		i = encodeVarintObjects(data, i, uint64(m.LogDriver.Size()))
969
+		n21, err := m.LogDriver.MarshalTo(data[i:])
970
+		if err != nil {
971
+			return 0, err
972
+		}
973
+		i += n21
974
+	}
965 975
 	return i, nil
966 976
 }
967 977
 
... ...
@@ -984,11 +1007,11 @@ func (m *NetworkAttachment) MarshalTo(data []byte) (int, error) {
984 984
 		data[i] = 0xa
985 985
 		i++
986 986
 		i = encodeVarintObjects(data, i, uint64(m.Network.Size()))
987
-		n21, err := m.Network.MarshalTo(data[i:])
987
+		n22, err := m.Network.MarshalTo(data[i:])
988 988
 		if err != nil {
989 989
 			return 0, err
990 990
 		}
991
-		i += n21
991
+		i += n22
992 992
 	}
993 993
 	if len(m.Addresses) > 0 {
994 994
 		for _, s := range m.Addresses {
... ...
@@ -1047,38 +1070,38 @@ func (m *Network) MarshalTo(data []byte) (int, error) {
1047 1047
 	data[i] = 0x12
1048 1048
 	i++
1049 1049
 	i = encodeVarintObjects(data, i, uint64(m.Meta.Size()))
1050
-	n22, err := m.Meta.MarshalTo(data[i:])
1050
+	n23, err := m.Meta.MarshalTo(data[i:])
1051 1051
 	if err != nil {
1052 1052
 		return 0, err
1053 1053
 	}
1054
-	i += n22
1054
+	i += n23
1055 1055
 	data[i] = 0x1a
1056 1056
 	i++
1057 1057
 	i = encodeVarintObjects(data, i, uint64(m.Spec.Size()))
1058
-	n23, err := m.Spec.MarshalTo(data[i:])
1058
+	n24, err := m.Spec.MarshalTo(data[i:])
1059 1059
 	if err != nil {
1060 1060
 		return 0, err
1061 1061
 	}
1062
-	i += n23
1062
+	i += n24
1063 1063
 	if m.DriverState != nil {
1064 1064
 		data[i] = 0x22
1065 1065
 		i++
1066 1066
 		i = encodeVarintObjects(data, i, uint64(m.DriverState.Size()))
1067
-		n24, err := m.DriverState.MarshalTo(data[i:])
1067
+		n25, err := m.DriverState.MarshalTo(data[i:])
1068 1068
 		if err != nil {
1069 1069
 			return 0, err
1070 1070
 		}
1071
-		i += n24
1071
+		i += n25
1072 1072
 	}
1073 1073
 	if m.IPAM != nil {
1074 1074
 		data[i] = 0x2a
1075 1075
 		i++
1076 1076
 		i = encodeVarintObjects(data, i, uint64(m.IPAM.Size()))
1077
-		n25, err := m.IPAM.MarshalTo(data[i:])
1077
+		n26, err := m.IPAM.MarshalTo(data[i:])
1078 1078
 		if err != nil {
1079 1079
 			return 0, err
1080 1080
 		}
1081
-		i += n25
1081
+		i += n26
1082 1082
 	}
1083 1083
 	return i, nil
1084 1084
 }
... ...
@@ -1107,27 +1130,27 @@ func (m *Cluster) MarshalTo(data []byte) (int, error) {
1107 1107
 	data[i] = 0x12
1108 1108
 	i++
1109 1109
 	i = encodeVarintObjects(data, i, uint64(m.Meta.Size()))
1110
-	n26, err := m.Meta.MarshalTo(data[i:])
1110
+	n27, err := m.Meta.MarshalTo(data[i:])
1111 1111
 	if err != nil {
1112 1112
 		return 0, err
1113 1113
 	}
1114
-	i += n26
1114
+	i += n27
1115 1115
 	data[i] = 0x1a
1116 1116
 	i++
1117 1117
 	i = encodeVarintObjects(data, i, uint64(m.Spec.Size()))
1118
-	n27, err := m.Spec.MarshalTo(data[i:])
1118
+	n28, err := m.Spec.MarshalTo(data[i:])
1119 1119
 	if err != nil {
1120 1120
 		return 0, err
1121 1121
 	}
1122
-	i += n27
1122
+	i += n28
1123 1123
 	data[i] = 0x22
1124 1124
 	i++
1125 1125
 	i = encodeVarintObjects(data, i, uint64(m.RootCA.Size()))
1126
-	n28, err := m.RootCA.MarshalTo(data[i:])
1126
+	n29, err := m.RootCA.MarshalTo(data[i:])
1127 1127
 	if err != nil {
1128 1128
 		return 0, err
1129 1129
 	}
1130
-	i += n28
1130
+	i += n29
1131 1131
 	if len(m.NetworkBootstrapKeys) > 0 {
1132 1132
 		for _, msg := range m.NetworkBootstrapKeys {
1133 1133
 			data[i] = 0x2a
... ...
@@ -1317,6 +1340,10 @@ func (m *Task) Size() (n int) {
1317 1317
 		l = m.Endpoint.Size()
1318 1318
 		n += 1 + l + sovObjects(uint64(l))
1319 1319
 	}
1320
+	if m.LogDriver != nil {
1321
+		l = m.LogDriver.Size()
1322
+		n += 1 + l + sovObjects(uint64(l))
1323
+	}
1320 1324
 	return n
1321 1325
 }
1322 1326
 
... ...
@@ -1484,6 +1511,7 @@ func (this *Task) String() string {
1484 1484
 		`DesiredState:` + fmt.Sprintf("%v", this.DesiredState) + `,`,
1485 1485
 		`Networks:` + strings.Replace(fmt.Sprintf("%v", this.Networks), "NetworkAttachment", "NetworkAttachment", 1) + `,`,
1486 1486
 		`Endpoint:` + strings.Replace(fmt.Sprintf("%v", this.Endpoint), "Endpoint", "Endpoint", 1) + `,`,
1487
+		`LogDriver:` + strings.Replace(fmt.Sprintf("%v", this.LogDriver), "Driver", "Driver", 1) + `,`,
1487 1488
 		`}`,
1488 1489
 	}, "")
1489 1490
 	return s
... ...
@@ -2774,6 +2802,39 @@ func (m *Task) Unmarshal(data []byte) error {
2774 2774
 				return err
2775 2775
 			}
2776 2776
 			iNdEx = postIndex
2777
+		case 13:
2778
+			if wireType != 2 {
2779
+				return fmt.Errorf("proto: wrong wireType = %d for field LogDriver", wireType)
2780
+			}
2781
+			var msglen int
2782
+			for shift := uint(0); ; shift += 7 {
2783
+				if shift >= 64 {
2784
+					return ErrIntOverflowObjects
2785
+				}
2786
+				if iNdEx >= l {
2787
+					return io.ErrUnexpectedEOF
2788
+				}
2789
+				b := data[iNdEx]
2790
+				iNdEx++
2791
+				msglen |= (int(b) & 0x7F) << shift
2792
+				if b < 0x80 {
2793
+					break
2794
+				}
2795
+			}
2796
+			if msglen < 0 {
2797
+				return ErrInvalidLengthObjects
2798
+			}
2799
+			postIndex := iNdEx + msglen
2800
+			if postIndex > l {
2801
+				return io.ErrUnexpectedEOF
2802
+			}
2803
+			if m.LogDriver == nil {
2804
+				m.LogDriver = &Driver{}
2805
+			}
2806
+			if err := m.LogDriver.Unmarshal(data[iNdEx:postIndex]); err != nil {
2807
+				return err
2808
+			}
2809
+			iNdEx = postIndex
2777 2810
 		default:
2778 2811
 			iNdEx = preIndex
2779 2812
 			skippy, err := skipObjects(data[iNdEx:])
... ...
@@ -3466,66 +3527,67 @@ var (
3466 3466
 )
3467 3467
 
3468 3468
 var fileDescriptorObjects = []byte{
3469
-	// 965 bytes of a gzipped FileDescriptorProto
3469
+	// 981 bytes of a gzipped FileDescriptorProto
3470 3470
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xbc, 0x56, 0x4f, 0x6f, 0x1b, 0x45,
3471
-	0x14, 0xaf, 0xed, 0xad, 0xed, 0x7d, 0x4e, 0x22, 0x31, 0x54, 0xd5, 0x36, 0x84, 0xa4, 0xb8, 0x02,
3471
+	0x14, 0xaf, 0xed, 0x8d, 0xed, 0x7d, 0x8e, 0x23, 0x31, 0x54, 0xd5, 0x36, 0x84, 0xa4, 0xb8, 0x02,
3472 3472
 	0x71, 0x40, 0xae, 0x28, 0x05, 0x81, 0xa0, 0x42, 0xb6, 0x13, 0x81, 0x05, 0x81, 0x68, 0x5a, 0x85,
3473
-	0xa3, 0x35, 0xd9, 0x9d, 0x86, 0xc5, 0xf6, 0xee, 0x6a, 0x66, 0xe2, 0x2a, 0x37, 0xc4, 0x07, 0x40,
3474
-	0xe2, 0x0b, 0xf0, 0x55, 0xb8, 0x46, 0x9c, 0x38, 0x72, 0xaa, 0x68, 0x6f, 0x9c, 0xe0, 0x23, 0xf0,
3475
-	0x66, 0xf6, 0xad, 0xbd, 0x95, 0xd7, 0x51, 0x2b, 0xa1, 0x1c, 0x56, 0x9e, 0x3f, 0xbf, 0xdf, 0x6f,
3476
-	0xde, 0x7b, 0xf3, 0xde, 0x1b, 0xc3, 0x66, 0x7a, 0xf2, 0x83, 0x0c, 0x8d, 0xee, 0x65, 0x2a, 0x35,
3477
-	0x29, 0x63, 0x51, 0x1a, 0x4e, 0xa4, 0xea, 0xe9, 0x27, 0x42, 0xcd, 0x26, 0xb1, 0xe9, 0xcd, 0xdf,
3478
-	0xdf, 0xee, 0x98, 0xf3, 0x4c, 0x12, 0x60, 0xbb, 0xa3, 0x33, 0x19, 0x16, 0x93, 0x5b, 0x26, 0x9e,
3479
-	0x49, 0x6d, 0xc4, 0x2c, 0xbb, 0xbb, 0x18, 0xd1, 0xd6, 0x8d, 0xd3, 0xf4, 0x34, 0x75, 0xc3, 0xbb,
3480
-	0x76, 0x94, 0xaf, 0x76, 0x7f, 0xab, 0x81, 0x77, 0x28, 0x8d, 0x60, 0x9f, 0x42, 0x6b, 0x2e, 0x95,
3481
-	0x8e, 0xd3, 0x24, 0xa8, 0xdd, 0xae, 0xbd, 0xdb, 0xb9, 0xf7, 0x46, 0x6f, 0xf5, 0xe4, 0xde, 0x71,
3482
-	0x0e, 0x19, 0x78, 0x17, 0x4f, 0xf7, 0xae, 0xf1, 0x82, 0xc1, 0x3e, 0x03, 0x08, 0x95, 0x14, 0x46,
3483
-	0x46, 0x63, 0x61, 0x82, 0xba, 0xe3, 0xbf, 0x59, 0xc5, 0x7f, 0x54, 0x18, 0xc5, 0x7d, 0x22, 0xf4,
3484
-	0x8d, 0x65, 0x9f, 0x65, 0x51, 0xc1, 0x6e, 0xbc, 0x14, 0x9b, 0x08, 0x7d, 0xd3, 0xfd, 0xbb, 0x01,
3485
-	0xde, 0x37, 0x69, 0x24, 0xd9, 0x4d, 0xa8, 0xc7, 0x91, 0x33, 0xde, 0x1f, 0x34, 0x9f, 0x3f, 0xdd,
3486
-	0xab, 0x8f, 0xf6, 0x39, 0xae, 0xb0, 0x7b, 0xe0, 0xcd, 0xd0, 0x43, 0x32, 0x2b, 0xa8, 0x12, 0xb6,
3487
-	0x11, 0x20, 0x9f, 0x1c, 0x96, 0x7d, 0x04, 0x9e, 0x0d, 0x2b, 0x19, 0xb3, 0x53, 0xc5, 0xb1, 0x67,
3488
-	0x3e, 0x44, 0x4c, 0xc1, 0xb3, 0x78, 0x76, 0x00, 0x9d, 0x48, 0xea, 0x50, 0xc5, 0x99, 0xb1, 0x91,
3489
-	0xf4, 0x1c, 0xfd, 0xce, 0x3a, 0xfa, 0xfe, 0x12, 0xca, 0xcb, 0x3c, 0x8c, 0x48, 0x13, 0xfd, 0x34,
3490
-	0x67, 0x3a, 0xb8, 0xee, 0x14, 0x76, 0xd7, 0x1a, 0xe0, 0x50, 0x64, 0x02, 0x71, 0xd8, 0x97, 0xb0,
3491
-	0x35, 0x13, 0x89, 0x38, 0x95, 0x6a, 0x4c, 0x2a, 0x4d, 0xa7, 0xf2, 0x56, 0xa5, 0xeb, 0x39, 0x32,
3492
-	0x17, 0xe2, 0x9b, 0xb3, 0xf2, 0x14, 0xdd, 0x01, 0x61, 0x8c, 0x08, 0xbf, 0x9f, 0xc9, 0xc4, 0x04,
3493
-	0x2d, 0xa7, 0xf2, 0x76, 0xa5, 0x2d, 0xd2, 0x3c, 0x49, 0xd5, 0xa4, 0xbf, 0x00, 0xf3, 0x12, 0x91,
3494
-	0x7d, 0x01, 0x9d, 0x50, 0x2a, 0x13, 0x3f, 0x8e, 0x43, 0xbc, 0xb4, 0xa0, 0xed, 0x74, 0xf6, 0xaa,
3495
-	0x74, 0x86, 0x4b, 0x18, 0x39, 0x55, 0x66, 0x76, 0x7f, 0xaf, 0x41, 0xeb, 0xa1, 0x54, 0xf3, 0x38,
3496
-	0xfc, 0x7f, 0xaf, 0xfb, 0x93, 0x17, 0xae, 0xbb, 0xd2, 0x32, 0x3a, 0x76, 0xe5, 0xc6, 0x3f, 0x86,
3497
-	0xb6, 0x4c, 0xa2, 0x2c, 0x8d, 0x31, 0x40, 0xde, 0xfa, 0x6c, 0x39, 0x20, 0x0c, 0x5f, 0xa0, 0xbb,
3498
-	0xbf, 0xd6, 0xa1, 0x5d, 0x2c, 0xb3, 0xfb, 0x64, 0x41, 0x5e, 0x7b, 0xb7, 0x2f, 0x93, 0xb0, 0x26,
3499
-	0xd0, 0xe1, 0xf7, 0xe1, 0x7a, 0x96, 0x2a, 0xa3, 0xd1, 0xd9, 0xc6, 0xba, 0x34, 0x39, 0x42, 0xc0,
3500
-	0x30, 0x4d, 0x1e, 0xc7, 0xa7, 0x3c, 0x07, 0xb3, 0xef, 0xa0, 0x33, 0x8f, 0x95, 0x39, 0x13, 0xd3,
3501
-	0x71, 0x9c, 0x69, 0x74, 0xda, 0x72, 0xdf, 0xb9, 0xec, 0xc8, 0xde, 0x71, 0x8e, 0x1f, 0x1d, 0x0d,
3502
-	0xb6, 0x30, 0xd4, 0xb0, 0x98, 0x6a, 0x0e, 0x24, 0x35, 0xca, 0xf4, 0xf6, 0x21, 0xf8, 0x8b, 0x1d,
3503
-	0xf6, 0x1e, 0x40, 0x92, 0x67, 0xc5, 0x78, 0x71, 0x4f, 0x9b, 0x48, 0xf6, 0x29, 0x57, 0xf0, 0xba,
3504
-	0x7c, 0x02, 0x8c, 0x22, 0xc6, 0xc0, 0x13, 0x51, 0xa4, 0xdc, 0xad, 0xf9, 0xdc, 0x8d, 0xbb, 0xbf,
3505
-	0x5c, 0x07, 0xef, 0x91, 0xd0, 0x93, 0xab, 0xae, 0x6c, 0x7b, 0xe6, 0xca, 0x3d, 0xa3, 0x3b, 0x3a,
3506
-	0x4f, 0x01, 0xeb, 0x8e, 0xb7, 0x74, 0x87, 0x12, 0xc3, 0xba, 0x43, 0x80, 0xdc, 0x1d, 0x3d, 0x4d,
3507
-	0x8d, 0x2b, 0x5f, 0x8f, 0xbb, 0x31, 0xbb, 0x03, 0xad, 0x04, 0x4b, 0xd6, 0xd2, 0x9b, 0x8e, 0x0e,
3508
-	0x48, 0x6f, 0xda, 0x2a, 0x46, 0x6e, 0xd3, 0x6e, 0x21, 0x11, 0x4b, 0x45, 0x24, 0x49, 0x8a, 0xe5,
3509
-	0x87, 0x7d, 0x40, 0x53, 0xc9, 0x55, 0x26, 0x64, 0x7f, 0x09, 0x2b, 0x4a, 0xa5, 0xc4, 0x64, 0xc7,
3510
-	0xf0, 0x7a, 0x61, 0x6f, 0x59, 0xb0, 0xfd, 0x2a, 0x82, 0x8c, 0x14, 0x4a, 0x3b, 0xa5, 0xd6, 0xe4,
3511
-	0xaf, 0x6f, 0x4d, 0x2e, 0x82, 0x55, 0xad, 0x69, 0x00, 0x9b, 0xd8, 0xe7, 0x62, 0x85, 0xad, 0xde,
3512
-	0xae, 0xc8, 0x00, 0x50, 0x64, 0x6b, 0x4d, 0xb7, 0x27, 0x11, 0xc9, 0x37, 0x88, 0xe3, 0x66, 0xac,
3513
-	0x0f, 0x6d, 0xca, 0x1b, 0x1d, 0x74, 0x5c, 0xee, 0xbe, 0x64, 0x4b, 0x5a, 0xd0, 0x5e, 0x28, 0xda,
3514
-	0x8d, 0x57, 0x2a, 0xda, 0x9f, 0x6a, 0xf0, 0xda, 0x8a, 0x32, 0xfb, 0x10, 0xaf, 0x36, 0x5f, 0xbc,
3515
-	0xec, 0xf1, 0x24, 0x1e, 0x2f, 0xb0, 0x6c, 0x07, 0x7c, 0x9b, 0xe8, 0x52, 0x6b, 0x99, 0x97, 0xb0,
3516
-	0xcf, 0x97, 0x0b, 0x2c, 0x80, 0x96, 0x98, 0xc6, 0xc2, 0xee, 0x35, 0xdc, 0x5e, 0x31, 0xed, 0xfe,
3517
-	0x5c, 0x87, 0x16, 0x89, 0x5d, 0x75, 0x1b, 0xa4, 0x63, 0x57, 0xca, 0xe3, 0x01, 0x6c, 0x44, 0x2a,
3518
-	0x9e, 0xd3, 0x93, 0x23, 0xa9, 0x15, 0x6e, 0x57, 0x49, 0xec, 0x3b, 0x1c, 0x3e, 0x78, 0xee, 0x37,
3519
-	0xbf, 0xd3, 0x07, 0xe0, 0xc5, 0x99, 0x98, 0xd1, 0x73, 0x57, 0x79, 0xf2, 0xe8, 0xa8, 0x7f, 0xf8,
3520
-	0x6d, 0x96, 0xa7, 0x67, 0x1b, 0x1d, 0xf5, 0xec, 0x02, 0x77, 0xb4, 0xee, 0x3f, 0x18, 0x90, 0xe1,
3521
-	0xf4, 0x4c, 0x1b, 0xa9, 0xae, 0x3a, 0x20, 0x74, 0xec, 0x4a, 0x40, 0x86, 0xd0, 0x52, 0x69, 0x6a,
3522
-	0xc6, 0xa1, 0xb8, 0x2c, 0x16, 0x1c, 0x21, 0xc3, 0xfe, 0x60, 0xcb, 0x12, 0x6d, 0x37, 0xc8, 0xe7,
3523
-	0xbc, 0x69, 0xa9, 0x43, 0x81, 0x9d, 0xfa, 0x66, 0xd1, 0x43, 0x4f, 0x70, 0x45, 0x1b, 0x25, 0xb2,
3524
-	0xf1, 0x44, 0x9e, 0xdb, 0xff, 0x05, 0x8d, 0x75, 0x2f, 0xfa, 0x41, 0x12, 0xaa, 0x73, 0x17, 0xa8,
3525
-	0xaf, 0xe4, 0x39, 0xbf, 0x41, 0x02, 0x83, 0x82, 0x8f, 0x8b, 0x9a, 0x7d, 0x0e, 0x3b, 0x72, 0x01,
3526
-	0xb3, 0x8a, 0xe3, 0x29, 0xfe, 0xad, 0xc2, 0xd7, 0x61, 0x1c, 0x4e, 0x51, 0xd1, 0x35, 0x28, 0x8f,
3527
-	0xdf, 0x92, 0x65, 0xa9, 0xaf, 0x73, 0xc4, 0xd0, 0x02, 0x06, 0x3b, 0x17, 0xcf, 0x76, 0xaf, 0xfd,
3528
-	0x89, 0xdf, 0xbf, 0xcf, 0x76, 0x6b, 0x3f, 0x3e, 0xdf, 0xad, 0x5d, 0xe0, 0xf7, 0x07, 0x7e, 0x7f,
3529
-	0xe1, 0x77, 0xd2, 0x74, 0x7f, 0x2e, 0x3f, 0xf8, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x55, 0xec,
3530
-	0x86, 0xcc, 0x0a, 0x00, 0x00,
3473
+	0xe3, 0x6a, 0xb2, 0x3b, 0x35, 0x8b, 0xed, 0xdd, 0xd5, 0xcc, 0x24, 0x55, 0x6e, 0x88, 0x0f, 0xc0,
3474
+	0x47, 0xe0, 0xab, 0x70, 0x8d, 0x10, 0x07, 0x8e, 0x9c, 0x2a, 0xda, 0x1b, 0x27, 0xf8, 0x08, 0xbc,
3475
+	0xf9, 0xb3, 0xf6, 0x56, 0x5e, 0x87, 0x56, 0xaa, 0x72, 0x58, 0x69, 0xfe, 0xfc, 0x7e, 0xbf, 0x79,
3476
+	0xef, 0xcd, 0x7b, 0x6f, 0x07, 0xba, 0xd9, 0xc9, 0x0f, 0x3c, 0x52, 0xb2, 0x9f, 0x8b, 0x4c, 0x65,
3477
+	0x84, 0xc4, 0x59, 0x34, 0xe5, 0xa2, 0x2f, 0x1f, 0x33, 0x31, 0x9f, 0x26, 0xaa, 0x7f, 0xf6, 0xfe,
3478
+	0x76, 0x47, 0x9d, 0xe7, 0xdc, 0x01, 0xb6, 0x3b, 0x32, 0xe7, 0x51, 0x31, 0xb9, 0xa9, 0x92, 0x39,
3479
+	0x97, 0x8a, 0xcd, 0xf3, 0x3b, 0x8b, 0x91, 0xdb, 0xba, 0x3e, 0xc9, 0x26, 0x99, 0x19, 0xde, 0xd1,
3480
+	0x23, 0xbb, 0xda, 0xfb, 0xb5, 0x06, 0xde, 0x21, 0x57, 0x8c, 0x7c, 0x0a, 0xad, 0x33, 0x2e, 0x64,
3481
+	0x92, 0xa5, 0x41, 0xed, 0x56, 0xed, 0xdd, 0xce, 0xdd, 0x37, 0xfa, 0xab, 0x27, 0xf7, 0x8f, 0x2d,
3482
+	0x64, 0xe8, 0x5d, 0x3c, 0xd9, 0xbb, 0x46, 0x0b, 0x06, 0xf9, 0x0c, 0x20, 0x12, 0x9c, 0x29, 0x1e,
3483
+	0x87, 0x4c, 0x05, 0x75, 0xc3, 0x7f, 0xb3, 0x8a, 0xff, 0xb0, 0x30, 0x8a, 0xfa, 0x8e, 0x30, 0x50,
3484
+	0x9a, 0x7d, 0x9a, 0xc7, 0x05, 0xbb, 0xf1, 0x42, 0x6c, 0x47, 0x18, 0xa8, 0xde, 0xdf, 0x0d, 0xf0,
3485
+	0xbe, 0xc9, 0x62, 0x4e, 0x6e, 0x40, 0x3d, 0x89, 0x8d, 0xf1, 0xfe, 0xb0, 0xf9, 0xec, 0xc9, 0x5e,
3486
+	0x7d, 0xbc, 0x4f, 0x71, 0x85, 0xdc, 0x05, 0x6f, 0x8e, 0x1e, 0x3a, 0xb3, 0x82, 0x2a, 0x61, 0x1d,
3487
+	0x01, 0xe7, 0x93, 0xc1, 0x92, 0x8f, 0xc0, 0xd3, 0x61, 0x75, 0xc6, 0xec, 0x54, 0x71, 0xf4, 0x99,
3488
+	0x0f, 0x10, 0x53, 0xf0, 0x34, 0x9e, 0x1c, 0x40, 0x27, 0xe6, 0x32, 0x12, 0x49, 0xae, 0x74, 0x24,
3489
+	0x3d, 0x43, 0xbf, 0xbd, 0x8e, 0xbe, 0xbf, 0x84, 0xd2, 0x32, 0x0f, 0x23, 0xd2, 0x44, 0x3f, 0xd5,
3490
+	0xa9, 0x0c, 0x36, 0x8c, 0xc2, 0xee, 0x5a, 0x03, 0x0c, 0xca, 0x99, 0xe0, 0x38, 0xe4, 0x4b, 0xd8,
3491
+	0x9a, 0xb3, 0x94, 0x4d, 0xb8, 0x08, 0x9d, 0x4a, 0xd3, 0xa8, 0xbc, 0x55, 0xe9, 0xba, 0x45, 0x5a,
3492
+	0x21, 0xda, 0x9d, 0x97, 0xa7, 0xe8, 0x0e, 0x30, 0xa5, 0x58, 0xf4, 0xfd, 0x9c, 0xa7, 0x2a, 0x68,
3493
+	0x19, 0x95, 0xb7, 0x2b, 0x6d, 0xe1, 0xea, 0x71, 0x26, 0xa6, 0x83, 0x05, 0x98, 0x96, 0x88, 0xe4,
3494
+	0x0b, 0xe8, 0x44, 0x5c, 0xa8, 0xe4, 0x51, 0x12, 0xe1, 0xa5, 0x05, 0x6d, 0xa3, 0xb3, 0x57, 0xa5,
3495
+	0x33, 0x5a, 0xc2, 0x9c, 0x53, 0x65, 0x66, 0xef, 0xb7, 0x1a, 0xb4, 0x1e, 0x70, 0x71, 0x96, 0x44,
3496
+	0xaf, 0xf6, 0xba, 0x3f, 0x79, 0xee, 0xba, 0x2b, 0x2d, 0x73, 0xc7, 0xae, 0xdc, 0xf8, 0xc7, 0xd0,
3497
+	0xe6, 0x69, 0x9c, 0x67, 0x09, 0x06, 0xc8, 0x5b, 0x9f, 0x2d, 0x07, 0x0e, 0x43, 0x17, 0xe8, 0xde,
3498
+	0x2f, 0x75, 0x68, 0x17, 0xcb, 0xe4, 0x9e, 0xb3, 0xc0, 0xd6, 0xde, 0xad, 0xcb, 0x24, 0xb4, 0x09,
3499
+	0xee, 0xf0, 0x7b, 0xb0, 0x91, 0x67, 0x42, 0x49, 0x74, 0xb6, 0xb1, 0x2e, 0x4d, 0x8e, 0x10, 0x30,
3500
+	0xca, 0xd2, 0x47, 0xc9, 0x84, 0x5a, 0x30, 0xf9, 0x0e, 0x3a, 0x67, 0x89, 0x50, 0xa7, 0x6c, 0x16,
3501
+	0x26, 0xb9, 0x44, 0xa7, 0x35, 0xf7, 0x9d, 0xcb, 0x8e, 0xec, 0x1f, 0x5b, 0xfc, 0xf8, 0x68, 0xb8,
3502
+	0x85, 0xa1, 0x86, 0xc5, 0x54, 0x52, 0x70, 0x52, 0xe3, 0x5c, 0x6e, 0x1f, 0x82, 0xbf, 0xd8, 0x21,
3503
+	0xef, 0x01, 0xa4, 0x36, 0x2b, 0xc2, 0xc5, 0x3d, 0x75, 0x91, 0xec, 0xbb, 0x5c, 0xc1, 0xeb, 0xf2,
3504
+	0x1d, 0x60, 0x1c, 0x13, 0x02, 0x1e, 0x8b, 0x63, 0x61, 0x6e, 0xcd, 0xa7, 0x66, 0xdc, 0xfb, 0x7d,
3505
+	0x03, 0xbc, 0x87, 0x4c, 0x4e, 0xaf, 0xba, 0xb2, 0xf5, 0x99, 0x2b, 0xf7, 0x8c, 0xee, 0x48, 0x9b,
3506
+	0x02, 0xda, 0x1d, 0x6f, 0xe9, 0x8e, 0x4b, 0x0c, 0xed, 0x8e, 0x03, 0x58, 0x77, 0xe4, 0x2c, 0x53,
3507
+	0xa6, 0x7c, 0x3d, 0x6a, 0xc6, 0xe4, 0x36, 0xb4, 0x52, 0x2c, 0x59, 0x4d, 0x6f, 0x1a, 0x3a, 0x20,
3508
+	0xbd, 0xa9, 0xab, 0x18, 0xb9, 0x4d, 0xbd, 0x85, 0x44, 0x2c, 0x15, 0x96, 0xa6, 0x19, 0x96, 0x1f,
3509
+	0xf6, 0x01, 0xe9, 0x4a, 0xae, 0x32, 0x21, 0x07, 0x4b, 0x58, 0x51, 0x2a, 0x25, 0x26, 0x39, 0x86,
3510
+	0xd7, 0x0b, 0x7b, 0xcb, 0x82, 0xed, 0x97, 0x11, 0x24, 0x4e, 0xa1, 0xb4, 0x53, 0x6a, 0x4d, 0xfe,
3511
+	0xfa, 0xd6, 0x64, 0x22, 0x58, 0xd5, 0x9a, 0x86, 0xd0, 0xc5, 0x3e, 0x97, 0x08, 0x6c, 0xf5, 0x7a,
3512
+	0x85, 0x07, 0x80, 0x22, 0x5b, 0x6b, 0xba, 0xbd, 0x13, 0xe1, 0x74, 0xd3, 0x71, 0xcc, 0x8c, 0x0c,
3513
+	0xa0, 0xed, 0xf2, 0x46, 0x06, 0x1d, 0x93, 0xbb, 0x2f, 0xd8, 0x92, 0x16, 0xb4, 0xe7, 0x8a, 0x76,
3514
+	0xf3, 0x65, 0x8a, 0x16, 0x3b, 0x05, 0xcc, 0xb2, 0x49, 0x18, 0x8b, 0x04, 0xff, 0x7d, 0x41, 0xd7,
3515
+	0x70, 0xb7, 0xab, 0xb8, 0xfb, 0x06, 0x41, 0x7d, 0x44, 0xdb, 0x61, 0xef, 0xa7, 0x1a, 0xbc, 0xb6,
3516
+	0x62, 0x14, 0xf9, 0x10, 0xb3, 0xc2, 0x2e, 0x5e, 0xf6, 0xdf, 0x75, 0x3c, 0x5a, 0x60, 0xc9, 0x0e,
3517
+	0xf8, 0xba, 0x46, 0xb8, 0x94, 0xdc, 0x56, 0xbf, 0x4f, 0x97, 0x0b, 0x24, 0x80, 0x16, 0x9b, 0x25,
3518
+	0x4c, 0xef, 0x35, 0xcc, 0x5e, 0x31, 0xed, 0xfd, 0x5c, 0x87, 0x96, 0x13, 0xbb, 0xea, 0x0e, 0xea,
3519
+	0x8e, 0x5d, 0xa9, 0xac, 0xfb, 0xb0, 0x69, 0xc3, 0xe9, 0x52, 0xc2, 0xfb, 0xdf, 0xa0, 0x76, 0x2c,
3520
+	0xde, 0xa6, 0xc3, 0x7d, 0xf0, 0x92, 0x9c, 0xcd, 0xdd, 0x9f, 0xb2, 0xf2, 0xe4, 0xf1, 0xd1, 0xe0,
3521
+	0xf0, 0xdb, 0xdc, 0x66, 0x76, 0x1b, 0x1d, 0xf5, 0xf4, 0x02, 0x35, 0xb4, 0xde, 0x3f, 0x18, 0x90,
3522
+	0xd1, 0xec, 0x54, 0x2a, 0x2e, 0xae, 0x3a, 0x20, 0xee, 0xd8, 0x95, 0x80, 0x8c, 0xa0, 0x25, 0xb2,
3523
+	0x4c, 0x85, 0x11, 0xbb, 0x2c, 0x16, 0x14, 0x21, 0xa3, 0xc1, 0x70, 0x4b, 0x13, 0x75, 0x23, 0xb1,
3524
+	0x73, 0xda, 0xd4, 0xd4, 0x11, 0xc3, 0x26, 0x7f, 0xa3, 0x68, 0xbf, 0x27, 0xb8, 0x22, 0x95, 0x60,
3525
+	0x79, 0x38, 0xe5, 0xe7, 0xfa, 0x49, 0xd1, 0x58, 0xf7, 0x18, 0x38, 0x48, 0x23, 0x71, 0x6e, 0x02,
3526
+	0xf5, 0x15, 0x3f, 0xa7, 0xd7, 0x9d, 0xc0, 0xb0, 0xe0, 0xe3, 0xa2, 0x24, 0x9f, 0xc3, 0x0e, 0x5f,
3527
+	0xc0, 0xb4, 0x62, 0x38, 0xc3, 0x17, 0x19, 0xfe, 0x58, 0xc2, 0x68, 0x86, 0x8a, 0xa6, 0xb7, 0x79,
3528
+	0xf4, 0x26, 0x2f, 0x4b, 0x7d, 0x6d, 0x11, 0x23, 0x0d, 0x18, 0xee, 0x5c, 0x3c, 0xdd, 0xbd, 0xf6,
3529
+	0x27, 0x7e, 0xff, 0x3e, 0xdd, 0xad, 0xfd, 0xf8, 0x6c, 0xb7, 0x76, 0x81, 0xdf, 0x1f, 0xf8, 0xfd,
3530
+	0x85, 0xdf, 0x49, 0xd3, 0xbc, 0x4b, 0x3f, 0xf8, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x27, 0xf6,
3531
+	0x9e, 0x07, 0x0b, 0x00, 0x00,
3531 3532
 }
... ...
@@ -155,6 +155,16 @@ message Task {
155 155
 	// A copy of runtime state of service endpoint from Service
156 156
 	// object to be distributed to agents as part of the task.
157 157
 	Endpoint endpoint = 12;
158
+
159
+	// LogDriver specifies the selected log driver to use for the task. Agent
160
+	// processes should always favor the value in this field.
161
+	//
162
+	// If present in the TaskSpec, this will be a copy of that value. The
163
+	// orchestrator may choose to insert a value here, which should be honored,
164
+	// such a cluster default or policy-based value.
165
+	//
166
+	// If not present, the daemon's default will be used.
167
+	Driver log_driver = 13;
158 168
 }
159 169
 
160 170
 // NetworkAttachment specifies the network parameters of attachment to
... ...
@@ -308,6 +308,9 @@ type TaskSpec struct {
308 308
 	Restart *RestartPolicy `protobuf:"bytes,4,opt,name=restart" json:"restart,omitempty"`
309 309
 	// Placement specifies node selection constraints
310 310
 	Placement *Placement `protobuf:"bytes,5,opt,name=placement" json:"placement,omitempty"`
311
+	// LogDriver specifies the log driver to use for the task. Any runtime will
312
+	// direct logs into the specified driver for the duration of the task.
313
+	LogDriver *Driver `protobuf:"bytes,6,opt,name=log_driver,json=logDriver" json:"log_driver,omitempty"`
311 314
 }
312 315
 
313 316
 func (m *TaskSpec) Reset()                    { *m = TaskSpec{} }
... ...
@@ -500,6 +503,12 @@ type ClusterSpec struct {
500 500
 	Dispatcher DispatcherConfig `protobuf:"bytes,5,opt,name=dispatcher" json:"dispatcher"`
501 501
 	// CAConfig defines cluster-level certificate authority settings.
502 502
 	CAConfig CAConfig `protobuf:"bytes,6,opt,name=ca_config,json=caConfig" json:"ca_config"`
503
+	// DefaultLogDriver specifies the log driver to use for the cluster if not
504
+	// specified for each task.
505
+	//
506
+	// If this is changed, only new tasks will pick up the new log driver.
507
+	// Existing tasks will continue to use the previous default until rescheduled.
508
+	DefaultLogDriver *Driver `protobuf:"bytes,7,opt,name=default_log_driver,json=defaultLogDriver" json:"default_log_driver,omitempty"`
503 509
 }
504 510
 
505 511
 func (m *ClusterSpec) Reset()                    { *m = ClusterSpec{} }
... ...
@@ -625,6 +634,7 @@ func (m *TaskSpec) Copy() *TaskSpec {
625 625
 		Resources: m.Resources.Copy(),
626 626
 		Restart:   m.Restart.Copy(),
627 627
 		Placement: m.Placement.Copy(),
628
+		LogDriver: m.LogDriver.Copy(),
628 629
 	}
629 630
 
630 631
 	switch m.Runtime.(type) {
... ...
@@ -749,6 +759,7 @@ func (m *ClusterSpec) Copy() *ClusterSpec {
749 749
 		Raft:             *m.Raft.Copy(),
750 750
 		Dispatcher:       *m.Dispatcher.Copy(),
751 751
 		CAConfig:         *m.CAConfig.Copy(),
752
+		DefaultLogDriver: m.DefaultLogDriver.Copy(),
752 753
 	}
753 754
 
754 755
 	return o
... ...
@@ -840,7 +851,7 @@ func (this *TaskSpec) GoString() string {
840 840
 	if this == nil {
841 841
 		return "nil"
842 842
 	}
843
-	s := make([]string, 0, 8)
843
+	s := make([]string, 0, 9)
844 844
 	s = append(s, "&api.TaskSpec{")
845 845
 	if this.Runtime != nil {
846 846
 		s = append(s, "Runtime: "+fmt.Sprintf("%#v", this.Runtime)+",\n")
... ...
@@ -854,6 +865,9 @@ func (this *TaskSpec) GoString() string {
854 854
 	if this.Placement != nil {
855 855
 		s = append(s, "Placement: "+fmt.Sprintf("%#v", this.Placement)+",\n")
856 856
 	}
857
+	if this.LogDriver != nil {
858
+		s = append(s, "LogDriver: "+fmt.Sprintf("%#v", this.LogDriver)+",\n")
859
+	}
857 860
 	s = append(s, "}")
858 861
 	return strings.Join(s, "")
859 862
 }
... ...
@@ -947,7 +961,7 @@ func (this *ClusterSpec) GoString() string {
947 947
 	if this == nil {
948 948
 		return "nil"
949 949
 	}
950
-	s := make([]string, 0, 10)
950
+	s := make([]string, 0, 11)
951 951
 	s = append(s, "&api.ClusterSpec{")
952 952
 	s = append(s, "Annotations: "+strings.Replace(this.Annotations.GoString(), `&`, ``, 1)+",\n")
953 953
 	s = append(s, "AcceptancePolicy: "+strings.Replace(this.AcceptancePolicy.GoString(), `&`, ``, 1)+",\n")
... ...
@@ -955,6 +969,9 @@ func (this *ClusterSpec) GoString() string {
955 955
 	s = append(s, "Raft: "+strings.Replace(this.Raft.GoString(), `&`, ``, 1)+",\n")
956 956
 	s = append(s, "Dispatcher: "+strings.Replace(this.Dispatcher.GoString(), `&`, ``, 1)+",\n")
957 957
 	s = append(s, "CAConfig: "+strings.Replace(this.CAConfig.GoString(), `&`, ``, 1)+",\n")
958
+	if this.DefaultLogDriver != nil {
959
+		s = append(s, "DefaultLogDriver: "+fmt.Sprintf("%#v", this.DefaultLogDriver)+",\n")
960
+	}
958 961
 	s = append(s, "}")
959 962
 	return strings.Join(s, "")
960 963
 }
... ...
@@ -1257,6 +1274,16 @@ func (m *TaskSpec) MarshalTo(data []byte) (int, error) {
1257 1257
 		}
1258 1258
 		i += n12
1259 1259
 	}
1260
+	if m.LogDriver != nil {
1261
+		data[i] = 0x32
1262
+		i++
1263
+		i = encodeVarintSpecs(data, i, uint64(m.LogDriver.Size()))
1264
+		n13, err := m.LogDriver.MarshalTo(data[i:])
1265
+		if err != nil {
1266
+			return 0, err
1267
+		}
1268
+		i += n13
1269
+	}
1260 1270
 	return i, nil
1261 1271
 }
1262 1272
 
... ...
@@ -1266,11 +1293,11 @@ func (m *TaskSpec_Container) MarshalTo(data []byte) (int, error) {
1266 1266
 		data[i] = 0xa
1267 1267
 		i++
1268 1268
 		i = encodeVarintSpecs(data, i, uint64(m.Container.Size()))
1269
-		n13, err := m.Container.MarshalTo(data[i:])
1269
+		n14, err := m.Container.MarshalTo(data[i:])
1270 1270
 		if err != nil {
1271 1271
 			return 0, err
1272 1272
 		}
1273
-		i += n13
1273
+		i += n14
1274 1274
 	}
1275 1275
 	return i, nil
1276 1276
 }
... ...
@@ -1385,21 +1412,21 @@ func (m *ContainerSpec) MarshalTo(data []byte) (int, error) {
1385 1385
 		data[i] = 0x4a
1386 1386
 		i++
1387 1387
 		i = encodeVarintSpecs(data, i, uint64(m.StopGracePeriod.Size()))
1388
-		n14, err := m.StopGracePeriod.MarshalTo(data[i:])
1388
+		n15, err := m.StopGracePeriod.MarshalTo(data[i:])
1389 1389
 		if err != nil {
1390 1390
 			return 0, err
1391 1391
 		}
1392
-		i += n14
1392
+		i += n15
1393 1393
 	}
1394 1394
 	if m.PullOptions != nil {
1395 1395
 		data[i] = 0x52
1396 1396
 		i++
1397 1397
 		i = encodeVarintSpecs(data, i, uint64(m.PullOptions.Size()))
1398
-		n15, err := m.PullOptions.MarshalTo(data[i:])
1398
+		n16, err := m.PullOptions.MarshalTo(data[i:])
1399 1399
 		if err != nil {
1400 1400
 			return 0, err
1401 1401
 		}
1402
-		i += n15
1402
+		i += n16
1403 1403
 	}
1404 1404
 	return i, nil
1405 1405
 }
... ...
@@ -1483,20 +1510,20 @@ func (m *NetworkSpec) MarshalTo(data []byte) (int, error) {
1483 1483
 	data[i] = 0xa
1484 1484
 	i++
1485 1485
 	i = encodeVarintSpecs(data, i, uint64(m.Annotations.Size()))
1486
-	n16, err := m.Annotations.MarshalTo(data[i:])
1486
+	n17, err := m.Annotations.MarshalTo(data[i:])
1487 1487
 	if err != nil {
1488 1488
 		return 0, err
1489 1489
 	}
1490
-	i += n16
1490
+	i += n17
1491 1491
 	if m.DriverConfig != nil {
1492 1492
 		data[i] = 0x12
1493 1493
 		i++
1494 1494
 		i = encodeVarintSpecs(data, i, uint64(m.DriverConfig.Size()))
1495
-		n17, err := m.DriverConfig.MarshalTo(data[i:])
1495
+		n18, err := m.DriverConfig.MarshalTo(data[i:])
1496 1496
 		if err != nil {
1497 1497
 			return 0, err
1498 1498
 		}
1499
-		i += n17
1499
+		i += n18
1500 1500
 	}
1501 1501
 	if m.Ipv6Enabled {
1502 1502
 		data[i] = 0x18
... ...
@@ -1522,11 +1549,11 @@ func (m *NetworkSpec) MarshalTo(data []byte) (int, error) {
1522 1522
 		data[i] = 0x2a
1523 1523
 		i++
1524 1524
 		i = encodeVarintSpecs(data, i, uint64(m.IPAM.Size()))
1525
-		n18, err := m.IPAM.MarshalTo(data[i:])
1525
+		n19, err := m.IPAM.MarshalTo(data[i:])
1526 1526
 		if err != nil {
1527 1527
 			return 0, err
1528 1528
 		}
1529
-		i += n18
1529
+		i += n19
1530 1530
 	}
1531 1531
 	return i, nil
1532 1532
 }
... ...
@@ -1549,51 +1576,61 @@ func (m *ClusterSpec) MarshalTo(data []byte) (int, error) {
1549 1549
 	data[i] = 0xa
1550 1550
 	i++
1551 1551
 	i = encodeVarintSpecs(data, i, uint64(m.Annotations.Size()))
1552
-	n19, err := m.Annotations.MarshalTo(data[i:])
1552
+	n20, err := m.Annotations.MarshalTo(data[i:])
1553 1553
 	if err != nil {
1554 1554
 		return 0, err
1555 1555
 	}
1556
-	i += n19
1556
+	i += n20
1557 1557
 	data[i] = 0x12
1558 1558
 	i++
1559 1559
 	i = encodeVarintSpecs(data, i, uint64(m.AcceptancePolicy.Size()))
1560
-	n20, err := m.AcceptancePolicy.MarshalTo(data[i:])
1560
+	n21, err := m.AcceptancePolicy.MarshalTo(data[i:])
1561 1561
 	if err != nil {
1562 1562
 		return 0, err
1563 1563
 	}
1564
-	i += n20
1564
+	i += n21
1565 1565
 	data[i] = 0x1a
1566 1566
 	i++
1567 1567
 	i = encodeVarintSpecs(data, i, uint64(m.Orchestration.Size()))
1568
-	n21, err := m.Orchestration.MarshalTo(data[i:])
1568
+	n22, err := m.Orchestration.MarshalTo(data[i:])
1569 1569
 	if err != nil {
1570 1570
 		return 0, err
1571 1571
 	}
1572
-	i += n21
1572
+	i += n22
1573 1573
 	data[i] = 0x22
1574 1574
 	i++
1575 1575
 	i = encodeVarintSpecs(data, i, uint64(m.Raft.Size()))
1576
-	n22, err := m.Raft.MarshalTo(data[i:])
1576
+	n23, err := m.Raft.MarshalTo(data[i:])
1577 1577
 	if err != nil {
1578 1578
 		return 0, err
1579 1579
 	}
1580
-	i += n22
1580
+	i += n23
1581 1581
 	data[i] = 0x2a
1582 1582
 	i++
1583 1583
 	i = encodeVarintSpecs(data, i, uint64(m.Dispatcher.Size()))
1584
-	n23, err := m.Dispatcher.MarshalTo(data[i:])
1584
+	n24, err := m.Dispatcher.MarshalTo(data[i:])
1585 1585
 	if err != nil {
1586 1586
 		return 0, err
1587 1587
 	}
1588
-	i += n23
1588
+	i += n24
1589 1589
 	data[i] = 0x32
1590 1590
 	i++
1591 1591
 	i = encodeVarintSpecs(data, i, uint64(m.CAConfig.Size()))
1592
-	n24, err := m.CAConfig.MarshalTo(data[i:])
1592
+	n25, err := m.CAConfig.MarshalTo(data[i:])
1593 1593
 	if err != nil {
1594 1594
 		return 0, err
1595 1595
 	}
1596
-	i += n24
1596
+	i += n25
1597
+	if m.DefaultLogDriver != nil {
1598
+		data[i] = 0x3a
1599
+		i++
1600
+		i = encodeVarintSpecs(data, i, uint64(m.DefaultLogDriver.Size()))
1601
+		n26, err := m.DefaultLogDriver.MarshalTo(data[i:])
1602
+		if err != nil {
1603
+			return 0, err
1604
+		}
1605
+		i += n26
1606
+	}
1597 1607
 	return i, nil
1598 1608
 }
1599 1609
 
... ...
@@ -1736,6 +1773,10 @@ func (m *TaskSpec) Size() (n int) {
1736 1736
 		l = m.Placement.Size()
1737 1737
 		n += 1 + l + sovSpecs(uint64(l))
1738 1738
 	}
1739
+	if m.LogDriver != nil {
1740
+		l = m.LogDriver.Size()
1741
+		n += 1 + l + sovSpecs(uint64(l))
1742
+	}
1739 1743
 	return n
1740 1744
 }
1741 1745
 
... ...
@@ -1868,6 +1909,10 @@ func (m *ClusterSpec) Size() (n int) {
1868 1868
 	n += 1 + l + sovSpecs(uint64(l))
1869 1869
 	l = m.CAConfig.Size()
1870 1870
 	n += 1 + l + sovSpecs(uint64(l))
1871
+	if m.DefaultLogDriver != nil {
1872
+		l = m.DefaultLogDriver.Size()
1873
+		n += 1 + l + sovSpecs(uint64(l))
1874
+	}
1871 1875
 	return n
1872 1876
 }
1873 1877
 
... ...
@@ -1971,6 +2016,7 @@ func (this *TaskSpec) String() string {
1971 1971
 		`Resources:` + strings.Replace(fmt.Sprintf("%v", this.Resources), "ResourceRequirements", "ResourceRequirements", 1) + `,`,
1972 1972
 		`Restart:` + strings.Replace(fmt.Sprintf("%v", this.Restart), "RestartPolicy", "RestartPolicy", 1) + `,`,
1973 1973
 		`Placement:` + strings.Replace(fmt.Sprintf("%v", this.Placement), "Placement", "Placement", 1) + `,`,
1974
+		`LogDriver:` + strings.Replace(fmt.Sprintf("%v", this.LogDriver), "Driver", "Driver", 1) + `,`,
1974 1975
 		`}`,
1975 1976
 	}, "")
1976 1977
 	return s
... ...
@@ -2060,6 +2106,7 @@ func (this *ClusterSpec) String() string {
2060 2060
 		`Raft:` + strings.Replace(strings.Replace(this.Raft.String(), "RaftConfig", "RaftConfig", 1), `&`, ``, 1) + `,`,
2061 2061
 		`Dispatcher:` + strings.Replace(strings.Replace(this.Dispatcher.String(), "DispatcherConfig", "DispatcherConfig", 1), `&`, ``, 1) + `,`,
2062 2062
 		`CAConfig:` + strings.Replace(strings.Replace(this.CAConfig.String(), "CAConfig", "CAConfig", 1), `&`, ``, 1) + `,`,
2063
+		`DefaultLogDriver:` + strings.Replace(fmt.Sprintf("%v", this.DefaultLogDriver), "Driver", "Driver", 1) + `,`,
2063 2064
 		`}`,
2064 2065
 	}, "")
2065 2066
 	return s
... ...
@@ -2867,6 +2914,39 @@ func (m *TaskSpec) Unmarshal(data []byte) error {
2867 2867
 				return err
2868 2868
 			}
2869 2869
 			iNdEx = postIndex
2870
+		case 6:
2871
+			if wireType != 2 {
2872
+				return fmt.Errorf("proto: wrong wireType = %d for field LogDriver", wireType)
2873
+			}
2874
+			var msglen int
2875
+			for shift := uint(0); ; shift += 7 {
2876
+				if shift >= 64 {
2877
+					return ErrIntOverflowSpecs
2878
+				}
2879
+				if iNdEx >= l {
2880
+					return io.ErrUnexpectedEOF
2881
+				}
2882
+				b := data[iNdEx]
2883
+				iNdEx++
2884
+				msglen |= (int(b) & 0x7F) << shift
2885
+				if b < 0x80 {
2886
+					break
2887
+				}
2888
+			}
2889
+			if msglen < 0 {
2890
+				return ErrInvalidLengthSpecs
2891
+			}
2892
+			postIndex := iNdEx + msglen
2893
+			if postIndex > l {
2894
+				return io.ErrUnexpectedEOF
2895
+			}
2896
+			if m.LogDriver == nil {
2897
+				m.LogDriver = &Driver{}
2898
+			}
2899
+			if err := m.LogDriver.Unmarshal(data[iNdEx:postIndex]); err != nil {
2900
+				return err
2901
+			}
2902
+			iNdEx = postIndex
2870 2903
 		default:
2871 2904
 			iNdEx = preIndex
2872 2905
 			skippy, err := skipSpecs(data[iNdEx:])
... ...
@@ -3894,6 +3974,39 @@ func (m *ClusterSpec) Unmarshal(data []byte) error {
3894 3894
 				return err
3895 3895
 			}
3896 3896
 			iNdEx = postIndex
3897
+		case 7:
3898
+			if wireType != 2 {
3899
+				return fmt.Errorf("proto: wrong wireType = %d for field DefaultLogDriver", wireType)
3900
+			}
3901
+			var msglen int
3902
+			for shift := uint(0); ; shift += 7 {
3903
+				if shift >= 64 {
3904
+					return ErrIntOverflowSpecs
3905
+				}
3906
+				if iNdEx >= l {
3907
+					return io.ErrUnexpectedEOF
3908
+				}
3909
+				b := data[iNdEx]
3910
+				iNdEx++
3911
+				msglen |= (int(b) & 0x7F) << shift
3912
+				if b < 0x80 {
3913
+					break
3914
+				}
3915
+			}
3916
+			if msglen < 0 {
3917
+				return ErrInvalidLengthSpecs
3918
+			}
3919
+			postIndex := iNdEx + msglen
3920
+			if postIndex > l {
3921
+				return io.ErrUnexpectedEOF
3922
+			}
3923
+			if m.DefaultLogDriver == nil {
3924
+				m.DefaultLogDriver = &Driver{}
3925
+			}
3926
+			if err := m.DefaultLogDriver.Unmarshal(data[iNdEx:postIndex]); err != nil {
3927
+				return err
3928
+			}
3929
+			iNdEx = postIndex
3897 3930
 		default:
3898 3931
 			iNdEx = preIndex
3899 3932
 			skippy, err := skipSpecs(data[iNdEx:])
... ...
@@ -4021,85 +4134,88 @@ var (
4021 4021
 )
4022 4022
 
4023 4023
 var fileDescriptorSpecs = []byte{
4024
-	// 1279 bytes of a gzipped FileDescriptorProto
4025
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x56, 0xcf, 0x72, 0x1b, 0xc5,
4026
-	0x13, 0xb6, 0xec, 0xb5, 0x2c, 0xf7, 0xda, 0x89, 0x33, 0x95, 0x5f, 0xa2, 0x28, 0xf9, 0xd9, 0x8e,
4027
-	0x08, 0x10, 0xa8, 0x42, 0x06, 0x41, 0x25, 0xe1, 0x5f, 0xc1, 0x5a, 0x16, 0x8e, 0x09, 0x76, 0xb6,
4028
-	0xc6, 0x49, 0x38, 0xba, 0x46, 0xab, 0x89, 0xbc, 0xe5, 0xd5, 0xce, 0x32, 0x3b, 0x52, 0xca, 0x37,
4029
-	0x8e, 0x29, 0x0e, 0xdc, 0xe0, 0x40, 0x15, 0x27, 0xde, 0x81, 0x67, 0xc8, 0x91, 0x1b, 0x9c, 0x52,
4030
-	0x24, 0x4f, 0x40, 0x15, 0x2f, 0x40, 0xcf, 0xec, 0x48, 0x5a, 0x91, 0x75, 0xc2, 0xc1, 0x87, 0xad,
4031
-	0x9a, 0x3f, 0xdf, 0xf7, 0xf5, 0x4c, 0x77, 0x4f, 0xf7, 0x82, 0x9b, 0x26, 0x3c, 0x48, 0x1b, 0x89,
4032
-	0x14, 0x4a, 0x10, 0xd2, 0x15, 0xc1, 0x11, 0x97, 0x8d, 0xf4, 0x11, 0x93, 0xfd, 0xa3, 0x50, 0x35,
4033
-	0x86, 0xef, 0xd5, 0x5c, 0x75, 0x9c, 0x70, 0x0b, 0xa8, 0x9d, 0xef, 0x89, 0x9e, 0x30, 0xc3, 0x0d,
4034
-	0x3d, 0xb2, 0xab, 0x17, 0xbb, 0x03, 0xc9, 0x54, 0x28, 0xe2, 0x8d, 0xd1, 0x20, 0xdb, 0xa8, 0x7f,
4035
-	0xef, 0x40, 0x65, 0x4f, 0x74, 0xf9, 0x3e, 0xda, 0x20, 0xdb, 0xe0, 0xb2, 0x38, 0x16, 0xca, 0x00,
4036
-	0xd2, 0x6a, 0x69, 0xbd, 0x74, 0xdd, 0x6d, 0xae, 0x35, 0x5e, 0x34, 0xd9, 0xf0, 0x26, 0xb0, 0x4d,
4037
-	0xe7, 0xc9, 0xd3, 0xb5, 0x19, 0x9a, 0x67, 0x92, 0x77, 0xc1, 0x91, 0x22, 0xe2, 0xd5, 0x59, 0x54,
4038
-	0x38, 0xd3, 0xbc, 0x52, 0xa4, 0xa0, 0x8d, 0x52, 0xc4, 0x50, 0x83, 0x44, 0xd3, 0xd0, 0xe7, 0xfd,
4039
-	0x0e, 0x97, 0xe9, 0x61, 0x98, 0x54, 0xe7, 0x0c, 0xef, 0xcd, 0x93, 0x78, 0xfa, 0xb0, 0x8d, 0xdd,
4040
-	0x31, 0x9c, 0xe6, 0xa8, 0x64, 0x17, 0x96, 0xd8, 0x90, 0x85, 0x11, 0xeb, 0x84, 0x51, 0xa8, 0x8e,
4041
-	0xab, 0x8e, 0x91, 0x7a, 0xeb, 0xa5, 0x52, 0x5e, 0x8e, 0x40, 0xa7, 0xe8, 0xf5, 0x2e, 0xc0, 0xc4,
4042
-	0x10, 0x79, 0x03, 0x16, 0xfc, 0xf6, 0xde, 0xd6, 0xce, 0xde, 0xf6, 0xca, 0x4c, 0xed, 0xd2, 0x77,
4043
-	0x3f, 0xaf, 0xff, 0x4f, 0x6b, 0x4c, 0x00, 0x3e, 0x8f, 0xbb, 0x61, 0xdc, 0x23, 0xd7, 0xa1, 0xe2,
4044
-	0xb5, 0x5a, 0x6d, 0xff, 0x5e, 0x7b, 0x6b, 0xa5, 0x54, 0xab, 0x21, 0xf0, 0xc2, 0x34, 0xd0, 0x0b,
4045
-	0x02, 0x9e, 0x28, 0xde, 0xad, 0x39, 0x8f, 0x7f, 0x59, 0x9d, 0xa9, 0x3f, 0x2e, 0xc1, 0x52, 0xfe,
4046
-	0x10, 0x68, 0xa8, 0xec, 0xb5, 0xee, 0xed, 0x3c, 0x68, 0xa3, 0x9d, 0x31, 0x3d, 0x8f, 0xf0, 0x02,
4047
-	0x15, 0x0e, 0x39, 0xb9, 0x06, 0xf3, 0xbe, 0x77, 0x7f, 0xbf, 0x8d, 0x56, 0xc6, 0xc7, 0xc9, 0xc3,
4048
-	0x7c, 0x36, 0x48, 0x0d, 0x6a, 0x8b, 0x7a, 0x3b, 0x7b, 0x2b, 0xb3, 0xc5, 0xa8, 0x2d, 0xc9, 0xc2,
4049
-	0xd8, 0x1e, 0xe5, 0x57, 0x07, 0xdc, 0x7d, 0x2e, 0x87, 0x61, 0x70, 0xca, 0x39, 0x71, 0x03, 0x1c,
4050
-	0xc5, 0xd2, 0x23, 0x93, 0x13, 0x6e, 0x71, 0x4e, 0xdc, 0xc3, 0x7d, 0x6d, 0xd4, 0xd2, 0x0d, 0x5e,
4051
-	0x67, 0x86, 0xe4, 0x49, 0x14, 0x06, 0x0c, 0xfd, 0x65, 0x32, 0xc3, 0x6d, 0xbe, 0x5e, 0xc4, 0xa6,
4052
-	0x63, 0x94, 0x3d, 0xff, 0xed, 0x19, 0x9a, 0xa3, 0x92, 0x8f, 0xa1, 0xdc, 0x8b, 0x44, 0x87, 0x45,
4053
-	0x26, 0x27, 0xdc, 0xe6, 0xd5, 0x22, 0x91, 0x6d, 0x83, 0x98, 0x08, 0x58, 0x0a, 0xb9, 0x05, 0xe5,
4054
-	0x41, 0xd2, 0x45, 0x9d, 0x6a, 0xd9, 0x90, 0xd7, 0x8b, 0xc8, 0xf7, 0x0d, 0xa2, 0x25, 0xe2, 0x87,
4055
-	0x61, 0x8f, 0x5a, 0x3c, 0xd9, 0x87, 0x4a, 0xcc, 0xd5, 0x23, 0x21, 0x8f, 0xd2, 0xea, 0xc2, 0xfa,
4056
-	0x1c, 0x72, 0x6f, 0x16, 0x71, 0x73, 0x3e, 0x6f, 0xec, 0x65, 0x78, 0x4f, 0x29, 0x16, 0x1c, 0xf6,
4057
-	0x79, 0xac, 0xac, 0xe4, 0x58, 0x88, 0x7c, 0x02, 0x15, 0x4c, 0xb5, 0x44, 0x84, 0xb1, 0xaa, 0x56,
4058
-	0x4e, 0x3e, 0x50, 0xdb, 0x62, 0xb4, 0x2a, 0x1d, 0x33, 0x6a, 0x77, 0xe0, 0xe2, 0x09, 0x26, 0xc8,
4059
-	0x05, 0x28, 0x2b, 0x26, 0x7b, 0x5c, 0x99, 0x48, 0x2f, 0x52, 0x3b, 0x23, 0x55, 0x58, 0x60, 0x51,
4060
-	0xc8, 0x52, 0x9e, 0x62, 0x00, 0xe7, 0x70, 0x63, 0x34, 0xdd, 0x2c, 0x83, 0xd3, 0xc7, 0x7c, 0xaa,
4061
-	0x6f, 0xc0, 0xb9, 0x17, 0x22, 0x40, 0x6a, 0x50, 0xb1, 0x11, 0xc8, 0x52, 0xc7, 0xa1, 0xe3, 0x79,
4062
-	0xfd, 0x2c, 0x2c, 0x4f, 0x79, 0xbb, 0xfe, 0xd3, 0x2c, 0x54, 0x46, 0x29, 0x40, 0x3c, 0x58, 0x0c,
4063
-	0x44, 0xac, 0x30, 0x31, 0xb9, 0xb4, 0x59, 0x57, 0x18, 0xb0, 0xd6, 0x08, 0xa4, 0x59, 0x18, 0xb0,
4064
-	0x09, 0x8b, 0x7c, 0x01, 0x8b, 0x92, 0xa7, 0x62, 0x20, 0x03, 0x73, 0x6a, 0x2d, 0x71, 0xbd, 0x38,
4065
-	0x71, 0x32, 0x10, 0xe5, 0xdf, 0x0c, 0x42, 0xc9, 0xb5, 0x37, 0x52, 0x3a, 0xa1, 0x62, 0xe2, 0x2c,
4066
-	0xe0, 0x04, 0x1d, 0xa1, 0x5e, 0x96, 0x39, 0x34, 0x83, 0xf8, 0x02, 0x6f, 0x77, 0x4c, 0x47, 0x0c,
4067
-	0x24, 0x2f, 0x26, 0x11, 0x0b, 0x8c, 0x6a, 0x75, 0xde, 0xd0, 0xff, 0x5f, 0x44, 0xf7, 0x47, 0x20,
4068
-	0x3a, 0xc1, 0x6f, 0x2e, 0xa2, 0xe5, 0x41, 0xac, 0xc2, 0x3e, 0xaf, 0xff, 0xe8, 0xc0, 0xf2, 0xd4,
4069
-	0x5d, 0xc9, 0x79, 0x98, 0x0f, 0xfb, 0xac, 0xc7, 0x6d, 0xa4, 0xb2, 0x09, 0x69, 0x43, 0x19, 0x9f,
4070
-	0x35, 0x8f, 0xb2, 0x38, 0xb9, 0xcd, 0x77, 0x5e, 0xe9, 0xb4, 0xc6, 0x57, 0x06, 0xdf, 0x8e, 0x95,
4071
-	0x3c, 0xa6, 0x96, 0xac, 0xe3, 0x1d, 0x88, 0x7e, 0x9f, 0xc5, 0xfa, 0xc9, 0x99, 0x78, 0xdb, 0x29,
4072
-	0x21, 0xe0, 0x60, 0x4a, 0xa4, 0xe8, 0x0a, 0xbd, 0x6c, 0xc6, 0x64, 0x05, 0xe6, 0x78, 0x3c, 0xc4,
4073
-	0xeb, 0xe9, 0x25, 0x3d, 0xd4, 0x2b, 0xdd, 0x50, 0x9a, 0xc7, 0x82, 0x2b, 0x38, 0xd4, 0x3c, 0xac,
4074
-	0x45, 0x12, 0xdf, 0x80, 0x5e, 0x32, 0x63, 0x72, 0x13, 0xca, 0x7d, 0x81, 0x17, 0x4c, 0x31, 0x89,
4075
-	0xf5, 0x61, 0x2f, 0x15, 0x1d, 0x76, 0x57, 0x23, 0x6c, 0x49, 0xb0, 0x70, 0x72, 0x1b, 0xce, 0xa5,
4076
-	0x4a, 0x24, 0x07, 0x3d, 0x89, 0xae, 0x3a, 0x48, 0xb8, 0x0c, 0x45, 0xb7, 0xba, 0x78, 0x72, 0x65,
4077
-	0xd9, 0xb2, 0x5d, 0x8f, 0x9e, 0xd5, 0xb4, 0x6d, 0xcd, 0xf2, 0x0d, 0x89, 0xf8, 0xb0, 0x94, 0x0c,
4078
-	0xa2, 0xe8, 0x40, 0x24, 0x59, 0x81, 0x03, 0x23, 0xf2, 0x1f, 0xbc, 0xe6, 0x23, 0xeb, 0x6e, 0x46,
4079
-	0xa2, 0x6e, 0x32, 0x99, 0xd4, 0x3e, 0x04, 0x37, 0xe7, 0x51, 0xed, 0x89, 0x23, 0x7e, 0x6c, 0x83,
4080
-	0xa4, 0x87, 0x3a, 0x70, 0x43, 0x16, 0x0d, 0xb2, 0xf6, 0x88, 0x81, 0x33, 0x93, 0x8f, 0x66, 0x6f,
4081
-	0x95, 0x6a, 0x4d, 0x70, 0x73, 0xb2, 0xe4, 0x35, 0x58, 0x96, 0xbc, 0x17, 0xa6, 0x28, 0x73, 0xc0,
4082
-	0x06, 0xea, 0xb0, 0xfa, 0xb9, 0x21, 0x2c, 0x8d, 0x16, 0x3d, 0x5c, 0xab, 0xff, 0x8d, 0xbd, 0x23,
4083
-	0xff, 0xce, 0x49, 0x2b, 0x7b, 0x90, 0xc6, 0xe2, 0x99, 0xe6, 0xc6, 0xab, 0xea, 0x82, 0x49, 0xff,
4084
-	0x68, 0xa0, 0x2d, 0xee, 0xea, 0x9e, 0x6c, 0xc8, 0xe4, 0x03, 0x98, 0x4f, 0x84, 0x54, 0xa3, 0x2c,
4085
-	0x5a, 0x2d, 0x4c, 0x59, 0x04, 0xd8, 0xca, 0x94, 0x81, 0xeb, 0x87, 0x70, 0x66, 0x5a, 0x0d, 0x5b,
4086
-	0xcf, 0xdc, 0x83, 0x1d, 0x1f, 0xbb, 0xd8, 0x65, 0x6c, 0x3c, 0x17, 0xa7, 0x37, 0x1f, 0x84, 0x52,
4087
-	0x0d, 0x58, 0xb4, 0xe3, 0x93, 0xb7, 0xb1, 0x41, 0xed, 0xed, 0x53, 0x8a, 0x6d, 0x6c, 0x0d, 0x71,
4088
-	0x97, 0xa7, 0x71, 0x7a, 0x0b, 0xc3, 0xde, 0xa5, 0xa2, 0x33, 0x6e, 0x53, 0x3f, 0xcc, 0x82, 0x6b,
4089
-	0x6b, 0xd8, 0xe9, 0xb6, 0xa9, 0xcf, 0x60, 0xb9, 0x2b, 0xb1, 0xb5, 0xca, 0x83, 0xc0, 0x5c, 0xcd,
4090
-	0x16, 0x8e, 0x5a, 0x61, 0x56, 0x19, 0x20, 0x5d, 0xca, 0x08, 0xb6, 0x82, 0x5e, 0x85, 0xa5, 0x30,
4091
-	0x19, 0xde, 0x38, 0xe0, 0x31, 0xeb, 0x44, 0xb6, 0x63, 0x55, 0xa8, 0xab, 0xd7, 0xda, 0xd9, 0x92,
4092
-	0xae, 0x8a, 0xe8, 0x7c, 0x2e, 0x63, 0xdb, 0x8b, 0x2a, 0x74, 0x3c, 0x27, 0x9f, 0x82, 0x13, 0x26,
4093
-	0xac, 0x6f, 0x4b, 0x45, 0xe1, 0x0d, 0x76, 0x7c, 0x6f, 0xd7, 0xa6, 0xc8, 0x66, 0xe5, 0xf9, 0xd3,
4094
-	0x35, 0x47, 0x2f, 0x50, 0x43, 0xab, 0xff, 0x3e, 0x07, 0x6e, 0x2b, 0x1a, 0xa4, 0xca, 0x16, 0x89,
4095
-	0x53, 0xf3, 0xcb, 0xd7, 0x70, 0x8e, 0x99, 0x9f, 0x16, 0x16, 0xeb, 0x17, 0x67, 0xaa, 0x9c, 0xf5,
4096
-	0xcd, 0xb5, 0x42, 0xb9, 0x31, 0x38, 0xab, 0x88, 0x56, 0x73, 0x85, 0xfd, 0x6b, 0x1d, 0xfb, 0xe3,
4097
-	0xb2, 0x90, 0xc1, 0x21, 0x96, 0xcb, 0xec, 0x89, 0xda, 0x16, 0x5f, 0xf8, 0xf3, 0x77, 0x37, 0x0f,
4098
-	0xcc, 0xfc, 0x6d, 0x75, 0xa7, 0x35, 0xb0, 0x5d, 0x3b, 0x92, 0x3d, 0x1c, 0xd5, 0xeb, 0xc2, 0xec,
4099
-	0xa5, 0xb8, 0x3f, 0x25, 0x61, 0x18, 0xe4, 0x4b, 0x80, 0x6e, 0x98, 0x26, 0x4c, 0xa1, 0x9c, 0xb4,
4100
-	0x51, 0x28, 0xbc, 0xe0, 0xd6, 0x18, 0x35, 0xa5, 0x92, 0x63, 0x93, 0x3b, 0xd8, 0xc3, 0xd8, 0x28,
4101
-	0x8f, 0xca, 0x27, 0x57, 0xa7, 0x96, 0x67, 0x25, 0x56, 0xb4, 0x04, 0x46, 0xb4, 0x32, 0x5a, 0xa1,
4102
-	0x95, 0x80, 0xd9, 0xbd, 0x2b, 0x4f, 0x9e, 0xad, 0xce, 0xfc, 0x81, 0xdf, 0x5f, 0xcf, 0x56, 0x4b,
4103
-	0xdf, 0x3e, 0x5f, 0x2d, 0x3d, 0xc1, 0xef, 0x37, 0xfc, 0xfe, 0xc4, 0xaf, 0x53, 0x36, 0xbf, 0xf3,
4104
-	0xef, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x3b, 0x66, 0xa6, 0x7e, 0x2d, 0x0c, 0x00, 0x00,
4024
+	// 1320 bytes of a gzipped FileDescriptorProto
4025
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0xcd, 0x72, 0x1b, 0x45,
4026
+	0x17, 0xf5, 0xcf, 0x58, 0x96, 0xee, 0xd8, 0x89, 0xd2, 0x95, 0x2f, 0x51, 0x94, 0x7c, 0xb6, 0x23,
4027
+	0x02, 0x04, 0xaa, 0x90, 0x41, 0x50, 0xf9, 0xe1, 0xa7, 0x40, 0x96, 0x84, 0x63, 0x12, 0x3b, 0x53,
4028
+	0xed, 0x24, 0x2c, 0x55, 0xed, 0x99, 0x8e, 0x3c, 0xe5, 0xd1, 0xcc, 0xd0, 0xd3, 0xa3, 0x94, 0x77,
4029
+	0x2c, 0x53, 0x2c, 0xd8, 0xc1, 0x8e, 0x05, 0xc5, 0x3b, 0xf0, 0x0c, 0x59, 0xb2, 0xa1, 0x8a, 0x55,
4030
+	0x8a, 0xe4, 0x09, 0xa8, 0xe2, 0x05, 0xb8, 0xdd, 0xd3, 0x92, 0x46, 0x64, 0x9c, 0xb0, 0xc8, 0x62,
4031
+	0xaa, 0xba, 0x7b, 0xce, 0x39, 0xdd, 0x73, 0xef, 0xe9, 0x7b, 0x25, 0xb0, 0x93, 0x98, 0xbb, 0x49,
4032
+	0x33, 0x16, 0x91, 0x8c, 0x08, 0xf1, 0x22, 0xf7, 0x88, 0x8b, 0x66, 0xf2, 0x88, 0x89, 0xe1, 0x91,
4033
+	0x2f, 0x9b, 0xa3, 0x0f, 0xea, 0xb6, 0x3c, 0x8e, 0xb9, 0x01, 0xd4, 0xcf, 0x0e, 0xa2, 0x41, 0xa4,
4034
+	0x87, 0x9b, 0x6a, 0x64, 0x56, 0xcf, 0x7b, 0xa9, 0x60, 0xd2, 0x8f, 0xc2, 0xcd, 0xf1, 0x20, 0x7b,
4035
+	0xd1, 0xf8, 0xde, 0x82, 0xf2, 0x5e, 0xe4, 0xf1, 0x7d, 0xdc, 0x83, 0x6c, 0x83, 0xcd, 0xc2, 0x30,
4036
+	0x92, 0x1a, 0x90, 0xd4, 0xe6, 0x37, 0xe6, 0xaf, 0xda, 0xad, 0xf5, 0xe6, 0x8b, 0x5b, 0x36, 0xdb,
4037
+	0x53, 0xd8, 0x96, 0xf5, 0xe4, 0xe9, 0xfa, 0x1c, 0xcd, 0x33, 0xc9, 0xfb, 0x60, 0x89, 0x28, 0xe0,
4038
+	0xb5, 0x05, 0x54, 0x38, 0xd5, 0xba, 0x54, 0xa4, 0xa0, 0x36, 0xa5, 0x88, 0xa1, 0x1a, 0x89, 0x5b,
4039
+	0xc3, 0x90, 0x0f, 0x0f, 0xb8, 0x48, 0x0e, 0xfd, 0xb8, 0xb6, 0xa8, 0x79, 0x6f, 0x9f, 0xc4, 0x53,
4040
+	0x87, 0x6d, 0xee, 0x4e, 0xe0, 0x34, 0x47, 0x25, 0xbb, 0xb0, 0xc2, 0x46, 0xcc, 0x0f, 0xd8, 0x81,
4041
+	0x1f, 0xf8, 0xf2, 0xb8, 0x66, 0x69, 0xa9, 0x77, 0x5e, 0x2a, 0xd5, 0xce, 0x11, 0xe8, 0x0c, 0xbd,
4042
+	0xe1, 0x01, 0x4c, 0x37, 0x22, 0x6f, 0xc1, 0xb2, 0xd3, 0xdb, 0xeb, 0xee, 0xec, 0x6d, 0x57, 0xe7,
4043
+	0xea, 0x17, 0xbe, 0xfb, 0x69, 0xe3, 0x7f, 0x4a, 0x63, 0x0a, 0x70, 0x78, 0xe8, 0xf9, 0xe1, 0x80,
4044
+	0x5c, 0x85, 0x72, 0xbb, 0xd3, 0xe9, 0x39, 0xf7, 0x7a, 0xdd, 0xea, 0x7c, 0xbd, 0x8e, 0xc0, 0x73,
4045
+	0xb3, 0xc0, 0xb6, 0xeb, 0xf2, 0x58, 0x72, 0xaf, 0x6e, 0x3d, 0xfe, 0x65, 0x6d, 0xae, 0xf1, 0x78,
4046
+	0x1e, 0x56, 0xf2, 0x87, 0xc0, 0x8d, 0x4a, 0xed, 0xce, 0xbd, 0x9d, 0x07, 0x3d, 0xdc, 0x67, 0x42,
4047
+	0xcf, 0x23, 0xda, 0xae, 0xf4, 0x47, 0x9c, 0x5c, 0x81, 0x25, 0xa7, 0x7d, 0x7f, 0xbf, 0x87, 0xbb,
4048
+	0x4c, 0x8e, 0x93, 0x87, 0x39, 0x2c, 0x4d, 0x34, 0xaa, 0x4b, 0xdb, 0x3b, 0x7b, 0xd5, 0x85, 0x62,
4049
+	0x54, 0x57, 0x30, 0x3f, 0x34, 0x47, 0xf9, 0xd5, 0x02, 0x7b, 0x9f, 0x8b, 0x91, 0xef, 0xbe, 0x66,
4050
+	0x4f, 0x5c, 0x03, 0x4b, 0xb2, 0xe4, 0x48, 0x7b, 0xc2, 0x2e, 0xf6, 0xc4, 0x3d, 0x7c, 0xaf, 0x36,
4051
+	0x35, 0x74, 0x8d, 0x57, 0xce, 0x10, 0x3c, 0x0e, 0x7c, 0x97, 0x61, 0xbc, 0xb4, 0x33, 0xec, 0xd6,
4052
+	0x9b, 0x45, 0x6c, 0x3a, 0x41, 0x99, 0xf3, 0xdf, 0x9a, 0xa3, 0x39, 0x2a, 0xf9, 0x04, 0x4a, 0x83,
4053
+	0x20, 0x3a, 0x60, 0x81, 0xf6, 0x84, 0xdd, 0xba, 0x5c, 0x24, 0xb2, 0xad, 0x11, 0x53, 0x01, 0x43,
4054
+	0x21, 0x37, 0xa0, 0x94, 0xc6, 0x1e, 0xea, 0xd4, 0x4a, 0x9a, 0xbc, 0x51, 0x44, 0xbe, 0xaf, 0x11,
4055
+	0x9d, 0x28, 0x7c, 0xe8, 0x0f, 0xa8, 0xc1, 0x93, 0x7d, 0x28, 0x87, 0x5c, 0x3e, 0x8a, 0xc4, 0x51,
4056
+	0x52, 0x5b, 0xde, 0x58, 0x44, 0xee, 0xf5, 0x22, 0x6e, 0x2e, 0xe6, 0xcd, 0xbd, 0x0c, 0xdf, 0x96,
4057
+	0x92, 0xb9, 0x87, 0x43, 0x1e, 0x4a, 0x23, 0x39, 0x11, 0x22, 0x9f, 0x42, 0x19, 0xad, 0x16, 0x47,
4058
+	0x7e, 0x28, 0x6b, 0xe5, 0x93, 0x0f, 0xd4, 0x33, 0x18, 0xa5, 0x4a, 0x27, 0x8c, 0xfa, 0x6d, 0x38,
4059
+	0x7f, 0xc2, 0x16, 0xe4, 0x1c, 0x94, 0x24, 0x13, 0x03, 0x2e, 0x75, 0xa6, 0x2b, 0xd4, 0xcc, 0x48,
4060
+	0x0d, 0x96, 0x59, 0xe0, 0xb3, 0x84, 0x27, 0x98, 0xc0, 0x45, 0x7c, 0x31, 0x9e, 0x6e, 0x95, 0xc0,
4061
+	0x1a, 0xa2, 0x9f, 0x1a, 0x9b, 0x70, 0xe6, 0x85, 0x0c, 0x90, 0x3a, 0x94, 0x4d, 0x06, 0x32, 0xeb,
4062
+	0x58, 0x74, 0x32, 0x6f, 0x9c, 0x86, 0xd5, 0x99, 0x68, 0x37, 0x7e, 0x5f, 0x80, 0xf2, 0xd8, 0x02,
4063
+	0xa4, 0x0d, 0x15, 0x37, 0x0a, 0x25, 0x1a, 0x93, 0x0b, 0xe3, 0xba, 0xc2, 0x84, 0x75, 0xc6, 0x20,
4064
+	0xc5, 0xc2, 0x84, 0x4d, 0x59, 0xe4, 0x4b, 0xa8, 0x08, 0x9e, 0x44, 0xa9, 0x70, 0xf5, 0xa9, 0x95,
4065
+	0xc4, 0xd5, 0x62, 0xe3, 0x64, 0x20, 0xca, 0xbf, 0x49, 0x7d, 0xc1, 0x55, 0x34, 0x12, 0x3a, 0xa5,
4066
+	0xa2, 0x71, 0x96, 0x71, 0x82, 0x81, 0x90, 0x2f, 0x73, 0x0e, 0xcd, 0x20, 0x4e, 0x84, 0x5f, 0x77,
4067
+	0x4c, 0xc7, 0x0c, 0x24, 0x57, 0xe2, 0x80, 0xb9, 0x5a, 0xb5, 0xb6, 0xa4, 0xe9, 0xff, 0x2f, 0xa2,
4068
+	0x3b, 0x63, 0x10, 0x9d, 0xe2, 0xc9, 0x4d, 0x80, 0x20, 0x1a, 0xf4, 0x3d, 0x81, 0x77, 0x5d, 0x18,
4069
+	0xe7, 0xd5, 0x8b, 0xd8, 0x5d, 0x8d, 0xa0, 0x15, 0x44, 0x67, 0xc3, 0xad, 0x0a, 0x1e, 0x3a, 0x0d,
4070
+	0xa5, 0x3f, 0xe4, 0x8d, 0x1f, 0x2d, 0x58, 0x9d, 0x09, 0x13, 0x39, 0x0b, 0x4b, 0xfe, 0x90, 0x0d,
4071
+	0xb8, 0x49, 0x72, 0x36, 0x21, 0x3d, 0x28, 0x61, 0x45, 0xe0, 0x41, 0x96, 0x62, 0xbb, 0xf5, 0xde,
4072
+	0x2b, 0xe3, 0xdd, 0xbc, 0xa3, 0xf1, 0xbd, 0x50, 0x8a, 0x63, 0x6a, 0xc8, 0xca, 0x2a, 0x6e, 0x34,
4073
+	0x1c, 0xb2, 0x50, 0xdd, 0x56, 0x6d, 0x15, 0x33, 0x25, 0x04, 0x2c, 0x74, 0x53, 0x82, 0x51, 0x54,
4074
+	0xcb, 0x7a, 0x4c, 0xaa, 0xb0, 0xc8, 0xc3, 0x11, 0x46, 0x46, 0x2d, 0xa9, 0xa1, 0x5a, 0xf1, 0xfc,
4075
+	0xec, 0x6b, 0x71, 0x05, 0x87, 0x8a, 0x87, 0x65, 0x4c, 0xe0, 0xf5, 0x51, 0x4b, 0x7a, 0x4c, 0xae,
4076
+	0x43, 0x69, 0x18, 0xe1, 0x07, 0x26, 0xe8, 0x7f, 0x75, 0xd8, 0x0b, 0x45, 0x87, 0xdd, 0x55, 0x08,
4077
+	0x53, 0x4d, 0x0c, 0x9c, 0xdc, 0x82, 0x33, 0x89, 0x8c, 0xe2, 0xfe, 0x40, 0x60, 0x94, 0xfb, 0x31,
4078
+	0x17, 0x7e, 0xe4, 0xd5, 0x2a, 0x27, 0x17, 0xa5, 0xae, 0x69, 0x98, 0xf4, 0xb4, 0xa2, 0x6d, 0x2b,
4079
+	0x96, 0xa3, 0x49, 0xc4, 0x81, 0x95, 0x38, 0x0d, 0x82, 0x7e, 0x14, 0x67, 0xb5, 0x11, 0xb4, 0xc8,
4080
+	0x7f, 0x88, 0x9a, 0x83, 0xac, 0xbb, 0x19, 0x89, 0xda, 0xf1, 0x74, 0x52, 0xbf, 0x09, 0x76, 0x2e,
4081
+	0xa2, 0x2a, 0x12, 0x47, 0xfc, 0xd8, 0x24, 0x49, 0x0d, 0x55, 0xe2, 0x46, 0x2c, 0x48, 0xb3, 0xce,
4082
+	0x8a, 0x89, 0xd3, 0x93, 0x8f, 0x17, 0x6e, 0xcc, 0xd7, 0x5b, 0x60, 0xe7, 0x64, 0xc9, 0x1b, 0xb0,
4083
+	0x2a, 0xf8, 0xc0, 0x4f, 0x50, 0xa6, 0xcf, 0x52, 0x79, 0x58, 0xfb, 0x42, 0x13, 0x56, 0xc6, 0x8b,
4084
+	0x6d, 0x5c, 0x6b, 0xfc, 0x8d, 0x6d, 0x27, 0x5f, 0x22, 0x48, 0x27, 0xbb, 0xcb, 0x7a, 0xc7, 0x53,
4085
+	0xad, 0xcd, 0x57, 0x95, 0x14, 0x7d, 0x73, 0x82, 0x54, 0xed, 0xb8, 0xab, 0xda, 0xb9, 0x26, 0x93,
4086
+	0x8f, 0x60, 0x29, 0x8e, 0x84, 0x1c, 0xbb, 0x68, 0xad, 0xd0, 0xed, 0x08, 0x30, 0x45, 0x2d, 0x03,
4087
+	0x37, 0x0e, 0xe1, 0xd4, 0xac, 0x1a, 0x76, 0xad, 0xc5, 0x07, 0x3b, 0x0e, 0x36, 0xc0, 0x8b, 0xd8,
4088
+	0xb3, 0xce, 0xcf, 0xbe, 0x7c, 0xe0, 0x0b, 0x99, 0xb2, 0x60, 0xc7, 0x21, 0xef, 0x62, 0x6f, 0xdb,
4089
+	0xdb, 0xa7, 0x14, 0x3b, 0xe0, 0x3a, 0xe2, 0x2e, 0xce, 0xe2, 0xd4, 0x2b, 0x4c, 0xbb, 0x47, 0xa3,
4090
+	0x83, 0x49, 0x87, 0xfb, 0x61, 0x01, 0x6c, 0x53, 0xfe, 0x5e, 0x6f, 0x87, 0xfb, 0x1c, 0x56, 0xb3,
4091
+	0x9b, 0xda, 0x77, 0xf5, 0xa7, 0x99, 0x9a, 0xf3, 0xb2, 0x0b, 0xbb, 0x92, 0x11, 0x4c, 0xf1, 0xbd,
4092
+	0x0c, 0x2b, 0x7e, 0x3c, 0xba, 0xd6, 0xe7, 0x21, 0x3b, 0x08, 0x4c, 0xb3, 0x2b, 0x53, 0x5b, 0xad,
4093
+	0xf5, 0xb2, 0x25, 0x55, 0x50, 0x31, 0xf8, 0x5c, 0x84, 0xa6, 0x8d, 0x95, 0xe9, 0x64, 0x4e, 0x3e,
4094
+	0x03, 0xcb, 0x8f, 0xd9, 0xd0, 0x54, 0x99, 0xc2, 0x2f, 0xd8, 0x71, 0xda, 0xbb, 0xc6, 0x22, 0x5b,
4095
+	0xe5, 0xe7, 0x4f, 0xd7, 0x2d, 0xb5, 0x40, 0x35, 0xad, 0xf1, 0x33, 0x76, 0xfe, 0x4e, 0x90, 0x26,
4096
+	0xd2, 0x14, 0x89, 0xd7, 0x16, 0x97, 0xaf, 0xe1, 0x0c, 0xd3, 0xbf, 0x77, 0x58, 0xa8, 0x6e, 0x9c,
4097
+	0x2e, 0x90, 0x26, 0x36, 0x57, 0x0a, 0xe5, 0x26, 0xe0, 0xac, 0x98, 0x1a, 0xcd, 0x2a, 0xfb, 0xd7,
4098
+	0x3a, 0xb6, 0xd6, 0xd5, 0x48, 0xb8, 0x87, 0x58, 0x69, 0xb3, 0x2b, 0x6a, 0x7e, 0x1d, 0x14, 0xfe,
4099
+	0x6e, 0xbc, 0x9b, 0x07, 0x66, 0xf1, 0x36, 0xba, 0xb3, 0x1a, 0xd8, 0xe9, 0x2d, 0xc1, 0x1e, 0x8e,
4100
+	0x4b, 0x7d, 0xa1, 0x7b, 0x29, 0xbe, 0x9f, 0x91, 0xd0, 0x0c, 0xf2, 0x15, 0x80, 0xe7, 0x27, 0x31,
4101
+	0x93, 0x28, 0x27, 0x4c, 0x16, 0x0a, 0x3f, 0xb0, 0x3b, 0x41, 0xcd, 0xa8, 0xe4, 0xd8, 0xe4, 0x36,
4102
+	0xb6, 0x3f, 0x36, 0xf6, 0x51, 0xe9, 0xe4, 0xea, 0xd4, 0x69, 0x1b, 0x89, 0xaa, 0x92, 0xc0, 0x8c,
4103
+	0x96, 0xc7, 0x2b, 0xb4, 0xec, 0x32, 0xe3, 0xab, 0x5b, 0x40, 0x3c, 0xfe, 0x90, 0xa5, 0x81, 0xec,
4104
+	0xe7, 0xda, 0xc9, 0xf2, 0x2b, 0xdd, 0x59, 0x35, 0xac, 0x3b, 0x93, 0xae, 0x72, 0xe9, 0xc9, 0xb3,
4105
+	0xb5, 0xb9, 0x3f, 0xf0, 0xf9, 0xeb, 0xd9, 0xda, 0xfc, 0xb7, 0xcf, 0xd7, 0xe6, 0x9f, 0xe0, 0xf3,
4106
+	0x1b, 0x3e, 0x7f, 0xe2, 0x73, 0x50, 0xd2, 0xff, 0x29, 0x3e, 0xfc, 0x27, 0x00, 0x00, 0xff, 0xff,
4107
+	0xde, 0xdd, 0x4d, 0x58, 0xb2, 0x0c, 0x00, 0x00,
4105 4108
 }
... ...
@@ -114,6 +114,10 @@ message TaskSpec {
114 114
 
115 115
 	// Placement specifies node selection constraints
116 116
 	Placement placement = 5;
117
+
118
+	// LogDriver specifies the log driver to use for the task. Any runtime will
119
+	// direct logs into the specified driver for the duration of the task.
120
+	Driver log_driver = 6;
117 121
 }
118 122
 
119 123
 // Container specifies runtime parameters for a container.
... ...
@@ -243,4 +247,11 @@ message ClusterSpec {
243 243
 
244 244
 	// CAConfig defines cluster-level certificate authority settings.
245 245
 	CAConfig ca_config = 6 [(gogoproto.nullable) = false, (gogoproto.customname) = "CAConfig"];
246
+
247
+	// DefaultLogDriver specifies the log driver to use for the cluster if not
248
+	// specified for each task.
249
+	//
250
+	// If this is changed, only new tasks will pick up the new log driver.
251
+	// Existing tasks will continue to use the previous default until rescheduled.
252
+	Driver default_log_driver = 7;
246 253
 }
... ...
@@ -146,6 +146,8 @@ import docker_swarmkit_v1 "github.com/docker/swarmkit/api/timestamp"
146 146
 import docker_swarmkit_v11 "github.com/docker/swarmkit/api/duration"
147 147
 import _ "github.com/gogo/protobuf/gogoproto"
148 148
 
149
+import os "os"
150
+
149 151
 import strings "strings"
150 152
 import github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
151 153
 import sort "sort"
... ...
@@ -310,15 +312,18 @@ type Mount_MountType int32
310 310
 const (
311 311
 	MountTypeBind   Mount_MountType = 0
312 312
 	MountTypeVolume Mount_MountType = 1
313
+	MountTypeTmpfs  Mount_MountType = 2
313 314
 )
314 315
 
315 316
 var Mount_MountType_name = map[int32]string{
316 317
 	0: "BIND",
317 318
 	1: "VOLUME",
319
+	2: "TMPFS",
318 320
 }
319 321
 var Mount_MountType_value = map[string]int32{
320 322
 	"BIND":   0,
321 323
 	"VOLUME": 1,
324
+	"TMPFS":  2,
322 325
 }
323 326
 
324 327
 func (x Mount_MountType) String() string {
... ...
@@ -640,16 +645,26 @@ func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{1
640 640
 type Mount struct {
641 641
 	// Type defines the nature of the mount.
642 642
 	Type Mount_MountType `protobuf:"varint,1,opt,name=type,proto3,enum=docker.swarmkit.v1.Mount_MountType" json:"type,omitempty"`
643
-	// Source path to mount
643
+	// Source specifies the name of the mount. Depending on mount type, this
644
+	// may be a volume name or a host path, or even ignored.
644 645
 	Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"`
645 646
 	// Target path in container
646 647
 	Target string `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"`
647 648
 	// ReadOnly should be set to true if the mount should not be writable.
648 649
 	ReadOnly bool `protobuf:"varint,4,opt,name=readonly,proto3" json:"readonly,omitempty"`
649 650
 	// BindOptions configures properties of a bind mount type.
651
+	//
652
+	// For mounts of type bind, the source must be an absolute host path.
650 653
 	BindOptions *Mount_BindOptions `protobuf:"bytes,5,opt,name=bind_options,json=bindOptions" json:"bind_options,omitempty"`
651 654
 	// VolumeOptions configures the properties specific to a volume mount type.
655
+	//
656
+	// For mounts of type volume, the source will be used as the volume name.
652 657
 	VolumeOptions *Mount_VolumeOptions `protobuf:"bytes,6,opt,name=volume_options,json=volumeOptions" json:"volume_options,omitempty"`
658
+	// TmpfsOptions allows one to set options for mounting a temporary
659
+	// filesystem.
660
+	//
661
+	// The source field will be ignored when using mounts of type tmpfs.
662
+	TmpfsOptions *Mount_TmpfsOptions `protobuf:"bytes,7,opt,name=tmpfs_options,json=tmpfsOptions" json:"tmpfs_options,omitempty"`
653 663
 }
654 664
 
655 665
 func (m *Mount) Reset()                    { *m = Mount{} }
... ...
@@ -683,6 +698,24 @@ func (m *Mount_VolumeOptions) Reset()                    { *m = Mount_VolumeOpti
683 683
 func (*Mount_VolumeOptions) ProtoMessage()               {}
684 684
 func (*Mount_VolumeOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{11, 1} }
685 685
 
686
+type Mount_TmpfsOptions struct {
687
+	// Size sets the size of the tmpfs, in bytes.
688
+	//
689
+	// This will be converted to an operating system specific value
690
+	// depending on the host. For example, on linux, it will be convered to
691
+	// use a 'k', 'm' or 'g' syntax. BSD, though not widely supported with
692
+	// docker, uses a straight byte value.
693
+	//
694
+	// Percentages are not supported.
695
+	SizeBytes int64 `protobuf:"varint,1,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
696
+	// Mode of the tmpfs upon creation
697
+	Mode os.FileMode `protobuf:"varint,2,opt,name=mode,proto3,customtype=os.FileMode" json:"mode"`
698
+}
699
+
700
+func (m *Mount_TmpfsOptions) Reset()                    { *m = Mount_TmpfsOptions{} }
701
+func (*Mount_TmpfsOptions) ProtoMessage()               {}
702
+func (*Mount_TmpfsOptions) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []int{11, 2} }
703
+
686 704
 type RestartPolicy struct {
687 705
 	Condition RestartPolicy_RestartCondition `protobuf:"varint,1,opt,name=condition,proto3,enum=docker.swarmkit.v1.RestartPolicy_RestartCondition" json:"condition,omitempty"`
688 706
 	// Delay between restart attempts
... ...
@@ -1132,6 +1165,7 @@ func init() {
1132 1132
 	proto.RegisterType((*Mount)(nil), "docker.swarmkit.v1.Mount")
1133 1133
 	proto.RegisterType((*Mount_BindOptions)(nil), "docker.swarmkit.v1.Mount.BindOptions")
1134 1134
 	proto.RegisterType((*Mount_VolumeOptions)(nil), "docker.swarmkit.v1.Mount.VolumeOptions")
1135
+	proto.RegisterType((*Mount_TmpfsOptions)(nil), "docker.swarmkit.v1.Mount.TmpfsOptions")
1135 1136
 	proto.RegisterType((*RestartPolicy)(nil), "docker.swarmkit.v1.RestartPolicy")
1136 1137
 	proto.RegisterType((*UpdateConfig)(nil), "docker.swarmkit.v1.UpdateConfig")
1137 1138
 	proto.RegisterType((*ContainerStatus)(nil), "docker.swarmkit.v1.ContainerStatus")
... ...
@@ -1345,6 +1379,7 @@ func (m *Mount) Copy() *Mount {
1345 1345
 		ReadOnly:      m.ReadOnly,
1346 1346
 		BindOptions:   m.BindOptions.Copy(),
1347 1347
 		VolumeOptions: m.VolumeOptions.Copy(),
1348
+		TmpfsOptions:  m.TmpfsOptions.Copy(),
1348 1349
 	}
1349 1350
 
1350 1351
 	return o
... ...
@@ -1382,6 +1417,19 @@ func (m *Mount_VolumeOptions) Copy() *Mount_VolumeOptions {
1382 1382
 	return o
1383 1383
 }
1384 1384
 
1385
+func (m *Mount_TmpfsOptions) Copy() *Mount_TmpfsOptions {
1386
+	if m == nil {
1387
+		return nil
1388
+	}
1389
+
1390
+	o := &Mount_TmpfsOptions{
1391
+		SizeBytes: m.SizeBytes,
1392
+		Mode:      m.Mode,
1393
+	}
1394
+
1395
+	return o
1396
+}
1397
+
1385 1398
 func (m *RestartPolicy) Copy() *RestartPolicy {
1386 1399
 	if m == nil {
1387 1400
 		return nil
... ...
@@ -1925,7 +1973,7 @@ func (this *Mount) GoString() string {
1925 1925
 	if this == nil {
1926 1926
 		return "nil"
1927 1927
 	}
1928
-	s := make([]string, 0, 10)
1928
+	s := make([]string, 0, 11)
1929 1929
 	s = append(s, "&api.Mount{")
1930 1930
 	s = append(s, "Type: "+fmt.Sprintf("%#v", this.Type)+",\n")
1931 1931
 	s = append(s, "Source: "+fmt.Sprintf("%#v", this.Source)+",\n")
... ...
@@ -1937,6 +1985,9 @@ func (this *Mount) GoString() string {
1937 1937
 	if this.VolumeOptions != nil {
1938 1938
 		s = append(s, "VolumeOptions: "+fmt.Sprintf("%#v", this.VolumeOptions)+",\n")
1939 1939
 	}
1940
+	if this.TmpfsOptions != nil {
1941
+		s = append(s, "TmpfsOptions: "+fmt.Sprintf("%#v", this.TmpfsOptions)+",\n")
1942
+	}
1940 1943
 	s = append(s, "}")
1941 1944
 	return strings.Join(s, "")
1942 1945
 }
... ...
@@ -1976,6 +2027,17 @@ func (this *Mount_VolumeOptions) GoString() string {
1976 1976
 	s = append(s, "}")
1977 1977
 	return strings.Join(s, "")
1978 1978
 }
1979
+func (this *Mount_TmpfsOptions) GoString() string {
1980
+	if this == nil {
1981
+		return "nil"
1982
+	}
1983
+	s := make([]string, 0, 6)
1984
+	s = append(s, "&api.Mount_TmpfsOptions{")
1985
+	s = append(s, "SizeBytes: "+fmt.Sprintf("%#v", this.SizeBytes)+",\n")
1986
+	s = append(s, "Mode: "+fmt.Sprintf("%#v", this.Mode)+",\n")
1987
+	s = append(s, "}")
1988
+	return strings.Join(s, "")
1989
+}
1979 1990
 func (this *RestartPolicy) GoString() string {
1980 1991
 	if this == nil {
1981 1992
 		return "nil"
... ...
@@ -2804,6 +2866,16 @@ func (m *Mount) MarshalTo(data []byte) (int, error) {
2804 2804
 		}
2805 2805
 		i += n7
2806 2806
 	}
2807
+	if m.TmpfsOptions != nil {
2808
+		data[i] = 0x3a
2809
+		i++
2810
+		i = encodeVarintTypes(data, i, uint64(m.TmpfsOptions.Size()))
2811
+		n8, err := m.TmpfsOptions.MarshalTo(data[i:])
2812
+		if err != nil {
2813
+			return 0, err
2814
+		}
2815
+		i += n8
2816
+	}
2807 2817
 	return i, nil
2808 2818
 }
2809 2819
 
... ...
@@ -2876,11 +2948,39 @@ func (m *Mount_VolumeOptions) MarshalTo(data []byte) (int, error) {
2876 2876
 		data[i] = 0x1a
2877 2877
 		i++
2878 2878
 		i = encodeVarintTypes(data, i, uint64(m.DriverConfig.Size()))
2879
-		n8, err := m.DriverConfig.MarshalTo(data[i:])
2879
+		n9, err := m.DriverConfig.MarshalTo(data[i:])
2880 2880
 		if err != nil {
2881 2881
 			return 0, err
2882 2882
 		}
2883
-		i += n8
2883
+		i += n9
2884
+	}
2885
+	return i, nil
2886
+}
2887
+
2888
+func (m *Mount_TmpfsOptions) Marshal() (data []byte, err error) {
2889
+	size := m.Size()
2890
+	data = make([]byte, size)
2891
+	n, err := m.MarshalTo(data)
2892
+	if err != nil {
2893
+		return nil, err
2894
+	}
2895
+	return data[:n], nil
2896
+}
2897
+
2898
+func (m *Mount_TmpfsOptions) MarshalTo(data []byte) (int, error) {
2899
+	var i int
2900
+	_ = i
2901
+	var l int
2902
+	_ = l
2903
+	if m.SizeBytes != 0 {
2904
+		data[i] = 0x8
2905
+		i++
2906
+		i = encodeVarintTypes(data, i, uint64(m.SizeBytes))
2907
+	}
2908
+	if m.Mode != 0 {
2909
+		data[i] = 0x10
2910
+		i++
2911
+		i = encodeVarintTypes(data, i, uint64(m.Mode))
2884 2912
 	}
2885 2913
 	return i, nil
2886 2914
 }
... ...
@@ -2909,11 +3009,11 @@ func (m *RestartPolicy) MarshalTo(data []byte) (int, error) {
2909 2909
 		data[i] = 0x12
2910 2910
 		i++
2911 2911
 		i = encodeVarintTypes(data, i, uint64(m.Delay.Size()))
2912
-		n9, err := m.Delay.MarshalTo(data[i:])
2912
+		n10, err := m.Delay.MarshalTo(data[i:])
2913 2913
 		if err != nil {
2914 2914
 			return 0, err
2915 2915
 		}
2916
-		i += n9
2916
+		i += n10
2917 2917
 	}
2918 2918
 	if m.MaxAttempts != 0 {
2919 2919
 		data[i] = 0x18
... ...
@@ -2924,11 +3024,11 @@ func (m *RestartPolicy) MarshalTo(data []byte) (int, error) {
2924 2924
 		data[i] = 0x22
2925 2925
 		i++
2926 2926
 		i = encodeVarintTypes(data, i, uint64(m.Window.Size()))
2927
-		n10, err := m.Window.MarshalTo(data[i:])
2927
+		n11, err := m.Window.MarshalTo(data[i:])
2928 2928
 		if err != nil {
2929 2929
 			return 0, err
2930 2930
 		}
2931
-		i += n10
2931
+		i += n11
2932 2932
 	}
2933 2933
 	return i, nil
2934 2934
 }
... ...
@@ -2956,11 +3056,11 @@ func (m *UpdateConfig) MarshalTo(data []byte) (int, error) {
2956 2956
 	data[i] = 0x12
2957 2957
 	i++
2958 2958
 	i = encodeVarintTypes(data, i, uint64(m.Delay.Size()))
2959
-	n11, err := m.Delay.MarshalTo(data[i:])
2959
+	n12, err := m.Delay.MarshalTo(data[i:])
2960 2960
 	if err != nil {
2961 2961
 		return 0, err
2962 2962
 	}
2963
-	i += n11
2963
+	i += n12
2964 2964
 	return i, nil
2965 2965
 }
2966 2966
 
... ...
@@ -3017,11 +3117,11 @@ func (m *TaskStatus) MarshalTo(data []byte) (int, error) {
3017 3017
 		data[i] = 0xa
3018 3018
 		i++
3019 3019
 		i = encodeVarintTypes(data, i, uint64(m.Timestamp.Size()))
3020
-		n12, err := m.Timestamp.MarshalTo(data[i:])
3020
+		n13, err := m.Timestamp.MarshalTo(data[i:])
3021 3021
 		if err != nil {
3022 3022
 			return 0, err
3023 3023
 		}
3024
-		i += n12
3024
+		i += n13
3025 3025
 	}
3026 3026
 	if m.State != 0 {
3027 3027
 		data[i] = 0x10
... ...
@@ -3041,11 +3141,11 @@ func (m *TaskStatus) MarshalTo(data []byte) (int, error) {
3041 3041
 		i += copy(data[i:], m.Err)
3042 3042
 	}
3043 3043
 	if m.RuntimeStatus != nil {
3044
-		nn13, err := m.RuntimeStatus.MarshalTo(data[i:])
3044
+		nn14, err := m.RuntimeStatus.MarshalTo(data[i:])
3045 3045
 		if err != nil {
3046 3046
 			return 0, err
3047 3047
 		}
3048
-		i += nn13
3048
+		i += nn14
3049 3049
 	}
3050 3050
 	return i, nil
3051 3051
 }
... ...
@@ -3056,11 +3156,11 @@ func (m *TaskStatus_Container) MarshalTo(data []byte) (int, error) {
3056 3056
 		data[i] = 0x2a
3057 3057
 		i++
3058 3058
 		i = encodeVarintTypes(data, i, uint64(m.Container.Size()))
3059
-		n14, err := m.Container.MarshalTo(data[i:])
3059
+		n15, err := m.Container.MarshalTo(data[i:])
3060 3060
 		if err != nil {
3061 3061
 			return 0, err
3062 3062
 		}
3063
-		i += n14
3063
+		i += n15
3064 3064
 	}
3065 3065
 	return i, nil
3066 3066
 }
... ...
@@ -3221,11 +3321,11 @@ func (m *IPAMOptions) MarshalTo(data []byte) (int, error) {
3221 3221
 		data[i] = 0xa
3222 3222
 		i++
3223 3223
 		i = encodeVarintTypes(data, i, uint64(m.Driver.Size()))
3224
-		n15, err := m.Driver.MarshalTo(data[i:])
3224
+		n16, err := m.Driver.MarshalTo(data[i:])
3225 3225
 		if err != nil {
3226 3226
 			return 0, err
3227 3227
 		}
3228
-		i += n15
3228
+		i += n16
3229 3229
 	}
3230 3230
 	if len(m.Configs) > 0 {
3231 3231
 		for _, msg := range m.Configs {
... ...
@@ -3291,11 +3391,11 @@ func (m *WeightedPeer) MarshalTo(data []byte) (int, error) {
3291 3291
 		data[i] = 0xa
3292 3292
 		i++
3293 3293
 		i = encodeVarintTypes(data, i, uint64(m.Peer.Size()))
3294
-		n16, err := m.Peer.MarshalTo(data[i:])
3294
+		n17, err := m.Peer.MarshalTo(data[i:])
3295 3295
 		if err != nil {
3296 3296
 			return 0, err
3297 3297
 		}
3298
-		i += n16
3298
+		i += n17
3299 3299
 	}
3300 3300
 	if m.Weight != 0 {
3301 3301
 		data[i] = 0x10
... ...
@@ -3398,11 +3498,11 @@ func (m *AcceptancePolicy_RoleAdmissionPolicy) MarshalTo(data []byte) (int, erro
3398 3398
 		data[i] = 0x1a
3399 3399
 		i++
3400 3400
 		i = encodeVarintTypes(data, i, uint64(m.Secret.Size()))
3401
-		n17, err := m.Secret.MarshalTo(data[i:])
3401
+		n18, err := m.Secret.MarshalTo(data[i:])
3402 3402
 		if err != nil {
3403 3403
 			return 0, err
3404 3404
 		}
3405
-		i += n17
3405
+		i += n18
3406 3406
 	}
3407 3407
 	return i, nil
3408 3408
 }
... ...
@@ -3502,11 +3602,11 @@ func (m *CAConfig) MarshalTo(data []byte) (int, error) {
3502 3502
 		data[i] = 0xa
3503 3503
 		i++
3504 3504
 		i = encodeVarintTypes(data, i, uint64(m.NodeCertExpiry.Size()))
3505
-		n18, err := m.NodeCertExpiry.MarshalTo(data[i:])
3505
+		n19, err := m.NodeCertExpiry.MarshalTo(data[i:])
3506 3506
 		if err != nil {
3507 3507
 			return 0, err
3508 3508
 		}
3509
-		i += n18
3509
+		i += n19
3510 3510
 	}
3511 3511
 	if len(m.ExternalCAs) > 0 {
3512 3512
 		for _, msg := range m.ExternalCAs {
... ...
@@ -3565,11 +3665,11 @@ func (m *DispatcherConfig) MarshalTo(data []byte) (int, error) {
3565 3565
 		data[i] = 0xa
3566 3566
 		i++
3567 3567
 		i = encodeVarintTypes(data, i, uint64(m.HeartbeatPeriod.Size()))
3568
-		n19, err := m.HeartbeatPeriod.MarshalTo(data[i:])
3568
+		n20, err := m.HeartbeatPeriod.MarshalTo(data[i:])
3569 3569
 		if err != nil {
3570 3570
 			return 0, err
3571 3571
 		}
3572
-		i += n19
3572
+		i += n20
3573 3573
 	}
3574 3574
 	return i, nil
3575 3575
 }
... ...
@@ -3715,11 +3815,11 @@ func (m *Certificate) MarshalTo(data []byte) (int, error) {
3715 3715
 	data[i] = 0x1a
3716 3716
 	i++
3717 3717
 	i = encodeVarintTypes(data, i, uint64(m.Status.Size()))
3718
-	n20, err := m.Status.MarshalTo(data[i:])
3718
+	n21, err := m.Status.MarshalTo(data[i:])
3719 3719
 	if err != nil {
3720 3720
 		return 0, err
3721 3721
 	}
3722
-	i += n20
3722
+	i += n21
3723 3723
 	if len(m.Certificate) > 0 {
3724 3724
 		data[i] = 0x22
3725 3725
 		i++
... ...
@@ -4038,6 +4138,10 @@ func (m *Mount) Size() (n int) {
4038 4038
 		l = m.VolumeOptions.Size()
4039 4039
 		n += 1 + l + sovTypes(uint64(l))
4040 4040
 	}
4041
+	if m.TmpfsOptions != nil {
4042
+		l = m.TmpfsOptions.Size()
4043
+		n += 1 + l + sovTypes(uint64(l))
4044
+	}
4041 4045
 	return n
4042 4046
 }
4043 4047
 
... ...
@@ -4071,6 +4175,18 @@ func (m *Mount_VolumeOptions) Size() (n int) {
4071 4071
 	return n
4072 4072
 }
4073 4073
 
4074
+func (m *Mount_TmpfsOptions) Size() (n int) {
4075
+	var l int
4076
+	_ = l
4077
+	if m.SizeBytes != 0 {
4078
+		n += 1 + sovTypes(uint64(m.SizeBytes))
4079
+	}
4080
+	if m.Mode != 0 {
4081
+		n += 1 + sovTypes(uint64(m.Mode))
4082
+	}
4083
+	return n
4084
+}
4085
+
4074 4086
 func (m *RestartPolicy) Size() (n int) {
4075 4087
 	var l int
4076 4088
 	_ = l
... ...
@@ -4651,6 +4767,7 @@ func (this *Mount) String() string {
4651 4651
 		`ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`,
4652 4652
 		`BindOptions:` + strings.Replace(fmt.Sprintf("%v", this.BindOptions), "Mount_BindOptions", "Mount_BindOptions", 1) + `,`,
4653 4653
 		`VolumeOptions:` + strings.Replace(fmt.Sprintf("%v", this.VolumeOptions), "Mount_VolumeOptions", "Mount_VolumeOptions", 1) + `,`,
4654
+		`TmpfsOptions:` + strings.Replace(fmt.Sprintf("%v", this.TmpfsOptions), "Mount_TmpfsOptions", "Mount_TmpfsOptions", 1) + `,`,
4654 4655
 		`}`,
4655 4656
 	}, "")
4656 4657
 	return s
... ...
@@ -4687,6 +4804,17 @@ func (this *Mount_VolumeOptions) String() string {
4687 4687
 	}, "")
4688 4688
 	return s
4689 4689
 }
4690
+func (this *Mount_TmpfsOptions) String() string {
4691
+	if this == nil {
4692
+		return "nil"
4693
+	}
4694
+	s := strings.Join([]string{`&Mount_TmpfsOptions{`,
4695
+		`SizeBytes:` + fmt.Sprintf("%v", this.SizeBytes) + `,`,
4696
+		`Mode:` + fmt.Sprintf("%v", this.Mode) + `,`,
4697
+		`}`,
4698
+	}, "")
4699
+	return s
4700
+}
4690 4701
 func (this *RestartPolicy) String() string {
4691 4702
 	if this == nil {
4692 4703
 		return "nil"
... ...
@@ -6584,6 +6712,39 @@ func (m *Mount) Unmarshal(data []byte) error {
6584 6584
 				return err
6585 6585
 			}
6586 6586
 			iNdEx = postIndex
6587
+		case 7:
6588
+			if wireType != 2 {
6589
+				return fmt.Errorf("proto: wrong wireType = %d for field TmpfsOptions", wireType)
6590
+			}
6591
+			var msglen int
6592
+			for shift := uint(0); ; shift += 7 {
6593
+				if shift >= 64 {
6594
+					return ErrIntOverflowTypes
6595
+				}
6596
+				if iNdEx >= l {
6597
+					return io.ErrUnexpectedEOF
6598
+				}
6599
+				b := data[iNdEx]
6600
+				iNdEx++
6601
+				msglen |= (int(b) & 0x7F) << shift
6602
+				if b < 0x80 {
6603
+					break
6604
+				}
6605
+			}
6606
+			if msglen < 0 {
6607
+				return ErrInvalidLengthTypes
6608
+			}
6609
+			postIndex := iNdEx + msglen
6610
+			if postIndex > l {
6611
+				return io.ErrUnexpectedEOF
6612
+			}
6613
+			if m.TmpfsOptions == nil {
6614
+				m.TmpfsOptions = &Mount_TmpfsOptions{}
6615
+			}
6616
+			if err := m.TmpfsOptions.Unmarshal(data[iNdEx:postIndex]); err != nil {
6617
+				return err
6618
+			}
6619
+			iNdEx = postIndex
6587 6620
 		default:
6588 6621
 			iNdEx = preIndex
6589 6622
 			skippy, err := skipTypes(data[iNdEx:])
... ...
@@ -6888,6 +7049,94 @@ func (m *Mount_VolumeOptions) Unmarshal(data []byte) error {
6888 6888
 	}
6889 6889
 	return nil
6890 6890
 }
6891
+func (m *Mount_TmpfsOptions) Unmarshal(data []byte) error {
6892
+	l := len(data)
6893
+	iNdEx := 0
6894
+	for iNdEx < l {
6895
+		preIndex := iNdEx
6896
+		var wire uint64
6897
+		for shift := uint(0); ; shift += 7 {
6898
+			if shift >= 64 {
6899
+				return ErrIntOverflowTypes
6900
+			}
6901
+			if iNdEx >= l {
6902
+				return io.ErrUnexpectedEOF
6903
+			}
6904
+			b := data[iNdEx]
6905
+			iNdEx++
6906
+			wire |= (uint64(b) & 0x7F) << shift
6907
+			if b < 0x80 {
6908
+				break
6909
+			}
6910
+		}
6911
+		fieldNum := int32(wire >> 3)
6912
+		wireType := int(wire & 0x7)
6913
+		if wireType == 4 {
6914
+			return fmt.Errorf("proto: TmpfsOptions: wiretype end group for non-group")
6915
+		}
6916
+		if fieldNum <= 0 {
6917
+			return fmt.Errorf("proto: TmpfsOptions: illegal tag %d (wire type %d)", fieldNum, wire)
6918
+		}
6919
+		switch fieldNum {
6920
+		case 1:
6921
+			if wireType != 0 {
6922
+				return fmt.Errorf("proto: wrong wireType = %d for field SizeBytes", wireType)
6923
+			}
6924
+			m.SizeBytes = 0
6925
+			for shift := uint(0); ; shift += 7 {
6926
+				if shift >= 64 {
6927
+					return ErrIntOverflowTypes
6928
+				}
6929
+				if iNdEx >= l {
6930
+					return io.ErrUnexpectedEOF
6931
+				}
6932
+				b := data[iNdEx]
6933
+				iNdEx++
6934
+				m.SizeBytes |= (int64(b) & 0x7F) << shift
6935
+				if b < 0x80 {
6936
+					break
6937
+				}
6938
+			}
6939
+		case 2:
6940
+			if wireType != 0 {
6941
+				return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType)
6942
+			}
6943
+			m.Mode = 0
6944
+			for shift := uint(0); ; shift += 7 {
6945
+				if shift >= 64 {
6946
+					return ErrIntOverflowTypes
6947
+				}
6948
+				if iNdEx >= l {
6949
+					return io.ErrUnexpectedEOF
6950
+				}
6951
+				b := data[iNdEx]
6952
+				iNdEx++
6953
+				m.Mode |= (os.FileMode(b) & 0x7F) << shift
6954
+				if b < 0x80 {
6955
+					break
6956
+				}
6957
+			}
6958
+		default:
6959
+			iNdEx = preIndex
6960
+			skippy, err := skipTypes(data[iNdEx:])
6961
+			if err != nil {
6962
+				return err
6963
+			}
6964
+			if skippy < 0 {
6965
+				return ErrInvalidLengthTypes
6966
+			}
6967
+			if (iNdEx + skippy) > l {
6968
+				return io.ErrUnexpectedEOF
6969
+			}
6970
+			iNdEx += skippy
6971
+		}
6972
+	}
6973
+
6974
+	if iNdEx > l {
6975
+		return io.ErrUnexpectedEOF
6976
+	}
6977
+	return nil
6978
+}
6891 6979
 func (m *RestartPolicy) Unmarshal(data []byte) error {
6892 6980
 	l := len(data)
6893 6981
 	iNdEx := 0
... ...
@@ -10199,196 +10448,201 @@ var (
10199 10199
 )
10200 10200
 
10201 10201
 var fileDescriptorTypes = []byte{
10202
-	// 3042 bytes of a gzipped FileDescriptorProto
10203
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x6f, 0x1b, 0xc7,
10204
-	0x15, 0x17, 0x3f, 0x45, 0x3e, 0x52, 0x12, 0xbd, 0x76, 0x1c, 0x99, 0x51, 0x65, 0x77, 0x13, 0x37,
10205
-	0xce, 0x47, 0x99, 0x58, 0x49, 0x0b, 0x37, 0x41, 0xeb, 0x2c, 0x3f, 0x64, 0xb1, 0x96, 0x48, 0x62,
10206
-	0xa8, 0x0f, 0x04, 0x05, 0x4a, 0xac, 0x96, 0x23, 0x71, 0xa3, 0xe5, 0x2e, 0xbb, 0xbb, 0x94, 0x4c,
10207
-	0x14, 0x05, 0x9c, 0x5e, 0x5a, 0x04, 0x3d, 0xf4, 0x5e, 0x04, 0x41, 0xd1, 0xa2, 0xb7, 0x9e, 0x0b,
10208
-	0xf4, 0xe4, 0xa3, 0x8f, 0x2d, 0x0a, 0x14, 0x01, 0x0a, 0x04, 0x4d, 0xfa, 0x0f, 0x04, 0xe8, 0x21,
10209
-	0x87, 0xf6, 0xd0, 0x37, 0x1f, 0xbb, 0x4b, 0xd2, 0x6b, 0xc5, 0x6e, 0x72, 0x20, 0xb8, 0xf3, 0xde,
10210
-	0xef, 0xbd, 0x99, 0x37, 0xf3, 0xe6, 0x7d, 0x0c, 0x14, 0xfc, 0xc9, 0x88, 0x7a, 0x95, 0x91, 0xeb,
10211
-	0xf8, 0x8e, 0xa2, 0xf4, 0x1d, 0xe3, 0x84, 0xba, 0x15, 0xef, 0x4c, 0x77, 0x87, 0x27, 0xa6, 0x5f,
10212
-	0x39, 0xbd, 0x59, 0xbe, 0xe2, 0x9b, 0x43, 0xea, 0xf9, 0xfa, 0x70, 0xf4, 0x5a, 0xf8, 0x25, 0xe0,
10213
-	0xe5, 0x67, 0xfb, 0x63, 0x57, 0xf7, 0x4d, 0xc7, 0x7e, 0x2d, 0xf8, 0x90, 0x8c, 0x4b, 0xc7, 0xce,
10214
-	0xb1, 0xc3, 0x3f, 0x5f, 0x63, 0x5f, 0x82, 0xaa, 0x5e, 0x85, 0xc5, 0x7d, 0xea, 0x7a, 0x08, 0x53,
10215
-	0x2e, 0x41, 0xc6, 0xb4, 0xfb, 0xf4, 0xde, 0x6a, 0xe2, 0x5a, 0xe2, 0x46, 0x9a, 0x88, 0x81, 0xfa,
10216
-	0xdb, 0x04, 0x14, 0x34, 0xdb, 0x76, 0x7c, 0xae, 0xcb, 0x53, 0x14, 0x48, 0xdb, 0xfa, 0x90, 0x72,
10217
-	0x50, 0x9e, 0xf0, 0x6f, 0xa5, 0x06, 0x59, 0x4b, 0x3f, 0xa4, 0x96, 0xb7, 0x9a, 0xbc, 0x96, 0xba,
10218
-	0x51, 0xd8, 0x78, 0xa5, 0xf2, 0xe8, 0x9a, 0x2b, 0x53, 0x4a, 0x2a, 0xdb, 0x1c, 0xdd, 0xb0, 0x7d,
10219
-	0x77, 0x42, 0xa4, 0x68, 0xf9, 0x7b, 0x50, 0x98, 0x22, 0x2b, 0x25, 0x48, 0x9d, 0xd0, 0x89, 0x9c,
10220
-	0x86, 0x7d, 0xb2, 0xf5, 0x9d, 0xea, 0xd6, 0x98, 0xe2, 0x24, 0x8c, 0x26, 0x06, 0x6f, 0x25, 0x6f,
10221
-	0x25, 0xd4, 0x77, 0x21, 0x4f, 0xa8, 0xe7, 0x8c, 0x5d, 0x83, 0x7a, 0xca, 0x4b, 0x90, 0xb7, 0x75,
10222
-	0xdb, 0xe9, 0x19, 0xa3, 0xb1, 0xc7, 0xc5, 0x53, 0xd5, 0xe2, 0x67, 0x9f, 0x5c, 0xcd, 0xb5, 0x90,
10223
-	0x58, 0xeb, 0xec, 0x79, 0x24, 0xc7, 0xd8, 0x35, 0xe4, 0x2a, 0xdf, 0x84, 0xe2, 0x90, 0x0e, 0x1d,
10224
-	0x77, 0xd2, 0x3b, 0x9c, 0xf8, 0xd4, 0xe3, 0x8a, 0x53, 0xa4, 0x20, 0x68, 0x55, 0x46, 0x52, 0x7f,
10225
-	0x9d, 0x80, 0x4b, 0x81, 0x6e, 0x42, 0x7f, 0x32, 0x36, 0x5d, 0x3a, 0xa4, 0xb6, 0xef, 0x29, 0xdf,
10226
-	0x41, 0x9b, 0xcd, 0xa1, 0xe9, 0x8b, 0x39, 0x0a, 0x1b, 0xdf, 0x88, 0xb3, 0x39, 0x5c, 0x15, 0x91,
10227
-	0x60, 0x45, 0x83, 0xa2, 0x4b, 0x3d, 0xea, 0x9e, 0x8a, 0x9d, 0xe0, 0x53, 0x7e, 0xa9, 0xf0, 0x8c,
10228
-	0x88, 0xba, 0x09, 0xb9, 0x8e, 0xa5, 0xfb, 0x47, 0x8e, 0x3b, 0x54, 0x54, 0x28, 0xea, 0xae, 0x31,
10229
-	0x30, 0x7d, 0x6a, 0xf8, 0x63, 0x37, 0x38, 0x95, 0x19, 0x9a, 0x72, 0x19, 0x92, 0x8e, 0x98, 0x28,
10230
-	0x5f, 0xcd, 0xe2, 0x4e, 0x24, 0xdb, 0x5d, 0x82, 0x14, 0xf5, 0x6d, 0xb8, 0xd0, 0xb1, 0xc6, 0xc7,
10231
-	0xa6, 0x5d, 0xa7, 0x9e, 0xe1, 0x9a, 0x23, 0xa6, 0x9d, 0x1d, 0x2f, 0x73, 0xbe, 0xe0, 0x78, 0xd9,
10232
-	0x77, 0x78, 0xe4, 0xc9, 0xe8, 0xc8, 0xd5, 0x5f, 0x24, 0xe1, 0x42, 0xc3, 0x46, 0x61, 0x3a, 0x2d,
10233
-	0x7d, 0x1d, 0x96, 0x29, 0x27, 0xf6, 0x4e, 0x85, 0x53, 0x49, 0x3d, 0x4b, 0x82, 0x1a, 0x78, 0x5a,
10234
-	0x73, 0xce, 0x5f, 0x6e, 0xc6, 0x99, 0xff, 0x88, 0xf6, 0x38, 0xaf, 0x51, 0x1a, 0xb0, 0x38, 0xe2,
10235
-	0x46, 0x78, 0xab, 0x29, 0xae, 0xeb, 0x7a, 0x9c, 0xae, 0x47, 0xec, 0xac, 0xa6, 0x1f, 0x7e, 0x72,
10236
-	0x75, 0x81, 0x04, 0xb2, 0x5f, 0xc5, 0xf9, 0xfe, 0x95, 0x80, 0x95, 0x96, 0xd3, 0x9f, 0xd9, 0x87,
10237
-	0x32, 0xe4, 0x06, 0x8e, 0xe7, 0x4f, 0x5d, 0x94, 0x70, 0xac, 0xdc, 0x82, 0xdc, 0x48, 0x1e, 0x9f,
10238
-	0x3c, 0xfd, 0xb5, 0xf8, 0x25, 0x0b, 0x0c, 0x09, 0xd1, 0xca, 0xdb, 0x90, 0x77, 0x03, 0x9f, 0x40,
10239
-	0x6b, 0x9f, 0xc0, 0x71, 0x22, 0xbc, 0xf2, 0x7d, 0xc8, 0x8a, 0x43, 0x58, 0x4d, 0x73, 0xc9, 0xeb,
10240
-	0x4f, 0xb4, 0xe7, 0x44, 0x0a, 0xa9, 0x1f, 0x27, 0xa0, 0x44, 0xf4, 0x23, 0x7f, 0x87, 0x0e, 0x0f,
10241
-	0xa9, 0xdb, 0xc5, 0x8b, 0x8c, 0xf7, 0xe7, 0x32, 0x9e, 0x23, 0xd5, 0xfb, 0xd4, 0xe5, 0x46, 0xe6,
10242
-	0x88, 0x1c, 0x29, 0x7b, 0xcc, 0xc9, 0x75, 0x63, 0xa0, 0x1f, 0x9a, 0x96, 0xe9, 0x4f, 0xb8, 0x99,
10243
-	0xcb, 0xf1, 0xa7, 0x3c, 0xaf, 0x13, 0x17, 0x1f, 0x09, 0x92, 0x19, 0x35, 0xca, 0x2a, 0x2c, 0x62,
10244
-	0xac, 0xf3, 0xf4, 0x63, 0xca, 0xad, 0xcf, 0x93, 0x60, 0x88, 0xae, 0x5c, 0x9c, 0x96, 0x53, 0x0a,
10245
-	0xb0, 0xb8, 0xd7, 0xba, 0xdb, 0x6a, 0x1f, 0xb4, 0x4a, 0x0b, 0xca, 0x0a, 0x14, 0xf6, 0x5a, 0xa4,
10246
-	0xa1, 0xd5, 0xb6, 0xb4, 0xea, 0x76, 0xa3, 0x94, 0x50, 0x96, 0x30, 0x5c, 0x84, 0xc3, 0xa4, 0xfa,
10247
-	0x51, 0x02, 0x80, 0x1d, 0xa0, 0x34, 0xea, 0x2d, 0xc8, 0x60, 0x3c, 0xf5, 0xc5, 0xc1, 0x2d, 0x6f,
10248
-	0xbc, 0x10, 0xb7, 0xea, 0x08, 0x5e, 0x61, 0x7f, 0x94, 0x08, 0x91, 0xe9, 0x15, 0x26, 0xe7, 0x57,
10249
-	0x98, 0xe1, 0xc8, 0xd9, 0xa5, 0xe5, 0x20, 0x5d, 0x67, 0x5f, 0x09, 0x25, 0x0f, 0x19, 0x5c, 0x53,
10250
-	0xfd, 0xdd, 0x52, 0x12, 0x9d, 0xaf, 0x58, 0x6f, 0x76, 0x6b, 0xed, 0x56, 0xab, 0x51, 0xdb, 0x6d,
10251
-	0xd4, 0x4b, 0x29, 0xf5, 0x3a, 0x64, 0x9a, 0x43, 0xd4, 0xa2, 0xac, 0x31, 0x0f, 0x38, 0xa2, 0x2e,
10252
-	0xb5, 0x8d, 0xc0, 0xb1, 0x22, 0x82, 0xfa, 0xab, 0x1c, 0x64, 0x76, 0x9c, 0xb1, 0xed, 0x2b, 0x1b,
10253
-	0x53, 0xb7, 0x78, 0x79, 0x63, 0x3d, 0xce, 0x04, 0x0e, 0xac, 0xec, 0x22, 0x4a, 0xde, 0x72, 0x3c,
10254
-	0x4c, 0xe1, 0x2b, 0x72, 0xe9, 0x72, 0xc4, 0xe8, 0xbe, 0xee, 0x1e, 0x53, 0x5f, 0x6e, 0xba, 0x1c,
10255
-	0x29, 0x37, 0x20, 0x87, 0xa7, 0xd3, 0x77, 0x6c, 0x6b, 0xc2, 0x5d, 0x2a, 0x27, 0xc2, 0x2c, 0x9e,
10256
-	0x43, 0xbf, 0x8d, 0x34, 0x12, 0x72, 0x95, 0x2d, 0x28, 0x1e, 0x62, 0x32, 0xe9, 0x39, 0x23, 0x11,
10257
-	0xf3, 0x32, 0x8f, 0x77, 0x40, 0xb1, 0xaa, 0x2a, 0xa2, 0xdb, 0x02, 0x4c, 0x0a, 0x87, 0xd1, 0x40,
10258
-	0x69, 0xc1, 0xf2, 0xa9, 0x63, 0x8d, 0x87, 0x34, 0xd4, 0x95, 0xe5, 0xba, 0x5e, 0x7c, 0xbc, 0xae,
10259
-	0x7d, 0x8e, 0x0f, 0xb4, 0x2d, 0x9d, 0x4e, 0x0f, 0xcb, 0x3f, 0x4f, 0x41, 0x61, 0x6a, 0x32, 0xa5,
10260
-	0x0b, 0x05, 0x4c, 0x8b, 0x23, 0xfd, 0x98, 0x87, 0x5a, 0xb9, 0x7d, 0x37, 0x9f, 0x68, 0xa1, 0x95,
10261
-	0x4e, 0x24, 0x48, 0xa6, 0xb5, 0xa8, 0x1f, 0x26, 0xa1, 0x30, 0xc5, 0x54, 0x5e, 0x86, 0x1c, 0xe9,
10262
-	0x90, 0xe6, 0xbe, 0xb6, 0xdb, 0x28, 0x2d, 0x94, 0xd7, 0x3e, 0xf8, 0xf0, 0xda, 0x2a, 0xd7, 0x36,
10263
-	0xad, 0xa0, 0xe3, 0x9a, 0xa7, 0xcc, 0x5b, 0x6e, 0xc0, 0x62, 0x00, 0x4d, 0x94, 0x9f, 0x43, 0xe8,
10264
-	0xb3, 0xf3, 0xd0, 0x29, 0x24, 0xe9, 0x6e, 0x69, 0x04, 0x1d, 0x26, 0x19, 0x8f, 0x24, 0xdd, 0x81,
10265
-	0xee, 0xd2, 0xbe, 0xf2, 0x2d, 0xc8, 0x4a, 0x60, 0xaa, 0x5c, 0x46, 0xe0, 0xe5, 0x79, 0x60, 0x84,
10266
-	0x23, 0xdd, 0x6d, 0x6d, 0xbf, 0x51, 0x4a, 0xc7, 0xe3, 0x48, 0xd7, 0xd2, 0x4f, 0xa9, 0xf2, 0x02,
10267
-	0xba, 0x36, 0x87, 0x65, 0xca, 0x57, 0x10, 0xf6, 0xcc, 0x23, 0xea, 0x18, 0xaa, 0xbc, 0xfa, 0xcb,
10268
-	0xdf, 0xad, 0x2f, 0xfc, 0xf9, 0xf7, 0xeb, 0xa5, 0x79, 0x76, 0xf9, 0xbf, 0x09, 0x58, 0x9a, 0x39,
10269
-	0x25, 0xcc, 0x6a, 0x59, 0xdb, 0x31, 0x9c, 0x91, 0x88, 0xc0, 0xb9, 0x2a, 0xa0, 0x63, 0x65, 0x5b,
10270
-	0x4e, 0x0d, 0x29, 0x44, 0x72, 0x94, 0xbb, 0x73, 0x39, 0xe4, 0x8d, 0x27, 0x74, 0x81, 0xd8, 0x2c,
10271
-	0x72, 0x1b, 0x96, 0xfa, 0xb8, 0x8f, 0xd4, 0xed, 0x19, 0x8e, 0x7d, 0x64, 0x1e, 0xcb, 0xe8, 0x5a,
10272
-	0x8e, 0xd3, 0x59, 0xe7, 0x40, 0x52, 0x14, 0x02, 0x35, 0x8e, 0xff, 0x2a, 0xf9, 0xe3, 0x00, 0xd2,
10273
-	0xec, 0x16, 0x2a, 0xcf, 0x41, 0xba, 0xda, 0x6c, 0xd5, 0xd1, 0x25, 0x2e, 0xe0, 0x2e, 0x2e, 0xf1,
10274
-	0xa5, 0x33, 0x06, 0xf3, 0x31, 0xe5, 0x2a, 0x64, 0xf7, 0xdb, 0xdb, 0x7b, 0x3b, 0xcc, 0x0d, 0x2e,
10275
-	0x22, 0x7b, 0x25, 0x64, 0x0b, 0xe3, 0xca, 0x17, 0xe4, 0xf6, 0xe6, 0x43, 0x86, 0xfa, 0x9f, 0x24,
10276
-	0x2c, 0x11, 0x56, 0x1b, 0xba, 0x7e, 0xc7, 0xb1, 0x4c, 0x63, 0xa2, 0x74, 0x20, 0x8f, 0xf6, 0xf5,
10277
-	0xcd, 0x29, 0xe7, 0xde, 0x78, 0x4c, 0x02, 0x89, 0xa4, 0x82, 0x51, 0x2d, 0x90, 0x24, 0x91, 0x12,
10278
-	0x0c, 0x34, 0x99, 0x3e, 0xb5, 0xf4, 0xc9, 0x79, 0x99, 0xac, 0x2e, 0xeb, 0x50, 0x22, 0xa0, 0xbc,
10279
-	0xea, 0xd2, 0xef, 0xf5, 0x74, 0xdf, 0xa7, 0xc3, 0x91, 0x2f, 0x32, 0x59, 0x1a, 0xab, 0x2e, 0xfd,
10280
-	0x9e, 0x26, 0x49, 0xca, 0x9b, 0x90, 0x3d, 0x43, 0xb3, 0x9d, 0x33, 0x99, 0xac, 0xce, 0xd7, 0x2b,
10281
-	0xb1, 0xea, 0x07, 0x2c, 0x47, 0xcd, 0x2d, 0x96, 0x6d, 0x6b, 0xab, 0xdd, 0x6a, 0x04, 0xdb, 0x2a,
10282
-	0xf9, 0x6d, 0xbb, 0xe5, 0xd8, 0xcc, 0x75, 0xa1, 0xdd, 0xea, 0x6d, 0x6a, 0xcd, 0xed, 0x3d, 0xc2,
10283
-	0xb6, 0xf6, 0x12, 0x42, 0x4a, 0x21, 0x64, 0x53, 0x37, 0x2d, 0x56, 0x40, 0x5d, 0x81, 0x94, 0xd6,
10284
-	0xc2, 0xc8, 0x5c, 0x2e, 0x21, 0xbb, 0x18, 0xb2, 0x35, 0x7b, 0x12, 0x79, 0xf5, 0xfc, 0xbc, 0xea,
10285
-	0x7b, 0x50, 0xdc, 0x1b, 0xf5, 0xf1, 0x66, 0x0a, 0x0f, 0x51, 0xae, 0x61, 0x68, 0xd1, 0x5d, 0xdd,
10286
-	0xb2, 0xa8, 0x65, 0x7a, 0x43, 0x59, 0x63, 0x4f, 0x93, 0xb0, 0x30, 0x78, 0xf2, 0xbd, 0x94, 0xf5,
10287
-	0x8b, 0x10, 0x50, 0x7f, 0x06, 0x2b, 0x38, 0x8b, 0xaf, 0x63, 0xa2, 0x0e, 0x52, 0xf3, 0x06, 0x14,
10288
-	0x8d, 0x80, 0xd4, 0x33, 0xfb, 0xc2, 0x15, 0xab, 0x2b, 0x78, 0x91, 0x0a, 0x21, 0xb4, 0x59, 0x27,
10289
-	0x85, 0x10, 0xd4, 0xec, 0x33, 0x3b, 0x47, 0x08, 0x65, 0xd3, 0x67, 0xaa, 0x8b, 0x08, 0x4d, 0x75,
10290
-	0x10, 0xc2, 0x68, 0xb8, 0x8b, 0x79, 0x7a, 0xcf, 0xf4, 0xf1, 0x7a, 0xf4, 0x45, 0xf2, 0xcd, 0x90,
10291
-	0x1c, 0x23, 0xd4, 0x70, 0xac, 0xbe, 0x9f, 0x04, 0xd8, 0xd5, 0xbd, 0x13, 0x39, 0x35, 0x96, 0x29,
10292
-	0x61, 0x53, 0x72, 0x5e, 0x71, 0xbc, 0x1b, 0x80, 0x48, 0x84, 0x57, 0xde, 0x08, 0xb2, 0xaf, 0xa8,
10293
-	0x19, 0xe2, 0x05, 0xe5, 0x5c, 0x71, 0x69, 0x77, 0xb6, 0x30, 0x60, 0x17, 0x91, 0xba, 0x2e, 0xf7,
10294
-	0x22, 0xbc, 0x88, 0xf8, 0x89, 0xbd, 0x4a, 0x3e, 0xb4, 0x59, 0x66, 0xa2, 0xe7, 0xe3, 0x26, 0x99,
10295
-	0xdb, 0xd0, 0xad, 0x05, 0x12, 0xc9, 0x55, 0x4b, 0xb0, 0xec, 0xe2, 0x35, 0xc3, 0x55, 0xf7, 0x3c,
10296
-	0xce, 0x56, 0xff, 0x86, 0x7b, 0xd0, 0xec, 0x68, 0x3b, 0xf2, 0xb4, 0xeb, 0x90, 0x3d, 0xd2, 0x87,
10297
-	0xa6, 0x35, 0x91, 0xd7, 0xec, 0xd5, 0xb8, 0x29, 0x22, 0x7c, 0x45, 0xeb, 0xf7, 0xb1, 0x54, 0xf3,
10298
-	0x36, 0xb9, 0x0c, 0x91, 0xb2, 0x3c, 0x25, 0x8f, 0x0f, 0x6d, 0x4c, 0xbd, 0x41, 0x4a, 0xe6, 0x23,
10299
-	0x16, 0x4c, 0x5c, 0xdd, 0x0e, 0xad, 0x15, 0x03, 0xb6, 0x0b, 0x18, 0x51, 0xe9, 0x99, 0x3e, 0x91,
10300
-	0xf6, 0x06, 0x43, 0x4c, 0xc0, 0x39, 0xd1, 0x41, 0xd0, 0x3e, 0x9a, 0xcc, 0xa2, 0xe5, 0x97, 0xad,
10301
-	0x87, 0x48, 0xb8, 0x08, 0x93, 0xa1, 0x74, 0xf9, 0x6d, 0x1e, 0x52, 0x22, 0xd6, 0x53, 0x45, 0xba,
10302
-	0xd7, 0x61, 0x69, 0xc6, 0xce, 0x47, 0x6a, 0xa1, 0x66, 0x67, 0xff, 0xcd, 0x52, 0x5a, 0x7e, 0x7d,
10303
-	0xb7, 0x94, 0x55, 0xff, 0x8d, 0xa5, 0x59, 0xc7, 0xe1, 0xd7, 0x8a, 0xed, 0x6a, 0x7c, 0xef, 0x99,
10304
-	0xe3, 0x9d, 0xac, 0xe1, 0x58, 0xd2, 0x67, 0x62, 0x8b, 0x81, 0x48, 0x0b, 0x4b, 0xd4, 0x1c, 0x4e,
10305
-	0x42, 0x41, 0x0c, 0xaf, 0x05, 0x51, 0xd5, 0xf4, 0x46, 0x88, 0xe3, 0xdb, 0xba, 0x44, 0x40, 0x90,
10306
-	0x98, 0x24, 0x6b, 0x6c, 0x46, 0xe3, 0x43, 0xbc, 0xa6, 0x03, 0xda, 0x17, 0x98, 0x34, 0xc7, 0x2c,
10307
-	0x85, 0x54, 0x06, 0x53, 0xeb, 0xd8, 0x9a, 0x05, 0x3a, 0x57, 0x21, 0xb5, 0x5b, 0xeb, 0x60, 0xdc,
10308
-	0x59, 0xc1, 0xa8, 0x51, 0x08, 0xc8, 0x48, 0x62, 0x9c, 0xbd, 0x7a, 0x07, 0xc3, 0xcd, 0x0c, 0x07,
10309
-	0x49, 0xe5, 0x34, 0x0b, 0x27, 0xea, 0x6f, 0x12, 0x90, 0x15, 0x59, 0x26, 0xd6, 0x62, 0x0d, 0x16,
10310
-	0x83, 0xea, 0x47, 0xa4, 0xbe, 0x17, 0x1f, 0x9f, 0xa6, 0x2a, 0x32, 0xeb, 0x89, 0x73, 0x0c, 0xe4,
10311
-	0xca, 0x6f, 0x41, 0x71, 0x9a, 0xf1, 0x54, 0xa7, 0xf8, 0x53, 0x28, 0x30, 0x47, 0x09, 0x72, 0xf5,
10312
-	0x06, 0x64, 0x45, 0x26, 0x94, 0x57, 0xfd, 0xbc, 0x9c, 0x29, 0x91, 0x18, 0xe9, 0x16, 0x45, 0x9e,
10313
-	0x0d, 0x9a, 0xb6, 0xf5, 0xf3, 0xdd, 0x91, 0x04, 0x70, 0xf5, 0x36, 0xa4, 0x3b, 0x14, 0x35, 0x3c,
10314
-	0x0f, 0x8b, 0x36, 0x86, 0x9e, 0x28, 0xb2, 0xc9, 0x12, 0xa1, 0x4f, 0x31, 0x62, 0x65, 0x19, 0x0b,
10315
-	0xe3, 0x19, 0x6e, 0x9e, 0x8e, 0xfe, 0x16, 0xf4, 0xad, 0xec, 0x5b, 0xdd, 0x85, 0xe2, 0x01, 0x35,
10316
-	0x8f, 0x07, 0x3e, 0x9e, 0x18, 0x53, 0xf4, 0x2a, 0xa4, 0x47, 0x34, 0x5c, 0xfc, 0x6a, 0xac, 0xeb,
10317
-	0x20, 0x9f, 0x70, 0x14, 0xbb, 0x90, 0x67, 0x5c, 0x5a, 0x3e, 0x15, 0xc8, 0x91, 0xfa, 0xc7, 0x24,
10318
-	0x2c, 0x37, 0x3d, 0x6f, 0xac, 0x63, 0x19, 0x2e, 0xa3, 0xe0, 0x0f, 0x66, 0xdb, 0x88, 0x1b, 0xb1,
10319
-	0x16, 0xce, 0x88, 0xcc, 0xb6, 0x12, 0x32, 0x72, 0x25, 0xc3, 0xc8, 0xa5, 0x3e, 0x4c, 0x04, 0x3d,
10320
-	0xc4, 0xf5, 0xa9, 0x7b, 0x53, 0x5e, 0x45, 0x27, 0xba, 0x34, 0xad, 0x89, 0xee, 0xd9, 0x27, 0xb6,
10321
-	0x73, 0x66, 0x63, 0xa2, 0xc5, 0x9e, 0xa2, 0xd5, 0x38, 0x40, 0x4f, 0xbb, 0x8c, 0x20, 0x65, 0x06,
10322
-	0x44, 0xa8, 0x4d, 0xcf, 0x98, 0xa6, 0x4e, 0xa3, 0x55, 0x6f, 0xb6, 0xee, 0x60, 0x7a, 0x7b, 0x54,
10323
-	0x53, 0x87, 0x62, 0x3a, 0xb3, 0x8f, 0x71, 0xbb, 0xb3, 0xcd, 0x6e, 0x77, 0x8f, 0x97, 0x8c, 0xcf,
10324
-	0x22, 0xea, 0xe2, 0x0c, 0x8a, 0x0d, 0xb0, 0x5e, 0x44, 0x10, 0xcb, 0xa4, 0x08, 0x4a, 0xc7, 0x80,
10325
-	0x58, 0x32, 0xc5, 0x00, 0x22, 0x3c, 0xfc, 0x1f, 0x49, 0x28, 0x69, 0x86, 0x41, 0x47, 0x3e, 0xe3,
10326
-	0xcb, 0xea, 0x64, 0x17, 0x6f, 0x32, 0xfb, 0x32, 0x29, 0x7b, 0x53, 0x61, 0x6e, 0x71, 0x2b, 0xf6,
10327
-	0x1d, 0x69, 0x4e, 0xae, 0x42, 0x1c, 0x8b, 0x6a, 0xfd, 0xa1, 0xe9, 0xb1, 0xb7, 0x05, 0x41, 0x23,
10328
-	0xa1, 0xa6, 0xf2, 0xe7, 0x09, 0xb8, 0x18, 0x83, 0x50, 0x5e, 0x87, 0xb4, 0x8b, 0x64, 0x79, 0x3c,
10329
-	0x6b, 0x8f, 0xeb, 0xf2, 0x98, 0x28, 0xe1, 0x48, 0x65, 0x1d, 0x40, 0x1f, 0xfb, 0x8e, 0xce, 0xe7,
10330
-	0xe7, 0x07, 0x93, 0x23, 0x53, 0x14, 0xe5, 0x00, 0xa3, 0x35, 0x35, 0x5c, 0xd9, 0x28, 0x15, 0x36,
10331
-	0x6e, 0xff, 0xbf, 0xab, 0xaf, 0x74, 0xb9, 0x1a, 0x22, 0xd5, 0x95, 0x2b, 0x58, 0xb0, 0xf3, 0x2f,
10332
-	0xe6, 0xd1, 0x58, 0x52, 0xe8, 0x7c, 0xd1, 0x45, 0xc2, 0xbf, 0x99, 0xa3, 0xe8, 0xd6, 0x71, 0xe0,
10333
-	0x28, 0xf8, 0xa9, 0x7e, 0x84, 0xb9, 0xa8, 0x71, 0xcf, 0xa7, 0xae, 0xad, 0x5b, 0x35, 0x4d, 0x69,
10334
-	0x4c, 0x45, 0x48, 0x61, 0xed, 0x4b, 0xb1, 0xbd, 0x7f, 0x28, 0x51, 0xa9, 0x69, 0x31, 0x31, 0x12,
10335
-	0xab, 0x83, 0xb1, 0x6b, 0xc9, 0x77, 0x24, 0x5e, 0x1d, 0xec, 0x91, 0x6d, 0xc2, 0x68, 0xec, 0x11,
10336
-	0x26, 0x88, 0x48, 0xa9, 0xc7, 0x3f, 0x00, 0x4e, 0x4d, 0xf0, 0xf5, 0x47, 0xa5, 0x57, 0x01, 0xa2,
10337
-	0x55, 0xe3, 0x51, 0x65, 0x6a, 0x9b, 0xdd, 0xee, 0x36, 0x5e, 0x0f, 0x5e, 0x2d, 0x47, 0x2c, 0x4e,
10338
-	0x56, 0xff, 0x90, 0x80, 0x5c, 0x4d, 0x93, 0x59, 0x65, 0x13, 0x4a, 0x3c, 0x96, 0x18, 0xd4, 0xf5,
10339
-	0x7b, 0xf4, 0xde, 0xc8, 0x74, 0x27, 0x32, 0x1c, 0x9c, 0x5f, 0x76, 0x2e, 0x33, 0xa9, 0x1a, 0x0a,
10340
-	0x35, 0xb8, 0x8c, 0x42, 0xa0, 0x48, 0xa5, 0x89, 0x3d, 0x43, 0x0f, 0x82, 0xf3, 0xfa, 0xf9, 0x5b,
10341
-	0x21, 0x4a, 0xb2, 0x68, 0x8c, 0x0d, 0x6f, 0xa0, 0xa4, 0xa6, 0x7b, 0xea, 0x3e, 0x5c, 0x6c, 0xbb,
10342
-	0xc6, 0x00, 0x8b, 0x23, 0x31, 0xa9, 0x5c, 0xf2, 0x6d, 0x58, 0xf3, 0xb1, 0x08, 0xea, 0x0d, 0x4c,
10343
-	0xcf, 0x67, 0xcf, 0x97, 0xe8, 0x1b, 0xd4, 0x66, 0xfc, 0x1e, 0x7f, 0x66, 0x14, 0xcf, 0x9e, 0xe4,
10344
-	0x0a, 0xc3, 0x6c, 0x09, 0x08, 0x09, 0x10, 0xdb, 0x0c, 0xa0, 0xfe, 0x08, 0x4a, 0x75, 0xd3, 0x1b,
10345
-	0xe9, 0x3e, 0xea, 0x96, 0x3d, 0x8c, 0x72, 0x07, 0x4a, 0x03, 0x8a, 0x35, 0xec, 0x21, 0xd5, 0x31,
10346
-	0x0f, 0x52, 0xd7, 0x74, 0xfa, 0x4f, 0xb4, 0x0f, 0x2b, 0xa1, 0x54, 0x87, 0x0b, 0xa9, 0x5f, 0x60,
10347
-	0xd6, 0x66, 0xef, 0x3a, 0x52, 0xef, 0x2b, 0x70, 0xc1, 0xb3, 0xf5, 0x91, 0x37, 0x70, 0xfc, 0x9e,
10348
-	0x69, 0xfb, 0xec, 0x21, 0xd3, 0x92, 0xf5, 0x6f, 0x29, 0x60, 0x34, 0x25, 0x1d, 0xe3, 0xb1, 0x72,
10349
-	0x42, 0xe9, 0xa8, 0xe7, 0x58, 0xfd, 0x5e, 0xc0, 0x14, 0x8f, 0x97, 0x88, 0x66, 0x9c, 0xb6, 0xd5,
10350
-	0xef, 0x06, 0x74, 0xa5, 0x0a, 0xeb, 0x96, 0x73, 0xdc, 0x43, 0xcb, 0x5c, 0xbc, 0xeb, 0xbd, 0x23,
10351
-	0xc7, 0xed, 0x79, 0x96, 0x73, 0x86, 0x1f, 0x16, 0xfe, 0x51, 0x37, 0x68, 0x2e, 0xca, 0x88, 0x6a,
10352
-	0x08, 0xd0, 0xa6, 0xe3, 0x76, 0x91, 0xb7, 0x19, 0x20, 0x58, 0x6a, 0x8f, 0xcc, 0xf6, 0x4d, 0xe3,
10353
-	0x24, 0x48, 0xed, 0x21, 0x75, 0x17, 0x89, 0x18, 0xdd, 0x96, 0xa8, 0x45, 0x0d, 0xbe, 0xc9, 0x1c,
10354
-	0x95, 0xe1, 0xa8, 0x62, 0x40, 0x64, 0x20, 0xf5, 0xdb, 0x90, 0xef, 0x58, 0xba, 0xc1, 0x9f, 0x88,
10355
-	0x59, 0xc5, 0x8f, 0x69, 0x8b, 0x9d, 0x1c, 0x5a, 0x2d, 0x42, 0x5a, 0x9e, 0x4c, 0x93, 0xd4, 0xf7,
10356
-	0x31, 0xd1, 0x13, 0xc7, 0xf1, 0xf1, 0x92, 0x5e, 0x83, 0xac, 0xa1, 0xf7, 0x02, 0x77, 0x2f, 0x56,
10357
-	0xf3, 0xe8, 0x16, 0x99, 0x9a, 0x76, 0x97, 0x4e, 0x48, 0xc6, 0xd0, 0xf1, 0x8f, 0xa5, 0x3c, 0x44,
10358
-	0x30, 0x27, 0xe5, 0xdb, 0x51, 0x14, 0x29, 0x0f, 0xbd, 0x18, 0x29, 0x04, 0x85, 0xd9, 0x3f, 0x46,
10359
-	0xb5, 0xa2, 0x04, 0xf5, 0x06, 0xba, 0x37, 0x10, 0x05, 0x62, 0x75, 0x19, 0x91, 0x20, 0x90, 0x5b,
10360
-	0x48, 0x25, 0x20, 0xd0, 0xec, 0x5b, 0xfd, 0x7b, 0x02, 0x0a, 0x6c, 0x60, 0x1e, 0x99, 0x06, 0xcb,
10361
-	0x2d, 0x4f, 0x1f, 0x17, 0x31, 0x30, 0x18, 0x9e, 0x2b, 0x17, 0xc5, 0x03, 0x43, 0xad, 0x4b, 0x08,
10362
-	0xa3, 0x29, 0xef, 0x60, 0x48, 0xe4, 0xb9, 0x4d, 0x86, 0x44, 0xf5, 0xcb, 0xb3, 0xa0, 0xec, 0x6c,
10363
-	0xa4, 0x1c, 0xdf, 0xc4, 0x68, 0x75, 0xfc, 0x68, 0x8a, 0x64, 0x9a, 0xc4, 0x9e, 0xb7, 0x0d, 0x9b,
10364
-	0x9f, 0x86, 0x7c, 0xde, 0xae, 0xb5, 0x08, 0x52, 0xd4, 0xbf, 0x26, 0x60, 0xa9, 0x61, 0x1b, 0xee,
10365
-	0x84, 0x87, 0x14, 0xb6, 0x83, 0x6b, 0x90, 0xc7, 0x02, 0xda, 0x9b, 0x78, 0xd8, 0x65, 0x06, 0xaf,
10366
-	0x67, 0x21, 0x41, 0x69, 0x42, 0x1e, 0x83, 0xa7, 0xe3, 0x9a, 0xfe, 0x60, 0x28, 0x2b, 0xc9, 0xf8,
10367
-	0x30, 0x36, 0xad, 0xb3, 0xa2, 0x05, 0x22, 0x24, 0x92, 0x0e, 0x02, 0x57, 0x8a, 0x2f, 0x96, 0x07,
10368
-	0x2e, 0xec, 0x79, 0x2d, 0x6c, 0x6f, 0xb0, 0x46, 0xec, 0xb1, 0xae, 0x81, 0xdb, 0x81, 0xed, 0x9f,
10369
-	0xa4, 0xb1, 0x4e, 0x48, 0x55, 0x21, 0x1f, 0x2a, 0x63, 0x6f, 0x96, 0x5a, 0xa3, 0xdb, 0xbb, 0xb9,
10370
-	0x71, 0xab, 0x77, 0xa7, 0xb6, 0x83, 0x61, 0x4c, 0xe4, 0xcd, 0x3f, 0xa1, 0x4d, 0x3b, 0xba, 0x8d,
10371
-	0x9d, 0x4d, 0xd0, 0xe7, 0xa1, 0x57, 0xb8, 0x78, 0xd5, 0x82, 0x42, 0x28, 0x2d, 0xbc, 0x82, 0xdd,
10372
-	0x3e, 0x56, 0x08, 0x31, 0x56, 0x7c, 0x21, 0x34, 0xf5, 0x76, 0x9b, 0x3a, 0xf7, 0xed, 0x36, 0xfd,
10373
-	0xb5, 0xbc, 0xdd, 0xbe, 0xfc, 0x45, 0x0a, 0xf2, 0x61, 0xdf, 0xc6, 0x5c, 0x86, 0xd5, 0x25, 0x0b,
10374
-	0xa2, 0xa3, 0x0e, 0xe9, 0x2d, 0x5e, 0x91, 0xe4, 0xb5, 0xed, 0xed, 0x76, 0x4d, 0x63, 0x4f, 0x9f,
10375
-	0xef, 0x88, 0xc2, 0x25, 0x04, 0x68, 0x78, 0x69, 0xd9, 0xa1, 0xf7, 0x15, 0x35, 0x2a, 0x5c, 0xee,
10376
-	0xcb, 0xbe, 0x3d, 0x44, 0x05, 0x55, 0xcb, 0x0b, 0x90, 0xd3, 0xba, 0xdd, 0xe6, 0x9d, 0x16, 0x6a,
10377
-	0x7a, 0x90, 0x28, 0x3f, 0x83, 0xa0, 0x0b, 0x91, 0x2a, 0x4c, 0xb8, 0xc7, 0x36, 0x6a, 0x62, 0xa8,
10378
-	0x5a, 0xad, 0xd1, 0x61, 0xf3, 0xdd, 0x4f, 0xce, 0xa3, 0x78, 0xba, 0xe6, 0x8f, 0x61, 0xf9, 0x0e,
10379
-	0x69, 0x74, 0x34, 0xc2, 0x66, 0x7c, 0x90, 0x9c, 0x5b, 0x57, 0xc7, 0xa5, 0xd8, 0xc9, 0xb3, 0x39,
10380
-	0xd7, 0x83, 0x77, 0xdc, 0xfb, 0xa9, 0xb2, 0x82, 0x98, 0xe5, 0xa8, 0x59, 0xc5, 0xfd, 0x9d, 0xb0,
10381
-	0xd9, 0xba, 0xbb, 0x1a, 0xd9, 0xe5, 0x6a, 0x52, 0x73, 0xb3, 0x75, 0xd9, 0x13, 0x02, 0xd3, 0x82,
10382
-	0xd6, 0x91, 0xbd, 0x56, 0x8b, 0x5b, 0x97, 0x9e, 0xb3, 0x8e, 0x8c, 0x6d, 0x9b, 0x61, 0xae, 0x63,
10383
-	0x0a, 0x6b, 0xef, 0x74, 0xb6, 0x1b, 0xbb, 0x8d, 0xd2, 0x83, 0xf4, 0xdc, 0x82, 0x6a, 0xce, 0x70,
10384
-	0x64, 0x51, 0x5f, 0x98, 0xd7, 0xdd, 0xda, 0xdb, 0xe5, 0xcf, 0xcc, 0xf7, 0x33, 0xf3, 0x13, 0x0e,
10385
-	0xc6, 0x7e, 0x9f, 0x95, 0x8a, 0xd7, 0xc2, 0xda, 0xed, 0x41, 0x46, 0xa4, 0xcc, 0x10, 0x23, 0x0a,
10386
-	0x37, 0xa6, 0x87, 0x34, 0x7e, 0x28, 0x5e, 0xa4, 0xef, 0x67, 0xe7, 0xf4, 0x10, 0xfa, 0x1e, 0x46,
10387
-	0x41, 0x2c, 0xef, 0xc2, 0x67, 0xa8, 0x90, 0xf5, 0xf2, 0x8f, 0x21, 0x17, 0x04, 0x0c, 0xdc, 0x9d,
10388
-	0xec, 0x41, 0x9b, 0xdc, 0x6d, 0x10, 0x3c, 0x7a, 0xbe, 0x3b, 0x01, 0xe7, 0xc0, 0x71, 0xd1, 0xbb,
10389
-	0x70, 0x19, 0x8b, 0x3b, 0x5a, 0x4b, 0xbb, 0x83, 0x00, 0xf9, 0xce, 0x15, 0x00, 0xa4, 0xd7, 0x97,
10390
-	0x4b, 0x72, 0x82, 0x50, 0x67, 0x75, 0xed, 0xe1, 0xa7, 0xeb, 0x0b, 0x1f, 0xe3, 0xef, 0xf3, 0x4f,
10391
-	0xd7, 0x13, 0xf7, 0x3f, 0x5b, 0x4f, 0x3c, 0xc4, 0xdf, 0x5f, 0xf0, 0xf7, 0x4f, 0xfc, 0x1d, 0x66,
10392
-	0x79, 0xfd, 0xf2, 0xc6, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x79, 0xcb, 0x88, 0x96, 0x53, 0x1d,
10393
-	0x00, 0x00,
10202
+	// 3132 bytes of a gzipped FileDescriptorProto
10203
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x58, 0xcb, 0x6f, 0x1b, 0xd7,
10204
+	0xd5, 0x37, 0x9f, 0x22, 0x0f, 0x29, 0x89, 0x1e, 0x3b, 0x8e, 0xcc, 0x28, 0xb2, 0xbf, 0x49, 0x9c,
10205
+	0x38, 0x8f, 0x8f, 0x89, 0x95, 0x7c, 0x1f, 0xdc, 0x04, 0xad, 0x33, 0x7c, 0xc8, 0x62, 0x2d, 0x91,
10206
+	0xc4, 0x25, 0x25, 0x23, 0x28, 0x50, 0x62, 0x34, 0xbc, 0x12, 0x27, 0x1a, 0xce, 0xb0, 0x33, 0x43,
10207
+	0xc9, 0x6c, 0x51, 0xc0, 0xe9, 0xa6, 0x45, 0x56, 0xdd, 0x17, 0x41, 0x50, 0xb4, 0xe8, 0xae, 0xeb,
10208
+	0x02, 0x5d, 0x79, 0xe9, 0x65, 0x8a, 0x02, 0x45, 0xd0, 0x02, 0x41, 0x93, 0xfe, 0x03, 0x01, 0xba,
10209
+	0xc8, 0xa2, 0x5d, 0xf4, 0xdc, 0xc7, 0x0c, 0x87, 0xf4, 0x58, 0x71, 0x9a, 0x2c, 0x08, 0xce, 0x3d,
10210
+	0xe7, 0x77, 0xce, 0xbd, 0xf7, 0xdc, 0x73, 0xcf, 0xe3, 0x42, 0xc1, 0x9f, 0x8e, 0xa9, 0x57, 0x19,
10211
+	0xbb, 0x8e, 0xef, 0x28, 0xca, 0xc0, 0x31, 0x8e, 0xa9, 0x5b, 0xf1, 0x4e, 0x75, 0x77, 0x74, 0x6c,
10212
+	0xfa, 0x95, 0x93, 0x1b, 0xe5, 0xcb, 0xbe, 0x39, 0xa2, 0x9e, 0xaf, 0x8f, 0xc6, 0xaf, 0x85, 0x5f,
10213
+	0x02, 0x5e, 0x7e, 0x7a, 0x30, 0x71, 0x75, 0xdf, 0x74, 0xec, 0xd7, 0x82, 0x0f, 0xc9, 0xb8, 0x78,
10214
+	0xe4, 0x1c, 0x39, 0xfc, 0xf3, 0x35, 0xf6, 0x25, 0xa8, 0xea, 0x15, 0x58, 0xda, 0xa7, 0xae, 0x87,
10215
+	0x30, 0xe5, 0x22, 0x64, 0x4c, 0x7b, 0x40, 0xef, 0xad, 0x25, 0xae, 0x26, 0xae, 0xa7, 0x89, 0x18,
10216
+	0xa8, 0xbf, 0x4e, 0x40, 0x41, 0xb3, 0x6d, 0xc7, 0xe7, 0xba, 0x3c, 0x45, 0x81, 0xb4, 0xad, 0x8f,
10217
+	0x28, 0x07, 0xe5, 0x09, 0xff, 0x56, 0x6a, 0x90, 0xb5, 0xf4, 0x03, 0x6a, 0x79, 0x6b, 0xc9, 0xab,
10218
+	0xa9, 0xeb, 0x85, 0xcd, 0x57, 0x2a, 0x8f, 0xae, 0xb9, 0x12, 0x51, 0x52, 0xd9, 0xe1, 0xe8, 0x86,
10219
+	0xed, 0xbb, 0x53, 0x22, 0x45, 0xcb, 0xdf, 0x81, 0x42, 0x84, 0xac, 0x94, 0x20, 0x75, 0x4c, 0xa7,
10220
+	0x72, 0x1a, 0xf6, 0xc9, 0xd6, 0x77, 0xa2, 0x5b, 0x13, 0x8a, 0x93, 0x30, 0x9a, 0x18, 0xbc, 0x95,
10221
+	0xbc, 0x99, 0x50, 0xdf, 0x85, 0x3c, 0xa1, 0x9e, 0x33, 0x71, 0x0d, 0xea, 0x29, 0x2f, 0x41, 0xde,
10222
+	0xd6, 0x6d, 0xa7, 0x6f, 0x8c, 0x27, 0x1e, 0x17, 0x4f, 0x55, 0x8b, 0x9f, 0x7f, 0x7a, 0x25, 0xd7,
10223
+	0x42, 0x62, 0xad, 0xb3, 0xe7, 0x91, 0x1c, 0x63, 0xd7, 0x90, 0xab, 0xfc, 0x0f, 0x14, 0x47, 0x74,
10224
+	0xe4, 0xb8, 0xd3, 0xfe, 0xc1, 0xd4, 0xa7, 0x1e, 0x57, 0x9c, 0x22, 0x05, 0x41, 0xab, 0x32, 0x92,
10225
+	0xfa, 0xcb, 0x04, 0x5c, 0x0c, 0x74, 0x13, 0xfa, 0xa3, 0x89, 0xe9, 0xd2, 0x11, 0xb5, 0x7d, 0x4f,
10226
+	0xf9, 0x3f, 0xdc, 0xb3, 0x39, 0x32, 0x7d, 0x31, 0x47, 0x61, 0xf3, 0xd9, 0xb8, 0x3d, 0x87, 0xab,
10227
+	0x22, 0x12, 0xac, 0x68, 0x50, 0x74, 0xa9, 0x47, 0xdd, 0x13, 0x61, 0x09, 0x3e, 0xe5, 0x57, 0x0a,
10228
+	0xcf, 0x89, 0xa8, 0x5b, 0x90, 0xeb, 0x58, 0xba, 0x7f, 0xe8, 0xb8, 0x23, 0x45, 0x85, 0xa2, 0xee,
10229
+	0x1a, 0x43, 0xd3, 0xa7, 0x86, 0x3f, 0x71, 0x83, 0x53, 0x99, 0xa3, 0x29, 0x97, 0x20, 0xe9, 0x88,
10230
+	0x89, 0xf2, 0xd5, 0x2c, 0x5a, 0x22, 0xd9, 0xee, 0x12, 0xa4, 0xa8, 0x6f, 0xc3, 0xf9, 0x8e, 0x35,
10231
+	0x39, 0x32, 0xed, 0x3a, 0xf5, 0x0c, 0xd7, 0x1c, 0x33, 0xed, 0xec, 0x78, 0x99, 0xf3, 0x05, 0xc7,
10232
+	0xcb, 0xbe, 0xc3, 0x23, 0x4f, 0xce, 0x8e, 0x5c, 0xfd, 0x79, 0x12, 0xce, 0x37, 0x6c, 0x14, 0xa6,
10233
+	0x51, 0xe9, 0x6b, 0xb0, 0x42, 0x39, 0xb1, 0x7f, 0x22, 0x9c, 0x4a, 0xea, 0x59, 0x16, 0xd4, 0xc0,
10234
+	0xd3, 0x9a, 0x0b, 0xfe, 0x72, 0x23, 0x6e, 0xfb, 0x8f, 0x68, 0x8f, 0xf3, 0x1a, 0xa5, 0x01, 0x4b,
10235
+	0x63, 0xbe, 0x09, 0x6f, 0x2d, 0xc5, 0x75, 0x5d, 0x8b, 0xd3, 0xf5, 0xc8, 0x3e, 0xab, 0xe9, 0x87,
10236
+	0x9f, 0x5e, 0x39, 0x47, 0x02, 0xd9, 0x6f, 0xe2, 0x7c, 0xff, 0x48, 0xc0, 0x6a, 0xcb, 0x19, 0xcc,
10237
+	0xd9, 0xa1, 0x0c, 0xb9, 0xa1, 0xe3, 0xf9, 0x91, 0x8b, 0x12, 0x8e, 0x95, 0x9b, 0x90, 0x1b, 0xcb,
10238
+	0xe3, 0x93, 0xa7, 0xbf, 0x1e, 0xbf, 0x64, 0x81, 0x21, 0x21, 0x5a, 0x79, 0x1b, 0xf2, 0x6e, 0xe0,
10239
+	0x13, 0xb8, 0xdb, 0x27, 0x70, 0x9c, 0x19, 0x5e, 0xf9, 0x2e, 0x64, 0xc5, 0x21, 0xac, 0xa5, 0xb9,
10240
+	0xe4, 0xb5, 0x27, 0xb2, 0x39, 0x91, 0x42, 0xea, 0x27, 0x09, 0x28, 0x11, 0xfd, 0xd0, 0xdf, 0xa5,
10241
+	0xa3, 0x03, 0xea, 0x76, 0xf1, 0x22, 0xe3, 0xfd, 0xb9, 0x84, 0xe7, 0x48, 0xf5, 0x01, 0x75, 0xf9,
10242
+	0x26, 0x73, 0x44, 0x8e, 0x94, 0x3d, 0xe6, 0xe4, 0xba, 0x31, 0xd4, 0x0f, 0x4c, 0xcb, 0xf4, 0xa7,
10243
+	0x7c, 0x9b, 0x2b, 0xf1, 0xa7, 0xbc, 0xa8, 0x13, 0x17, 0x3f, 0x13, 0x24, 0x73, 0x6a, 0x94, 0x35,
10244
+	0x58, 0xc2, 0x58, 0xe7, 0xe9, 0x47, 0x94, 0xef, 0x3e, 0x4f, 0x82, 0x21, 0xba, 0x72, 0x31, 0x2a,
10245
+	0xa7, 0x14, 0x60, 0x69, 0xaf, 0x75, 0xa7, 0xd5, 0xbe, 0xdb, 0x2a, 0x9d, 0x53, 0x56, 0xa1, 0xb0,
10246
+	0xd7, 0x22, 0x0d, 0xad, 0xb6, 0xad, 0x55, 0x77, 0x1a, 0xa5, 0x84, 0xb2, 0x8c, 0xe1, 0x22, 0x1c,
10247
+	0x26, 0xd5, 0x8f, 0x12, 0x00, 0xec, 0x00, 0xe5, 0xa6, 0xde, 0x82, 0x0c, 0xc6, 0x53, 0x5f, 0x1c,
10248
+	0xdc, 0xca, 0xe6, 0xf3, 0x71, 0xab, 0x9e, 0xc1, 0x2b, 0xec, 0x8f, 0x12, 0x21, 0x12, 0x5d, 0x61,
10249
+	0x72, 0x71, 0x85, 0x19, 0x8e, 0x9c, 0x5f, 0x5a, 0x0e, 0xd2, 0x75, 0xf6, 0x95, 0x50, 0xf2, 0x90,
10250
+	0xc1, 0x35, 0xd5, 0xdf, 0x2d, 0x25, 0xd1, 0xf9, 0x8a, 0xf5, 0x66, 0xb7, 0xd6, 0x6e, 0xb5, 0x1a,
10251
+	0xb5, 0x5e, 0xa3, 0x5e, 0x4a, 0xa9, 0xd7, 0x20, 0xd3, 0x1c, 0xa1, 0x16, 0x65, 0x9d, 0x79, 0xc0,
10252
+	0x21, 0x75, 0xa9, 0x6d, 0x04, 0x8e, 0x35, 0x23, 0xa8, 0x1f, 0xa3, 0x92, 0x5d, 0x67, 0x62, 0xfb,
10253
+	0xca, 0x66, 0xe4, 0x16, 0xaf, 0x6c, 0x6e, 0xc4, 0x6d, 0x81, 0x03, 0x2b, 0x3d, 0x44, 0xc9, 0x5b,
10254
+	0x8e, 0x87, 0x29, 0x7c, 0x45, 0x2e, 0x5d, 0x8e, 0x18, 0xdd, 0xd7, 0xdd, 0x23, 0xea, 0x4b, 0xa3,
10255
+	0xcb, 0x91, 0x72, 0x1d, 0x72, 0x78, 0x3a, 0x03, 0xc7, 0xb6, 0xa6, 0xdc, 0xa5, 0x72, 0x22, 0xcc,
10256
+	0xe2, 0x39, 0x0c, 0xda, 0x48, 0x23, 0x21, 0x57, 0xd9, 0x86, 0xe2, 0x01, 0x26, 0x93, 0xbe, 0x33,
10257
+	0x16, 0x31, 0x2f, 0xf3, 0x78, 0x07, 0x14, 0xab, 0xaa, 0x22, 0xba, 0x2d, 0xc0, 0xa4, 0x70, 0x30,
10258
+	0x1b, 0x28, 0x2d, 0x58, 0x39, 0x71, 0xac, 0xc9, 0x88, 0x86, 0xba, 0xb2, 0x5c, 0xd7, 0x8b, 0x8f,
10259
+	0xd7, 0xb5, 0xcf, 0xf1, 0x81, 0xb6, 0xe5, 0x93, 0xe8, 0x50, 0xb9, 0x03, 0xcb, 0xfe, 0x68, 0x7c,
10260
+	0xe8, 0x85, 0xea, 0x96, 0xb8, 0xba, 0x17, 0xce, 0x30, 0x18, 0x83, 0x07, 0xda, 0x8a, 0x7e, 0x64,
10261
+	0x54, 0xfe, 0x59, 0x0a, 0x0a, 0x91, 0x95, 0x2b, 0x5d, 0x28, 0x60, 0x8e, 0x1d, 0xeb, 0x47, 0x3c,
10262
+	0x6e, 0xcb, 0xb3, 0xb8, 0xf1, 0x44, 0xbb, 0xae, 0x74, 0x66, 0x82, 0x24, 0xaa, 0x45, 0xfd, 0x30,
10263
+	0x09, 0x85, 0x08, 0x53, 0x79, 0x19, 0x72, 0xa4, 0x43, 0x9a, 0xfb, 0x5a, 0xaf, 0x51, 0x3a, 0x57,
10264
+	0x5e, 0xff, 0xe0, 0xc3, 0xab, 0x6b, 0x5c, 0x5b, 0x54, 0x41, 0xc7, 0x35, 0x4f, 0x98, 0xeb, 0x5d,
10265
+	0x87, 0xa5, 0x00, 0x9a, 0x28, 0x3f, 0x83, 0xd0, 0xa7, 0x17, 0xa1, 0x11, 0x24, 0xe9, 0x6e, 0x6b,
10266
+	0x04, 0xbd, 0x2f, 0x19, 0x8f, 0x24, 0xdd, 0xa1, 0xee, 0xd2, 0x81, 0xf2, 0x02, 0x64, 0x25, 0x30,
10267
+	0x55, 0x2e, 0x23, 0xf0, 0xd2, 0x22, 0x70, 0x86, 0x23, 0xdd, 0x1d, 0x6d, 0xbf, 0x51, 0x4a, 0xc7,
10268
+	0xe3, 0x48, 0xd7, 0xd2, 0x4f, 0xa8, 0xf2, 0x3c, 0xde, 0x13, 0x0e, 0xcb, 0x94, 0x2f, 0x23, 0xec,
10269
+	0xa9, 0x47, 0xd4, 0x31, 0x54, 0x79, 0xed, 0x17, 0xbf, 0xd9, 0x38, 0xf7, 0xc7, 0xdf, 0x6e, 0x94,
10270
+	0x16, 0xd9, 0xe5, 0x7f, 0x27, 0x60, 0x79, 0xee, 0xc8, 0x31, 0x45, 0x66, 0x6d, 0xc7, 0x70, 0xc6,
10271
+	0x22, 0x9c, 0xe7, 0xaa, 0x80, 0x5e, 0x9a, 0x6d, 0x39, 0x35, 0xa4, 0x10, 0xc9, 0x41, 0x3f, 0x98,
10272
+	0x4f, 0x48, 0x6f, 0x3c, 0xa1, 0x3f, 0xc5, 0xa6, 0xa4, 0x5b, 0xb0, 0x3c, 0x40, 0x3b, 0x52, 0xb7,
10273
+	0x6f, 0x38, 0xf6, 0xa1, 0x79, 0x24, 0x43, 0x75, 0x39, 0x4e, 0x67, 0x9d, 0x03, 0x49, 0x51, 0x08,
10274
+	0xd4, 0x38, 0xfe, 0x1b, 0x24, 0xa3, 0xf2, 0x3e, 0x14, 0xa3, 0x1e, 0xaa, 0x3c, 0x0b, 0xe0, 0x99,
10275
+	0x3f, 0xa6, 0xb2, 0xbe, 0xe1, 0xd5, 0x10, 0xc9, 0x33, 0x0a, 0xaf, 0x6e, 0x94, 0x17, 0x21, 0x3d,
10276
+	0xc2, 0x50, 0xc6, 0xf5, 0x64, 0xaa, 0x17, 0x58, 0x4e, 0xfc, 0xeb, 0xa7, 0x57, 0x0a, 0x8e, 0x57,
10277
+	0xd9, 0x32, 0x2d, 0xba, 0x8b, 0x2c, 0xc2, 0x01, 0xea, 0x09, 0xa4, 0x59, 0xa8, 0x50, 0x9e, 0x81,
10278
+	0x74, 0xb5, 0xd9, 0xaa, 0xa3, 0xab, 0x9d, 0xc7, 0xd3, 0x59, 0xe6, 0x26, 0x61, 0x0c, 0xe6, 0xbb,
10279
+	0xca, 0x15, 0xc8, 0xee, 0xb7, 0x77, 0xf6, 0x76, 0x99, 0x7b, 0x5d, 0x40, 0xf6, 0x6a, 0xc8, 0x16,
10280
+	0x46, 0xc3, 0xd5, 0x64, 0x7a, 0xbb, 0x9d, 0xad, 0x2e, 0x3a, 0x95, 0x82, 0xfc, 0x95, 0x90, 0xcf,
10281
+	0xd7, 0x5c, 0x3e, 0x2f, 0x4f, 0x35, 0x1f, 0xd2, 0xd5, 0x7f, 0x25, 0x61, 0x99, 0xb0, 0xfa, 0xd6,
10282
+	0xf5, 0x3b, 0x8e, 0x65, 0x1a, 0x53, 0xa5, 0x03, 0x79, 0x34, 0xeb, 0xc0, 0x8c, 0xdc, 0xa9, 0xcd,
10283
+	0xc7, 0x24, 0xc1, 0x99, 0x54, 0x30, 0xaa, 0x05, 0x92, 0x64, 0xa6, 0x04, 0x83, 0x65, 0x66, 0x40,
10284
+	0x2d, 0x7d, 0x7a, 0x56, 0x36, 0xae, 0xcb, 0x5a, 0x9a, 0x08, 0x28, 0xaf, 0x1c, 0xf5, 0x7b, 0x7d,
10285
+	0xdd, 0xf7, 0xe9, 0x68, 0xec, 0x8b, 0x6c, 0x9c, 0xc6, 0xca, 0x51, 0xbf, 0xa7, 0x49, 0x92, 0xf2,
10286
+	0x26, 0x64, 0x4f, 0xd1, 0x2a, 0xce, 0xa9, 0x4c, 0xb8, 0x67, 0xeb, 0x95, 0x58, 0xf5, 0x03, 0x96,
10287
+	0x67, 0x17, 0x16, 0xcb, 0xac, 0xde, 0x6a, 0xb7, 0x1a, 0x81, 0xd5, 0x25, 0xbf, 0x6d, 0xb7, 0x1c,
10288
+	0x9b, 0xdd, 0x18, 0x68, 0xb7, 0xfa, 0x5b, 0x5a, 0x73, 0x67, 0x8f, 0x30, 0xcb, 0x5f, 0x44, 0x48,
10289
+	0x29, 0x84, 0x6c, 0xe9, 0xa6, 0xc5, 0x8a, 0xc0, 0xcb, 0x90, 0xd2, 0x5a, 0x98, 0x5d, 0xca, 0x25,
10290
+	0x64, 0x17, 0x43, 0xb6, 0x66, 0x4f, 0x67, 0x97, 0x69, 0x71, 0x5e, 0xf5, 0x3d, 0x28, 0xee, 0x8d,
10291
+	0x07, 0x18, 0x10, 0x84, 0x63, 0x2a, 0x57, 0x31, 0xa2, 0xe9, 0xae, 0x6e, 0x59, 0xd4, 0x32, 0xbd,
10292
+	0x91, 0xec, 0x13, 0xa2, 0x24, 0x2c, 0x6e, 0x9e, 0xdc, 0x96, 0xb2, 0x06, 0x13, 0x02, 0xea, 0x4f,
10293
+	0x61, 0x15, 0x67, 0xf1, 0x75, 0x2c, 0x36, 0x82, 0xf2, 0x62, 0x13, 0x8a, 0x46, 0x40, 0xea, 0x9b,
10294
+	0x03, 0x71, 0x03, 0xaa, 0xab, 0x78, 0x7f, 0x0b, 0x21, 0xb4, 0x59, 0x27, 0x85, 0x10, 0xd4, 0x1c,
10295
+	0xb0, 0x7d, 0x8e, 0x11, 0x2a, 0x1c, 0x7a, 0x09, 0xa1, 0xa9, 0x0e, 0x42, 0x18, 0x0d, 0xad, 0x98,
10296
+	0xa7, 0xf7, 0x4c, 0x1f, 0x6f, 0xe5, 0x40, 0x14, 0x10, 0x19, 0x92, 0x63, 0x84, 0x1a, 0x73, 0xf0,
10297
+	0xf7, 0x93, 0x00, 0x3d, 0xdd, 0x3b, 0x96, 0x53, 0x63, 0xa9, 0x15, 0x36, 0x56, 0x67, 0x15, 0xf8,
10298
+	0xbd, 0x00, 0x44, 0x66, 0x78, 0xe5, 0x8d, 0xa0, 0x82, 0x10, 0x75, 0x4f, 0xbc, 0xa0, 0x9c, 0x2b,
10299
+	0xae, 0x74, 0x98, 0x2f, 0x6e, 0xd8, 0xfd, 0xa7, 0xae, 0xcb, 0xbd, 0x08, 0xef, 0x3f, 0x7e, 0x62,
10300
+	0xbf, 0x95, 0x0f, 0xf7, 0x2c, 0xb3, 0xe9, 0x73, 0x71, 0x93, 0x2c, 0x18, 0x74, 0xfb, 0x1c, 0x99,
10301
+	0xc9, 0x55, 0x4b, 0xb0, 0xe2, 0xe2, 0x35, 0xc3, 0x55, 0xf7, 0x3d, 0xce, 0x56, 0xff, 0x8c, 0x36,
10302
+	0x68, 0x76, 0xb4, 0x5d, 0x79, 0xda, 0x75, 0xc8, 0x1e, 0xea, 0x23, 0xd3, 0x9a, 0xca, 0x6b, 0xf6,
10303
+	0x6a, 0xdc, 0x14, 0x33, 0x7c, 0x45, 0x1b, 0x0c, 0xb0, 0xdc, 0xf4, 0xb6, 0xb8, 0x0c, 0x91, 0xb2,
10304
+	0xbc, 0xac, 0x98, 0x1c, 0xd8, 0x58, 0x3e, 0x04, 0x65, 0x05, 0x1f, 0xb1, 0x18, 0xe6, 0xea, 0x76,
10305
+	0xb8, 0x5b, 0x31, 0x60, 0x56, 0xc0, 0x40, 0x4e, 0x4f, 0xf5, 0xa9, 0xdc, 0x6f, 0x30, 0xc4, 0x22,
10306
+	0x22, 0x27, 0xba, 0x20, 0x3a, 0xc0, 0x2d, 0xb3, 0x20, 0xfd, 0x55, 0xeb, 0x21, 0x12, 0x2e, 0xa2,
10307
+	0x73, 0x28, 0x5d, 0x7e, 0x9b, 0x87, 0x94, 0x19, 0xeb, 0x6b, 0x55, 0xfb, 0xaf, 0xc3, 0xf2, 0xdc,
10308
+	0x3e, 0x1f, 0xa9, 0xe7, 0x9a, 0x9d, 0xfd, 0x37, 0x4b, 0x69, 0xf9, 0xf5, 0xff, 0xa5, 0xac, 0xfa,
10309
+	0x4f, 0x2c, 0x2f, 0x3b, 0x0e, 0xbf, 0x56, 0xcc, 0xaa, 0xf1, 0xfd, 0x73, 0x8e, 0x77, 0xe3, 0x86,
10310
+	0x63, 0x49, 0x9f, 0x89, 0x2d, 0x68, 0x66, 0x5a, 0x58, 0x7d, 0xc0, 0xe1, 0x24, 0x14, 0xc4, 0xe8,
10311
+	0x5b, 0x10, 0x95, 0x59, 0x7f, 0x8c, 0x38, 0x6e, 0xd6, 0x65, 0x02, 0x82, 0xc4, 0x24, 0x59, 0x73,
10312
+	0x36, 0x9e, 0x1c, 0xe0, 0x35, 0x1d, 0xd2, 0x81, 0xc0, 0xa4, 0x39, 0x66, 0x39, 0xa4, 0x32, 0x98,
10313
+	0x5a, 0xc7, 0xf6, 0x32, 0xd0, 0xb9, 0x06, 0xa9, 0x5e, 0xad, 0x83, 0x71, 0x67, 0x15, 0xa3, 0x46,
10314
+	0x21, 0x20, 0x23, 0x89, 0x71, 0xf6, 0xea, 0x1d, 0x0c, 0x37, 0x73, 0x1c, 0x24, 0x95, 0xd3, 0x2c,
10315
+	0x9c, 0xa8, 0xbf, 0x4a, 0x40, 0x56, 0x24, 0xb7, 0xd8, 0x1d, 0x6b, 0xb0, 0x14, 0x94, 0x5c, 0x22,
10316
+	0xe3, 0xbe, 0xf8, 0xf8, 0xec, 0x58, 0x91, 0xc9, 0x4c, 0x9c, 0x63, 0x20, 0x57, 0x7e, 0x0b, 0x8a,
10317
+	0x51, 0xc6, 0xd7, 0x3a, 0xc5, 0x9f, 0x40, 0x81, 0x39, 0x4a, 0x90, 0x25, 0x37, 0x21, 0x2b, 0x12,
10318
+	0xb0, 0xbc, 0xea, 0x67, 0xa5, 0x6a, 0x89, 0xc4, 0x48, 0xb7, 0x24, 0xd2, 0x7b, 0xd0, 0x78, 0x6e,
10319
+	0x9c, 0xed, 0x8e, 0x24, 0x80, 0xab, 0xb7, 0x20, 0xdd, 0xa1, 0xa8, 0xe1, 0x39, 0x58, 0xb2, 0x31,
10320
+	0xf4, 0xcc, 0x22, 0x9b, 0xac, 0x4c, 0x06, 0x14, 0x23, 0x56, 0x96, 0xb1, 0x30, 0x9e, 0xa1, 0xf1,
10321
+	0x74, 0xf4, 0xb7, 0xa0, 0xf7, 0x66, 0xdf, 0x6a, 0x0f, 0x8a, 0x77, 0xa9, 0x79, 0x34, 0xf4, 0xf1,
10322
+	0xc4, 0x98, 0xa2, 0x57, 0x21, 0x3d, 0xa6, 0xe1, 0xe2, 0xd7, 0x62, 0x5d, 0x07, 0xf9, 0x84, 0xa3,
10323
+	0xd8, 0x85, 0x3c, 0xe5, 0xd2, 0xf2, 0xb9, 0x43, 0x8e, 0xd4, 0xdf, 0x27, 0x61, 0xa5, 0xe9, 0x79,
10324
+	0x13, 0x1d, 0x5b, 0x09, 0x19, 0x05, 0xbf, 0x37, 0xdf, 0x0a, 0x5d, 0x8f, 0xdd, 0xe1, 0x9c, 0xc8,
10325
+	0x7c, 0x3b, 0x24, 0x23, 0x57, 0x32, 0x8c, 0x5c, 0xea, 0xc3, 0x44, 0xd0, 0x07, 0x5d, 0x8b, 0xdc,
10326
+	0x9b, 0xf2, 0x1a, 0x3a, 0xd1, 0xc5, 0xa8, 0x26, 0xba, 0x67, 0x1f, 0xdb, 0xce, 0xa9, 0x8d, 0x89,
10327
+	0x16, 0xfb, 0xa2, 0x56, 0xe3, 0x2e, 0x7a, 0xda, 0x25, 0x04, 0x29, 0x73, 0x20, 0x42, 0x6d, 0x7a,
10328
+	0xca, 0x34, 0x75, 0x1a, 0xad, 0x7a, 0xb3, 0x75, 0x1b, 0xd3, 0xdb, 0xa3, 0x9a, 0x3a, 0x14, 0xd3,
10329
+	0x99, 0x7d, 0x84, 0xe6, 0xce, 0x36, 0xbb, 0xdd, 0x3d, 0x5e, 0xa9, 0x3e, 0x8d, 0xa8, 0x0b, 0x73,
10330
+	0x28, 0x36, 0xc0, 0x32, 0x15, 0x41, 0x2c, 0x93, 0x22, 0x28, 0x1d, 0x03, 0x62, 0xc9, 0x14, 0x03,
10331
+	0x88, 0xf0, 0xf0, 0xbf, 0x25, 0xa1, 0xa4, 0x19, 0x06, 0x1d, 0xfb, 0x8c, 0x2f, 0xab, 0x93, 0x1e,
10332
+	0xde, 0x64, 0xf6, 0x65, 0xf2, 0x6a, 0x8b, 0xb9, 0xc5, 0xcd, 0xd8, 0xb7, 0xb0, 0x05, 0xb9, 0x0a,
10333
+	0x71, 0x2c, 0xaa, 0x0d, 0x46, 0xa6, 0xc7, 0xde, 0x47, 0x04, 0x8d, 0x84, 0x9a, 0xca, 0x5f, 0x24,
10334
+	0xe0, 0x42, 0x0c, 0x42, 0x79, 0x1d, 0xd2, 0x2e, 0x92, 0xe5, 0xf1, 0xac, 0x3f, 0xae, 0x53, 0x65,
10335
+	0xa2, 0x84, 0x23, 0x95, 0x0d, 0x00, 0x7d, 0xe2, 0x3b, 0x3a, 0x9f, 0x9f, 0x1f, 0x4c, 0x8e, 0x44,
10336
+	0x28, 0xca, 0x5d, 0x8c, 0xd6, 0xd4, 0x70, 0x65, 0xb3, 0x57, 0xd8, 0xbc, 0xf5, 0xdf, 0xae, 0xbe,
10337
+	0xd2, 0xe5, 0x6a, 0x88, 0x54, 0x57, 0xae, 0x60, 0x9f, 0xc0, 0xbf, 0x98, 0x47, 0x63, 0x49, 0xa1,
10338
+	0xf3, 0x45, 0x17, 0x09, 0xff, 0x66, 0x8e, 0xa2, 0x5b, 0x47, 0x81, 0xa3, 0xe0, 0xa7, 0xfa, 0x11,
10339
+	0xe6, 0xa2, 0xc6, 0x3d, 0x9f, 0xba, 0xb6, 0x6e, 0xd5, 0x34, 0xa5, 0x11, 0x89, 0x90, 0x62, 0xb7,
10340
+	0x2f, 0xc5, 0xbe, 0x5f, 0x84, 0x12, 0x95, 0x9a, 0x16, 0x13, 0x23, 0xb1, 0x3a, 0x98, 0xb8, 0x96,
10341
+	0x7c, 0x0b, 0xe3, 0xd5, 0xc1, 0x1e, 0xd9, 0x21, 0x8c, 0xc6, 0x1e, 0x92, 0x82, 0x88, 0x94, 0x7a,
10342
+	0xfc, 0x23, 0x66, 0x64, 0x82, 0x6f, 0x3f, 0x2a, 0xbd, 0x0a, 0x30, 0x5b, 0x35, 0x1e, 0x55, 0xa6,
10343
+	0xb6, 0xd5, 0xed, 0xee, 0xe0, 0xf5, 0xe0, 0xc5, 0xf4, 0x8c, 0xc5, 0xc9, 0xea, 0xef, 0x12, 0x90,
10344
+	0xab, 0x69, 0x32, 0xab, 0x6c, 0x41, 0x89, 0xc7, 0x12, 0x83, 0xba, 0x7e, 0x9f, 0xde, 0x1b, 0x9b,
10345
+	0xee, 0x54, 0x86, 0x83, 0xb3, 0xcb, 0xce, 0x15, 0x26, 0x55, 0x43, 0xa1, 0x06, 0x97, 0x51, 0x08,
10346
+	0x14, 0xa9, 0xdc, 0x62, 0xdf, 0xd0, 0x83, 0xe0, 0xbc, 0x71, 0xb6, 0x29, 0x44, 0x49, 0x36, 0x1b,
10347
+	0x63, 0xd3, 0x1e, 0x28, 0xa9, 0xe9, 0x9e, 0xba, 0x0f, 0x17, 0xda, 0xae, 0x31, 0xc4, 0xe2, 0x48,
10348
+	0x4c, 0x2a, 0x97, 0x7c, 0x0b, 0xd6, 0x7d, 0x2c, 0x82, 0xfa, 0x43, 0xd3, 0xf3, 0xd9, 0x13, 0x2c,
10349
+	0xfa, 0x06, 0xb5, 0x19, 0xbf, 0xcf, 0x9f, 0x4a, 0x65, 0xb3, 0x72, 0x99, 0x61, 0xb6, 0x05, 0x84,
10350
+	0x04, 0x88, 0x1d, 0x06, 0x50, 0x7f, 0x00, 0xa5, 0xba, 0xe9, 0x8d, 0x75, 0x1f, 0x75, 0xcb, 0xd6,
10351
+	0x49, 0xb9, 0x0d, 0xa5, 0x21, 0xc5, 0x1a, 0xf6, 0x80, 0xea, 0x98, 0x07, 0xa9, 0x6b, 0x3a, 0x83,
10352
+	0x27, 0xb2, 0xc3, 0x6a, 0x28, 0xd5, 0xe1, 0x42, 0xea, 0x97, 0x98, 0xb5, 0xd9, 0xdb, 0x94, 0xd4,
10353
+	0xfb, 0x0a, 0x9c, 0xf7, 0x6c, 0x7d, 0xec, 0x0d, 0x1d, 0xbf, 0x6f, 0xda, 0x3e, 0x7b, 0x8c, 0xb5,
10354
+	0x64, 0xfd, 0x5b, 0x0a, 0x18, 0x4d, 0x49, 0xc7, 0x78, 0xac, 0x1c, 0x53, 0x3a, 0xee, 0x3b, 0xd6,
10355
+	0xa0, 0x1f, 0x30, 0xc5, 0x03, 0x2c, 0xa2, 0x19, 0xa7, 0x6d, 0x0d, 0xba, 0x01, 0x5d, 0xa9, 0xc2,
10356
+	0x86, 0xe5, 0x1c, 0xf5, 0x71, 0x67, 0x2e, 0xde, 0xf5, 0xfe, 0xa1, 0xe3, 0xf6, 0x3d, 0xcb, 0x39,
10357
+	0xc5, 0x0f, 0x0b, 0xff, 0xa8, 0x1b, 0x34, 0x17, 0x65, 0x44, 0x35, 0x04, 0x68, 0xcb, 0x71, 0xbb,
10358
+	0xc8, 0xdb, 0x0a, 0x10, 0x2c, 0xb5, 0xcf, 0xb6, 0xed, 0x9b, 0xc6, 0x71, 0x90, 0xda, 0x43, 0x6a,
10359
+	0x0f, 0x89, 0x18, 0xdd, 0x96, 0xa9, 0x45, 0x0d, 0x6e, 0x64, 0x8e, 0xca, 0x70, 0x54, 0x31, 0x20,
10360
+	0x32, 0x90, 0xfa, 0xbf, 0x90, 0xef, 0x58, 0xba, 0xc1, 0x9f, 0xb9, 0x59, 0xc5, 0x8f, 0x69, 0x8b,
10361
+	0x9d, 0x1c, 0xee, 0x5a, 0x84, 0xb4, 0x3c, 0x89, 0x92, 0xd4, 0xf7, 0x31, 0xd1, 0x13, 0xc7, 0xf1,
10362
+	0xf1, 0x92, 0x5e, 0x85, 0xac, 0xa1, 0xf7, 0x03, 0x77, 0x2f, 0x56, 0xf3, 0xe8, 0x16, 0x99, 0x9a,
10363
+	0x76, 0x87, 0x4e, 0x49, 0xc6, 0xd0, 0xf1, 0x8f, 0xa5, 0x3c, 0x44, 0x30, 0x27, 0xe5, 0xe6, 0x28,
10364
+	0x8a, 0x94, 0x87, 0x5e, 0x8c, 0x14, 0x82, 0xc2, 0xec, 0x1f, 0xa3, 0x5a, 0x51, 0x82, 0xfa, 0x43,
10365
+	0xdd, 0x1b, 0x8a, 0x02, 0xb1, 0xba, 0x82, 0x48, 0x10, 0xc8, 0x6d, 0xa4, 0x12, 0x10, 0x68, 0xf6,
10366
+	0xad, 0xfe, 0x25, 0x01, 0x05, 0x36, 0x30, 0x0f, 0x4d, 0x83, 0xe5, 0x96, 0xaf, 0x1f, 0x17, 0x31,
10367
+	0x30, 0x18, 0x9e, 0x2b, 0x17, 0xc5, 0x03, 0x43, 0xad, 0x4b, 0x08, 0xa3, 0x29, 0xef, 0x60, 0x48,
10368
+	0xe4, 0xb9, 0x4d, 0x86, 0x44, 0xf5, 0xab, 0xb3, 0xa0, 0xec, 0x6c, 0xa4, 0x1c, 0x37, 0xe2, 0x6c,
10369
+	0x75, 0xfc, 0x68, 0x8a, 0x24, 0x4a, 0x62, 0x4f, 0xf4, 0x86, 0xcd, 0x4f, 0x43, 0x3e, 0xd1, 0xd7,
10370
+	0x5a, 0x04, 0x29, 0xea, 0x9f, 0x12, 0xb0, 0xdc, 0xb0, 0x0d, 0x77, 0xca, 0x43, 0x0a, 0xb3, 0xe0,
10371
+	0x3a, 0xe4, 0xb1, 0x80, 0xf6, 0xa6, 0x1e, 0x76, 0x99, 0xc1, 0x0b, 0x60, 0x48, 0x50, 0x9a, 0x90,
10372
+	0xc7, 0xe0, 0xe9, 0xb8, 0xa6, 0x3f, 0x1c, 0xc9, 0x4a, 0x32, 0x3e, 0x8c, 0x45, 0x75, 0x56, 0xb4,
10373
+	0x40, 0x84, 0xcc, 0xa4, 0x83, 0xc0, 0x95, 0xe2, 0x8b, 0xe5, 0x81, 0x0b, 0x7b, 0x5e, 0x0b, 0xdb,
10374
+	0x1b, 0xac, 0x11, 0xfb, 0xac, 0x6b, 0xe0, 0xfb, 0xc0, 0xf6, 0x4f, 0xd2, 0x58, 0x27, 0xa4, 0xaa,
10375
+	0x90, 0x0f, 0x95, 0xb1, 0x77, 0x57, 0xad, 0xd1, 0xed, 0xdf, 0xd8, 0xbc, 0xd9, 0xbf, 0x5d, 0xdb,
10376
+	0xc5, 0x30, 0x26, 0xf2, 0xe6, 0x1f, 0x70, 0x4f, 0xbb, 0xba, 0x8d, 0x9d, 0x4d, 0xd0, 0xe7, 0xa1,
10377
+	0x57, 0xb8, 0x78, 0xd5, 0x82, 0x42, 0x28, 0x2d, 0xbc, 0x82, 0xdd, 0x3e, 0x56, 0x08, 0x31, 0x56,
10378
+	0x7c, 0x21, 0x14, 0x79, 0x7f, 0x4e, 0x9d, 0xf9, 0xfe, 0x9c, 0xfe, 0x56, 0xde, 0x9f, 0x5f, 0xfe,
10379
+	0x32, 0x05, 0xf9, 0xb0, 0x6f, 0x63, 0x2e, 0xc3, 0xea, 0x92, 0x73, 0xa2, 0xa3, 0x0e, 0xe9, 0x2d,
10380
+	0x5e, 0x91, 0xe4, 0xb5, 0x9d, 0x9d, 0x76, 0x4d, 0x63, 0xcf, 0xb7, 0xef, 0x88, 0xc2, 0x25, 0x04,
10381
+	0x68, 0x78, 0x69, 0xd9, 0xa1, 0x0f, 0x14, 0x75, 0x56, 0xb8, 0xdc, 0x97, 0x7d, 0x7b, 0x88, 0x0a,
10382
+	0xaa, 0x96, 0xe7, 0x21, 0xa7, 0x75, 0xbb, 0xcd, 0xdb, 0x2d, 0xd4, 0xf4, 0x20, 0x51, 0x7e, 0x0a,
10383
+	0x41, 0xe7, 0x67, 0xaa, 0x30, 0xe1, 0x1e, 0xd9, 0xa8, 0x89, 0xa1, 0x6a, 0xb5, 0x46, 0x87, 0xcd,
10384
+	0x77, 0x3f, 0xb9, 0x88, 0xe2, 0xe9, 0x9a, 0xbf, 0xc1, 0xe5, 0x3b, 0xa4, 0xd1, 0xd1, 0x08, 0x9b,
10385
+	0xf1, 0x41, 0x72, 0x61, 0x5d, 0x1d, 0x97, 0x62, 0x27, 0xcf, 0xe6, 0xdc, 0x08, 0xde, 0xa2, 0xef,
10386
+	0xa7, 0xc4, 0x3b, 0xcd, 0xac, 0x59, 0x45, 0xfb, 0x4e, 0xd9, 0x6c, 0xdd, 0x9e, 0x46, 0x7a, 0x5c,
10387
+	0x4d, 0x6a, 0x61, 0xb6, 0x2e, 0x7b, 0x42, 0x60, 0x5a, 0x70, 0x77, 0x64, 0xaf, 0xd5, 0xe2, 0xbb,
10388
+	0x4b, 0x2f, 0xec, 0x8e, 0x4c, 0x6c, 0x9b, 0x61, 0xae, 0x61, 0x0a, 0x6b, 0xef, 0x76, 0x76, 0x1a,
10389
+	0xbd, 0x46, 0xe9, 0x41, 0x7a, 0x61, 0x41, 0x35, 0x67, 0x34, 0xb6, 0xa8, 0x2f, 0xb6, 0xd7, 0xdd,
10390
+	0xde, 0xeb, 0xf1, 0xa7, 0xf2, 0xfb, 0x99, 0xc5, 0x09, 0x87, 0x13, 0x7f, 0xc0, 0x4a, 0xc5, 0xab,
10391
+	0x61, 0xed, 0xf6, 0x20, 0x23, 0x52, 0x66, 0x88, 0x11, 0x85, 0x1b, 0xd3, 0x43, 0x1a, 0xdf, 0x17,
10392
+	0xaf, 0xea, 0xf7, 0xb3, 0x0b, 0x7a, 0x08, 0x7d, 0x0f, 0xa3, 0x20, 0x96, 0x77, 0xe1, 0x33, 0x54,
10393
+	0xc8, 0x7a, 0xf9, 0x87, 0x90, 0x0b, 0x02, 0x06, 0x5a, 0x27, 0x7b, 0xb7, 0x4d, 0xee, 0x34, 0x08,
10394
+	0x1e, 0x3d, 0xb7, 0x4e, 0xc0, 0xb9, 0xeb, 0xb8, 0xe8, 0x5d, 0xb8, 0x8c, 0xa5, 0x5d, 0xad, 0xa5,
10395
+	0xdd, 0x46, 0x80, 0x7c, 0x06, 0x0b, 0x00, 0xd2, 0xeb, 0xcb, 0x25, 0x39, 0x41, 0xa8, 0xb3, 0xba,
10396
+	0xfe, 0xf0, 0xb3, 0x8d, 0x73, 0x9f, 0xe0, 0xef, 0x8b, 0xcf, 0x36, 0x12, 0xf7, 0x3f, 0xdf, 0x48,
10397
+	0x3c, 0xc4, 0xdf, 0xc7, 0xf8, 0xfb, 0x3b, 0xfe, 0x0e, 0xb2, 0xbc, 0x7e, 0x79, 0xe3, 0x3f, 0x01,
10398
+	0x00, 0x00, 0xff, 0xff, 0x24, 0xa1, 0x77, 0xb8, 0x17, 0x1e, 0x00, 0x00,
10394 10399
 }
... ...
@@ -139,12 +139,14 @@ message Mount {
139 139
 
140 140
 		BIND = 0 [(gogoproto.enumvalue_customname) = "MountTypeBind"]; // Bind mount host dir
141 141
 		VOLUME = 1 [(gogoproto.enumvalue_customname) = "MountTypeVolume"];  // Remote storage volumes
142
+		TMPFS = 2 [(gogoproto.enumvalue_customname) = "MountTypeTmpfs"]; // Mount a tmpfs
142 143
 	}
143 144
 
144 145
 	// Type defines the nature of the mount.
145 146
 	Type type = 1;
146 147
 
147
-	// Source path to mount
148
+	// Source specifies the name of the mount. Depending on mount type, this
149
+	// may be a volume name or a host path, or even ignored.
148 150
 	string source = 2;
149 151
 
150 152
 	// Target path in container
... ...
@@ -186,14 +188,58 @@ message Mount {
186 186
 		Driver driver_config = 3;
187 187
 	}
188 188
 
189
+	message TmpfsOptions {
190
+		// Size sets the size of the tmpfs, in bytes.
191
+		//
192
+		// This will be converted to an operating system specific value
193
+		// depending on the host. For example, on linux, it will be convered to
194
+		// use a 'k', 'm' or 'g' syntax. BSD, though not widely supported with
195
+		// docker, uses a straight byte value.
196
+		//
197
+		// Percentages are not supported.
198
+		int64 size_bytes = 1;
199
+
200
+		// Mode of the tmpfs upon creation
201
+		int32 mode = 2 [(gogoproto.customtype) = "os.FileMode", (gogoproto.nullable) = false];
202
+
203
+		// TODO(stevvooe): There are several more tmpfs flags, specified in the
204
+		// daemon, that are accepted. Only the most basic are added for now.
205
+		//
206
+		// From docker/docker/pkg/mount/flags.go:
207
+		//
208
+		// var validFlags = map[string]bool{
209
+		// 	"":          true,
210
+		// 	"size":      true, X
211
+		// 	"mode":      true, X
212
+		// 	"uid":       true,
213
+		// 	"gid":       true,
214
+		// 	"nr_inodes": true,
215
+		// 	"nr_blocks": true,
216
+		// 	"mpol":      true,
217
+		// }
218
+		//
219
+		// Some of these may be straightforward to add, but others, such as
220
+		// uid/gid have implications in a clustered system.
221
+	}
222
+
189 223
 	// Depending on type, one of bind_options or volumes_options will be set.
190 224
 
191 225
 	// BindOptions configures properties of a bind mount type.
226
+	//
227
+	// For mounts of type bind, the source must be an absolute host path.
192 228
 	BindOptions bind_options = 5;
193 229
 
194 230
 	// VolumeOptions configures the properties specific to a volume mount type.
231
+	//
232
+	// For mounts of type volume, the source will be used as the volume name.
195 233
 	VolumeOptions volume_options = 6;
196 234
 
235
+	// TmpfsOptions allows one to set options for mounting a temporary
236
+	// filesystem.
237
+	//
238
+	// The source field will be ignored when using mounts of type tmpfs.
239
+	TmpfsOptions tmpfs_options = 7;
240
+
197 241
 	// TODO(stevvooe): It be better to use a oneof field above, although the
198 242
 	// type is enough to make the decision, while being primary to the
199 243
 	// datastructure.
... ...
@@ -24,6 +24,8 @@ type GlobalOrchestrator struct {
24 24
 
25 25
 	updater  *UpdateSupervisor
26 26
 	restarts *RestartSupervisor
27
+
28
+	cluster *api.Cluster // local instance of the cluster
27 29
 }
28 30
 
29 31
 // NewGlobalOrchestrator creates a new GlobalOrchestrator
... ...
@@ -50,11 +52,23 @@ func (g *GlobalOrchestrator) Run(ctx context.Context) error {
50 50
 	watcher, cancel := queue.Watch()
51 51
 	defer cancel()
52 52
 
53
+	// lookup the cluster
54
+	var err error
55
+	g.store.View(func(readTx store.ReadTx) {
56
+		var clusters []*api.Cluster
57
+		clusters, err = store.FindClusters(readTx, store.ByName("default"))
58
+
59
+		if len(clusters) != 1 {
60
+			return // just pick up the cluster when it is created.
61
+		}
62
+		g.cluster = clusters[0]
63
+	})
64
+	if err != nil {
65
+		return err
66
+	}
67
+
53 68
 	// Get list of nodes
54
-	var (
55
-		nodes []*api.Node
56
-		err   error
57
-	)
69
+	var nodes []*api.Node
58 70
 	g.store.View(func(readTx store.ReadTx) {
59 71
 		nodes, err = store.FindNodes(readTx, store.All)
60 72
 	})
... ...
@@ -88,6 +102,8 @@ func (g *GlobalOrchestrator) Run(ctx context.Context) error {
88 88
 		case event := <-watcher:
89 89
 			// TODO(stevvooe): Use ctx to limit running time of operation.
90 90
 			switch v := event.(type) {
91
+			case state.EventUpdateCluster:
92
+				g.cluster = v.Cluster
91 93
 			case state.EventCreateService:
92 94
 				if !isGlobalService(v.Service) {
93 95
 					continue
... ...
@@ -228,7 +244,7 @@ func (g *GlobalOrchestrator) reconcileOneService(ctx context.Context, service *a
228 228
 			}
229 229
 		}
230 230
 		if len(updateTasks) > 0 {
231
-			g.updater.Update(ctx, service, updateTasks)
231
+			g.updater.Update(ctx, g.cluster, service, updateTasks)
232 232
 		}
233 233
 		return nil
234 234
 	})
... ...
@@ -325,7 +341,7 @@ func (g *GlobalOrchestrator) reconcileServiceOneNode(ctx context.Context, servic
325 325
 }
326 326
 
327 327
 // restartTask calls the restart supervisor's Restart function, which
328
-// sets a task's desired state to dead and restarts it if the restart
328
+// sets a task's desired state to shutdown and restarts it if the restart
329 329
 // policy calls for it to be restarted.
330 330
 func (g *GlobalOrchestrator) restartTask(ctx context.Context, taskID string, serviceID string) {
331 331
 	err := g.store.Update(func(tx store.Tx) error {
... ...
@@ -337,7 +353,7 @@ func (g *GlobalOrchestrator) restartTask(ctx context.Context, taskID string, ser
337 337
 		if service == nil {
338 338
 			return nil
339 339
 		}
340
-		return g.restarts.Restart(ctx, tx, service, *t)
340
+		return g.restarts.Restart(ctx, tx, g.cluster, service, *t)
341 341
 	})
342 342
 	if err != nil {
343 343
 		log.G(ctx).WithError(err).Errorf("global orchestrator: restartTask transaction failed")
... ...
@@ -361,7 +377,7 @@ func (g *GlobalOrchestrator) removeTask(ctx context.Context, batch *store.Batch,
361 361
 }
362 362
 
363 363
 func (g *GlobalOrchestrator) addTask(ctx context.Context, batch *store.Batch, service *api.Service, nodeID string) {
364
-	task := newTask(service, 0)
364
+	task := newTask(g.cluster, service, 0)
365 365
 	task.NodeID = nodeID
366 366
 
367 367
 	err := batch.Update(func(tx store.Tx) error {
... ...
@@ -27,6 +27,8 @@ type ReplicatedOrchestrator struct {
27 27
 
28 28
 	updater  *UpdateSupervisor
29 29
 	restarts *RestartSupervisor
30
+
31
+	cluster *api.Cluster // local cluster instance
30 32
 }
31 33
 
32 34
 // NewReplicatedOrchestrator creates a new ReplicatedOrchestrator.
... ...
@@ -61,6 +63,7 @@ func (r *ReplicatedOrchestrator) Run(ctx context.Context) error {
61 61
 			return
62 62
 		}
63 63
 		err = r.initServices(readTx)
64
+		err = r.initCluster(readTx)
64 65
 	})
65 66
 	if err != nil {
66 67
 		return err
... ...
@@ -74,9 +77,11 @@ func (r *ReplicatedOrchestrator) Run(ctx context.Context) error {
74 74
 			// TODO(stevvooe): Use ctx to limit running time of operation.
75 75
 			r.handleTaskEvent(ctx, event)
76 76
 			r.handleServiceEvent(ctx, event)
77
-			switch event.(type) {
77
+			switch v := event.(type) {
78 78
 			case state.EventCommit:
79 79
 				r.tick(ctx)
80
+			case state.EventUpdateCluster:
81
+				r.cluster = v.Cluster
80 82
 			}
81 83
 		case <-r.stopChan:
82 84
 			return nil
... ...
@@ -99,7 +104,16 @@ func (r *ReplicatedOrchestrator) tick(ctx context.Context) {
99 99
 	r.tickServices(ctx)
100 100
 }
101 101
 
102
-func newTask(service *api.Service, instance uint64) *api.Task {
102
+func newTask(cluster *api.Cluster, service *api.Service, instance uint64) *api.Task {
103
+	var logDriver *api.Driver
104
+	if service.Spec.Task.LogDriver != nil {
105
+		// use the log driver specific to the task, if we have it.
106
+		logDriver = service.Spec.Task.LogDriver
107
+	} else if cluster != nil {
108
+		// pick up the cluster default, if available.
109
+		logDriver = cluster.Spec.DefaultLogDriver // nil is okay here.
110
+	}
111
+
103 112
 	// NOTE(stevvooe): For now, we don't override the container naming and
104 113
 	// labeling scheme in the agent. If we decide to do this in the future,
105 114
 	// they should be overridden here.
... ...
@@ -118,6 +132,7 @@ func newTask(service *api.Service, instance uint64) *api.Task {
118 118
 			Spec: service.Spec.Endpoint.Copy(),
119 119
 		},
120 120
 		DesiredState: api.TaskStateRunning,
121
+		LogDriver:    logDriver,
121 122
 	}
122 123
 }
123 124
 
... ...
@@ -59,7 +59,7 @@ func NewRestartSupervisor(store *store.MemoryStore) *RestartSupervisor {
59 59
 
60 60
 // Restart initiates a new task to replace t if appropriate under the service's
61 61
 // restart policy.
62
-func (r *RestartSupervisor) Restart(ctx context.Context, tx store.Tx, service *api.Service, t api.Task) error {
62
+func (r *RestartSupervisor) Restart(ctx context.Context, tx store.Tx, cluster *api.Cluster, service *api.Service, t api.Task) error {
63 63
 	// TODO(aluzzardi): This function should not depend on `service`.
64 64
 
65 65
 	t.DesiredState = api.TaskStateShutdown
... ...
@@ -76,9 +76,9 @@ func (r *RestartSupervisor) Restart(ctx context.Context, tx store.Tx, service *a
76 76
 	var restartTask *api.Task
77 77
 
78 78
 	if isReplicatedService(service) {
79
-		restartTask = newTask(service, t.Slot)
79
+		restartTask = newTask(cluster, service, t.Slot)
80 80
 	} else if isGlobalService(service) {
81
-		restartTask = newTask(service, 0)
81
+		restartTask = newTask(cluster, service, 0)
82 82
 		restartTask.NodeID = t.NodeID
83 83
 	} else {
84 84
 		log.G(ctx).Error("service not supported by restart supervisor")
... ...
@@ -16,6 +16,21 @@ import (
16 16
 // specifications. This is different from task-level orchestration, which
17 17
 // responds to changes in individual tasks (or nodes which run them).
18 18
 
19
+func (r *ReplicatedOrchestrator) initCluster(readTx store.ReadTx) error {
20
+	clusters, err := store.FindClusters(readTx, store.ByName("default"))
21
+	if err != nil {
22
+		return err
23
+	}
24
+
25
+	if len(clusters) != 1 {
26
+		// we'll just pick it when it is created.
27
+		return nil
28
+	}
29
+
30
+	r.cluster = clusters[0]
31
+	return nil
32
+}
33
+
19 34
 func (r *ReplicatedOrchestrator) initServices(readTx store.ReadTx) error {
20 35
 	services, err := store.FindServices(readTx, store.All)
21 36
 	if err != nil {
... ...
@@ -133,7 +148,7 @@ func (r *ReplicatedOrchestrator) reconcile(ctx context.Context, service *api.Ser
133 133
 	case specifiedInstances > numTasks:
134 134
 		log.G(ctx).Debugf("Service %s was scaled up from %d to %d instances", service.ID, numTasks, specifiedInstances)
135 135
 		// Update all current tasks then add missing tasks
136
-		r.updater.Update(ctx, service, runningTasks)
136
+		r.updater.Update(ctx, r.cluster, service, runningTasks)
137 137
 		_, err = r.store.Batch(func(batch *store.Batch) error {
138 138
 			r.addTasks(ctx, batch, service, runningInstances, specifiedInstances-numTasks)
139 139
 			return nil
... ...
@@ -179,7 +194,7 @@ func (r *ReplicatedOrchestrator) reconcile(ctx context.Context, service *api.Ser
179 179
 			sortedTasks = append(sortedTasks, t.task)
180 180
 		}
181 181
 
182
-		r.updater.Update(ctx, service, sortedTasks[:specifiedInstances])
182
+		r.updater.Update(ctx, r.cluster, service, sortedTasks[:specifiedInstances])
183 183
 		_, err = r.store.Batch(func(batch *store.Batch) error {
184 184
 			r.removeTasks(ctx, batch, service, sortedTasks[specifiedInstances:])
185 185
 			return nil
... ...
@@ -190,7 +205,7 @@ func (r *ReplicatedOrchestrator) reconcile(ctx context.Context, service *api.Ser
190 190
 
191 191
 	case specifiedInstances == numTasks:
192 192
 		// Simple update, no scaling - update all tasks.
193
-		r.updater.Update(ctx, service, runningTasks)
193
+		r.updater.Update(ctx, r.cluster, service, runningTasks)
194 194
 	}
195 195
 }
196 196
 
... ...
@@ -206,7 +221,7 @@ func (r *ReplicatedOrchestrator) addTasks(ctx context.Context, batch *store.Batc
206 206
 		}
207 207
 
208 208
 		err := batch.Update(func(tx store.Tx) error {
209
-			return store.CreateTask(tx, newTask(service, instance))
209
+			return store.CreateTask(tx, newTask(r.cluster, service, instance))
210 210
 		})
211 211
 		if err != nil {
212 212
 			log.G(ctx).Errorf("Failed to create task: %v", err)
... ...
@@ -149,7 +149,7 @@ func (r *ReplicatedOrchestrator) tickTasks(ctx context.Context) {
149 149
 						}
150 150
 
151 151
 						// Restart task if applicable
152
-						if err := r.restarts.Restart(ctx, tx, service, *t); err != nil {
152
+						if err := r.restarts.Restart(ctx, tx, r.cluster, service, *t); err != nil {
153 153
 							return err
154 154
 						}
155 155
 					}
... ...
@@ -36,7 +36,7 @@ func NewUpdateSupervisor(store *store.MemoryStore, restartSupervisor *RestartSup
36 36
 
37 37
 // Update starts an Update of `tasks` belonging to `service` in the background and returns immediately.
38 38
 // If an update for that service was already in progress, it will be cancelled before the new one starts.
39
-func (u *UpdateSupervisor) Update(ctx context.Context, service *api.Service, tasks []*api.Task) {
39
+func (u *UpdateSupervisor) Update(ctx context.Context, cluster *api.Cluster, service *api.Service, tasks []*api.Task) {
40 40
 	u.l.Lock()
41 41
 	defer u.l.Unlock()
42 42
 
... ...
@@ -49,7 +49,7 @@ func (u *UpdateSupervisor) Update(ctx context.Context, service *api.Service, tas
49 49
 	update := NewUpdater(u.store, u.restarts)
50 50
 	u.updates[id] = update
51 51
 	go func() {
52
-		update.Run(ctx, service, tasks)
52
+		update.Run(ctx, cluster, service, tasks)
53 53
 		u.l.Lock()
54 54
 		if u.updates[id] == update {
55 55
 			delete(u.updates, id)
... ...
@@ -98,7 +98,7 @@ func (u *Updater) Cancel() {
98 98
 }
99 99
 
100 100
 // Run starts the update and returns only once its complete or cancelled.
101
-func (u *Updater) Run(ctx context.Context, service *api.Service, tasks []*api.Task) {
101
+func (u *Updater) Run(ctx context.Context, cluster *api.Cluster, service *api.Service, tasks []*api.Task) {
102 102
 	defer close(u.doneChan)
103 103
 
104 104
 	dirtyTasks := []*api.Task{}
... ...
@@ -130,7 +130,7 @@ func (u *Updater) Run(ctx context.Context, service *api.Service, tasks []*api.Ta
130 130
 	wg.Add(parallelism)
131 131
 	for i := 0; i < parallelism; i++ {
132 132
 		go func() {
133
-			u.worker(ctx, service, taskQueue)
133
+			u.worker(ctx, cluster, service, taskQueue)
134 134
 			wg.Done()
135 135
 		}()
136 136
 	}
... ...
@@ -149,9 +149,9 @@ func (u *Updater) Run(ctx context.Context, service *api.Service, tasks []*api.Ta
149 149
 	wg.Wait()
150 150
 }
151 151
 
152
-func (u *Updater) worker(ctx context.Context, service *api.Service, queue <-chan *api.Task) {
152
+func (u *Updater) worker(ctx context.Context, cluster *api.Cluster, service *api.Service, queue <-chan *api.Task) {
153 153
 	for t := range queue {
154
-		updated := newTask(service, t.Slot)
154
+		updated := newTask(cluster, service, t.Slot)
155 155
 		updated.DesiredState = api.TaskStateReady
156 156
 		if isGlobalService(service) {
157 157
 			updated.NodeID = t.NodeID
... ...
@@ -113,6 +113,28 @@ func (c *Cluster) RemoveMember(id uint64) error {
113 113
 	return nil
114 114
 }
115 115
 
116
+// ReplaceMemberConnection replaces the member's GRPC connection and GRPC
117
+// client.
118
+func (c *Cluster) ReplaceMemberConnection(id uint64, newConn *Member) error {
119
+	c.mu.Lock()
120
+	defer c.mu.Unlock()
121
+
122
+	oldMember, ok := c.members[id]
123
+	if !ok {
124
+		return ErrIDNotFound
125
+	}
126
+
127
+	oldMember.Conn.Close()
128
+
129
+	newMember := *oldMember
130
+	newMember.Conn = newConn.Conn
131
+	newMember.RaftClient = newConn.RaftClient
132
+
133
+	c.members[id] = &newMember
134
+
135
+	return nil
136
+}
137
+
116 138
 // IsIDRemoved checks if a Member is in the remove set.
117 139
 func (c *Cluster) IsIDRemoved(id uint64) bool {
118 140
 	c.mu.RLock()
... ...
@@ -1000,6 +1000,14 @@ func (n *Node) sendToMember(members map[uint64]*membership.Member, m raftpb.Mess
1000 1000
 			panic("node is nil")
1001 1001
 		}
1002 1002
 		n.ReportUnreachable(m.To)
1003
+
1004
+		// Bounce the connection
1005
+		newConn, err := n.ConnectToMember(conn.Addr, 0)
1006
+		if err != nil {
1007
+			n.Config.Logger.Errorf("could connect to member ID %x at %s: %v", m.To, conn.Addr, err)
1008
+		} else {
1009
+			n.cluster.ReplaceMemberConnection(m.To, newConn)
1010
+		}
1003 1011
 	} else if m.Type == raftpb.MsgSnap {
1004 1012
 		n.ReportSnapshot(m.To, raft.SnapshotFinish)
1005 1013
 	}