Browse Source

Merge pull request #38831 from thaJeztah/bump_swarmkit

bump swarmkit to 415dc72789e2b733ea884f09188c286ca187d8ec
Brian Goff 6 years ago
parent
commit
258edd715d

+ 1 - 1
vendor.conf

@@ -128,7 +128,7 @@ github.com/containerd/ttrpc 2a805f71863501300ae1976d29f0454ae003e85a
 github.com/gogo/googleapis 08a7655d27152912db7aaf4f983275eaf8d128ef
 
 # cluster
-github.com/docker/swarmkit ebfb0aa1118ebfd35a224d72a5d337ce0addd907
+github.com/docker/swarmkit 415dc72789e2b733ea884f09188c286ca187d8ec
 github.com/gogo/protobuf v1.0.0
 github.com/cloudflare/cfssl 1.3.2
 github.com/fernet/fernet-go 1b2437bc582b3cfbb341ee5a29f8ef5b42912ff2

+ 16 - 0
vendor/github.com/docker/swarmkit/api/ca.pb.go

@@ -86,6 +86,22 @@
 		CreateConfigResponse
 		RemoveConfigRequest
 		RemoveConfigResponse
+		CreateExtensionRequest
+		CreateExtensionResponse
+		RemoveExtensionRequest
+		RemoveExtensionResponse
+		GetExtensionRequest
+		GetExtensionResponse
+		CreateResourceRequest
+		CreateResourceResponse
+		RemoveResourceRequest
+		RemoveResourceResponse
+		UpdateResourceRequest
+		UpdateResourceResponse
+		GetResourceRequest
+		GetResourceResponse
+		ListResourcesRequest
+		ListResourcesResponse
 		SessionRequest
 		SessionMessage
 		HeartbeatRequest

File diff suppressed because it is too large
+ 1582 - 1355
vendor/github.com/docker/swarmkit/api/control.pb.go


+ 183 - 0
vendor/github.com/docker/swarmkit/api/control.proto

@@ -6,6 +6,7 @@ import "github.com/docker/swarmkit/api/specs.proto";
 import "github.com/docker/swarmkit/api/objects.proto";
 import "github.com/docker/swarmkit/api/types.proto";
 import "gogoproto/gogo.proto";
+import "google/protobuf/any.proto";
 import "github.com/docker/swarmkit/protobuf/plugin/plugin.proto";
 
 // Control defines the RPC methods for controlling a cluster.
@@ -161,6 +162,80 @@ service Control {
 	rpc RemoveConfig(RemoveConfigRequest) returns (RemoveConfigResponse) {
 		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
 	}
+
+	// --- extension APIs ---
+
+	// GetExtension returns a `GetExtensionResponse` with a `Extension` with the same
+	// id as `GetExtensionRequest.ExtensionId`
+	// - Returns `NotFound` if the Extension with the given id is not found.
+	// - Returns `InvalidArgument` if the `GetExtensionRequest.ExtensionId` is empty.
+	// - Returns an error if the get fails.
+	rpc GetExtension(GetExtensionRequest) returns (GetExtensionResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// CreateExtension creates an `Extension` based on the provided `CreateExtensionRequest.Extension`
+	// and returns a `CreateExtensionResponse`.
+	// - Returns `InvalidArgument` if the `CreateExtensionRequest.Extension` is malformed,
+	//   or fails validation.
+	// - Returns an error if the creation fails.
+	rpc CreateExtension(CreateExtensionRequest) returns (CreateExtensionResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// RemoveExtension removes the extension referenced by `RemoveExtensionRequest.ID`.
+	// - Returns `InvalidArgument` if `RemoveExtensionRequest.ExtensionId` is empty.
+	// - Returns `NotFound` if the an extension named `RemoveExtensionRequest.ExtensionId` is not found.
+	// - Returns an error if the deletion fails.
+	rpc RemoveExtension(RemoveExtensionRequest) returns (RemoveExtensionResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// --- resource APIs ---
+
+	// GetResource returns a `GetResourceResponse` with a `Resource` with the same
+	// id as `GetResourceRequest.Resource`
+	// - Returns `NotFound` if the Resource with the given id is not found.
+	// - Returns `InvalidArgument` if the `GetResourceRequest.Resource` is empty.
+	// - Returns an error if getting fails.
+	rpc GetResource(GetResourceRequest) returns (GetResourceResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// UpdateResource updates the resource with the given `UpdateResourceRequest.Resource.Id` using the given `UpdateResourceRequest.Resource` and returns a `UpdateResourceResponse`.
+	// - Returns `NotFound` if the Resource with the given `UpdateResourceRequest.Resource.Id` is not found.
+	// - Returns `InvalidArgument` if the UpdateResourceRequest.Resource.Id` is empty.
+	// - Returns an error if updating fails.
+	rpc UpdateResource(UpdateResourceRequest) returns (UpdateResourceResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// ListResources returns a `ListResourcesResponse` with a list of `Resource`s stored in the raft store,
+	// or all resources matching any name in `ListConfigsRequest.Names`, any
+	// name prefix in `ListResourcesRequest.NamePrefixes`, any id in
+	// `ListResourcesRequest.ResourceIDs`, or any id prefix in `ListResourcesRequest.IDPrefixes`,
+	// extension name equal to `ListResourcesRequest.Extension`.
+	// - Returns an error if listing fails.
+	rpc ListResources(ListResourcesRequest) returns (ListResourcesResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// CreateResource returns a `CreateResourceResponse` after creating a `Resource` based
+	// on the provided `CreateResourceRequest.Resource`.
+	// - Returns `InvalidArgument` if the `CreateResourceRequest.Resource` is malformed,
+	//   or if the config data is too long or contains invalid characters.
+	// - Returns an error if the creation fails.
+	rpc CreateResource(CreateResourceRequest) returns (CreateResourceResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
+
+	// RemoveResource removes the `Resource` referenced by `RemoveResourceRequest.ResourceID`.
+	// - Returns `InvalidArgument` if `RemoveResourceRequest.ResourceID` is empty.
+	// - Returns `NotFound` if the a resource named `RemoveResourceRequest.ResourceID` is not found.
+	// - Returns an error if the deletion fails.
+	rpc RemoveResource(RemoveResourceRequest) returns (RemoveResourceResponse) {
+		option (docker.protobuf.plugin.tls_authorization) = { roles: "swarm-manager" };
+	}
 }
 
 message GetNodeRequest {
@@ -556,3 +631,111 @@ message RemoveConfigRequest {
 // RemoveConfigResponse is an empty object indicating the successful removal of
 // a config.
 message RemoveConfigResponse {}
+
+// CreateExtensionRequest creates a new extension as specified by the provided
+// parameters
+message CreateExtensionRequest {
+	Annotations annotations = 1;
+	string description = 2;
+}
+
+// CreateExtensionResponse contains the newly created `Extension` corresponding
+// to the parameters in the CreateExtensionRequest.
+message CreateExtensionResponse {
+	Extension extension = 1;
+}
+
+// RemoveExtensionRequest contains the ID of the extension that should be removed. This
+// removes all versions of the extension.
+message RemoveExtensionRequest {
+	string extension_id = 1;
+}
+
+// RemoveExtensionResponse is an empty object indicating the successful removal
+// of an extension.
+message RemoveExtensionResponse {
+}
+
+// GetResourceRequest is the request to get a Extension object given a extension id.
+message GetExtensionRequest {
+	string extension_id = 1;
+}
+
+// GetExtensionResponse contains the Extension corresponding to the id in
+// `GetExtensionRequest`.
+message GetExtensionResponse {
+	Extension extension = 1;
+}
+
+// CreateResourceRequest creates a new resource specified by the included
+// resource object. An existing resource will not be updated.
+message CreateResourceRequest {
+	Annotations annotations = 1;
+	string kind = 2;
+	google.protobuf.Any payload = 3;
+}
+
+// CreateResourceResponse contains the newly created `Resource` corresponding
+// to the resource in the CreateResourceRequest.
+message CreateResourceResponse {
+	Resource resource = 1;
+}
+
+// RemoveResourceRequest contains the ID of the resource that should be removed. This
+// removes all versions of the resource.
+message RemoveResourceRequest {
+	string resource_id = 1;
+}
+
+// RemoveResourceResponse is an empty object indicating the successful removal
+// of a resource.
+message RemoveResourceResponse {
+}
+
+// UpdateResourceRequest updates the resource specified by the given resource object.
+message UpdateResourceRequest {
+	string resource_id = 1;
+	Version resource_version = 2;
+	// Annotations describes the annotations to update. If the Annotations should
+	// be unchanged, then this field should be left empty. Note that the name of
+	// a Resource cannot be changed, only its labels.
+	Annotations annotations = 3;
+	// Payload describes the new payload of the resource. If the Payload should
+	// be unchanged, then this field should be left empty.
+	google.protobuf.Any payload = 4;
+}
+
+message UpdateResourceResponse {
+	Resource resource = 1;
+}
+
+// GetResourceRequest is the request to get a Resource object given a resource id.
+message GetResourceRequest {
+	string resource_id = 1;
+}
+
+// GetResourceResponse contains the Resource corresponding to the id in
+// `GetResourceRequest`.
+message GetResourceResponse {
+	Resource resource = 1;
+}
+
+// ListResourcesRequest is the request to list all resources in the raft store,
+// or all resources filtered by (name or name prefix or id prefix), labels and extension.
+message ListResourcesRequest {
+	message Filters {
+		repeated string names = 1;
+		repeated string id_prefixes = 2;
+		map<string, string> labels = 3;
+		repeated string name_prefixes = 4;
+		string kind = 5;
+	}
+
+	Filters filters = 1;
+}
+
+// ListResourcesResponse contains a list of all the resources that match the name or
+// name prefix filters provided in `ListResourcesRequest`.
+message ListResourcesResponse {
+	repeated Resource resources = 1;
+}

+ 5 - 5
vendor/github.com/docker/swarmkit/api/objects.pb.go

@@ -8,7 +8,7 @@ import fmt "fmt"
 import math "math"
 import google_protobuf "github.com/gogo/protobuf/types"
 import _ "github.com/gogo/protobuf/gogoproto"
-import google_protobuf3 "github.com/gogo/protobuf/types"
+import google_protobuf4 "github.com/gogo/protobuf/types"
 import _ "github.com/docker/swarmkit/protobuf/plugin"
 
 import deepcopy "github.com/docker/swarmkit/api/deepcopy"
@@ -357,7 +357,7 @@ type Resource struct {
 	Kind string `protobuf:"bytes,4,opt,name=kind,proto3" json:"kind,omitempty"`
 	// Payload bytes. This data is not interpreted in any way by SwarmKit.
 	// By convention, it should be a marshalled protocol buffers message.
-	Payload *google_protobuf3.Any `protobuf:"bytes,5,opt,name=payload" json:"payload,omitempty"`
+	Payload *google_protobuf4.Any `protobuf:"bytes,5,opt,name=payload" json:"payload,omitempty"`
 }
 
 func (m *Resource) Reset()                    { *m = Resource{} }
@@ -749,7 +749,7 @@ func (m *Resource) CopyFrom(src interface{}) {
 	deepcopy.Copy(&m.Meta, &o.Meta)
 	deepcopy.Copy(&m.Annotations, &o.Annotations)
 	if o.Payload != nil {
-		m.Payload = &google_protobuf3.Any{}
+		m.Payload = &google_protobuf4.Any{}
 		deepcopy.Copy(m.Payload, o.Payload)
 	}
 }
@@ -4958,7 +4958,7 @@ func (this *Resource) String() string {
 		`Meta:` + strings.Replace(strings.Replace(this.Meta.String(), "Meta", "Meta", 1), `&`, ``, 1) + `,`,
 		`Annotations:` + strings.Replace(strings.Replace(this.Annotations.String(), "Annotations", "Annotations", 1), `&`, ``, 1) + `,`,
 		`Kind:` + fmt.Sprintf("%v", this.Kind) + `,`,
-		`Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "google_protobuf3.Any", 1) + `,`,
+		`Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "google_protobuf4.Any", 1) + `,`,
 		`}`,
 	}, "")
 	return s
@@ -7976,7 +7976,7 @@ func (m *Resource) Unmarshal(dAtA []byte) error {
 				return io.ErrUnexpectedEOF
 			}
 			if m.Payload == nil {
-				m.Payload = &google_protobuf3.Any{}
+				m.Payload = &google_protobuf4.Any{}
 			}
 			if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 				return err

+ 177 - 270
vendor/github.com/docker/swarmkit/api/specs.pb.go

@@ -8,8 +8,8 @@ import fmt "fmt"
 import math "math"
 import _ "github.com/gogo/protobuf/gogoproto"
 import google_protobuf1 "github.com/gogo/protobuf/types"
-import google_protobuf3 "github.com/gogo/protobuf/types"
 import google_protobuf4 "github.com/gogo/protobuf/types"
+import google_protobuf2 "github.com/gogo/protobuf/types"
 
 import deepcopy "github.com/docker/swarmkit/api/deepcopy"
 
@@ -506,7 +506,7 @@ func (*ResourceReference) Descriptor() ([]byte, []int) { return fileDescriptorSp
 
 type GenericRuntimeSpec struct {
 	Kind    string                `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"`
-	Payload *google_protobuf3.Any `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"`
+	Payload *google_protobuf4.Any `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"`
 }
 
 func (m *GenericRuntimeSpec) Reset()                    { *m = GenericRuntimeSpec{} }
@@ -572,7 +572,7 @@ type ContainerSpec struct {
 	// Privileges specifies security configuration/permissions.
 	Privileges *Privileges `protobuf:"bytes,22,opt,name=privileges" json:"privileges,omitempty"`
 	// Init declares that a custom init will be running inside the container, if null, use the daemon's configured settings
-	Init *google_protobuf4.BoolValue `protobuf:"bytes,23,opt,name=init" json:"init,omitempty"`
+	Init *google_protobuf2.BoolValue `protobuf:"bytes,23,opt,name=init" json:"init,omitempty"`
 	// TTY declares that a TTY should be attached to the standard streams,
 	// including stdin if it is still open.
 	TTY bool `protobuf:"varint,13,opt,name=tty,proto3" json:"tty,omitempty"`
@@ -636,12 +636,6 @@ type ContainerSpec struct {
 	//
 	// https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime
 	Sysctls map[string]string `protobuf:"bytes,26,rep,name=sysctls" json:"sysctls,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	// Swap limit equal to memory plus swap: '-1' to enable unlimited swap
-	MemorySwap int64 `protobuf:"varint,27,opt,name=memory_swap,json=memorySwap,proto3" json:"memory_swap,omitempty"`
-	// Tune container memory swappiness (0 to 100) - if not specified, defaults
-	// to the container OS's default - generally 60, or the value predefined in
-	// the image; set to -1 to unset a previously set value
-	MemorySwappiness *google_protobuf4.Int64Value `protobuf:"bytes,28,opt,name=memory_swappiness,json=memorySwappiness" json:"memory_swappiness,omitempty"`
 }
 
 func (m *ContainerSpec) Reset()                    { *m = ContainerSpec{} }
@@ -1084,7 +1078,7 @@ func (m *GenericRuntimeSpec) CopyFrom(src interface{}) {
 	o := src.(*GenericRuntimeSpec)
 	*m = *o
 	if o.Payload != nil {
-		m.Payload = &google_protobuf3.Any{}
+		m.Payload = &google_protobuf4.Any{}
 		deepcopy.Copy(m.Payload, o.Payload)
 	}
 }
@@ -1149,7 +1143,7 @@ func (m *ContainerSpec) CopyFrom(src interface{}) {
 		deepcopy.Copy(m.Privileges, o.Privileges)
 	}
 	if o.Init != nil {
-		m.Init = &google_protobuf4.BoolValue{}
+		m.Init = &google_protobuf2.BoolValue{}
 		deepcopy.Copy(m.Init, o.Init)
 	}
 	if o.Mounts != nil {
@@ -1203,10 +1197,6 @@ func (m *ContainerSpec) CopyFrom(src interface{}) {
 		}
 	}
 
-	if o.MemorySwappiness != nil {
-		m.MemorySwappiness = &google_protobuf4.Int64Value{}
-		deepcopy.Copy(m.MemorySwappiness, o.MemorySwappiness)
-	}
 }
 
 func (m *ContainerSpec_PullOptions) Copy() *ContainerSpec_PullOptions {
@@ -2114,25 +2104,6 @@ func (m *ContainerSpec) MarshalTo(dAtA []byte) (int, error) {
 			i += copy(dAtA[i:], v)
 		}
 	}
-	if m.MemorySwap != 0 {
-		dAtA[i] = 0xd8
-		i++
-		dAtA[i] = 0x1
-		i++
-		i = encodeVarintSpecs(dAtA, i, uint64(m.MemorySwap))
-	}
-	if m.MemorySwappiness != nil {
-		dAtA[i] = 0xe2
-		i++
-		dAtA[i] = 0x1
-		i++
-		i = encodeVarintSpecs(dAtA, i, uint64(m.MemorySwappiness.Size()))
-		n25, err := m.MemorySwappiness.MarshalTo(dAtA[i:])
-		if err != nil {
-			return 0, err
-		}
-		i += n25
-	}
 	return i, nil
 }
 
@@ -2278,20 +2249,20 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0xa
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
-	n26, err := m.Annotations.MarshalTo(dAtA[i:])
+	n25, err := m.Annotations.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n26
+	i += n25
 	if m.DriverConfig != nil {
 		dAtA[i] = 0x12
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.DriverConfig.Size()))
-		n27, err := m.DriverConfig.MarshalTo(dAtA[i:])
+		n26, err := m.DriverConfig.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n27
+		i += n26
 	}
 	if m.Ipv6Enabled {
 		dAtA[i] = 0x18
@@ -2317,11 +2288,11 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x2a
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.IPAM.Size()))
-		n28, err := m.IPAM.MarshalTo(dAtA[i:])
+		n27, err := m.IPAM.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n28
+		i += n27
 	}
 	if m.Attachable {
 		dAtA[i] = 0x30
@@ -2344,11 +2315,11 @@ func (m *NetworkSpec) MarshalTo(dAtA []byte) (int, error) {
 		i++
 	}
 	if m.ConfigFrom != nil {
-		nn29, err := m.ConfigFrom.MarshalTo(dAtA[i:])
+		nn28, err := m.ConfigFrom.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += nn29
+		i += nn28
 	}
 	return i, nil
 }
@@ -2379,67 +2350,67 @@ func (m *ClusterSpec) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0xa
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
-	n30, err := m.Annotations.MarshalTo(dAtA[i:])
+	n29, err := m.Annotations.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n30
+	i += n29
 	dAtA[i] = 0x12
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.AcceptancePolicy.Size()))
-	n31, err := m.AcceptancePolicy.MarshalTo(dAtA[i:])
+	n30, err := m.AcceptancePolicy.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n31
+	i += n30
 	dAtA[i] = 0x1a
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Orchestration.Size()))
-	n32, err := m.Orchestration.MarshalTo(dAtA[i:])
+	n31, err := m.Orchestration.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n32
+	i += n31
 	dAtA[i] = 0x22
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Raft.Size()))
-	n33, err := m.Raft.MarshalTo(dAtA[i:])
+	n32, err := m.Raft.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n33
+	i += n32
 	dAtA[i] = 0x2a
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Dispatcher.Size()))
-	n34, err := m.Dispatcher.MarshalTo(dAtA[i:])
+	n33, err := m.Dispatcher.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n34
+	i += n33
 	dAtA[i] = 0x32
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.CAConfig.Size()))
-	n35, err := m.CAConfig.MarshalTo(dAtA[i:])
+	n34, err := m.CAConfig.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n35
+	i += n34
 	dAtA[i] = 0x3a
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.TaskDefaults.Size()))
-	n36, err := m.TaskDefaults.MarshalTo(dAtA[i:])
+	n35, err := m.TaskDefaults.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n36
+	i += n35
 	dAtA[i] = 0x42
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.EncryptionConfig.Size()))
-	n37, err := m.EncryptionConfig.MarshalTo(dAtA[i:])
+	n36, err := m.EncryptionConfig.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n37
+	i += n36
 	return i, nil
 }
 
@@ -2461,11 +2432,11 @@ func (m *SecretSpec) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0xa
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
-	n38, err := m.Annotations.MarshalTo(dAtA[i:])
+	n37, err := m.Annotations.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n38
+	i += n37
 	if len(m.Data) > 0 {
 		dAtA[i] = 0x12
 		i++
@@ -2476,21 +2447,21 @@ func (m *SecretSpec) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Templating.Size()))
-		n39, err := m.Templating.MarshalTo(dAtA[i:])
+		n38, err := m.Templating.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n39
+		i += n38
 	}
 	if m.Driver != nil {
 		dAtA[i] = 0x22
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Driver.Size()))
-		n40, err := m.Driver.MarshalTo(dAtA[i:])
+		n39, err := m.Driver.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n40
+		i += n39
 	}
 	return i, nil
 }
@@ -2513,11 +2484,11 @@ func (m *ConfigSpec) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0xa
 	i++
 	i = encodeVarintSpecs(dAtA, i, uint64(m.Annotations.Size()))
-	n41, err := m.Annotations.MarshalTo(dAtA[i:])
+	n40, err := m.Annotations.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n41
+	i += n40
 	if len(m.Data) > 0 {
 		dAtA[i] = 0x12
 		i++
@@ -2528,11 +2499,11 @@ func (m *ConfigSpec) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintSpecs(dAtA, i, uint64(m.Templating.Size()))
-		n42, err := m.Templating.MarshalTo(dAtA[i:])
+		n41, err := m.Templating.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n42
+		i += n41
 	}
 	return i, nil
 }
@@ -2858,13 +2829,6 @@ func (m *ContainerSpec) Size() (n int) {
 			n += mapEntrySize + 2 + sovSpecs(uint64(mapEntrySize))
 		}
 	}
-	if m.MemorySwap != 0 {
-		n += 2 + sovSpecs(uint64(m.MemorySwap))
-	}
-	if m.MemorySwappiness != nil {
-		l = m.MemorySwappiness.Size()
-		n += 2 + l + sovSpecs(uint64(l))
-	}
 	return n
 }
 
@@ -3158,7 +3122,7 @@ func (this *GenericRuntimeSpec) String() string {
 	}
 	s := strings.Join([]string{`&GenericRuntimeSpec{`,
 		`Kind:` + fmt.Sprintf("%v", this.Kind) + `,`,
-		`Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "google_protobuf3.Any", 1) + `,`,
+		`Payload:` + strings.Replace(fmt.Sprintf("%v", this.Payload), "Any", "google_protobuf4.Any", 1) + `,`,
 		`}`,
 	}, "")
 	return s
@@ -3220,12 +3184,10 @@ func (this *ContainerSpec) String() string {
 		`StopSignal:` + fmt.Sprintf("%v", this.StopSignal) + `,`,
 		`Configs:` + strings.Replace(fmt.Sprintf("%v", this.Configs), "ConfigReference", "ConfigReference", 1) + `,`,
 		`Privileges:` + strings.Replace(fmt.Sprintf("%v", this.Privileges), "Privileges", "Privileges", 1) + `,`,
-		`Init:` + strings.Replace(fmt.Sprintf("%v", this.Init), "BoolValue", "google_protobuf4.BoolValue", 1) + `,`,
+		`Init:` + strings.Replace(fmt.Sprintf("%v", this.Init), "BoolValue", "google_protobuf2.BoolValue", 1) + `,`,
 		`Isolation:` + fmt.Sprintf("%v", this.Isolation) + `,`,
 		`PidsLimit:` + fmt.Sprintf("%v", this.PidsLimit) + `,`,
 		`Sysctls:` + mapStringForSysctls + `,`,
-		`MemorySwap:` + fmt.Sprintf("%v", this.MemorySwap) + `,`,
-		`MemorySwappiness:` + strings.Replace(fmt.Sprintf("%v", this.MemorySwappiness), "Int64Value", "google_protobuf4.Int64Value", 1) + `,`,
 		`}`,
 	}, "")
 	return s
@@ -4442,7 +4404,7 @@ func (m *GenericRuntimeSpec) Unmarshal(dAtA []byte) error {
 				return io.ErrUnexpectedEOF
 			}
 			if m.Payload == nil {
-				m.Payload = &google_protobuf3.Any{}
+				m.Payload = &google_protobuf4.Any{}
 			}
 			if err := m.Payload.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 				return err
@@ -5330,7 +5292,7 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error {
 				return io.ErrUnexpectedEOF
 			}
 			if m.Init == nil {
-				m.Init = &google_protobuf4.BoolValue{}
+				m.Init = &google_protobuf2.BoolValue{}
 			}
 			if err := m.Init.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
 				return err
@@ -5492,58 +5454,6 @@ func (m *ContainerSpec) Unmarshal(dAtA []byte) error {
 			}
 			m.Sysctls[mapkey] = mapvalue
 			iNdEx = postIndex
-		case 27:
-			if wireType != 0 {
-				return fmt.Errorf("proto: wrong wireType = %d for field MemorySwap", wireType)
-			}
-			m.MemorySwap = 0
-			for shift := uint(0); ; shift += 7 {
-				if shift >= 64 {
-					return ErrIntOverflowSpecs
-				}
-				if iNdEx >= l {
-					return io.ErrUnexpectedEOF
-				}
-				b := dAtA[iNdEx]
-				iNdEx++
-				m.MemorySwap |= (int64(b) & 0x7F) << shift
-				if b < 0x80 {
-					break
-				}
-			}
-		case 28:
-			if wireType != 2 {
-				return fmt.Errorf("proto: wrong wireType = %d for field MemorySwappiness", wireType)
-			}
-			var msglen int
-			for shift := uint(0); ; shift += 7 {
-				if shift >= 64 {
-					return ErrIntOverflowSpecs
-				}
-				if iNdEx >= l {
-					return io.ErrUnexpectedEOF
-				}
-				b := dAtA[iNdEx]
-				iNdEx++
-				msglen |= (int(b) & 0x7F) << shift
-				if b < 0x80 {
-					break
-				}
-			}
-			if msglen < 0 {
-				return ErrInvalidLengthSpecs
-			}
-			postIndex := iNdEx + msglen
-			if postIndex > l {
-				return io.ErrUnexpectedEOF
-			}
-			if m.MemorySwappiness == nil {
-				m.MemorySwappiness = &google_protobuf4.Int64Value{}
-			}
-			if err := m.MemorySwappiness.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
-				return err
-			}
-			iNdEx = postIndex
 		default:
 			iNdEx = preIndex
 			skippy, err := skipSpecs(dAtA[iNdEx:])
@@ -6855,144 +6765,141 @@ var (
 func init() { proto.RegisterFile("github.com/docker/swarmkit/api/specs.proto", fileDescriptorSpecs) }
 
 var fileDescriptorSpecs = []byte{
-	// 2213 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcf, 0x6f, 0x1b, 0xb9,
-	0xf5, 0xb7, 0x6c, 0x59, 0x3f, 0xde, 0xc8, 0x89, 0xcc, 0xcd, 0xee, 0x8e, 0x95, 0xac, 0xad, 0xd5,
-	0x66, 0xf3, 0xf5, 0xee, 0xe2, 0x2b, 0xa3, 0x6e, 0x90, 0x66, 0x93, 0x6e, 0x5b, 0xc9, 0xd2, 0xda,
-	0x6a, 0x12, 0x5b, 0xa0, 0x1c, 0xb7, 0x01, 0x0a, 0x08, 0xf4, 0x0c, 0x2d, 0x0d, 0x3c, 0x1a, 0x4e,
-	0x49, 0xca, 0x81, 0x6e, 0x3d, 0x2e, 0xdc, 0xbf, 0xc1, 0xe8, 0xa1, 0xe8, 0xbd, 0xfd, 0x2f, 0x72,
-	0x6c, 0x6f, 0xed, 0xc5, 0xe8, 0xfa, 0x5f, 0xe8, 0xad, 0x97, 0x16, 0xe4, 0x70, 0xa4, 0x91, 0x2d,
-	0xc7, 0x29, 0x9a, 0x43, 0x6f, 0xe4, 0x9b, 0xcf, 0xe7, 0x91, 0x7c, 0xfc, 0xf0, 0xf1, 0x71, 0xe0,
-	0xcb, 0x9e, 0x27, 0xfb, 0xc3, 0xc3, 0xaa, 0xc3, 0x06, 0x1b, 0x2e, 0x73, 0x8e, 0x29, 0xdf, 0x10,
-	0xaf, 0x09, 0x1f, 0x1c, 0x7b, 0x72, 0x83, 0x84, 0xde, 0x86, 0x08, 0xa9, 0x23, 0xaa, 0x21, 0x67,
-	0x92, 0x21, 0x14, 0x01, 0xaa, 0x31, 0xa0, 0x7a, 0xf2, 0x83, 0xd2, 0x4d, 0x7c, 0x39, 0x0a, 0xa9,
-	0xe1, 0x97, 0xee, 0xf4, 0x58, 0x8f, 0xe9, 0xe6, 0x86, 0x6a, 0x19, 0xeb, 0x6a, 0x8f, 0xb1, 0x9e,
-	0x4f, 0x37, 0x74, 0xef, 0x70, 0x78, 0xb4, 0xe1, 0x0e, 0x39, 0x91, 0x1e, 0x0b, 0xcc, 0xf7, 0x95,
-	0xcb, 0xdf, 0x49, 0x30, 0xba, 0x8e, 0xfa, 0x9a, 0x93, 0x30, 0xa4, 0xdc, 0x0c, 0x58, 0x39, 0x4b,
-	0x43, 0x6e, 0x97, 0xb9, 0xb4, 0x13, 0x52, 0x07, 0x6d, 0x83, 0x45, 0x82, 0x80, 0x49, 0xed, 0x5b,
-	0xd8, 0xa9, 0x72, 0x6a, 0xdd, 0xda, 0x5c, 0xab, 0x5e, 0x5d, 0x53, 0xb5, 0x36, 0x81, 0xd5, 0xd3,
-	0x6f, 0xce, 0xd7, 0xe6, 0x70, 0x92, 0x89, 0x7e, 0x0a, 0x05, 0x97, 0x0a, 0x8f, 0x53, 0xb7, 0xcb,
-	0x99, 0x4f, 0xed, 0xf9, 0x72, 0x6a, 0xfd, 0xd6, 0xe6, 0xbd, 0x59, 0x9e, 0xd4, 0xe0, 0x98, 0xf9,
-	0x14, 0x5b, 0x86, 0xa1, 0x3a, 0x68, 0x1b, 0x60, 0x40, 0x07, 0x87, 0x94, 0x8b, 0xbe, 0x17, 0xda,
-	0x0b, 0x9a, 0xfe, 0x7f, 0xd7, 0xd1, 0xd5, 0xdc, 0xab, 0x2f, 0xc6, 0x70, 0x9c, 0xa0, 0xa2, 0x17,
-	0x50, 0x20, 0x27, 0xc4, 0xf3, 0xc9, 0xa1, 0xe7, 0x7b, 0x72, 0x64, 0xa7, 0xb5, 0xab, 0x2f, 0xde,
-	0xea, 0xaa, 0x96, 0x20, 0xe0, 0x29, 0x7a, 0xc5, 0x05, 0x98, 0x0c, 0x84, 0x1e, 0x40, 0xb6, 0xdd,
-	0xdc, 0x6d, 0xb4, 0x76, 0xb7, 0x8b, 0x73, 0xa5, 0x95, 0xd3, 0xb3, 0xf2, 0x87, 0xca, 0xc7, 0x04,
-	0xd0, 0xa6, 0x81, 0xeb, 0x05, 0x3d, 0xb4, 0x0e, 0xb9, 0xda, 0xd6, 0x56, 0xb3, 0xbd, 0xdf, 0x6c,
-	0x14, 0x53, 0xa5, 0xd2, 0xe9, 0x59, 0xf9, 0xa3, 0x69, 0x60, 0xcd, 0x71, 0x68, 0x28, 0xa9, 0x5b,
-	0x4a, 0x7f, 0xf7, 0xfb, 0xd5, 0xb9, 0xca, 0x77, 0x29, 0x28, 0x24, 0x27, 0x81, 0x1e, 0x40, 0xa6,
-	0xb6, 0xb5, 0xdf, 0x3a, 0x68, 0x16, 0xe7, 0x26, 0xf4, 0x24, 0xa2, 0xe6, 0x48, 0xef, 0x84, 0xa2,
-	0xfb, 0xb0, 0xd8, 0xae, 0xbd, 0xec, 0x34, 0x8b, 0xa9, 0xc9, 0x74, 0x92, 0xb0, 0x36, 0x19, 0x0a,
-	0x8d, 0x6a, 0xe0, 0x5a, 0x6b, 0xb7, 0x38, 0x3f, 0x1b, 0xd5, 0xe0, 0xc4, 0x0b, 0xcc, 0x54, 0x7e,
-	0x97, 0x06, 0xab, 0x43, 0xf9, 0x89, 0xe7, 0xbc, 0x67, 0x89, 0x3c, 0x82, 0xb4, 0x24, 0xe2, 0x58,
-	0x4b, 0xc3, 0x9a, 0x2d, 0x8d, 0x7d, 0x22, 0x8e, 0xd5, 0xa0, 0x86, 0xae, 0xf1, 0x4a, 0x19, 0x9c,
-	0x86, 0xbe, 0xe7, 0x10, 0x49, 0x5d, 0xad, 0x0c, 0x6b, 0xf3, 0xf3, 0x59, 0x6c, 0x3c, 0x46, 0x99,
-	0xf9, 0xef, 0xcc, 0xe1, 0x04, 0x15, 0x3d, 0x85, 0x4c, 0xcf, 0x67, 0x87, 0xc4, 0xd7, 0x9a, 0xb0,
-	0x36, 0x3f, 0x9d, 0xe5, 0x64, 0x5b, 0x23, 0x26, 0x0e, 0x0c, 0x05, 0x3d, 0x86, 0xcc, 0x30, 0x74,
-	0x89, 0xa4, 0x76, 0x46, 0x93, 0xcb, 0xb3, 0xc8, 0x2f, 0x35, 0x62, 0x8b, 0x05, 0x47, 0x5e, 0x0f,
-	0x1b, 0x3c, 0x7a, 0x06, 0xb9, 0x80, 0xca, 0xd7, 0x8c, 0x1f, 0x0b, 0x3b, 0x5b, 0x5e, 0x58, 0xb7,
-	0x36, 0xbf, 0x9a, 0x29, 0xc6, 0x08, 0x53, 0x93, 0x92, 0x38, 0xfd, 0x01, 0x0d, 0x64, 0xe4, 0xa6,
+	// 2166 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0x1b, 0xc9,
+	0xd1, 0x16, 0x25, 0x8a, 0x1f, 0x35, 0x94, 0x4d, 0xf5, 0xda, 0xde, 0x11, 0x6d, 0x4b, 0x34, 0xd7,
+	0xeb, 0x57, 0xbb, 0x8b, 0x97, 0x42, 0x94, 0xc5, 0xc6, 0x6b, 0x67, 0x93, 0x90, 0x22, 0x57, 0x62,
+	0x6c, 0x4b, 0x44, 0x53, 0x56, 0x62, 0x20, 0x00, 0xd1, 0x9a, 0x69, 0x91, 0x03, 0x0d, 0xa7, 0x27,
+	0xdd, 0x4d, 0x19, 0xbc, 0xe5, 0xb8, 0x50, 0x7e, 0x83, 0x90, 0x43, 0x90, 0x7b, 0xf2, 0x2f, 0x7c,
+	0xcc, 0x31, 0xb9, 0x08, 0x59, 0x1d, 0xf2, 0x07, 0x72, 0xcb, 0x25, 0x41, 0xf7, 0xf4, 0xf0, 0x43,
+	0x1e, 0x59, 0x0e, 0xe2, 0x43, 0x6e, 0xdd, 0x35, 0xcf, 0x53, 0xfd, 0xf5, 0x54, 0x75, 0xf5, 0xc0,
+	0xe7, 0x3d, 0x4f, 0xf6, 0x87, 0x87, 0x55, 0x87, 0x0d, 0x36, 0x5c, 0xe6, 0x1c, 0x53, 0xbe, 0x21,
+	0x5e, 0x13, 0x3e, 0x38, 0xf6, 0xe4, 0x06, 0x09, 0xbd, 0x0d, 0x11, 0x52, 0x47, 0x54, 0x43, 0xce,
+	0x24, 0x43, 0x28, 0x02, 0x54, 0x63, 0x40, 0xf5, 0xe4, 0x07, 0xa5, 0xeb, 0xf8, 0x72, 0x14, 0x52,
+	0xc3, 0x2f, 0xdd, 0xea, 0xb1, 0x1e, 0xd3, 0xcd, 0x0d, 0xd5, 0x32, 0xd6, 0xd5, 0x1e, 0x63, 0x3d,
+	0x9f, 0x6e, 0xe8, 0xde, 0xe1, 0xf0, 0x68, 0xc3, 0x1d, 0x72, 0x22, 0x3d, 0x16, 0x98, 0xef, 0x2b,
+	0x97, 0xbf, 0x93, 0x60, 0x74, 0x15, 0xf5, 0x35, 0x27, 0x61, 0x48, 0xb9, 0x19, 0xb0, 0x72, 0x96,
+	0x86, 0xdc, 0x2e, 0x73, 0x69, 0x27, 0xa4, 0x0e, 0xda, 0x06, 0x8b, 0x04, 0x01, 0x93, 0xda, 0xb7,
+	0xb0, 0x53, 0xe5, 0xd4, 0xba, 0xb5, 0xb9, 0x56, 0x7d, 0x7b, 0x4d, 0xd5, 0xda, 0x04, 0x56, 0x4f,
+	0xbf, 0x39, 0x5f, 0x9b, 0xc3, 0xd3, 0x4c, 0xf4, 0x53, 0x28, 0xb8, 0x54, 0x78, 0x9c, 0xba, 0x5d,
+	0xce, 0x7c, 0x6a, 0xcf, 0x97, 0x53, 0xeb, 0x37, 0x36, 0xef, 0x25, 0x79, 0x52, 0x83, 0x63, 0xe6,
+	0x53, 0x6c, 0x19, 0x86, 0xea, 0xa0, 0x6d, 0x80, 0x01, 0x1d, 0x1c, 0x52, 0x2e, 0xfa, 0x5e, 0x68,
+	0x2f, 0x68, 0xfa, 0xff, 0x5d, 0x45, 0x57, 0x73, 0xaf, 0xbe, 0x18, 0xc3, 0xf1, 0x14, 0x15, 0xbd,
+	0x80, 0x02, 0x39, 0x21, 0x9e, 0x4f, 0x0e, 0x3d, 0xdf, 0x93, 0x23, 0x3b, 0xad, 0x5d, 0x7d, 0xf6,
+	0x4e, 0x57, 0xb5, 0x29, 0x02, 0x9e, 0xa1, 0x57, 0x5c, 0x80, 0xc9, 0x40, 0xe8, 0x11, 0x64, 0xdb,
+	0xcd, 0xdd, 0x46, 0x6b, 0x77, 0xbb, 0x38, 0x57, 0x5a, 0x39, 0x3d, 0x2b, 0xdf, 0x56, 0x3e, 0x26,
+	0x80, 0x36, 0x0d, 0x5c, 0x2f, 0xe8, 0xa1, 0x75, 0xc8, 0xd5, 0xb6, 0xb6, 0x9a, 0xed, 0xfd, 0x66,
+	0xa3, 0x98, 0x2a, 0x95, 0x4e, 0xcf, 0xca, 0x77, 0x66, 0x81, 0x35, 0xc7, 0xa1, 0xa1, 0xa4, 0x6e,
+	0x29, 0xfd, 0xdd, 0xef, 0x57, 0xe7, 0x2a, 0xdf, 0xa5, 0xa0, 0x30, 0x3d, 0x09, 0xf4, 0x08, 0x32,
+	0xb5, 0xad, 0xfd, 0xd6, 0x41, 0xb3, 0x38, 0x37, 0xa1, 0x4f, 0x23, 0x6a, 0x8e, 0xf4, 0x4e, 0x28,
+	0x7a, 0x08, 0x8b, 0xed, 0xda, 0xcb, 0x4e, 0xb3, 0x98, 0x9a, 0x4c, 0x67, 0x1a, 0xd6, 0x26, 0x43,
+	0xa1, 0x51, 0x0d, 0x5c, 0x6b, 0xed, 0x16, 0xe7, 0x93, 0x51, 0x0d, 0x4e, 0xbc, 0xc0, 0x4c, 0xe5,
+	0x77, 0x69, 0xb0, 0x3a, 0x94, 0x9f, 0x78, 0xce, 0x07, 0x96, 0xc8, 0x57, 0x90, 0x96, 0x44, 0x1c,
+	0x6b, 0x69, 0x58, 0xc9, 0xd2, 0xd8, 0x27, 0xe2, 0x58, 0x0d, 0x6a, 0xe8, 0x1a, 0xaf, 0x94, 0xc1,
+	0x69, 0xe8, 0x7b, 0x0e, 0x91, 0xd4, 0xd5, 0xca, 0xb0, 0x36, 0x3f, 0x4d, 0x62, 0xe3, 0x31, 0xca,
+	0xcc, 0x7f, 0x67, 0x0e, 0x4f, 0x51, 0xd1, 0x53, 0xc8, 0xf4, 0x7c, 0x76, 0x48, 0x7c, 0xad, 0x09,
+	0x6b, 0xf3, 0x41, 0x92, 0x93, 0x6d, 0x8d, 0x98, 0x38, 0x30, 0x14, 0xf4, 0x18, 0x32, 0xc3, 0xd0,
+	0x25, 0x92, 0xda, 0x19, 0x4d, 0x2e, 0x27, 0x91, 0x5f, 0x6a, 0xc4, 0x16, 0x0b, 0x8e, 0xbc, 0x1e,
+	0x36, 0x78, 0xf4, 0x0c, 0x72, 0x01, 0x95, 0xaf, 0x19, 0x3f, 0x16, 0x76, 0xb6, 0xbc, 0xb0, 0x6e,
+	0x6d, 0x7e, 0x91, 0x28, 0xc6, 0x08, 0x53, 0x93, 0x92, 0x38, 0xfd, 0x01, 0x0d, 0x64, 0xe4, 0xa6,
 	0x3e, 0x6f, 0xa7, 0xf0, 0xd8, 0x01, 0xfa, 0x31, 0xe4, 0x68, 0xe0, 0x86, 0xcc, 0x0b, 0xa4, 0x9d,
-	0xbb, 0x7e, 0x22, 0x4d, 0x83, 0x51, 0xc1, 0xc4, 0x63, 0x86, 0x62, 0x73, 0xe6, 0xfb, 0x87, 0xc4,
-	0x39, 0xb6, 0xf3, 0xef, 0xb8, 0x8c, 0x31, 0xa3, 0x9e, 0x81, 0xf4, 0x80, 0xb9, 0xb4, 0xb2, 0x01,
-	0xcb, 0x57, 0x42, 0x8d, 0x4a, 0x90, 0x33, 0xa1, 0x8e, 0x34, 0x92, 0xc6, 0xe3, 0x7e, 0xe5, 0x36,
-	0x2c, 0x4d, 0x85, 0xb5, 0xf2, 0xc7, 0x45, 0xc8, 0xc5, 0x7b, 0x8d, 0x6a, 0x90, 0x77, 0x58, 0x20,
-	0x89, 0x17, 0x50, 0x6e, 0xe4, 0x35, 0x73, 0x67, 0xb6, 0x62, 0x90, 0x62, 0xed, 0xcc, 0xe1, 0x09,
-	0x0b, 0x7d, 0x0b, 0x79, 0x4e, 0x05, 0x1b, 0x72, 0x87, 0x0a, 0xa3, 0xaf, 0xf5, 0xd9, 0x0a, 0x89,
-	0x40, 0x98, 0xfe, 0x7a, 0xe8, 0x71, 0xaa, 0xa2, 0x2c, 0xf0, 0x84, 0x8a, 0x9e, 0x42, 0x96, 0x53,
-	0x21, 0x09, 0x97, 0x6f, 0x93, 0x08, 0x8e, 0x20, 0x6d, 0xe6, 0x7b, 0xce, 0x08, 0xc7, 0x0c, 0xf4,
-	0x14, 0xf2, 0xa1, 0x4f, 0x1c, 0xed, 0xd5, 0x5e, 0xd4, 0xf4, 0x4f, 0x66, 0xd1, 0xdb, 0x31, 0x08,
-	0x4f, 0xf0, 0xe8, 0x6b, 0x00, 0x9f, 0xf5, 0xba, 0x2e, 0xf7, 0x4e, 0x28, 0x37, 0x12, 0x2b, 0xcd,
-	0x62, 0x37, 0x34, 0x02, 0xe7, 0x7d, 0xd6, 0x8b, 0x9a, 0x68, 0xfb, 0xbf, 0xd2, 0x57, 0x42, 0x5b,
-	0xcf, 0x00, 0xc8, 0xf8, 0xab, 0x51, 0xd7, 0x17, 0xef, 0xe4, 0xca, 0xec, 0x48, 0x82, 0x8e, 0x3e,
-	0x85, 0xc2, 0x11, 0xe3, 0x0e, 0xed, 0x9a, 0x53, 0x93, 0xd7, 0x9a, 0xb0, 0xb4, 0x2d, 0xd2, 0x17,
-	0xaa, 0x43, 0xb6, 0x47, 0x03, 0xca, 0x3d, 0xc7, 0x06, 0x3d, 0xd8, 0x83, 0x99, 0x07, 0x32, 0x82,
-	0xe0, 0x61, 0x20, 0xbd, 0x01, 0x35, 0x23, 0xc5, 0x44, 0xf4, 0x2b, 0xf8, 0x20, 0xde, 0xbe, 0x2e,
-	0xa7, 0x47, 0x94, 0xd3, 0x40, 0x69, 0xc0, 0xd2, 0x71, 0xf8, 0xfc, 0xed, 0x1a, 0x30, 0x68, 0x93,
+	0xbb, 0x7a, 0x22, 0x4d, 0x83, 0x51, 0x9b, 0x89, 0xc7, 0x0c, 0xc5, 0xe6, 0xcc, 0xf7, 0x0f, 0x89,
+	0x73, 0x6c, 0xe7, 0xdf, 0x73, 0x19, 0x63, 0x46, 0x3d, 0x03, 0xe9, 0x01, 0x73, 0x69, 0x65, 0x03,
+	0x96, 0xdf, 0xda, 0x6a, 0x54, 0x82, 0x9c, 0xd9, 0xea, 0x48, 0x23, 0x69, 0x3c, 0xee, 0x57, 0x6e,
+	0xc2, 0xd2, 0xcc, 0xb6, 0x56, 0xfe, 0xb8, 0x08, 0xb9, 0xf8, 0xac, 0x51, 0x0d, 0xf2, 0x0e, 0x0b,
+	0x24, 0xf1, 0x02, 0xca, 0x8d, 0xbc, 0x12, 0x4f, 0x66, 0x2b, 0x06, 0x29, 0xd6, 0xce, 0x1c, 0x9e,
+	0xb0, 0xd0, 0xb7, 0x90, 0xe7, 0x54, 0xb0, 0x21, 0x77, 0xa8, 0x30, 0xfa, 0x5a, 0x4f, 0x56, 0x48,
+	0x04, 0xc2, 0xf4, 0xd7, 0x43, 0x8f, 0x53, 0xb5, 0xcb, 0x02, 0x4f, 0xa8, 0xe8, 0x29, 0x64, 0x39,
+	0x15, 0x92, 0x70, 0xf9, 0x2e, 0x89, 0xe0, 0x08, 0xd2, 0x66, 0xbe, 0xe7, 0x8c, 0x70, 0xcc, 0x40,
+	0x4f, 0x21, 0x1f, 0xfa, 0xc4, 0xd1, 0x5e, 0xed, 0x45, 0x4d, 0xbf, 0x9f, 0x44, 0x6f, 0xc7, 0x20,
+	0x3c, 0xc1, 0xa3, 0xaf, 0x01, 0x7c, 0xd6, 0xeb, 0xba, 0xdc, 0x3b, 0xa1, 0xdc, 0x48, 0xac, 0x94,
+	0xc4, 0x6e, 0x68, 0x04, 0xce, 0xfb, 0xac, 0x17, 0x35, 0xd1, 0xf6, 0x7f, 0xa5, 0xaf, 0x29, 0x6d,
+	0x3d, 0x03, 0x20, 0xe3, 0xaf, 0x46, 0x5d, 0x9f, 0xbd, 0x97, 0x2b, 0x73, 0x22, 0x53, 0x74, 0xf4,
+	0x00, 0x0a, 0x47, 0x8c, 0x3b, 0xb4, 0x6b, 0xa2, 0x26, 0xaf, 0x35, 0x61, 0x69, 0x5b, 0xa4, 0x2f,
+	0x54, 0x87, 0x6c, 0x8f, 0x06, 0x94, 0x7b, 0x8e, 0x0d, 0x7a, 0xb0, 0x47, 0x89, 0x01, 0x19, 0x41,
+	0xf0, 0x30, 0x90, 0xde, 0x80, 0x9a, 0x91, 0x62, 0x22, 0xfa, 0x15, 0x7c, 0x14, 0x1f, 0x5f, 0x97,
+	0xd3, 0x23, 0xca, 0x69, 0xa0, 0x34, 0x60, 0xe9, 0x7d, 0xf8, 0xf4, 0xdd, 0x1a, 0x30, 0x68, 0x93,
 	0x6c, 0x10, 0xbf, 0xfc, 0x41, 0xd4, 0xf3, 0x90, 0xe5, 0xd1, 0xb8, 0x95, 0xdf, 0xa6, 0x94, 0xea,
-	0x2f, 0x21, 0xd0, 0x06, 0x58, 0xe3, 0xe1, 0x3d, 0x57, 0xab, 0x37, 0x5f, 0xbf, 0x75, 0x71, 0xbe,
+	0x2f, 0x21, 0xd0, 0x06, 0x58, 0xe3, 0xe1, 0x3d, 0x57, 0xab, 0x37, 0x5f, 0xbf, 0x71, 0x71, 0xbe,
 	0x06, 0x31, 0xb6, 0xd5, 0x50, 0x39, 0xc8, 0xb4, 0x5d, 0xd4, 0x84, 0xa5, 0x31, 0x41, 0x95, 0x01,
-	0xe6, 0xa2, 0x2c, 0xbf, 0x6d, 0xa6, 0xfb, 0xa3, 0x90, 0xe2, 0x02, 0x4f, 0xf4, 0x2a, 0xbf, 0x04,
-	0x74, 0x35, 0x2e, 0x08, 0x41, 0xfa, 0xd8, 0x0b, 0xcc, 0x34, 0xb0, 0x6e, 0xa3, 0x2a, 0x64, 0x43,
-	0x32, 0xf2, 0x19, 0x71, 0xcd, 0xc1, 0xb8, 0x53, 0x8d, 0x0a, 0x84, 0x6a, 0x5c, 0x20, 0x54, 0x6b,
-	0xc1, 0x08, 0xc7, 0xa0, 0xca, 0x33, 0xf8, 0x70, 0xe6, 0xf6, 0xa2, 0x4d, 0x28, 0x8c, 0x0f, 0xdc,
-	0x64, 0xad, 0xb7, 0x2f, 0xce, 0xd7, 0xac, 0xf1, 0xc9, 0x6c, 0x35, 0xb0, 0x35, 0x06, 0xb5, 0xdc,
-	0xca, 0x5f, 0x96, 0x60, 0x69, 0xea, 0xd8, 0xa2, 0x3b, 0xb0, 0xe8, 0x0d, 0x48, 0x8f, 0x9a, 0x39,
-	0x46, 0x1d, 0xd4, 0x84, 0x8c, 0x4f, 0x0e, 0xa9, 0xaf, 0x0e, 0xaf, 0xda, 0xb8, 0xff, 0xbf, 0xf1,
-	0xfc, 0x57, 0x9f, 0x6b, 0x7c, 0x33, 0x90, 0x7c, 0x84, 0x0d, 0x19, 0xd9, 0x90, 0x75, 0xd8, 0x60,
-	0x40, 0x02, 0x75, 0x4d, 0x2c, 0xac, 0xe7, 0x71, 0xdc, 0x55, 0x91, 0x21, 0xbc, 0x27, 0xec, 0xb4,
-	0x36, 0xeb, 0x36, 0x2a, 0xc2, 0x02, 0x0d, 0x4e, 0xec, 0x45, 0x6d, 0x52, 0x4d, 0x65, 0x71, 0xbd,
-	0xe8, 0xf4, 0xe5, 0xb1, 0x6a, 0x2a, 0xde, 0x50, 0x50, 0x6e, 0x67, 0xa3, 0x88, 0xaa, 0x36, 0xfa,
-	0x11, 0x64, 0x06, 0x6c, 0x18, 0x48, 0x61, 0xe7, 0xf4, 0x64, 0x57, 0x66, 0x4d, 0xf6, 0x85, 0x42,
-	0x18, 0x65, 0x19, 0x38, 0x6a, 0xc2, 0xb2, 0x90, 0x2c, 0xec, 0xf6, 0x38, 0x71, 0x68, 0x37, 0xa4,
-	0xdc, 0x63, 0xae, 0x49, 0xc3, 0x2b, 0x57, 0x36, 0xa5, 0x61, 0x0a, 0x3e, 0x7c, 0x5b, 0x71, 0xb6,
-	0x15, 0xa5, 0xad, 0x19, 0xa8, 0x0d, 0x85, 0x70, 0xe8, 0xfb, 0x5d, 0x16, 0x46, 0x37, 0x72, 0x74,
-	0x76, 0xde, 0x21, 0x64, 0xed, 0xa1, 0xef, 0xef, 0x45, 0x24, 0x6c, 0x85, 0x93, 0x0e, 0xfa, 0x08,
-	0x32, 0x3d, 0xce, 0x86, 0x61, 0x74, 0x6e, 0xf2, 0xd8, 0xf4, 0xd0, 0x37, 0x90, 0x15, 0xd4, 0xe1,
-	0x54, 0x0a, 0xbb, 0xa0, 0x97, 0xfa, 0xd9, 0xac, 0x41, 0x3a, 0x1a, 0x32, 0x3e, 0x13, 0x38, 0xe6,
-	0xa0, 0x15, 0x58, 0x90, 0x72, 0x64, 0x2f, 0x95, 0x53, 0xeb, 0xb9, 0x7a, 0xf6, 0xe2, 0x7c, 0x6d,
-	0x61, 0x7f, 0xff, 0x15, 0x56, 0x36, 0x75, 0x5b, 0xf4, 0x99, 0x90, 0x01, 0x19, 0x50, 0xfb, 0x96,
-	0x8e, 0xed, 0xb8, 0x8f, 0x5e, 0x01, 0xb8, 0x81, 0xe8, 0x3a, 0x3a, 0x3d, 0xd9, 0xb7, 0xf5, 0xea,
-	0xbe, 0xba, 0x79, 0x75, 0x8d, 0xdd, 0x8e, 0xb9, 0x31, 0x97, 0x2e, 0xce, 0xd7, 0xf2, 0xe3, 0x2e,
-	0xce, 0xbb, 0x81, 0x88, 0x9a, 0xa8, 0x0e, 0x56, 0x9f, 0x12, 0x5f, 0xf6, 0x9d, 0x3e, 0x75, 0x8e,
-	0xed, 0xe2, 0xf5, 0x57, 0xe0, 0x8e, 0x86, 0x19, 0x0f, 0x49, 0x92, 0x52, 0xb0, 0x9a, 0xaa, 0xb0,
-	0x97, 0x75, 0xac, 0xa2, 0x0e, 0xfa, 0x04, 0x80, 0x85, 0x34, 0xe8, 0x0a, 0xe9, 0x7a, 0x81, 0x8d,
-	0xd4, 0x92, 0x71, 0x5e, 0x59, 0x3a, 0xca, 0x80, 0xee, 0xaa, 0x0b, 0x8a, 0xb8, 0x5d, 0x16, 0xf8,
-	0x23, 0xfb, 0x03, 0xfd, 0x35, 0xa7, 0x0c, 0x7b, 0x81, 0x3f, 0x42, 0x6b, 0x60, 0x69, 0x5d, 0x08,
-	0xaf, 0x17, 0x10, 0xdf, 0xbe, 0xa3, 0xe3, 0x01, 0xca, 0xd4, 0xd1, 0x16, 0xb5, 0x0f, 0x51, 0x34,
-	0x84, 0xfd, 0xe1, 0xf5, 0xfb, 0x60, 0x26, 0x3b, 0xd9, 0x07, 0xc3, 0x41, 0x3f, 0x01, 0x08, 0xb9,
-	0x77, 0xe2, 0xf9, 0xb4, 0x47, 0x85, 0xfd, 0x91, 0x5e, 0xf4, 0xea, 0xcc, 0x9b, 0x69, 0x8c, 0xc2,
-	0x09, 0x06, 0xaa, 0x42, 0xda, 0x0b, 0x3c, 0x69, 0x7f, 0x6c, 0x6e, 0xa5, 0xcb, 0x52, 0xad, 0x33,
-	0xe6, 0x1f, 0x10, 0x7f, 0x48, 0xb1, 0xc6, 0xa1, 0x16, 0xe4, 0x3d, 0xc1, 0x7c, 0x2d, 0x5f, 0xdb,
-	0xd6, 0xf9, 0xed, 0x1d, 0xf6, 0xaf, 0x15, 0x53, 0xf0, 0x84, 0x8d, 0xee, 0x41, 0x3e, 0xf4, 0x5c,
-	0xf1, 0xdc, 0x1b, 0x78, 0xd2, 0x5e, 0x29, 0xa7, 0xd6, 0x17, 0xf0, 0xc4, 0x80, 0x76, 0x20, 0x2b,
-	0x46, 0xc2, 0x91, 0xbe, 0xb0, 0x4b, 0x3a, 0x2e, 0xd5, 0x9b, 0x87, 0xe9, 0x44, 0x84, 0x28, 0x71,
-	0xc4, 0x74, 0xb5, 0x05, 0x03, 0x3a, 0x60, 0x7c, 0xd4, 0x15, 0xaf, 0x49, 0x68, 0xdf, 0xd5, 0x23,
-	0x41, 0x64, 0xea, 0xbc, 0x26, 0x21, 0xda, 0x81, 0xe5, 0x04, 0x20, 0xf4, 0x02, 0x2a, 0x84, 0x7d,
-	0x4f, 0x07, 0xe4, 0xee, 0x95, 0x80, 0xb4, 0x02, 0xf9, 0xe8, 0x61, 0x14, 0x91, 0xe2, 0xc4, 0x47,
-	0x44, 0x2a, 0x7d, 0x0d, 0x56, 0x22, 0x77, 0xa9, 0x9c, 0x73, 0x4c, 0x47, 0x26, 0x1d, 0xaa, 0xa6,
-	0x12, 0xd8, 0x89, 0xe2, 0xea, 0x7c, 0x9d, 0xc7, 0x51, 0xe7, 0xc9, 0xfc, 0xe3, 0x54, 0x69, 0x13,
-	0xac, 0xc4, 0x19, 0x46, 0x9f, 0xa9, 0xbb, 0xa4, 0xe7, 0x09, 0xc9, 0x47, 0x5d, 0x32, 0x94, 0x7d,
-	0xfb, 0x67, 0x9a, 0x50, 0x88, 0x8d, 0xb5, 0xa1, 0xec, 0x97, 0xba, 0x30, 0x39, 0x0a, 0xa8, 0x0c,
-	0x96, 0x3a, 0x62, 0x82, 0xf2, 0x13, 0xca, 0x55, 0x9d, 0xa6, 0x14, 0x9c, 0x34, 0xa9, 0x54, 0x20,
-	0x28, 0xe1, 0x4e, 0x5f, 0x67, 0xe2, 0x3c, 0x36, 0x3d, 0x95, 0x5a, 0xe3, 0x7c, 0x63, 0x52, 0xab,
-	0xe9, 0x96, 0x9e, 0x40, 0x21, 0x19, 0xd3, 0xff, 0x64, 0x41, 0x95, 0x3f, 0xa5, 0x20, 0x3f, 0xde,
-	0x77, 0xf4, 0x10, 0x96, 0x5b, 0x9d, 0xbd, 0xe7, 0xb5, 0xfd, 0xd6, 0xde, 0x6e, 0xb7, 0xd1, 0xfc,
-	0xb6, 0xf6, 0xf2, 0xf9, 0x7e, 0x71, 0xae, 0xf4, 0xc9, 0xe9, 0x59, 0x79, 0x65, 0x72, 0xc5, 0xc4,
-	0xf0, 0x06, 0x3d, 0x22, 0x43, 0x5f, 0x4e, 0xb3, 0xda, 0x78, 0x6f, 0xab, 0xd9, 0xe9, 0x14, 0x53,
-	0xd7, 0xb1, 0xda, 0x9c, 0x39, 0x54, 0x08, 0xb4, 0x09, 0xc5, 0x09, 0x6b, 0xe7, 0x55, 0xbb, 0x89,
-	0x0f, 0x8a, 0xf3, 0xa5, 0x7b, 0xa7, 0x67, 0x65, 0xfb, 0x2a, 0x69, 0x67, 0x14, 0x52, 0x7e, 0x60,
-	0xde, 0x47, 0xff, 0x48, 0x41, 0x21, 0x59, 0x5e, 0xa3, 0xad, 0xa8, 0x2c, 0xd6, 0x2b, 0xbe, 0xb5,
-	0xb9, 0x71, 0x53, 0x39, 0xae, 0xaf, 0x75, 0x7f, 0xa8, 0xfc, 0xbe, 0x50, 0x2f, 0x61, 0x4d, 0x46,
-	0x0f, 0x61, 0x31, 0x64, 0x5c, 0xc6, 0x17, 0xe0, 0xec, 0xe3, 0xc9, 0x78, 0x5c, 0xb4, 0x45, 0xe0,
-	0x4a, 0x1f, 0x6e, 0x4d, 0x7b, 0x43, 0xf7, 0x61, 0xe1, 0xa0, 0xd5, 0x2e, 0xce, 0x95, 0xee, 0x9e,
-	0x9e, 0x95, 0x3f, 0x9e, 0xfe, 0x78, 0xe0, 0x71, 0x39, 0x24, 0x7e, 0xab, 0x8d, 0xbe, 0x84, 0xc5,
-	0xc6, 0x6e, 0x07, 0xe3, 0x62, 0xaa, 0xb4, 0x76, 0x7a, 0x56, 0xbe, 0x3b, 0x8d, 0x53, 0x9f, 0xd8,
-	0x30, 0x70, 0x31, 0x3b, 0x1c, 0xbf, 0x0a, 0xff, 0x39, 0x0f, 0x96, 0xa9, 0x0b, 0xde, 0xf7, 0x8f,
-	0x83, 0xa5, 0xa8, 0xe8, 0x8d, 0x13, 0xfe, 0xfc, 0x8d, 0xb5, 0x6f, 0x21, 0x22, 0x18, 0x4d, 0x7f,
-	0x0a, 0x05, 0x2f, 0x3c, 0x79, 0xd4, 0xa5, 0x01, 0x39, 0xf4, 0xcd, 0x03, 0x31, 0x87, 0x2d, 0x65,
-	0x6b, 0x46, 0x26, 0x75, 0xdb, 0x78, 0x81, 0xa4, 0x3c, 0x30, 0x4f, 0xbf, 0x1c, 0x1e, 0xf7, 0xd1,
-	0x37, 0x90, 0xf6, 0x42, 0x32, 0x30, 0x05, 0xfb, 0xcc, 0x15, 0xb4, 0xda, 0xb5, 0x17, 0xe6, 0xcc,
-	0xd5, 0x73, 0x17, 0xe7, 0x6b, 0x69, 0x65, 0xc0, 0x9a, 0x86, 0x56, 0xe3, 0x9a, 0x59, 0x8d, 0xa4,
-	0x2b, 0x87, 0x1c, 0x4e, 0x58, 0xd4, 0xb9, 0xf1, 0x82, 0x1e, 0x57, 0xd9, 0x22, 0xab, 0x3f, 0xc6,
-	0x5d, 0x54, 0x82, 0xac, 0xa9, 0xbc, 0x75, 0xa9, 0x9d, 0x57, 0x55, 0xad, 0x31, 0xd4, 0x97, 0xc0,
-	0x8a, 0xa2, 0xd1, 0x3d, 0xe2, 0x6c, 0x50, 0xf9, 0x57, 0x1a, 0xac, 0x2d, 0x7f, 0x28, 0xa4, 0x29,
-	0xa2, 0xde, 0x5b, 0xf0, 0x5f, 0xc1, 0x32, 0xd1, 0x3f, 0x22, 0x48, 0xa0, 0x2a, 0x12, 0xfd, 0xa0,
-	0x31, 0x1b, 0x70, 0x7f, 0xa6, 0xbb, 0x31, 0x38, 0x7a, 0xfc, 0xd4, 0x33, 0xca, 0xa7, 0x9d, 0xc2,
-	0x45, 0x72, 0xe9, 0x0b, 0xea, 0xc0, 0x12, 0xe3, 0x4e, 0x9f, 0x0a, 0x19, 0xd5, 0x31, 0xe6, 0xe1,
-	0x3e, 0xf3, 0x97, 0xce, 0x5e, 0x12, 0x68, 0x2e, 0xf1, 0x68, 0xb6, 0xd3, 0x3e, 0xd0, 0x63, 0x48,
-	0x73, 0x72, 0x14, 0x3f, 0xce, 0x66, 0x1e, 0x12, 0x4c, 0x8e, 0xe4, 0x94, 0x0b, 0xcd, 0x40, 0x3f,
-	0x07, 0x70, 0x3d, 0x11, 0x12, 0xe9, 0xf4, 0x29, 0x37, 0x9b, 0x3d, 0x73, 0x89, 0x8d, 0x31, 0x6a,
-	0xca, 0x4b, 0x82, 0x8d, 0x9e, 0x41, 0xde, 0x21, 0xb1, 0x5c, 0x33, 0xd7, 0xff, 0xcd, 0xd8, 0xaa,
-	0x19, 0x17, 0x45, 0xe5, 0xe2, 0xe2, 0x7c, 0x2d, 0x17, 0x5b, 0x70, 0xce, 0x21, 0x46, 0xbe, 0xcf,
-	0x60, 0x49, 0x12, 0x71, 0xdc, 0x75, 0xa3, 0x74, 0x16, 0xc9, 0xe4, 0x9a, 0xa2, 0x44, 0x3d, 0x99,
-	0x4d, 0xda, 0x8b, 0xb7, 0xb3, 0x20, 0x13, 0x36, 0xf4, 0x0b, 0x58, 0xa6, 0x81, 0xc3, 0x47, 0x5a,
-	0xac, 0xf1, 0x0c, 0x73, 0xd7, 0x2f, 0xb6, 0x39, 0x06, 0x4f, 0x2d, 0xb6, 0x48, 0x2f, 0xd9, 0x2b,
-	0x7f, 0x4b, 0x01, 0x44, 0x75, 0xde, 0xfb, 0x15, 0x20, 0x82, 0xb4, 0x4b, 0x24, 0xd1, 0x9a, 0x2b,
-	0x60, 0xdd, 0x46, 0x4f, 0x00, 0x24, 0x1d, 0x84, 0x2a, 0xf5, 0x06, 0x3d, 0x23, 0x9b, 0xb7, 0xa5,
-	0x83, 0x04, 0x1a, 0x6d, 0x42, 0xc6, 0x3c, 0xa1, 0xd3, 0x37, 0xf2, 0x0c, 0xb2, 0xf2, 0x87, 0x14,
-	0x40, 0xb4, 0xcc, 0xff, 0xe9, 0xb5, 0xd5, 0xed, 0x37, 0xdf, 0xaf, 0xce, 0xfd, 0xf5, 0xfb, 0xd5,
-	0xb9, 0xdf, 0x5c, 0xac, 0xa6, 0xde, 0x5c, 0xac, 0xa6, 0xfe, 0x7c, 0xb1, 0x9a, 0xfa, 0xfb, 0xc5,
-	0x6a, 0xea, 0x30, 0xa3, 0x2b, 0x8f, 0x1f, 0xfe, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x67, 0x32, 0x8c,
-	0x8f, 0xb8, 0x16, 0x00, 0x00,
+	0xe6, 0xa2, 0x2c, 0xbf, 0x6b, 0xa6, 0xfb, 0xa3, 0x90, 0xe2, 0x02, 0x9f, 0xea, 0x55, 0x7e, 0x09,
+	0xe8, 0xed, 0x7d, 0x41, 0x08, 0xd2, 0xc7, 0x5e, 0x60, 0xa6, 0x81, 0x75, 0x1b, 0x55, 0x21, 0x1b,
+	0x92, 0x91, 0xcf, 0x88, 0x6b, 0x02, 0xe3, 0x56, 0x35, 0x2a, 0x10, 0xaa, 0x71, 0x81, 0x50, 0xad,
+	0x05, 0x23, 0x1c, 0x83, 0x2a, 0xcf, 0xe0, 0x76, 0xe2, 0xf1, 0xa2, 0x4d, 0x28, 0x8c, 0x03, 0x6e,
+	0xb2, 0xd6, 0x9b, 0x17, 0xe7, 0x6b, 0xd6, 0x38, 0x32, 0x5b, 0x0d, 0x6c, 0x8d, 0x41, 0x2d, 0xb7,
+	0xf2, 0xf7, 0x02, 0x2c, 0xcd, 0x84, 0x2d, 0xba, 0x05, 0x8b, 0xde, 0x80, 0xf4, 0xa8, 0x99, 0x63,
+	0xd4, 0x41, 0x4d, 0xc8, 0xf8, 0xe4, 0x90, 0xfa, 0x2a, 0x78, 0xd5, 0xc1, 0xfd, 0xff, 0xb5, 0xf1,
+	0x5f, 0x7d, 0xae, 0xf1, 0xcd, 0x40, 0xf2, 0x11, 0x36, 0x64, 0x64, 0x43, 0xd6, 0x61, 0x83, 0x01,
+	0x09, 0xd4, 0x35, 0xb1, 0xb0, 0x9e, 0xc7, 0x71, 0x57, 0xed, 0x0c, 0xe1, 0x3d, 0x61, 0xa7, 0xb5,
+	0x59, 0xb7, 0x51, 0x11, 0x16, 0x68, 0x70, 0x62, 0x2f, 0x6a, 0x93, 0x6a, 0x2a, 0x8b, 0xeb, 0x45,
+	0xd1, 0x97, 0xc7, 0xaa, 0xa9, 0x78, 0x43, 0x41, 0xb9, 0x9d, 0x8d, 0x76, 0x54, 0xb5, 0xd1, 0x8f,
+	0x20, 0x33, 0x60, 0xc3, 0x40, 0x0a, 0x3b, 0xa7, 0x27, 0xbb, 0x92, 0x34, 0xd9, 0x17, 0x0a, 0x61,
+	0x94, 0x65, 0xe0, 0xa8, 0x09, 0xcb, 0x42, 0xb2, 0xb0, 0xdb, 0xe3, 0xc4, 0xa1, 0xdd, 0x90, 0x72,
+	0x8f, 0xb9, 0x26, 0x0d, 0xaf, 0xbc, 0x75, 0x28, 0x0d, 0x53, 0xf0, 0xe1, 0x9b, 0x8a, 0xb3, 0xad,
+	0x28, 0x6d, 0xcd, 0x40, 0x6d, 0x28, 0x84, 0x43, 0xdf, 0xef, 0xb2, 0x30, 0xba, 0x91, 0xa3, 0xd8,
+	0x79, 0x8f, 0x2d, 0x6b, 0x0f, 0x7d, 0x7f, 0x2f, 0x22, 0x61, 0x2b, 0x9c, 0x74, 0xd0, 0x1d, 0xc8,
+	0xf4, 0x38, 0x1b, 0x86, 0x51, 0xdc, 0xe4, 0xb1, 0xe9, 0xa1, 0x6f, 0x20, 0x2b, 0xa8, 0xc3, 0xa9,
+	0x14, 0x76, 0x41, 0x2f, 0xf5, 0x93, 0xa4, 0x41, 0x3a, 0x1a, 0x32, 0x8e, 0x09, 0x1c, 0x73, 0xd0,
+	0x0a, 0x2c, 0x48, 0x39, 0xb2, 0x97, 0xca, 0xa9, 0xf5, 0x5c, 0x3d, 0x7b, 0x71, 0xbe, 0xb6, 0xb0,
+	0xbf, 0xff, 0x0a, 0x2b, 0x9b, 0xba, 0x2d, 0xfa, 0x4c, 0xc8, 0x80, 0x0c, 0xa8, 0x7d, 0x43, 0xef,
+	0xed, 0xb8, 0x8f, 0x5e, 0x01, 0xb8, 0x81, 0xe8, 0x3a, 0x3a, 0x3d, 0xd9, 0x37, 0xf5, 0xea, 0xbe,
+	0xb8, 0x7e, 0x75, 0x8d, 0xdd, 0x8e, 0xb9, 0x31, 0x97, 0x2e, 0xce, 0xd7, 0xf2, 0xe3, 0x2e, 0xce,
+	0xbb, 0x81, 0x88, 0x9a, 0xa8, 0x0e, 0x56, 0x9f, 0x12, 0x5f, 0xf6, 0x9d, 0x3e, 0x75, 0x8e, 0xed,
+	0xe2, 0xd5, 0x57, 0xe0, 0x8e, 0x86, 0x19, 0x0f, 0xd3, 0x24, 0xa5, 0x60, 0x35, 0x55, 0x61, 0x2f,
+	0xeb, 0xbd, 0x8a, 0x3a, 0xe8, 0x3e, 0x00, 0x0b, 0x69, 0xd0, 0x15, 0xd2, 0xf5, 0x02, 0x1b, 0xa9,
+	0x25, 0xe3, 0xbc, 0xb2, 0x74, 0x94, 0x01, 0xdd, 0x55, 0x17, 0x14, 0x71, 0xbb, 0x2c, 0xf0, 0x47,
+	0xf6, 0x47, 0xfa, 0x6b, 0x4e, 0x19, 0xf6, 0x02, 0x7f, 0x84, 0xd6, 0xc0, 0xd2, 0xba, 0x10, 0x5e,
+	0x2f, 0x20, 0xbe, 0x7d, 0x4b, 0xef, 0x07, 0x28, 0x53, 0x47, 0x5b, 0xd4, 0x39, 0x44, 0xbb, 0x21,
+	0xec, 0xdb, 0x57, 0x9f, 0x83, 0x99, 0xec, 0xe4, 0x1c, 0x0c, 0x07, 0xfd, 0x04, 0x20, 0xe4, 0xde,
+	0x89, 0xe7, 0xd3, 0x1e, 0x15, 0xf6, 0x1d, 0xbd, 0xe8, 0xd5, 0xc4, 0x9b, 0x69, 0x8c, 0xc2, 0x53,
+	0x0c, 0x54, 0x85, 0xb4, 0x17, 0x78, 0xd2, 0xfe, 0xd8, 0xdc, 0x4a, 0x97, 0xa5, 0x5a, 0x67, 0xcc,
+	0x3f, 0x20, 0xfe, 0x90, 0x62, 0x8d, 0x43, 0x2d, 0xc8, 0x7b, 0x82, 0xf9, 0x5a, 0xbe, 0xb6, 0xad,
+	0xf3, 0xdb, 0x7b, 0x9c, 0x5f, 0x2b, 0xa6, 0xe0, 0x09, 0x1b, 0xdd, 0x83, 0x7c, 0xe8, 0xb9, 0xe2,
+	0xb9, 0x37, 0xf0, 0xa4, 0xbd, 0x52, 0x4e, 0xad, 0x2f, 0xe0, 0x89, 0x01, 0xed, 0x40, 0x56, 0x8c,
+	0x84, 0x23, 0x7d, 0x61, 0x97, 0xf4, 0xbe, 0x54, 0xaf, 0x1f, 0xa6, 0x13, 0x11, 0xa2, 0xc4, 0x11,
+	0xd3, 0x4b, 0x5f, 0x83, 0x35, 0x95, 0x50, 0x54, 0x22, 0x38, 0xa6, 0x23, 0x93, 0xa3, 0x54, 0x53,
+	0x9d, 0xfa, 0x89, 0x5a, 0xa2, 0x4e, 0xa2, 0x79, 0x1c, 0x75, 0x9e, 0xcc, 0x3f, 0x4e, 0x95, 0x36,
+	0xc1, 0x9a, 0x0a, 0x2c, 0xf4, 0x89, 0x4a, 0xf0, 0x3d, 0x4f, 0x48, 0x3e, 0xea, 0x92, 0xa1, 0xec,
+	0xdb, 0x3f, 0xd3, 0x84, 0x42, 0x6c, 0xac, 0x0d, 0x65, 0xbf, 0xd4, 0x85, 0x89, 0x3e, 0x51, 0x19,
+	0x2c, 0xa5, 0x7b, 0x41, 0xf9, 0x09, 0xe5, 0xaa, 0x78, 0x52, 0xb2, 0x9a, 0x36, 0xa9, 0xf8, 0x14,
+	0x94, 0x70, 0xa7, 0xaf, 0xd3, 0x63, 0x1e, 0x9b, 0x9e, 0xca, 0x77, 0x71, 0x12, 0x30, 0xf9, 0xce,
+	0x74, 0x4b, 0x4f, 0xa0, 0x30, 0xbd, 0xd0, 0xff, 0x64, 0x41, 0x95, 0x3f, 0xa5, 0x20, 0x3f, 0x3e,
+	0x0c, 0xf4, 0x25, 0x2c, 0xb7, 0x3a, 0x7b, 0xcf, 0x6b, 0xfb, 0xad, 0xbd, 0xdd, 0x6e, 0xa3, 0xf9,
+	0x6d, 0xed, 0xe5, 0xf3, 0xfd, 0xe2, 0x5c, 0xe9, 0xfe, 0xe9, 0x59, 0x79, 0x65, 0x92, 0xf7, 0x63,
+	0x78, 0x83, 0x1e, 0x91, 0xa1, 0x2f, 0x67, 0x59, 0x6d, 0xbc, 0xb7, 0xd5, 0xec, 0x74, 0x8a, 0xa9,
+	0xab, 0x58, 0x6d, 0xce, 0x1c, 0x2a, 0x04, 0xda, 0x84, 0xe2, 0x84, 0xb5, 0xf3, 0xaa, 0xdd, 0xc4,
+	0x07, 0xc5, 0xf9, 0xd2, 0xbd, 0xd3, 0xb3, 0xb2, 0xfd, 0x36, 0x69, 0x67, 0x14, 0x52, 0x7e, 0x60,
+	0x1e, 0x2d, 0xff, 0x48, 0x41, 0x61, 0xba, 0xe6, 0x45, 0x5b, 0x51, 0xad, 0xaa, 0x57, 0x7c, 0x63,
+	0x73, 0xe3, 0xba, 0x1a, 0x59, 0xdf, 0xb5, 0xfe, 0x50, 0xf9, 0x7d, 0xa1, 0x9e, 0xa7, 0x9a, 0x8c,
+	0xbe, 0x84, 0xc5, 0x90, 0x71, 0x19, 0xdf, 0x4a, 0xc9, 0x31, 0xc3, 0x78, 0x5c, 0x49, 0x45, 0xe0,
+	0x4a, 0x1f, 0x6e, 0xcc, 0x7a, 0x43, 0x0f, 0x61, 0xe1, 0xa0, 0xd5, 0x2e, 0xce, 0x95, 0xee, 0x9e,
+	0x9e, 0x95, 0x3f, 0x9e, 0xfd, 0x78, 0xe0, 0x71, 0x39, 0x24, 0x7e, 0xab, 0x8d, 0x3e, 0x87, 0xc5,
+	0xc6, 0x6e, 0x07, 0xe3, 0x62, 0xaa, 0xb4, 0x76, 0x7a, 0x56, 0xbe, 0x3b, 0x8b, 0x53, 0x9f, 0xd8,
+	0x30, 0x70, 0x31, 0x3b, 0x1c, 0x3f, 0xd5, 0xfe, 0x39, 0x0f, 0x96, 0xb9, 0xac, 0x3f, 0xf4, 0x6b,
+	0x7e, 0x29, 0xaa, 0x44, 0xe3, 0x2c, 0x3c, 0x7f, 0x6d, 0x41, 0x5a, 0x88, 0x08, 0x46, 0xd3, 0x0f,
+	0xa0, 0xe0, 0x85, 0x27, 0x5f, 0x75, 0x69, 0x40, 0x0e, 0x7d, 0xf3, 0x6a, 0xcb, 0x61, 0x4b, 0xd9,
+	0x9a, 0x91, 0x49, 0x5d, 0x01, 0x5e, 0x20, 0x29, 0x0f, 0xcc, 0x7b, 0x2c, 0x87, 0xc7, 0x7d, 0xf4,
+	0x0d, 0xa4, 0xbd, 0x90, 0x0c, 0x4c, 0x15, 0x9d, 0xb8, 0x82, 0x56, 0xbb, 0xf6, 0xc2, 0xc4, 0x5c,
+	0x3d, 0x77, 0x71, 0xbe, 0x96, 0x56, 0x06, 0xac, 0x69, 0x68, 0x35, 0x2e, 0x64, 0xd5, 0x48, 0xfa,
+	0x3a, 0xcf, 0xe1, 0x29, 0x8b, 0x8a, 0x1b, 0x2f, 0xe8, 0x71, 0x2a, 0x84, 0xbe, 0xd8, 0x73, 0x38,
+	0xee, 0xa2, 0x12, 0x64, 0x4d, 0x39, 0xac, 0xeb, 0xdf, 0xbc, 0x2a, 0x35, 0x8d, 0xa1, 0xbe, 0x04,
+	0x56, 0xb4, 0x1b, 0xdd, 0x23, 0xce, 0x06, 0x95, 0x7f, 0xa5, 0xc1, 0xda, 0xf2, 0x87, 0x42, 0x9a,
+	0xca, 0xe6, 0x83, 0x6d, 0xfe, 0x2b, 0x58, 0x26, 0xfa, 0xef, 0x00, 0x09, 0x54, 0x99, 0xa0, 0x5f,
+	0x19, 0xe6, 0x00, 0x1e, 0x26, 0xba, 0x1b, 0x83, 0xa3, 0x17, 0x49, 0x3d, 0xa3, 0x7c, 0xda, 0x29,
+	0x5c, 0x24, 0x97, 0xbe, 0xa0, 0x0e, 0x2c, 0x31, 0xee, 0xf4, 0xa9, 0x90, 0x51, 0x71, 0x61, 0x5e,
+	0xd3, 0x89, 0xff, 0x59, 0xf6, 0xa6, 0x81, 0xe6, 0x66, 0x8d, 0x66, 0x3b, 0xeb, 0x03, 0x3d, 0x86,
+	0x34, 0x27, 0x47, 0xf1, 0x8b, 0x29, 0x31, 0x48, 0x30, 0x39, 0x92, 0x33, 0x2e, 0x34, 0x03, 0xfd,
+	0x1c, 0xc0, 0xf5, 0x44, 0x48, 0xa4, 0xd3, 0xa7, 0xdc, 0x1c, 0x76, 0xe2, 0x12, 0x1b, 0x63, 0xd4,
+	0x8c, 0x97, 0x29, 0x36, 0x7a, 0x06, 0x79, 0x87, 0xc4, 0x72, 0xcd, 0x5c, 0xfd, 0x8b, 0x61, 0xab,
+	0x66, 0x5c, 0x14, 0x95, 0x8b, 0x8b, 0xf3, 0xb5, 0x5c, 0x6c, 0xc1, 0x39, 0x87, 0x18, 0xf9, 0x3e,
+	0x83, 0x25, 0x49, 0xc4, 0x71, 0xd7, 0x8d, 0xd2, 0x59, 0x24, 0x93, 0x2b, 0x2a, 0x05, 0xf5, 0x8e,
+	0x35, 0x69, 0x2f, 0x3e, 0xce, 0x82, 0x9c, 0xb2, 0xa1, 0x5f, 0xc0, 0x32, 0x0d, 0x1c, 0x3e, 0xd2,
+	0x62, 0x8d, 0x67, 0x98, 0xbb, 0x7a, 0xb1, 0xcd, 0x31, 0x78, 0x66, 0xb1, 0x45, 0x7a, 0xc9, 0x5e,
+	0xf9, 0x6b, 0x0a, 0x20, 0x2a, 0xbe, 0x3e, 0xac, 0x00, 0x11, 0xa4, 0x5d, 0x22, 0x89, 0xd6, 0x5c,
+	0x01, 0xeb, 0x36, 0x7a, 0x02, 0x20, 0xe9, 0x20, 0x54, 0xa9, 0x37, 0xe8, 0x19, 0xd9, 0xbc, 0x2b,
+	0x1d, 0x4c, 0xa1, 0xd1, 0x26, 0x64, 0xcc, 0xbb, 0x36, 0x7d, 0x2d, 0xcf, 0x20, 0x2b, 0x7f, 0x48,
+	0x01, 0x44, 0xcb, 0xfc, 0x9f, 0x5e, 0x5b, 0xdd, 0x7e, 0xf3, 0xfd, 0xea, 0xdc, 0x5f, 0xbe, 0x5f,
+	0x9d, 0xfb, 0xcd, 0xc5, 0x6a, 0xea, 0xcd, 0xc5, 0x6a, 0xea, 0xcf, 0x17, 0xab, 0xa9, 0xbf, 0x5d,
+	0xac, 0xa6, 0x0e, 0x33, 0xba, 0x3e, 0xfa, 0xe1, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x32, 0x89,
+	0x54, 0x8a, 0x4d, 0x16, 0x00, 0x00,
 }

+ 0 - 8
vendor/github.com/docker/swarmkit/api/specs.proto

@@ -333,14 +333,6 @@ message ContainerSpec {
 	//
 	// https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime
 	map<string, string> sysctls = 26;
-
-	// Swap limit equal to memory plus swap: '-1' to enable unlimited swap
-	int64 memory_swap = 27;
-
-	// Tune container memory swappiness (0 to 100) - if not specified, defaults
-	// to the container OS's default - generally 60, or the value predefined in
-	// the image; set to -1 to unset a previously set value
-	google.protobuf.Int64Value memory_swappiness = 28;
 }
 
 // EndpointSpec defines the properties that can be configured to

+ 528 - 411
vendor/github.com/docker/swarmkit/api/types.pb.go

@@ -8,6 +8,7 @@ import fmt "fmt"
 import math "math"
 import google_protobuf "github.com/gogo/protobuf/types"
 import google_protobuf1 "github.com/gogo/protobuf/types"
+import google_protobuf2 "github.com/gogo/protobuf/types"
 import _ "github.com/gogo/protobuf/gogoproto"
 
 import os "os"
@@ -804,6 +805,15 @@ func (*Resources) Descriptor() ([]byte, []int) { return fileDescriptorTypes, []i
 type ResourceRequirements struct {
 	Limits       *Resources `protobuf:"bytes,1,opt,name=limits" json:"limits,omitempty"`
 	Reservations *Resources `protobuf:"bytes,2,opt,name=reservations" json:"reservations,omitempty"`
+	// Amount of swap in bytes - can only be used together with a memory limit
+	// -1 means unlimited
+	// a null pointer indicates that the default behaviour of granting twice
+	// the memory is maintained
+	SwapBytes *google_protobuf2.Int64Value `protobuf:"bytes,3,opt,name=swap_bytes,json=swapBytes" json:"swap_bytes,omitempty"`
+	// Tune container memory swappiness (0 to 100) - if not specified, defaults
+	// to the container OS's default - generally 60, or the value predefined in
+	// the image; set to -1 to unset a previously set value
+	MemorySwappiness *google_protobuf2.Int64Value `protobuf:"bytes,4,opt,name=memory_swappiness,json=memorySwappiness" json:"memory_swappiness,omitempty"`
 }
 
 func (m *ResourceRequirements) Reset()                    { *m = ResourceRequirements{} }
@@ -2445,6 +2455,14 @@ func (m *ResourceRequirements) CopyFrom(src interface{}) {
 		m.Reservations = &Resources{}
 		deepcopy.Copy(m.Reservations, o.Reservations)
 	}
+	if o.SwapBytes != nil {
+		m.SwapBytes = &google_protobuf2.Int64Value{}
+		deepcopy.Copy(m.SwapBytes, o.SwapBytes)
+	}
+	if o.MemorySwappiness != nil {
+		m.MemorySwappiness = &google_protobuf2.Int64Value{}
+		deepcopy.Copy(m.MemorySwappiness, o.MemorySwappiness)
+	}
 }
 
 func (m *Platform) Copy() *Platform {
@@ -3934,6 +3952,26 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) {
 		}
 		i += n5
 	}
+	if m.SwapBytes != nil {
+		dAtA[i] = 0x1a
+		i++
+		i = encodeVarintTypes(dAtA, i, uint64(m.SwapBytes.Size()))
+		n6, err := m.SwapBytes.MarshalTo(dAtA[i:])
+		if err != nil {
+			return 0, err
+		}
+		i += n6
+	}
+	if m.MemorySwappiness != nil {
+		dAtA[i] = 0x22
+		i++
+		i = encodeVarintTypes(dAtA, i, uint64(m.MemorySwappiness.Size()))
+		n7, err := m.MemorySwappiness.MarshalTo(dAtA[i:])
+		if err != nil {
+			return 0, err
+		}
+		i += n7
+	}
 	return i, nil
 }
 
@@ -4075,41 +4113,41 @@ func (m *NodeDescription) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x12
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Platform.Size()))
-		n6, err := m.Platform.MarshalTo(dAtA[i:])
+		n8, err := m.Platform.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n6
+		i += n8
 	}
 	if m.Resources != nil {
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Resources.Size()))
-		n7, err := m.Resources.MarshalTo(dAtA[i:])
+		n9, err := m.Resources.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n7
+		i += n9
 	}
 	if m.Engine != nil {
 		dAtA[i] = 0x22
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Engine.Size()))
-		n8, err := m.Engine.MarshalTo(dAtA[i:])
+		n10, err := m.Engine.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n8
+		i += n10
 	}
 	if m.TLSInfo != nil {
 		dAtA[i] = 0x2a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.TLSInfo.Size()))
-		n9, err := m.TLSInfo.MarshalTo(dAtA[i:])
+		n11, err := m.TLSInfo.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n9
+		i += n11
 	}
 	if m.FIPS {
 		dAtA[i] = 0x30
@@ -4304,31 +4342,31 @@ func (m *Mount) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x2a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.BindOptions.Size()))
-		n10, err := m.BindOptions.MarshalTo(dAtA[i:])
+		n12, err := m.BindOptions.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n10
+		i += n12
 	}
 	if m.VolumeOptions != nil {
 		dAtA[i] = 0x32
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.VolumeOptions.Size()))
-		n11, err := m.VolumeOptions.MarshalTo(dAtA[i:])
+		n13, err := m.VolumeOptions.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n11
+		i += n13
 	}
 	if m.TmpfsOptions != nil {
 		dAtA[i] = 0x3a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.TmpfsOptions.Size()))
-		n12, err := m.TmpfsOptions.MarshalTo(dAtA[i:])
+		n14, err := m.TmpfsOptions.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n12
+		i += n14
 	}
 	if m.Consistency != 0 {
 		dAtA[i] = 0x40
@@ -4417,11 +4455,11 @@ func (m *Mount_VolumeOptions) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.DriverConfig.Size()))
-		n13, err := m.DriverConfig.MarshalTo(dAtA[i:])
+		n15, err := m.DriverConfig.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n13
+		i += n15
 	}
 	return i, nil
 }
@@ -4484,11 +4522,11 @@ func (m *RestartPolicy) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x12
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Delay.Size()))
-		n14, err := m.Delay.MarshalTo(dAtA[i:])
+		n16, err := m.Delay.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n14
+		i += n16
 	}
 	if m.MaxAttempts != 0 {
 		dAtA[i] = 0x18
@@ -4499,11 +4537,11 @@ func (m *RestartPolicy) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x22
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Window.Size()))
-		n15, err := m.Window.MarshalTo(dAtA[i:])
+		n17, err := m.Window.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n15
+		i += n17
 	}
 	return i, nil
 }
@@ -4531,11 +4569,11 @@ func (m *UpdateConfig) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0x12
 	i++
 	i = encodeVarintTypes(dAtA, i, uint64(types.SizeOfStdDuration(m.Delay)))
-	n16, err := types.StdDurationMarshalTo(m.Delay, dAtA[i:])
+	n18, err := types.StdDurationMarshalTo(m.Delay, dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n16
+	i += n18
 	if m.FailureAction != 0 {
 		dAtA[i] = 0x18
 		i++
@@ -4545,11 +4583,11 @@ func (m *UpdateConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x22
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Monitor.Size()))
-		n17, err := m.Monitor.MarshalTo(dAtA[i:])
+		n19, err := m.Monitor.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n17
+		i += n19
 	}
 	if m.MaxFailureRatio != 0 {
 		dAtA[i] = 0x2d
@@ -4589,21 +4627,21 @@ func (m *UpdateStatus) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x12
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.StartedAt.Size()))
-		n18, err := m.StartedAt.MarshalTo(dAtA[i:])
+		n20, err := m.StartedAt.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n18
+		i += n20
 	}
 	if m.CompletedAt != nil {
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.CompletedAt.Size()))
-		n19, err := m.CompletedAt.MarshalTo(dAtA[i:])
+		n21, err := m.CompletedAt.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n19
+		i += n21
 	}
 	if len(m.Message) > 0 {
 		dAtA[i] = 0x22
@@ -4697,11 +4735,11 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Timestamp.Size()))
-		n20, err := m.Timestamp.MarshalTo(dAtA[i:])
+		n22, err := m.Timestamp.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n20
+		i += n22
 	}
 	if m.State != 0 {
 		dAtA[i] = 0x10
@@ -4721,21 +4759,21 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) {
 		i += copy(dAtA[i:], m.Err)
 	}
 	if m.RuntimeStatus != nil {
-		nn21, err := m.RuntimeStatus.MarshalTo(dAtA[i:])
+		nn23, err := m.RuntimeStatus.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += nn21
+		i += nn23
 	}
 	if m.PortStatus != nil {
 		dAtA[i] = 0x32
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.PortStatus.Size()))
-		n22, err := m.PortStatus.MarshalTo(dAtA[i:])
+		n24, err := m.PortStatus.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n22
+		i += n24
 	}
 	if len(m.AppliedBy) > 0 {
 		dAtA[i] = 0x3a
@@ -4747,11 +4785,11 @@ func (m *TaskStatus) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x42
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.AppliedAt.Size()))
-		n23, err := m.AppliedAt.MarshalTo(dAtA[i:])
+		n25, err := m.AppliedAt.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n23
+		i += n25
 	}
 	return i, nil
 }
@@ -4762,11 +4800,11 @@ func (m *TaskStatus_Container) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x2a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Container.Size()))
-		n24, err := m.Container.MarshalTo(dAtA[i:])
+		n26, err := m.Container.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n24
+		i += n26
 	}
 	return i, nil
 }
@@ -5003,11 +5041,11 @@ func (m *IPAMOptions) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Driver.Size()))
-		n25, err := m.Driver.MarshalTo(dAtA[i:])
+		n27, err := m.Driver.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n25
+		i += n27
 	}
 	if len(m.Configs) > 0 {
 		for _, msg := range m.Configs {
@@ -5073,11 +5111,11 @@ func (m *WeightedPeer) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Peer.Size()))
-		n26, err := m.Peer.MarshalTo(dAtA[i:])
+		n28, err := m.Peer.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n26
+		i += n28
 	}
 	if m.Weight != 0 {
 		dAtA[i] = 0x10
@@ -5180,11 +5218,11 @@ func (m *AcceptancePolicy_RoleAdmissionPolicy) MarshalTo(dAtA []byte) (int, erro
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Secret.Size()))
-		n27, err := m.Secret.MarshalTo(dAtA[i:])
+		n29, err := m.Secret.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n27
+		i += n29
 	}
 	return i, nil
 }
@@ -5290,11 +5328,11 @@ func (m *CAConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.NodeCertExpiry.Size()))
-		n28, err := m.NodeCertExpiry.MarshalTo(dAtA[i:])
+		n30, err := m.NodeCertExpiry.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n28
+		i += n30
 	}
 	if len(m.ExternalCAs) > 0 {
 		for _, msg := range m.ExternalCAs {
@@ -5370,11 +5408,11 @@ func (m *TaskDefaults) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.LogDriver.Size()))
-		n29, err := m.LogDriver.MarshalTo(dAtA[i:])
+		n31, err := m.LogDriver.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n29
+		i += n31
 	}
 	return i, nil
 }
@@ -5398,11 +5436,11 @@ func (m *DispatcherConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.HeartbeatPeriod.Size()))
-		n30, err := m.HeartbeatPeriod.MarshalTo(dAtA[i:])
+		n32, err := m.HeartbeatPeriod.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n30
+		i += n32
 	}
 	return i, nil
 }
@@ -5518,11 +5556,11 @@ func (m *PlacementPreference) MarshalTo(dAtA []byte) (int, error) {
 	var l int
 	_ = l
 	if m.Preference != nil {
-		nn31, err := m.Preference.MarshalTo(dAtA[i:])
+		nn33, err := m.Preference.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += nn31
+		i += nn33
 	}
 	return i, nil
 }
@@ -5533,11 +5571,11 @@ func (m *PlacementPreference_Spread) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Spread.Size()))
-		n32, err := m.Spread.MarshalTo(dAtA[i:])
+		n34, err := m.Spread.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n32
+		i += n34
 	}
 	return i, nil
 }
@@ -5669,20 +5707,20 @@ func (m *RootCA) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0x22
 	i++
 	i = encodeVarintTypes(dAtA, i, uint64(m.JoinTokens.Size()))
-	n33, err := m.JoinTokens.MarshalTo(dAtA[i:])
+	n35, err := m.JoinTokens.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n33
+	i += n35
 	if m.RootRotation != nil {
 		dAtA[i] = 0x2a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.RootRotation.Size()))
-		n34, err := m.RootRotation.MarshalTo(dAtA[i:])
+		n36, err := m.RootRotation.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n34
+		i += n36
 	}
 	if m.LastForcedRotation != 0 {
 		dAtA[i] = 0x30
@@ -5721,11 +5759,11 @@ func (m *Certificate) MarshalTo(dAtA []byte) (int, error) {
 	dAtA[i] = 0x1a
 	i++
 	i = encodeVarintTypes(dAtA, i, uint64(m.Status.Size()))
-	n35, err := m.Status.MarshalTo(dAtA[i:])
+	n37, err := m.Status.MarshalTo(dAtA[i:])
 	if err != nil {
 		return 0, err
 	}
-	i += n35
+	i += n37
 	if len(m.Certificate) > 0 {
 		dAtA[i] = 0x22
 		i++
@@ -5912,11 +5950,11 @@ func (m *SecretReference) MarshalTo(dAtA []byte) (int, error) {
 		i += copy(dAtA[i:], m.SecretName)
 	}
 	if m.Target != nil {
-		nn36, err := m.Target.MarshalTo(dAtA[i:])
+		nn38, err := m.Target.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += nn36
+		i += nn38
 	}
 	return i, nil
 }
@@ -5927,11 +5965,11 @@ func (m *SecretReference_File) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.File.Size()))
-		n37, err := m.File.MarshalTo(dAtA[i:])
+		n39, err := m.File.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n37
+		i += n39
 	}
 	return i, nil
 }
@@ -5963,11 +6001,11 @@ func (m *ConfigReference) MarshalTo(dAtA []byte) (int, error) {
 		i += copy(dAtA[i:], m.ConfigName)
 	}
 	if m.Target != nil {
-		nn38, err := m.Target.MarshalTo(dAtA[i:])
+		nn40, err := m.Target.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += nn38
+		i += nn40
 	}
 	return i, nil
 }
@@ -5978,11 +6016,11 @@ func (m *ConfigReference_File) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.File.Size()))
-		n39, err := m.File.MarshalTo(dAtA[i:])
+		n41, err := m.File.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n39
+		i += n41
 	}
 	return i, nil
 }
@@ -5992,11 +6030,11 @@ func (m *ConfigReference_Runtime) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x22
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Runtime.Size()))
-		n40, err := m.Runtime.MarshalTo(dAtA[i:])
+		n42, err := m.Runtime.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n40
+		i += n42
 	}
 	return i, nil
 }
@@ -6019,11 +6057,11 @@ func (m *BlacklistedCertificate) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Expiry.Size()))
-		n41, err := m.Expiry.MarshalTo(dAtA[i:])
+		n43, err := m.Expiry.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n41
+		i += n43
 	}
 	return i, nil
 }
@@ -6062,21 +6100,21 @@ func (m *HealthConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x12
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Interval.Size()))
-		n42, err := m.Interval.MarshalTo(dAtA[i:])
+		n44, err := m.Interval.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n42
+		i += n44
 	}
 	if m.Timeout != nil {
 		dAtA[i] = 0x1a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.Timeout.Size()))
-		n43, err := m.Timeout.MarshalTo(dAtA[i:])
+		n45, err := m.Timeout.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n43
+		i += n45
 	}
 	if m.Retries != 0 {
 		dAtA[i] = 0x20
@@ -6087,11 +6125,11 @@ func (m *HealthConfig) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0x2a
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.StartPeriod.Size()))
-		n44, err := m.StartPeriod.MarshalTo(dAtA[i:])
+		n46, err := m.StartPeriod.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n44
+		i += n46
 	}
 	return i, nil
 }
@@ -6186,21 +6224,21 @@ func (m *Privileges) MarshalTo(dAtA []byte) (int, error) {
 		dAtA[i] = 0xa
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.CredentialSpec.Size()))
-		n45, err := m.CredentialSpec.MarshalTo(dAtA[i:])
+		n47, err := m.CredentialSpec.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n45
+		i += n47
 	}
 	if m.SELinuxContext != nil {
 		dAtA[i] = 0x12
 		i++
 		i = encodeVarintTypes(dAtA, i, uint64(m.SELinuxContext.Size()))
-		n46, err := m.SELinuxContext.MarshalTo(dAtA[i:])
+		n48, err := m.SELinuxContext.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += n46
+		i += n48
 	}
 	return i, nil
 }
@@ -6221,11 +6259,11 @@ func (m *Privileges_CredentialSpec) MarshalTo(dAtA []byte) (int, error) {
 	var l int
 	_ = l
 	if m.Source != nil {
-		nn47, err := m.Source.MarshalTo(dAtA[i:])
+		nn49, err := m.Source.MarshalTo(dAtA[i:])
 		if err != nil {
 			return 0, err
 		}
-		i += nn47
+		i += nn49
 	}
 	return i, nil
 }
@@ -6446,6 +6484,14 @@ func (m *ResourceRequirements) Size() (n int) {
 		l = m.Reservations.Size()
 		n += 1 + l + sovTypes(uint64(l))
 	}
+	if m.SwapBytes != nil {
+		l = m.SwapBytes.Size()
+		n += 1 + l + sovTypes(uint64(l))
+	}
+	if m.MemorySwappiness != nil {
+		l = m.MemorySwappiness.Size()
+		n += 1 + l + sovTypes(uint64(l))
+	}
 	return n
 }
 
@@ -7635,6 +7681,8 @@ func (this *ResourceRequirements) String() string {
 	s := strings.Join([]string{`&ResourceRequirements{`,
 		`Limits:` + strings.Replace(fmt.Sprintf("%v", this.Limits), "Resources", "Resources", 1) + `,`,
 		`Reservations:` + strings.Replace(fmt.Sprintf("%v", this.Reservations), "Resources", "Resources", 1) + `,`,
+		`SwapBytes:` + strings.Replace(fmt.Sprintf("%v", this.SwapBytes), "Int64Value", "google_protobuf2.Int64Value", 1) + `,`,
+		`MemorySwappiness:` + strings.Replace(fmt.Sprintf("%v", this.MemorySwappiness), "Int64Value", "google_protobuf2.Int64Value", 1) + `,`,
 		`}`,
 	}, "")
 	return s
@@ -9391,6 +9439,72 @@ func (m *ResourceRequirements) Unmarshal(dAtA []byte) error {
 				return err
 			}
 			iNdEx = postIndex
+		case 3:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field SwapBytes", wireType)
+			}
+			var msglen int
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				msglen |= (int(b) & 0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			if msglen < 0 {
+				return ErrInvalidLengthTypes
+			}
+			postIndex := iNdEx + msglen
+			if postIndex > l {
+				return io.ErrUnexpectedEOF
+			}
+			if m.SwapBytes == nil {
+				m.SwapBytes = &google_protobuf2.Int64Value{}
+			}
+			if err := m.SwapBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+				return err
+			}
+			iNdEx = postIndex
+		case 4:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field MemorySwappiness", wireType)
+			}
+			var msglen int
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				msglen |= (int(b) & 0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			if msglen < 0 {
+				return ErrInvalidLengthTypes
+			}
+			postIndex := iNdEx + msglen
+			if postIndex > l {
+				return io.ErrUnexpectedEOF
+			}
+			if m.MemorySwappiness == nil {
+				m.MemorySwappiness = &google_protobuf2.Int64Value{}
+			}
+			if err := m.MemorySwappiness.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+				return err
+			}
+			iNdEx = postIndex
 		default:
 			iNdEx = preIndex
 			skippy, err := skipTypes(dAtA[iNdEx:])
@@ -17484,332 +17598,335 @@ var (
 func init() { proto.RegisterFile("github.com/docker/swarmkit/api/types.proto", fileDescriptorTypes) }
 
 var fileDescriptorTypes = []byte{
-	// 5218 bytes of a gzipped FileDescriptorProto
+	// 5274 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x5a, 0x4d, 0x70, 0x23, 0x49,
-	0x56, 0xb6, 0x64, 0x49, 0x96, 0x9e, 0x64, 0xbb, 0x3a, 0xdb, 0xdb, 0xe3, 0xd6, 0xf6, 0xd8, 0x9a,
-	0x9a, 0xe9, 0x9d, 0xd9, 0xde, 0x41, 0xfd, 0x37, 0xbb, 0xd1, 0x33, 0xc3, 0xec, 0x8c, 0x7e, 0xca,
-	0xb6, 0xb6, 0x6d, 0x49, 0x91, 0x92, 0xbb, 0x77, 0x89, 0x80, 0xa2, 0x5c, 0x95, 0x96, 0x6b, 0x5c,
-	0xaa, 0x14, 0x55, 0x25, 0xbb, 0xc5, 0x42, 0x30, 0x27, 0x20, 0x7c, 0x82, 0x0b, 0xec, 0x06, 0xe1,
-	0x08, 0x22, 0xe0, 0xc6, 0x81, 0x03, 0x07, 0x16, 0x4e, 0x43, 0x04, 0x41, 0x6c, 0x70, 0x81, 0x85,
-	0x08, 0xd8, 0x00, 0xc2, 0x30, 0x3e, 0x70, 0x23, 0xe0, 0x42, 0x70, 0xe1, 0x40, 0xe4, 0x4f, 0x95,
-	0xca, 0xea, 0xb2, 0x3d, 0xb3, 0xcb, 0xc5, 0x56, 0xbe, 0xf7, 0xbd, 0x97, 0x99, 0x2f, 0x33, 0x5f,
-	0xbe, 0xf7, 0xb2, 0xe0, 0xde, 0xc0, 0x0e, 0x0e, 0xc6, 0x7b, 0x55, 0x93, 0x0e, 0xef, 0x5b, 0xd4,
-	0x3c, 0x24, 0xde, 0x7d, 0xff, 0xd8, 0xf0, 0x86, 0x87, 0x76, 0x70, 0xdf, 0x18, 0xd9, 0xf7, 0x83,
-	0xc9, 0x88, 0xf8, 0xd5, 0x91, 0x47, 0x03, 0x8a, 0x90, 0x00, 0x54, 0x43, 0x40, 0xf5, 0xe8, 0x61,
-	0x79, 0x7d, 0x40, 0xe9, 0xc0, 0x21, 0xf7, 0x39, 0x62, 0x6f, 0xbc, 0x7f, 0x3f, 0xb0, 0x87, 0xc4,
-	0x0f, 0x8c, 0xe1, 0x48, 0x08, 0x95, 0xd7, 0x66, 0x01, 0xd6, 0xd8, 0x33, 0x02, 0x9b, 0xba, 0x92,
-	0xbf, 0x32, 0xa0, 0x03, 0xca, 0x7f, 0xde, 0x67, 0xbf, 0x04, 0x55, 0x5d, 0x87, 0x85, 0x67, 0xc4,
-	0xf3, 0x6d, 0xea, 0xa2, 0x15, 0xc8, 0xda, 0xae, 0x45, 0x5e, 0xac, 0xa6, 0x2a, 0xa9, 0xb7, 0x32,
-	0x58, 0x34, 0xd4, 0x07, 0x00, 0x2d, 0xf6, 0x43, 0x73, 0x03, 0x6f, 0x82, 0x14, 0x98, 0x3f, 0x24,
-	0x13, 0x8e, 0x28, 0x60, 0xf6, 0x93, 0x51, 0x8e, 0x0c, 0x67, 0x35, 0x2d, 0x28, 0x47, 0x86, 0xa3,
-	0x7e, 0x96, 0x82, 0x62, 0xcd, 0x75, 0x69, 0xc0, 0x7b, 0xf7, 0x11, 0x82, 0x8c, 0x6b, 0x0c, 0x89,
-	0x14, 0xe2, 0xbf, 0x51, 0x03, 0x72, 0x8e, 0xb1, 0x47, 0x1c, 0x7f, 0x35, 0x5d, 0x99, 0x7f, 0xab,
-	0xf8, 0xe8, 0x6b, 0xd5, 0x97, 0xa7, 0x5c, 0x8d, 0x29, 0xa9, 0x6e, 0x73, 0x34, 0x1f, 0x04, 0x96,
-	0xa2, 0xe8, 0x9b, 0xb0, 0x60, 0xbb, 0x96, 0x6d, 0x12, 0x7f, 0x35, 0xc3, 0xb5, 0xac, 0x25, 0x69,
-	0x99, 0x8e, 0xbe, 0x9e, 0xf9, 0xe1, 0xd9, 0xfa, 0x1c, 0x0e, 0x85, 0xca, 0xef, 0x42, 0x31, 0xa6,
-	0x36, 0x61, 0x6e, 0x2b, 0x90, 0x3d, 0x32, 0x9c, 0x31, 0x91, 0xb3, 0x13, 0x8d, 0xf7, 0xd2, 0x4f,
-	0x52, 0xea, 0x47, 0xb0, 0xd2, 0x36, 0x86, 0xc4, 0xda, 0x24, 0x2e, 0xf1, 0x6c, 0x13, 0x13, 0x9f,
-	0x8e, 0x3d, 0x93, 0xb0, 0xb9, 0x1e, 0xda, 0xae, 0x15, 0xce, 0x95, 0xfd, 0x4e, 0xd6, 0xa2, 0x36,
-	0xe0, 0x95, 0xa6, 0xed, 0x9b, 0x1e, 0x09, 0xc8, 0x17, 0x56, 0x32, 0x1f, 0x2a, 0x39, 0x4b, 0xc1,
-	0xf2, 0xac, 0xf4, 0xcf, 0xc1, 0x4d, 0x66, 0x62, 0x4b, 0xf7, 0x24, 0x45, 0xf7, 0x47, 0xc4, 0xe4,
-	0xca, 0x8a, 0x8f, 0xde, 0x4a, 0xb2, 0x50, 0xd2, 0x4c, 0xb6, 0xe6, 0xf0, 0x0d, 0xae, 0x26, 0x24,
-	0xf4, 0x46, 0xc4, 0x44, 0x26, 0xdc, 0xb2, 0xe4, 0xa0, 0x67, 0xd4, 0xa7, 0xb9, 0xfa, 0xc4, 0x65,
-	0xbc, 0x64, 0x9a, 0x5b, 0x73, 0x78, 0x25, 0x54, 0x16, 0xef, 0xa4, 0x0e, 0x90, 0x0f, 0x75, 0xab,
-	0xdf, 0x4b, 0x41, 0x21, 0x64, 0xfa, 0xe8, 0xab, 0x50, 0x70, 0x0d, 0x97, 0xea, 0xe6, 0x68, 0xec,
-	0xf3, 0x09, 0xcd, 0xd7, 0x4b, 0xe7, 0x67, 0xeb, 0xf9, 0xb6, 0xe1, 0xd2, 0x46, 0x77, 0xd7, 0xc7,
-	0x79, 0xc6, 0x6e, 0x8c, 0xc6, 0x3e, 0x7a, 0x0d, 0x4a, 0x43, 0x32, 0xa4, 0xde, 0x44, 0xdf, 0x9b,
-	0x04, 0xc4, 0x97, 0x66, 0x2b, 0x0a, 0x5a, 0x9d, 0x91, 0xd0, 0x07, 0xb0, 0x30, 0x10, 0x43, 0x5a,
-	0x9d, 0xe7, 0xdb, 0xe7, 0xf5, 0xa4, 0xd1, 0xcf, 0x8c, 0x1a, 0x87, 0x32, 0xea, 0x6f, 0xa5, 0x60,
-	0x25, 0xa2, 0x92, 0x5f, 0x1a, 0xdb, 0x1e, 0x19, 0x12, 0x37, 0xf0, 0xd1, 0xd7, 0x21, 0xe7, 0xd8,
-	0x43, 0x3b, 0xf0, 0xa5, 0xcd, 0x5f, 0x4d, 0x52, 0x1b, 0x4d, 0x0a, 0x4b, 0x30, 0xaa, 0x41, 0xc9,
-	0x23, 0x3e, 0xf1, 0x8e, 0xc4, 0x8e, 0x97, 0x16, 0xbd, 0x46, 0xf8, 0x82, 0x88, 0xba, 0x01, 0xf9,
-	0xae, 0x63, 0x04, 0xfb, 0xd4, 0x1b, 0x22, 0x15, 0x4a, 0x86, 0x67, 0x1e, 0xd8, 0x01, 0x31, 0x83,
-	0xb1, 0x17, 0x9e, 0xbe, 0x0b, 0x34, 0x74, 0x0b, 0xd2, 0x54, 0x74, 0x54, 0xa8, 0xe7, 0xce, 0xcf,
-	0xd6, 0xd3, 0x9d, 0x1e, 0x4e, 0x53, 0x5f, 0x7d, 0x1f, 0x6e, 0x74, 0x9d, 0xf1, 0xc0, 0x76, 0x9b,
-	0xc4, 0x37, 0x3d, 0x7b, 0xc4, 0xb4, 0xb3, 0x5d, 0xc9, 0x7c, 0x54, 0xb8, 0x2b, 0xd9, 0xef, 0xe8,
-	0x68, 0xa7, 0xa7, 0x47, 0x5b, 0xfd, 0x8d, 0x34, 0xdc, 0xd0, 0xdc, 0x81, 0xed, 0x92, 0xb8, 0xf4,
-	0x5d, 0x58, 0x22, 0x9c, 0xa8, 0x1f, 0x09, 0x77, 0x23, 0xf5, 0x2c, 0x0a, 0x6a, 0xe8, 0x83, 0x5a,
-	0x33, 0x7e, 0xe1, 0x61, 0xd2, 0xf4, 0x5f, 0xd2, 0x9e, 0xe8, 0x1d, 0x34, 0x58, 0x18, 0xf1, 0x49,
-	0xf8, 0x72, 0x79, 0xef, 0x26, 0xe9, 0x7a, 0x69, 0x9e, 0xa1, 0x93, 0x90, 0xb2, 0x3f, 0x8d, 0x93,
-	0xf8, 0xeb, 0x34, 0x2c, 0xb7, 0xa9, 0x75, 0xc1, 0x0e, 0x65, 0xc8, 0x1f, 0x50, 0x3f, 0x88, 0x39,
-	0xc4, 0xa8, 0x8d, 0x9e, 0x40, 0x7e, 0x24, 0x97, 0x4f, 0xae, 0xfe, 0x9d, 0xe4, 0x21, 0x0b, 0x0c,
-	0x8e, 0xd0, 0xe8, 0x7d, 0x28, 0x84, 0x47, 0x86, 0xcd, 0xf6, 0x73, 0x6c, 0x9c, 0x29, 0x1e, 0x7d,
-	0x00, 0x39, 0xb1, 0x08, 0xab, 0x19, 0x2e, 0x79, 0xf7, 0x73, 0xd9, 0x1c, 0x4b, 0x21, 0xb4, 0x09,
-	0xf9, 0xc0, 0xf1, 0x75, 0xdb, 0xdd, 0xa7, 0xab, 0x59, 0xae, 0x60, 0x3d, 0xd1, 0xc9, 0x50, 0x8b,
-	0xf4, 0xb7, 0x7b, 0x2d, 0x77, 0x9f, 0xd6, 0x8b, 0xe7, 0x67, 0xeb, 0x0b, 0xb2, 0x81, 0x17, 0x02,
-	0xc7, 0x67, 0x3f, 0xd0, 0x1d, 0xc8, 0xec, 0xdb, 0x23, 0x7f, 0x35, 0x57, 0x49, 0xbd, 0x95, 0xaf,
-	0xe7, 0xcf, 0xcf, 0xd6, 0x33, 0x1b, 0xad, 0x6e, 0x0f, 0x73, 0xaa, 0xfa, 0xdb, 0x29, 0x28, 0xc6,
-	0x74, 0xa0, 0x57, 0x01, 0x02, 0x6f, 0xec, 0x07, 0xba, 0x47, 0x69, 0xc0, 0x4d, 0x59, 0xc2, 0x05,
-	0x4e, 0xc1, 0x94, 0x06, 0xa8, 0x0a, 0x37, 0x4d, 0xe2, 0x05, 0xba, 0xed, 0xfb, 0x63, 0xe2, 0xe9,
-	0xfe, 0x78, 0xef, 0x63, 0x62, 0x06, 0xdc, 0xac, 0x25, 0x7c, 0x83, 0xb1, 0x5a, 0x9c, 0xd3, 0x13,
-	0x0c, 0xf4, 0x18, 0x6e, 0xc5, 0xf1, 0xa3, 0xf1, 0x9e, 0x63, 0x9b, 0x3a, 0x5b, 0xea, 0x79, 0x2e,
-	0x72, 0x73, 0x2a, 0xd2, 0xe5, 0xbc, 0xa7, 0x64, 0xa2, 0xfe, 0x38, 0x05, 0x0a, 0x36, 0xf6, 0x83,
-	0x1d, 0x32, 0xdc, 0x23, 0x5e, 0x2f, 0x30, 0x82, 0xb1, 0x8f, 0x6e, 0x41, 0xce, 0x21, 0x86, 0x45,
-	0x3c, 0x3e, 0xa8, 0x3c, 0x96, 0x2d, 0xb4, 0xcb, 0xce, 0xb7, 0x61, 0x1e, 0x18, 0x7b, 0xb6, 0x63,
-	0x07, 0x13, 0x3e, 0x94, 0xa5, 0xe4, 0x0d, 0x3e, 0xab, 0xb3, 0x8a, 0x63, 0x82, 0xf8, 0x82, 0x1a,
-	0xb4, 0x0a, 0x0b, 0x43, 0xe2, 0xfb, 0xc6, 0x80, 0xf0, 0x91, 0x16, 0x70, 0xd8, 0x54, 0xdf, 0x87,
-	0x52, 0x5c, 0x0e, 0x15, 0x61, 0x61, 0xb7, 0xfd, 0xb4, 0xdd, 0x79, 0xde, 0x56, 0xe6, 0xd0, 0x32,
-	0x14, 0x77, 0xdb, 0x58, 0xab, 0x35, 0xb6, 0x6a, 0xf5, 0x6d, 0x4d, 0x49, 0xa1, 0x45, 0x28, 0x4c,
-	0x9b, 0x69, 0xf5, 0x4f, 0x52, 0x00, 0xcc, 0xdc, 0x72, 0x52, 0xef, 0x41, 0xd6, 0x0f, 0x8c, 0x40,
-	0xec, 0xd9, 0xa5, 0x47, 0x6f, 0x5c, 0xb6, 0xc2, 0x72, 0xbc, 0xec, 0x1f, 0xc1, 0x42, 0x24, 0x3e,
-	0xc2, 0xf4, 0x85, 0x11, 0x32, 0xf7, 0x61, 0x58, 0x96, 0x27, 0x07, 0xce, 0x7f, 0xab, 0xef, 0x43,
-	0x96, 0x4b, 0x5f, 0x1c, 0x6e, 0x1e, 0x32, 0x4d, 0xf6, 0x2b, 0x85, 0x0a, 0x90, 0xc5, 0x5a, 0xad,
-	0xf9, 0x1d, 0x25, 0x8d, 0x14, 0x28, 0x35, 0x5b, 0xbd, 0x46, 0xa7, 0xdd, 0xd6, 0x1a, 0x7d, 0xad,
-	0xa9, 0xcc, 0xab, 0x77, 0x21, 0xdb, 0x1a, 0x32, 0xcd, 0x77, 0xd8, 0x81, 0xd8, 0x27, 0x1e, 0x71,
-	0xcd, 0xf0, 0x9c, 0x4d, 0x09, 0xea, 0x67, 0x25, 0xc8, 0xee, 0xd0, 0xb1, 0x1b, 0xa0, 0x47, 0x31,
-	0xa7, 0xb6, 0x94, 0x1c, 0x3f, 0x70, 0x60, 0xb5, 0x3f, 0x19, 0x11, 0xe9, 0xf4, 0x6e, 0x41, 0x4e,
-	0x1c, 0x1d, 0x39, 0x1d, 0xd9, 0x62, 0xf4, 0xc0, 0xf0, 0x06, 0x24, 0x90, 0xf3, 0x91, 0x2d, 0xf4,
-	0x16, 0xbb, 0xcf, 0x0c, 0x8b, 0xba, 0xce, 0x84, 0x9f, 0xb0, 0xbc, 0xb8, 0xb4, 0x30, 0x31, 0xac,
-	0x8e, 0xeb, 0x4c, 0x70, 0xc4, 0x45, 0x5b, 0x50, 0xda, 0xb3, 0x5d, 0x4b, 0xa7, 0x23, 0x71, 0x05,
-	0x64, 0x2f, 0x3f, 0x8f, 0x62, 0x54, 0x75, 0xdb, 0xb5, 0x3a, 0x02, 0x8c, 0x8b, 0x7b, 0xd3, 0x06,
-	0x6a, 0xc3, 0xd2, 0x11, 0x75, 0xc6, 0x43, 0x12, 0xe9, 0xca, 0x71, 0x5d, 0x6f, 0x5e, 0xae, 0xeb,
-	0x19, 0xc7, 0x87, 0xda, 0x16, 0x8f, 0xe2, 0x4d, 0xf4, 0x14, 0x16, 0x83, 0xe1, 0x68, 0xdf, 0x8f,
-	0xd4, 0x2d, 0x70, 0x75, 0x5f, 0xb9, 0xc2, 0x60, 0x0c, 0x1e, 0x6a, 0x2b, 0x05, 0xb1, 0x16, 0xda,
-	0x84, 0xa2, 0x49, 0x5d, 0xdf, 0xf6, 0x03, 0xe2, 0x9a, 0x93, 0xd5, 0x3c, 0xb7, 0xfd, 0x15, 0xb3,
-	0x6c, 0x4c, 0xc1, 0x38, 0x2e, 0x59, 0xfe, 0xc1, 0x3c, 0x14, 0x63, 0x26, 0x40, 0x3d, 0x28, 0x8e,
-	0x3c, 0x3a, 0x32, 0x06, 0xfc, 0x3e, 0x94, 0x8b, 0xfa, 0xf0, 0x73, 0x99, 0xaf, 0xda, 0x9d, 0x0a,
-	0xe2, 0xb8, 0x16, 0xf4, 0x0e, 0x94, 0x5c, 0xea, 0x7a, 0xc4, 0x1c, 0x7b, 0xbe, 0x7d, 0x24, 0x16,
-	0x3d, 0x5f, 0x57, 0xce, 0xcf, 0xd6, 0x4b, 0x6d, 0xea, 0xe2, 0x90, 0x8e, 0x2f, 0xa0, 0xd4, 0xd3,
-	0x34, 0x14, 0x63, 0x2a, 0xd1, 0x3d, 0xc8, 0xe3, 0x2e, 0x6e, 0x3d, 0xab, 0xf5, 0x35, 0x65, 0xae,
-	0x7c, 0xe7, 0xe4, 0xb4, 0xb2, 0xca, 0xc7, 0x10, 0xef, 0xb6, 0xeb, 0xd9, 0x47, 0x6c, 0xe7, 0xbf,
-	0x05, 0x0b, 0x21, 0x34, 0x55, 0xfe, 0xf2, 0xc9, 0x69, 0xe5, 0x95, 0x59, 0x68, 0x0c, 0x89, 0x7b,
-	0x5b, 0x35, 0xac, 0x35, 0x95, 0x74, 0x32, 0x12, 0xf7, 0x0e, 0x0c, 0x8f, 0x58, 0xe8, 0x2b, 0x90,
-	0x93, 0xc0, 0xf9, 0x72, 0xf9, 0xe4, 0xb4, 0x72, 0x6b, 0x16, 0x38, 0xc5, 0xe1, 0xde, 0x76, 0xed,
-	0x99, 0xa6, 0x64, 0x92, 0x71, 0xb8, 0xe7, 0x18, 0x47, 0x04, 0xbd, 0x01, 0x59, 0x01, 0xcb, 0x96,
-	0x6f, 0x9f, 0x9c, 0x56, 0xbe, 0xf4, 0x92, 0x3a, 0x86, 0x2a, 0xaf, 0xfe, 0xe6, 0x1f, 0xac, 0xcd,
-	0xfd, 0xf9, 0x1f, 0xae, 0x29, 0xb3, 0xec, 0xf2, 0xff, 0xa6, 0x60, 0xf1, 0xc2, 0x8e, 0x43, 0x2a,
-	0xe4, 0x5c, 0x6a, 0xd2, 0x91, 0xb8, 0x5c, 0xf3, 0x75, 0x38, 0x3f, 0x5b, 0xcf, 0xb5, 0x69, 0x83,
-	0x8e, 0x26, 0x58, 0x72, 0xd0, 0xd3, 0x99, 0xf0, 0xe0, 0xf1, 0xe7, 0xdc, 0xce, 0x89, 0x01, 0xc2,
-	0x87, 0xb0, 0x68, 0x79, 0xf6, 0x11, 0xf1, 0x74, 0x93, 0xba, 0xfb, 0xf6, 0x40, 0x5e, 0x9c, 0xe5,
-	0xc4, 0x18, 0x96, 0x03, 0x71, 0x49, 0x08, 0x34, 0x38, 0xfe, 0xa7, 0x08, 0x0d, 0xca, 0x23, 0x28,
-	0xc5, 0x0f, 0x08, 0xbb, 0xcd, 0x7c, 0xfb, 0x97, 0x89, 0x0c, 0x56, 0x79, 0x68, 0x8b, 0x0b, 0x8c,
-	0x22, 0x42, 0xd5, 0x37, 0x21, 0x33, 0xa4, 0x96, 0xd0, 0xb3, 0x58, 0xbf, 0xc9, 0x22, 0x94, 0x7f,
-	0x3a, 0x5b, 0x2f, 0x52, 0xbf, 0xba, 0x61, 0x3b, 0x64, 0x87, 0x5a, 0x04, 0x73, 0x00, 0xf3, 0xb5,
-	0xe1, 0x09, 0x95, 0xb7, 0x81, 0x6c, 0xaa, 0xdf, 0x4f, 0x41, 0x86, 0x39, 0x31, 0xf4, 0x65, 0xc8,
-	0xd4, 0x5b, 0xed, 0xa6, 0x32, 0x57, 0xbe, 0x71, 0x72, 0x5a, 0x59, 0xe4, 0xd6, 0x62, 0x0c, 0x76,
-	0x18, 0xd0, 0x3a, 0xe4, 0x9e, 0x75, 0xb6, 0x77, 0x77, 0xd8, 0xce, 0xbb, 0x79, 0x72, 0x5a, 0x59,
-	0x8e, 0xd8, 0xc2, 0x9e, 0xe8, 0x55, 0xc8, 0xf6, 0x77, 0xba, 0x1b, 0x3d, 0x25, 0x5d, 0x46, 0x27,
-	0xa7, 0x95, 0xa5, 0x88, 0xcf, 0xa7, 0x83, 0x5e, 0x83, 0x6c, 0xbb, 0xdb, 0xea, 0x6a, 0xca, 0x7c,
-	0xf9, 0xd6, 0xc9, 0x69, 0x05, 0x45, 0x6c, 0x9e, 0x63, 0x74, 0xed, 0x11, 0x29, 0xdf, 0x90, 0x7b,
-	0xa2, 0x10, 0xf1, 0xd4, 0x1f, 0xa5, 0xa0, 0x18, 0x3b, 0xe4, 0x6c, 0x5b, 0x37, 0xb5, 0x8d, 0xda,
-	0xee, 0x76, 0x5f, 0x99, 0x8b, 0x6d, 0xeb, 0x18, 0xa4, 0x49, 0xf6, 0x8d, 0xb1, 0xc3, 0x7c, 0x2b,
-	0x34, 0x3a, 0xed, 0x5e, 0xab, 0xd7, 0xd7, 0xda, 0x7d, 0x25, 0x55, 0x5e, 0x3d, 0x39, 0xad, 0xac,
-	0xcc, 0x82, 0x37, 0xc6, 0x8e, 0xc3, 0x36, 0x76, 0xa3, 0xd6, 0xd8, 0xe2, 0x27, 0x65, 0xba, 0xb1,
-	0x63, 0xa8, 0x86, 0x61, 0x1e, 0x10, 0x0b, 0xbd, 0x0d, 0x85, 0xa6, 0xb6, 0xad, 0x6d, 0xd6, 0xf8,
-	0x8d, 0x52, 0x7e, 0xf5, 0xe4, 0xb4, 0x72, 0xfb, 0xe5, 0xde, 0x1d, 0x32, 0x30, 0x02, 0x62, 0xcd,
-	0x6c, 0xf0, 0x18, 0x44, 0xfd, 0xef, 0x34, 0x2c, 0x62, 0x96, 0xa0, 0x7b, 0x41, 0x97, 0x3a, 0xb6,
-	0x39, 0x41, 0x5d, 0x28, 0x98, 0xd4, 0xb5, 0xec, 0x98, 0x6f, 0x7a, 0x74, 0x49, 0x90, 0x36, 0x95,
-	0x0a, 0x5b, 0x8d, 0x50, 0x12, 0x4f, 0x95, 0xa0, 0xfb, 0x90, 0xb5, 0x88, 0x63, 0x4c, 0x64, 0xb4,
-	0x78, 0xbb, 0x2a, 0x4a, 0x00, 0xd5, 0xb0, 0x04, 0x50, 0x6d, 0xca, 0x12, 0x00, 0x16, 0x38, 0x9e,
-	0x15, 0x19, 0x2f, 0x74, 0x23, 0x08, 0xc8, 0x70, 0x14, 0x88, 0x3d, 0x92, 0xc1, 0xc5, 0xa1, 0xf1,
-	0xa2, 0x26, 0x49, 0xe8, 0x21, 0xe4, 0x8e, 0x6d, 0xd7, 0xa2, 0xc7, 0x32, 0x1a, 0xbc, 0x42, 0xa9,
-	0x04, 0xaa, 0x27, 0x2c, 0x0c, 0x9a, 0x19, 0x26, 0xdb, 0x66, 0xed, 0x4e, 0x5b, 0x0b, 0xb7, 0x99,
-	0xe4, 0x77, 0xdc, 0x36, 0x75, 0x99, 0xf7, 0x80, 0x4e, 0x5b, 0xdf, 0xa8, 0xb5, 0xb6, 0x77, 0x31,
-	0xdb, 0x6a, 0x2b, 0x27, 0xa7, 0x15, 0x25, 0x82, 0x6c, 0x18, 0xb6, 0xc3, 0xd2, 0x93, 0xdb, 0x30,
-	0x5f, 0x6b, 0x7f, 0x47, 0x49, 0x97, 0x95, 0x93, 0xd3, 0x4a, 0x29, 0x62, 0xd7, 0xdc, 0xc9, 0xd4,
-	0xee, 0xb3, 0xfd, 0xaa, 0x7f, 0x33, 0x0f, 0xa5, 0xdd, 0x91, 0x65, 0x04, 0x44, 0x9c, 0x52, 0x54,
-	0x81, 0xe2, 0xc8, 0xf0, 0x0c, 0xc7, 0x21, 0x8e, 0xed, 0x0f, 0x65, 0x71, 0x23, 0x4e, 0x42, 0xef,
-	0x7e, 0x5e, 0x33, 0xd6, 0xf3, 0xec, 0xe4, 0x7d, 0xef, 0x5f, 0xd7, 0x53, 0xa1, 0x41, 0x77, 0x61,
-	0x69, 0x5f, 0x8c, 0x56, 0x37, 0x4c, 0xbe, 0xb0, 0xf3, 0x7c, 0x61, 0xab, 0x49, 0x0b, 0x1b, 0x1f,
-	0x56, 0x55, 0x4e, 0xb2, 0xc6, 0xa5, 0xf0, 0xe2, 0x7e, 0xbc, 0x89, 0x1e, 0xc3, 0xc2, 0x90, 0xba,
-	0x76, 0x40, 0xbd, 0xeb, 0x57, 0x21, 0x44, 0xa2, 0x7b, 0x70, 0x83, 0x2d, 0x6e, 0x38, 0x1e, 0xce,
-	0xe6, 0x21, 0x44, 0x1a, 0x2f, 0x0f, 0x8d, 0x17, 0xb2, 0x43, 0xcc, 0xc8, 0xa8, 0x0e, 0x59, 0xea,
-	0xb1, 0x18, 0x35, 0xc7, 0x87, 0xfb, 0xf6, 0xb5, 0xc3, 0x15, 0x8d, 0x0e, 0x93, 0xc1, 0x42, 0x54,
-	0xfd, 0x06, 0x2c, 0x5e, 0x98, 0x04, 0x0b, 0xcd, 0xba, 0xb5, 0xdd, 0x9e, 0xa6, 0xcc, 0xa1, 0x12,
-	0xe4, 0x1b, 0x9d, 0x76, 0xbf, 0xd5, 0xde, 0x65, 0xb1, 0x65, 0x09, 0xf2, 0xb8, 0xb3, 0xbd, 0x5d,
-	0xaf, 0x35, 0x9e, 0x2a, 0x69, 0xb5, 0x0a, 0xc5, 0x98, 0x36, 0xb4, 0x04, 0xd0, 0xeb, 0x77, 0xba,
-	0xfa, 0x46, 0x0b, 0xf7, 0xfa, 0x22, 0x32, 0xed, 0xf5, 0x6b, 0xb8, 0x2f, 0x09, 0x29, 0xf5, 0x3f,
-	0xd3, 0xe1, 0x8a, 0xca, 0x60, 0xb4, 0x7e, 0x31, 0x18, 0xbd, 0x62, 0xf0, 0x32, 0x1c, 0x9d, 0x36,
-	0xa2, 0xa0, 0xf4, 0x5d, 0x00, 0xbe, 0x71, 0x88, 0xa5, 0x1b, 0x81, 0x5c, 0xf8, 0xf2, 0x4b, 0x46,
-	0xee, 0x87, 0x35, 0x36, 0x5c, 0x90, 0xe8, 0x5a, 0x80, 0x3e, 0x80, 0x92, 0x49, 0x87, 0x23, 0x87,
-	0x48, 0xe1, 0xf9, 0x6b, 0x85, 0x8b, 0x11, 0xbe, 0x16, 0xc4, 0xc3, 0xe1, 0xcc, 0xc5, 0x80, 0xfd,
-	0xd7, 0x53, 0xa1, 0x65, 0x12, 0x22, 0xe0, 0x12, 0xe4, 0x77, 0xbb, 0xcd, 0x5a, 0xbf, 0xd5, 0xde,
-	0x54, 0x52, 0x08, 0x20, 0xc7, 0x4d, 0xdd, 0x54, 0xd2, 0x2c, 0x72, 0x6f, 0x74, 0x76, 0xba, 0xdb,
-	0x1a, 0xf7, 0x58, 0x68, 0x05, 0x94, 0xd0, 0xd8, 0x3a, 0x37, 0xa4, 0xd6, 0x54, 0x32, 0xe8, 0x26,
-	0x2c, 0x47, 0x54, 0x29, 0x99, 0x45, 0xb7, 0x00, 0x45, 0xc4, 0xa9, 0x8a, 0x9c, 0xfa, 0xab, 0xb0,
-	0xdc, 0xa0, 0x6e, 0x60, 0xd8, 0x6e, 0x94, 0xd5, 0x3c, 0x62, 0x93, 0x96, 0x24, 0xdd, 0x96, 0xb5,
-	0xa9, 0xfa, 0xf2, 0xf9, 0xd9, 0x7a, 0x31, 0x82, 0xb6, 0x9a, 0x3c, 0x3c, 0x93, 0x0d, 0x8b, 0x9d,
-	0xdf, 0x91, 0x6d, 0x71, 0xe3, 0x66, 0xeb, 0x0b, 0xe7, 0x67, 0xeb, 0xf3, 0xdd, 0x56, 0x13, 0x33,
-	0x1a, 0xfa, 0x32, 0x14, 0xc8, 0x0b, 0x3b, 0xd0, 0x4d, 0x76, 0xab, 0x31, 0x03, 0x66, 0x71, 0x9e,
-	0x11, 0x1a, 0xd4, 0x22, 0x6a, 0x1d, 0xa0, 0x4b, 0xbd, 0x40, 0xf6, 0xfc, 0x0e, 0x64, 0x47, 0xd4,
-	0xe3, 0xd5, 0x94, 0x4b, 0x6b, 0x7c, 0x0c, 0x2e, 0x36, 0x2a, 0x16, 0x60, 0xf5, 0xfb, 0xf3, 0x00,
-	0x7d, 0xc3, 0x3f, 0x94, 0x4a, 0x9e, 0x40, 0x21, 0xaa, 0x97, 0xca, 0xb2, 0xcc, 0x95, 0xab, 0x1d,
-	0x81, 0xd1, 0xe3, 0x70, 0xb3, 0x89, 0x7c, 0x2d, 0x31, 0xad, 0x0e, 0x3b, 0x4a, 0x4a, 0x79, 0x2e,
-	0x26, 0x65, 0x2c, 0x48, 0x20, 0x9e, 0x27, 0x57, 0x9e, 0xfd, 0x44, 0x0d, 0x7e, 0x2d, 0x08, 0xa3,
-	0xc9, 0x88, 0x3f, 0xb1, 0x10, 0x35, 0xb3, 0x22, 0x5b, 0x73, 0x78, 0x2a, 0x87, 0x3e, 0x84, 0x22,
-	0x9b, 0xb7, 0xee, 0x73, 0x9e, 0x0c, 0xf6, 0x2f, 0x35, 0x95, 0xd0, 0x80, 0x61, 0x34, 0xb5, 0xf2,
-	0xab, 0x00, 0xc6, 0x68, 0xe4, 0xd8, 0xc4, 0xd2, 0xf7, 0x26, 0x3c, 0xba, 0x2f, 0xe0, 0x82, 0xa4,
-	0xd4, 0x27, 0xec, 0xb8, 0x84, 0x6c, 0x23, 0xe0, 0x11, 0xfb, 0x35, 0x06, 0x94, 0xe8, 0x5a, 0x50,
-	0x57, 0x60, 0xc9, 0x1b, 0xbb, 0xcc, 0xa0, 0x72, 0x74, 0xea, 0x1f, 0xa7, 0xe1, 0x95, 0x36, 0x09,
-	0x8e, 0xa9, 0x77, 0x58, 0x0b, 0x02, 0xc3, 0x3c, 0x18, 0x12, 0x57, 0x2e, 0x5f, 0x2c, 0x89, 0x4a,
-	0x5d, 0x48, 0xa2, 0x56, 0x61, 0xc1, 0x70, 0x6c, 0xc3, 0x27, 0x22, 0xf4, 0x2b, 0xe0, 0xb0, 0xc9,
-	0x52, 0x3d, 0x96, 0x38, 0x12, 0xdf, 0x27, 0xa2, 0xd2, 0xc3, 0x06, 0x1e, 0x12, 0xd0, 0x77, 0xe1,
-	0x96, 0x0c, 0xf2, 0x8c, 0xa8, 0x2b, 0x96, 0xc4, 0x84, 0x25, 0x63, 0x2d, 0x31, 0x93, 0x4d, 0x1e,
-	0x9c, 0x8c, 0x02, 0xa7, 0xe4, 0xce, 0x28, 0x90, 0x31, 0xe5, 0x8a, 0x95, 0xc0, 0x2a, 0x6f, 0xc2,
-	0xed, 0x4b, 0x45, 0xbe, 0x50, 0x25, 0xe9, 0xef, 0xd3, 0x00, 0xad, 0x6e, 0x6d, 0x47, 0x1a, 0xa9,
-	0x09, 0xb9, 0x7d, 0x63, 0x68, 0x3b, 0x93, 0xab, 0x3c, 0xe0, 0x14, 0x5f, 0xad, 0x09, 0x73, 0x6c,
-	0x70, 0x19, 0x2c, 0x65, 0x79, 0x1e, 0x3b, 0xde, 0x73, 0x49, 0x10, 0xe5, 0xb1, 0xbc, 0xc5, 0x86,
-	0xe1, 0x19, 0x6e, 0xb4, 0x75, 0x45, 0x83, 0x2d, 0x00, 0x0b, 0x79, 0x8e, 0x8d, 0x49, 0xe8, 0xb6,
-	0x64, 0x13, 0x6d, 0xf1, 0x7a, 0x2d, 0xf1, 0x8e, 0x88, 0xb5, 0x9a, 0xe5, 0x46, 0xbd, 0x6e, 0x3c,
-	0x58, 0xc2, 0x85, 0xed, 0x22, 0xe9, 0xf2, 0xfb, 0x3c, 0x64, 0x9a, 0xb2, 0xbe, 0x90, 0x8d, 0x1e,
-	0xc0, 0xe2, 0x85, 0x79, 0xbe, 0x54, 0x40, 0x68, 0x75, 0x9f, 0xbd, 0xa3, 0x64, 0xe4, 0xaf, 0x6f,
-	0x28, 0x39, 0xf5, 0xaf, 0xe6, 0x85, 0xa3, 0x91, 0x56, 0x4d, 0x7e, 0xa7, 0xc8, 0xf3, 0xdd, 0x6d,
-	0x52, 0x47, 0x3a, 0x80, 0x37, 0xaf, 0xf6, 0x3f, 0x2c, 0x8f, 0xe4, 0x70, 0x1c, 0x09, 0xa2, 0x75,
-	0x28, 0x8a, 0x5d, 0xac, 0xb3, 0x03, 0xc7, 0xcd, 0xba, 0x88, 0x41, 0x90, 0x98, 0x24, 0xba, 0x0b,
-	0x4b, 0xbc, 0xe0, 0xe4, 0x1f, 0x10, 0x4b, 0x60, 0x32, 0x1c, 0xb3, 0x18, 0x51, 0x39, 0x6c, 0x07,
-	0x4a, 0x92, 0xa0, 0xf3, 0x6c, 0x20, 0xcb, 0x07, 0x74, 0xef, 0xba, 0x01, 0x09, 0x11, 0x9e, 0x24,
-	0x14, 0x47, 0xd3, 0x86, 0xfa, 0x8b, 0x90, 0x0f, 0x07, 0x8b, 0x56, 0x61, 0xbe, 0xdf, 0xe8, 0x2a,
-	0x73, 0xe5, 0xe5, 0x93, 0xd3, 0x4a, 0x31, 0x24, 0xf7, 0x1b, 0x5d, 0xc6, 0xd9, 0x6d, 0x76, 0x95,
-	0xd4, 0x45, 0xce, 0x6e, 0xb3, 0x8b, 0xca, 0x90, 0xe9, 0x35, 0xfa, 0xdd, 0x30, 0x3e, 0x0b, 0x59,
-	0x8c, 0x56, 0xce, 0xb0, 0xf8, 0x4c, 0xdd, 0x87, 0x62, 0xac, 0x77, 0xf4, 0x3a, 0x2c, 0xb4, 0xda,
-	0x9b, 0x58, 0xeb, 0xf5, 0x94, 0x39, 0x91, 0x1e, 0xc4, 0xb8, 0x2d, 0x77, 0xc0, 0xd6, 0x0e, 0xbd,
-	0x0a, 0x99, 0xad, 0x0e, 0xbb, 0xf7, 0x45, 0xfe, 0x11, 0x43, 0x6c, 0x51, 0x3f, 0x28, 0xdf, 0x94,
-	0x81, 0x5f, 0x5c, 0xb1, 0xfa, 0x7b, 0x29, 0xc8, 0x89, 0x83, 0x96, 0xb8, 0x88, 0xb5, 0x69, 0x52,
-	0x24, 0xd2, 0xc6, 0x37, 0x2f, 0x4f, 0xf1, 0xaa, 0x32, 0x23, 0x13, 0x5b, 0x33, 0x94, 0x2b, 0xbf,
-	0x07, 0xa5, 0x38, 0xe3, 0x0b, 0x6d, 0xcc, 0xef, 0x42, 0x91, 0xed, 0xfd, 0x30, 0xd5, 0x7b, 0x04,
-	0x39, 0xe1, 0x2c, 0xa2, 0x7b, 0xe8, 0xf2, 0x7c, 0x53, 0x22, 0xd1, 0x13, 0x58, 0x10, 0x39, 0x6a,
-	0x58, 0xcb, 0x5e, 0xbb, 0xfa, 0x84, 0xe1, 0x10, 0xae, 0x7e, 0x08, 0x99, 0x2e, 0x21, 0x1e, 0xb3,
-	0xbd, 0x4b, 0x2d, 0x32, 0xbd, 0xba, 0x65, 0x7a, 0x6d, 0x91, 0x56, 0x93, 0xa5, 0xd7, 0x16, 0x69,
-	0x59, 0x51, 0x3d, 0x2e, 0x1d, 0xab, 0xc7, 0xf5, 0xa1, 0xf4, 0x9c, 0xd8, 0x83, 0x83, 0x80, 0x58,
-	0x5c, 0xd1, 0xdb, 0x90, 0x19, 0x91, 0x68, 0xf0, 0xab, 0x89, 0x9b, 0x8f, 0x10, 0x0f, 0x73, 0x14,
-	0xf3, 0x31, 0xc7, 0x5c, 0x5a, 0x3e, 0xc0, 0xc8, 0x96, 0xfa, 0x77, 0x69, 0x58, 0x6a, 0xf9, 0xfe,
-	0xd8, 0x70, 0xcd, 0x30, 0xaa, 0xfb, 0xe6, 0xc5, 0xa8, 0x2e, 0xf1, 0xa5, 0xea, 0xa2, 0xc8, 0xc5,
-	0x32, 0xa3, 0xbc, 0x59, 0xd3, 0xd1, 0xcd, 0xaa, 0xfe, 0x47, 0x2a, 0xac, 0x25, 0xde, 0x8d, 0xb9,
-	0x02, 0x91, 0x23, 0xc6, 0x35, 0x91, 0x5d, 0xf7, 0xd0, 0xa5, 0xc7, 0x2e, 0xcb, 0x5e, 0xb1, 0xd6,
-	0xd6, 0x9e, 0x2b, 0x29, 0xb1, 0x3d, 0x2f, 0x80, 0x30, 0x71, 0xc9, 0x31, 0xd3, 0xd4, 0xd5, 0xda,
-	0x4d, 0x16, 0x85, 0xa5, 0x13, 0x34, 0x75, 0x89, 0x6b, 0xd9, 0xee, 0x00, 0xbd, 0x0e, 0xb9, 0x56,
-	0xaf, 0xb7, 0xcb, 0x53, 0xc8, 0x57, 0x4e, 0x4e, 0x2b, 0x37, 0x2f, 0xa0, 0x78, 0x1d, 0xd9, 0x62,
-	0x20, 0x96, 0x02, 0xb1, 0xf8, 0x2c, 0x01, 0xc4, 0x62, 0x6b, 0x01, 0xc2, 0x9d, 0x7e, 0xad, 0xaf,
-	0x29, 0xd9, 0x04, 0x10, 0xa6, 0xec, 0xaf, 0x3c, 0x6e, 0xff, 0x9c, 0x06, 0xa5, 0x66, 0x9a, 0x64,
-	0x14, 0x30, 0xbe, 0xcc, 0x3a, 0xfb, 0x90, 0x1f, 0xb1, 0x5f, 0x36, 0x09, 0x23, 0xa8, 0x27, 0x89,
-	0x6f, 0xad, 0x33, 0x72, 0x55, 0x4c, 0x1d, 0x52, 0xb3, 0x86, 0xb6, 0xef, 0xdb, 0xd4, 0x15, 0x34,
-	0x1c, 0x69, 0x2a, 0xff, 0x57, 0x0a, 0x6e, 0x26, 0x20, 0xd0, 0x03, 0xc8, 0x78, 0xd4, 0x09, 0xd7,
-	0xf0, 0xce, 0x65, 0x65, 0x62, 0x26, 0x8a, 0x39, 0x12, 0xad, 0x01, 0x18, 0xe3, 0x80, 0x1a, 0xbc,
-	0x7f, 0x51, 0x5c, 0xc3, 0x31, 0x0a, 0x7a, 0x0e, 0x39, 0x9f, 0x98, 0x1e, 0x09, 0xe3, 0xec, 0x0f,
-	0x7f, 0xd2, 0xd1, 0x57, 0x7b, 0x5c, 0x0d, 0x96, 0xea, 0xca, 0x55, 0xc8, 0x09, 0x0a, 0xdb, 0xf6,
-	0x96, 0x11, 0x18, 0xf2, 0x11, 0x81, 0xff, 0x66, 0xbb, 0xc9, 0x70, 0x06, 0xe1, 0x6e, 0x32, 0x9c,
-	0x81, 0xfa, 0x97, 0x69, 0x00, 0xed, 0x45, 0x40, 0x3c, 0xd7, 0x70, 0x1a, 0x35, 0xa4, 0xc5, 0x6e,
-	0x06, 0x31, 0xdb, 0xaf, 0x26, 0xbe, 0x9b, 0x44, 0x12, 0xd5, 0x46, 0x2d, 0xe1, 0x6e, 0xb8, 0x0d,
-	0xf3, 0x63, 0x4f, 0x3e, 0x9f, 0x8b, 0x18, 0x79, 0x17, 0x6f, 0x63, 0x46, 0x43, 0x5a, 0xbc, 0x96,
-	0x73, 0xe9, 0x23, 0x79, 0xac, 0x83, 0x44, 0xd7, 0xc5, 0x4e, 0xbe, 0x69, 0xe8, 0x26, 0x91, 0xb7,
-	0x4a, 0x49, 0x9c, 0xfc, 0x46, 0xad, 0x41, 0xbc, 0x00, 0xe7, 0x4c, 0x83, 0xfd, 0xff, 0xa9, 0xfc,
-	0xdb, 0xdb, 0x00, 0xd3, 0xa9, 0xa1, 0x35, 0xc8, 0x36, 0x36, 0x7a, 0xbd, 0x6d, 0x65, 0x4e, 0x38,
-	0xf0, 0x29, 0x8b, 0x93, 0xd5, 0x3f, 0x4b, 0x43, 0xbe, 0x51, 0x93, 0x57, 0x6e, 0x03, 0x14, 0xee,
-	0x95, 0xf8, 0xd3, 0x0b, 0x79, 0x31, 0xb2, 0xbd, 0x89, 0x74, 0x2c, 0x57, 0x24, 0xbc, 0x4b, 0x4c,
-	0x84, 0x8d, 0x5a, 0xe3, 0x02, 0x08, 0x43, 0x89, 0x48, 0x23, 0xe8, 0xa6, 0x11, 0xfa, 0xf8, 0xb5,
-	0xab, 0x8d, 0x25, 0x52, 0x97, 0x69, 0xdb, 0xc7, 0xc5, 0x50, 0x49, 0xc3, 0xf0, 0xd1, 0xbb, 0xb0,
-	0xec, 0xdb, 0x03, 0xd7, 0x76, 0x07, 0x7a, 0x68, 0x3c, 0xfe, 0x0e, 0x54, 0xbf, 0x71, 0x7e, 0xb6,
-	0xbe, 0xd8, 0x13, 0x2c, 0x69, 0xc3, 0x45, 0x89, 0x6c, 0x70, 0x53, 0xa2, 0x6f, 0xc0, 0x52, 0x4c,
-	0x94, 0x59, 0x51, 0x98, 0x9d, 0x57, 0x8c, 0x23, 0xc9, 0xa7, 0x64, 0x82, 0x4b, 0x91, 0xe0, 0x53,
-	0xc2, 0x6b, 0x33, 0xfb, 0xd4, 0x33, 0x89, 0xee, 0xf1, 0x33, 0xcd, 0x6f, 0xf7, 0x0c, 0x2e, 0x72,
-	0x9a, 0x38, 0xe6, 0xea, 0x33, 0xb8, 0xd9, 0xf1, 0xcc, 0x03, 0xe2, 0x07, 0xc2, 0x14, 0xd2, 0x8a,
-	0x1f, 0xc2, 0x9d, 0xc0, 0xf0, 0x0f, 0xf5, 0x03, 0xdb, 0x0f, 0xa8, 0x37, 0xd1, 0x3d, 0x12, 0x10,
-	0x97, 0xf1, 0x75, 0xfe, 0xb4, 0x2c, 0xcb, 0x89, 0xb7, 0x19, 0x66, 0x4b, 0x40, 0x70, 0x88, 0xd8,
-	0x66, 0x00, 0xb5, 0x05, 0x25, 0x96, 0xc2, 0xc8, 0xa2, 0x1a, 0x9b, 0x3d, 0x38, 0x74, 0xa0, 0x7f,
-	0xee, 0x6b, 0xaa, 0xe0, 0xd0, 0x81, 0xf8, 0xa9, 0x7e, 0x1b, 0x94, 0xa6, 0xed, 0x8f, 0x8c, 0xc0,
-	0x3c, 0x08, 0xeb, 0xa4, 0xa8, 0x09, 0xca, 0x01, 0x31, 0xbc, 0x60, 0x8f, 0x18, 0x81, 0x3e, 0x22,
-	0x9e, 0x4d, 0xad, 0xeb, 0x57, 0x79, 0x39, 0x12, 0xe9, 0x72, 0x09, 0xf5, 0x7f, 0x52, 0x00, 0xd8,
-	0xd8, 0x0f, 0xa3, 0xb5, 0xaf, 0xc1, 0x0d, 0xdf, 0x35, 0x46, 0xfe, 0x01, 0x0d, 0x74, 0xdb, 0x0d,
-	0x88, 0x77, 0x64, 0x38, 0xb2, 0xb8, 0xa3, 0x84, 0x8c, 0x96, 0xa4, 0xa3, 0xb7, 0x01, 0x1d, 0x12,
-	0x32, 0xd2, 0xa9, 0x63, 0xe9, 0x21, 0x53, 0x3c, 0x7c, 0x67, 0xb0, 0xc2, 0x38, 0x1d, 0xc7, 0xea,
-	0x85, 0x74, 0x54, 0x87, 0x35, 0x36, 0x7d, 0xe2, 0x06, 0x9e, 0x4d, 0x7c, 0x7d, 0x9f, 0x7a, 0xba,
-	0xef, 0xd0, 0x63, 0x7d, 0x9f, 0x3a, 0x0e, 0x3d, 0x26, 0x5e, 0x58, 0x37, 0x2b, 0x3b, 0x74, 0xa0,
-	0x09, 0xd0, 0x06, 0xf5, 0x7a, 0x0e, 0x3d, 0xde, 0x08, 0x11, 0x2c, 0xa4, 0x9b, 0xce, 0x39, 0xb0,
-	0xcd, 0xc3, 0x30, 0xa4, 0x8b, 0xa8, 0x7d, 0xdb, 0x3c, 0x44, 0xaf, 0xc3, 0x22, 0x71, 0x08, 0x2f,
-	0x9f, 0x08, 0x54, 0x96, 0xa3, 0x4a, 0x21, 0x91, 0x81, 0xd4, 0x8f, 0x40, 0xd1, 0x5c, 0xd3, 0x9b,
-	0x8c, 0x62, 0x6b, 0xfe, 0x36, 0x20, 0xe6, 0x24, 0x75, 0x87, 0x9a, 0x87, 0xfa, 0xd0, 0x70, 0x8d,
-	0x01, 0x1b, 0x97, 0x78, 0x71, 0x54, 0x18, 0x67, 0x9b, 0x9a, 0x87, 0x3b, 0x92, 0xae, 0xbe, 0x0b,
-	0xd0, 0x1b, 0x79, 0xc4, 0xb0, 0x3a, 0x2c, 0x9a, 0x60, 0xa6, 0xe3, 0x2d, 0xdd, 0x92, 0xef, 0xb9,
-	0xd4, 0x93, 0x47, 0x5d, 0x11, 0x8c, 0x66, 0x44, 0x57, 0x7f, 0x1e, 0x6e, 0x76, 0x1d, 0xc3, 0xe4,
-	0xdf, 0x36, 0x74, 0xa3, 0x27, 0x34, 0xf4, 0x04, 0x72, 0x02, 0x2a, 0x57, 0x32, 0xf1, 0xb8, 0x4d,
-	0xfb, 0xdc, 0x9a, 0xc3, 0x12, 0x5f, 0x2f, 0x01, 0x4c, 0xf5, 0xa8, 0xff, 0x98, 0x82, 0x42, 0xa4,
-	0x1f, 0x55, 0xc4, 0xcb, 0x50, 0xe0, 0x19, 0xb6, 0x2b, 0x33, 0xfe, 0x02, 0x8e, 0x93, 0x50, 0x0b,
-	0x8a, 0xa3, 0x48, 0xfa, 0xca, 0x78, 0x2e, 0x61, 0xd4, 0x38, 0x2e, 0x8b, 0xde, 0x83, 0x42, 0xf8,
-	0x80, 0x1e, 0x7a, 0xd8, 0xab, 0xdf, 0xdb, 0xa7, 0xf0, 0xb0, 0x90, 0xea, 0x91, 0x91, 0x63, 0x33,
-	0x9f, 0x93, 0x89, 0x0a, 0xa9, 0x58, 0x92, 0xd4, 0x6f, 0x02, 0x7c, 0x8b, 0xda, 0x6e, 0x9f, 0x1e,
-	0x12, 0x97, 0xbf, 0x0a, 0xb3, 0x94, 0x92, 0x84, 0x86, 0x96, 0x2d, 0x5e, 0x29, 0x10, 0xab, 0x14,
-	0x3d, 0x8e, 0x8a, 0xa6, 0xfa, 0x17, 0x69, 0xc8, 0x61, 0x4a, 0x83, 0x46, 0x0d, 0x55, 0x20, 0x27,
-	0x5d, 0x09, 0xbf, 0xa2, 0xea, 0x85, 0xf3, 0xb3, 0xf5, 0xac, 0xf0, 0x21, 0x59, 0x93, 0x3b, 0x8f,
-	0x98, 0x93, 0x4f, 0x5f, 0xe6, 0xe4, 0xd1, 0x03, 0x28, 0x49, 0x90, 0x7e, 0x60, 0xf8, 0x07, 0x22,
-	0xbf, 0xab, 0x2f, 0x9d, 0x9f, 0xad, 0x83, 0x40, 0x6e, 0x19, 0xfe, 0x01, 0x06, 0x81, 0x66, 0xbf,
-	0x91, 0x06, 0xc5, 0x8f, 0xa9, 0xed, 0xea, 0x01, 0x9f, 0x84, 0xac, 0x45, 0x26, 0x2e, 0xf5, 0x74,
-	0xaa, 0xf2, 0x03, 0x0a, 0xf8, 0x78, 0x3a, 0x79, 0x0d, 0x16, 0x3d, 0x4a, 0x03, 0xe1, 0xd9, 0x6c,
-	0xea, 0xca, 0x32, 0x47, 0x25, 0xb1, 0xfa, 0x4d, 0x69, 0x80, 0x25, 0x0e, 0x97, 0xbc, 0x58, 0x0b,
-	0x3d, 0x80, 0x15, 0xc7, 0xf0, 0x03, 0x9d, 0xbb, 0x44, 0x6b, 0xaa, 0x2d, 0xc7, 0x8d, 0x8f, 0x18,
-	0x6f, 0x83, 0xb3, 0x42, 0x09, 0xf5, 0x1f, 0x52, 0x50, 0x64, 0x93, 0xb1, 0xf7, 0x6d, 0x93, 0xc5,
-	0x81, 0x5f, 0x3c, 0x3c, 0xb9, 0x0d, 0xf3, 0xa6, 0xef, 0x49, 0xa3, 0xf2, 0xfb, 0xb9, 0xd1, 0xc3,
-	0x98, 0xd1, 0xd0, 0x47, 0x90, 0x93, 0xe5, 0x16, 0x11, 0x99, 0xa8, 0xd7, 0x47, 0xac, 0xd2, 0x36,
-	0x52, 0x8e, 0x6f, 0xf7, 0xe9, 0xe8, 0xc4, 0x3d, 0x81, 0xe3, 0x24, 0x74, 0x0b, 0xd2, 0xa6, 0x30,
-	0x97, 0xfc, 0x42, 0xa7, 0xd1, 0xc6, 0x69, 0xd3, 0x55, 0x7f, 0x94, 0x82, 0xc5, 0xa9, 0x4f, 0x60,
-	0x3b, 0xe0, 0x0e, 0x14, 0xfc, 0xf1, 0x9e, 0x3f, 0xf1, 0x03, 0x32, 0x0c, 0x5f, 0xbc, 0x23, 0x02,
-	0x6a, 0x41, 0xc1, 0x70, 0x06, 0xd4, 0xb3, 0x83, 0x83, 0xa1, 0x4c, 0x64, 0x93, 0xa3, 0x89, 0xb8,
-	0xce, 0x6a, 0x2d, 0x14, 0xc1, 0x53, 0xe9, 0x30, 0x34, 0x10, 0x9f, 0x45, 0xf0, 0xd0, 0xe0, 0x35,
-	0x28, 0x39, 0xc6, 0x90, 0xd7, 0x9f, 0x02, 0x7b, 0x48, 0xc2, 0xc3, 0x20, 0x69, 0x7d, 0x7b, 0x48,
-	0x54, 0x15, 0x0a, 0x91, 0x32, 0xb4, 0x0c, 0xc5, 0x9a, 0xd6, 0xd3, 0x1f, 0x3e, 0x7a, 0xa2, 0x6f,
-	0x36, 0x76, 0x94, 0x39, 0x19, 0xbe, 0xfe, 0x69, 0x0a, 0x16, 0xa5, 0xc7, 0x92, 0x29, 0xc1, 0xeb,
-	0xb0, 0xe0, 0x19, 0xfb, 0x41, 0x98, 0xb4, 0x64, 0xc4, 0xae, 0x66, 0x97, 0x00, 0x4b, 0x5a, 0x18,
-	0x2b, 0x39, 0x69, 0x89, 0x7d, 0x83, 0x31, 0x7f, 0xe5, 0x37, 0x18, 0x99, 0xff, 0x97, 0x6f, 0x30,
-	0xd4, 0x5f, 0x03, 0xd8, 0xb0, 0x1d, 0xd2, 0x17, 0xa5, 0xaa, 0xa4, 0x14, 0x94, 0x85, 0x79, 0xb2,
-	0x14, 0x1a, 0x86, 0x79, 0xad, 0x26, 0x66, 0x34, 0xc6, 0x1a, 0xd8, 0x96, 0x3c, 0x8c, 0x9c, 0xb5,
-	0xc9, 0x58, 0x03, 0xdb, 0x8a, 0x9e, 0xfd, 0x32, 0xd7, 0x3c, 0xfb, 0xa9, 0xcb, 0xb0, 0x88, 0x45,
-	0x8d, 0x4d, 0x8c, 0x41, 0x3d, 0x4d, 0xc1, 0xb2, 0x8c, 0x77, 0x23, 0x97, 0xfd, 0x55, 0x28, 0x88,
-	0xd0, 0x77, 0x9a, 0x04, 0xf2, 0x0f, 0x11, 0x04, 0xae, 0xd5, 0xc4, 0x79, 0xc1, 0x6e, 0x59, 0x68,
-	0x1d, 0x8a, 0x12, 0x1a, 0xfb, 0xbc, 0x0b, 0x04, 0xa9, 0xcd, 0xe6, 0xf3, 0x0e, 0x64, 0xf6, 0x6d,
-	0x87, 0xc8, 0x9d, 0x9f, 0xe8, 0x11, 0xa6, 0x16, 0xd9, 0x9a, 0xc3, 0x1c, 0x5d, 0xcf, 0x87, 0xc5,
-	0x3d, 0xf5, 0x5f, 0x52, 0xbc, 0xc4, 0xcc, 0x52, 0xd5, 0xf8, 0xf8, 0x44, 0xd6, 0x3a, 0x33, 0x3e,
-	0x81, 0x63, 0xe3, 0x13, 0x6c, 0x31, 0x3e, 0x09, 0x8d, 0x8f, 0x4f, 0x90, 0x7e, 0xf2, 0xf1, 0xa1,
-	0x0f, 0x60, 0x41, 0x96, 0x2a, 0xa5, 0xab, 0x7b, 0x2d, 0x71, 0x67, 0xc4, 0x2d, 0xbd, 0x35, 0x87,
-	0x43, 0x99, 0xd8, 0xf4, 0xb6, 0xe1, 0x56, 0xdd, 0x31, 0xcc, 0x43, 0xc7, 0xf6, 0x03, 0x62, 0xc5,
-	0x3d, 0xd0, 0x23, 0xc8, 0x5d, 0x88, 0x73, 0xaf, 0x2a, 0xa2, 0x4a, 0xa4, 0xfa, 0xef, 0x29, 0x28,
-	0x6d, 0x11, 0xc3, 0x09, 0x0e, 0xa6, 0x95, 0xaa, 0x80, 0xf8, 0x81, 0xbc, 0x1f, 0xf9, 0x6f, 0xf4,
-	0x75, 0xc8, 0x47, 0x61, 0xd0, 0xb5, 0xcf, 0x81, 0x11, 0x14, 0x3d, 0x86, 0x05, 0x36, 0x76, 0x3a,
-	0x0e, 0xf3, 0xab, 0xab, 0x5e, 0x9a, 0x24, 0x92, 0x5d, 0x5a, 0x1e, 0xe1, 0x71, 0x0f, 0xb7, 0x53,
-	0x16, 0x87, 0x4d, 0xf4, 0xb3, 0x50, 0xe2, 0x0f, 0x25, 0x61, 0x98, 0x97, 0xbd, 0x4e, 0x67, 0x51,
-	0xbc, 0x75, 0x8a, 0x10, 0xef, 0x8f, 0xd2, 0xb0, 0xb2, 0x63, 0x4c, 0xf6, 0x88, 0x74, 0x43, 0xc4,
-	0xc2, 0xc4, 0xa4, 0x9e, 0x85, 0xba, 0x71, 0xf7, 0x75, 0xc5, 0xd3, 0x69, 0x92, 0x70, 0xb2, 0x17,
-	0x0b, 0x73, 0xbe, 0x74, 0x2c, 0xe7, 0x5b, 0x81, 0xac, 0x4b, 0x5d, 0x93, 0x48, 0xdf, 0x26, 0x1a,
-	0xea, 0xef, 0xa4, 0xe2, 0xbe, 0xab, 0x1c, 0x3d, 0x6b, 0xf2, 0xa2, 0x57, 0x9b, 0x06, 0x51, 0x77,
-	0xe8, 0x23, 0x28, 0xf7, 0xb4, 0x06, 0xd6, 0xfa, 0xf5, 0xce, 0xb7, 0xf5, 0x5e, 0x6d, 0xbb, 0x57,
-	0x7b, 0xf4, 0x40, 0xef, 0x76, 0xb6, 0xbf, 0xf3, 0xf0, 0xf1, 0x83, 0xaf, 0x2b, 0xa9, 0x72, 0xe5,
-	0xe4, 0xb4, 0x72, 0xa7, 0x5d, 0x6b, 0x6c, 0x8b, 0x13, 0xb7, 0x47, 0x5f, 0xf4, 0x0c, 0xc7, 0x37,
-	0x1e, 0x3d, 0xe8, 0x52, 0x67, 0xc2, 0x30, 0xe8, 0x6b, 0x80, 0x36, 0x34, 0xdc, 0xd6, 0xfa, 0x7a,
-	0xe8, 0x20, 0x1b, 0xf5, 0x86, 0x92, 0x16, 0x99, 0xd4, 0x06, 0xf1, 0x5c, 0x12, 0xd4, 0xb4, 0xde,
-	0xc3, 0x47, 0x4f, 0x1a, 0xf5, 0x06, 0x3b, 0xe3, 0xa5, 0xf8, 0x6d, 0x19, 0x0f, 0x02, 0x52, 0x97,
-	0x06, 0x01, 0xd3, 0x58, 0x22, 0x7d, 0x49, 0x2c, 0xb1, 0x01, 0x2b, 0xa6, 0x47, 0x7d, 0x5f, 0x67,
-	0xe9, 0x09, 0xb1, 0x66, 0x12, 0xa0, 0x2f, 0x9d, 0x9f, 0xad, 0xdf, 0x68, 0x30, 0x7e, 0x8f, 0xb3,
-	0xa5, 0xfa, 0x1b, 0x66, 0x8c, 0xc4, 0x7b, 0x52, 0x7f, 0x30, 0xcf, 0x22, 0x3d, 0xfb, 0xc8, 0x76,
-	0xc8, 0x80, 0xf8, 0xe8, 0x19, 0x2c, 0x9b, 0x1e, 0xb1, 0x58, 0xde, 0x61, 0x38, 0xf1, 0x6f, 0x92,
-	0x7f, 0x26, 0x31, 0xe8, 0x8a, 0x04, 0xab, 0x8d, 0x48, 0xaa, 0x37, 0x22, 0x26, 0x5e, 0x32, 0x2f,
-	0xb4, 0xd1, 0xc7, 0xb0, 0xec, 0x13, 0xc7, 0x76, 0xc7, 0x2f, 0x74, 0x93, 0xba, 0x01, 0x79, 0x11,
-	0x3e, 0xe7, 0x5d, 0xa7, 0xb7, 0xa7, 0x6d, 0x33, 0xa9, 0x86, 0x10, 0xaa, 0xa3, 0xf3, 0xb3, 0xf5,
-	0xa5, 0x8b, 0x34, 0xbc, 0x24, 0x35, 0xcb, 0x76, 0xf9, 0x00, 0x96, 0x2e, 0x8e, 0x06, 0xad, 0x48,
-	0x47, 0xc3, 0xfd, 0x55, 0xe4, 0x48, 0xee, 0x40, 0xde, 0x23, 0x03, 0xdb, 0x0f, 0x3c, 0x61, 0x66,
-	0xc6, 0x89, 0x28, 0x68, 0x15, 0x72, 0xb1, 0x2f, 0x4e, 0x18, 0x4f, 0xb6, 0x99, 0x07, 0x11, 0x1f,
-	0x93, 0x95, 0x7f, 0x05, 0x66, 0xc6, 0xc2, 0x0e, 0x9d, 0x65, 0xfb, 0xc6, 0x9e, 0xec, 0x2c, 0x8f,
-	0xc3, 0x26, 0xdb, 0xcb, 0x63, 0x3f, 0x0a, 0x20, 0xf9, 0x6f, 0x46, 0xe3, 0x91, 0x8e, 0xfc, 0xb4,
-	0x8e, 0xc7, 0x32, 0xe1, 0x17, 0xbc, 0x99, 0xd8, 0x17, 0xbc, 0x2b, 0x90, 0x75, 0xc8, 0x11, 0x71,
-	0x44, 0x8c, 0x81, 0x45, 0xe3, 0xde, 0x03, 0x28, 0x85, 0x9f, 0x8a, 0xf2, 0x6f, 0x46, 0xf2, 0x90,
-	0xe9, 0xd7, 0x7a, 0x4f, 0x95, 0x39, 0x04, 0x90, 0x13, 0x7b, 0x5c, 0x3c, 0x42, 0x36, 0x3a, 0xed,
-	0x8d, 0xd6, 0xa6, 0x92, 0xbe, 0xf7, 0xbb, 0x19, 0x28, 0x44, 0xcf, 0x60, 0xec, 0x4e, 0x6b, 0x6b,
-	0xcf, 0xc3, 0x43, 0x12, 0xd1, 0xdb, 0xe4, 0x18, 0xbd, 0x36, 0x2d, 0xa0, 0x7d, 0x24, 0xde, 0xfd,
-	0x23, 0x76, 0x58, 0x3c, 0x7b, 0x03, 0xf2, 0xb5, 0x5e, 0xaf, 0xb5, 0xd9, 0xd6, 0x9a, 0xca, 0xa7,
-	0xa9, 0xf2, 0x97, 0x4e, 0x4e, 0x2b, 0x37, 0x22, 0x50, 0xcd, 0x17, 0xdb, 0x92, 0xa3, 0x1a, 0x0d,
-	0xad, 0xdb, 0xd7, 0x9a, 0xca, 0x27, 0xe9, 0x59, 0x14, 0x2f, 0x08, 0xf1, 0xef, 0x99, 0x0a, 0x5d,
-	0xac, 0x75, 0x6b, 0x98, 0x75, 0xf8, 0x69, 0x5a, 0xd4, 0xf5, 0xa6, 0x3d, 0x7a, 0x64, 0x64, 0x78,
-	0xac, 0xcf, 0xb5, 0xf0, 0xb3, 0xc2, 0x4f, 0xe6, 0xc5, 0x87, 0x2d, 0xd3, 0x37, 0x3d, 0x62, 0x58,
-	0x13, 0xd6, 0x1b, 0x7f, 0x4c, 0xe5, 0x6a, 0xe6, 0x67, 0x7a, 0xeb, 0x31, 0x1f, 0xc6, 0xb4, 0xa8,
-	0xb0, 0x80, 0x77, 0xdb, 0x6d, 0x06, 0xfa, 0x24, 0x33, 0x33, 0x3b, 0x3c, 0x76, 0x59, 0xb2, 0x8f,
-	0xee, 0x42, 0x3e, 0x7c, 0x6b, 0x55, 0x3e, 0xcd, 0xcc, 0x0c, 0xa8, 0x11, 0x3e, 0x14, 0xf3, 0x0e,
-	0xb7, 0x76, 0xfb, 0xfc, 0xab, 0xc7, 0x4f, 0xb2, 0xb3, 0x1d, 0x1e, 0x8c, 0x03, 0x8b, 0x1e, 0xbb,
-	0xec, 0x34, 0xcb, 0x12, 0xe2, 0xa7, 0x59, 0xe1, 0x25, 0x22, 0x8c, 0xac, 0x1f, 0xbe, 0x01, 0x79,
-	0xac, 0x7d, 0x4b, 0x7c, 0x20, 0xf9, 0x49, 0x6e, 0x46, 0x0f, 0x26, 0x1f, 0x13, 0x93, 0xf5, 0x56,
-	0x81, 0x1c, 0xd6, 0x76, 0x3a, 0xcf, 0x34, 0xe5, 0xf7, 0x73, 0x33, 0x7a, 0x30, 0x19, 0x52, 0xfe,
-	0xc1, 0x57, 0xbe, 0x83, 0xbb, 0x5b, 0x35, 0xbe, 0x28, 0xb3, 0x7a, 0x3a, 0xde, 0xe8, 0xc0, 0x70,
-	0x89, 0x35, 0xfd, 0xb8, 0x27, 0x62, 0xdd, 0xfb, 0x05, 0xc8, 0x87, 0x31, 0x35, 0x5a, 0x83, 0xdc,
-	0xf3, 0x0e, 0x7e, 0xaa, 0x61, 0x65, 0x4e, 0x58, 0x39, 0xe4, 0x3c, 0x17, 0xd9, 0x50, 0x05, 0x16,
-	0x76, 0x6a, 0xed, 0xda, 0xa6, 0x86, 0xc3, 0xfa, 0x7f, 0x08, 0x90, 0x81, 0x61, 0x59, 0x91, 0x1d,
-	0x44, 0x3a, 0xeb, 0xab, 0x3f, 0xfc, 0x6c, 0x6d, 0xee, 0xc7, 0x9f, 0xad, 0xcd, 0x7d, 0x72, 0xbe,
-	0x96, 0xfa, 0xe1, 0xf9, 0x5a, 0xea, 0x6f, 0xcf, 0xd7, 0x52, 0xff, 0x76, 0xbe, 0x96, 0xda, 0xcb,
-	0xf1, 0xeb, 0xe6, 0xf1, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x62, 0x4d, 0x1b, 0x7b, 0x33,
-	0x00, 0x00,
+	0x56, 0xb6, 0x64, 0x49, 0x96, 0x9e, 0x64, 0xbb, 0x9c, 0xed, 0xed, 0x71, 0x6b, 0x7a, 0x6c, 0x4d,
+	0xcd, 0xcc, 0xce, 0x6c, 0xef, 0xa0, 0xfe, 0x9b, 0x9d, 0xe8, 0x99, 0x61, 0x76, 0x46, 0x7f, 0x6e,
+	0x6b, 0xdb, 0x96, 0x14, 0x29, 0xb9, 0x7b, 0x97, 0x08, 0x28, 0xca, 0x55, 0x69, 0xb9, 0xc6, 0xa5,
+	0xca, 0xa2, 0xaa, 0x64, 0xb7, 0x58, 0x08, 0xe6, 0x04, 0x84, 0x6f, 0x5c, 0x96, 0xdd, 0x20, 0x1c,
+	0x41, 0x04, 0xdc, 0x38, 0x70, 0xe0, 0xc0, 0xc2, 0x69, 0x88, 0x20, 0x88, 0x0d, 0x2e, 0xb0, 0x10,
+	0x01, 0x1b, 0x40, 0x18, 0xc6, 0x07, 0x6e, 0x04, 0x5c, 0x08, 0x2e, 0x1c, 0x88, 0xfc, 0xa9, 0x52,
+	0x59, 0x5d, 0xb6, 0x67, 0x76, 0xb9, 0xd8, 0xca, 0xf7, 0xbe, 0xf7, 0x32, 0xf3, 0x65, 0xe6, 0xcb,
+	0xf7, 0x5e, 0x16, 0xdc, 0x19, 0x5a, 0xc1, 0xc1, 0x78, 0xaf, 0x6a, 0xd0, 0xd1, 0x5d, 0x93, 0x1a,
+	0x87, 0xc4, 0xbb, 0xeb, 0x1f, 0xeb, 0xde, 0xe8, 0xd0, 0x0a, 0xee, 0xea, 0xae, 0x75, 0x37, 0x98,
+	0xb8, 0xc4, 0xaf, 0xba, 0x1e, 0x0d, 0x28, 0x42, 0x02, 0x50, 0x0d, 0x01, 0xd5, 0xa3, 0xfb, 0xe5,
+	0x8d, 0x21, 0xa5, 0x43, 0x9b, 0xdc, 0xe5, 0x88, 0xbd, 0xf1, 0xfe, 0xdd, 0xc0, 0x1a, 0x11, 0x3f,
+	0xd0, 0x47, 0xae, 0x10, 0x2a, 0xaf, 0xcf, 0x02, 0xcc, 0xb1, 0xa7, 0x07, 0x16, 0x75, 0x2e, 0xe3,
+	0x1f, 0x7b, 0xba, 0xeb, 0x12, 0x4f, 0x76, 0x5a, 0x5e, 0x1d, 0xd2, 0x21, 0xe5, 0x3f, 0xef, 0xb2,
+	0x5f, 0x82, 0xaa, 0x6e, 0xc0, 0xc2, 0x53, 0xe2, 0xf9, 0x16, 0x75, 0xd0, 0x2a, 0x64, 0x2d, 0xc7,
+	0x24, 0xcf, 0xd7, 0x52, 0x95, 0xd4, 0x5b, 0x19, 0x2c, 0x1a, 0xea, 0x3d, 0x80, 0x36, 0xfb, 0xd1,
+	0x72, 0x02, 0x6f, 0x82, 0x14, 0x98, 0x3f, 0x24, 0x13, 0x8e, 0x28, 0x60, 0xf6, 0x93, 0x51, 0x8e,
+	0x74, 0x7b, 0x2d, 0x2d, 0x28, 0x47, 0xba, 0xad, 0x7e, 0x9e, 0x82, 0x62, 0xcd, 0x71, 0x68, 0xc0,
+	0x47, 0xe7, 0x23, 0x04, 0x19, 0x47, 0x1f, 0x11, 0x29, 0xc4, 0x7f, 0xa3, 0x06, 0xe4, 0x6c, 0x7d,
+	0x8f, 0xd8, 0xfe, 0x5a, 0xba, 0x32, 0xff, 0x56, 0xf1, 0xc1, 0xd7, 0xab, 0x2f, 0x9a, 0xa4, 0x1a,
+	0x53, 0x52, 0xdd, 0xe6, 0x68, 0x3e, 0x08, 0x2c, 0x45, 0xd1, 0x37, 0x61, 0xc1, 0x72, 0x4c, 0xcb,
+	0x20, 0xfe, 0x5a, 0x86, 0x6b, 0x59, 0x4f, 0xd2, 0x32, 0x1d, 0x7d, 0x3d, 0xf3, 0xa3, 0xb3, 0x8d,
+	0x39, 0x1c, 0x0a, 0x95, 0xdf, 0x83, 0x62, 0x4c, 0x6d, 0xc2, 0xdc, 0x56, 0x21, 0x7b, 0xa4, 0xdb,
+	0x63, 0x22, 0x67, 0x27, 0x1a, 0xef, 0xa7, 0x1f, 0xa5, 0xd4, 0x8f, 0x61, 0xb5, 0xa3, 0x8f, 0x88,
+	0xf9, 0x98, 0x38, 0xc4, 0xb3, 0x0c, 0x4c, 0x7c, 0x3a, 0xf6, 0x0c, 0xc2, 0xe6, 0x7a, 0x68, 0x39,
+	0x66, 0x38, 0x57, 0xf6, 0x3b, 0x59, 0x8b, 0xda, 0x80, 0x97, 0x9a, 0x96, 0x6f, 0x78, 0x24, 0x20,
+	0x5f, 0x5a, 0xc9, 0x7c, 0xa8, 0xe4, 0x2c, 0x05, 0xcb, 0xb3, 0xd2, 0xbf, 0x00, 0x37, 0x98, 0x89,
+	0x4d, 0xcd, 0x93, 0x14, 0xcd, 0x77, 0x89, 0xc1, 0x95, 0x15, 0x1f, 0xbc, 0x95, 0x64, 0xa1, 0xa4,
+	0x99, 0x6c, 0xcd, 0xe1, 0x15, 0xae, 0x26, 0x24, 0xf4, 0x5d, 0x62, 0x20, 0x03, 0x6e, 0x9a, 0x72,
+	0xd0, 0x33, 0xea, 0xd3, 0x5c, 0x7d, 0xe2, 0x32, 0x5e, 0x32, 0xcd, 0xad, 0x39, 0xbc, 0x1a, 0x2a,
+	0x8b, 0x77, 0x52, 0x07, 0xc8, 0x87, 0xba, 0xd5, 0xef, 0xa7, 0xa0, 0x10, 0x32, 0x7d, 0xf4, 0x35,
+	0x28, 0x38, 0xba, 0x43, 0x35, 0xc3, 0x1d, 0xfb, 0x7c, 0x42, 0xf3, 0xf5, 0xd2, 0xf9, 0xd9, 0x46,
+	0xbe, 0xa3, 0x3b, 0xb4, 0xd1, 0xdb, 0xf5, 0x71, 0x9e, 0xb1, 0x1b, 0xee, 0xd8, 0x47, 0xaf, 0x42,
+	0x69, 0x44, 0x46, 0xd4, 0x9b, 0x68, 0x7b, 0x93, 0x80, 0xf8, 0xd2, 0x6c, 0x45, 0x41, 0xab, 0x33,
+	0x12, 0xfa, 0x10, 0x16, 0x86, 0x62, 0x48, 0x6b, 0xf3, 0x7c, 0xfb, 0xbc, 0x96, 0x34, 0xfa, 0x99,
+	0x51, 0xe3, 0x50, 0x46, 0xfd, 0x5e, 0x1a, 0x56, 0x23, 0x2a, 0xf9, 0x95, 0xb1, 0xe5, 0x91, 0x11,
+	0x71, 0x02, 0x1f, 0x7d, 0x03, 0x72, 0xb6, 0x35, 0xb2, 0x02, 0x5f, 0xda, 0xfc, 0x95, 0x24, 0xb5,
+	0xd1, 0xa4, 0xb0, 0x04, 0xa3, 0x1a, 0x94, 0x3c, 0xe2, 0x13, 0xef, 0x48, 0xec, 0x78, 0x69, 0xd1,
+	0x6b, 0x84, 0x2f, 0x88, 0xa0, 0xf7, 0x01, 0xfc, 0x63, 0xdd, 0x95, 0x53, 0x9e, 0xe7, 0x0a, 0x5e,
+	0xae, 0x0a, 0xbf, 0x50, 0x0d, 0xfd, 0x42, 0xb5, 0xed, 0x04, 0xef, 0xbe, 0xf3, 0x94, 0xed, 0x1f,
+	0x5c, 0x60, 0x70, 0x61, 0x8d, 0x2d, 0x58, 0x91, 0x06, 0x63, 0x34, 0xd7, 0x72, 0x88, 0xcf, 0x8e,
+	0xd5, 0xb5, 0x2a, 0x14, 0x21, 0xd5, 0x8f, 0x84, 0xd4, 0x4d, 0xc8, 0xf7, 0x6c, 0x3d, 0xd8, 0xa7,
+	0xde, 0x08, 0xa9, 0x50, 0xd2, 0x3d, 0xe3, 0xc0, 0x0a, 0x88, 0x11, 0x8c, 0xbd, 0xd0, 0x07, 0x5c,
+	0xa0, 0xa1, 0x9b, 0x90, 0xa6, 0x62, 0xba, 0x85, 0x7a, 0xee, 0xfc, 0x6c, 0x23, 0xdd, 0xed, 0xe3,
+	0x34, 0xf5, 0xd5, 0x0f, 0x60, 0xa5, 0x67, 0x8f, 0x87, 0x96, 0xd3, 0x24, 0xbe, 0xe1, 0x59, 0x2e,
+	0x9b, 0x23, 0x3b, 0x1b, 0xcc, 0x93, 0x86, 0x67, 0x83, 0xfd, 0x8e, 0x1c, 0x4c, 0x7a, 0xea, 0x60,
+	0xd4, 0xdf, 0x4a, 0xc3, 0x4a, 0xcb, 0x19, 0x5a, 0x0e, 0x89, 0x4b, 0xbf, 0x01, 0x4b, 0x84, 0x13,
+	0xb5, 0x23, 0xe1, 0xf4, 0xa4, 0x9e, 0x45, 0x41, 0x0d, 0x3d, 0x61, 0x7b, 0xc6, 0x3b, 0xdd, 0x4f,
+	0x5a, 0x84, 0x17, 0xb4, 0x27, 0xfa, 0xa8, 0x16, 0x2c, 0xb8, 0x7c, 0x12, 0xbe, 0xdc, 0x64, 0x6f,
+	0x24, 0xe9, 0x7a, 0x61, 0x9e, 0xa1, 0xab, 0x92, 0xb2, 0x3f, 0x8b, 0xab, 0xfa, 0xeb, 0x34, 0x2c,
+	0x77, 0xa8, 0x79, 0xc1, 0x0e, 0x65, 0xc8, 0x1f, 0x50, 0x3f, 0x88, 0xb9, 0xe5, 0xa8, 0x8d, 0x1e,
+	0x41, 0xde, 0x95, 0xcb, 0x27, 0xf7, 0xe0, 0xed, 0xe4, 0x21, 0x0b, 0x0c, 0x8e, 0xd0, 0xe8, 0x03,
+	0x28, 0x84, 0x07, 0x37, 0xdc, 0x7d, 0xd7, 0x6c, 0xdf, 0x29, 0x1e, 0x7d, 0x08, 0x39, 0xb1, 0x08,
+	0x72, 0xd3, 0xbd, 0xf1, 0x85, 0x6c, 0x8e, 0xa5, 0x10, 0x7a, 0x0c, 0xf9, 0xc0, 0xf6, 0x35, 0xcb,
+	0xd9, 0xa7, 0x6b, 0x59, 0xae, 0x60, 0x23, 0xd1, 0xd5, 0x51, 0x93, 0x0c, 0xb6, 0xfb, 0x6d, 0x67,
+	0x9f, 0xd6, 0x8b, 0xe7, 0x67, 0x1b, 0x0b, 0xb2, 0x81, 0x17, 0x02, 0xdb, 0x67, 0x3f, 0xd0, 0x6d,
+	0xc8, 0xec, 0x5b, 0xae, 0xbf, 0x96, 0xab, 0xa4, 0xde, 0xca, 0xd7, 0xf3, 0xe7, 0x67, 0x1b, 0x99,
+	0xcd, 0x76, 0xaf, 0x8f, 0x39, 0x55, 0xfd, 0x9d, 0x14, 0x14, 0x63, 0x3a, 0xd0, 0x2b, 0x00, 0x81,
+	0x37, 0xf6, 0x03, 0xcd, 0xa3, 0x34, 0xe0, 0xa6, 0x2c, 0xe1, 0x02, 0xa7, 0x60, 0x4a, 0x03, 0x54,
+	0x85, 0x1b, 0x06, 0xf1, 0x02, 0xcd, 0xf2, 0xfd, 0x31, 0xf1, 0x34, 0x7f, 0xbc, 0xf7, 0x09, 0x31,
+	0x02, 0x6e, 0xd6, 0x12, 0x5e, 0x61, 0xac, 0x36, 0xe7, 0xf4, 0x05, 0x03, 0x3d, 0x84, 0x9b, 0x71,
+	0xbc, 0x3b, 0xde, 0xb3, 0x2d, 0x43, 0x63, 0x4b, 0x3d, 0xcf, 0x45, 0x6e, 0x4c, 0x45, 0x7a, 0x9c,
+	0xf7, 0x84, 0x4c, 0xd4, 0x9f, 0xa4, 0x40, 0xc1, 0xfa, 0x7e, 0xb0, 0x43, 0x46, 0x7b, 0xc4, 0xeb,
+	0x07, 0x7a, 0x30, 0xf6, 0xd1, 0x4d, 0xc8, 0xd9, 0x44, 0x37, 0x89, 0xc7, 0x07, 0x95, 0xc7, 0xb2,
+	0x85, 0x76, 0x99, 0x97, 0xd1, 0x8d, 0x03, 0x7d, 0xcf, 0xb2, 0xad, 0x60, 0xc2, 0x87, 0xb2, 0x94,
+	0xbc, 0xc1, 0x67, 0x75, 0x56, 0x71, 0x4c, 0x10, 0x5f, 0x50, 0x83, 0xd6, 0x60, 0x61, 0x44, 0x7c,
+	0x5f, 0x1f, 0x12, 0x3e, 0xd2, 0x02, 0x0e, 0x9b, 0xea, 0x07, 0x50, 0x8a, 0xcb, 0xa1, 0x22, 0x2c,
+	0xec, 0x76, 0x9e, 0x74, 0xba, 0xcf, 0x3a, 0xca, 0x1c, 0x5a, 0x86, 0xe2, 0x6e, 0x07, 0xb7, 0x6a,
+	0x8d, 0xad, 0x5a, 0x7d, 0xbb, 0xa5, 0xa4, 0xd0, 0x22, 0x14, 0xa6, 0xcd, 0xb4, 0xfa, 0x27, 0x29,
+	0x00, 0x66, 0x6e, 0x39, 0xa9, 0xf7, 0x21, 0xeb, 0x07, 0x7a, 0x20, 0xf6, 0xec, 0xd2, 0x83, 0xd7,
+	0x2f, 0x5b, 0x61, 0x39, 0x5e, 0xf6, 0x8f, 0x60, 0x21, 0x12, 0x1f, 0x61, 0xfa, 0xc2, 0x08, 0x99,
+	0xfb, 0xd0, 0x4d, 0xd3, 0x93, 0x03, 0xe7, 0xbf, 0xd5, 0x0f, 0x20, 0xcb, 0xa5, 0x2f, 0x0e, 0x37,
+	0x0f, 0x99, 0x26, 0xfb, 0x95, 0x42, 0x05, 0xc8, 0xe2, 0x56, 0xad, 0xf9, 0x1d, 0x25, 0x8d, 0x14,
+	0x28, 0x35, 0xdb, 0xfd, 0x46, 0xb7, 0xd3, 0x69, 0x35, 0x06, 0xad, 0xa6, 0x32, 0xaf, 0xbe, 0x01,
+	0xd9, 0xf6, 0x88, 0x69, 0xbe, 0xcd, 0x0e, 0xc4, 0x3e, 0xf1, 0x88, 0x63, 0x84, 0xe7, 0x6c, 0x4a,
+	0x50, 0x3f, 0x2f, 0x41, 0x76, 0x87, 0x8e, 0x9d, 0x00, 0x3d, 0x88, 0x39, 0xb5, 0xa5, 0xe4, 0x28,
+	0x86, 0x03, 0xab, 0x83, 0x89, 0x4b, 0xa4, 0xd3, 0xbb, 0x09, 0x39, 0x71, 0x74, 0xe4, 0x74, 0x64,
+	0x8b, 0xd1, 0x03, 0xdd, 0x1b, 0x92, 0x40, 0xce, 0x47, 0xb6, 0xd0, 0x5b, 0xec, 0x56, 0xd5, 0x4d,
+	0xea, 0xd8, 0x13, 0x7e, 0xc2, 0xf2, 0xe2, 0xea, 0xc4, 0x44, 0x37, 0xbb, 0x8e, 0x3d, 0xc1, 0x11,
+	0x17, 0x6d, 0x41, 0x69, 0xcf, 0x72, 0x4c, 0x8d, 0xba, 0xe2, 0x22, 0xca, 0x5e, 0x7e, 0x1e, 0xc5,
+	0xa8, 0xea, 0x96, 0x63, 0x76, 0x05, 0x18, 0x17, 0xf7, 0xa6, 0x0d, 0xd4, 0x81, 0xa5, 0x23, 0x6a,
+	0x8f, 0x47, 0x24, 0xd2, 0x95, 0xe3, 0xba, 0xde, 0xbc, 0x5c, 0xd7, 0x53, 0x8e, 0x0f, 0xb5, 0x2d,
+	0x1e, 0xc5, 0x9b, 0xe8, 0x09, 0x2c, 0x06, 0x23, 0x77, 0xdf, 0x8f, 0xd4, 0x2d, 0x70, 0x75, 0x5f,
+	0xbd, 0xc2, 0x60, 0x0c, 0x1e, 0x6a, 0x2b, 0x05, 0xb1, 0x16, 0x7a, 0x0c, 0x45, 0x83, 0x3a, 0xbe,
+	0xe5, 0x07, 0xc4, 0x31, 0x26, 0x6b, 0x79, 0x6e, 0xfb, 0x2b, 0x66, 0xd9, 0x98, 0x82, 0x71, 0x5c,
+	0xb2, 0xfc, 0xc3, 0x79, 0x28, 0xc6, 0x4c, 0x80, 0xfa, 0x50, 0x74, 0x3d, 0xea, 0xea, 0x43, 0x7e,
+	0x2b, 0xcb, 0x45, 0xbd, 0xff, 0x85, 0xcc, 0x57, 0xed, 0x4d, 0x05, 0x71, 0x5c, 0x0b, 0x7a, 0x07,
+	0x4a, 0x0e, 0x75, 0x3c, 0x62, 0x8c, 0x3d, 0xdf, 0x3a, 0x12, 0x8b, 0x9e, 0xaf, 0x2b, 0xe7, 0x67,
+	0x1b, 0xa5, 0x0e, 0x75, 0x70, 0x48, 0xc7, 0x17, 0x50, 0xea, 0x69, 0x1a, 0x8a, 0x31, 0x95, 0xe8,
+	0x0e, 0xe4, 0x71, 0x0f, 0xb7, 0x9f, 0xd6, 0x06, 0x2d, 0x65, 0xae, 0x7c, 0xfb, 0xe4, 0xb4, 0xb2,
+	0xc6, 0xc7, 0x10, 0xef, 0xb6, 0xe7, 0x59, 0x47, 0x6c, 0xe7, 0xbf, 0x05, 0x0b, 0x21, 0x34, 0x55,
+	0x7e, 0xf9, 0xe4, 0xb4, 0xf2, 0xd2, 0x2c, 0x34, 0x86, 0xc4, 0xfd, 0xad, 0x1a, 0x6e, 0x35, 0x95,
+	0x74, 0x32, 0x12, 0xf7, 0x0f, 0x74, 0x8f, 0x98, 0xe8, 0xab, 0x90, 0x93, 0xc0, 0xf9, 0x72, 0xf9,
+	0xe4, 0xb4, 0x72, 0x73, 0x16, 0x38, 0xc5, 0xe1, 0xfe, 0x76, 0xed, 0x69, 0x4b, 0xc9, 0x24, 0xe3,
+	0x70, 0xdf, 0xd6, 0x8f, 0x08, 0x7a, 0x1d, 0xb2, 0x02, 0x96, 0x2d, 0xdf, 0x3a, 0x39, 0xad, 0x7c,
+	0xe5, 0x05, 0x75, 0x0c, 0x55, 0x5e, 0xfb, 0xed, 0x3f, 0x58, 0x9f, 0xfb, 0xf3, 0x3f, 0x5c, 0x57,
+	0x66, 0xd9, 0xe5, 0xff, 0x4d, 0xc1, 0xe2, 0x85, 0x1d, 0x87, 0x54, 0xc8, 0x39, 0xd4, 0xa0, 0xae,
+	0xb8, 0x5c, 0xf3, 0x75, 0x38, 0x3f, 0xdb, 0xc8, 0x75, 0x68, 0x83, 0xba, 0x13, 0x2c, 0x39, 0xe8,
+	0xc9, 0x4c, 0x78, 0xf0, 0xf0, 0x0b, 0x6e, 0xe7, 0xc4, 0x00, 0xe1, 0x23, 0x58, 0x34, 0x3d, 0xeb,
+	0x88, 0x78, 0x9a, 0x41, 0x9d, 0x7d, 0x6b, 0x28, 0x2f, 0xce, 0x72, 0x62, 0x24, 0xcd, 0x81, 0xb8,
+	0x24, 0x04, 0x1a, 0x1c, 0xff, 0x33, 0x84, 0x06, 0x65, 0x17, 0x4a, 0xf1, 0x03, 0xc2, 0x6e, 0x33,
+	0xdf, 0xfa, 0x55, 0x22, 0xe3, 0x47, 0x1e, 0x60, 0xe3, 0x02, 0xa3, 0x88, 0x10, 0xf1, 0x4d, 0xc8,
+	0x8c, 0xa8, 0x29, 0xf4, 0x2c, 0xd6, 0x6f, 0xb0, 0x08, 0xe5, 0x9f, 0xce, 0x36, 0x8a, 0xd4, 0xaf,
+	0x6e, 0x5a, 0x36, 0xd9, 0xa1, 0x26, 0xc1, 0x1c, 0xc0, 0x7c, 0x6d, 0x78, 0x42, 0xe5, 0x6d, 0x20,
+	0x9b, 0xea, 0x0f, 0x52, 0x90, 0x61, 0x4e, 0x0c, 0xbd, 0x0c, 0x99, 0x7a, 0xbb, 0xd3, 0x54, 0xe6,
+	0xca, 0x2b, 0x27, 0xa7, 0x95, 0x45, 0x6e, 0x2d, 0xc6, 0x60, 0x87, 0x01, 0x6d, 0x40, 0xee, 0x69,
+	0x77, 0x7b, 0x77, 0x87, 0xed, 0xbc, 0x1b, 0x27, 0xa7, 0x95, 0xe5, 0x88, 0x2d, 0xec, 0x89, 0x5e,
+	0x81, 0xec, 0x60, 0xa7, 0xb7, 0xd9, 0x57, 0xd2, 0x65, 0x74, 0x72, 0x5a, 0x59, 0x8a, 0xf8, 0x7c,
+	0x3a, 0xe8, 0x55, 0xc8, 0x76, 0x7a, 0xed, 0x5e, 0x4b, 0x99, 0x2f, 0xdf, 0x3c, 0x39, 0xad, 0xa0,
+	0x88, 0xcd, 0x33, 0x9d, 0x9e, 0xe5, 0x92, 0xf2, 0x8a, 0xdc, 0x13, 0x85, 0x88, 0xa7, 0xfe, 0x38,
+	0x05, 0xc5, 0xd8, 0x21, 0x67, 0xdb, 0xba, 0xd9, 0xda, 0xac, 0xed, 0x6e, 0x0f, 0x94, 0xb9, 0xd8,
+	0xb6, 0x8e, 0x41, 0x9a, 0x64, 0x5f, 0x1f, 0xdb, 0xcc, 0xb7, 0x42, 0xa3, 0xdb, 0xe9, 0xb7, 0xfb,
+	0x83, 0x56, 0x67, 0xa0, 0xa4, 0xca, 0x6b, 0x27, 0xa7, 0x95, 0xd5, 0x59, 0xf0, 0xe6, 0xd8, 0xb6,
+	0xd9, 0xc6, 0x6e, 0xd4, 0x1a, 0x5b, 0xfc, 0xa4, 0x4c, 0x37, 0x76, 0x0c, 0xd5, 0xd0, 0x8d, 0x03,
+	0x62, 0xa2, 0xb7, 0xa1, 0xd0, 0x6c, 0x6d, 0xb7, 0x1e, 0xd7, 0xf8, 0x8d, 0x52, 0x7e, 0xe5, 0xe4,
+	0xb4, 0x72, 0xeb, 0xc5, 0xde, 0x6d, 0x32, 0xd4, 0x03, 0x62, 0xce, 0x6c, 0xf0, 0x18, 0x44, 0xfd,
+	0xef, 0x34, 0x2c, 0x62, 0xe2, 0x07, 0xba, 0x17, 0xf4, 0xa8, 0x6d, 0x19, 0x13, 0xd4, 0x83, 0x82,
+	0x41, 0x1d, 0xd3, 0x8a, 0xf9, 0xa6, 0x07, 0x97, 0x04, 0x69, 0x53, 0xa9, 0xb0, 0xd5, 0x08, 0x25,
+	0xf1, 0x54, 0x09, 0xba, 0x0b, 0x59, 0x93, 0xd8, 0xfa, 0x44, 0x46, 0x8b, 0xb7, 0x5e, 0xc8, 0x16,
+	0x9a, 0xb2, 0x50, 0x81, 0x05, 0x8e, 0xe7, 0x66, 0xfa, 0x73, 0x4d, 0x0f, 0x02, 0x32, 0x72, 0x03,
+	0xb1, 0x47, 0x32, 0xb8, 0x38, 0xd2, 0x9f, 0xd7, 0x24, 0x09, 0xdd, 0x87, 0xdc, 0xb1, 0xe5, 0x98,
+	0xf4, 0x58, 0x46, 0x83, 0x57, 0x28, 0x95, 0x40, 0xf5, 0x84, 0x85, 0x41, 0x33, 0xc3, 0x64, 0xdb,
+	0xac, 0xd3, 0xed, 0xb4, 0xc2, 0x6d, 0x26, 0xf9, 0x5d, 0xa7, 0x43, 0x1d, 0xe6, 0x3d, 0xa0, 0xdb,
+	0xd1, 0x36, 0x6b, 0xed, 0xed, 0x5d, 0xcc, 0xb6, 0xda, 0xea, 0xc9, 0x69, 0x45, 0x89, 0x20, 0x9b,
+	0xba, 0x65, 0xb3, 0xf4, 0xe4, 0x16, 0xcc, 0xd7, 0x3a, 0xdf, 0x51, 0xd2, 0x65, 0xe5, 0xe4, 0xb4,
+	0x52, 0x8a, 0xd8, 0x35, 0x67, 0x32, 0xb5, 0xfb, 0x6c, 0xbf, 0xea, 0xdf, 0xcc, 0x43, 0x69, 0xd7,
+	0x35, 0xf5, 0x80, 0x88, 0x53, 0x8a, 0x2a, 0x50, 0x74, 0x75, 0x4f, 0xb7, 0x6d, 0x62, 0x5b, 0xfe,
+	0x48, 0x96, 0x58, 0xe2, 0x24, 0xf4, 0xde, 0x17, 0x35, 0x63, 0x3d, 0xcf, 0x4e, 0xde, 0xf7, 0xff,
+	0x75, 0x23, 0x15, 0x1a, 0x74, 0x17, 0x96, 0xf6, 0xc5, 0x68, 0x35, 0xdd, 0xe0, 0x0b, 0x3b, 0xcf,
+	0x17, 0xb6, 0x9a, 0xb4, 0xb0, 0xf1, 0x61, 0x55, 0xe5, 0x24, 0x6b, 0x5c, 0x0a, 0x2f, 0xee, 0xc7,
+	0x9b, 0xe8, 0x21, 0x2c, 0x8c, 0xa8, 0x63, 0x05, 0xd4, 0xbb, 0x7e, 0x15, 0x42, 0x24, 0xba, 0x03,
+	0x2b, 0x6c, 0x71, 0xc3, 0xf1, 0x70, 0x36, 0x0f, 0x21, 0xd2, 0x78, 0x79, 0xa4, 0x3f, 0x97, 0x1d,
+	0x62, 0x46, 0x46, 0x75, 0xc8, 0x52, 0x8f, 0xc5, 0xa8, 0x39, 0x3e, 0xdc, 0xb7, 0xaf, 0x1d, 0xae,
+	0x68, 0x74, 0x99, 0x0c, 0x16, 0xa2, 0xea, 0xbb, 0xb0, 0x78, 0x61, 0x12, 0x2c, 0x34, 0xeb, 0xd5,
+	0x76, 0xfb, 0x2d, 0x65, 0x0e, 0x95, 0x20, 0xdf, 0xe8, 0x76, 0x06, 0xed, 0xce, 0x2e, 0x8b, 0x2d,
+	0x4b, 0x90, 0xc7, 0xdd, 0xed, 0xed, 0x7a, 0xad, 0xf1, 0x44, 0x49, 0xab, 0x55, 0x28, 0xc6, 0xb4,
+	0xa1, 0x25, 0x80, 0xfe, 0xa0, 0xdb, 0xd3, 0x36, 0xdb, 0xb8, 0x3f, 0x10, 0x91, 0x69, 0x7f, 0x50,
+	0xc3, 0x03, 0x49, 0x48, 0xa9, 0xff, 0x99, 0x0e, 0x57, 0x54, 0x06, 0xa3, 0xf5, 0x8b, 0xc1, 0xe8,
+	0x15, 0x83, 0x97, 0xe1, 0xe8, 0xb4, 0x11, 0x05, 0xa5, 0xef, 0x01, 0xf0, 0x8d, 0x43, 0x4c, 0x4d,
+	0x0f, 0xe4, 0xc2, 0x97, 0x5f, 0x30, 0xf2, 0x20, 0xac, 0x04, 0xe2, 0x82, 0x44, 0xd7, 0x02, 0xf4,
+	0x21, 0x94, 0x0c, 0x3a, 0x72, 0x6d, 0x22, 0x85, 0xe7, 0xaf, 0x15, 0x2e, 0x46, 0xf8, 0x5a, 0x10,
+	0x0f, 0x87, 0x33, 0x17, 0x03, 0xf6, 0xdf, 0x4c, 0x85, 0x96, 0x49, 0x88, 0x80, 0x4b, 0x90, 0xdf,
+	0xed, 0x35, 0x6b, 0x83, 0x76, 0xe7, 0xb1, 0x92, 0x42, 0x00, 0x39, 0x6e, 0xea, 0xa6, 0x92, 0x66,
+	0x91, 0x7b, 0xa3, 0xbb, 0xd3, 0xdb, 0x6e, 0x71, 0x8f, 0x85, 0x56, 0x41, 0x09, 0x8d, 0xad, 0x71,
+	0x43, 0xb6, 0x9a, 0x4a, 0x06, 0xdd, 0x80, 0xe5, 0x88, 0x2a, 0x25, 0xb3, 0xe8, 0x26, 0xa0, 0x88,
+	0x38, 0x55, 0x91, 0x53, 0x7f, 0x1d, 0x96, 0x1b, 0xd4, 0x09, 0x74, 0xcb, 0x89, 0xb2, 0x9a, 0x07,
+	0x6c, 0xd2, 0x92, 0xa4, 0x59, 0xb2, 0x42, 0x56, 0x5f, 0x3e, 0x3f, 0xdb, 0x28, 0x46, 0xd0, 0x76,
+	0x93, 0x87, 0x67, 0xb2, 0x61, 0xb2, 0xf3, 0xeb, 0x5a, 0x26, 0x37, 0x6e, 0xb6, 0xbe, 0x70, 0x7e,
+	0xb6, 0x31, 0xdf, 0x6b, 0x37, 0x31, 0xa3, 0xa1, 0x97, 0xa1, 0x40, 0x9e, 0x5b, 0x81, 0x66, 0xb0,
+	0x5b, 0x8d, 0x19, 0x30, 0x8b, 0xf3, 0x8c, 0xd0, 0xa0, 0x26, 0x51, 0xeb, 0x00, 0x3d, 0xea, 0x05,
+	0xb2, 0xe7, 0x77, 0x20, 0xeb, 0x52, 0x8f, 0xd7, 0x74, 0x2e, 0xad, 0x34, 0x32, 0xb8, 0xd8, 0xa8,
+	0x58, 0x80, 0xd5, 0x1f, 0xcc, 0x03, 0x0c, 0x74, 0xff, 0x50, 0x2a, 0x79, 0x04, 0x85, 0xa8, 0xaa,
+	0x2b, 0x8b, 0x43, 0x57, 0xae, 0x76, 0x04, 0x46, 0x0f, 0xc3, 0xcd, 0x26, 0xf2, 0xb5, 0xc4, 0xb4,
+	0x3a, 0xec, 0x28, 0x29, 0xe5, 0xb9, 0x98, 0x94, 0xb1, 0x20, 0x81, 0x78, 0x9e, 0x5c, 0x79, 0xf6,
+	0x13, 0x35, 0xf8, 0xb5, 0x20, 0x8c, 0x26, 0x23, 0xfe, 0xc4, 0x72, 0xd8, 0xcc, 0x8a, 0x6c, 0xcd,
+	0xe1, 0xa9, 0x1c, 0xfa, 0x08, 0x8a, 0x6c, 0xde, 0x9a, 0xcf, 0x79, 0x32, 0xd8, 0xbf, 0xd4, 0x54,
+	0x42, 0x03, 0x06, 0x77, 0x6a, 0xe5, 0x57, 0x00, 0x74, 0xd7, 0xb5, 0x2d, 0x62, 0x6a, 0x7b, 0x13,
+	0x1e, 0xdd, 0x17, 0x70, 0x41, 0x52, 0xea, 0x13, 0x76, 0x5c, 0x42, 0xb6, 0x1e, 0xf0, 0x88, 0xfd,
+	0x1a, 0x03, 0x4a, 0x74, 0x2d, 0xa8, 0x2b, 0xb0, 0xe4, 0x8d, 0x1d, 0x66, 0x50, 0x39, 0x3a, 0xf5,
+	0x8f, 0xd3, 0xf0, 0x52, 0x87, 0x04, 0xc7, 0xd4, 0x3b, 0xac, 0x05, 0x81, 0x6e, 0x1c, 0x8c, 0x88,
+	0x23, 0x97, 0x2f, 0x96, 0x44, 0xa5, 0x2e, 0x24, 0x51, 0x6b, 0xb0, 0xa0, 0xdb, 0x96, 0xee, 0x13,
+	0x11, 0xfa, 0x15, 0x70, 0xd8, 0x64, 0xa9, 0x1e, 0x4b, 0x1c, 0x89, 0xef, 0x13, 0x51, 0xe9, 0x61,
+	0x03, 0x0f, 0x09, 0xe8, 0xbb, 0x70, 0x53, 0x06, 0x79, 0x7a, 0xd4, 0x15, 0x4b, 0x62, 0xc2, 0xc2,
+	0x75, 0x2b, 0x31, 0x93, 0x4d, 0x1e, 0x9c, 0x8c, 0x02, 0xa7, 0xe4, 0xae, 0x1b, 0xc8, 0x98, 0x72,
+	0xd5, 0x4c, 0x60, 0x95, 0x1f, 0xc3, 0xad, 0x4b, 0x45, 0xbe, 0x54, 0x25, 0xe9, 0xef, 0xd3, 0x00,
+	0xed, 0x5e, 0x6d, 0x47, 0x1a, 0xa9, 0x09, 0xb9, 0x7d, 0x7d, 0x64, 0xd9, 0x93, 0xab, 0x3c, 0xe0,
+	0x14, 0x5f, 0xad, 0x09, 0x73, 0x6c, 0x72, 0x19, 0x2c, 0x65, 0x79, 0x1e, 0x3b, 0xde, 0x73, 0x48,
+	0x10, 0xe5, 0xb1, 0xbc, 0xc5, 0x86, 0xe1, 0xe9, 0x4e, 0xb4, 0x75, 0x45, 0x83, 0x2d, 0x00, 0x0b,
+	0x79, 0x8e, 0xf5, 0x49, 0xe8, 0xb6, 0x64, 0x13, 0x6d, 0xf1, 0xaa, 0x31, 0xf1, 0x8e, 0x88, 0xb9,
+	0x96, 0xe5, 0x46, 0xbd, 0x6e, 0x3c, 0x58, 0xc2, 0x85, 0xed, 0x22, 0xe9, 0xf2, 0x07, 0x3c, 0x64,
+	0x9a, 0xb2, 0xbe, 0x94, 0x8d, 0xee, 0xc1, 0xe2, 0x85, 0x79, 0xbe, 0x50, 0x40, 0x68, 0xf7, 0x9e,
+	0xbe, 0xa3, 0x64, 0xe4, 0xaf, 0x77, 0x95, 0x9c, 0xfa, 0x57, 0xf3, 0xc2, 0xd1, 0x48, 0xab, 0x26,
+	0xbf, 0x96, 0xe4, 0xf9, 0xee, 0x36, 0xa8, 0x2d, 0x1d, 0xc0, 0x9b, 0x57, 0xfb, 0x1f, 0x96, 0x47,
+	0x72, 0x38, 0x8e, 0x04, 0xd1, 0x06, 0x14, 0xc5, 0x2e, 0xd6, 0xd8, 0x81, 0xe3, 0x66, 0x5d, 0xc4,
+	0x20, 0x48, 0x4c, 0x12, 0xbd, 0x01, 0x4b, 0xbc, 0xe0, 0xe4, 0x1f, 0x10, 0x53, 0x60, 0x32, 0x1c,
+	0xb3, 0x18, 0x51, 0x39, 0x6c, 0x07, 0x4a, 0x92, 0xa0, 0xf1, 0x6c, 0x20, 0xcb, 0x07, 0x74, 0xe7,
+	0xba, 0x01, 0x09, 0x11, 0x9e, 0x24, 0x14, 0xdd, 0x69, 0x43, 0xfd, 0x65, 0xc8, 0x87, 0x83, 0x45,
+	0x6b, 0x30, 0x3f, 0x68, 0xf4, 0x94, 0xb9, 0xf2, 0xf2, 0xc9, 0x69, 0xa5, 0x18, 0x92, 0x07, 0x8d,
+	0x1e, 0xe3, 0xec, 0x36, 0x7b, 0x4a, 0xea, 0x22, 0x67, 0xb7, 0xd9, 0x43, 0x65, 0xc8, 0xf4, 0x1b,
+	0x83, 0x5e, 0x18, 0x9f, 0x85, 0x2c, 0x46, 0x2b, 0x67, 0x58, 0x7c, 0xa6, 0xee, 0x43, 0x31, 0xd6,
+	0x3b, 0x7a, 0x0d, 0x16, 0xda, 0x9d, 0xc7, 0xb8, 0xd5, 0xef, 0x2b, 0x73, 0x22, 0x3d, 0x88, 0x71,
+	0xdb, 0xce, 0x90, 0xad, 0x1d, 0x7a, 0x05, 0x32, 0x5b, 0x5d, 0x76, 0xef, 0x8b, 0xfc, 0x23, 0x86,
+	0xd8, 0xa2, 0x7e, 0x50, 0xbe, 0x21, 0x03, 0xbf, 0xb8, 0x62, 0xf5, 0xf7, 0x52, 0x90, 0x13, 0x07,
+	0x2d, 0x71, 0x11, 0x6b, 0xd3, 0xa4, 0x48, 0xa4, 0x8d, 0x6f, 0x5e, 0x9e, 0xe2, 0x55, 0x65, 0x46,
+	0x26, 0xb6, 0x66, 0x28, 0x57, 0x7e, 0x1f, 0x4a, 0x71, 0xc6, 0x97, 0xda, 0x98, 0xdf, 0x85, 0x22,
+	0xdb, 0xfb, 0x61, 0xaa, 0xf7, 0x00, 0x72, 0xc2, 0x59, 0x44, 0xf7, 0xd0, 0xe5, 0xf9, 0xa6, 0x44,
+	0xa2, 0x47, 0xb0, 0x20, 0x72, 0xd4, 0xb0, 0x96, 0xbd, 0x7e, 0xf5, 0x09, 0xc3, 0x21, 0x5c, 0xfd,
+	0x08, 0x32, 0x3d, 0x42, 0x3c, 0x66, 0x7b, 0x87, 0x9a, 0x64, 0x7a, 0x75, 0xcb, 0xf4, 0xda, 0x24,
+	0xed, 0x26, 0x4b, 0xaf, 0x4d, 0xd2, 0x36, 0xa3, 0x7a, 0x5c, 0x3a, 0x56, 0x8f, 0x1b, 0x40, 0xe9,
+	0x19, 0xb1, 0x86, 0x07, 0x01, 0x31, 0xb9, 0xa2, 0xb7, 0x21, 0xe3, 0x92, 0x68, 0xf0, 0x6b, 0x89,
+	0x9b, 0x8f, 0x10, 0x0f, 0x73, 0x14, 0xf3, 0x31, 0xc7, 0x5c, 0x5a, 0x3e, 0x03, 0xc9, 0x96, 0xfa,
+	0x77, 0x69, 0x58, 0x6a, 0xfb, 0xfe, 0x58, 0x77, 0x8c, 0x30, 0xaa, 0xfb, 0xe6, 0xc5, 0xa8, 0x2e,
+	0xf1, 0xbd, 0xec, 0xa2, 0xc8, 0xc5, 0x32, 0xa3, 0xbc, 0x59, 0xd3, 0xd1, 0xcd, 0xaa, 0xfe, 0x47,
+	0x2a, 0xac, 0x25, 0xbe, 0x11, 0x73, 0x05, 0x22, 0x47, 0x8c, 0x6b, 0x22, 0xbb, 0xce, 0xa1, 0x43,
+	0x8f, 0x1d, 0x96, 0xbd, 0xe2, 0x56, 0xa7, 0xf5, 0x4c, 0x49, 0x89, 0xed, 0x79, 0x01, 0x84, 0x89,
+	0x43, 0x8e, 0x99, 0xa6, 0x5e, 0xab, 0xd3, 0x64, 0x51, 0x58, 0x3a, 0x41, 0x53, 0x8f, 0x38, 0xa6,
+	0xe5, 0x0c, 0xd1, 0x6b, 0x90, 0x6b, 0xf7, 0xfb, 0xbb, 0x3c, 0x85, 0x7c, 0xe9, 0xe4, 0xb4, 0x72,
+	0xe3, 0x02, 0x8a, 0xd7, 0x91, 0x4d, 0x06, 0x62, 0x29, 0x10, 0x8b, 0xcf, 0x12, 0x40, 0x2c, 0xb6,
+	0x16, 0x20, 0xdc, 0x1d, 0xd4, 0x06, 0x2d, 0x25, 0x9b, 0x00, 0xc2, 0x94, 0xfd, 0x95, 0xc7, 0xed,
+	0x9f, 0xd3, 0xa0, 0xd4, 0x0c, 0x83, 0xb8, 0x01, 0xe3, 0xcb, 0xac, 0x73, 0x00, 0x79, 0x97, 0xfd,
+	0xb2, 0x48, 0x18, 0x41, 0x3d, 0x4a, 0x7c, 0xf1, 0x9d, 0x91, 0xab, 0x62, 0x6a, 0x93, 0x9a, 0x39,
+	0xb2, 0x7c, 0xdf, 0xa2, 0x8e, 0xa0, 0xe1, 0x48, 0x53, 0xf9, 0xbf, 0x52, 0x70, 0x23, 0x01, 0x81,
+	0xee, 0x41, 0xc6, 0xa3, 0x76, 0xb8, 0x86, 0xb7, 0x2f, 0x2b, 0x13, 0x33, 0x51, 0xcc, 0x91, 0x68,
+	0x1d, 0x40, 0x1f, 0x07, 0x54, 0xe7, 0xfd, 0x8b, 0xe2, 0x1a, 0x8e, 0x51, 0xd0, 0x33, 0xc8, 0xf9,
+	0xc4, 0xf0, 0x48, 0x18, 0x67, 0x7f, 0xf4, 0xd3, 0x8e, 0xbe, 0xda, 0xe7, 0x6a, 0xb0, 0x54, 0x57,
+	0xae, 0x42, 0x4e, 0x50, 0xd8, 0xb6, 0x37, 0xf5, 0x40, 0x97, 0x8f, 0x08, 0xfc, 0x37, 0xdb, 0x4d,
+	0xba, 0x3d, 0x0c, 0x77, 0x93, 0x6e, 0x0f, 0xd5, 0xbf, 0x4c, 0x03, 0xb4, 0x9e, 0x07, 0xc4, 0x73,
+	0x74, 0xbb, 0x51, 0x43, 0xad, 0xd8, 0xcd, 0x20, 0x66, 0xfb, 0xb5, 0xc4, 0x77, 0x93, 0x48, 0xa2,
+	0xda, 0xa8, 0x25, 0xdc, 0x0d, 0xb7, 0x60, 0x7e, 0xec, 0xc9, 0x47, 0x7c, 0x11, 0x23, 0xef, 0xe2,
+	0x6d, 0xcc, 0x68, 0xa8, 0x15, 0xaf, 0xe5, 0x5c, 0xfa, 0x54, 0x1f, 0xeb, 0x20, 0xd1, 0x75, 0xb1,
+	0x93, 0x6f, 0xe8, 0x9a, 0x41, 0xe4, 0xad, 0x52, 0x12, 0x27, 0xbf, 0x51, 0x6b, 0x10, 0x2f, 0xc0,
+	0x39, 0x43, 0x67, 0xff, 0x7f, 0x26, 0xff, 0xf6, 0x36, 0xc0, 0x74, 0x6a, 0x68, 0x1d, 0xb2, 0x8d,
+	0xcd, 0x7e, 0x7f, 0x5b, 0x99, 0x13, 0x0e, 0x7c, 0xca, 0xe2, 0x64, 0xf5, 0xcf, 0xd2, 0x90, 0x6f,
+	0xd4, 0xe4, 0x95, 0xdb, 0x00, 0x85, 0x7b, 0x25, 0xfe, 0xf4, 0x42, 0x9e, 0xbb, 0x96, 0x37, 0x91,
+	0x8e, 0xe5, 0x8a, 0x84, 0x77, 0x89, 0x89, 0xb0, 0x51, 0xb7, 0xb8, 0x00, 0xc2, 0x50, 0x22, 0xd2,
+	0x08, 0x9a, 0xa1, 0x87, 0x3e, 0x7e, 0xfd, 0x6a, 0x63, 0x89, 0xd4, 0x65, 0xda, 0xf6, 0x71, 0x31,
+	0x54, 0xd2, 0xd0, 0x7d, 0xf4, 0x1e, 0x2c, 0xfb, 0xd6, 0xd0, 0xb1, 0x9c, 0xa1, 0x16, 0x1a, 0x8f,
+	0xbf, 0x03, 0xd5, 0x57, 0xce, 0xcf, 0x36, 0x16, 0xfb, 0x82, 0x25, 0x6d, 0xb8, 0x28, 0x91, 0x0d,
+	0x6e, 0x4a, 0xf4, 0x2e, 0x2c, 0xc5, 0x44, 0x99, 0x15, 0x85, 0xd9, 0x79, 0xc5, 0x38, 0x92, 0x7c,
+	0x42, 0x26, 0xb8, 0x14, 0x09, 0x3e, 0x21, 0xbc, 0x36, 0xb3, 0x4f, 0x3d, 0x83, 0x68, 0x1e, 0x3f,
+	0xd3, 0xfc, 0x76, 0xcf, 0xe0, 0x22, 0xa7, 0x89, 0x63, 0xae, 0x3e, 0x85, 0x1b, 0x5d, 0xcf, 0x38,
+	0x20, 0x7e, 0x20, 0x4c, 0x21, 0xad, 0xf8, 0x11, 0xdc, 0x0e, 0x74, 0xff, 0x50, 0x3b, 0xb0, 0xfc,
+	0x80, 0x7a, 0x13, 0xcd, 0x23, 0x01, 0x71, 0x18, 0x5f, 0xe3, 0x0f, 0xdc, 0xb2, 0x9c, 0x78, 0x8b,
+	0x61, 0xb6, 0x04, 0x04, 0x87, 0x88, 0x6d, 0x06, 0x50, 0xdb, 0x50, 0x62, 0x29, 0x8c, 0x2c, 0xaa,
+	0xb1, 0xd9, 0x83, 0x4d, 0x87, 0xda, 0x17, 0xbe, 0xa6, 0x0a, 0x36, 0x1d, 0x8a, 0x9f, 0xea, 0xb7,
+	0x41, 0x69, 0x5a, 0xbe, 0xab, 0x07, 0xc6, 0x41, 0x58, 0x27, 0x45, 0x4d, 0x50, 0x0e, 0x88, 0xee,
+	0x05, 0x7b, 0x44, 0x0f, 0x34, 0x97, 0x78, 0x16, 0x35, 0xaf, 0x5f, 0xe5, 0xe5, 0x48, 0xa4, 0xc7,
+	0x25, 0xd4, 0xff, 0x49, 0x01, 0x60, 0x7d, 0x3f, 0x8c, 0xd6, 0xbe, 0x0e, 0x2b, 0xbe, 0xa3, 0xbb,
+	0xfe, 0x01, 0x0d, 0x34, 0xcb, 0x09, 0x88, 0x77, 0xa4, 0xdb, 0xb2, 0xb8, 0xa3, 0x84, 0x8c, 0xb6,
+	0xa4, 0xa3, 0xb7, 0x01, 0x1d, 0x12, 0xe2, 0x6a, 0xd4, 0x36, 0xb5, 0x90, 0x29, 0x1e, 0xbe, 0x33,
+	0x58, 0x61, 0x9c, 0xae, 0x6d, 0xf6, 0x43, 0x3a, 0xaa, 0xc3, 0x3a, 0x9b, 0x3e, 0x71, 0x02, 0xcf,
+	0x22, 0xbe, 0xb6, 0x4f, 0x3d, 0xcd, 0xb7, 0xe9, 0xb1, 0xb6, 0x4f, 0x6d, 0x9b, 0x1e, 0x13, 0x2f,
+	0xac, 0x9b, 0x95, 0x6d, 0x3a, 0x6c, 0x09, 0xd0, 0x26, 0xf5, 0xfa, 0x36, 0x3d, 0xde, 0x0c, 0x11,
+	0x2c, 0xa4, 0x9b, 0xce, 0x39, 0xb0, 0x8c, 0xc3, 0x30, 0xa4, 0x8b, 0xa8, 0x03, 0xcb, 0x38, 0x44,
+	0xaf, 0xc1, 0x22, 0xb1, 0x09, 0x2f, 0x9f, 0x08, 0x54, 0x96, 0xa3, 0x4a, 0x21, 0x91, 0x81, 0xd4,
+	0x8f, 0x41, 0x69, 0x39, 0x86, 0x37, 0x71, 0x63, 0x6b, 0xfe, 0x36, 0x20, 0xe6, 0x24, 0x35, 0x9b,
+	0x1a, 0x87, 0xda, 0x48, 0x77, 0xf4, 0x21, 0x1b, 0x97, 0x78, 0x71, 0x54, 0x18, 0x67, 0x9b, 0x1a,
+	0x87, 0x3b, 0x92, 0xae, 0xbe, 0x07, 0xd0, 0x77, 0x3d, 0xa2, 0x9b, 0x5d, 0x16, 0x4d, 0x30, 0xd3,
+	0xf1, 0x96, 0x66, 0xca, 0xf7, 0x5c, 0xea, 0xc9, 0xa3, 0xae, 0x08, 0x46, 0x33, 0xa2, 0xab, 0xbf,
+	0x08, 0x37, 0x7a, 0xb6, 0x6e, 0xf0, 0x2f, 0x2c, 0x7a, 0xd1, 0x13, 0x1a, 0x7a, 0x04, 0x39, 0x01,
+	0x95, 0x2b, 0x99, 0x78, 0xdc, 0xa6, 0x7d, 0x6e, 0xcd, 0x61, 0x89, 0xaf, 0x97, 0x00, 0xa6, 0x7a,
+	0xd4, 0x7f, 0x4c, 0x41, 0x21, 0xd2, 0x8f, 0x2a, 0xe2, 0x65, 0x28, 0xf0, 0x74, 0xcb, 0x91, 0x19,
+	0x7f, 0x01, 0xc7, 0x49, 0xa8, 0x0d, 0x45, 0x37, 0x92, 0xbe, 0x32, 0x9e, 0x4b, 0x18, 0x35, 0x8e,
+	0xcb, 0xa2, 0xf7, 0xa1, 0x10, 0x3e, 0xa0, 0x87, 0x1e, 0xf6, 0xea, 0xf7, 0xf6, 0x29, 0x3c, 0x2c,
+	0xa4, 0x7a, 0xc4, 0xb5, 0x2d, 0xe6, 0x73, 0x32, 0x51, 0x21, 0x15, 0x4b, 0x92, 0xfa, 0x4d, 0x80,
+	0x6f, 0x51, 0xcb, 0x19, 0xd0, 0x43, 0xe2, 0xf0, 0x57, 0x61, 0x96, 0x52, 0x92, 0xd0, 0xd0, 0xb2,
+	0xc5, 0x2b, 0x05, 0x62, 0x95, 0xa2, 0xc7, 0x51, 0xd1, 0x54, 0xff, 0x22, 0x0d, 0x39, 0x4c, 0x69,
+	0xd0, 0xa8, 0xa1, 0x0a, 0xe4, 0xa4, 0x2b, 0xe1, 0x57, 0x54, 0xbd, 0x70, 0x7e, 0xb6, 0x91, 0x15,
+	0x3e, 0x24, 0x6b, 0x70, 0xe7, 0x11, 0x73, 0xf2, 0xe9, 0xcb, 0x9c, 0x3c, 0xba, 0x07, 0x25, 0x09,
+	0xd2, 0x0e, 0x74, 0xff, 0x40, 0xe4, 0x77, 0xf5, 0xa5, 0xf3, 0xb3, 0x0d, 0x10, 0xc8, 0x2d, 0xdd,
+	0x3f, 0xc0, 0x20, 0xd0, 0xec, 0x37, 0x6a, 0x41, 0xf1, 0x13, 0x6a, 0x39, 0x5a, 0xc0, 0x27, 0x21,
+	0x6b, 0x91, 0x89, 0x4b, 0x3d, 0x9d, 0xaa, 0xfc, 0x80, 0x02, 0x3e, 0x99, 0x4e, 0xbe, 0x05, 0x8b,
+	0x1e, 0xa5, 0x81, 0xf0, 0x6c, 0x16, 0x75, 0x64, 0x99, 0xa3, 0x92, 0x58, 0xfd, 0xa6, 0x34, 0xc0,
+	0x12, 0x87, 0x4b, 0x5e, 0xac, 0x85, 0xee, 0xc1, 0xaa, 0xad, 0xfb, 0x81, 0xc6, 0x5d, 0xa2, 0x39,
+	0xd5, 0x96, 0xe3, 0xc6, 0x47, 0x8c, 0xb7, 0xc9, 0x59, 0xa1, 0x84, 0xfa, 0x0f, 0x29, 0x28, 0xb2,
+	0xc9, 0x58, 0xfb, 0x96, 0xc1, 0xe2, 0xc0, 0x2f, 0x1f, 0x9e, 0xdc, 0x82, 0x79, 0xc3, 0xf7, 0xa4,
+	0x51, 0xf9, 0xfd, 0xdc, 0xe8, 0x63, 0xcc, 0x68, 0xe8, 0x63, 0xc8, 0xc9, 0x72, 0x8b, 0x88, 0x4c,
+	0xd4, 0xeb, 0x23, 0x56, 0x69, 0x1b, 0x29, 0xc7, 0xb7, 0xfb, 0x74, 0x74, 0xe2, 0x9e, 0xc0, 0x71,
+	0x12, 0xba, 0x09, 0x69, 0x43, 0x98, 0x4b, 0x7e, 0xa1, 0xd3, 0xe8, 0xe0, 0xb4, 0xe1, 0xa8, 0x3f,
+	0x4e, 0xc1, 0xe2, 0xd4, 0x27, 0xb0, 0x1d, 0x70, 0x1b, 0x0a, 0xfe, 0x78, 0xcf, 0x9f, 0xf8, 0x01,
+	0x19, 0x85, 0x2f, 0xde, 0x11, 0x01, 0xb5, 0xa1, 0xa0, 0xdb, 0x43, 0xea, 0x59, 0xc1, 0xc1, 0x48,
+	0x26, 0xb2, 0xc9, 0xd1, 0x44, 0x5c, 0x67, 0xb5, 0x16, 0x8a, 0xe0, 0xa9, 0x74, 0x18, 0x1a, 0x88,
+	0xcf, 0x22, 0x78, 0x68, 0xf0, 0x2a, 0x94, 0x6c, 0x7d, 0xc4, 0xeb, 0x4f, 0x81, 0x35, 0x22, 0xe1,
+	0x61, 0x90, 0xb4, 0x81, 0x35, 0x22, 0xaa, 0x0a, 0x85, 0x48, 0x19, 0x5a, 0x86, 0x62, 0xad, 0xd5,
+	0xd7, 0xee, 0x3f, 0x78, 0xa4, 0x3d, 0x6e, 0xec, 0x28, 0x73, 0x32, 0x7c, 0xfd, 0xd3, 0x14, 0x2c,
+	0x4a, 0x8f, 0x25, 0x53, 0x82, 0xd7, 0x60, 0xc1, 0xd3, 0xf7, 0x83, 0x30, 0x69, 0xc9, 0x88, 0x5d,
+	0xcd, 0x2e, 0x01, 0x96, 0xb4, 0x30, 0x56, 0x72, 0xd2, 0x12, 0xfb, 0x06, 0x63, 0xfe, 0xca, 0x6f,
+	0x30, 0x32, 0xff, 0x2f, 0xdf, 0x60, 0xa8, 0xbf, 0x01, 0xb0, 0x69, 0xd9, 0x64, 0x20, 0x4a, 0x55,
+	0x49, 0x29, 0x28, 0x0b, 0xf3, 0x64, 0x29, 0x34, 0x0c, 0xf3, 0xda, 0x4d, 0xcc, 0x68, 0x8c, 0x35,
+	0xb4, 0x4c, 0x79, 0x18, 0x39, 0xeb, 0x31, 0x63, 0x0d, 0x2d, 0x33, 0x7a, 0xf6, 0xcb, 0x5c, 0xf3,
+	0xec, 0xa7, 0x2e, 0xc3, 0x22, 0x16, 0x35, 0x36, 0x31, 0x06, 0xf5, 0x34, 0x05, 0xcb, 0x32, 0xde,
+	0x8d, 0x5c, 0xf6, 0xd7, 0xa0, 0x20, 0x42, 0xdf, 0x69, 0x12, 0xc8, 0x3f, 0x44, 0x10, 0xb8, 0x76,
+	0x13, 0xe7, 0x05, 0xbb, 0x6d, 0xa2, 0x0d, 0x28, 0x4a, 0x68, 0xec, 0xf3, 0x2e, 0x10, 0xa4, 0x0e,
+	0x9b, 0xcf, 0x3b, 0x90, 0xd9, 0xb7, 0x6c, 0x22, 0x77, 0x7e, 0xa2, 0x47, 0x98, 0x5a, 0x64, 0x6b,
+	0x0e, 0x73, 0x74, 0x3d, 0x1f, 0x16, 0xf7, 0xd4, 0x7f, 0x49, 0xf1, 0x12, 0x33, 0x4b, 0x55, 0xe3,
+	0xe3, 0x13, 0x59, 0xeb, 0xcc, 0xf8, 0x04, 0x8e, 0x8d, 0x4f, 0xb0, 0xc5, 0xf8, 0x24, 0x34, 0x3e,
+	0x3e, 0x41, 0xfa, 0xe9, 0xc7, 0x87, 0x3e, 0x84, 0x05, 0x59, 0xaa, 0x94, 0xae, 0xee, 0xd5, 0xc4,
+	0x9d, 0x11, 0xb7, 0xf4, 0xd6, 0x1c, 0x0e, 0x65, 0x62, 0xd3, 0xdb, 0x86, 0x9b, 0x75, 0x5b, 0x37,
+	0x0e, 0x6d, 0xcb, 0x0f, 0x88, 0x19, 0xf7, 0x40, 0x0f, 0x20, 0x77, 0x21, 0xce, 0xbd, 0xaa, 0x88,
+	0x2a, 0x91, 0xea, 0xbf, 0xa7, 0xa0, 0xb4, 0x45, 0x74, 0x3b, 0x38, 0x98, 0x56, 0xaa, 0x02, 0xe2,
+	0x07, 0xf2, 0x7e, 0xe4, 0xbf, 0xd1, 0x37, 0x20, 0x1f, 0x85, 0x41, 0xd7, 0x3e, 0x07, 0x46, 0x50,
+	0xf4, 0x10, 0x16, 0xd8, 0xd8, 0xe9, 0x38, 0xcc, 0xaf, 0xae, 0x7a, 0x69, 0x92, 0x48, 0x76, 0x69,
+	0x79, 0x84, 0xc7, 0x3d, 0xdc, 0x4e, 0x59, 0x1c, 0x36, 0xd1, 0xcf, 0x43, 0x89, 0x3f, 0x94, 0x84,
+	0x61, 0x5e, 0xf6, 0x3a, 0x9d, 0x45, 0xf1, 0xd6, 0x29, 0x42, 0xbc, 0x3f, 0x4a, 0xc3, 0xea, 0x8e,
+	0x3e, 0xd9, 0x23, 0xd2, 0x0d, 0x11, 0x13, 0x13, 0x83, 0x7a, 0x26, 0xea, 0xc5, 0xdd, 0xd7, 0x15,
+	0x4f, 0xa7, 0x49, 0xc2, 0xc9, 0x5e, 0x2c, 0xcc, 0xf9, 0xd2, 0xb1, 0x9c, 0x6f, 0x15, 0xb2, 0x0e,
+	0x75, 0x0c, 0x22, 0x7d, 0x9b, 0x68, 0xa8, 0xdf, 0x4b, 0xc5, 0x7d, 0x57, 0x39, 0x7a, 0xd6, 0xe4,
+	0x45, 0xaf, 0x0e, 0x0d, 0xa2, 0xee, 0xd0, 0xc7, 0x50, 0xee, 0xb7, 0x1a, 0xb8, 0x35, 0xa8, 0x77,
+	0xbf, 0xad, 0xf5, 0x6b, 0xdb, 0xfd, 0xda, 0x83, 0x7b, 0x5a, 0xaf, 0xbb, 0xfd, 0x9d, 0xfb, 0x0f,
+	0xef, 0x7d, 0x43, 0x49, 0x95, 0x2b, 0x27, 0xa7, 0x95, 0xdb, 0x9d, 0x5a, 0x63, 0x5b, 0x9c, 0xb8,
+	0x3d, 0xfa, 0xbc, 0xaf, 0xdb, 0xbe, 0xfe, 0xe0, 0x5e, 0x8f, 0xda, 0x13, 0x86, 0x41, 0x5f, 0x07,
+	0xb4, 0xd9, 0xc2, 0x9d, 0xd6, 0x40, 0x0b, 0x1d, 0x64, 0xa3, 0xde, 0x50, 0xd2, 0x22, 0x93, 0xda,
+	0x24, 0x9e, 0x43, 0x82, 0x5a, 0xab, 0x7f, 0xff, 0xc1, 0xa3, 0x46, 0xbd, 0xc1, 0xce, 0x78, 0x29,
+	0x7e, 0x5b, 0xc6, 0x83, 0x80, 0xd4, 0xa5, 0x41, 0xc0, 0x34, 0x96, 0x48, 0x5f, 0x12, 0x4b, 0x6c,
+	0xc2, 0xaa, 0xe1, 0x51, 0xdf, 0xd7, 0x58, 0x7a, 0x42, 0xcc, 0x99, 0x04, 0xe8, 0x2b, 0xe7, 0x67,
+	0x1b, 0x2b, 0x0d, 0xc6, 0xef, 0x73, 0xb6, 0x54, 0xbf, 0x62, 0xc4, 0x48, 0xbc, 0x27, 0xf5, 0x87,
+	0xf3, 0x2c, 0xd2, 0xb3, 0x8e, 0x2c, 0x9b, 0x0c, 0x89, 0x8f, 0x9e, 0xc2, 0xb2, 0xe1, 0x11, 0x93,
+	0xe5, 0x1d, 0xba, 0x1d, 0xff, 0x32, 0xfa, 0xe7, 0x12, 0x83, 0xae, 0x48, 0xb0, 0xda, 0x88, 0xa4,
+	0xfa, 0x2e, 0x31, 0xf0, 0x92, 0x71, 0xa1, 0x8d, 0x3e, 0x81, 0x65, 0x9f, 0xd8, 0x96, 0x33, 0x7e,
+	0xae, 0x19, 0xd4, 0x09, 0xc8, 0xf3, 0xf0, 0x39, 0xef, 0x3a, 0xbd, 0xfd, 0xd6, 0x36, 0x93, 0x6a,
+	0x08, 0xa1, 0x3a, 0x3a, 0x3f, 0xdb, 0x58, 0xba, 0x48, 0xc3, 0x4b, 0x52, 0xb3, 0x6c, 0x97, 0x0f,
+	0x60, 0xe9, 0xe2, 0x68, 0xd0, 0xaa, 0x74, 0x34, 0xdc, 0x5f, 0x45, 0x8e, 0xe4, 0x36, 0xe4, 0x3d,
+	0x32, 0xb4, 0xfc, 0xc0, 0x13, 0x66, 0x66, 0x9c, 0x88, 0x82, 0xd6, 0x20, 0x17, 0xfb, 0xe2, 0x84,
+	0xf1, 0x64, 0x9b, 0x79, 0x10, 0xf1, 0x31, 0x59, 0xf9, 0xd7, 0x60, 0x66, 0x2c, 0xec, 0xd0, 0x99,
+	0x96, 0xaf, 0xef, 0xc9, 0xce, 0xf2, 0x38, 0x6c, 0xb2, 0xbd, 0x3c, 0xf6, 0xa3, 0x00, 0x92, 0xff,
+	0x66, 0x34, 0x1e, 0xe9, 0xc8, 0x4f, 0xeb, 0x78, 0x2c, 0x13, 0x7e, 0xc1, 0x9b, 0x89, 0x7d, 0xc1,
+	0xbb, 0x0a, 0x59, 0x9b, 0x1c, 0x11, 0x5b, 0xc4, 0x18, 0x58, 0x34, 0xee, 0xdc, 0x83, 0x52, 0xf8,
+	0xa9, 0x28, 0xff, 0x66, 0x24, 0x0f, 0x99, 0x41, 0xad, 0xff, 0x44, 0x99, 0x43, 0x00, 0x39, 0xb1,
+	0xc7, 0xc5, 0x23, 0x64, 0xa3, 0xdb, 0xd9, 0x6c, 0x3f, 0x56, 0xd2, 0x77, 0x7e, 0x37, 0x03, 0x85,
+	0xe8, 0x19, 0x8c, 0xdd, 0x69, 0x9d, 0xd6, 0xb3, 0xf0, 0x90, 0x44, 0xf4, 0x0e, 0x39, 0x46, 0xaf,
+	0x4e, 0x0b, 0x68, 0x1f, 0x8b, 0x77, 0xff, 0x88, 0x1d, 0x16, 0xcf, 0x5e, 0x87, 0x7c, 0xad, 0xdf,
+	0x6f, 0x3f, 0xee, 0xb4, 0x9a, 0xca, 0x67, 0xa9, 0xf2, 0x57, 0x4e, 0x4e, 0x2b, 0x2b, 0x11, 0xa8,
+	0xe6, 0x8b, 0x6d, 0xc9, 0x51, 0x8d, 0x46, 0xab, 0x37, 0x68, 0x35, 0x95, 0x4f, 0xd3, 0xb3, 0x28,
+	0x5e, 0x10, 0xe2, 0xdf, 0x33, 0x15, 0x7a, 0xb8, 0xd5, 0xab, 0x61, 0xd6, 0xe1, 0x67, 0x69, 0x51,
+	0xd7, 0x9b, 0xf6, 0xe8, 0x11, 0x57, 0xf7, 0x58, 0x9f, 0xeb, 0xe1, 0x67, 0x85, 0x9f, 0xce, 0x8b,
+	0x0f, 0x5b, 0xa6, 0x6f, 0x7a, 0x44, 0x37, 0x27, 0xac, 0x37, 0xfe, 0x98, 0xca, 0xd5, 0xcc, 0xcf,
+	0xf4, 0xd6, 0x67, 0x3e, 0x8c, 0x69, 0x51, 0x61, 0x01, 0xef, 0x76, 0x3a, 0x0c, 0xf4, 0x69, 0x66,
+	0x66, 0x76, 0x78, 0xec, 0xb0, 0x64, 0x1f, 0xbd, 0x01, 0xf9, 0xf0, 0xad, 0x55, 0xf9, 0x2c, 0x33,
+	0x33, 0xa0, 0x46, 0xf8, 0x50, 0xcc, 0x3b, 0xdc, 0xda, 0x1d, 0xf0, 0xaf, 0x1e, 0x3f, 0xcd, 0xce,
+	0x76, 0x78, 0x30, 0x0e, 0x4c, 0x7a, 0xec, 0xb0, 0xd3, 0x2c, 0x4b, 0x88, 0x9f, 0x65, 0x85, 0x97,
+	0x88, 0x30, 0xb2, 0x7e, 0xf8, 0x3a, 0xe4, 0x71, 0xeb, 0x5b, 0xe2, 0x03, 0xc9, 0x4f, 0x73, 0x33,
+	0x7a, 0x30, 0xf9, 0x84, 0x18, 0xac, 0xb7, 0x0a, 0xe4, 0x70, 0x6b, 0xa7, 0xfb, 0xb4, 0xa5, 0xfc,
+	0x7e, 0x6e, 0x46, 0x0f, 0x26, 0x23, 0xca, 0x3f, 0xf8, 0xca, 0x77, 0x71, 0x6f, 0xab, 0xc6, 0x17,
+	0x65, 0x56, 0x4f, 0xd7, 0x73, 0x0f, 0x74, 0x87, 0x98, 0xd3, 0x8f, 0x7b, 0x22, 0xd6, 0x9d, 0x5f,
+	0x82, 0x7c, 0x18, 0x53, 0xa3, 0x75, 0xc8, 0x3d, 0xeb, 0xe2, 0x27, 0x2d, 0xac, 0xcc, 0x09, 0x2b,
+	0x87, 0x9c, 0x67, 0x22, 0x1b, 0xaa, 0xc0, 0xc2, 0x4e, 0xad, 0x53, 0x7b, 0xdc, 0xc2, 0x61, 0xfd,
+	0x3f, 0x04, 0xc8, 0xc0, 0xb0, 0xac, 0xc8, 0x0e, 0x22, 0x9d, 0xf5, 0xb5, 0x1f, 0x7d, 0xbe, 0x3e,
+	0xf7, 0x93, 0xcf, 0xd7, 0xe7, 0x3e, 0x3d, 0x5f, 0x4f, 0xfd, 0xe8, 0x7c, 0x3d, 0xf5, 0xb7, 0xe7,
+	0xeb, 0xa9, 0x7f, 0x3b, 0x5f, 0x4f, 0xed, 0xe5, 0xf8, 0x75, 0xf3, 0xf0, 0xff, 0x02, 0x00, 0x00,
+	0xff, 0xff, 0x6e, 0xf6, 0x47, 0x4c, 0x21, 0x34, 0x00, 0x00,
 }

+ 12 - 0
vendor/github.com/docker/swarmkit/api/types.proto

@@ -4,6 +4,7 @@ package docker.swarmkit.v1;
 
 import "google/protobuf/timestamp.proto";
 import "google/protobuf/duration.proto";
+import "google/protobuf/wrappers.proto";
 import "gogoproto/gogo.proto";
 
 // This file contains types that are common to objects and spec or that are not
@@ -77,6 +78,17 @@ message Resources {
 message ResourceRequirements {
 	Resources limits = 1;
 	Resources reservations = 2;
+
+	// Amount of swap in bytes - can only be used together with a memory limit
+	// -1 means unlimited
+	// a null pointer indicates that the default behaviour of granting twice
+	// the memory is maintained
+	google.protobuf.Int64Value swap_bytes = 3;
+
+	// Tune container memory swappiness (0 to 100) - if not specified, defaults
+	// to the container OS's default - generally 60, or the value predefined in
+	// the image; set to -1 to unset a previously set value
+	google.protobuf.Int64Value memory_swappiness = 4;
 }
 
 message Platform {

+ 5 - 11
vendor/github.com/docker/swarmkit/manager/allocator/network.go

@@ -989,8 +989,11 @@ func (a *Allocator) allocateNode(ctx context.Context, node *api.Node, existingAd
 
 	nc := a.netCtx
 
+	var nwIDs = make(map[string]struct{}, len(networks))
+
 	// go through all of the networks we've passed in
 	for _, network := range networks {
+		nwIDs[network.ID] = struct{}{}
 
 		// for each one, create space for an attachment. then, search through
 		// all of the attachments already on the node. if the attachment
@@ -1049,17 +1052,8 @@ func (a *Allocator) allocateNode(ctx context.Context, node *api.Node, existingAd
 	// https://github.com/golang/go/wiki/SliceTricks#filtering-without-allocating
 	attachments := node.Attachments[:0]
 	for _, attach := range node.Attachments {
-		// for every attachment, go through every network. if the attachment
-		// belongs to one of the networks, then go to the next attachment. if
-		// no network matches, then the the attachment should be removed.
-		attachmentBelongs := false
-		for _, network := range networks {
-			if network.ID == attach.Network.ID {
-				attachmentBelongs = true
-				break
-			}
-		}
-		if attachmentBelongs {
+		if _, ok := nwIDs[attach.Network.ID]; ok {
+			// attachment belongs to one of the networks, so keep it
 			attachments = append(attachments, attach)
 		} else {
 			// free the attachment and remove it from the node's attachments by

+ 133 - 0
vendor/github.com/docker/swarmkit/manager/controlapi/extension.go

@@ -0,0 +1,133 @@
+package controlapi
+
+import (
+	"context"
+	"strings"
+
+	"github.com/docker/swarmkit/api"
+	"github.com/docker/swarmkit/identity"
+	"github.com/docker/swarmkit/log"
+	"github.com/docker/swarmkit/manager/state/store"
+	"github.com/sirupsen/logrus"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+)
+
+// CreateExtension creates an `Extension` based on the provided `CreateExtensionRequest.Extension`
+// and returns a `CreateExtensionResponse`.
+// - Returns `InvalidArgument` if the `CreateExtensionRequest.Extension` is malformed,
+//   or fails validation.
+// - Returns an error if the creation fails.
+func (s *Server) CreateExtension(ctx context.Context, request *api.CreateExtensionRequest) (*api.CreateExtensionResponse, error) {
+	if request.Annotations == nil || request.Annotations.Name == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "extension name must be provided")
+	}
+
+	extension := &api.Extension{
+		ID:          identity.NewID(),
+		Annotations: *request.Annotations,
+		Description: request.Description,
+	}
+
+	err := s.store.Update(func(tx store.Tx) error {
+		return store.CreateExtension(tx, extension)
+	})
+
+	switch err {
+	case store.ErrNameConflict:
+		return nil, status.Errorf(codes.AlreadyExists, "extension %s already exists", request.Annotations.Name)
+	case nil:
+		log.G(ctx).WithFields(logrus.Fields{
+			"extension.Name": request.Annotations.Name,
+			"method":         "CreateExtension",
+		}).Debugf("extension created")
+
+		return &api.CreateExtensionResponse{Extension: extension}, nil
+	default:
+		return nil, status.Errorf(codes.Internal, "could not create extension: %v", err.Error())
+	}
+}
+
+// GetExtension returns a `GetExtensionResponse` with a `Extension` with the same
+// id as `GetExtensionRequest.extension_id`
+// - Returns `NotFound` if the Extension with the given id is not found.
+// - Returns `InvalidArgument` if the `GetExtensionRequest.extension_id` is empty.
+// - Returns an error if the get fails.
+func (s *Server) GetExtension(ctx context.Context, request *api.GetExtensionRequest) (*api.GetExtensionResponse, error) {
+	if request.ExtensionID == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "extension ID must be provided")
+	}
+
+	var extension *api.Extension
+	s.store.View(func(tx store.ReadTx) {
+		extension = store.GetExtension(tx, request.ExtensionID)
+	})
+
+	if extension == nil {
+		return nil, status.Errorf(codes.NotFound, "extension %s not found", request.ExtensionID)
+	}
+
+	return &api.GetExtensionResponse{Extension: extension}, nil
+}
+
+// RemoveExtension removes the extension referenced by `RemoveExtensionRequest.ID`.
+// - Returns `InvalidArgument` if `RemoveExtensionRequest.extension_id` is empty.
+// - Returns `NotFound` if the an extension named `RemoveExtensionRequest.extension_id` is not found.
+// - Returns an error if the deletion fails.
+func (s *Server) RemoveExtension(ctx context.Context, request *api.RemoveExtensionRequest) (*api.RemoveExtensionResponse, error) {
+	if request.ExtensionID == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "extension ID must be provided")
+	}
+
+	err := s.store.Update(func(tx store.Tx) error {
+		// Check if the extension exists
+		extension := store.GetExtension(tx, request.ExtensionID)
+		if extension == nil {
+			return status.Errorf(codes.NotFound, "could not find extension %s", request.ExtensionID)
+		}
+
+		// Check if any resources of this type present in the store, return error if so
+		resources, err := store.FindResources(tx, store.ByKind(request.ExtensionID))
+		if err != nil {
+			return status.Errorf(codes.Internal, "could not find resources using extension %s: %v", request.ExtensionID, err)
+		}
+
+		if len(resources) != 0 {
+			resourceNames := make([]string, 0, len(resources))
+			// Number of resources for an extension could be quite large.
+			// Show a limited number of resources for debugging.
+			attachedResourceForDebug := 10
+			for _, resource := range resources {
+				resourceNames = append(resourceNames, resource.Annotations.Name)
+				attachedResourceForDebug = attachedResourceForDebug - 1
+				if attachedResourceForDebug == 0 {
+					break
+				}
+			}
+
+			extensionName := extension.Annotations.Name
+			resourceNameStr := strings.Join(resourceNames, ", ")
+			resourceStr := "resources"
+			if len(resourceNames) == 1 {
+				resourceStr = "resource"
+			}
+
+			return status.Errorf(codes.InvalidArgument, "extension '%s' is in use by the following %s: %v", extensionName, resourceStr, resourceNameStr)
+		}
+
+		return store.DeleteExtension(tx, request.ExtensionID)
+	})
+	switch err {
+	case store.ErrNotExist:
+		return nil, status.Errorf(codes.NotFound, "extension %s not found", request.ExtensionID)
+	case nil:
+		log.G(ctx).WithFields(logrus.Fields{
+			"extension.ID": request.ExtensionID,
+			"method":       "RemoveExtension",
+		}).Debugf("extension removed")
+
+		return &api.RemoveExtensionResponse{}, nil
+	default:
+		return nil, err
+	}
+}

+ 226 - 0
vendor/github.com/docker/swarmkit/manager/controlapi/resource.go

@@ -0,0 +1,226 @@
+package controlapi
+
+import (
+	"context"
+
+	"github.com/sirupsen/logrus"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
+
+	"github.com/docker/swarmkit/api"
+	"github.com/docker/swarmkit/identity"
+	"github.com/docker/swarmkit/log"
+	"github.com/docker/swarmkit/manager/state/store"
+)
+
+// CreateResource returns a `CreateResourceResponse` after creating a `Resource` based
+// on the provided `CreateResourceRequest.Resource`.
+// - Returns `InvalidArgument` if the `CreateResourceRequest.Resource` is malformed,
+//   or if the config data is too long or contains invalid characters.
+// - Returns an error if the creation fails.
+func (s *Server) CreateResource(ctx context.Context, request *api.CreateResourceRequest) (*api.CreateResourceResponse, error) {
+	if request.Annotations == nil || request.Annotations.Name == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "Resource must have a name")
+	}
+
+	// finally, validate that Kind is not an emptystring. We know that creating
+	// with Kind as empty string should fail at the store level, but to make
+	// errors clearer, special case this.
+	if request.Kind == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "Resource must belong to an Extension")
+	}
+	r := &api.Resource{
+		ID:          identity.NewID(),
+		Annotations: *request.Annotations,
+		Kind:        request.Kind,
+		Payload:     request.Payload,
+	}
+
+	err := s.store.Update(func(tx store.Tx) error {
+		return store.CreateResource(tx, r)
+	})
+
+	switch err {
+	case store.ErrNoKind:
+		return nil, status.Errorf(codes.InvalidArgument, "Kind %v is not registered", r.Kind)
+	case store.ErrNameConflict:
+		return nil, status.Errorf(
+			codes.AlreadyExists,
+			"A resource with name %v already exists",
+			r.Annotations.Name,
+		)
+	case nil:
+		log.G(ctx).WithFields(logrus.Fields{
+			"resource.Name": r.Annotations.Name,
+			"method":        "CreateResource",
+		}).Debugf("resource created")
+		return &api.CreateResourceResponse{Resource: r}, nil
+	default:
+		return nil, err
+	}
+}
+
+// GetResource returns a `GetResourceResponse` with a `Resource` with the same
+// id as `GetResourceRequest.Resource`
+// - Returns `NotFound` if the Resource with the given id is not found.
+// - Returns `InvalidArgument` if the `GetResourceRequest.Resource` is empty.
+// - Returns an error if getting fails.
+func (s *Server) GetResource(ctx context.Context, request *api.GetResourceRequest) (*api.GetResourceResponse, error) {
+	if request.ResourceID == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "resource ID must be present")
+	}
+	var resource *api.Resource
+	s.store.View(func(tx store.ReadTx) {
+		resource = store.GetResource(tx, request.ResourceID)
+	})
+
+	if resource == nil {
+		return nil, status.Errorf(codes.NotFound, "resource %s not found", request.ResourceID)
+	}
+
+	return &api.GetResourceResponse{Resource: resource}, nil
+}
+
+// RemoveResource removes the `Resource` referenced by `RemoveResourceRequest.ResourceID`.
+// - Returns `InvalidArgument` if `RemoveResourceRequest.ResourceID` is empty.
+// - Returns `NotFound` if the a resource named `RemoveResourceRequest.ResourceID` is not found.
+// - Returns an error if the deletion fails.
+func (s *Server) RemoveResource(ctx context.Context, request *api.RemoveResourceRequest) (*api.RemoveResourceResponse, error) {
+	if request.ResourceID == "" {
+		return nil, status.Errorf(codes.InvalidArgument, "resource ID must be present")
+	}
+	err := s.store.Update(func(tx store.Tx) error {
+		return store.DeleteResource(tx, request.ResourceID)
+	})
+	switch err {
+	case store.ErrNotExist:
+		return nil, status.Errorf(codes.NotFound, "resource %s not found", request.ResourceID)
+	case nil:
+		return &api.RemoveResourceResponse{}, nil
+	default:
+		return nil, err
+	}
+}
+
+// ListResources returns a `ListResourcesResponse` with a list of `Resource`s stored in the raft store,
+// or all resources matching any name in `ListConfigsRequest.Names`, any
+// name prefix in `ListResourcesRequest.NamePrefixes`, any id in
+// `ListResourcesRequest.ResourceIDs`, or any id prefix in `ListResourcesRequest.IDPrefixes`.
+// - Returns an error if listing fails.
+func (s *Server) ListResources(ctx context.Context, request *api.ListResourcesRequest) (*api.ListResourcesResponse, error) {
+	var (
+		resources     []*api.Resource
+		respResources []*api.Resource
+		err           error
+		byFilters     []store.By
+		by            store.By
+		labels        map[string]string
+	)
+
+	// andKind is set to true if the Extension filter is not the only filter
+	// being used. If this is the case, we do not have to compare by strings,
+	// which could be slow.
+	var andKind bool
+
+	if request.Filters != nil {
+		for _, name := range request.Filters.Names {
+			byFilters = append(byFilters, store.ByName(name))
+		}
+		for _, prefix := range request.Filters.NamePrefixes {
+			byFilters = append(byFilters, store.ByNamePrefix(prefix))
+		}
+		for _, prefix := range request.Filters.IDPrefixes {
+			byFilters = append(byFilters, store.ByIDPrefix(prefix))
+		}
+		labels = request.Filters.Labels
+		if request.Filters.Kind != "" {
+			// if we're filtering on Extensions, then set this to true. If Kind is
+			// the _only_ kind of filter, we'll set this to false below.
+			andKind = true
+		}
+	}
+
+	switch len(byFilters) {
+	case 0:
+		// NOTE(dperny): currently, filtering using store.ByKind would apply an
+		// Or operation, which means that filtering by kind would return a
+		// union. However, for Kind filters, we actually want the
+		// _intersection_; that is, _only_ objects of the specified kind. we
+		// could dig into the db code to figure out how to write and use an
+		// efficient And combinator, but I don't have the time nor expertise to
+		// do so at the moment. instead, we'll filter by kind after the fact.
+		// however, if there are no other kinds of filters, and we're ONLY
+		// listing by Kind, we can set that to be the only filter.
+		if andKind {
+			by = store.ByKind(request.Filters.Kind)
+			andKind = false
+		} else {
+			by = store.All
+		}
+	case 1:
+		by = byFilters[0]
+	default:
+		by = store.Or(byFilters...)
+	}
+
+	s.store.View(func(tx store.ReadTx) {
+		resources, err = store.FindResources(tx, by)
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	// filter by label and extension
+	for _, resource := range resources {
+		if !filterMatchLabels(resource.Annotations.Labels, labels) {
+			continue
+		}
+		if andKind && resource.Kind != request.Filters.Kind {
+			continue
+		}
+		respResources = append(respResources, resource)
+	}
+
+	return &api.ListResourcesResponse{Resources: respResources}, nil
+}
+
+// UpdateResource updates the resource with the given `UpdateResourceRequest.Resource.Id` using the given `UpdateResourceRequest.Resource` and returns a `UpdateResourceResponse`.
+// - Returns `NotFound` if the Resource with the given `UpdateResourceRequest.Resource.Id` is not found.
+// - Returns `InvalidArgument` if the UpdateResourceRequest.Resource.Id` is empty.
+// - Returns an error if updating fails.
+func (s *Server) UpdateResource(ctx context.Context, request *api.UpdateResourceRequest) (*api.UpdateResourceResponse, error) {
+	if request.ResourceID == "" || request.ResourceVersion == nil {
+		return nil, status.Errorf(codes.InvalidArgument, "must include ID and version")
+	}
+	var r *api.Resource
+	err := s.store.Update(func(tx store.Tx) error {
+		r = store.GetResource(tx, request.ResourceID)
+		if r == nil {
+			return status.Errorf(codes.NotFound, "resource %v not found", request.ResourceID)
+		}
+
+		if request.Annotations != nil {
+			if r.Annotations.Name != request.Annotations.Name {
+				return status.Errorf(codes.InvalidArgument, "cannot change resource name")
+			}
+			r.Annotations = *request.Annotations
+		}
+		r.Meta.Version = *request.ResourceVersion
+		// only alter the payload if the
+		if request.Payload != nil {
+			r.Payload = request.Payload
+		}
+
+		return store.UpdateResource(tx, r)
+	})
+	switch err {
+	case store.ErrSequenceConflict:
+		return nil, status.Errorf(codes.InvalidArgument, "update out of sequence")
+	case nil:
+		return &api.UpdateResourceResponse{
+			Resource: r,
+		}, nil
+	default:
+		return nil, err
+	}
+}

+ 5 - 0
vendor/github.com/docker/swarmkit/manager/state/raft/util.go

@@ -2,6 +2,7 @@ package raft
 
 import (
 	"context"
+	"net"
 	"time"
 
 	"github.com/docker/swarmkit/api"
@@ -14,11 +15,15 @@ import (
 
 // dial returns a grpc client connection
 func dial(addr string, protocol string, creds credentials.TransportCredentials, timeout time.Duration) (*grpc.ClientConn, error) {
+	// gRPC dialer connects to proxy first. Provide a custom dialer here avoid that.
 	grpcOptions := []grpc.DialOption{
 		grpc.WithBackoffMaxDelay(2 * time.Second),
 		grpc.WithTransportCredentials(creds),
 		grpc.WithUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor),
 		grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor),
+		grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) {
+			return net.DialTimeout("tcp", addr, timeout)
+		}),
 	}
 
 	if timeout != 0 {

+ 19 - 2
vendor/github.com/docker/swarmkit/manager/state/store/resources.go

@@ -1,6 +1,8 @@
 package store
 
 import (
+	"strings"
+
 	"github.com/docker/swarmkit/api"
 	memdb "github.com/hashicorp/go-memdb"
 	"github.com/pkg/errors"
@@ -8,6 +10,12 @@ import (
 
 const tableResource = "resource"
 
+var (
+	// ErrNoKind is returned by resource create operations if the provided Kind
+	// of the resource does not exist
+	ErrNoKind = errors.New("object kind is unregistered")
+)
+
 func init() {
 	register(ObjectStoreConfig{
 		Table: &memdb.TableSchema{
@@ -87,17 +95,26 @@ func confirmExtension(tx Tx, r *api.Resource) error {
 		return errors.Wrap(err, "failed to query extensions")
 	}
 	if len(extensions) == 0 {
-		return errors.Errorf("object kind %s is unregistered", r.Kind)
+		return ErrNoKind
 	}
 	return nil
 }
 
 // CreateResource adds a new resource object to the store.
 // Returns ErrExist if the ID is already taken.
+// Returns ErrNameConflict if a Resource with this Name already exists
+// Returns ErrNoKind if the specified Kind does not exist
 func CreateResource(tx Tx, r *api.Resource) error {
 	if err := confirmExtension(tx, r); err != nil {
 		return err
 	}
+	// TODO(dperny): currently the "name" index is unique, which means only one
+	// Resource of _any_ Kind can exist with that name. This isn't a problem
+	// right now, but the ideal case would be for names to be namespaced to the
+	// kind.
+	if tx.lookup(tableResource, indexName, strings.ToLower(r.Annotations.Name)) != nil {
+		return ErrNameConflict
+	}
 	return tx.create(tableResource, resourceEntry{r})
 }
 
@@ -130,7 +147,7 @@ func GetResource(tx ReadTx, id string) *api.Resource {
 func FindResources(tx ReadTx, by By) ([]*api.Resource, error) {
 	checkType := func(by By) error {
 		switch by.(type) {
-		case byIDPrefix, byName, byKind, byCustom, byCustomPrefix:
+		case byIDPrefix, byName, byNamePrefix, byKind, byCustom, byCustomPrefix:
 			return nil
 		default:
 			return ErrInvalidFindBy

Some files were not shown because too many files changed in this diff