Repository: micromdm/micromdm
Pull request #677 (2020-06-18 22:39:57)

add activation lock bypass code creation
Codes to lock and unlock the device. 

https://developer.apple.com/documentation/devicemanagement/device_assignment/activation_lock_a_device/creating_and_using_bypass_codes

Send the hash to mdmenrollment.apple.com to lock.
To unlock, either type the human readable code string in Setup Assistant, or send it to deviceservices-external.apple.com/deviceservicesworkers/escrowKeyUnlock. 


Patch:
diff --git a/.gitignore b/.gitignore
index 514e2dc..2f8d222 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@ cmd/micromdm/micromdm
 tools/ngrok/config_root
 tools/ngrok/filerepo
 tools/ngrok/env
+mdm-files/
diff --git a/dep/activation_lock.go b/dep/activation_lock.go
new file mode 100644
index 0000000..b42ff3a
--- /dev/null
+++ b/dep/activation_lock.go
@@ -0,0 +1,34 @@
+package dep
+
+import "github.com/pkg/errors"
+
+const (
+	activationLockPath = "device/activationlock"
+)
+
+type ActivationLockRequest struct {
+	Device string `json:"device"`
+
+	//  If the escrow key is not provided, the device will be locked to the person who created the MDM server in the portal.
+	// https://developer.apple.com/documentation/devicemanagement/device_assignment/activation_lock_a_device/creating_and_using_bypass_codes
+	// The EscrowKey is a hex-encoded PBKDF2 derivation of the bypass code. See activationlock.BypassCode.
+	EscrowKey string `json:"escrow_key"`
+
+	LostMessage string `json:"lost_message"`
+}
+
+type ActivationLockResponse struct {
+	SerialNumber string `json:"serial_number"`
+	Status       string `json:"response_status"`
+}
+
+func (c *Client) ActivationLock(alr ActivationLockRequest) (*ActivationLockResponse, error) {
+	req, err := c.newRequest("POST", activationLockPath, &alr)
+	if err != nil {
+		return nil, errors.Wrap(err, "create activation lock request")
+	}
+
+	var response ActivationLockResponse
+	err = c.do(req, &response)
+	return &response, errors.Wrap(err, "activation lock")
+}
diff --git a/go.mod b/go.mod
index 936bf9e..3f5a32a 100644
--- a/go.mod
+++ b/go.mod
@@ -10,7 +10,7 @@ require (
 	github.com/go-sql-driver/mysql v1.4.0 // indirect
 	github.com/go-stack/stack v1.7.0 // indirect
 	github.com/gogo/protobuf v1.3.1
-	github.com/golang/protobuf v1.3.2
+	github.com/golang/protobuf v1.4.2
 	github.com/google/uuid v1.1.1
 	github.com/gorilla/context v1.1.1 // indirect
 	github.com/gorilla/mux v1.6.2
diff --git a/go.sum b/go.sum
index 7500cea..c84726c 100644
--- a/go.sum
+++ b/go.sum
@@ -22,6 +22,16 @@ github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
@@ -77,7 +87,15 @@ golang.org/x/sys v0.0.0-20180614134839-8883426083c0/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/appengine v1.2.0 h1:S0iUepdCWODXRvtE+gcRDd15L+k+k1AiHlMiMjefH24=
 google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 gopkg.in/Masterminds/squirrel.v1 v1.0.0-20170825200431-a6b93000bd21 h1:GmGVIcDxdecAcVjcTp4IpK4VmCMxXhyZKwN2eIzsZ4Y=
 gopkg.in/Masterminds/squirrel.v1 v1.0.0-20170825200431-a6b93000bd21/go.mod h1:8PH4rQjb7OdPC6OWDDuY6J/PT8iSNTiff3jmccc2m10=
diff --git a/mdm/appmanifest/appmanifest.go b/mdm/appmanifest/appmanifest.go
index 915585c..77e946c 100644
--- a/mdm/appmanifest/appmanifest.go
+++ b/mdm/appmanifest/appmanifest.go
@@ -15,34 +15,37 @@ const DefaultMD5Size = 10 << 20 // 10MB
 
 // http://help.apple.com/deployment/osx/#/ior5df10f73a
 type Manifest struct {
-	ManifestItems []Item `plist:"items"`
+	ManifestItems []Item `plist:"items" json:"items"`
 }
 
 type Item struct {
-	Assets []Asset `plist:"assets"`
+	Assets []Asset `plist:"assets" json:"assets"`
 	// Apple claims the metadata struct is required,
 	// but testing shows otherwise.
-	Metadata *Metadata `plist:"metadata,omitempty"`
+	Metadata *Metadata `plist:"metadata,omitempty" json:"metadata,omitempty"`
 }
 
 type Asset struct {
-	Kind    string   `plist:"kind"`
-	MD5Size int64    `plist:"md5-size"`
-	MD5s    []string `plist:"md5s"`
-	URL     string   `plist:"url"`
+	Kind       string   `plist:"kind" json:"kind"`
+	MD5Size    int64    `plist:"md5-size,omitempty" json:"md5-size,omitempty"`
+	MD5s       []string `plist:"md5s,omitempty" json:"md5s,omitempty"`
+	SHA256Size int64    `plist:"sha256-size,omitempty" json:"sha256-size,omitempty"`
+	SHA256s    []string `plist:"sha256s,omitempty" json:"sha256s,omitempty"`
+	URL        string   `plist:"url" json:"url"`
 }
 
 type Metadata struct {
 	BundleInfo
-	Items    []BundleInfo `plist:"items,omitempty"`
-	Kind     string       `plist:"kind"`
-	Subtitle string       `plist:"subtitle"`
-	Title    string       `plist:"title"`
+	Items       []BundleInfo `plist:"items,omitempty" json:"items,omitempty"`
+	Kind        string       `plist:"kind" json:"kind"`
+	Subtitle    string       `plist:"subtitle" json:"subtitle"`
+	Title       string       `plist:"title" json:"title"`
+	SizeInBytes int64        `plist:"sizeInBytes,omitempty" json:"sizeInBytes,omitempty"`
 }
 
 type BundleInfo struct {
-	BundleIdentifier string `plist:"bundle-identifier"`
-	BundleVersion    string `plist:"bundle-version"`
+	BundleIdentifier string `plist:"bundle-identifier" json:"bundle-identifier"`
+	BundleVersion    string `plist:"bundle-version" json:"bundle-version"`
 }
 
 // File is an io.Reader which knows its size.
diff --git a/mdm/mdm/internal/mdmproto/mdm.pb.go b/mdm/mdm/internal/mdmproto/mdm.pb.go
index bcecf21..6849547 100644
--- a/mdm/mdm/internal/mdmproto/mdm.pb.go
+++ b/mdm/mdm/internal/mdmproto/mdm.pb.go
@@ -132,6 +132,8 @@ type Command struct {
 	//- DeviceConfigured
 	//- AvailableOSUpdates
 	//- NSExtensionMappings
+	//- EnableRemoteDesktop
+	//- DisableRemoteDesktop
 	//- ActivationLockBypassCode
 	//
 	// Types that are valid to be assigned to Request:
@@ -1822,6 +1824,8 @@ type Asset struct {
 	Md5Size              int64    `protobuf:"varint,2,opt,name=md5_size,json=md5Size,proto3" json:"md5_size,omitempty"`
 	Md5S                 []string `protobuf:"bytes,3,rep,name=md5s,proto3" json:"md5s,omitempty"`
 	Url                  string   `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"`
+	Sha256Size           int64    `protobuf:"varint,5,opt,name=sha256_size,json=sha256Size,proto3" json:"sha256_size,omitempty"`
+	Sha256S              []string `protobuf:"bytes,6,rep,name=sha256s,proto3" json:"sha256s,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -1888,6 +1892,20 @@ func (m *Asset) GetUrl() string {
 	return ""
 }
 
+func (m *Asset) GetSha256Size() int64 {
+	if m != nil {
+		return m.Sha256Size
+	}
+	return 0
+}
+
+func (m *Asset) GetSha256S() []string {
+	if m != nil {
+		return m.Sha256S
+	}
+	return nil
+}
+
 type Metadata struct {
 	BundleIdentifier     string        `protobuf:"bytes,1,opt,name=bundle_identifier,json=bundleIdentifier,proto3" json:"bundle_identifier,omitempty"`
 	BundleVersion        string        `protobuf:"bytes,2,opt,name=bundle_version,json=bundleVersion,proto3" json:"bundle_version,omitempty"`
@@ -1895,6 +1913,7 @@ type Metadata struct {
 	Kind                 string        `protobuf:"bytes,4,opt,name=kind,proto3" json:"kind,omitempty"`
 	Subtitle             string        `protobuf:"bytes,5,opt,name=subtitle,proto3" json:"subtitle,omitempty"`
 	Title                string        `protobuf:"bytes,6,opt,name=title,proto3" json:"title,omitempty"`
+	SizeInBytes          int64         `protobuf:"varint,7,opt,name=size_in_bytes,json=sizeInBytes,proto3" json:"size_in_bytes,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
 	XXX_unrecognized     []byte        `json:"-"`
 	XXX_sizecache        int32         `json:"-"`
@@ -1975,6 +1994,13 @@ func (m *Metadata) GetTitle() string {
 	return ""
 }
 
+func (m *Metadata) GetSizeInBytes() int64 {
+	if m != nil {
+		return m.SizeInBytes
+	}
+	return 0
+}
+
 type BundleInfo struct {
 	BundleIdentifier     string   `protobuf:"bytes,1,opt,name=bundle_identifier,json=bundleIdentifier,proto3" json:"bundle_identifier,omitempty"`
 	BundleVersion        string   `protobuf:"bytes,2,opt,name=bundle_version,json=bundleVersion,proto3" json:"bundle_version,omitempty"`
@@ -4466,242 +4492,245 @@ func init() {
 func init() { proto.RegisterFile("mdm.proto", fileDescriptor_fd1fa389f704dbf7) }
 
 var fileDescriptor_fd1fa389f704dbf7 = []byte{
-	// 3746 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0x4b, 0x73, 0x1c, 0x47,
-	0x72, 0xc6, 0x10, 0x20, 0x30, 0x93, 0x18, 0x00, 0x83, 0xc2, 0x83, 0x03, 0x80, 0x04, 0xc8, 0xe6,
-	0x6a, 0x45, 0x69, 0x25, 0xd2, 0xa6, 0xc4, 0x5d, 0xed, 0x5a, 0xb2, 0x05, 0x02, 0xe4, 0x02, 0x2b,
-	0x82, 0x40, 0xf4, 0x90, 0x54, 0x84, 0xb5, 0xeb, 0xde, 0x46, 0x77, 0x61, 0xa6, 0x02, 0xfd, 0xda,
-	0xaa, 0xee, 0x81, 0x46, 0x67, 0x3b, 0x7c, 0xf6, 0xc5, 0xe1, 0xf0, 0xc5, 0x77, 0x87, 0xff, 0x80,
-	0x7d, 0xf3, 0xcd, 0xc7, 0x0d, 0xff, 0x82, 0x0d, 0xf9, 0x57, 0xf8, 0xe6, 0xc8, 0x7a, 0x74, 0xf7,
-	0xf4, 0x34, 0x06, 0xbc, 0xf8, 0x36, 0x9d, 0xf9, 0x65, 0xd6, 0x33, 0xb3, 0xf2, 0x31, 0xd0, 0x0a,
-	0xfd, 0xf0, 0x71, 0xc2, 0xe3, 0x34, 0x26, 0xcd, 0xd0, 0x0f, 0xe5, 0x2f, 0xeb, 0xf7, 0xb0, 0x7c,
-	0x10, 0x87, 0xa1, 0x1b, 0xf9, 0x67, 0xee, 0x28, 0x88, 0x5d, 0x9f, 0x3c, 0x80, 0xb6, 0xa7, 0x28,
-	0x4e, 0x96, 0x31, 0xbf, 0xdb, 0xb8, 0xdf, 0x78, 0xd4, 0xb2, 0x17, 0x35, 0xed, 0x6d, 0xc6, 0x7c,
-	0xf2, 0x33, 0x58, 0xd0, 0x9f, 0xdd, 0x5b, 0xf7, 0x1b, 0x8f, 0x16, 0x9f, 0xae, 0x3e, 0x36, 0x0a,
-	0x1f, 0x6b, 0x6d, 0xb6, 0x41, 0x58, 0xff, 0x76, 0x07, 0x16, 0x34, 0x11, 0x75, 0x73, 0xfa, 0x87,
-	0x8c, 0x8a, 0xd4, 0x49, 0x47, 0x09, 0x35, 0xba, 0x35, 0xed, 0xcd, 0x28, 0xa1, 0xe4, 0x00, 0x56,
-	0x58, 0x24, 0x52, 0x37, 0x08, 0x9c, 0x84, 0xc7, 0x17, 0x2c, 0xa0, 0x7a, 0x8c, 0x6e, 0x31, 0xc6,
-	0xb1, 0x02, 0x9c, 0x29, 0xfe, 0xd1, 0x8c, 0xbd, 0xcc, 0xc6, 0x28, 0xe4, 0x6b, 0x58, 0xe6, 0x34,
-	0x8c, 0x87, 0x34, 0xd7, 0x31, 0x2b, 0x75, 0xdc, 0x29, 0x74, 0xd8, 0x92, 0x5f, 0xa8, 0x58, 0xe2,
-	0x65, 0x02, 0x19, 0xc0, 0xdd, 0xd2, 0x34, 0x86, 0x4c, 0xb0, 0x38, 0x62, 0x51, 0x3f, 0xd7, 0x37,
-	0x27, 0xf5, 0xfd, 0xa4, 0x6e, 0x4e, 0x39, 0xb8, 0x50, 0xbe, 0xcd, 0xae, 0xe5, 0x12, 0x0a, 0x3b,
-	0xe5, 0xb9, 0x56, 0x07, 0xba, 0x2d, 0x07, 0x7a, 0x58, 0x33, 0xf1, 0x9a, 0x71, 0xb6, 0x4a, 0x8b,
-	0xa8, 0x0c, 0x73, 0x0e, 0x66, 0x12, 0xd4, 0x77, 0xdc, 0x24, 0x09, 0x98, 0xe7, 0xa6, 0x2c, 0x8e,
-	0x9c, 0x80, 0x89, 0xb4, 0x3b, 0x2f, 0x47, 0xb1, 0x26, 0x96, 0x43, 0xfd, 0xfd, 0x02, 0xfa, 0x8a,
-	0x89, 0xf4, 0x68, 0xc6, 0xee, 0xb2, 0x6b, 0x78, 0xe4, 0x15, 0x10, 0x9f, 0x0e, 0x99, 0x47, 0x1d,
-	0x16, 0x5d, 0xc4, 0x3c, 0x94, 0x9c, 0xee, 0x82, 0xd4, 0xbd, 0x53, 0xe8, 0x3e, 0x94, 0x98, 0xe3,
-	0x02, 0x72, 0x34, 0x63, 0xaf, 0xfa, 0x55, 0x22, 0xf9, 0x05, 0x2c, 0x6a, 0x6d, 0x41, 0xec, 0x5d,
-	0x76, 0x9b, 0x52, 0xcd, 0x7a, 0x55, 0xcd, 0xab, 0xd8, 0xbb, 0x3c, 0x9a, 0xb1, 0xc1, 0xcf, 0xbf,
-	0xf0, 0xf4, 0xbd, 0x80, 0xba, 0xdc, 0x49, 0x5c, 0x21, 0xbc, 0xd8, 0xa7, 0xdd, 0x56, 0xf5, 0xf4,
-	0x0f, 0x90, 0x7f, 0xa6, 0xd9, 0x78, 0xfa, 0x5e, 0x99, 0x40, 0x7e, 0x05, 0x6d, 0xca, 0x5d, 0x41,
-	0x1d, 0xa5, 0xb5, 0x0b, 0x52, 0x7e, 0xa3, 0x90, 0x7f, 0x81, 0x5c, 0x35, 0x81, 0xa3, 0x19, 0x7b,
-	0x91, 0x16, 0x9f, 0xe4, 0x18, 0x56, 0xcd, 0x1d, 0x0f, 0x19, 0xe7, 0x31, 0x67, 0x51, 0xbf, 0xbb,
-	0x28, 0x15, 0x6c, 0x97, 0x4f, 0x51, 0x42, 0x4e, 0x0c, 0xe2, 0x68, 0xc6, 0xee, 0xf0, 0x0a, 0x8d,
-	0x7c, 0x89, 0xe6, 0x22, 0x52, 0xce, 0x3c, 0xdc, 0x10, 0xd1, 0x6d, 0x4b, 0x2d, 0x9b, 0x65, 0x2d,
-	0x05, 0xf7, 0x68, 0xc6, 0x1e, 0x43, 0x93, 0x13, 0x58, 0xcb, 0x22, 0xdc, 0x3a, 0x27, 0x13, 0x94,
-	0x3b, 0xae, 0xe7, 0xc5, 0x59, 0x94, 0x76, 0x97, 0xaa, 0xc7, 0xf1, 0x56, 0x82, 0xde, 0x0a, 0xca,
-	0xf7, 0x15, 0x04, 0x8f, 0x23, 0xab, 0x12, 0xd5, 0x71, 0x04, 0x34, 0xa5, 0x52, 0x5d, 0x77, 0x79,
-	0xf2, 0x38, 0x90, 0x89, 0x12, 0xea, 0x38, 0xcc, 0x17, 0x39, 0x84, 0x0e, 0x8d, 0xdc, 0xf3, 0x00,
-	0xcf, 0x11, 0x37, 0x05, 0x0f, 0x64, 0xa5, 0x6a, 0xd2, 0x2f, 0x24, 0xe2, 0x55, 0x2c, 0xd2, 0x13,
-	0x75, 0x22, 0xcb, 0x74, 0x8c, 0x42, 0x4e, 0x61, 0xcd, 0x18, 0x64, 0xe9, 0xf6, 0x76, 0x3b, 0x52,
-	0xd1, 0xdd, 0x89, 0x8b, 0x5b, 0xba, 0x9a, 0x47, 0x33, 0x36, 0x61, 0x13, 0x54, 0xf2, 0x16, 0x36,
-	0xf4, 0x96, 0x38, 0x5e, 0x1c, 0x5d, 0xb0, 0x7e, 0xc6, 0x95, 0xca, 0x55, 0xa9, 0x72, 0xb7, 0x50,
-	0xa9, 0x77, 0xe0, 0xa0, 0x8c, 0x3a, 0x9a, 0xb1, 0xd7, 0xdd, 0x1a, 0x3a, 0xe9, 0xc1, 0x06, 0xce,
-	0x6f, 0xe4, 0x70, 0xea, 0xd3, 0x30, 0x91, 0x26, 0x26, 0xef, 0x20, 0x91, 0x6a, 0xef, 0x95, 0xd4,
-	0x22, 0xcc, 0xce, 0x51, 0x07, 0x6a, 0xdd, 0x6b, 0xee, 0x24, 0x99, 0xfc, 0x16, 0xba, 0xa1, 0x1b,
-	0xb9, 0xfd, 0x3a, 0xd3, 0x5d, 0x93, 0x7a, 0xef, 0x17, 0x7a, 0x4f, 0x14, 0x72, 0xd2, 0x70, 0x37,
-	0xc3, 0x5a, 0x0e, 0x9a, 0xad, 0xf6, 0x40, 0xe5, 0x9d, 0x5d, 0xaf, 0xde, 0x13, 0xe5, 0x78, 0xc6,
-	0x37, 0x76, 0x95, 0x57, 0x89, 0xe4, 0xd7, 0xb0, 0xca, 0xa2, 0x21, 0x4b, 0xa9, 0x93, 0xc6, 0xe8,
-	0xc5, 0xfa, 0xdc, 0x0d, 0xbb, 0x1b, 0x52, 0xd9, 0x56, 0xf9, 0x98, 0x10, 0xf2, 0x26, 0x3e, 0x53,
-	0x80, 0xa3, 0x19, 0x7b, 0x85, 0x8d, 0x93, 0xf0, 0x80, 0x86, 0x6e, 0xc0, 0x7c, 0x37, 0x75, 0xcb,
-	0x13, 0x13, 0xdd, 0xcd, 0xea, 0x01, 0xbd, 0x53, 0xb0, 0xf2, 0x34, 0xd0, 0x1c, 0xd6, 0x8d, 0x78,
-	0x99, 0x4e, 0xbe, 0x82, 0x25, 0x73, 0x91, 0x42, 0xea, 0x33, 0xb7, 0x7b, 0xa7, 0x6a, 0x55, 0xfa,
-	0x0a, 0x9d, 0x20, 0x17, 0xad, 0x8a, 0x95, 0xbe, 0xd1, 0x35, 0xe8, 0xcd, 0x52, 0xd2, 0xdd, 0xaa,
-	0x6b, 0x50, 0xdb, 0x64, 0x84, 0x17, 0x79, 0xf1, 0x49, 0xfe, 0x0c, 0x9a, 0x82, 0xa6, 0x29, 0x8b,
-	0xfa, 0xa2, 0xbb, 0x25, 0xe5, 0x48, 0x21, 0xd7, 0xd3, 0x9c, 0xa3, 0x19, 0x3b, 0x47, 0x91, 0x2b,
-	0x78, 0x50, 0x77, 0xf0, 0xe3, 0x17, 0x76, 0x5b, 0xaa, 0xfa, 0x68, 0xda, 0x0d, 0xa8, 0xde, 0xdd,
-	0xbd, 0x70, 0x3a, 0x84, 0x44, 0xb0, 0x5b, 0x37, 0xb0, 0x9b, 0xa6, 0x9c, 0x9d, 0x67, 0x29, 0x15,
-	0xdd, 0x1d, 0x39, 0xea, 0x4f, 0xa7, 0x8d, 0xba, 0x9f, 0xa3, 0x8f, 0x66, 0xec, 0xbb, 0xe1, 0x14,
-	0x3e, 0xbe, 0xb7, 0x75, 0xe3, 0x5d, 0x50, 0xea, 0x9f, 0xbb, 0xde, 0x65, 0xf7, 0x6e, 0xf5, 0xbd,
-	0x9d, 0x1c, 0xed, 0xa5, 0xc6, 0xe2, 0x7b, 0x1b, 0x5e, 0xcb, 0x45, 0x03, 0x15, 0x34, 0x75, 0x2e,
-	0x18, 0x0f, 0xaf, 0x5c, 0x4e, 0xe5, 0x23, 0x71, 0x15, 0x73, 0xbf, 0x7b, 0xaf, 0x6a, 0xa0, 0x3d,
-	0x9a, 0xbe, 0xd4, 0xa8, 0x33, 0x0d, 0x42, 0x03, 0x15, 0x93, 0x64, 0x34, 0xd0, 0x21, 0xe5, 0xec,
-	0x62, 0x54, 0xa3, 0x77, 0xb7, 0x6a, 0xa0, 0xef, 0x24, 0xb2, 0x46, 0xf5, 0xe6, 0xb0, 0x96, 0x43,
-	0xbe, 0x85, 0x3b, 0x38, 0x65, 0x37, 0x4b, 0x63, 0xc7, 0xf5, 0x43, 0x16, 0x15, 0xca, 0xf7, 0xaa,
-	0xb6, 0xd0, 0xa3, 0xe9, 0x7e, 0x96, 0xc6, 0xfb, 0x08, 0x2b, 0xa9, 0x5e, 0x17, 0x35, 0x74, 0xf2,
-	0x1b, 0x20, 0xc2, 0x1b, 0x50, 0x3f, 0x0b, 0xa8, 0x13, 0x0b, 0x27, 0x4b, 0xd0, 0x8a, 0xba, 0xf7,
-	0xab, 0x8f, 0x55, 0x4f, 0x63, 0x4e, 0x7b, 0x6f, 0x25, 0x02, 0x1f, 0x2b, 0x23, 0x77, 0x2a, 0x14,
-	0x4d, 0x4e, 0x72, 0x42, 0x97, 0x23, 0x3c, 0x37, 0xea, 0x3e, 0x98, 0x98, 0x64, 0x45, 0x61, 0xcf,
-	0x73, 0xa5, 0x47, 0xad, 0x2a, 0x45, 0x3a, 0x39, 0x83, 0x75, 0xd7, 0x4b, 0xd9, 0x90, 0x3a, 0x91,
-	0x70, 0xe8, 0xf7, 0x29, 0x8d, 0x84, 0x74, 0x03, 0x56, 0xd5, 0xf5, 0xef, 0x4b, 0xd4, 0xeb, 0xde,
-	0x8b, 0x1c, 0x83, 0xae, 0x5f, 0xc9, 0xbe, 0x16, 0x05, 0x15, 0x35, 0xf2, 0x38, 0xc5, 0xe9, 0x61,
-	0x68, 0x34, 0x74, 0xb3, 0x20, 0x75, 0x2e, 0xe9, 0xa8, 0xfb, 0xb0, 0xaa, 0xd1, 0x96, 0xa8, 0x97,
-	0x2c, 0xa0, 0xef, 0x10, 0xf4, 0x0d, 0x1d, 0xa1, 0x46, 0x9e, 0x53, 0x87, 0x9a, 0x8a, 0xe6, 0x62,
-	0x9c, 0x0a, 0x8d, 0x52, 0xca, 0x13, 0xce, 0xc4, 0xb8, 0x3b, 0xfd, 0x49, 0xd5, 0x5c, 0xb4, 0x97,
-	0x79, 0x91, 0xc3, 0xc7, 0x3d, 0xab, 0x09, 0x3f, 0x6b, 0xf9, 0xf8, 0xb6, 0xe3, 0x8d, 0x38, 0x8f,
-	0xe3, 0x54, 0xa4, 0xdc, 0x4d, 0x9c, 0x34, 0xbe, 0xa4, 0x51, 0xf7, 0x83, 0xaa, 0xcf, 0xee, 0xd1,
-	0xf4, 0xb9, 0xc1, 0xbc, 0x41, 0x08, 0xfa, 0x6c, 0x51, 0x25, 0x3e, 0x6f, 0xc1, 0x82, 0x0e, 0x3e,
-	0xac, 0x8f, 0x61, 0x79, 0x3c, 0xbc, 0x26, 0x5d, 0x58, 0x48, 0x54, 0x6e, 0x20, 0xe3, 0xf5, 0xb6,
-	0x6d, 0x3e, 0xad, 0x27, 0xb0, 0x34, 0x16, 0x46, 0x93, 0x5d, 0x00, 0xe6, 0xd3, 0x28, 0x65, 0x17,
-	0x8c, 0x72, 0x1d, 0xdd, 0x97, 0x28, 0xd6, 0x29, 0x6c, 0x5f, 0x1f, 0x27, 0x93, 0x3f, 0x87, 0xf5,
-	0xda, 0x58, 0x5b, 0x8d, 0xba, 0x96, 0x4c, 0x8a, 0x58, 0x4f, 0x60, 0xeb, 0xda, 0x78, 0x98, 0x10,
-	0x98, 0x2b, 0x65, 0x30, 0xf2, 0xb7, 0x35, 0x80, 0xee, 0x75, 0xa1, 0x2d, 0xb9, 0x0f, 0x8b, 0xc5,
-	0x5c, 0x45, 0xb7, 0x71, 0x7f, 0x16, 0x93, 0x93, 0x12, 0x89, 0x7c, 0x0c, 0xab, 0x25, 0x2f, 0x25,
-	0x9c, 0x38, 0x0a, 0x46, 0x32, 0x3d, 0x69, 0xda, 0x2b, 0x85, 0xcb, 0x11, 0xa7, 0x51, 0x30, 0xb2,
-	0x3e, 0x85, 0xd5, 0x89, 0x40, 0x17, 0xf7, 0xf2, 0x0f, 0x19, 0xe5, 0x8c, 0x1a, 0xf5, 0xe6, 0xd3,
-	0x7a, 0x0a, 0x4b, 0x63, 0x41, 0x29, 0xe6, 0x4a, 0x3a, 0x7c, 0x53, 0x67, 0xab, 0x76, 0x61, 0x51,
-	0xd1, 0xe4, 0xb1, 0x59, 0xdf, 0x01, 0x14, 0x41, 0x30, 0xe9, 0xc0, 0x6c, 0xc2, 0x22, 0xbd, 0x5a,
-	0xfc, 0x89, 0xa3, 0x85, 0x54, 0x08, 0xb7, 0xaf, 0x72, 0xa8, 0x96, 0x6d, 0x3e, 0x51, 0x79, 0x32,
-	0x88, 0x23, 0xea, 0x44, 0x59, 0x78, 0x4e, 0xb9, 0x4c, 0x8f, 0x5a, 0xf6, 0xa2, 0xa4, 0xbd, 0x96,
-	0x24, 0xeb, 0xef, 0x1b, 0xb0, 0x58, 0x0a, 0x73, 0x6b, 0xd4, 0x7f, 0x02, 0x24, 0xe1, 0x54, 0x50,
-	0x3e, 0xa4, 0x8e, 0x7c, 0xa5, 0x93, 0xc0, 0x8d, 0xf4, 0x76, 0x74, 0x0c, 0xe7, 0xd0, 0x4d, 0xdd,
-	0xb3, 0xc0, 0x8d, 0xc8, 0x17, 0xd0, 0xf5, 0x99, 0x70, 0x83, 0x20, 0xbe, 0xc2, 0x93, 0xfd, 0x9e,
-	0x85, 0x2c, 0x1d, 0x39, 0x82, 0xa6, 0x59, 0x22, 0x87, 0x6f, 0xda, 0x9b, 0x86, 0x7f, 0x66, 0xd8,
-	0x3d, 0xe4, 0x5a, 0xff, 0xda, 0x80, 0x4e, 0x35, 0x5e, 0x26, 0x1f, 0x41, 0xc7, 0xa7, 0x22, 0x65,
-	0x91, 0x7a, 0x28, 0x22, 0x37, 0x34, 0xe9, 0xe4, 0x4a, 0x89, 0xfe, 0xda, 0x0d, 0x29, 0x79, 0x0a,
-	0x1b, 0x65, 0xa8, 0x49, 0x51, 0x7c, 0xbd, 0x29, 0x6b, 0x25, 0xa6, 0x3e, 0x31, 0x9f, 0xec, 0x40,
-	0x0b, 0x5d, 0x97, 0x93, 0xb2, 0x90, 0xea, 0xdd, 0x69, 0x22, 0xe1, 0x0d, 0x0b, 0x29, 0xd9, 0x86,
-	0x66, 0xee, 0x80, 0xe7, 0x14, 0xcf, 0x7c, 0x5b, 0xfb, 0xd0, 0x2e, 0x47, 0xe5, 0xfa, 0x52, 0xe3,
-	0x7d, 0x74, 0xc6, 0x62, 0xf9, 0x86, 0x5c, 0xf2, 0x9a, 0xe6, 0x95, 0x45, 0xac, 0x27, 0xb0, 0x3a,
-	0x11, 0x93, 0xe3, 0x98, 0x18, 0x77, 0x97, 0xd6, 0x99, 0x7f, 0x5b, 0xa7, 0x78, 0x0f, 0xf2, 0x78,
-	0x7b, 0x0a, 0x92, 0x7c, 0x00, 0xcb, 0x17, 0x31, 0xf7, 0x30, 0xb1, 0x09, 0xa8, 0xf4, 0x4b, 0xea,
-	0xb8, 0x96, 0x24, 0xf5, 0x50, 0x13, 0x2d, 0x06, 0xcb, 0xe3, 0x01, 0x79, 0xf9, 0x2a, 0x35, 0xa6,
-	0x5f, 0xa5, 0x5b, 0x13, 0x57, 0x09, 0x67, 0x74, 0x11, 0xc7, 0x69, 0x14, 0xa7, 0xf9, 0x5e, 0x9a,
-	0x6f, 0xeb, 0x3f, 0x66, 0x81, 0x4c, 0xc6, 0xec, 0xe4, 0xa7, 0xb0, 0xc2, 0xd2, 0x2c, 0xa2, 0xc2,
-	0x11, 0x69, 0xcc, 0xe5, 0x69, 0xe1, 0xb8, 0xb3, 0xf6, 0x92, 0x22, 0xf7, 0x90, 0x7a, 0xec, 0x57,
-	0x3c, 0xce, 0xad, 0xaa, 0xc7, 0x21, 0x5f, 0xc1, 0x42, 0x9c, 0xa8, 0x1d, 0x9f, 0xad, 0x66, 0xd2,
-	0x93, 0xc3, 0x9e, 0x2a, 0xa8, 0x6d, 0x64, 0x70, 0x71, 0xa1, 0x1b, 0xb1, 0x0b, 0xcc, 0xe6, 0x32,
-	0x1e, 0xe8, 0xd3, 0x5e, 0x34, 0xb4, 0xb7, 0x3c, 0xc0, 0x8b, 0xa8, 0x4c, 0x3f, 0xa4, 0x51, 0xea,
-	0x5c, 0x04, 0x6e, 0x5f, 0xc8, 0xa4, 0x7d, 0xd6, 0xb8, 0x04, 0xa4, 0xbf, 0x44, 0x32, 0x39, 0x85,
-	0xa5, 0xf1, 0xc8, 0x6d, 0xbe, 0x1a, 0xb9, 0x4d, 0x4e, 0x69, 0x2c, 0x2c, 0xb3, 0xc7, 0xe5, 0xc9,
-	0x4b, 0x80, 0x52, 0x44, 0xb6, 0x70, 0xcd, 0x13, 0x53, 0x1b, 0x71, 0xd9, 0x25, 0x49, 0xf2, 0x73,
-	0xb8, 0xe3, 0x0d, 0xdc, 0xa8, 0x4f, 0x9d, 0xd2, 0x52, 0x04, 0xbe, 0x72, 0x32, 0xed, 0x6e, 0xd9,
-	0x1b, 0x8a, 0x7d, 0x92, 0x73, 0x7b, 0xc8, 0xb4, 0x0e, 0x61, 0xeb, 0xda, 0x4d, 0x24, 0x1f, 0xc2,
-	0x4a, 0x92, 0x71, 0x6f, 0x80, 0x79, 0x74, 0x48, 0xd3, 0x41, 0x6c, 0x8e, 0x70, 0xd9, 0x90, 0x4f,
-	0x24, 0xd5, 0x7a, 0x00, 0x7b, 0x37, 0xac, 0xdb, 0xda, 0x85, 0xbb, 0xd3, 0x16, 0x63, 0xfd, 0x6f,
-	0x23, 0x07, 0xd4, 0x3f, 0x98, 0x8f, 0xa1, 0x69, 0x0e, 0x4d, 0xce, 0x62, 0x2c, 0xf4, 0x3e, 0xd1,
-	0x1c, 0x3b, 0xc7, 0x4c, 0x1c, 0xfc, 0xad, 0xc9, 0x83, 0xff, 0x0b, 0xd8, 0x2e, 0x43, 0x9c, 0x84,
-	0x45, 0xf2, 0xd9, 0xf2, 0x28, 0x4f, 0xf1, 0xb6, 0xcd, 0x3e, 0x6a, 0xdb, 0x77, 0x4a, 0x02, 0x67,
-	0x8a, 0x7f, 0x80, 0x6c, 0x72, 0x0c, 0x0f, 0x0c, 0x9e, 0xd3, 0x61, 0x6c, 0xe2, 0xfa, 0x01, 0xf5,
-	0x2e, 0x1d, 0x7c, 0x8a, 0x19, 0xa7, 0xca, 0xb7, 0x34, 0xed, 0x5d, 0x0d, 0xb4, 0x73, 0xdc, 0x01,
-	0xc2, 0x6c, 0x8d, 0xb2, 0x8e, 0xa1, 0x69, 0x16, 0x40, 0xbe, 0x82, 0xe5, 0x7c, 0x4e, 0x2c, 0xa5,
-	0xa1, 0x7a, 0x66, 0xc6, 0xb2, 0x1b, 0x83, 0x3d, 0x4e, 0x69, 0x68, 0x2f, 0x85, 0xa5, 0x2f, 0x61,
-	0xf5, 0xa1, 0x5d, 0x66, 0x93, 0x0f, 0x61, 0xde, 0x15, 0x82, 0xa6, 0x46, 0xcd, 0x4a, 0x29, 0xd8,
-	0x42, 0xba, 0xad, 0xd9, 0x72, 0x7b, 0x69, 0xea, 0xe2, 0x2b, 0xa0, 0xcb, 0x75, 0xe5, 0xed, 0xd5,
-	0x1c, 0x3b, 0xc7, 0x58, 0xbf, 0x85, 0xdb, 0x52, 0x01, 0xbe, 0xd1, 0x97, 0x2c, 0xca, 0xdf, 0x68,
-	0xfc, 0x4d, 0xb6, 0xa0, 0x19, 0xfa, 0xcf, 0x1c, 0xc1, 0x7e, 0x50, 0xef, 0xd6, 0xac, 0xbd, 0x10,
-	0xfa, 0xcf, 0x7a, 0xec, 0x07, 0xf9, 0xa4, 0x87, 0xfe, 0x33, 0xb5, 0xbb, 0x2d, 0x5b, 0xfe, 0xc6,
-	0x87, 0xa9, 0x30, 0x4d, 0xfc, 0x69, 0xfd, 0xb1, 0x01, 0x4d, 0x33, 0x28, 0xf9, 0x19, 0xac, 0x9e,
-	0x67, 0x91, 0x1f, 0xa0, 0x0f, 0xa9, 0x84, 0x26, 0x1d, 0xc5, 0x38, 0x2e, 0xdc, 0xc5, 0x07, 0xb0,
-	0xac, 0xc1, 0x43, 0xca, 0x85, 0xf1, 0x8f, 0x2d, 0x7b, 0x49, 0x51, 0xdf, 0x29, 0x22, 0xf9, 0x18,
-	0x6e, 0xab, 0xdd, 0x9d, 0x95, 0xdb, 0x52, 0xaa, 0x82, 0x3c, 0x57, 0x1a, 0xa3, 0x8b, 0xd8, 0x56,
-	0x90, 0x7c, 0x85, 0x73, 0xa5, 0x15, 0x6e, 0x43, 0x53, 0x64, 0xe7, 0x29, 0x4b, 0x75, 0x81, 0x0f,
-	0x1f, 0x17, 0xfd, 0x4d, 0xd6, 0xe1, 0xb6, 0x62, 0xcc, 0x4b, 0x86, 0xfa, 0xb0, 0x7e, 0x0f, 0x50,
-	0xa8, 0xfe, 0xff, 0x58, 0x93, 0xf5, 0x37, 0xb0, 0x56, 0x53, 0x91, 0xb8, 0x29, 0xa4, 0x43, 0x2b,
-	0xaf, 0x56, 0x3a, 0x94, 0xfa, 0x65, 0x3e, 0xa6, 0xc8, 0xfa, 0x15, 0x6c, 0xd6, 0x57, 0x26, 0x6e,
-	0x8e, 0xbb, 0xac, 0xcf, 0x60, 0x75, 0xa2, 0xfa, 0x70, 0x63, 0xb0, 0xf9, 0x2d, 0xac, 0x54, 0xaa,
-	0x0c, 0xe4, 0x1e, 0x80, 0xae, 0x48, 0x38, 0x79, 0x5c, 0xd8, 0xd2, 0x94, 0x63, 0x1f, 0x77, 0x4a,
-	0x16, 0x21, 0x94, 0x31, 0x16, 0x66, 0xbf, 0x54, 0x50, 0xdf, 0xf2, 0xc0, 0xfa, 0x02, 0xd6, 0xeb,
-	0x2a, 0x0e, 0xef, 0xb1, 0x8e, 0x7f, 0x99, 0x83, 0xf5, 0xba, 0x6a, 0x12, 0x79, 0x05, 0x0f, 0xc5,
-	0x25, 0x4b, 0x9c, 0x84, 0xb3, 0xd0, 0xe5, 0x3a, 0x2c, 0x72, 0xf2, 0xfa, 0x14, 0xa7, 0xea, 0xbd,
-	0x50, 0x41, 0xc3, 0x1e, 0x42, 0xcf, 0x14, 0x52, 0x46, 0x48, 0x46, 0xa5, 0x86, 0x91, 0x77, 0xf0,
-	0x11, 0x66, 0x07, 0xf5, 0xca, 0x5c, 0xe1, 0x70, 0xda, 0xcf, 0x02, 0x97, 0xab, 0x42, 0x9e, 0x0a,
-	0x00, 0x1e, 0x0a, 0x9a, 0xd6, 0xa8, 0xdc, 0x17, 0xb6, 0xc2, 0xca, 0xc8, 0xa2, 0x07, 0x1f, 0xfa,
-	0x71, 0xa4, 0x13, 0xd1, 0x24, 0x4e, 0xb2, 0x00, 0x73, 0x28, 0x33, 0x8c, 0x19, 0x80, 0x45, 0x17,
-	0xb1, 0x76, 0x5d, 0x16, 0xc2, 0x31, 0xed, 0x3c, 0xd3, 0x60, 0x3d, 0x84, 0xd6, 0x2e, 0xef, 0xf2,
-	0x2f, 0x61, 0x4b, 0x46, 0xb9, 0xb5, 0x6a, 0x6e, 0xab, 0xc0, 0x10, 0x01, 0xf5, 0xa2, 0x55, 0xa9,
-	0x8b, 0x2c, 0x08, 0x54, 0x30, 0xa8, 0xcc, 0x67, 0x33, 0x19, 0x13, 0x7b, 0x99, 0x05, 0x81, 0x8c,
-	0x09, 0x6b, 0x44, 0x65, 0x95, 0x54, 0x8a, 0x2e, 0xd4, 0x89, 0xe2, 0x0e, 0x48, 0xd1, 0xef, 0x60,
-	0x4b, 0x6e, 0x80, 0xde, 0x56, 0x99, 0x8f, 0x6b, 0x1d, 0xc6, 0x21, 0x94, 0x92, 0x7d, 0x5c, 0xbd,
-	0xda, 0x51, 0x04, 0x6a, 0x5d, 0xc2, 0xde, 0x74, 0x6b, 0xe9, 0xd6, 0x3f, 0x34, 0x60, 0xb3, 0x5e,
-	0x04, 0x2f, 0xaf, 0x18, 0xc4, 0x3c, 0x2d, 0xc7, 0xba, 0x2d, 0x49, 0x91, 0xd3, 0xda, 0x81, 0x56,
-	0xb1, 0xf8, 0x5b, 0x3a, 0xca, 0x32, 0xcb, 0x7d, 0x08, 0x4b, 0x26, 0x42, 0x75, 0x06, 0xae, 0x18,
-	0xc8, 0x60, 0xa8, 0x6d, 0xb7, 0x0d, 0xf1, 0xc8, 0x15, 0x03, 0xb2, 0x09, 0xf3, 0x03, 0xe6, 0xfb,
-	0x34, 0xd2, 0xa7, 0xa7, 0xbf, 0x2c, 0x0e, 0xed, 0x72, 0x49, 0xec, 0xbd, 0x63, 0xb3, 0x1d, 0x68,
-	0xc9, 0x1a, 0x59, 0xc9, 0x92, 0x9a, 0x92, 0x80, 0xaf, 0xe7, 0x3d, 0x00, 0xc5, 0x94, 0x8d, 0x20,
-	0x15, 0x15, 0x2a, 0xf8, 0x9b, 0x51, 0x42, 0xad, 0x11, 0x2c, 0x96, 0x0a, 0x69, 0x15, 0x74, 0xa3,
-	0x82, 0xae, 0x9b, 0xd1, 0xad, 0xba, 0x19, 0xe1, 0x36, 0xa0, 0xbb, 0x13, 0x29, 0x06, 0x38, 0xcc,
-	0xd7, 0xe3, 0xb6, 0x0b, 0xe2, 0xb1, 0x6f, 0xfd, 0x12, 0x9a, 0xa6, 0x16, 0x47, 0x3e, 0x2d, 0x55,
-	0xec, 0xd4, 0x13, 0xb8, 0x3a, 0x51, 0xb1, 0x2b, 0xca, 0x75, 0xd6, 0x7f, 0x36, 0x61, 0x41, 0x53,
-	0xd1, 0xef, 0xe3, 0x03, 0x60, 0x5e, 0x36, 0xfc, 0x4d, 0xbe, 0xcc, 0x5b, 0x1a, 0xf9, 0x29, 0xd5,
-	0x74, 0x46, 0xf0, 0xc4, 0x8c, 0x6e, 0xdd, 0xd7, 0x90, 0x87, 0xf8, 0x0c, 0x9a, 0x83, 0x58, 0xa4,
-	0x52, 0x74, 0xb6, 0x5a, 0x50, 0x3d, 0xd2, 0x9c, 0x7c, 0x52, 0x06, 0x4a, 0x9e, 0xc3, 0xd2, 0x30,
-	0xc6, 0x31, 0x79, 0xec, 0x86, 0x2c, 0xea, 0xeb, 0xde, 0x55, 0xa9, 0xd0, 0xf5, 0x0e, 0xd9, 0xb6,
-	0xe2, 0x1a, 0xf9, 0xf6, 0xb0, 0x44, 0x24, 0xdf, 0x40, 0x07, 0xf7, 0x28, 0x8e, 0xdc, 0xc0, 0x19,
-	0xc4, 0xa9, 0x48, 0xe2, 0x54, 0x77, 0xa6, 0x4a, 0x57, 0xfd, 0x4c, 0x23, 0x8e, 0x14, 0xc0, 0x68,
-	0x5a, 0x49, 0xc6, 0xe9, 0xe4, 0x0b, 0x68, 0x5d, 0xb9, 0x41, 0x90, 0xb8, 0x09, 0xe5, 0x3a, 0x04,
-	0x2e, 0x15, 0x9b, 0xbe, 0x35, 0x2c, 0x23, 0x5f, 0x80, 0xc9, 0x5f, 0x41, 0x5b, 0x26, 0x9a, 0x66,
-	0x25, 0x0b, 0xd5, 0x82, 0x0d, 0x66, 0x9b, 0x95, 0x85, 0x2c, 0xfa, 0x05, 0x0d, 0x87, 0x3e, 0x0f,
-	0x32, 0x9a, 0xc6, 0x71, 0x3a, 0xd0, 0x1d, 0xa5, 0xd2, 0xd0, 0xcf, 0x0d, 0x2b, 0x1f, 0x3a, 0x07,
-	0x93, 0xdf, 0xc1, 0xe6, 0x35, 0x85, 0xd0, 0x56, 0x35, 0xec, 0xae, 0x0d, 0x51, 0x8d, 0xca, 0x0d,
-	0xb7, 0xb6, 0xfe, 0xf9, 0x25, 0x2c, 0x86, 0x7e, 0xe8, 0x98, 0x5c, 0x05, 0xaa, 0x37, 0xe3, 0xe4,
-	0xf0, 0x44, 0xc7, 0xd5, 0xf9, 0xcd, 0x08, 0xfd, 0xd0, 0x84, 0xda, 0x14, 0xb6, 0x4d, 0xaf, 0x4b,
-	0x36, 0xcb, 0x9c, 0x3e, 0x77, 0x3d, 0xea, 0x24, 0x94, 0xb3, 0xd8, 0xd7, 0xcd, 0xa7, 0x47, 0xa5,
-	0x83, 0xd2, 0xd8, 0x57, 0xb1, 0x77, 0xf9, 0x6b, 0x44, 0x9e, 0x49, 0xa0, 0xd1, 0x7c, 0x27, 0xa9,
-	0xe7, 0x93, 0xef, 0x60, 0x33, 0x74, 0xbf, 0x67, 0x61, 0x16, 0x62, 0x2e, 0x2b, 0x1f, 0x36, 0xe9,
-	0x35, 0x4d, 0x67, 0xea, 0x83, 0x72, 0x94, 0x29, 0x71, 0xb6, 0x86, 0xa1, 0xf3, 0xcc, 0x67, 0xbe,
-	0x1e, 0xd6, 0x30, 0xc9, 0x5f, 0xc3, 0x86, 0xcf, 0xdc, 0x7e, 0x14, 0x8b, 0x94, 0x79, 0x8e, 0xc8,
-	0xce, 0x43, 0x26, 0x64, 0xb4, 0xb2, 0x54, 0xd5, 0x7d, 0x98, 0xc3, 0x7a, 0x39, 0x2a, 0xd7, 0xed,
-	0xd7, 0x30, 0xd1, 0x04, 0xdc, 0x24, 0x71, 0xdc, 0xc8, 0x0d, 0x46, 0x29, 0xf3, 0x84, 0xee, 0x5e,
-	0x8d, 0x37, 0x63, 0xf6, 0x0d, 0x37, 0x37, 0x01, 0xb7, 0x44, 0x24, 0x17, 0xb0, 0x75, 0x7d, 0x09,
-	0x7e, 0xa5, 0x9a, 0xc8, 0x5d, 0x97, 0xc9, 0x18, 0xdd, 0x5d, 0xf7, 0xba, 0x54, 0xe7, 0x09, 0xac,
-	0xd5, 0xd8, 0x23, 0x26, 0xe0, 0xaa, 0x23, 0xe6, 0xeb, 0x28, 0xc0, 0x7c, 0x5a, 0x4f, 0x61, 0xb3,
-	0xde, 0xf2, 0xa6, 0xc8, 0xfc, 0x25, 0x74, 0xaa, 0x76, 0x86, 0x81, 0x27, 0x0b, 0x4d, 0x82, 0xdf,
-	0xb6, 0xd5, 0x07, 0x52, 0xaf, 0x06, 0x94, 0x9b, 0x48, 0x5c, 0x7d, 0x58, 0x8f, 0x81, 0x4c, 0x9a,
-	0xda, 0x94, 0xf1, 0x3e, 0x81, 0x4e, 0xd5, 0xb8, 0xa6, 0xa0, 0xff, 0xb1, 0x01, 0x77, 0xa7, 0x19,
-	0xd1, 0x8d, 0x41, 0xe9, 0xbb, 0x6b, 0x8d, 0x55, 0xb9, 0xdc, 0xbd, 0x1b, 0x8c, 0xf5, 0x1a, 0x2b,
-	0xb5, 0xfe, 0xae, 0x01, 0x7b, 0x37, 0x9c, 0xec, 0x8d, 0x73, 0x7b, 0x0e, 0xf7, 0xc6, 0xee, 0x8e,
-	0xe3, 0xab, 0xba, 0x0f, 0x86, 0x22, 0x79, 0xfe, 0xd4, 0xb6, 0x77, 0xc6, 0x40, 0x87, 0x39, 0x06,
-	0xb7, 0xdd, 0x7a, 0x0a, 0x1b, 0xf5, 0x6d, 0x94, 0x2d, 0x68, 0x0e, 0x93, 0xa8, 0xfc, 0xc7, 0x8d,
-	0x85, 0x61, 0x12, 0xbd, 0xcd, 0x98, 0x6f, 0x7d, 0x6e, 0xea, 0x91, 0xa5, 0xe7, 0x85, 0xec, 0x8d,
-	0x3f, 0x48, 0x7a, 0xb6, 0xc5, 0x9b, 0x63, 0x7d, 0x0a, 0x2b, 0x95, 0x97, 0x05, 0x93, 0x97, 0xfc,
-	0x19, 0xd2, 0xf5, 0x25, 0xf3, 0x6d, 0xfd, 0x06, 0x56, 0x27, 0x3c, 0x15, 0x79, 0x36, 0xee, 0xdb,
-	0x1a, 0xd5, 0xce, 0x71, 0x21, 0x51, 0x76, 0x6a, 0x96, 0x0f, 0x50, 0x70, 0xc8, 0x3b, 0x78, 0x24,
-	0x2b, 0xf9, 0xba, 0xf3, 0x89, 0x4e, 0x4e, 0xd6, 0x0a, 0xa9, 0xef, 0x5c, 0x0d, 0x58, 0x40, 0x1d,
-	0x91, 0x25, 0x94, 0x0f, 0x99, 0xc8, 0xaf, 0xd3, 0x4f, 0x0a, 0x3c, 0x3a, 0xb2, 0x7d, 0x85, 0xfe,
-	0x16, 0xc1, 0xbd, 0x1c, 0x6b, 0xfd, 0x0e, 0x76, 0xa7, 0xbb, 0x43, 0xcc, 0xf3, 0xa7, 0x38, 0x57,
-	0x15, 0xf9, 0x5c, 0xe7, 0x32, 0xad, 0x1e, 0xec, 0x4c, 0x71, 0x85, 0xe4, 0xf3, 0x6b, 0x3d, 0xaa,
-	0xd2, 0x5b, 0xeb, 0x2a, 0xad, 0x5f, 0xc0, 0xce, 0x14, 0x1f, 0x38, 0xc5, 0xb0, 0x9e, 0xc8, 0x1c,
-	0xaf, 0xea, 0xe8, 0xa6, 0x08, 0x1c, 0xc0, 0xde, 0x0d, 0xcd, 0xc4, 0xf7, 0xc8, 0x7a, 0xbe, 0x86,
-	0xbb, 0xd3, 0x7a, 0x83, 0xef, 0xa1, 0xa1, 0x0f, 0xdb, 0xd7, 0xf7, 0xfb, 0xde, 0xa3, 0x6e, 0xff,
-	0x21, 0xac, 0xe8, 0xff, 0x2e, 0xe4, 0x0d, 0x45, 0x95, 0xf6, 0x2c, 0x2b, 0xb2, 0x51, 0x65, 0xfd,
-	0x6d, 0x03, 0xd6, 0x6a, 0xda, 0x7e, 0xe4, 0x23, 0xe8, 0x78, 0x19, 0xe7, 0x78, 0x3c, 0x79, 0xe5,
-	0x57, 0x57, 0x9b, 0x35, 0x3d, 0x87, 0x3e, 0x80, 0x76, 0x44, 0xaf, 0x0a, 0x98, 0xae, 0x1c, 0x45,
-	0xf4, 0x2a, 0x87, 0xec, 0xc1, 0xa2, 0xaa, 0x83, 0xc7, 0x3c, 0x0e, 0x85, 0xae, 0x7e, 0x83, 0x24,
-	0x9d, 0x22, 0xc5, 0xfa, 0x1c, 0x36, 0xeb, 0x9b, 0x84, 0x63, 0xa5, 0xe7, 0x46, 0xa5, 0xf4, 0x7c,
-	0x0a, 0xeb, 0x75, 0xdd, 0x3f, 0x8c, 0x44, 0xfb, 0xa5, 0x3e, 0x08, 0xfe, 0x9e, 0x4c, 0x08, 0x6e,
-	0x4d, 0x26, 0x04, 0xf8, 0x4a, 0x54, 0x3b, 0x75, 0xe4, 0x63, 0x58, 0x50, 0xad, 0x3d, 0x13, 0x10,
-	0x77, 0x4a, 0xff, 0x24, 0x91, 0x0c, 0xdb, 0x00, 0xac, 0x11, 0xcc, 0x6b, 0xa9, 0x3d, 0x58, 0x4c,
-	0x78, 0xec, 0x67, 0x9e, 0x6a, 0xb4, 0x69, 0x3f, 0xa3, 0x49, 0xdf, 0xd0, 0x91, 0x2c, 0x16, 0x6a,
-	0xc0, 0x78, 0x95, 0x62, 0x59, 0x93, 0x4d, 0xe9, 0x45, 0xe6, 0xe8, 0xfa, 0x7f, 0x20, 0xd2, 0x27,
-	0xea, 0x18, 0xde, 0x34, 0xf5, 0xf7, 0x25, 0xd1, 0xfa, 0x04, 0xd6, 0xeb, 0x9a, 0x8c, 0xf8, 0x9c,
-	0xc9, 0x52, 0xb7, 0xbe, 0xe8, 0xea, 0xc3, 0x7a, 0x05, 0x64, 0xb2, 0x79, 0x48, 0x7e, 0x0e, 0x77,
-	0x2e, 0x58, 0x90, 0x52, 0x5e, 0x74, 0x1d, 0x9d, 0x24, 0x66, 0x51, 0x6a, 0xee, 0xd8, 0x86, 0x62,
-	0xe7, 0x22, 0x67, 0x92, 0x69, 0xfd, 0xa9, 0x01, 0x64, 0xb2, 0x73, 0x88, 0xbe, 0xf9, 0x92, 0x8e,
-	0xca, 0x19, 0xcc, 0xc2, 0x25, 0x1d, 0xc9, 0xfc, 0xe5, 0x10, 0x3a, 0x45, 0x27, 0x52, 0x75, 0x78,
-	0xf4, 0x4b, 0x55, 0x8a, 0xf0, 0x73, 0x65, 0xaa, 0x39, 0x60, 0xaf, 0xe4, 0x22, 0x8a, 0x80, 0x7b,
-	0x88, 0x37, 0xcf, 0xa3, 0x1c, 0xef, 0xbd, 0xe7, 0xea, 0x6a, 0x7b, 0xdb, 0x5e, 0x8e, 0xe8, 0xd5,
-	0x41, 0x41, 0x25, 0x5f, 0xc3, 0x5d, 0x4e, 0x93, 0x60, 0xe4, 0xd0, 0xc8, 0xe3, 0x23, 0x5d, 0xb9,
-	0x29, 0x49, 0xcd, 0x49, 0xa9, 0x6d, 0x89, 0x79, 0x91, 0x43, 0x4a, 0x1a, 0xac, 0x7f, 0x6e, 0xc0,
-	0x4a, 0x65, 0x3e, 0xd3, 0xae, 0xa6, 0x6a, 0x15, 0xa1, 0x33, 0xa6, 0x78, 0xfe, 0x0e, 0xfd, 0x3e,
-	0x89, 0x79, 0xaa, 0xef, 0x5c, 0x47, 0x73, 0xbe, 0xa1, 0xa3, 0x17, 0x92, 0x4e, 0xbe, 0x82, 0x9d,
-	0x49, 0x74, 0x61, 0x51, 0xea, 0xc0, 0xbb, 0x55, 0x31, 0x73, 0xdf, 0xad, 0x2f, 0x61, 0x75, 0xa2,
-	0xef, 0x89, 0x9b, 0x53, 0xed, 0x96, 0xaa, 0x49, 0x2e, 0x9f, 0x8f, 0x01, 0xad, 0xff, 0x6e, 0xc0,
-	0x92, 0x4d, 0x45, 0x16, 0xa4, 0xe6, 0x1f, 0x91, 0x04, 0xe6, 0x32, 0xbf, 0xd4, 0x47, 0xf4, 0xd9,
-	0xe4, 0xbf, 0x24, 0x6f, 0x4d, 0xfe, 0x4b, 0xf2, 0x19, 0x2c, 0x52, 0xce, 0x63, 0xee, 0x78, 0x03,
-	0x97, 0x45, 0x93, 0xa5, 0xc2, 0x17, 0xc8, 0x3c, 0x40, 0x9e, 0x0d, 0x34, 0xff, 0x6d, 0xf5, 0x60,
-	0xbe, 0x97, 0xba, 0x69, 0x26, 0x48, 0x07, 0xda, 0xfb, 0xde, 0x65, 0x14, 0x5f, 0x05, 0xd4, 0xef,
-	0x53, 0xbf, 0x33, 0x43, 0x5a, 0x70, 0x5b, 0x4a, 0x75, 0x1a, 0x64, 0x13, 0x88, 0xfe, 0x57, 0xe5,
-	0x4b, 0xd9, 0x5d, 0x54, 0xf4, 0x5b, 0xa4, 0x09, 0x73, 0xc7, 0x7e, 0x40, 0x3b, 0xb3, 0x04, 0x60,
-	0xfe, 0x75, 0x9c, 0xbe, 0x8e, 0xaf, 0x3a, 0x73, 0xd6, 0xbf, 0x37, 0x00, 0x8a, 0xf1, 0xc8, 0x67,
-	0xb0, 0x11, 0xc4, 0x9e, 0x1b, 0xb0, 0x1f, 0xa8, 0xef, 0xf8, 0x54, 0x78, 0x9c, 0x25, 0x79, 0x81,
-	0xa9, 0x65, 0xaf, 0xe7, 0xcc, 0xc3, 0x82, 0x87, 0x6f, 0x55, 0x26, 0x1c, 0x1a, 0xf5, 0x03, 0x26,
-	0x06, 0x63, 0x52, 0x6a, 0xf1, 0xeb, 0x99, 0x78, 0xa1, 0x98, 0x65, 0xa9, 0x07, 0xd0, 0x56, 0xbb,
-	0xe0, 0xc7, 0xa1, 0xda, 0x06, 0xb9, 0x51, 0x92, 0x76, 0x28, 0x49, 0x98, 0xdc, 0xeb, 0x8d, 0x8a,
-	0x7d, 0x75, 0xf9, 0x6e, 0xdb, 0x2d, 0xb5, 0x23, 0xb1, 0x4f, 0x9f, 0x77, 0xfe, 0xeb, 0xc7, 0xdd,
-	0xc6, 0x1f, 0x7f, 0xdc, 0x6d, 0xfc, 0xe9, 0xc7, 0xdd, 0xc6, 0x3f, 0xfd, 0xcf, 0xee, 0xcc, 0xf9,
-	0xbc, 0xdc, 0xc0, 0xcf, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xfc, 0x7e, 0x95, 0xd2, 0x2a,
-	0x00, 0x00,
+	// 3797 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0xcd, 0x73, 0x1b, 0x47,
+	0x76, 0x27, 0x48, 0x8a, 0x04, 0x1e, 0x40, 0x12, 0x6c, 0x7e, 0x08, 0x24, 0x25, 0x52, 0x1a, 0xd9,
+	0x6b, 0xd9, 0x6b, 0x4b, 0x89, 0x6c, 0x79, 0xbd, 0xbb, 0x76, 0x62, 0x8a, 0x94, 0x96, 0x5c, 0x8b,
+	0x22, 0x6b, 0x20, 0xc9, 0x55, 0x71, 0x36, 0xb3, 0x43, 0x4c, 0x13, 0xe8, 0xe2, 0x7c, 0x6d, 0xf7,
+	0x0c, 0x68, 0xf8, 0x9c, 0x54, 0xce, 0xb9, 0x24, 0xa9, 0x5c, 0x72, 0x4f, 0xe5, 0x1f, 0x48, 0x6e,
+	0xb9, 0xe5, 0x98, 0xca, 0x5f, 0xe0, 0x72, 0xfe, 0x85, 0x5c, 0x72, 0x4b, 0xbd, 0xfe, 0x98, 0x19,
+	0x0c, 0x86, 0xa0, 0x2e, 0x7b, 0x43, 0xbf, 0xf7, 0xeb, 0xd7, 0x3d, 0xaf, 0xbb, 0xdf, 0x27, 0xa0,
+	0x11, 0x78, 0xc1, 0xa3, 0x98, 0x47, 0x49, 0x44, 0xea, 0x81, 0x17, 0xc8, 0x5f, 0xd6, 0xef, 0x61,
+	0xf9, 0x20, 0x0a, 0x02, 0x37, 0xf4, 0xce, 0xdc, 0x91, 0x1f, 0xb9, 0x1e, 0xb9, 0x0f, 0xad, 0x9e,
+	0xa2, 0x38, 0x69, 0xca, 0xbc, 0x4e, 0xed, 0x5e, 0xed, 0x61, 0xc3, 0x6e, 0x6a, 0xda, 0x9b, 0x94,
+	0x79, 0xe4, 0xe7, 0xb0, 0xa8, 0x87, 0x9d, 0xd9, 0x7b, 0xb5, 0x87, 0xcd, 0x27, 0xab, 0x8f, 0x8c,
+	0xc0, 0x47, 0x5a, 0x9a, 0x6d, 0x10, 0xd6, 0xbf, 0xde, 0x86, 0x45, 0x4d, 0x44, 0xd9, 0x9c, 0xfe,
+	0x21, 0xa5, 0x22, 0x71, 0x92, 0x51, 0x4c, 0x8d, 0x6c, 0x4d, 0x7b, 0x3d, 0x8a, 0x29, 0x39, 0x80,
+	0x15, 0x16, 0x8a, 0xc4, 0xf5, 0x7d, 0x27, 0xe6, 0xd1, 0x05, 0xf3, 0xa9, 0x5e, 0xa3, 0x93, 0xaf,
+	0x71, 0xac, 0x00, 0x67, 0x8a, 0x7f, 0x34, 0x63, 0x2f, 0xb3, 0x31, 0x0a, 0xf9, 0x1a, 0x96, 0x39,
+	0x0d, 0xa2, 0x21, 0xcd, 0x64, 0xcc, 0x49, 0x19, 0xb7, 0x73, 0x19, 0xb6, 0xe4, 0xe7, 0x22, 0x96,
+	0x78, 0x91, 0x40, 0x06, 0x70, 0xa7, 0xb0, 0x8d, 0x21, 0x13, 0x2c, 0x0a, 0x59, 0xd8, 0xcf, 0xe4,
+	0xcd, 0x4b, 0x79, 0xef, 0x55, 0xed, 0x29, 0x03, 0xe7, 0xc2, 0xb7, 0xd9, 0xb5, 0x5c, 0x42, 0x61,
+	0xa7, 0xb8, 0xd7, 0xf2, 0x42, 0xb7, 0xe4, 0x42, 0x0f, 0x2a, 0x36, 0x5e, 0xb1, 0xce, 0x56, 0xe1,
+	0x23, 0x4a, 0xcb, 0x9c, 0x83, 0xd9, 0x04, 0xf5, 0x1c, 0x37, 0x8e, 0x7d, 0xd6, 0x73, 0x13, 0x16,
+	0x85, 0x8e, 0xcf, 0x44, 0xd2, 0x59, 0x90, 0xab, 0x58, 0x13, 0x9f, 0x43, 0xbd, 0xfd, 0x1c, 0xfa,
+	0x92, 0x89, 0xe4, 0x68, 0xc6, 0xee, 0xb0, 0x6b, 0x78, 0xe4, 0x25, 0x10, 0x8f, 0x0e, 0x59, 0x8f,
+	0x3a, 0x2c, 0xbc, 0x88, 0x78, 0x20, 0x39, 0x9d, 0x45, 0x29, 0x7b, 0x27, 0x97, 0x7d, 0x28, 0x31,
+	0xc7, 0x39, 0xe4, 0x68, 0xc6, 0x5e, 0xf5, 0xca, 0x44, 0xf2, 0x0b, 0x68, 0x6a, 0x69, 0x7e, 0xd4,
+	0xbb, 0xec, 0xd4, 0xa5, 0x98, 0xf5, 0xb2, 0x98, 0x97, 0x51, 0xef, 0xf2, 0x68, 0xc6, 0x06, 0x2f,
+	0x1b, 0xe1, 0xe9, 0xf7, 0x7c, 0xea, 0x72, 0x27, 0x76, 0x85, 0xe8, 0x45, 0x1e, 0xed, 0x34, 0xca,
+	0xa7, 0x7f, 0x80, 0xfc, 0x33, 0xcd, 0xc6, 0xd3, 0xef, 0x15, 0x09, 0xe4, 0x57, 0xd0, 0xa2, 0xdc,
+	0x15, 0xd4, 0x51, 0x52, 0x3b, 0x20, 0xe7, 0x6f, 0xe4, 0xf3, 0x9f, 0x23, 0x57, 0x6d, 0xe0, 0x68,
+	0xc6, 0x6e, 0xd2, 0x7c, 0x48, 0x8e, 0x61, 0xd5, 0xdc, 0xf1, 0x80, 0x71, 0x1e, 0x71, 0x16, 0xf6,
+	0x3b, 0x4d, 0x29, 0x60, 0xbb, 0x78, 0x8a, 0x12, 0x72, 0x62, 0x10, 0x47, 0x33, 0x76, 0x9b, 0x97,
+	0x68, 0xe4, 0x4b, 0x7c, 0x2e, 0x22, 0xe1, 0xac, 0x87, 0x0a, 0x11, 0x9d, 0x96, 0x94, 0xb2, 0x59,
+	0x94, 0x92, 0x73, 0x8f, 0x66, 0xec, 0x31, 0x34, 0x39, 0x81, 0xb5, 0x34, 0x44, 0xd5, 0x39, 0xa9,
+	0xa0, 0xdc, 0x71, 0x7b, 0xbd, 0x28, 0x0d, 0x93, 0xce, 0x52, 0xf9, 0x38, 0xde, 0x48, 0xd0, 0x1b,
+	0x41, 0xf9, 0xbe, 0x82, 0xe0, 0x71, 0xa4, 0x65, 0xa2, 0x3a, 0x0e, 0x9f, 0x26, 0x54, 0x8a, 0xeb,
+	0x2c, 0x4f, 0x1e, 0x07, 0x32, 0x71, 0x86, 0x3a, 0x0e, 0x33, 0x22, 0x87, 0xd0, 0xa6, 0xa1, 0x7b,
+	0xee, 0xe3, 0x39, 0xa2, 0x52, 0xf0, 0x40, 0x56, 0xca, 0x4f, 0xfa, 0xb9, 0x44, 0xbc, 0x8c, 0x44,
+	0x72, 0xa2, 0x4e, 0x64, 0x99, 0x8e, 0x51, 0xc8, 0x29, 0xac, 0x99, 0x07, 0x59, 0xb8, 0xbd, 0x9d,
+	0xb6, 0x14, 0x74, 0x67, 0xe2, 0xe2, 0x16, 0xae, 0xe6, 0xd1, 0x8c, 0x4d, 0xd8, 0x04, 0x95, 0xbc,
+	0x81, 0x0d, 0xad, 0x12, 0xa7, 0x17, 0x85, 0x17, 0xac, 0x9f, 0x72, 0x25, 0x72, 0x55, 0x8a, 0xdc,
+	0xcd, 0x45, 0x6a, 0x0d, 0x1c, 0x14, 0x51, 0x47, 0x33, 0xf6, 0xba, 0x5b, 0x41, 0x27, 0x5d, 0xd8,
+	0xc0, 0xfd, 0x8d, 0x1c, 0x4e, 0x3d, 0x1a, 0xc4, 0xf2, 0x89, 0xc9, 0x3b, 0x48, 0xa4, 0xd8, 0xbb,
+	0x05, 0xb1, 0x08, 0xb3, 0x33, 0xd4, 0x81, 0xfa, 0xee, 0x35, 0x77, 0x92, 0x4c, 0xfe, 0x12, 0x3a,
+	0x81, 0x1b, 0xba, 0xfd, 0xaa, 0xa7, 0xbb, 0x26, 0xe5, 0xde, 0xcb, 0xe5, 0x9e, 0x28, 0xe4, 0xe4,
+	0xc3, 0xdd, 0x0c, 0x2a, 0x39, 0xf8, 0x6c, 0xb5, 0x05, 0x2a, 0x6a, 0x76, 0xbd, 0x7c, 0x4f, 0x94,
+	0xe1, 0x19, 0x57, 0xec, 0x2a, 0x2f, 0x13, 0xc9, 0x6f, 0x60, 0x95, 0x85, 0x43, 0x96, 0x50, 0x27,
+	0x89, 0xd0, 0x8a, 0xf5, 0xb9, 0x1b, 0x74, 0x36, 0xa4, 0xb0, 0xad, 0xe2, 0x31, 0x21, 0xe4, 0x75,
+	0x74, 0xa6, 0x00, 0x47, 0x33, 0xf6, 0x0a, 0x1b, 0x27, 0xe1, 0x01, 0x0d, 0x5d, 0x9f, 0x79, 0x6e,
+	0xe2, 0x16, 0x37, 0x26, 0x3a, 0x9b, 0xe5, 0x03, 0x7a, 0xab, 0x60, 0xc5, 0x6d, 0xe0, 0x73, 0x58,
+	0x37, 0xd3, 0x8b, 0x74, 0xf2, 0x15, 0x2c, 0x99, 0x8b, 0x14, 0x50, 0x8f, 0xb9, 0x9d, 0xdb, 0xe5,
+	0x57, 0xa5, 0xaf, 0xd0, 0x09, 0x72, 0xf1, 0x55, 0xb1, 0xc2, 0x18, 0x4d, 0x83, 0x56, 0x96, 0x9a,
+	0xdd, 0x29, 0x9b, 0x06, 0xa5, 0x26, 0x33, 0xb9, 0xc9, 0xf3, 0x21, 0xf9, 0x13, 0xa8, 0x0b, 0x9a,
+	0x24, 0x2c, 0xec, 0x8b, 0xce, 0x96, 0x9c, 0x47, 0xf2, 0x79, 0x5d, 0xcd, 0x39, 0x9a, 0xb1, 0x33,
+	0x14, 0xb9, 0x82, 0xfb, 0x55, 0x07, 0x3f, 0x7e, 0x61, 0xb7, 0xa5, 0xa8, 0x0f, 0xa7, 0xdd, 0x80,
+	0xf2, 0xdd, 0xdd, 0x0b, 0xa6, 0x43, 0x48, 0x08, 0xbb, 0x55, 0x0b, 0xbb, 0x49, 0xc2, 0xd9, 0x79,
+	0x9a, 0x50, 0xd1, 0xd9, 0x91, 0xab, 0xfe, 0x6c, 0xda, 0xaa, 0xfb, 0x19, 0xfa, 0x68, 0xc6, 0xbe,
+	0x13, 0x4c, 0xe1, 0xa3, 0xbf, 0xad, 0x5a, 0xef, 0x82, 0x52, 0xef, 0xdc, 0xed, 0x5d, 0x76, 0xee,
+	0x94, 0xfd, 0xed, 0xe4, 0x6a, 0x2f, 0x34, 0x16, 0xfd, 0x6d, 0x70, 0x2d, 0x17, 0x1f, 0xa8, 0xa0,
+	0x89, 0x73, 0xc1, 0x78, 0x70, 0xe5, 0x72, 0x2a, 0x9d, 0xc4, 0x55, 0xc4, 0xbd, 0xce, 0xdd, 0xf2,
+	0x03, 0xed, 0xd2, 0xe4, 0x85, 0x46, 0x9d, 0x69, 0x10, 0x3e, 0x50, 0x31, 0x49, 0xc6, 0x07, 0x3a,
+	0xa4, 0x9c, 0x5d, 0x8c, 0x2a, 0xe4, 0xee, 0x96, 0x1f, 0xe8, 0x5b, 0x89, 0xac, 0x10, 0xbd, 0x39,
+	0xac, 0xe4, 0x90, 0x6f, 0xe1, 0x36, 0x6e, 0xd9, 0x4d, 0x93, 0xc8, 0x71, 0xbd, 0x80, 0x85, 0xb9,
+	0xf0, 0xbd, 0xf2, 0x5b, 0xe8, 0xd2, 0x64, 0x3f, 0x4d, 0xa2, 0x7d, 0x84, 0x15, 0x44, 0xaf, 0x8b,
+	0x0a, 0x3a, 0xf9, 0x2d, 0x10, 0xd1, 0x1b, 0x50, 0x2f, 0xf5, 0xa9, 0x13, 0x09, 0x27, 0x8d, 0xf1,
+	0x15, 0x75, 0xee, 0x95, 0x9d, 0x55, 0x57, 0x63, 0x4e, 0xbb, 0x6f, 0x24, 0x02, 0x9d, 0x95, 0x99,
+	0x77, 0x2a, 0x14, 0x4d, 0x6e, 0x72, 0x42, 0x96, 0x23, 0x7a, 0x6e, 0xd8, 0xb9, 0x3f, 0xb1, 0xc9,
+	0x92, 0xc0, 0x6e, 0xcf, 0x95, 0x16, 0xb5, 0x2c, 0x14, 0xe9, 0xe4, 0x0c, 0xd6, 0xdd, 0x5e, 0xc2,
+	0x86, 0xd4, 0x09, 0x85, 0x43, 0xbf, 0x4f, 0x68, 0x28, 0xa4, 0x19, 0xb0, 0xca, 0xa6, 0x7f, 0x5f,
+	0xa2, 0x5e, 0x75, 0x9f, 0x67, 0x18, 0x34, 0xfd, 0x6a, 0xee, 0x2b, 0x91, 0x53, 0x51, 0x22, 0x8f,
+	0x12, 0xdc, 0x1e, 0x86, 0x46, 0x43, 0x37, 0xf5, 0x13, 0xe7, 0x92, 0x8e, 0x3a, 0x0f, 0xca, 0x12,
+	0x6d, 0x89, 0x7a, 0xc1, 0x7c, 0xfa, 0x16, 0x41, 0xdf, 0xd0, 0x11, 0x4a, 0xe4, 0x19, 0x75, 0xa8,
+	0xa9, 0xf8, 0x5c, 0x8c, 0x51, 0xa1, 0x61, 0x42, 0x79, 0xcc, 0x99, 0x18, 0x37, 0xa7, 0xef, 0x95,
+	0x9f, 0x8b, 0xb6, 0x32, 0xcf, 0x33, 0xf8, 0xb8, 0x65, 0x35, 0xe1, 0x67, 0x25, 0x1f, 0x7d, 0x3b,
+	0xde, 0x88, 0xf3, 0x28, 0x4a, 0x44, 0xc2, 0xdd, 0xd8, 0x49, 0xa2, 0x4b, 0x1a, 0x76, 0xde, 0x2f,
+	0xdb, 0xec, 0x2e, 0x4d, 0x9e, 0x19, 0xcc, 0x6b, 0x84, 0xa0, 0xcd, 0x16, 0x65, 0xe2, 0xb3, 0x06,
+	0x2c, 0xea, 0xe0, 0xc3, 0xfa, 0x08, 0x96, 0xc7, 0xc3, 0x6b, 0xd2, 0x81, 0xc5, 0x58, 0xe5, 0x06,
+	0x32, 0x5e, 0x6f, 0xd9, 0x66, 0x68, 0x3d, 0x86, 0xa5, 0xb1, 0x30, 0x9a, 0xec, 0x02, 0x30, 0x8f,
+	0x86, 0x09, 0xbb, 0x60, 0x94, 0xeb, 0xe8, 0xbe, 0x40, 0xb1, 0x4e, 0x61, 0xfb, 0xfa, 0x38, 0x99,
+	0xfc, 0x29, 0xac, 0x57, 0xc6, 0xda, 0x6a, 0xd5, 0xb5, 0x78, 0x72, 0x8a, 0xf5, 0x18, 0xb6, 0xae,
+	0x8d, 0x87, 0x09, 0x81, 0xf9, 0x42, 0x06, 0x23, 0x7f, 0x5b, 0x03, 0xe8, 0x5c, 0x17, 0xda, 0x92,
+	0x7b, 0xd0, 0xcc, 0xf7, 0x2a, 0x3a, 0xb5, 0x7b, 0x73, 0x98, 0x9c, 0x14, 0x48, 0xe4, 0x23, 0x58,
+	0x2d, 0x58, 0x29, 0xe1, 0x44, 0xa1, 0x3f, 0x92, 0xe9, 0x49, 0xdd, 0x5e, 0xc9, 0x4d, 0x8e, 0x38,
+	0x0d, 0xfd, 0x91, 0xf5, 0x09, 0xac, 0x4e, 0x04, 0xba, 0xa8, 0xcb, 0x3f, 0xa4, 0x94, 0x33, 0x6a,
+	0xc4, 0x9b, 0xa1, 0xf5, 0x04, 0x96, 0xc6, 0x82, 0x52, 0xcc, 0x95, 0x74, 0xf8, 0xa6, 0xce, 0x56,
+	0x69, 0xa1, 0xa9, 0x68, 0xf2, 0xd8, 0xac, 0xef, 0x00, 0xf2, 0x20, 0x98, 0xb4, 0x61, 0x2e, 0x66,
+	0xa1, 0xfe, 0x5a, 0xfc, 0x89, 0xab, 0x05, 0x54, 0x08, 0xb7, 0xaf, 0x72, 0xa8, 0x86, 0x6d, 0x86,
+	0x28, 0x3c, 0x1e, 0x44, 0x21, 0x75, 0xc2, 0x34, 0x38, 0xa7, 0x5c, 0xa6, 0x47, 0x0d, 0xbb, 0x29,
+	0x69, 0xaf, 0x24, 0xc9, 0xfa, 0xdb, 0x1a, 0x34, 0x0b, 0x61, 0x6e, 0x85, 0xf8, 0x8f, 0x81, 0xc4,
+	0x9c, 0x0a, 0xca, 0x87, 0xd4, 0x91, 0x5e, 0x3a, 0xf6, 0xdd, 0x50, 0xab, 0xa3, 0x6d, 0x38, 0x87,
+	0x6e, 0xe2, 0x9e, 0xf9, 0x6e, 0x48, 0xbe, 0x80, 0x8e, 0xc7, 0x84, 0xeb, 0xfb, 0xd1, 0x15, 0x9e,
+	0xec, 0xf7, 0x2c, 0x60, 0xc9, 0xc8, 0x11, 0x34, 0x49, 0x63, 0xb9, 0x7c, 0xdd, 0xde, 0x34, 0xfc,
+	0x33, 0xc3, 0xee, 0x22, 0xd7, 0xfa, 0x97, 0x1a, 0xb4, 0xcb, 0xf1, 0x32, 0xf9, 0x10, 0xda, 0x1e,
+	0x15, 0x09, 0x0b, 0x95, 0xa3, 0x08, 0xdd, 0xc0, 0xa4, 0x93, 0x2b, 0x05, 0xfa, 0x2b, 0x37, 0xa0,
+	0xe4, 0x09, 0x6c, 0x14, 0xa1, 0x26, 0x45, 0xf1, 0xb4, 0x52, 0xd6, 0x0a, 0x4c, 0x7d, 0x62, 0x1e,
+	0xd9, 0x81, 0x06, 0x9a, 0x2e, 0x27, 0x61, 0x01, 0xd5, 0xda, 0xa9, 0x23, 0xe1, 0x35, 0x0b, 0x28,
+	0xd9, 0x86, 0x7a, 0x66, 0x80, 0xe7, 0x15, 0xcf, 0x8c, 0xad, 0x7d, 0x68, 0x15, 0xa3, 0x72, 0x7d,
+	0xa9, 0xf1, 0x3e, 0x3a, 0x63, 0xb1, 0x7c, 0x4d, 0x7e, 0xf2, 0x9a, 0xe6, 0x15, 0xa7, 0x58, 0x8f,
+	0x61, 0x75, 0x22, 0x26, 0xc7, 0x35, 0x31, 0xee, 0x2e, 0x7c, 0x67, 0x36, 0xb6, 0x4e, 0xf1, 0x1e,
+	0x64, 0xf1, 0xf6, 0x14, 0x24, 0x79, 0x1f, 0x96, 0x2f, 0x22, 0xde, 0xc3, 0xc4, 0xc6, 0xa7, 0xd2,
+	0x2e, 0xa9, 0xe3, 0x5a, 0x92, 0xd4, 0x43, 0x4d, 0xb4, 0x18, 0x2c, 0x8f, 0x07, 0xe4, 0xc5, 0xab,
+	0x54, 0x9b, 0x7e, 0x95, 0x66, 0x27, 0xae, 0x12, 0xee, 0xe8, 0x22, 0x8a, 0x92, 0x30, 0x4a, 0x32,
+	0x5d, 0x9a, 0xb1, 0xf5, 0xef, 0x73, 0x40, 0x26, 0x63, 0x76, 0xf2, 0x33, 0x58, 0x61, 0x49, 0x1a,
+	0x52, 0xe1, 0x88, 0x24, 0xe2, 0xf2, 0xb4, 0x70, 0xdd, 0x39, 0x7b, 0x49, 0x91, 0xbb, 0x48, 0x3d,
+	0xf6, 0x4a, 0x16, 0x67, 0xb6, 0x6c, 0x71, 0xc8, 0x57, 0xb0, 0x18, 0xc5, 0x4a, 0xe3, 0x73, 0xe5,
+	0x4c, 0x7a, 0x72, 0xd9, 0x53, 0x05, 0xb5, 0xcd, 0x1c, 0xfc, 0xb8, 0xc0, 0x0d, 0xd9, 0x05, 0x66,
+	0x73, 0x29, 0xf7, 0xf5, 0x69, 0x37, 0x0d, 0xed, 0x0d, 0xf7, 0xf1, 0x22, 0xaa, 0xa7, 0x1f, 0xd0,
+	0x30, 0x71, 0x2e, 0x7c, 0xb7, 0x2f, 0x64, 0xd2, 0x3e, 0x67, 0x4c, 0x02, 0xd2, 0x5f, 0x20, 0x99,
+	0x9c, 0xc2, 0xd2, 0x78, 0xe4, 0xb6, 0x50, 0x8e, 0xdc, 0x26, 0xb7, 0x34, 0x16, 0x96, 0xd9, 0xe3,
+	0xf3, 0xc9, 0x0b, 0x80, 0x42, 0x44, 0xb6, 0x78, 0x8d, 0x8b, 0xa9, 0x8c, 0xb8, 0xec, 0xc2, 0x4c,
+	0xf2, 0x39, 0xdc, 0xee, 0x0d, 0xdc, 0xb0, 0x4f, 0x9d, 0xc2, 0xa7, 0x08, 0xf4, 0x72, 0x32, 0xed,
+	0x6e, 0xd8, 0x1b, 0x8a, 0x7d, 0x92, 0x71, 0xbb, 0xc8, 0xb4, 0x0e, 0x61, 0xeb, 0x5a, 0x25, 0x92,
+	0x0f, 0x60, 0x25, 0x4e, 0x79, 0x6f, 0x80, 0x79, 0x74, 0x40, 0x93, 0x41, 0x64, 0x8e, 0x70, 0xd9,
+	0x90, 0x4f, 0x24, 0xd5, 0xba, 0x0f, 0x7b, 0x37, 0x7c, 0xb7, 0xb5, 0x0b, 0x77, 0xa6, 0x7d, 0x8c,
+	0xf5, 0x7f, 0xb5, 0x0c, 0x50, 0xed, 0x30, 0x1f, 0x41, 0xdd, 0x1c, 0x9a, 0xdc, 0xc5, 0x58, 0xe8,
+	0x7d, 0xa2, 0x39, 0x76, 0x86, 0x99, 0x38, 0xf8, 0xd9, 0xc9, 0x83, 0xff, 0x35, 0x6c, 0x17, 0x21,
+	0x4e, 0xcc, 0x42, 0xe9, 0xb6, 0x7a, 0x94, 0x27, 0x78, 0xdb, 0xe6, 0x1e, 0xb6, 0xec, 0xdb, 0x85,
+	0x09, 0x67, 0x8a, 0x7f, 0x80, 0x6c, 0x72, 0x0c, 0xf7, 0x0d, 0x9e, 0xd3, 0x61, 0x64, 0xe2, 0xfa,
+	0x01, 0xed, 0x5d, 0x3a, 0xe8, 0x8a, 0x19, 0xa7, 0xca, 0xb6, 0xd4, 0xed, 0x5d, 0x0d, 0xb4, 0x33,
+	0xdc, 0x01, 0xc2, 0x6c, 0x8d, 0xb2, 0x8e, 0xa1, 0x6e, 0x3e, 0x80, 0x7c, 0x05, 0xcb, 0xd9, 0x9e,
+	0x58, 0x42, 0x03, 0xe5, 0x66, 0xc6, 0xb2, 0x1b, 0x83, 0x3d, 0x4e, 0x68, 0x60, 0x2f, 0x05, 0x85,
+	0x91, 0xb0, 0xfa, 0xd0, 0x2a, 0xb2, 0xc9, 0x07, 0xb0, 0xe0, 0x0a, 0x41, 0x13, 0x23, 0x66, 0xa5,
+	0x10, 0x6c, 0x21, 0xdd, 0xd6, 0x6c, 0xa9, 0x5e, 0x9a, 0xb8, 0xe8, 0x05, 0x74, 0xb9, 0xae, 0xa8,
+	0x5e, 0xcd, 0xb1, 0x33, 0x8c, 0xf5, 0x0f, 0x35, 0xb8, 0x25, 0x25, 0xa0, 0x93, 0xbe, 0x64, 0x61,
+	0xe6, 0xa4, 0xf1, 0x37, 0xd9, 0x82, 0x7a, 0xe0, 0x3d, 0x75, 0x04, 0xfb, 0x41, 0x39, 0xae, 0x39,
+	0x7b, 0x31, 0xf0, 0x9e, 0x76, 0xd9, 0x0f, 0xd2, 0xa7, 0x07, 0xde, 0x53, 0xa5, 0xde, 0x86, 0x2d,
+	0x7f, 0xa3, 0x67, 0xca, 0xdf, 0x26, 0xfe, 0x24, 0x7b, 0xd0, 0x14, 0x03, 0xf7, 0xc9, 0xd3, 0xcf,
+	0x95, 0x0c, 0xf5, 0x1c, 0x41, 0x91, 0xa4, 0x98, 0x0e, 0x2c, 0xaa, 0x91, 0xe8, 0x2c, 0x28, 0x3f,
+	0xac, 0x87, 0xd6, 0xff, 0xd6, 0xa0, 0x6e, 0x36, 0x4c, 0x7e, 0x0e, 0xab, 0xe7, 0x69, 0xe8, 0xf9,
+	0x68, 0x7f, 0x4a, 0x61, 0x4d, 0x5b, 0x31, 0x8e, 0x73, 0x53, 0xf3, 0x3e, 0x2c, 0x6b, 0xf0, 0x90,
+	0x72, 0x61, 0x6c, 0x6b, 0xc3, 0x5e, 0x52, 0xd4, 0xb7, 0x8a, 0x48, 0x3e, 0x82, 0x5b, 0xea, 0x64,
+	0xe6, 0xa4, 0x4a, 0x0b, 0x15, 0x94, 0x67, 0x4a, 0x62, 0x78, 0x11, 0xd9, 0x0a, 0x92, 0x29, 0x67,
+	0xbe, 0xa0, 0x9c, 0x6d, 0xa8, 0x8b, 0xf4, 0x3c, 0x61, 0x89, 0x2e, 0x0e, 0xa2, 0x63, 0xd2, 0x63,
+	0xb2, 0x0e, 0xb7, 0x14, 0x63, 0x41, 0x32, 0xd4, 0x80, 0x58, 0xb0, 0x84, 0x6a, 0x70, 0x58, 0xe8,
+	0x9c, 0x8f, 0x8c, 0xa1, 0x98, 0xb3, 0x9b, 0x48, 0x3c, 0x0e, 0x9f, 0x21, 0xc9, 0xfa, 0x3d, 0x40,
+	0xbe, 0xfc, 0x1f, 0xe3, 0xbb, 0xad, 0xbf, 0x82, 0xb5, 0x8a, 0x8a, 0xc7, 0x4d, 0x21, 0x23, 0x5a,
+	0x91, 0x72, 0x25, 0x45, 0x89, 0x5f, 0xe6, 0x63, 0x82, 0xac, 0x5f, 0xc1, 0x66, 0x75, 0xe5, 0xe3,
+	0xe6, 0xb8, 0xce, 0xfa, 0x14, 0x56, 0x27, 0xaa, 0x1b, 0x37, 0x06, 0xb3, 0xdf, 0xc2, 0x4a, 0xa9,
+	0x8a, 0x41, 0xee, 0x02, 0xe8, 0x8a, 0x87, 0x93, 0xc5, 0x9d, 0x0d, 0x4d, 0x39, 0xf6, 0x50, 0x53,
+	0xb2, 0xc8, 0xa1, 0x1e, 0x7b, 0x6e, 0x56, 0x96, 0x72, 0xea, 0x1b, 0xee, 0x5b, 0x5f, 0xc0, 0x7a,
+	0x55, 0x45, 0xe3, 0x1d, 0xbe, 0xe3, 0x9f, 0xe7, 0x61, 0xbd, 0xaa, 0x5a, 0x45, 0x5e, 0xc2, 0x03,
+	0x71, 0xc9, 0x62, 0x27, 0xe6, 0x2c, 0x70, 0xb9, 0x0e, 0xbb, 0x9c, 0xac, 0xfe, 0xc5, 0xa9, 0xf2,
+	0x47, 0x2a, 0x28, 0xd9, 0x43, 0xe8, 0x99, 0x42, 0xca, 0x08, 0xcc, 0x88, 0xd4, 0x30, 0xf2, 0x16,
+	0x3e, 0xc4, 0xec, 0xa3, 0x5a, 0x98, 0x2b, 0x1c, 0x4e, 0xfb, 0xa9, 0xef, 0x72, 0x55, 0x28, 0x54,
+	0x01, 0xc6, 0x03, 0x41, 0x93, 0x0a, 0x91, 0xfb, 0xc2, 0x56, 0x58, 0x19, 0xb9, 0x74, 0xe1, 0x03,
+	0x2f, 0x0a, 0x75, 0xa2, 0x1b, 0x47, 0x71, 0xea, 0x63, 0x8e, 0x66, 0x96, 0x31, 0x0b, 0xb0, 0xf0,
+	0x22, 0xd2, 0xa6, 0xd1, 0x42, 0x38, 0xa6, 0xb5, 0x67, 0x1a, 0xac, 0x97, 0xd0, 0xd2, 0xe5, 0x5d,
+	0xfe, 0x25, 0x6c, 0xc9, 0x28, 0xba, 0x52, 0xcc, 0x2d, 0x15, 0x78, 0x22, 0xa0, 0x7a, 0x6a, 0x79,
+	0xd6, 0x45, 0xea, 0xfb, 0x2a, 0xd8, 0x54, 0x4f, 0x6c, 0x33, 0x1e, 0x9b, 0xf6, 0x22, 0xf5, 0x7d,
+	0x19, 0x73, 0x56, 0x4c, 0x95, 0x55, 0x58, 0x39, 0x75, 0xb1, 0x6a, 0x2a, 0x6a, 0x40, 0x4e, 0xfd,
+	0x0e, 0xb6, 0xa4, 0x02, 0xb4, 0x5a, 0x65, 0xbe, 0xaf, 0x65, 0x18, 0xa3, 0x51, 0x28, 0x26, 0xe0,
+	0xd7, 0x2b, 0x8d, 0x22, 0x50, 0xcb, 0x12, 0xf6, 0xa6, 0x5b, 0x49, 0xb7, 0xfe, 0xae, 0x06, 0x9b,
+	0xd5, 0x53, 0xf0, 0xf2, 0x8a, 0x41, 0xc4, 0x93, 0x62, 0x2c, 0xdd, 0x90, 0x14, 0xb9, 0xad, 0x1d,
+	0x68, 0xe4, 0x1f, 0x3f, 0xab, 0xa3, 0x38, 0xf3, 0xb9, 0x0f, 0x60, 0xc9, 0x44, 0xc0, 0xce, 0xc0,
+	0x15, 0x03, 0x19, 0x6c, 0xb5, 0xec, 0x96, 0x21, 0x1e, 0xb9, 0x62, 0x40, 0x36, 0x61, 0x61, 0xc0,
+	0x3c, 0x8f, 0x86, 0xfa, 0xf4, 0xf4, 0xc8, 0xe2, 0xd0, 0x2a, 0x96, 0xdc, 0xde, 0x39, 0xf6, 0xdb,
+	0x81, 0x86, 0xac, 0xc1, 0x15, 0x5e, 0x52, 0x5d, 0x12, 0xd0, 0x3b, 0xdf, 0x05, 0x50, 0x4c, 0xd9,
+	0x68, 0x52, 0x51, 0xa7, 0x82, 0xbf, 0x1e, 0xc5, 0xd4, 0x1a, 0x41, 0xb3, 0x50, 0xa8, 0x2b, 0xa1,
+	0x6b, 0x25, 0x74, 0xd5, 0x8e, 0x66, 0xab, 0x76, 0x84, 0x6a, 0x40, 0x73, 0x27, 0x12, 0x0c, 0xa0,
+	0x98, 0xa7, 0xd7, 0x6d, 0xe5, 0xc4, 0x63, 0xcf, 0xfa, 0x25, 0xd4, 0x4d, 0xad, 0x8f, 0x7c, 0x52,
+	0xa8, 0x08, 0x2a, 0x17, 0xbb, 0x3a, 0x51, 0x11, 0xcc, 0xcb, 0x81, 0xd6, 0x7f, 0xd4, 0x61, 0x51,
+	0x53, 0xd1, 0x37, 0xa0, 0x93, 0x30, 0x8e, 0x13, 0x7f, 0x93, 0x2f, 0xb3, 0x96, 0x49, 0x76, 0x4a,
+	0x15, 0x9d, 0x17, 0x3c, 0x31, 0x23, 0x5b, 0xf7, 0x4d, 0xe4, 0x21, 0x3e, 0x85, 0xfa, 0x20, 0x12,
+	0x89, 0x9c, 0x3a, 0x57, 0x2e, 0xd8, 0x1e, 0x69, 0x4e, 0xb6, 0x29, 0x03, 0x25, 0xcf, 0x60, 0x69,
+	0x18, 0xe1, 0x9a, 0x3c, 0x72, 0x03, 0x16, 0xf6, 0x75, 0x6f, 0xac, 0x50, 0x48, 0x7b, 0x8b, 0x6c,
+	0x5b, 0x71, 0xcd, 0xfc, 0xd6, 0xb0, 0x40, 0x24, 0xdf, 0x40, 0x1b, 0x75, 0x14, 0x85, 0xae, 0xef,
+	0x0c, 0xa2, 0x44, 0xc4, 0x51, 0xa2, 0x3b, 0x5f, 0x85, 0xab, 0x7e, 0xa6, 0x11, 0x47, 0x0a, 0x60,
+	0x24, 0xad, 0xc4, 0xe3, 0x74, 0xf2, 0x05, 0x34, 0xae, 0x5c, 0xdf, 0x8f, 0xdd, 0x98, 0x72, 0x1d,
+	0x62, 0x17, 0x8a, 0x59, 0xdf, 0x1a, 0x96, 0x99, 0x9f, 0x83, 0xc9, 0x9f, 0x43, 0x4b, 0x26, 0xb2,
+	0xe6, 0x4b, 0x16, 0xcb, 0x05, 0x21, 0xcc, 0x66, 0x4b, 0x1f, 0xd2, 0xf4, 0x72, 0x1a, 0x2e, 0x7d,
+	0xee, 0xa7, 0x34, 0x89, 0xa2, 0x64, 0xa0, 0x3b, 0x56, 0x85, 0xa5, 0x9f, 0x19, 0x56, 0xb6, 0x74,
+	0x06, 0x26, 0xbf, 0x83, 0xcd, 0x6b, 0x0a, 0xad, 0x8d, 0x72, 0x58, 0x5f, 0x19, 0x02, 0x1b, 0x91,
+	0x1b, 0x6e, 0x65, 0x7d, 0xf5, 0x4b, 0x68, 0x06, 0x5e, 0xe0, 0x98, 0x5c, 0x08, 0xca, 0x37, 0xe3,
+	0xe4, 0xf0, 0x44, 0xc7, 0xed, 0xd9, 0xcd, 0x08, 0xbc, 0xc0, 0x84, 0xf2, 0x14, 0xb6, 0x4d, 0x2f,
+	0x4d, 0x36, 0xe3, 0x9c, 0x3e, 0x77, 0x7b, 0xd4, 0x89, 0x29, 0x67, 0x91, 0xa7, 0x9b, 0x5b, 0x0f,
+	0x0b, 0x07, 0xa5, 0xb1, 0x2f, 0xa3, 0xde, 0xe5, 0x6f, 0x10, 0x79, 0x26, 0x81, 0x46, 0xf2, 0xed,
+	0xb8, 0x9a, 0x4f, 0xbe, 0x83, 0xcd, 0xc0, 0xfd, 0x9e, 0x05, 0x69, 0x80, 0xb9, 0xb2, 0x74, 0x6c,
+	0xd2, 0x6a, 0x9a, 0xce, 0xd7, 0xfb, 0xc5, 0x28, 0x56, 0xe2, 0x6c, 0x0d, 0x43, 0xe3, 0x99, 0xed,
+	0x7c, 0x3d, 0xa8, 0x60, 0x92, 0xbf, 0x80, 0x0d, 0x8f, 0xb9, 0xfd, 0x30, 0x12, 0x09, 0xeb, 0x39,
+	0x22, 0x3d, 0x0f, 0x98, 0x90, 0xd1, 0xca, 0x52, 0x59, 0xf6, 0x61, 0x06, 0xeb, 0x66, 0xa8, 0x4c,
+	0xb6, 0x57, 0xc1, 0xc4, 0x27, 0xe0, 0xc6, 0xb1, 0xe3, 0x86, 0xae, 0x3f, 0x4a, 0x58, 0x4f, 0xe8,
+	0xee, 0xd8, 0x78, 0xb3, 0x67, 0xdf, 0x70, 0xb3, 0x27, 0xe0, 0x16, 0x88, 0xe4, 0x02, 0xb6, 0xae,
+	0x2f, 0xf1, 0xaf, 0x94, 0x13, 0xc5, 0xeb, 0x32, 0x25, 0x23, 0xbb, 0xe3, 0x5e, 0x97, 0x4a, 0x3d,
+	0x86, 0xb5, 0x8a, 0xf7, 0x88, 0x11, 0xb1, 0xea, 0xb8, 0x79, 0x3a, 0x0a, 0x30, 0x43, 0xeb, 0x09,
+	0x6c, 0x56, 0xbf, 0xbc, 0x29, 0x73, 0xfe, 0x0c, 0xda, 0xe5, 0x77, 0x86, 0xc1, 0x29, 0x0b, 0x4c,
+	0x01, 0xa1, 0x65, 0xab, 0x01, 0x52, 0xaf, 0x06, 0x94, 0x9b, 0x40, 0x5f, 0x0d, 0xac, 0x47, 0x40,
+	0x26, 0x9f, 0xda, 0x94, 0xf5, 0x3e, 0x86, 0x76, 0xf9, 0x71, 0x4d, 0x41, 0xff, 0x7d, 0x0d, 0xee,
+	0x4c, 0x7b, 0x44, 0x37, 0x06, 0xa5, 0x6f, 0xaf, 0x7d, 0xac, 0xca, 0xe4, 0xee, 0xdd, 0xf0, 0x58,
+	0xaf, 0x79, 0xa5, 0xd6, 0xdf, 0xd4, 0x60, 0xef, 0x86, 0x93, 0xbd, 0x71, 0x6f, 0xcf, 0xe0, 0xee,
+	0xd8, 0xdd, 0x71, 0x3c, 0x55, 0x57, 0xc2, 0x50, 0x24, 0xcb, 0xcf, 0x5a, 0xf6, 0xce, 0x18, 0xe8,
+	0x30, 0xc3, 0xa0, 0xda, 0xad, 0x27, 0xb0, 0x51, 0xdd, 0xa6, 0xd9, 0x82, 0xfa, 0x30, 0x0e, 0x8b,
+	0x7f, 0x0c, 0x59, 0x1c, 0xc6, 0xe1, 0x9b, 0x94, 0x79, 0xd6, 0x67, 0xa6, 0xde, 0x59, 0x70, 0x2f,
+	0x98, 0x88, 0x15, 0x1d, 0x92, 0xde, 0x6d, 0xee, 0x73, 0xac, 0x4f, 0x60, 0xa5, 0xe4, 0x59, 0x30,
+	0xc1, 0xc9, 0xdc, 0x90, 0xae, 0x5f, 0x99, 0xb1, 0xf5, 0x5b, 0x58, 0x9d, 0xb0, 0x54, 0xe4, 0xe9,
+	0xb8, 0x6d, 0xab, 0x95, 0x3b, 0xd3, 0xf9, 0x8c, 0xa2, 0x51, 0xb3, 0x3c, 0x80, 0x9c, 0x43, 0xde,
+	0xc2, 0x43, 0xd9, 0x29, 0xd0, 0x9d, 0x55, 0x34, 0x72, 0xb2, 0x16, 0x49, 0x3d, 0xe7, 0x6a, 0xc0,
+	0x7c, 0xea, 0x88, 0x34, 0xa6, 0x7c, 0xc8, 0x44, 0x76, 0x9d, 0xde, 0xcb, 0xf1, 0x68, 0xc8, 0xf6,
+	0x15, 0xfa, 0x5b, 0x04, 0x77, 0x33, 0xac, 0xf5, 0x3b, 0xd8, 0x9d, 0x6e, 0x0e, 0xc9, 0xaf, 0xa7,
+	0x1a, 0x57, 0x15, 0xf9, 0x5c, 0x67, 0x32, 0xad, 0x2e, 0xec, 0x4c, 0x31, 0x85, 0xe4, 0xb3, 0x6b,
+	0x2d, 0xaa, 0x92, 0x5b, 0x69, 0x2a, 0xad, 0x5f, 0xc0, 0xce, 0x14, 0x1b, 0x38, 0xe5, 0x61, 0x3d,
+	0x96, 0x39, 0x5e, 0xd9, 0xd0, 0x4d, 0x99, 0x70, 0x00, 0x7b, 0x37, 0x34, 0x2b, 0xdf, 0x21, 0xeb,
+	0xf9, 0x1a, 0xee, 0x4c, 0xeb, 0x3d, 0xbe, 0x83, 0x84, 0x3e, 0x6c, 0x5f, 0xdf, 0x4f, 0x7c, 0x87,
+	0xbe, 0xc0, 0x07, 0xb0, 0xa2, 0xff, 0x1b, 0x91, 0x35, 0x2c, 0x55, 0xda, 0xb3, 0xac, 0xc8, 0x46,
+	0x94, 0xf5, 0xd7, 0x35, 0x58, 0xab, 0x68, 0x2b, 0x92, 0x0f, 0xa1, 0xdd, 0x4b, 0x39, 0xc7, 0xe3,
+	0xc9, 0x2a, 0xcb, 0xba, 0x9a, 0xad, 0xe9, 0x19, 0xf4, 0x3e, 0xb4, 0x42, 0x7a, 0x95, 0xc3, 0x74,
+	0x65, 0x2a, 0xa4, 0x57, 0x19, 0x64, 0x0f, 0x9a, 0xaa, 0xce, 0x1e, 0xf1, 0x28, 0x10, 0xba, 0xba,
+	0x0e, 0x92, 0x74, 0x8a, 0x14, 0xeb, 0x33, 0xd8, 0xac, 0x6e, 0x42, 0x8e, 0x95, 0xb6, 0x6b, 0xa5,
+	0xd2, 0xf6, 0x29, 0xac, 0x57, 0x75, 0x17, 0x31, 0x12, 0xed, 0x17, 0xfa, 0x2c, 0xf8, 0x7b, 0x32,
+	0x21, 0x98, 0x9d, 0x4c, 0x08, 0xd0, 0x4b, 0x94, 0x3b, 0x81, 0xe4, 0x23, 0x58, 0x54, 0xad, 0x43,
+	0x13, 0x10, 0xb7, 0x0b, 0xff, 0x54, 0x91, 0x0c, 0xdb, 0x00, 0xac, 0x11, 0x2c, 0xe8, 0x59, 0x7b,
+	0xd0, 0x8c, 0x79, 0xe4, 0xa5, 0x3d, 0xd5, 0xc8, 0xd3, 0x76, 0x46, 0x93, 0xbe, 0xa1, 0x23, 0x59,
+	0x8c, 0xd4, 0x80, 0xf1, 0x2a, 0xc5, 0xb2, 0x26, 0x9b, 0xf2, 0x8c, 0xcc, 0xd1, 0xf5, 0xff, 0x4c,
+	0xa4, 0x4d, 0xd4, 0x31, 0xbc, 0xf9, 0xd3, 0xc0, 0xbe, 0x24, 0x5a, 0x1f, 0xc3, 0x7a, 0x55, 0x13,
+	0x13, 0xdd, 0x99, 0x2c, 0xa5, 0xeb, 0x8b, 0xae, 0x06, 0xd6, 0x4b, 0x20, 0x93, 0xcd, 0x49, 0xf2,
+	0x39, 0xdc, 0xbe, 0x60, 0x7e, 0x42, 0x79, 0xde, 0xd5, 0x74, 0xe2, 0x88, 0x85, 0x89, 0xb9, 0x63,
+	0x1b, 0x8a, 0x9d, 0x4d, 0x39, 0x93, 0x4c, 0xeb, 0xc7, 0x1a, 0x90, 0xc9, 0xce, 0x24, 0xda, 0xe6,
+	0x4b, 0x3a, 0x2a, 0x66, 0x30, 0x8b, 0x97, 0x74, 0x24, 0xf3, 0x97, 0x43, 0x68, 0xe7, 0x9d, 0x4e,
+	0xd5, 0x41, 0xd2, 0x9e, 0xaa, 0x10, 0xe1, 0x67, 0xc2, 0x54, 0xf3, 0xc1, 0x5e, 0xc9, 0xa6, 0x28,
+	0x02, 0xea, 0x10, 0x6f, 0x5e, 0x8f, 0x72, 0xbc, 0xf7, 0x3d, 0x57, 0x57, 0xf3, 0x5b, 0xf6, 0x72,
+	0x48, 0xaf, 0x0e, 0x72, 0x2a, 0xf9, 0x1a, 0xee, 0x70, 0x1a, 0xfb, 0x23, 0x87, 0x86, 0x3d, 0x3e,
+	0xd2, 0x95, 0x9b, 0xc2, 0xac, 0x79, 0x39, 0x6b, 0x5b, 0x62, 0x9e, 0x67, 0x90, 0x82, 0x04, 0xeb,
+	0x9f, 0x6a, 0xb0, 0x52, 0xda, 0xcf, 0xb4, 0xab, 0xa9, 0x5a, 0x51, 0x68, 0x8c, 0x29, 0x9e, 0xbf,
+	0x43, 0xbf, 0x8f, 0x23, 0x9e, 0xe8, 0x3b, 0xd7, 0xd6, 0x9c, 0x6f, 0xe8, 0xe8, 0xb9, 0xa4, 0x93,
+	0xaf, 0x60, 0x67, 0x12, 0x9d, 0xbf, 0x28, 0x75, 0xe0, 0x9d, 0xf2, 0x34, 0x73, 0xdf, 0xad, 0x2f,
+	0x61, 0x75, 0xa2, 0xaf, 0x8a, 0xca, 0x29, 0x77, 0x63, 0xd5, 0x26, 0x97, 0xcf, 0xc7, 0x80, 0xd6,
+	0x7f, 0xd7, 0x60, 0xc9, 0xa6, 0x22, 0xf5, 0x13, 0xf3, 0x8f, 0x4b, 0x02, 0xf3, 0xa9, 0x57, 0xe8,
+	0x53, 0x7a, 0x6c, 0xf2, 0x5f, 0x98, 0xb3, 0x93, 0xff, 0xc2, 0x7c, 0x0a, 0x4d, 0xca, 0x79, 0xc4,
+	0x9d, 0xde, 0xc0, 0x65, 0xe1, 0x64, 0x39, 0xf1, 0x39, 0x32, 0x0f, 0x90, 0x67, 0x03, 0xcd, 0x7e,
+	0x5b, 0x5d, 0x58, 0xe8, 0x26, 0x6e, 0x92, 0x0a, 0xd2, 0x86, 0xd6, 0x7e, 0xef, 0x32, 0x8c, 0xae,
+	0x7c, 0xea, 0xf5, 0xa9, 0xd7, 0x9e, 0x21, 0x0d, 0xb8, 0x25, 0x67, 0xb5, 0x6b, 0x64, 0x13, 0x88,
+	0xfe, 0xd7, 0xe6, 0x0b, 0xd9, 0xbd, 0x54, 0xf4, 0x59, 0x52, 0x87, 0xf9, 0x63, 0xcf, 0xa7, 0xed,
+	0x39, 0x02, 0xb0, 0xf0, 0x2a, 0x4a, 0x5e, 0x45, 0x57, 0xed, 0x79, 0xeb, 0xdf, 0x6a, 0x00, 0xf9,
+	0x7a, 0xe4, 0x53, 0xd8, 0xf0, 0xa3, 0x9e, 0xeb, 0xb3, 0x1f, 0xa8, 0xe7, 0x78, 0x54, 0xf4, 0x38,
+	0x8b, 0xb3, 0x02, 0x53, 0xc3, 0x5e, 0xcf, 0x98, 0x87, 0x39, 0x0f, 0x7d, 0x55, 0x2a, 0x1c, 0x1a,
+	0xf6, 0x7d, 0x26, 0x06, 0x63, 0xb3, 0xd4, 0xc7, 0xaf, 0xa7, 0xe2, 0xb9, 0x62, 0x16, 0x67, 0xdd,
+	0x87, 0x96, 0xd2, 0x82, 0x17, 0x05, 0x4a, 0x0d, 0x52, 0x51, 0x92, 0x76, 0x28, 0x49, 0x98, 0xdc,
+	0x6b, 0x45, 0x45, 0x9e, 0xba, 0x7c, 0xb7, 0xec, 0x86, 0xd2, 0x48, 0xe4, 0xd1, 0x67, 0xed, 0xff,
+	0xfc, 0x69, 0xb7, 0xf6, 0x5f, 0x3f, 0xed, 0xd6, 0x7e, 0xfc, 0x69, 0xb7, 0xf6, 0x8f, 0xff, 0xb3,
+	0x3b, 0x73, 0xbe, 0x20, 0x15, 0xf8, 0xe9, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xaf, 0xde,
+	0x66, 0x32, 0x2b, 0x00, 0x00,
 }
 
 func (m *CommandPayload) Marshal() (dAtA []byte, err error) {
@@ -6528,6 +6557,20 @@ func (m *Asset) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i -= len(m.XXX_unrecognized)
 		copy(dAtA[i:], m.XXX_unrecognized)
 	}
+	if len(m.Sha256S) > 0 {
+		for iNdEx := len(m.Sha256S) - 1; iNdEx >= 0; iNdEx-- {
+			i -= len(m.Sha256S[iNdEx])
+			copy(dAtA[i:], m.Sha256S[iNdEx])
+			i = encodeVarintMdm(dAtA, i, uint64(len(m.Sha256S[iNdEx])))
+			i--
+			dAtA[i] = 0x32
+		}
+	}
+	if m.Sha256Size != 0 {
+		i = encodeVarintMdm(dAtA, i, uint64(m.Sha256Size))
+		i--
+		dAtA[i] = 0x28
+	}
 	if len(m.Url) > 0 {
 		i -= len(m.Url)
 		copy(dAtA[i:], m.Url)
@@ -6583,6 +6626,11 @@ func (m *Metadata) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 		i -= len(m.XXX_unrecognized)
 		copy(dAtA[i:], m.XXX_unrecognized)
 	}
+	if m.SizeInBytes != 0 {
+		i = encodeVarintMdm(dAtA, i, uint64(m.SizeInBytes))
+		i--
+		dAtA[i] = 0x38
+	}
 	if len(m.Title) > 0 {
 		i -= len(m.Title)
 		copy(dAtA[i:], m.Title)
@@ -9520,6 +9568,15 @@ func (m *Asset) Size() (n int) {
 	if l > 0 {
 		n += 1 + l + sovMdm(uint64(l))
 	}
+	if m.Sha256Size != 0 {
+		n += 1 + sovMdm(uint64(m.Sha256Size))
+	}
+	if len(m.Sha256S) > 0 {
+		for _, s := range m.Sha256S {
+			l = len(s)
+			n += 1 + l + sovMdm(uint64(l))
+		}
+	}
 	if m.XXX_unrecognized != nil {
 		n += len(m.XXX_unrecognized)
 	}
@@ -9558,6 +9615,9 @@ func (m *Metadata) Size() (n int) {
 	if l > 0 {
 		n += 1 + l + sovMdm(uint64(l))
 	}
+	if m.SizeInBytes != 0 {
+		n += 1 + sovMdm(uint64(m.SizeInBytes))
+	}
 	if m.XXX_unrecognized != nil {
 		n += len(m.XXX_unrecognized)
 	}
@@ -14430,6 +14490,57 @@ func (m *Asset) Unmarshal(dAtA []byte) error {
 			}
 			m.Url = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
+		case 5:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Sha256Size", wireType)
+			}
+			m.Sha256Size = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowMdm
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.Sha256Size |= int64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		case 6:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Sha256S", wireType)
+			}
+			var stringLen uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowMdm
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				stringLen |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			intStringLen := int(stringLen)
+			if intStringLen < 0 {
+				return ErrInvalidLengthMdm
+			}
+			postIndex := iNdEx + intStringLen
+			if postIndex < 0 {
+				return ErrInvalidLengthMdm
+			}
+			if postIndex > l {
+				return io.ErrUnexpectedEOF
+			}
+			m.Sha256S = append(m.Sha256S, string(dAtA[iNdEx:postIndex]))
+			iNdEx = postIndex
 		default:
 			iNdEx = preIndex
 			skippy, err := skipMdm(dAtA[iNdEx:])
@@ -14678,6 +14789,25 @@ func (m *Metadata) Unmarshal(dAtA []byte) error {
 			}
 			m.Title = string(dAtA[iNdEx:postIndex])
 			iNdEx = postIndex
+		case 7:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field SizeInBytes", wireType)
+			}
+			m.SizeInBytes = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowMdm
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.SizeInBytes |= int64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
 		default:
 			iNdEx = preIndex
 			skippy, err := skipMdm(dAtA[iNdEx:])
diff --git a/mdm/mdm/internal/mdmproto/mdm.proto b/mdm/mdm/internal/mdmproto/mdm.proto
index 213cc64..db8b9f6 100644
--- a/mdm/mdm/internal/mdmproto/mdm.proto
+++ b/mdm/mdm/internal/mdmproto/mdm.proto
@@ -180,6 +180,8 @@ message Asset {
   int64 md5_size = 2;
   repeated string md5s = 3;
   string url = 4;
+  int64 sha256_size = 5;
+  repeated string sha256s = 6;
 }
 
 message Metadata {
@@ -189,6 +191,7 @@ message Metadata {
   string kind = 4;
   string subtitle = 5;
   string title = 6;
+  int64 size_in_bytes = 7;
 }
 
 message BundleInfo {
diff --git a/mdm/mdm/marshal_proto.go b/mdm/mdm/marshal_proto.go
index 6fffbf8..e617976 100644
--- a/mdm/mdm/marshal_proto.go
+++ b/mdm/mdm/marshal_proto.go
@@ -152,8 +152,47 @@ func commandToProto(cmd *Command) (*mdmproto.Command, error) {
 			},
 		}
 	case "InstallEnterpriseApplication":
+		var pbManifest *mdmproto.Manifest
+		if cmd.InstallEnterpriseApplication.Manifest != nil {
+			pbManifest = &(mdmproto.Manifest{})
+			for _, item := range cmd.InstallEnterpriseApplication.Manifest.ManifestItems {
+				var pbManifestItem mdmproto.ManifestItem
+				for _, asset := range item.Assets {
+					pbAsset := mdmproto.Asset{
+						Kind:       asset.Kind,
+						Md5Size:    asset.MD5Size,
+						Md5S:       asset.MD5s,
+						Sha256Size: asset.SHA256Size,
+						Sha256S:    asset.SHA256s,
+						Url:        asset.URL,
+					}
+					pbManifestItem.Assets = append(pbManifestItem.Assets, &pbAsset)
+				}
+				if item.Metadata != nil {
+					pbManifestItem.Metadata = &(mdmproto.Metadata{
+						BundleIdentifier: item.Metadata.BundleInfo.BundleIdentifier,
+						BundleVersion:    item.Metadata.BundleInfo.BundleVersion,
+						Kind:             item.Metadata.Kind,
+						SizeInBytes:      item.Metadata.SizeInBytes,
+						Title:            item.Metadata.Title,
+						Subtitle:         item.Metadata.Subtitle,
+					})
+					for _, bundleInfo := range item.Metadata.Items {
+						bpBundleInfo := &(mdmproto.BundleInfo{
+							BundleIdentifier: bundleInfo.BundleIdentifier,
+							BundleVersion:    bundleInfo.BundleVersion,
+						})
+						pbManifestItem.Metadata.Items = append(pbManifestItem.Metadata.Items, bpBundleInfo)
+					}
+				}
+				if len(pbManifestItem.Assets) > 0 || pbManifestItem.Metadata != nil {
+					pbManifest.ManifestItems = append(pbManifest.ManifestItems, &pbManifestItem)
+				}
+			}
+		}
 		cmdproto.Request = &mdmproto.Command_InstallEnterpriseApplication{
 			InstallEnterpriseApplication: &mdmproto.InstallEnterpriseApplication{
+				Manifest:                       pbManifest,
 				ManifestUrl:                    emptyStringIfNil(cmd.InstallEnterpriseApplication.ManifestURL),
 				ManifestUrlPinningCerts:        cmd.InstallEnterpriseApplication.ManifestURLPinningCerts,
 				PinningRevocationCheckRequired: falseIfNil(cmd.InstallEnterpriseApplication.PinningRevocationCheckRequired),
diff --git a/mdm/mdm/unmarshal_proto.go b/mdm/mdm/unmarshal_proto.go
index 25dd2d5..98bd6e0 100644
--- a/mdm/mdm/unmarshal_proto.go
+++ b/mdm/mdm/unmarshal_proto.go
@@ -2,6 +2,7 @@ package mdm
 
 import (
 	"github.com/gogo/protobuf/proto"
+	"github.com/micromdm/micromdm/mdm/appmanifest"
 	"github.com/micromdm/micromdm/mdm/mdm/internal/mdmproto"
 )
 
@@ -110,7 +111,55 @@ func protoToCommand(pb *mdmproto.Command) *Command {
 		}
 	case "InstallEnterpriseApplication":
 		pbc := pb.GetInstallEnterpriseApplication()
+		var manifest *appmanifest.Manifest
+		if pbManifest := pbc.GetManifest(); pbManifest != nil {
+			manifest = &(appmanifest.Manifest{})
+			if pbManifestItems := pbManifest.GetManifestItems(); pbManifestItems != nil {
+				for _, pbManifestItem := range pbManifestItems {
+					var manifestItem appmanifest.Item
+					if pbAssets := pbManifestItem.GetAssets(); pbAssets != nil {
+						for _, pbAsset := range pbAssets {
+							asset := appmanifest.Asset{
+								Kind:       pbAsset.Kind,
+								MD5s:       pbAsset.Md5S,
+								MD5Size:    pbAsset.Md5Size,
+								URL:        pbAsset.Url,
+								SHA256s:    pbAsset.Sha256S,
+								SHA256Size: pbAsset.Sha256Size,
+							}
+							manifestItem.Assets = append(manifestItem.Assets, asset)
+						}
+					}
+					if pbMetadata := pbManifestItem.GetMetadata(); pbMetadata != nil {
+						manifestItem.Metadata = &(appmanifest.Metadata{
+							Kind:        pbMetadata.Kind,
+							SizeInBytes: pbMetadata.SizeInBytes,
+							Title:       pbMetadata.Title,
+							Subtitle:    pbMetadata.Subtitle,
+							BundleInfo: appmanifest.BundleInfo{
+								BundleIdentifier: pbMetadata.BundleIdentifier,
+								BundleVersion:    pbMetadata.BundleVersion,
+							},
+						})
+						if pbMetadataItems := pbMetadata.GetItems(); pbMetadataItems != nil {
+							for _, pbMetadataItem := range pbMetadataItems {
+								bundleInfo := appmanifest.BundleInfo{
+									BundleIdentifier: pbMetadataItem.BundleIdentifier,
+									BundleVersion:    pbMetadataItem.BundleVersion,
+								}
+								manifestItem.Metadata.Items = append(manifestItem.Metadata.Items, bundleInfo)
+							}
+						}
+					}
+					if len(manifestItem.Assets) > 0 || manifestItem.Metadata != nil {
+						manifest.ManifestItems = append(manifest.ManifestItems, manifestItem)
+					}
+				}
+			}
+		}
+
 		cmd.InstallEnterpriseApplication = &InstallEnterpriseApplication{
+			Manifest:                       manifest,
 			ManifestURL:                    nilIfEmptyString(pbc.GetManifestUrl()),
 			ManifestURLPinningCerts:        pbc.GetManifestUrlPinningCerts(),
 			PinningRevocationCheckRequired: nilIfFalse(pbc.GetPinningRevocationCheckRequired()),
diff --git a/pkg/activationlock/activationlock.go b/pkg/activationlock/activationlock.go
new file mode 100644
index 0000000..18c128e
--- /dev/null
+++ b/pkg/activationlock/activationlock.go
@@ -0,0 +1,107 @@
+// Package activationlock supports Apple device activation locking and unlocking.
+// https://developer.apple.com/documentation/devicemanagement/activation_lock_a_device
+package activationlock
+
+import (
+	"crypto/rand"
+	"crypto/sha256"
+	"encoding/hex"
+	"fmt"
+	"strings"
+
+	"golang.org/x/crypto/pbkdf2"
+)
+
+// The available character set for a bypass code string.
+const charset = "0123456789ACDEFGHJKLMNPQRTUVWXYZ"
+
+var (
+	// Positions to insert "-" in the bypass code string.
+	dashPositions = []int{5, 10, 14, 18, 22}
+
+	// The salt for the hash is always the same.
+	salt = []uint8{0, 0, 0, 0}
+)
+
+// BypassCode is the ActivationLock code.
+type BypassCode struct {
+	Key [16]byte
+
+	format string
+}
+
+// Create generates a usable bypass code.
+func Create(key []byte) (BypassCode, error) {
+	var code BypassCode
+
+	if key == nil {
+		key = make([]byte, 16)
+		if _, err := rand.Read(key); err != nil {
+			return code, err
+		}
+	}
+
+	copy(code.Key[:], key)
+
+	// Format human readable version of key.
+	values, err := convertBits(key, 8, 5)
+	if err != nil {
+		return code, err
+	}
+
+	dashIdx := 0
+	var str strings.Builder
+	for i, p := range values {
+		if dashIdx < len(dashPositions) && i == dashPositions[dashIdx] {
+			str.WriteString("-")
+			dashIdx++
+		}
+		str.WriteByte(charset[p])
+	}
+	code.format = str.String()
+
+	return code, nil
+}
+
+// Hash returns a PBKKDF2 derived hash of the bypass code.
+// The hex encoded string is sent to Apple to lock a device.
+func (c BypassCode) Hash() string {
+	return hex.EncodeToString(pbkdf2.Key(c.Key[:], salt, 50000, sha256.Size, sha256.New))
+}
+
+// String returns the bypass code in human readable format.
+func (c BypassCode) String() string {
+	return c.format
+}
+
+// convert binary data from one bits-per-byte arrangement to another.
+// Ex: re-arrange 8 bit bytes to groups of 5 when converting to base32.
+// This is a modified helper from a Go implementation of the bech32 format.
+// https://github.com/FiloSottile/age/blob/c9a35c072716b5ac6cd815366999c9e189b0c317/internal/bech32/bech32.go#L79-L105
+func convertBits(data []byte, frombits, tobits byte) ([]byte, error) {
+	var ret []byte
+	acc := uint32(0)
+	bits := byte(0)
+	maxv := byte(1<<tobits - 1)
+	for idx, value := range data {
+		if value>>frombits != 0 {
+			return nil, fmt.Errorf("invalid data range: data[%d]=%d (frombits=%d)", idx, value, frombits)
+		}
+		acc = acc<<frombits | uint32(value)
+		bits += frombits
+		for bits >= tobits {
+			bits -= tobits
+			ret = append(ret, byte(acc>>bits)&maxv)
+		}
+	}
+
+	// zero out most significant bits of the last value, until we get to remaining bits
+	if bits > 0 {
+		for bit := frombits; bit >= bits; bit-- {
+			acc = acc &^ (1 << bit)
+		}
+		ret = append(ret, byte(acc)&maxv)
+	}
+
+	return ret, nil
+}


Test patch:
diff --git a/mdm/mdm/mdm_command_test.go b/mdm/mdm/mdm_command_test.go
index f1e3ce7..083711b 100644
--- a/mdm/mdm/mdm_command_test.go
+++ b/mdm/mdm/mdm_command_test.go
@@ -72,7 +72,6 @@ func TestMarshalCommand(t *testing.T) {
 			if err := enc.Encode(&payload); err != nil {
 				t.Fatal(err)
 			}
-			fmt.Println(buf.String())
 		})
 
 		t.Run(tt.Command.RequestType+"_plist", func(t *testing.T) {
@@ -83,7 +82,6 @@ func TestMarshalCommand(t *testing.T) {
 			if err := enc.Encode(&payload); err != nil {
 				t.Fatal(err)
 			}
-			fmt.Println(buf.String())
 		})
 	}
 }
@@ -196,6 +194,35 @@ func TestEndToEnd(t *testing.T) {
 				}
 			},
 		},
+
+		{
+			name: "InstallEnterpriseApplication",
+			requestBytes: []byte(
+				`{"udid":"B59A5A44-EC36-4244-AB52-C40F6100528A","request_type":"InstallEnterpriseApplication","manifest":{"items":[{"metadata":{"items":[{"bundle-version":"1.7.5","bundle-identifier":"com.myenterprise.MyAppNotMAS"}],"bundle-version":"1.1","bundle-identifier":"com.myenterprise.MyAppPackage","kind":"display-image","sizeInBytes":1234,"title":"Test Title","subtitle":"Test Subtitle"},"Assets":[{"sha256-size":1234,"sha256s":["2a8a98c146c35ce29f8b9af4cf8218d2c026058e7eb35adb4a00236997593471"],"url":"https://example.com/p.pkg","kind":"software-package","md5-size":1234,"md5s":["cfdc14fa22a79bab2a8b423daca2c076"]}]}]}}`,
+			),
+			testFn: func(t *testing.T, parts endToEndParts) {
+				needToSee := [][]byte{
+					[]byte(`cfdc14fa22a79bab2a8b423daca2c076`),
+					[]byte(`https://example.com/p.pkg`),
+					[]byte(`com.myenterprise.MyAppPackage`),
+					[]byte(`1.1`),
+					[]byte(`1234`),
+					[]byte(`2a8a98c146c35ce29f8b9af4cf8218d2c026058e7eb35adb4a00236997593471`),
+					[]byte(`com.myenterprise.MyAppPackage`),
+					[]byte(`com.myenterprise.MyAppNotMAS`),
+					[]byte(`1.7.5`),
+					[]byte(`software-package`),
+					[]byte(`display-image`),
+					[]byte(`Test Title`),
+					[]byte(`Test Subtitle`),
+				}
+				for _, b := range needToSee {
+					if !bytes.Contains(parts.plistData, b) {
+						t.Error(fmt.Sprintf("marshaled plist does not contain required bytes: '%s'", string(b)))
+					}
+				}
+			},
+		},
 	}
 
 	for _, tt := range tests {
diff --git a/pkg/activationlock/activationlock_test.go b/pkg/activationlock/activationlock_test.go
new file mode 100644
index 0000000..a940fab
--- /dev/null
+++ b/pkg/activationlock/activationlock_test.go
@@ -0,0 +1,51 @@
+package activationlock
+
+import (
+	"encoding/hex"
+	"testing"
+)
+
+func TestBypassCode(t *testing.T) {
+	tests := []struct {
+		key           string
+		humanReadable string
+		hash          string
+	}{
+		{
+			key:           "1ea841db5edfafe6075b5ae0d845d254",
+			humanReadable: "3UM43-PUYVY-QYD1-UVCC-HEHJ-FKA4",
+			hash:          "6ab40d5eabe7218ec04182f461005600c7e3426bddd82cdb405bde9a1e0014b5",
+		},
+		{
+			key:           "44ebe63375969fec2da67e87e7317946",
+			humanReadable: "8LNYD-DVNKU-GYRC-E6GU-3YFD-CT86",
+			hash:          "c1968cb4c013ea893f1922bb5c39f81e35012c0bd9ce3c01cc2a05873a2499e6",
+		},
+		{
+			key:           "cb84798c3ca85a674194550a2e96aed8",
+			humanReadable: "TF27L-31WN1-E6FH-DMAM-52X5-NFV0",
+			hash:          "23cf8b7873425fd8efe31dc5b6ab9c357eb98a2a59c82ea1084ca8af58cc480a",
+		},
+	}
+
+	for _, tt := range tests {
+		tt := tt
+		t.Run(tt.key, func(t *testing.T) {
+			t.Parallel()
+
+			key, _ := hex.DecodeString(tt.key)
+			code, err := Create(key)
+			if err != nil {
+				t.Fatal(err)
+			}
+
+			if got, want := code.Hash(), tt.hash; got != want {
+				t.Errorf("Hash(): got %q, want %q", got, want)
+			}
+
+			if got, want := code.String(), tt.humanReadable; got != want {
+				t.Errorf("Human Readable String: got %q, want %q", got, want)
+			}
+		})
+	}
+}