From b71588af96a54eaea45c750cc953767563345f0c Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Thu, 16 Sep 2021 22:57:59 +0300 Subject: [PATCH 01/32] mvp Signed-off-by: pashavictorovich --- controller/cache/cache.go | 24 ++- controller/state.go | 1 + reposerver/apiclient/repository.pb.go | 231 +++++++++++++++---------- reposerver/repository/repository.go | 13 +- reposerver/repository/repository.proto | 1 + server/application/application.go | 2 +- util/argo/argo.go | 5 +- util/kube/kube.go | 16 ++ util/settings/settings.go | 14 ++ 9 files changed, 211 insertions(+), 96 deletions(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 781eaea7c1d7a..ba1b09f611fd1 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -258,6 +258,14 @@ func skipAppRequeuing(key kube.ResourceKey) bool { return ignoredRefreshResources[key.Group+"/"+key.Kind] } +// TODO: Move to kube.go +func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string { + if annotations := un.GetAnnotations(); annotations != nil { + return annotations[key] + } + return "" +} + func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, error) { c.lock.RLock() clusterCache, ok := c.clusters[server] @@ -285,6 +293,8 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e return nil, fmt.Errorf("controller is configured to ignore cluster %s", cluster.Server) } + trackingMethod := "annotation" + clusterCache = clustercache.NewClusterCache(cluster.RESTConfig(), clustercache.SetListSemaphore(c.listSemaphore), clustercache.SetResyncTimeout(K8SClusterResyncDuration), @@ -295,9 +305,17 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e res := &ResourceInfo{} populateNodeInfo(un, res) res.Health, _ = health.GetResourceHealth(un, cacheSettings.clusterSettings.ResourceHealthOverride) - appName := kube.GetAppInstanceLabel(un, cacheSettings.appInstanceLabelKey) - if isRoot && appName != "" { - res.AppName = appName + + if trackingMethod == "annotation" { + appName := kube.GetAppInstanceLabel(un, cacheSettings.appInstanceLabelKey) + if isRoot && appName != "" { + res.AppName = appName + } + } else { + appName := kube.GetAppInstanceLabel(un, cacheSettings.appInstanceLabelKey) + if isRoot && appName != "" { + res.AppName = appName + } } gvk := un.GroupVersionKind() diff --git a/controller/state.go b/controller/state.go index a6819a88afb55..ac1e370099d20 100644 --- a/controller/state.go +++ b/controller/state.go @@ -174,6 +174,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 ApiVersions: argo.APIGroupsToVersions(apiGroups), VerifySignature: verifySignature, HelmRepoCreds: permittedHelmCredentials, + TrackingMethod: "annotation", }) if err != nil { return nil, nil, err diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go index d8b0f1e182584..767c1b922c5bf 100644 --- a/reposerver/apiclient/repository.pb.go +++ b/reposerver/apiclient/repository.pb.go @@ -50,6 +50,7 @@ type ManifestRequest struct { VerifySignature bool `protobuf:"varint,16,opt,name=verifySignature,proto3" json:"verifySignature,omitempty"` HelmRepoCreds []*v1alpha1.RepoCreds `protobuf:"bytes,17,rep,name=helmRepoCreds,proto3" json:"helmRepoCreds,omitempty"` NoRevisionCache bool `protobuf:"varint,18,opt,name=noRevisionCache,proto3" json:"noRevisionCache,omitempty"` + TrackingMethod string `protobuf:"bytes,19,opt,name=trackingMethod,proto3" json:"trackingMethod,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -193,6 +194,13 @@ func (m *ManifestRequest) GetNoRevisionCache() bool { return false } +func (m *ManifestRequest) GetTrackingMethod() string { + if m != nil { + return m.TrackingMethod + } + return "" +} + // TestRepositoryRequest is a query to test repository is valid or not and has valid access. type TestRepositoryRequest struct { Repo *v1alpha1.Repository `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"` @@ -1359,94 +1367,96 @@ func init() { } var fileDescriptor_dd8723cfcc820480 = []byte{ - // 1392 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x18, 0xcb, 0x6e, 0xdb, 0xc6, - 0xd6, 0x94, 0xe4, 0x87, 0x8e, 0x12, 0x5b, 0x9e, 0x3c, 0x2e, 0xaf, 0xae, 0x23, 0x38, 0x04, 0x6e, - 0xe0, 0x36, 0x0d, 0x85, 0x28, 0x41, 0x1b, 0x24, 0x40, 0x01, 0xd5, 0x49, 0x1c, 0xc0, 0x49, 0xec, - 0xd2, 0x69, 0x81, 0x16, 0x41, 0x83, 0x31, 0x75, 0x4c, 0x4d, 0x25, 0x91, 0x13, 0x92, 0x52, 0xe1, - 0x00, 0x5d, 0x16, 0x5d, 0x74, 0xdd, 0xfe, 0x4e, 0x57, 0x7d, 0x2c, 0xdb, 0x3f, 0x28, 0xf2, 0x09, - 0xfd, 0x82, 0x62, 0x86, 0xaf, 0x21, 0x45, 0xbb, 0x0b, 0x25, 0xce, 0xc6, 0x9e, 0x39, 0xef, 0x73, - 0xe6, 0xbc, 0x28, 0xb8, 0xe6, 0x23, 0xf7, 0x02, 0xf4, 0xa7, 0xe8, 0x77, 0xe4, 0x91, 0x85, 0x9e, - 0x7f, 0xac, 0x1c, 0x4d, 0xee, 0x7b, 0xa1, 0x47, 0x20, 0x83, 0xb4, 0x2e, 0x3a, 0x9e, 0xe3, 0x49, - 0x70, 0x47, 0x9c, 0x22, 0x8a, 0xd6, 0x86, 0xe3, 0x79, 0xce, 0x08, 0x3b, 0x94, 0xb3, 0x0e, 0x75, - 0x5d, 0x2f, 0xa4, 0x21, 0xf3, 0xdc, 0x20, 0xc6, 0x1a, 0xc3, 0x3b, 0x81, 0xc9, 0x3c, 0x89, 0xb5, - 0x3d, 0x1f, 0x3b, 0xd3, 0x9b, 0x1d, 0x07, 0x5d, 0xf4, 0x69, 0x88, 0xfd, 0x98, 0xe6, 0xb1, 0xc3, - 0xc2, 0xc1, 0xe4, 0xd0, 0xb4, 0xbd, 0x71, 0x87, 0xfa, 0x52, 0xc5, 0xd7, 0xf2, 0x70, 0xc3, 0xee, - 0x77, 0xa6, 0xdd, 0x0e, 0x1f, 0x3a, 0x82, 0x3f, 0xe8, 0x50, 0xce, 0x47, 0xcc, 0x96, 0xf2, 0x3b, - 0xd3, 0x9b, 0x74, 0xc4, 0x07, 0x74, 0x46, 0x9a, 0xf1, 0xe7, 0x32, 0xac, 0x3d, 0xa1, 0x2e, 0x3b, - 0xc2, 0x20, 0xb4, 0xf0, 0xe5, 0x04, 0x83, 0x90, 0x3c, 0x87, 0x9a, 0xf0, 0x43, 0xd7, 0x36, 0xb5, - 0xad, 0x46, 0xf7, 0x91, 0x99, 0x29, 0x34, 0x13, 0x85, 0xf2, 0xf0, 0xc2, 0xee, 0x9b, 0xd3, 0xae, - 0xc9, 0x87, 0x8e, 0x29, 0x14, 0x9a, 0x8a, 0x42, 0x33, 0x51, 0x68, 0x5a, 0x69, 0x44, 0x2c, 0x29, - 0x95, 0xb4, 0x60, 0xc5, 0xc7, 0x29, 0x0b, 0x98, 0xe7, 0xea, 0x95, 0x4d, 0x6d, 0xab, 0x6e, 0xa5, - 0x77, 0xa2, 0xc3, 0xb2, 0xeb, 0x6d, 0x53, 0x7b, 0x80, 0x7a, 0x75, 0x53, 0xdb, 0x5a, 0xb1, 0x92, - 0x2b, 0xd9, 0x84, 0x06, 0xe5, 0xfc, 0x31, 0x3d, 0xc4, 0xd1, 0x2e, 0x1e, 0xeb, 0x35, 0xc9, 0xa8, - 0x82, 0x04, 0x2f, 0xe5, 0xfc, 0x29, 0x1d, 0xa3, 0xbe, 0x28, 0xb1, 0xc9, 0x95, 0x6c, 0x40, 0xdd, - 0xa5, 0x63, 0x0c, 0x38, 0xb5, 0x51, 0x5f, 0x91, 0xb8, 0x0c, 0x40, 0xbe, 0x85, 0x75, 0xc5, 0xf0, - 0x03, 0x6f, 0xe2, 0xdb, 0xa8, 0x83, 0x74, 0x7d, 0x6f, 0x3e, 0xd7, 0x7b, 0x45, 0xb1, 0xd6, 0xac, - 0x26, 0xf2, 0x15, 0x2c, 0xca, 0xa4, 0xd1, 0x1b, 0x9b, 0xd5, 0x37, 0x1a, 0xed, 0x48, 0x2c, 0x71, - 0x61, 0x99, 0x8f, 0x26, 0x0e, 0x73, 0x03, 0xfd, 0x9c, 0xd4, 0xf0, 0x6c, 0x3e, 0x0d, 0xdb, 0x9e, - 0x7b, 0xc4, 0x9c, 0x27, 0xd4, 0xa5, 0x0e, 0x8e, 0xd1, 0x0d, 0xf7, 0xa5, 0x70, 0x2b, 0x51, 0x42, - 0x5e, 0x41, 0x73, 0x38, 0x09, 0x42, 0x6f, 0xcc, 0x5e, 0xe1, 0x1e, 0x97, 0xc9, 0xad, 0x9f, 0x97, - 0xd1, 0x7c, 0x3a, 0x9f, 0xe2, 0xdd, 0x82, 0x54, 0x6b, 0x46, 0x8f, 0x48, 0x92, 0xe1, 0xe4, 0x10, - 0x3f, 0x47, 0x5f, 0x66, 0xd7, 0x6a, 0x94, 0x24, 0x0a, 0x28, 0x4a, 0x23, 0x16, 0xdf, 0x02, 0x7d, - 0x6d, 0xb3, 0x1a, 0xa5, 0x51, 0x0a, 0x22, 0x5b, 0xb0, 0x36, 0x45, 0x9f, 0x1d, 0x1d, 0x1f, 0x30, - 0xc7, 0xa5, 0xe1, 0xc4, 0x47, 0xbd, 0x29, 0x53, 0xb1, 0x08, 0x26, 0x63, 0x38, 0x3f, 0xc0, 0xd1, - 0x58, 0x84, 0x7c, 0xdb, 0xc7, 0x7e, 0xa0, 0xaf, 0xcb, 0xf8, 0xee, 0xcc, 0xff, 0x82, 0x52, 0x9c, - 0x95, 0x97, 0x2e, 0x0c, 0x73, 0x3d, 0x2b, 0xae, 0x94, 0xa8, 0x46, 0x48, 0x64, 0x58, 0x01, 0x6c, - 0x4c, 0xe0, 0xd2, 0x33, 0x59, 0xce, 0x69, 0x2e, 0x9c, 0x45, 0x61, 0x1b, 0x8f, 0xe0, 0x72, 0x51, - 0x6d, 0xc0, 0x3d, 0x37, 0x40, 0x62, 0x02, 0x91, 0xc1, 0x63, 0xd8, 0xcf, 0xb0, 0xd2, 0x8a, 0x15, - 0xab, 0x04, 0x63, 0xfc, 0xaa, 0x41, 0x33, 0x6b, 0x4a, 0xb1, 0x90, 0x0d, 0xa8, 0x8f, 0x63, 0x58, - 0xa0, 0x6b, 0xf2, 0xe1, 0x32, 0x40, 0xbe, 0xc6, 0x2b, 0xc5, 0x1a, 0xbf, 0x0c, 0x4b, 0x51, 0xf7, - 0x96, 0x6d, 0xa5, 0x6e, 0xc5, 0xb7, 0x5c, 0x2f, 0xaa, 0x15, 0x7a, 0x51, 0x1b, 0x20, 0x90, 0x25, - 0xfa, 0xec, 0x98, 0xa3, 0xbe, 0x24, 0xb1, 0x0a, 0x84, 0x18, 0x70, 0x2e, 0xca, 0x08, 0x0b, 0x83, - 0xc9, 0x28, 0xd4, 0x97, 0x25, 0x45, 0x0e, 0x66, 0x78, 0xb0, 0xf6, 0x98, 0x09, 0x1f, 0x8e, 0x82, - 0xb3, 0x79, 0x83, 0x0f, 0xa1, 0x26, 0x94, 0x09, 0xc7, 0x0e, 0x7d, 0xea, 0xda, 0x03, 0x4c, 0x62, - 0x95, 0xde, 0x09, 0x81, 0x5a, 0x48, 0x9d, 0x40, 0xaf, 0x48, 0xb8, 0x3c, 0x1b, 0x3f, 0x68, 0x91, - 0xa5, 0x3d, 0xce, 0x83, 0x77, 0x3e, 0x06, 0x8c, 0x09, 0x2c, 0xf7, 0x38, 0x17, 0xf6, 0x90, 0x9b, - 0x50, 0xa3, 0x9c, 0x47, 0x4e, 0x34, 0xba, 0x57, 0x4c, 0x65, 0xe4, 0xc6, 0x24, 0xe2, 0x7f, 0xf0, - 0xc0, 0x0d, 0x85, 0x64, 0x41, 0xda, 0xfa, 0x08, 0xea, 0x29, 0x88, 0x34, 0xa1, 0x3a, 0xc4, 0x28, - 0xd7, 0xea, 0x96, 0x38, 0x92, 0x8b, 0xb0, 0x38, 0xa5, 0xa3, 0x49, 0x92, 0x25, 0xd1, 0xe5, 0x6e, - 0xe5, 0x8e, 0x66, 0xfc, 0x5d, 0x85, 0xff, 0x0a, 0x3b, 0x0f, 0x64, 0x72, 0xf4, 0x38, 0xbf, 0x8f, - 0x21, 0x65, 0xa3, 0xe0, 0xd3, 0x09, 0xfa, 0xc7, 0x6f, 0x39, 0x1c, 0x0e, 0x2c, 0x45, 0xb9, 0x25, - 0xcd, 0x7a, 0x0b, 0xa3, 0x27, 0x16, 0x9f, 0xcd, 0x9b, 0xea, 0xdb, 0x99, 0x37, 0x65, 0xfd, 0xbf, - 0x76, 0x46, 0xfd, 0xff, 0xe4, 0x15, 0x40, 0x59, 0x2c, 0x96, 0x72, 0x8b, 0x85, 0xf1, 0x7d, 0x05, - 0x2e, 0x0b, 0x2f, 0xb2, 0xe7, 0x4e, 0x3b, 0x8e, 0x28, 0x14, 0x51, 0xfb, 0x51, 0xf2, 0xc8, 0x33, - 0xb9, 0x0d, 0xcb, 0xc3, 0xc0, 0x73, 0x5d, 0x0c, 0xe3, 0x87, 0x6a, 0xa9, 0x29, 0xb9, 0x1b, 0xa1, - 0x7a, 0x9c, 0x1f, 0x70, 0xb4, 0xad, 0x84, 0x94, 0x5c, 0x87, 0x9a, 0x68, 0xe6, 0xb2, 0xfb, 0x34, - 0xba, 0xff, 0x51, 0x59, 0x1e, 0xe1, 0x68, 0x9c, 0xd0, 0x4b, 0x22, 0x72, 0x17, 0xea, 0xa9, 0x67, - 0x71, 0xe8, 0x36, 0x72, 0x4a, 0x12, 0x64, 0xc2, 0x96, 0x91, 0x0b, 0xde, 0x3e, 0xf3, 0xd1, 0x96, - 0x0d, 0x76, 0x71, 0x96, 0xf7, 0x7e, 0x82, 0x4c, 0x79, 0x53, 0x72, 0xe3, 0x17, 0x0d, 0xae, 0x66, - 0xe9, 0x9f, 0x8c, 0x94, 0x27, 0x18, 0xd2, 0x3e, 0x0d, 0xe9, 0xbb, 0x5f, 0x0e, 0xaf, 0xc1, 0xaa, - 0x3d, 0x40, 0x7b, 0x98, 0x0d, 0xe6, 0x68, 0x47, 0x2c, 0x40, 0x8d, 0xdf, 0x2a, 0xb0, 0x9a, 0x7f, - 0x08, 0xf1, 0x92, 0x62, 0x18, 0x24, 0x2f, 0x29, 0xce, 0x64, 0x1f, 0xce, 0xa1, 0x3b, 0x65, 0xbe, - 0xe7, 0x8a, 0x35, 0x26, 0xa9, 0x87, 0x0f, 0x4e, 0x7e, 0x4e, 0xf3, 0x81, 0x42, 0x1e, 0x35, 0x9c, - 0x9c, 0x04, 0xe2, 0x02, 0x70, 0xea, 0xd3, 0x31, 0x86, 0xe8, 0x8b, 0xa4, 0xaf, 0xbe, 0x81, 0xa4, - 0x8f, 0x2c, 0xd8, 0x4f, 0xc4, 0x5a, 0x8a, 0x86, 0xd6, 0x0b, 0x58, 0x9f, 0x31, 0xa9, 0xa4, 0xe1, - 0xdd, 0x56, 0x1b, 0x5e, 0xa3, 0xdb, 0x2e, 0xf1, 0x50, 0x11, 0xa3, 0x36, 0xc4, 0x9f, 0x2b, 0xd0, - 0x50, 0xf2, 0xb3, 0x34, 0x8c, 0x6d, 0x00, 0xc9, 0xf0, 0x90, 0x8d, 0x30, 0x0a, 0x62, 0xdd, 0x52, - 0x20, 0x64, 0x58, 0x12, 0x94, 0xdd, 0xf9, 0x82, 0x22, 0x4c, 0x2a, 0x8d, 0x88, 0x98, 0xf3, 0x52, - 0x75, 0x10, 0xd7, 0x7f, 0x7c, 0x23, 0xdf, 0xc0, 0xea, 0x11, 0x1b, 0xe1, 0x7e, 0x66, 0xc8, 0x92, - 0x34, 0x64, 0x6f, 0x7e, 0x43, 0x1e, 0xaa, 0x72, 0xad, 0x82, 0x1a, 0xe3, 0x7d, 0x68, 0x16, 0xcb, - 0x55, 0x18, 0xc9, 0xc6, 0xd4, 0x49, 0xa3, 0x15, 0xdf, 0x8c, 0x1f, 0x35, 0x20, 0xb3, 0xef, 0x71, - 0x52, 0xd0, 0x87, 0x77, 0x82, 0x64, 0xcf, 0x8d, 0x0a, 0x45, 0x81, 0x90, 0x5d, 0x68, 0xf4, 0x31, - 0x08, 0x99, 0x2b, 0x0d, 0x8e, 0x9b, 0xc8, 0x7b, 0xa7, 0x3f, 0xfc, 0xfd, 0x8c, 0xc1, 0x52, 0xb9, - 0x8d, 0xcf, 0xe0, 0xca, 0xa9, 0xd4, 0xca, 0x76, 0xa5, 0xe5, 0xb6, 0xab, 0x53, 0x77, 0x32, 0x83, - 0x40, 0xb3, 0xd8, 0x8d, 0x8c, 0x97, 0xb0, 0x2e, 0x62, 0xba, 0x3d, 0xa0, 0x7e, 0x78, 0x46, 0x1b, - 0xd3, 0x3d, 0xa8, 0xa7, 0x2a, 0x4b, 0x63, 0xdd, 0x82, 0x95, 0x69, 0xf2, 0xbd, 0x10, 0xad, 0x4c, - 0xe9, 0xdd, 0xe8, 0x01, 0x51, 0xed, 0x8d, 0xe7, 0xc6, 0x75, 0x58, 0x64, 0x21, 0x8e, 0x93, 0xa5, - 0xe5, 0x52, 0xb1, 0xdd, 0x4b, 0x72, 0x2b, 0xa2, 0xe9, 0x7e, 0xb7, 0x08, 0xeb, 0x59, 0xd7, 0x15, - 0x7f, 0x99, 0x8d, 0x64, 0x0f, 0x9a, 0x3b, 0xf1, 0x97, 0x7a, 0xb2, 0x08, 0x93, 0xff, 0xa9, 0x72, - 0x0a, 0xdf, 0xec, 0xad, 0x8d, 0x72, 0x64, 0x64, 0x91, 0xb1, 0x40, 0xbe, 0x80, 0xd5, 0xfc, 0x72, - 0x4e, 0xae, 0xaa, 0x1c, 0xa5, 0xdf, 0x0b, 0x2d, 0xe3, 0x34, 0x92, 0x54, 0xf4, 0x3d, 0x58, 0x49, - 0x96, 0xdc, 0xbc, 0x8d, 0x85, 0xd5, 0xb7, 0xd5, 0x54, 0x91, 0x02, 0x61, 0x2c, 0x90, 0x8f, 0x23, - 0x66, 0xb1, 0xb0, 0xcd, 0x32, 0x2b, 0xdb, 0x68, 0xeb, 0x42, 0xc9, 0xea, 0x67, 0x2c, 0x90, 0xe7, - 0x70, 0x7e, 0x47, 0x76, 0xe8, 0x78, 0x78, 0x93, 0xff, 0xe7, 0x95, 0x9c, 0xb0, 0xcd, 0xe5, 0x5d, - 0x2b, 0x9f, 0xff, 0xc6, 0x02, 0xf9, 0x49, 0x83, 0x0b, 0x3b, 0x18, 0x16, 0x67, 0x21, 0xb9, 0x51, - 0xae, 0xe4, 0x84, 0x99, 0xd9, 0x7a, 0x3a, 0x6f, 0xce, 0xe6, 0xc5, 0x1a, 0x0b, 0x64, 0x5f, 0xba, - 0x9d, 0xe5, 0x1e, 0xb9, 0x52, 0x9a, 0x64, 0x69, 0xf4, 0xda, 0x27, 0xa1, 0x13, 0x57, 0x3f, 0xe9, - 0xfd, 0xfe, 0xba, 0xad, 0xfd, 0xf1, 0xba, 0xad, 0xfd, 0xf5, 0xba, 0xad, 0x7d, 0x79, 0xeb, 0x5f, - 0x7e, 0x64, 0x52, 0x7e, 0x0f, 0xa3, 0x9c, 0xd9, 0x23, 0x86, 0x6e, 0x78, 0xb8, 0x24, 0x7f, 0x52, - 0xba, 0xf5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x7e, 0x8e, 0xd3, 0x2e, 0x13, 0x00, 0x00, + // 1412 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0xcd, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0xc6, 0xce, 0x87, 0x9f, 0xdb, 0xc4, 0x99, 0x7e, 0xb0, 0x98, 0xd4, 0x4a, 0x57, 0xa2, + 0x0a, 0x94, 0xae, 0x55, 0xb7, 0x82, 0xaa, 0x95, 0x90, 0x4c, 0xda, 0xa6, 0x52, 0x9a, 0x26, 0x6c, + 0x0a, 0x12, 0xa8, 0xa2, 0x9a, 0xac, 0x5f, 0xd6, 0x83, 0xed, 0xdd, 0xe9, 0xee, 0xda, 0x28, 0x95, + 0x38, 0x22, 0x0e, 0x9c, 0xe1, 0xdf, 0xe1, 0xc4, 0xc7, 0x91, 0x3f, 0x01, 0xf5, 0x4f, 0xe0, 0xc6, + 0x0d, 0xcd, 0xec, 0xd7, 0xec, 0x7a, 0x13, 0x0e, 0x6e, 0xd3, 0x4b, 0x32, 0xf3, 0xbe, 0xe7, 0xcd, + 0x6f, 0xde, 0x7b, 0x6b, 0xb8, 0xe6, 0x23, 0xf7, 0x02, 0xf4, 0x27, 0xe8, 0xb7, 0xe5, 0x92, 0x85, + 0x9e, 0x7f, 0xac, 0x2c, 0x4d, 0xee, 0x7b, 0xa1, 0x47, 0x20, 0xa3, 0x34, 0x2f, 0x3a, 0x9e, 0xe3, + 0x49, 0x72, 0x5b, 0xac, 0x22, 0x89, 0xe6, 0xba, 0xe3, 0x79, 0xce, 0x10, 0xdb, 0x94, 0xb3, 0x36, + 0x75, 0x5d, 0x2f, 0xa4, 0x21, 0xf3, 0xdc, 0x20, 0xe6, 0x1a, 0x83, 0x3b, 0x81, 0xc9, 0x3c, 0xc9, + 0xb5, 0x3d, 0x1f, 0xdb, 0x93, 0x9b, 0x6d, 0x07, 0x5d, 0xf4, 0x69, 0x88, 0xbd, 0x58, 0xe6, 0xb1, + 0xc3, 0xc2, 0xfe, 0xf8, 0xd0, 0xb4, 0xbd, 0x51, 0x9b, 0xfa, 0xd2, 0xc5, 0xb7, 0x72, 0x71, 0xc3, + 0xee, 0xb5, 0x27, 0x9d, 0x36, 0x1f, 0x38, 0x42, 0x3f, 0x68, 0x53, 0xce, 0x87, 0xcc, 0x96, 0xf6, + 0xdb, 0x93, 0x9b, 0x74, 0xc8, 0xfb, 0x74, 0xca, 0x9a, 0xf1, 0xef, 0x12, 0xac, 0xee, 0x52, 0x97, + 0x1d, 0x61, 0x10, 0x5a, 0xf8, 0x62, 0x8c, 0x41, 0x48, 0x9e, 0x41, 0x55, 0x9c, 0x43, 0xd7, 0x36, + 0xb4, 0xcd, 0x7a, 0xe7, 0x91, 0x99, 0x39, 0x34, 0x13, 0x87, 0x72, 0xf1, 0xdc, 0xee, 0x99, 0x93, + 0x8e, 0xc9, 0x07, 0x8e, 0x29, 0x1c, 0x9a, 0x8a, 0x43, 0x33, 0x71, 0x68, 0x5a, 0x69, 0x46, 0x2c, + 0x69, 0x95, 0x34, 0x61, 0xd9, 0xc7, 0x09, 0x0b, 0x98, 0xe7, 0xea, 0xf3, 0x1b, 0xda, 0x66, 0xcd, + 0x4a, 0xf7, 0x44, 0x87, 0x25, 0xd7, 0xdb, 0xa2, 0x76, 0x1f, 0xf5, 0xca, 0x86, 0xb6, 0xb9, 0x6c, + 0x25, 0x5b, 0xb2, 0x01, 0x75, 0xca, 0xf9, 0x63, 0x7a, 0x88, 0xc3, 0x1d, 0x3c, 0xd6, 0xab, 0x52, + 0x51, 0x25, 0x09, 0x5d, 0xca, 0xf9, 0x13, 0x3a, 0x42, 0x7d, 0x41, 0x72, 0x93, 0x2d, 0x59, 0x87, + 0x9a, 0x4b, 0x47, 0x18, 0x70, 0x6a, 0xa3, 0xbe, 0x2c, 0x79, 0x19, 0x81, 0x7c, 0x0f, 0x6b, 0x4a, + 0xe0, 0x07, 0xde, 0xd8, 0xb7, 0x51, 0x07, 0x79, 0xf4, 0xbd, 0xd9, 0x8e, 0xde, 0x2d, 0x9a, 0xb5, + 0xa6, 0x3d, 0x91, 0x6f, 0x60, 0x41, 0x82, 0x46, 0xaf, 0x6f, 0x54, 0x5e, 0x6b, 0xb6, 0x23, 0xb3, + 0xc4, 0x85, 0x25, 0x3e, 0x1c, 0x3b, 0xcc, 0x0d, 0xf4, 0x73, 0xd2, 0xc3, 0xd3, 0xd9, 0x3c, 0x6c, + 0x79, 0xee, 0x11, 0x73, 0x76, 0xa9, 0x4b, 0x1d, 0x1c, 0xa1, 0x1b, 0xee, 0x4b, 0xe3, 0x56, 0xe2, + 0x84, 0xbc, 0x84, 0xc6, 0x60, 0x1c, 0x84, 0xde, 0x88, 0xbd, 0xc4, 0x3d, 0x2e, 0xc1, 0xad, 0x9f, + 0x97, 0xd9, 0x7c, 0x32, 0x9b, 0xe3, 0x9d, 0x82, 0x55, 0x6b, 0xca, 0x8f, 0x00, 0xc9, 0x60, 0x7c, + 0x88, 0x5f, 0xa2, 0x2f, 0xd1, 0xb5, 0x12, 0x81, 0x44, 0x21, 0x45, 0x30, 0x62, 0xf1, 0x2e, 0xd0, + 0x57, 0x37, 0x2a, 0x11, 0x8c, 0x52, 0x12, 0xd9, 0x84, 0xd5, 0x09, 0xfa, 0xec, 0xe8, 0xf8, 0x80, + 0x39, 0x2e, 0x0d, 0xc7, 0x3e, 0xea, 0x0d, 0x09, 0xc5, 0x22, 0x99, 0x8c, 0xe0, 0x7c, 0x1f, 0x87, + 0x23, 0x91, 0xf2, 0x2d, 0x1f, 0x7b, 0x81, 0xbe, 0x26, 0xf3, 0xbb, 0x3d, 0xfb, 0x0d, 0x4a, 0x73, + 0x56, 0xde, 0xba, 0x08, 0xcc, 0xf5, 0xac, 0xf8, 0xa5, 0x44, 0x6f, 0x84, 0x44, 0x81, 0x15, 0xc8, + 0xe4, 0x1a, 0xac, 0x84, 0x3e, 0xb5, 0x07, 0xcc, 0x75, 0x76, 0x31, 0xec, 0x7b, 0x3d, 0xfd, 0x82, + 0xcc, 0x44, 0x81, 0x6a, 0x8c, 0xe1, 0xd2, 0x53, 0xf9, 0xec, 0x53, 0xcc, 0x9c, 0x45, 0x01, 0x30, + 0x1e, 0xc1, 0xe5, 0xa2, 0xdb, 0x80, 0x7b, 0x6e, 0x80, 0xc4, 0x04, 0x22, 0x93, 0xcc, 0xb0, 0x97, + 0x71, 0x65, 0x14, 0xcb, 0x56, 0x09, 0xc7, 0xf8, 0x5d, 0x83, 0x46, 0x56, 0xbc, 0x62, 0x23, 0xeb, + 0x50, 0x1b, 0xc5, 0xb4, 0x40, 0xd7, 0xe4, 0x05, 0x67, 0x84, 0x7c, 0x2d, 0x98, 0x2f, 0xd6, 0x82, + 0xcb, 0xb0, 0x18, 0x55, 0x79, 0x59, 0x7e, 0x6a, 0x56, 0xbc, 0xcb, 0xd5, 0xac, 0x6a, 0xa1, 0x66, + 0xb5, 0x00, 0x02, 0xf9, 0x94, 0x9f, 0x1e, 0x73, 0xd4, 0x17, 0x25, 0x57, 0xa1, 0x10, 0x03, 0xce, + 0x45, 0xc8, 0xb1, 0x30, 0x18, 0x0f, 0x43, 0x7d, 0x49, 0x4a, 0xe4, 0x68, 0x86, 0x07, 0xab, 0x8f, + 0x99, 0x38, 0xc3, 0x51, 0x70, 0x36, 0x77, 0xf0, 0x31, 0x54, 0x85, 0x33, 0x71, 0xb0, 0x43, 0x9f, + 0xba, 0x76, 0x1f, 0x93, 0x5c, 0xa5, 0x7b, 0x42, 0xa0, 0x1a, 0x52, 0x27, 0xd0, 0xe7, 0x25, 0x5d, + 0xae, 0x8d, 0x9f, 0xb4, 0x28, 0xd2, 0x2e, 0xe7, 0xc1, 0x5b, 0x6f, 0x17, 0xc6, 0x18, 0x96, 0xba, + 0x9c, 0x8b, 0x78, 0xc8, 0x4d, 0xa8, 0x52, 0xce, 0xa3, 0x43, 0xd4, 0x3b, 0x57, 0x4c, 0xa5, 0x35, + 0xc7, 0x22, 0xe2, 0x7f, 0xf0, 0xc0, 0x0d, 0x85, 0x65, 0x21, 0xda, 0xfc, 0x04, 0x6a, 0x29, 0x89, + 0x34, 0xa0, 0x32, 0xc0, 0x08, 0x6b, 0x35, 0x4b, 0x2c, 0xc9, 0x45, 0x58, 0x98, 0xd0, 0xe1, 0x38, + 0x41, 0x49, 0xb4, 0xb9, 0x3b, 0x7f, 0x47, 0x33, 0xfe, 0xa9, 0xc0, 0xbb, 0x22, 0xce, 0x03, 0x09, + 0x8e, 0x2e, 0xe7, 0xf7, 0x31, 0xa4, 0x6c, 0x18, 0x7c, 0x3e, 0x46, 0xff, 0xf8, 0x0d, 0xa7, 0xc3, + 0x81, 0xc5, 0x08, 0x5b, 0x32, 0xac, 0x37, 0xd0, 0xa2, 0x62, 0xf3, 0x59, 0x5f, 0xaa, 0xbc, 0x99, + 0xbe, 0x54, 0xd6, 0x27, 0xaa, 0x67, 0xd4, 0x27, 0x4e, 0x1e, 0x15, 0x94, 0x01, 0x64, 0x31, 0x37, + 0x80, 0x18, 0x3f, 0xce, 0xc3, 0x65, 0x71, 0x8a, 0xec, 0xba, 0xd3, 0x8a, 0x23, 0x1e, 0x8a, 0x78, + 0xfb, 0x11, 0x78, 0xe4, 0x9a, 0xdc, 0x86, 0xa5, 0x41, 0xe0, 0xb9, 0x2e, 0x86, 0xf1, 0x45, 0x35, + 0x55, 0x48, 0xee, 0x44, 0xac, 0x2e, 0xe7, 0x07, 0x1c, 0x6d, 0x2b, 0x11, 0x25, 0xd7, 0xa1, 0x2a, + 0x8a, 0xbe, 0xac, 0x3e, 0xf5, 0xce, 0x3b, 0xaa, 0xca, 0x23, 0x1c, 0x8e, 0x12, 0x79, 0x29, 0x44, + 0xee, 0x42, 0x2d, 0x3d, 0x59, 0x9c, 0xba, 0xf5, 0x9c, 0x93, 0x84, 0x99, 0xa8, 0x65, 0xe2, 0x42, + 0xb7, 0xc7, 0x7c, 0xb4, 0x65, 0x81, 0x5d, 0x98, 0xd6, 0xbd, 0x9f, 0x30, 0x53, 0xdd, 0x54, 0xdc, + 0xf8, 0x4d, 0x83, 0xab, 0x19, 0xfc, 0x93, 0xd6, 0xb3, 0x8b, 0x21, 0xed, 0xd1, 0x90, 0xbe, 0xfd, + 0x21, 0xf2, 0x1a, 0xac, 0xd8, 0x7d, 0xb4, 0x07, 0x59, 0x03, 0x8f, 0x66, 0xc9, 0x02, 0xd5, 0xf8, + 0x63, 0x1e, 0x56, 0xf2, 0x17, 0x21, 0x6e, 0x52, 0x34, 0x83, 0xe4, 0x26, 0xc5, 0x9a, 0xec, 0xc3, + 0x39, 0x74, 0x27, 0xcc, 0xf7, 0x5c, 0x31, 0xee, 0x24, 0xef, 0xe1, 0xa3, 0x93, 0xaf, 0xd3, 0x7c, + 0xa0, 0x88, 0x47, 0x05, 0x27, 0x67, 0x81, 0xb8, 0x00, 0x9c, 0xfa, 0x74, 0x84, 0x21, 0xfa, 0x02, + 0xf4, 0x95, 0xd7, 0x00, 0xfa, 0x28, 0x82, 0xfd, 0xc4, 0xac, 0xa5, 0x78, 0x68, 0x3e, 0x87, 0xb5, + 0xa9, 0x90, 0x4a, 0x0a, 0xde, 0x6d, 0xb5, 0xe0, 0xd5, 0x3b, 0xad, 0x92, 0x13, 0x2a, 0x66, 0xd4, + 0x82, 0xf8, 0xeb, 0x3c, 0xd4, 0x15, 0x7c, 0x96, 0xa6, 0xb1, 0x05, 0x20, 0x15, 0x1e, 0xb2, 0x21, + 0x46, 0x49, 0xac, 0x59, 0x0a, 0x85, 0x0c, 0x4a, 0x92, 0xb2, 0x33, 0x5b, 0x52, 0x44, 0x48, 0xa5, + 0x19, 0x11, 0x7d, 0x5e, 0xba, 0x0e, 0xe2, 0xf7, 0x1f, 0xef, 0xc8, 0x77, 0xb0, 0x72, 0xc4, 0x86, + 0xb8, 0x9f, 0x05, 0xb2, 0x28, 0x03, 0xd9, 0x9b, 0x3d, 0x90, 0x87, 0xaa, 0x5d, 0xab, 0xe0, 0xc6, + 0xf8, 0x10, 0x1a, 0xc5, 0xe7, 0x2a, 0x82, 0x64, 0x23, 0xea, 0xa4, 0xd9, 0x8a, 0x77, 0xc6, 0xcf, + 0x1a, 0x90, 0xe9, 0xfb, 0x38, 0x29, 0xe9, 0x83, 0x3b, 0x41, 0x32, 0x0f, 0x47, 0x0f, 0x45, 0xa1, + 0x90, 0x1d, 0xa8, 0xf7, 0x30, 0x08, 0x99, 0x2b, 0x03, 0x8e, 0x8b, 0xc8, 0x07, 0xa7, 0x5f, 0xfc, + 0xfd, 0x4c, 0xc1, 0x52, 0xb5, 0x8d, 0x2f, 0xe0, 0xca, 0xa9, 0xd2, 0xca, 0x74, 0xa5, 0xe5, 0xa6, + 0xab, 0x53, 0x67, 0x32, 0x83, 0x40, 0xa3, 0x58, 0x8d, 0x8c, 0x17, 0xb0, 0x26, 0x72, 0xba, 0xd5, + 0xa7, 0x7e, 0x78, 0x46, 0x13, 0xd3, 0x3d, 0xa8, 0xa5, 0x2e, 0x4b, 0x73, 0xdd, 0x84, 0xe5, 0x49, + 0xf2, 0x5d, 0x11, 0x8d, 0x4c, 0xe9, 0xde, 0xe8, 0x02, 0x51, 0xe3, 0x8d, 0xfb, 0xc6, 0x75, 0x58, + 0x60, 0x21, 0x8e, 0x92, 0xa1, 0xe5, 0x52, 0xb1, 0xdc, 0x4b, 0x71, 0x2b, 0x92, 0xe9, 0xfc, 0xb0, + 0x00, 0x6b, 0x59, 0xd5, 0x15, 0x7f, 0x99, 0x8d, 0x64, 0x0f, 0x1a, 0xdb, 0xf1, 0x17, 0x7d, 0x32, + 0x08, 0x93, 0xf7, 0x54, 0x3b, 0x85, 0x6f, 0xfb, 0xe6, 0x7a, 0x39, 0x33, 0x8a, 0xc8, 0x98, 0x23, + 0x5f, 0xc1, 0x4a, 0x7e, 0x38, 0x27, 0x57, 0x55, 0x8d, 0xd2, 0xef, 0x85, 0xa6, 0x71, 0x9a, 0x48, + 0x6a, 0xfa, 0x1e, 0x2c, 0x27, 0x43, 0x6e, 0x3e, 0xc6, 0xc2, 0xe8, 0xdb, 0x6c, 0xa8, 0x4c, 0xc1, + 0x30, 0xe6, 0xc8, 0xa7, 0x91, 0xb2, 0x18, 0xd8, 0xa6, 0x95, 0x95, 0x69, 0xb4, 0x79, 0xa1, 0x64, + 0xf4, 0x33, 0xe6, 0xc8, 0x33, 0x38, 0xbf, 0x2d, 0x2b, 0x74, 0xdc, 0xbc, 0xc9, 0xfb, 0x79, 0x27, + 0x27, 0x4c, 0x73, 0xf9, 0xa3, 0x95, 0xf7, 0x7f, 0x63, 0x8e, 0xfc, 0xa2, 0xc1, 0x85, 0x6d, 0x0c, + 0x8b, 0xbd, 0x90, 0xdc, 0x28, 0x77, 0x72, 0x42, 0xcf, 0x6c, 0x3e, 0x99, 0x15, 0xb3, 0x79, 0xb3, + 0xc6, 0x1c, 0xd9, 0x97, 0xc7, 0xce, 0xb0, 0x47, 0xae, 0x94, 0x82, 0x2c, 0xcd, 0x5e, 0xeb, 0x24, + 0x76, 0x72, 0xd4, 0xcf, 0xba, 0x7f, 0xbe, 0x6a, 0x69, 0x7f, 0xbd, 0x6a, 0x69, 0x7f, 0xbf, 0x6a, + 0x69, 0x5f, 0xdf, 0xfa, 0x9f, 0x1f, 0xa3, 0x94, 0xdf, 0xcd, 0x28, 0x67, 0xf6, 0x90, 0xa1, 0x1b, + 0x1e, 0x2e, 0xca, 0x9f, 0x9e, 0x6e, 0xfd, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x13, 0xe9, 0x48, + 0x56, 0x13, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1783,6 +1793,15 @@ func (m *ManifestRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.TrackingMethod) > 0 { + i -= len(m.TrackingMethod) + copy(dAtA[i:], m.TrackingMethod) + i = encodeVarintRepository(dAtA, i, uint64(len(m.TrackingMethod))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } if m.NoRevisionCache { i-- if m.NoRevisionCache { @@ -3013,6 +3032,10 @@ func (m *ManifestRequest) Size() (n int) { if m.NoRevisionCache { n += 3 } + l = len(m.TrackingMethod) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3960,6 +3983,38 @@ func (m *ManifestRequest) Unmarshal(dAtA []byte) error { } } m.NoRevisionCache = bool(v != 0) + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrackingMethod", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TrackingMethod = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRepository(dAtA[iNdEx:]) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 54f6fb7dad0be..3c7e03570892a 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -770,9 +770,16 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - err = argokube.SetAppInstanceLabel(target, q.AppLabelKey, q.AppName) - if err != nil { - return nil, err + if q.TrackingMethod == "annotation" { + err = argokube.SetAppInstanceAnnotation(target, q.AppLabelKey, q.AppName) + if err != nil { + return nil, err + } + } else { + err = argokube.SetAppInstanceLabel(target, q.AppLabelKey, q.AppName) + if err != nil { + return nil, err + } } } manifestStr, err := json.Marshal(target.Object) diff --git a/reposerver/repository/repository.proto b/reposerver/repository/repository.proto index ff98ccb68d05b..fd521b814bb66 100644 --- a/reposerver/repository/repository.proto +++ b/reposerver/repository/repository.proto @@ -28,6 +28,7 @@ message ManifestRequest { bool verifySignature = 16; repeated github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.RepoCreds helmRepoCreds = 17; bool noRevisionCache = 18; + string trackingMethod = 19; } // TestRepositoryRequest is a query to test repository is valid or not and has valid access. diff --git a/server/application/application.go b/server/application/application.go index 53d6a27acaf2f..64fe1fcb41094 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -848,7 +848,7 @@ func (s *Server) validateAndNormalizeApp(ctx context.Context, app *appv1.Applica var conditions []appv1.ApplicationCondition if validate { - conditions, err = argo.ValidateRepo(ctx, app, s.repoClientset, s.db, kustomizeOptions, plugins, s.kubectl, proj) + conditions, err = argo.ValidateRepo(ctx, app, s.repoClientset, s.db, kustomizeOptions, plugins, s.kubectl, proj, "annotation") if err != nil { return err } diff --git a/util/argo/argo.go b/util/argo/argo.go index 0f60fb99dd033..f443c1a8efc0f 100644 --- a/util/argo/argo.go +++ b/util/argo/argo.go @@ -180,6 +180,7 @@ func ValidateRepo( plugins []*argoappv1.ConfigManagementPlugin, kubectl kube.Kubectl, proj *argoappv1.AppProject, + trackingMethod string, ) ([]argoappv1.ApplicationCondition, error) { spec := &app.Spec conditions := make([]argoappv1.ApplicationCondition, 0) @@ -269,7 +270,7 @@ func ValidateRepo( return nil, err } conditions = append(conditions, verifyGenerateManifests( - ctx, repo, permittedHelmRepos, app, repoClient, kustomizeOptions, plugins, cluster.ServerVersion, APIGroupsToVersions(apiGroups), permittedHelmCredentials)...) + ctx, repo, permittedHelmRepos, app, repoClient, kustomizeOptions, plugins, cluster.ServerVersion, APIGroupsToVersions(apiGroups), permittedHelmCredentials, trackingMethod)...) return conditions, nil } @@ -465,6 +466,7 @@ func verifyGenerateManifests( kubeVersion string, apiVersions []string, repositoryCredentials []*argoappv1.RepoCreds, + trackingMethod string, ) []argoappv1.ApplicationCondition { spec := &app.Spec var conditions []argoappv1.ApplicationCondition @@ -492,6 +494,7 @@ func verifyGenerateManifests( KubeVersion: kubeVersion, ApiVersions: apiVersions, HelmRepoCreds: repositoryCredentials, + TrackingMethod: trackingMethod, } req.Repo.CopyCredentialsFromRepo(repoRes) req.Repo.CopySettingsFrom(repoRes) diff --git a/util/kube/kube.go b/util/kube/kube.go index 7b73eeafba812..b8b09bc6cdd04 100644 --- a/util/kube/kube.go +++ b/util/kube/kube.go @@ -92,3 +92,19 @@ func SetAppInstanceLabel(target *unstructured.Unstructured, key, val string) err } return nil } + +// SetAppInstanceLabel the recommended app.kubernetes.io/instance annotation against an unstructured object +// Uses the legacy labeling if environment variable is set +func SetAppInstanceAnnotation(target *unstructured.Unstructured, key, val string) error { + annotations := target.GetAnnotations() + if annotations == nil { + annotations = make(map[string]string) + } + annotations[key] = val + target.SetAnnotations(annotations) + if key != common.LabelKeyLegacyApplicationName { + // we no longer label the pod template sub resources in v0.11 + return nil + } + return nil +} diff --git a/util/settings/settings.go b/util/settings/settings.go index c675b0fc79f52..61669497e0582 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -273,6 +273,8 @@ const ( settingsWebhookGogsSecretKey = "webhook.gogs.secret" // settingsApplicationInstanceLabelKey is the key to configure injected app instance label key settingsApplicationInstanceLabelKey = "application.instanceLabelKey" + // settingsAppIdTrackingMethodKey is the key to configure injected app instance label key + settingsAppIdTrackingMethodKey = "application.appIdTrackingMethodKey" // resourcesCustomizationsKey is the key to the map of resource overrides resourceCustomizationsKey = "resource.customizations" // resourceExclusions is the key to the list of excluded resources @@ -519,6 +521,18 @@ func (mgr *SettingsManager) GetAppInstanceLabelKey() (string, error) { return label, nil } +func (mgr *SettingsManager) GetTrackingMethod() (string, error) { + argoCDCM, err := mgr.getConfigMap() + if err != nil { + return "", err + } + trackingMethod := argoCDCM.Data[settingsAppIdTrackingMethodKey] + if trackingMethod == "" { + return "label", nil + } + return trackingMethod, nil +} + func (mgr *SettingsManager) GetPasswordPattern() (string, error) { argoCDCM, err := mgr.getConfigMap() if err != nil { From ccb37cfba11c8bf90b0f52a3c77b3a926df1fff5 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Thu, 16 Sep 2021 23:02:38 +0300 Subject: [PATCH 02/32] move tracking method on settings level Signed-off-by: pashavictorovich --- controller/cache/cache.go | 2 +- controller/state.go | 3 ++- server/application/application.go | 2 +- util/settings/settings.go | 8 ++++---- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index ba1b09f611fd1..b5838c65c396e 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -293,7 +293,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e return nil, fmt.Errorf("controller is configured to ignore cluster %s", cluster.Server) } - trackingMethod := "annotation" + trackingMethod := c.settingsMgr.GetTrackingMethod() clusterCache = clustercache.NewClusterCache(cluster.RESTConfig(), clustercache.SetListSemaphore(c.listSemaphore), diff --git a/controller/state.go b/controller/state.go index ac1e370099d20..a22edcf8f5f1d 100644 --- a/controller/state.go +++ b/controller/state.go @@ -148,6 +148,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 if err != nil { return nil, nil, err } + kustomizeOptions, err := kustomizeSettings.GetOptions(app.Spec.Source) if err != nil { return nil, nil, err @@ -174,7 +175,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 ApiVersions: argo.APIGroupsToVersions(apiGroups), VerifySignature: verifySignature, HelmRepoCreds: permittedHelmCredentials, - TrackingMethod: "annotation", + TrackingMethod: m.settingsMgr.GetTrackingMethod(), }) if err != nil { return nil, nil, err diff --git a/server/application/application.go b/server/application/application.go index 64fe1fcb41094..2d2914052beea 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -848,7 +848,7 @@ func (s *Server) validateAndNormalizeApp(ctx context.Context, app *appv1.Applica var conditions []appv1.ApplicationCondition if validate { - conditions, err = argo.ValidateRepo(ctx, app, s.repoClientset, s.db, kustomizeOptions, plugins, s.kubectl, proj, "annotation") + conditions, err = argo.ValidateRepo(ctx, app, s.repoClientset, s.db, kustomizeOptions, plugins, s.kubectl, proj, s.settingsMgr.GetTrackingMethod()) if err != nil { return err } diff --git a/util/settings/settings.go b/util/settings/settings.go index 61669497e0582..6125e5ddd5e65 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -521,16 +521,16 @@ func (mgr *SettingsManager) GetAppInstanceLabelKey() (string, error) { return label, nil } -func (mgr *SettingsManager) GetTrackingMethod() (string, error) { +func (mgr *SettingsManager) GetTrackingMethod() string { argoCDCM, err := mgr.getConfigMap() if err != nil { - return "", err + return "label" } trackingMethod := argoCDCM.Data[settingsAppIdTrackingMethodKey] if trackingMethod == "" { - return "label", nil + return "label" } - return trackingMethod, nil + return trackingMethod } func (mgr *SettingsManager) GetPasswordPattern() (string, error) { From 3ac41bba04c16fc1870e9b0293ef2f7eeff0efd0 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Fri, 17 Sep 2021 22:41:01 +0300 Subject: [PATCH 03/32] tracking method support Signed-off-by: pashavictorovich --- util/settings/settings.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/util/settings/settings.go b/util/settings/settings.go index 6125e5ddd5e65..3b78b96a03bfb 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -524,12 +524,15 @@ func (mgr *SettingsManager) GetAppInstanceLabelKey() (string, error) { func (mgr *SettingsManager) GetTrackingMethod() string { argoCDCM, err := mgr.getConfigMap() if err != nil { + log.Println("Tracking method: label") return "label" } trackingMethod := argoCDCM.Data[settingsAppIdTrackingMethodKey] if trackingMethod == "" { + log.Println("Tracking method: label") return "label" } + log.Println("Tracking method: " + trackingMethod) return trackingMethod } From 1b7188854db5e9413e070202e769ee41185d8a24 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Sun, 19 Sep 2021 01:27:22 +0300 Subject: [PATCH 04/32] tracking method support Signed-off-by: pashavictorovich --- controller/cache/cache.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index b5838c65c396e..41e7ddea91182 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -258,7 +258,7 @@ func skipAppRequeuing(key kube.ResourceKey) bool { return ignoredRefreshResources[key.Group+"/"+key.Kind] } -// TODO: Move to kube.go +// TODO: Remove after https://github.com/argoproj/gitops-engine/pull/330 get merged func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string { if annotations := un.GetAnnotations(); annotations != nil { return annotations[key] @@ -307,7 +307,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e res.Health, _ = health.GetResourceHealth(un, cacheSettings.clusterSettings.ResourceHealthOverride) if trackingMethod == "annotation" { - appName := kube.GetAppInstanceLabel(un, cacheSettings.appInstanceLabelKey) + appName := GetAppInstanceAnnotation(un, cacheSettings.appInstanceLabelKey) if isRoot && appName != "" { res.AppName = appName } From 321574e13c3ef734cc7d16d129d67e3e268735e5 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Sun, 19 Sep 2021 18:42:08 +0300 Subject: [PATCH 05/32] refactor way how to work with tracking method Signed-off-by: pashavictorovich --- controller/cache/cache.go | 51 ++++++++++++---------- pkg/apis/application/v1alpha1/types.go | 5 +++ util/argo/tracking_method.go | 59 ++++++++++++++++++++++++++ util/settings/settings.go | 14 ++---- 4 files changed, 97 insertions(+), 32 deletions(-) create mode 100644 util/argo/tracking_method.go diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 41e7ddea91182..ddf2080ebef3c 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -105,7 +105,8 @@ func NewLiveStateCache( kubectl kube.Kubectl, metricsServer *metrics.MetricsServer, onObjectUpdated ObjectUpdatedHandler, - clusterFilter func(cluster *appv1.Cluster) bool) LiveStateCache { + clusterFilter func(cluster *appv1.Cluster) bool, + trackingMethodUtil argo.TrackingMethodUtil) LiveStateCache { return &liveStateCache{ appInformer: appInformer, @@ -116,8 +117,9 @@ func NewLiveStateCache( settingsMgr: settingsMgr, metricsServer: metricsServer, // The default limit of 50 is chosen based on experiments. - listSemaphore: semaphore.NewWeighted(50), - clusterFilter: clusterFilter, + listSemaphore: semaphore.NewWeighted(50), + clusterFilter: clusterFilter, + trackingMethodUtil: trackingMethodUtil, } } @@ -127,13 +129,14 @@ type cacheSettings struct { } type liveStateCache struct { - db db.ArgoDB - appInformer cache.SharedIndexInformer - onObjectUpdated ObjectUpdatedHandler - kubectl kube.Kubectl - settingsMgr *settings.SettingsManager - metricsServer *metrics.MetricsServer - clusterFilter func(cluster *appv1.Cluster) bool + db db.ArgoDB + appInformer cache.SharedIndexInformer + onObjectUpdated ObjectUpdatedHandler + kubectl kube.Kubectl + settingsMgr *settings.SettingsManager + metricsServer *metrics.MetricsServer + clusterFilter func(cluster *appv1.Cluster) bool + trackingMethodUtil argo.TrackingMethodUtil // listSemaphore is used to limit the number of concurrent memory consuming operations on the // k8s list queries results across all clusters to avoid memory spikes during cache initialization. @@ -266,6 +269,17 @@ func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string return "" } +func (c *liveStateCache) getAppNameBaseOnTrackingMethod(un *unstructured.Unstructured, key string, trackingMethod argo.TrackingMethod) string { + switch trackingMethod { + case argo.TrackingMethodLabel: + return kube.GetAppInstanceLabel(un, key) + case argo.TrackingMethodAnnotation: + return GetAppInstanceAnnotation(un, key) + default: + return kube.GetAppInstanceLabel(un, key) + } +} + func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, error) { c.lock.RLock() clusterCache, ok := c.clusters[server] @@ -293,8 +307,6 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e return nil, fmt.Errorf("controller is configured to ignore cluster %s", cluster.Server) } - trackingMethod := c.settingsMgr.GetTrackingMethod() - clusterCache = clustercache.NewClusterCache(cluster.RESTConfig(), clustercache.SetListSemaphore(c.listSemaphore), clustercache.SetResyncTimeout(K8SClusterResyncDuration), @@ -306,16 +318,11 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e populateNodeInfo(un, res) res.Health, _ = health.GetResourceHealth(un, cacheSettings.clusterSettings.ResourceHealthOverride) - if trackingMethod == "annotation" { - appName := GetAppInstanceAnnotation(un, cacheSettings.appInstanceLabelKey) - if isRoot && appName != "" { - res.AppName = appName - } - } else { - appName := kube.GetAppInstanceLabel(un, cacheSettings.appInstanceLabelKey) - if isRoot && appName != "" { - res.AppName = appName - } + trackingMethod := c.trackingMethodUtil.Get("", "") + + appName := c.getAppNameBaseOnTrackingMethod(un, cacheSettings.appInstanceLabelKey, trackingMethod) + if isRoot && appName != "" { + res.AppName = appName } gvk := un.GroupVersionKind() diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index bdcaa5a59f048..4be345448f029 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -15,6 +15,8 @@ import ( "strings" "time" + "github.com/argoproj/argo-cd/v2/util/argo" + "github.com/argoproj/gitops-engine/pkg/health" synccommon "github.com/argoproj/gitops-engine/pkg/sync/common" "github.com/ghodss/yaml" @@ -72,6 +74,9 @@ type ApplicationSpec struct { // Increasing will increase the space used to store the history, so we do not recommend increasing it. // Default is 10. RevisionHistoryLimit *int64 `json:"revisionHistoryLimit,omitempty" protobuf:"bytes,7,name=revisionHistoryLimit"` + // Project is a reference to the project this application belongs to. + // The empty string means that application belongs to the 'default' project. + TrackingMethod argo.TrackingMethod `json:"trackingMethod" protobuf:"bytes,8,name=project"` } // ResourceIgnoreDifferences contains resource filter and list of json paths which should be ignored during comparison with live state. diff --git a/util/argo/tracking_method.go b/util/argo/tracking_method.go new file mode 100644 index 0000000000000..7eac42961bcd4 --- /dev/null +++ b/util/argo/tracking_method.go @@ -0,0 +1,59 @@ +package argo + +import ( + "k8s.io/client-go/tools/cache" + + "github.com/argoproj/argo-cd/v2/util/settings" +) + +type TrackingMethod string + +const ( + TrackingMethodAnnotation TrackingMethod = "annotation" + TrackingMethodLabel TrackingMethod = "label" + TrackingMethodAnnotationAndLabel TrackingMethod = "annotation+label" +) + +type TrackingMethodUtil interface { + Get(appName, namespace string) TrackingMethod +} + +type trackingMethodUtil struct { + appInformer cache.SharedIndexInformer + settingsMgr *settings.SettingsManager +} + +func NewTrackingMethodUtil( + appInformer cache.SharedIndexInformer, + settingsMgr *settings.SettingsManager) TrackingMethodUtil { + return &trackingMethodUtil{ + appInformer: appInformer, + settingsMgr: settingsMgr, + } +} + +func (tmu *trackingMethodUtil) Get(appName, namespace string) TrackingMethod { + //obj, exists, err := tmu.appInformer.GetIndexer().GetByKey(namespace + "/" + appName) + //app, ok := obj.(*appv1.Application) + //if !exists && err != nil && !ok { + // return TrackingMethodAnnotationAndLabel + //} + // + //if app.Spec.TrackingMethod != "" { + // return app.Spec.TrackingMethod + //} + + tm, err := tmu.settingsMgr.GetTrackingMethod() + if err != nil { + return TrackingMethodAnnotationAndLabel + } + + switch os := tm; os { + case "label": + return TrackingMethodLabel + case "annotation": + return TrackingMethodAnnotation + default: + return TrackingMethodAnnotationAndLabel + } +} diff --git a/util/settings/settings.go b/util/settings/settings.go index 3b78b96a03bfb..c037bde3674d5 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -331,6 +331,7 @@ type SettingsManager struct { initContextCancel func() reposCache []Repository repoCredsCache []RepositoryCredentials + trackingMethod string } type incompleteSettingsError struct { @@ -521,19 +522,12 @@ func (mgr *SettingsManager) GetAppInstanceLabelKey() (string, error) { return label, nil } -func (mgr *SettingsManager) GetTrackingMethod() string { +func (mgr *SettingsManager) GetTrackingMethod() (string, error) { argoCDCM, err := mgr.getConfigMap() if err != nil { - log.Println("Tracking method: label") - return "label" - } - trackingMethod := argoCDCM.Data[settingsAppIdTrackingMethodKey] - if trackingMethod == "" { - log.Println("Tracking method: label") - return "label" + return "", err } - log.Println("Tracking method: " + trackingMethod) - return trackingMethod + return argoCDCM.Data[settingsAppIdTrackingMethodKey], nil } func (mgr *SettingsManager) GetPasswordPattern() (string, error) { From 69603892b1f7a9693f81ce456580e16b8322e585 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Sun, 19 Sep 2021 18:51:48 +0300 Subject: [PATCH 06/32] refactor way how to work with tracking method Signed-off-by: pashavictorovich --- controller/cache/cache.go | 23 +---------------------- reposerver/repository/repository.go | 1 + util/argo/tracking_method.go | 25 +++++++++++++++++++++++-- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index ddf2080ebef3c..52a8461e45244 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -261,25 +261,6 @@ func skipAppRequeuing(key kube.ResourceKey) bool { return ignoredRefreshResources[key.Group+"/"+key.Kind] } -// TODO: Remove after https://github.com/argoproj/gitops-engine/pull/330 get merged -func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string { - if annotations := un.GetAnnotations(); annotations != nil { - return annotations[key] - } - return "" -} - -func (c *liveStateCache) getAppNameBaseOnTrackingMethod(un *unstructured.Unstructured, key string, trackingMethod argo.TrackingMethod) string { - switch trackingMethod { - case argo.TrackingMethodLabel: - return kube.GetAppInstanceLabel(un, key) - case argo.TrackingMethodAnnotation: - return GetAppInstanceAnnotation(un, key) - default: - return kube.GetAppInstanceLabel(un, key) - } -} - func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, error) { c.lock.RLock() clusterCache, ok := c.clusters[server] @@ -318,9 +299,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e populateNodeInfo(un, res) res.Health, _ = health.GetResourceHealth(un, cacheSettings.clusterSettings.ResourceHealthOverride) - trackingMethod := c.trackingMethodUtil.Get("", "") - - appName := c.getAppNameBaseOnTrackingMethod(un, cacheSettings.appInstanceLabelKey, trackingMethod) + appName := c.trackingMethodUtil.GetAppName(un, cacheSettings.appInstanceLabelKey) if isRoot && appName != "" { res.AppName = appName } diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 3c7e03570892a..f22d060e19790 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -770,6 +770,7 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { + if q.TrackingMethod == "annotation" { err = argokube.SetAppInstanceAnnotation(target, q.AppLabelKey, q.AppName) if err != nil { diff --git a/util/argo/tracking_method.go b/util/argo/tracking_method.go index 7eac42961bcd4..01e14bf4328c4 100644 --- a/util/argo/tracking_method.go +++ b/util/argo/tracking_method.go @@ -1,6 +1,8 @@ package argo import ( + "github.com/argoproj/gitops-engine/pkg/utils/kube" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/client-go/tools/cache" "github.com/argoproj/argo-cd/v2/util/settings" @@ -15,7 +17,7 @@ const ( ) type TrackingMethodUtil interface { - Get(appName, namespace string) TrackingMethod + GetAppName(un *unstructured.Unstructured, key string) string } type trackingMethodUtil struct { @@ -32,7 +34,7 @@ func NewTrackingMethodUtil( } } -func (tmu *trackingMethodUtil) Get(appName, namespace string) TrackingMethod { +func (tmu *trackingMethodUtil) get(appName, namespace string) TrackingMethod { //obj, exists, err := tmu.appInformer.GetIndexer().GetByKey(namespace + "/" + appName) //app, ok := obj.(*appv1.Application) //if !exists && err != nil && !ok { @@ -57,3 +59,22 @@ func (tmu *trackingMethodUtil) Get(appName, namespace string) TrackingMethod { return TrackingMethodAnnotationAndLabel } } + +// TODO: Remove after https://github.com/argoproj/gitops-engine/pull/330 get merged +func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string { + if annotations := un.GetAnnotations(); annotations != nil { + return annotations[key] + } + return "" +} + +func (c *trackingMethodUtil) GetAppName(un *unstructured.Unstructured, key string) string { + switch c.get("", "") { + case TrackingMethodLabel: + return kube.GetAppInstanceLabel(un, key) + case TrackingMethodAnnotation: + return GetAppInstanceAnnotation(un, key) + default: + return kube.GetAppInstanceLabel(un, key) + } +} From 32a09559926a3e7e57a1e03dcee10484f94f404c Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Mon, 20 Sep 2021 18:38:59 +0300 Subject: [PATCH 07/32] rewrite way how to set label Signed-off-by: pashavictorovich --- reposerver/repository/repository.go | 25 ++++++--------- reposerver/repository/repository_test.go | 6 ++-- ...racking_method.go => resource_tracking.go} | 32 +++++++++++++------ 3 files changed, 37 insertions(+), 26 deletions(-) rename util/argo/{tracking_method.go => resource_tracking.go} (65%) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index f22d060e19790..281089d163c06 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -16,6 +16,8 @@ import ( "strings" "time" + "github.com/argoproj/argo-cd/v2/util/argo" + "github.com/Masterminds/semver" "github.com/TomOnTime/utfutil" "github.com/argoproj/gitops-engine/pkg/utils/kube" @@ -47,7 +49,6 @@ import ( "github.com/argoproj/argo-cd/v2/util/helm" "github.com/argoproj/argo-cd/v2/util/io" "github.com/argoproj/argo-cd/v2/util/ksonnet" - argokube "github.com/argoproj/argo-cd/v2/util/kube" "github.com/argoproj/argo-cd/v2/util/kustomize" "github.com/argoproj/argo-cd/v2/util/security" "github.com/argoproj/argo-cd/v2/util/text" @@ -68,6 +69,7 @@ type Service struct { cache *reposervercache.Cache parallelismLimitSemaphore *semaphore.Weighted metricsServer *metrics.MetricsServer + resourceTracking argo.ResourceTracking newGitClient func(rawRepoURL string, creds git.Creds, insecure bool, enableLfs bool, proxy string, opts ...git.ClientOpts) (git.Client, error) newHelmClient func(repoURL string, creds helm.Creds, enableOci bool, proxy string, opts ...helm.ClientOpts) helm.Client initConstants RepoServerInitConstants @@ -83,7 +85,7 @@ type RepoServerInitConstants struct { } // NewService returns a new instance of the Manifest service -func NewService(metricsServer *metrics.MetricsServer, cache *reposervercache.Cache, initConstants RepoServerInitConstants) *Service { +func NewService(metricsServer *metrics.MetricsServer, cache *reposervercache.Cache, initConstants RepoServerInitConstants, resourceTracking argo.ResourceTracking) *Service { var parallelismLimitSemaphore *semaphore.Weighted if initConstants.ParallelismLimit > 0 { parallelismLimitSemaphore = semaphore.NewWeighted(initConstants.ParallelismLimit) @@ -95,6 +97,7 @@ func NewService(metricsServer *metrics.MetricsServer, cache *reposervercache.Cac cache: cache, metricsServer: metricsServer, newGitClient: git.NewClient, + resourceTracking: resourceTracking, newHelmClient: func(repoURL string, creds helm.Creds, enableOci bool, proxy string, opts ...helm.ClientOpts) helm.Client { return helm.NewClientWithLock(repoURL, creds, sync.NewKeyLock(), enableOci, proxy, opts...) }, @@ -319,7 +322,7 @@ func (s *Service) runManifestGen(repoRoot, commitSHA, cacheKey string, ctxSrc op var manifestGenResult *apiclient.ManifestResponse ctx, err := ctxSrc() if err == nil { - manifestGenResult, err = GenerateManifests(ctx.appPath, repoRoot, commitSHA, q, false) + manifestGenResult, err = s.GenerateManifests(ctx.appPath, repoRoot, commitSHA, q, false) } if err != nil { @@ -708,7 +711,7 @@ func getRepoCredential(repoCredentials []*v1alpha1.RepoCreds, repoURL string) *v } // GenerateManifests generates manifests from a path -func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.ManifestRequest, isLocal bool) (*apiclient.ManifestResponse, error) { +func (s *Service) GenerateManifests(appPath, repoRoot, revision string, q *apiclient.ManifestRequest, isLocal bool) (*apiclient.ManifestResponse, error) { var targetObjs []*unstructured.Unstructured var dest *v1alpha1.ApplicationDestination @@ -770,17 +773,9 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - - if q.TrackingMethod == "annotation" { - err = argokube.SetAppInstanceAnnotation(target, q.AppLabelKey, q.AppName) - if err != nil { - return nil, err - } - } else { - err = argokube.SetAppInstanceLabel(target, q.AppLabelKey, q.AppName) - if err != nil { - return nil, err - } + err = s.resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName) + if err != nil { + return nil, err } } manifestStr, err := json.Marshal(target.Object) diff --git a/reposerver/repository/repository_test.go b/reposerver/repository/repository_test.go index fe21607b6211d..f43509e9b243a 100644 --- a/reposerver/repository/repository_test.go +++ b/reposerver/repository/repository_test.go @@ -138,7 +138,7 @@ func TestGenerateYamlManifestInDir(t *testing.T) { assert.Equal(t, countOfManifests, len(res1.Manifests)) // this will test concatenated manifests to verify we split YAMLs correctly - res2, err := GenerateManifests("./testdata/concatenated", "/", "", &q, false) + res2, err := service.GenerateManifests("./testdata/concatenated", "/", "", &q, false) assert.NoError(t, err) assert.Equal(t, 3, len(res2.Manifests)) } @@ -927,11 +927,13 @@ func TestRunCustomTool(t *testing.T) { } func TestGenerateFromUTF16(t *testing.T) { + service := newService("./testdata") + q := apiclient.ManifestRequest{ Repo: &argoappv1.Repository{}, ApplicationSource: &argoappv1.ApplicationSource{}, } - res1, err := GenerateManifests("./testdata/utf-16", "/", "", &q, false) + res1, err := service.GenerateManifests("./testdata/utf-16", "/", "", &q, false) assert.Nil(t, err) assert.Equal(t, 2, len(res1.Manifests)) } diff --git a/util/argo/tracking_method.go b/util/argo/resource_tracking.go similarity index 65% rename from util/argo/tracking_method.go rename to util/argo/resource_tracking.go index 01e14bf4328c4..7842f0181d95c 100644 --- a/util/argo/tracking_method.go +++ b/util/argo/resource_tracking.go @@ -5,6 +5,8 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/client-go/tools/cache" + argokube "github.com/argoproj/argo-cd/v2/util/kube" + "github.com/argoproj/argo-cd/v2/util/settings" ) @@ -16,25 +18,26 @@ const ( TrackingMethodAnnotationAndLabel TrackingMethod = "annotation+label" ) -type TrackingMethodUtil interface { +type ResourceTracking interface { GetAppName(un *unstructured.Unstructured, key string) string + SetAppInstance(un *unstructured.Unstructured, key, val string) error } -type trackingMethodUtil struct { +type resourceTracking struct { appInformer cache.SharedIndexInformer settingsMgr *settings.SettingsManager } -func NewTrackingMethodUtil( +func NewResourceTracking( appInformer cache.SharedIndexInformer, - settingsMgr *settings.SettingsManager) TrackingMethodUtil { - return &trackingMethodUtil{ + settingsMgr *settings.SettingsManager) ResourceTracking { + return &resourceTracking{ appInformer: appInformer, settingsMgr: settingsMgr, } } -func (tmu *trackingMethodUtil) get(appName, namespace string) TrackingMethod { +func (rt *resourceTracking) get(appName, namespace string) TrackingMethod { //obj, exists, err := tmu.appInformer.GetIndexer().GetByKey(namespace + "/" + appName) //app, ok := obj.(*appv1.Application) //if !exists && err != nil && !ok { @@ -45,7 +48,7 @@ func (tmu *trackingMethodUtil) get(appName, namespace string) TrackingMethod { // return app.Spec.TrackingMethod //} - tm, err := tmu.settingsMgr.GetTrackingMethod() + tm, err := rt.settingsMgr.GetTrackingMethod() if err != nil { return TrackingMethodAnnotationAndLabel } @@ -68,8 +71,8 @@ func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string return "" } -func (c *trackingMethodUtil) GetAppName(un *unstructured.Unstructured, key string) string { - switch c.get("", "") { +func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string) string { + switch rt.get("", "") { case TrackingMethodLabel: return kube.GetAppInstanceLabel(un, key) case TrackingMethodAnnotation: @@ -78,3 +81,14 @@ func (c *trackingMethodUtil) GetAppName(un *unstructured.Unstructured, key strin return kube.GetAppInstanceLabel(un, key) } } + +func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string) error { + switch rt.get("", "") { + case TrackingMethodLabel: + return argokube.SetAppInstanceLabel(un, key, val) + case TrackingMethodAnnotation: + return argokube.SetAppInstanceAnnotation(un, key, val) + default: + return argokube.SetAppInstanceLabel(un, key, val) + } +} From 0a77229d090b95dc3c9b376214d8b6b77231a7d2 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Mon, 20 Sep 2021 20:06:46 +0300 Subject: [PATCH 08/32] rewrite way how to set label Signed-off-by: pashavictorovich --- cmd/argocd/commands/admin/app.go | 4 +- controller/appcontroller.go | 2 +- controller/cache/cache.go | 28 +++++----- controller/state.go | 3 +- pkg/apis/application/v1alpha1/types.go | 6 +-- reposerver/repository/repository.go | 2 +- reposerver/server.go | 4 +- server/application/application.go | 2 +- util/argo/argo.go | 5 +- util/argo/resource_tracking.go | 72 +++++++++++--------------- 10 files changed, 59 insertions(+), 69 deletions(-) diff --git a/cmd/argocd/commands/admin/app.go b/cmd/argocd/commands/admin/app.go index 51a2073c143ee..d3202492b46c5 100644 --- a/cmd/argocd/commands/admin/app.go +++ b/cmd/argocd/commands/admin/app.go @@ -10,6 +10,8 @@ import ( "sort" "time" + "github.com/argoproj/argo-cd/v2/util/argo" + "github.com/ghodss/yaml" "github.com/spf13/cobra" apiv1 "k8s.io/api/core/v1" @@ -408,5 +410,5 @@ func reconcileApplications( } func newLiveStateCache(argoDB db.ArgoDB, appInformer kubecache.SharedIndexInformer, settingsMgr *settings.SettingsManager, server *metrics.MetricsServer) cache.LiveStateCache { - return cache.NewLiveStateCache(argoDB, appInformer, settingsMgr, kubeutil.NewKubectl(), server, func(managedByApp map[string]bool, ref apiv1.ObjectReference) {}, nil) + return cache.NewLiveStateCache(argoDB, appInformer, settingsMgr, kubeutil.NewKubectl(), server, func(managedByApp map[string]bool, ref apiv1.ObjectReference) {}, nil, argo.NewResourceTracking()) } diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 507adf1904d68..606007f29c03a 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -190,7 +190,7 @@ func NewApplicationController( return nil, err } } - stateCache := statecache.NewLiveStateCache(db, appInformer, ctrl.settingsMgr, kubectl, ctrl.metricsServer, ctrl.handleObjectUpdated, clusterFilter) + stateCache := statecache.NewLiveStateCache(db, appInformer, ctrl.settingsMgr, kubectl, ctrl.metricsServer, ctrl.handleObjectUpdated, clusterFilter, argo.NewResourceTracking()) appStateManager := NewAppStateManager(db, applicationClientset, repoClientset, namespace, kubectl, ctrl.settingsMgr, stateCache, projInformer, ctrl.metricsServer, argoCache, ctrl.statusRefreshTimeout) ctrl.appInformer = appInformer ctrl.appLister = appLister diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 52a8461e45244..4529a46d9220c 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -106,7 +106,7 @@ func NewLiveStateCache( metricsServer *metrics.MetricsServer, onObjectUpdated ObjectUpdatedHandler, clusterFilter func(cluster *appv1.Cluster) bool, - trackingMethodUtil argo.TrackingMethodUtil) LiveStateCache { + resourceTracking argo.ResourceTracking) LiveStateCache { return &liveStateCache{ appInformer: appInformer, @@ -117,9 +117,9 @@ func NewLiveStateCache( settingsMgr: settingsMgr, metricsServer: metricsServer, // The default limit of 50 is chosen based on experiments. - listSemaphore: semaphore.NewWeighted(50), - clusterFilter: clusterFilter, - trackingMethodUtil: trackingMethodUtil, + listSemaphore: semaphore.NewWeighted(50), + clusterFilter: clusterFilter, + resourceTracking: resourceTracking, } } @@ -129,14 +129,14 @@ type cacheSettings struct { } type liveStateCache struct { - db db.ArgoDB - appInformer cache.SharedIndexInformer - onObjectUpdated ObjectUpdatedHandler - kubectl kube.Kubectl - settingsMgr *settings.SettingsManager - metricsServer *metrics.MetricsServer - clusterFilter func(cluster *appv1.Cluster) bool - trackingMethodUtil argo.TrackingMethodUtil + db db.ArgoDB + appInformer cache.SharedIndexInformer + onObjectUpdated ObjectUpdatedHandler + kubectl kube.Kubectl + settingsMgr *settings.SettingsManager + metricsServer *metrics.MetricsServer + clusterFilter func(cluster *appv1.Cluster) bool + resourceTracking argo.ResourceTracking // listSemaphore is used to limit the number of concurrent memory consuming operations on the // k8s list queries results across all clusters to avoid memory spikes during cache initialization. @@ -288,6 +288,8 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e return nil, fmt.Errorf("controller is configured to ignore cluster %s", cluster.Server) } + trackingMethod := argo.GetTrackingMethod(c.settingsMgr) + clusterCache = clustercache.NewClusterCache(cluster.RESTConfig(), clustercache.SetListSemaphore(c.listSemaphore), clustercache.SetResyncTimeout(K8SClusterResyncDuration), @@ -299,7 +301,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e populateNodeInfo(un, res) res.Health, _ = health.GetResourceHealth(un, cacheSettings.clusterSettings.ResourceHealthOverride) - appName := c.trackingMethodUtil.GetAppName(un, cacheSettings.appInstanceLabelKey) + appName := c.resourceTracking.GetAppName(un, cacheSettings.appInstanceLabelKey, trackingMethod) if isRoot && appName != "" { res.AppName = appName } diff --git a/controller/state.go b/controller/state.go index a22edcf8f5f1d..17f73a90ac8fb 100644 --- a/controller/state.go +++ b/controller/state.go @@ -159,6 +159,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 return nil, nil, err } ts.AddCheckpoint("version_ms") + trackingMethod := argo.GetTrackingMethod(m.settingsMgr) manifestInfo, err := repoClient.GenerateManifest(context.Background(), &apiclient.ManifestRequest{ Repo: repo, Repos: permittedHelmRepos, @@ -175,7 +176,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 ApiVersions: argo.APIGroupsToVersions(apiGroups), VerifySignature: verifySignature, HelmRepoCreds: permittedHelmCredentials, - TrackingMethod: m.settingsMgr.GetTrackingMethod(), + TrackingMethod: string(trackingMethod), }) if err != nil { return nil, nil, err diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 4be345448f029..b46fce9a54cc8 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -15,8 +15,6 @@ import ( "strings" "time" - "github.com/argoproj/argo-cd/v2/util/argo" - "github.com/argoproj/gitops-engine/pkg/health" synccommon "github.com/argoproj/gitops-engine/pkg/sync/common" "github.com/ghodss/yaml" @@ -76,9 +74,11 @@ type ApplicationSpec struct { RevisionHistoryLimit *int64 `json:"revisionHistoryLimit,omitempty" protobuf:"bytes,7,name=revisionHistoryLimit"` // Project is a reference to the project this application belongs to. // The empty string means that application belongs to the 'default' project. - TrackingMethod argo.TrackingMethod `json:"trackingMethod" protobuf:"bytes,8,name=project"` + TrackingMethod TrackingMethod `json:"trackingMethod" protobuf:"bytes,8,name=project"` } +type TrackingMethod string + // ResourceIgnoreDifferences contains resource filter and list of json paths which should be ignored during comparison with live state. type ResourceIgnoreDifferences struct { Group string `json:"group,omitempty" protobuf:"bytes,1,opt,name=group"` diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 281089d163c06..d5daceec984bb 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -773,7 +773,7 @@ func (s *Service) GenerateManifests(appPath, repoRoot, revision string, q *apicl for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - err = s.resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName) + err = s.resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName, argo.ToTrackingMethod(q.TrackingMethod)) if err != nil { return nil, err } diff --git a/reposerver/server.go b/reposerver/server.go index a0a206efe0706..ecc86ca95de65 100644 --- a/reposerver/server.go +++ b/reposerver/server.go @@ -5,6 +5,8 @@ import ( "fmt" "os" + "github.com/argoproj/argo-cd/v2/util/argo" + grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" grpc_logrus "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus" grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" @@ -92,7 +94,7 @@ func (a *ArgoCDRepoServer) CreateGRPC() *grpc.Server { versionpkg.RegisterVersionServiceServer(server, version.NewServer(nil, func() (bool, error) { return true, nil })) - manifestService := repository.NewService(a.metricsServer, a.cache, a.initConstants) + manifestService := repository.NewService(a.metricsServer, a.cache, a.initConstants, argo.NewResourceTracking()) apiclient.RegisterRepoServerServiceServer(server, manifestService) healthService := health.NewServer() diff --git a/server/application/application.go b/server/application/application.go index 2d2914052beea..53d6a27acaf2f 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -848,7 +848,7 @@ func (s *Server) validateAndNormalizeApp(ctx context.Context, app *appv1.Applica var conditions []appv1.ApplicationCondition if validate { - conditions, err = argo.ValidateRepo(ctx, app, s.repoClientset, s.db, kustomizeOptions, plugins, s.kubectl, proj, s.settingsMgr.GetTrackingMethod()) + conditions, err = argo.ValidateRepo(ctx, app, s.repoClientset, s.db, kustomizeOptions, plugins, s.kubectl, proj) if err != nil { return err } diff --git a/util/argo/argo.go b/util/argo/argo.go index f443c1a8efc0f..0f60fb99dd033 100644 --- a/util/argo/argo.go +++ b/util/argo/argo.go @@ -180,7 +180,6 @@ func ValidateRepo( plugins []*argoappv1.ConfigManagementPlugin, kubectl kube.Kubectl, proj *argoappv1.AppProject, - trackingMethod string, ) ([]argoappv1.ApplicationCondition, error) { spec := &app.Spec conditions := make([]argoappv1.ApplicationCondition, 0) @@ -270,7 +269,7 @@ func ValidateRepo( return nil, err } conditions = append(conditions, verifyGenerateManifests( - ctx, repo, permittedHelmRepos, app, repoClient, kustomizeOptions, plugins, cluster.ServerVersion, APIGroupsToVersions(apiGroups), permittedHelmCredentials, trackingMethod)...) + ctx, repo, permittedHelmRepos, app, repoClient, kustomizeOptions, plugins, cluster.ServerVersion, APIGroupsToVersions(apiGroups), permittedHelmCredentials)...) return conditions, nil } @@ -466,7 +465,6 @@ func verifyGenerateManifests( kubeVersion string, apiVersions []string, repositoryCredentials []*argoappv1.RepoCreds, - trackingMethod string, ) []argoappv1.ApplicationCondition { spec := &app.Spec var conditions []argoappv1.ApplicationCondition @@ -494,7 +492,6 @@ func verifyGenerateManifests( KubeVersion: kubeVersion, ApiVersions: apiVersions, HelmRepoCreds: repositoryCredentials, - TrackingMethod: trackingMethod, } req.Repo.CopyCredentialsFromRepo(repoRes) req.Repo.CopySettingsFrom(repoRes) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index 7842f0181d95c..3c095e0f8db6c 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -3,64 +3,39 @@ package argo import ( "github.com/argoproj/gitops-engine/pkg/utils/kube" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/client-go/tools/cache" - - argokube "github.com/argoproj/argo-cd/v2/util/kube" "github.com/argoproj/argo-cd/v2/util/settings" -) -type TrackingMethod string + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + + argokube "github.com/argoproj/argo-cd/v2/util/kube" +) const ( - TrackingMethodAnnotation TrackingMethod = "annotation" - TrackingMethodLabel TrackingMethod = "label" - TrackingMethodAnnotationAndLabel TrackingMethod = "annotation+label" + TrackingMethodAnnotation v1alpha1.TrackingMethod = "annotation" + TrackingMethodLabel v1alpha1.TrackingMethod = "label" + TrackingMethodAnnotationAndLabel v1alpha1.TrackingMethod = "annotation+label" ) type ResourceTracking interface { - GetAppName(un *unstructured.Unstructured, key string) string - SetAppInstance(un *unstructured.Unstructured, key, val string) error + GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string + SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error } type resourceTracking struct { - appInformer cache.SharedIndexInformer - settingsMgr *settings.SettingsManager } -func NewResourceTracking( - appInformer cache.SharedIndexInformer, - settingsMgr *settings.SettingsManager) ResourceTracking { - return &resourceTracking{ - appInformer: appInformer, - settingsMgr: settingsMgr, - } +func NewResourceTracking() ResourceTracking { + return &resourceTracking{} } -func (rt *resourceTracking) get(appName, namespace string) TrackingMethod { - //obj, exists, err := tmu.appInformer.GetIndexer().GetByKey(namespace + "/" + appName) - //app, ok := obj.(*appv1.Application) - //if !exists && err != nil && !ok { - // return TrackingMethodAnnotationAndLabel - //} - // - //if app.Spec.TrackingMethod != "" { - // return app.Spec.TrackingMethod - //} - - tm, err := rt.settingsMgr.GetTrackingMethod() +func GetTrackingMethod(settingsMgr *settings.SettingsManager) v1alpha1.TrackingMethod { + tm, err := settingsMgr.GetTrackingMethod() if err != nil { return TrackingMethodAnnotationAndLabel } - switch os := tm; os { - case "label": - return TrackingMethodLabel - case "annotation": - return TrackingMethodAnnotation - default: - return TrackingMethodAnnotationAndLabel - } + return ToTrackingMethod(tm) } // TODO: Remove after https://github.com/argoproj/gitops-engine/pull/330 get merged @@ -71,8 +46,8 @@ func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string return "" } -func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string) string { - switch rt.get("", "") { +func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string { + switch trackingMethod { case TrackingMethodLabel: return kube.GetAppInstanceLabel(un, key) case TrackingMethodAnnotation: @@ -82,8 +57,8 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string } } -func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string) error { - switch rt.get("", "") { +func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error { + switch trackingMethod { case TrackingMethodLabel: return argokube.SetAppInstanceLabel(un, key, val) case TrackingMethodAnnotation: @@ -92,3 +67,14 @@ func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, v return argokube.SetAppInstanceLabel(un, key, val) } } + +func ToTrackingMethod(trackingMethod string) v1alpha1.TrackingMethod { + switch os := trackingMethod; os { + case "label": + return TrackingMethodLabel + case "annotation": + return TrackingMethodAnnotation + default: + return TrackingMethodAnnotationAndLabel + } +} From c1a0e16dd40a5540efc3996af826280167338bfc Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Tue, 21 Sep 2021 00:04:33 +0300 Subject: [PATCH 09/32] rewrite way how to set label Signed-off-by: pashavictorovich --- controller/cache/cache.go | 2 ++ reposerver/cache/cache.go | 12 ++++++------ reposerver/repository/repository.go | 10 +++++----- server/application/application.go | 3 ++- util/argo/argo.go | 5 ++++- util/argo/argo_test.go | 2 +- util/argo/resource_tracking.go | 10 ++++++++++ 7 files changed, 30 insertions(+), 14 deletions(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 4529a46d9220c..547933b17cbb8 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -307,6 +307,8 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e } gvk := un.GroupVersionKind() + fmt.Println("Find app name " + appName) + // edge case. we do not label CRDs, so they miss the tracking label we inject. But we still // want the full resource to be available in our cache (to diff), so we store all CRDs return res, res.AppName != "" || gvk.Kind == kube.CustomResourceDefinitionKind diff --git a/reposerver/cache/cache.go b/reposerver/cache/cache.go index 273be2ee92539..9c3924a05f421 100644 --- a/reposerver/cache/cache.go +++ b/reposerver/cache/cache.go @@ -190,16 +190,16 @@ func (c *Cache) DeleteManifests(revision string, appSrc *appv1.ApplicationSource return c.cache.SetItem(manifestCacheKey(revision, appSrc, namespace, appLabelKey, appName, clusterInfo), "", c.repoCacheExpiration, true) } -func appDetailsCacheKey(revision string, appSrc *appv1.ApplicationSource) string { - return fmt.Sprintf("appdetails|%s|%d", revision, appSourceKey(appSrc)) +func appDetailsCacheKey(revision string, appSrc *appv1.ApplicationSource, trackingMethod appv1.TrackingMethod) string { + return fmt.Sprintf("appdetails|%s|%d|%s", revision, appSourceKey(appSrc), trackingMethod) } -func (c *Cache) GetAppDetails(revision string, appSrc *appv1.ApplicationSource, res *apiclient.RepoAppDetailsResponse) error { - return c.cache.GetItem(appDetailsCacheKey(revision, appSrc), res) +func (c *Cache) GetAppDetails(revision string, appSrc *appv1.ApplicationSource, res *apiclient.RepoAppDetailsResponse, trackingMethod appv1.TrackingMethod) error { + return c.cache.GetItem(appDetailsCacheKey(revision, appSrc, trackingMethod), res) } -func (c *Cache) SetAppDetails(revision string, appSrc *appv1.ApplicationSource, res *apiclient.RepoAppDetailsResponse) error { - return c.cache.SetItem(appDetailsCacheKey(revision, appSrc), res, c.repoCacheExpiration, res == nil) +func (c *Cache) SetAppDetails(revision string, appSrc *appv1.ApplicationSource, res *apiclient.RepoAppDetailsResponse, trackingMethod appv1.TrackingMethod) error { + return c.cache.SetItem(appDetailsCacheKey(revision, appSrc, trackingMethod), res, c.repoCacheExpiration, res == nil) } func revisionMetadataKey(repoURL, revision string) string { diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index d5daceec984bb..44bc81d0b3c19 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -322,7 +322,7 @@ func (s *Service) runManifestGen(repoRoot, commitSHA, cacheKey string, ctxSrc op var manifestGenResult *apiclient.ManifestResponse ctx, err := ctxSrc() if err == nil { - manifestGenResult, err = s.GenerateManifests(ctx.appPath, repoRoot, commitSHA, q, false) + manifestGenResult, err = GenerateManifests(ctx.appPath, repoRoot, commitSHA, q, false) } if err != nil { @@ -711,7 +711,7 @@ func getRepoCredential(repoCredentials []*v1alpha1.RepoCreds, repoURL string) *v } // GenerateManifests generates manifests from a path -func (s *Service) GenerateManifests(appPath, repoRoot, revision string, q *apiclient.ManifestRequest, isLocal bool) (*apiclient.ManifestResponse, error) { +func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.ManifestRequest, isLocal bool) (*apiclient.ManifestResponse, error) { var targetObjs []*unstructured.Unstructured var dest *v1alpha1.ApplicationDestination @@ -773,7 +773,7 @@ func (s *Service) GenerateManifests(appPath, repoRoot, revision string, q *apicl for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - err = s.resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName, argo.ToTrackingMethod(q.TrackingMethod)) + err = argo.NewResourceTracking().SetAppInstance(target, q.AppLabelKey, q.AppName, argo.ToTrackingMethod(q.TrackingMethod)) if err != nil { return nil, err } @@ -1178,7 +1178,7 @@ func (s *Service) GetAppDetails(ctx context.Context, q *apiclient.RepoServerAppD return err } } - _ = s.cache.SetAppDetails(revision, q.Source, res) + _ = s.cache.SetAppDetails(revision, q.Source, res, argo.TrackingMethodAnnotation) return nil } @@ -1190,7 +1190,7 @@ func (s *Service) GetAppDetails(ctx context.Context, q *apiclient.RepoServerAppD func (s *Service) createGetAppDetailsCacheHandler(res *apiclient.RepoAppDetailsResponse, q *apiclient.RepoServerAppDetailsQuery) func(revision string, _ bool) (bool, error) { return func(revision string, _ bool) (bool, error) { - err := s.cache.GetAppDetails(revision, q.Source, res) + err := s.cache.GetAppDetails(revision, q.Source, res, argo.TrackingMethodAnnotation) if err == nil { log.Infof("app details cache hit: %s/%s", revision, q.Source.Path) return true, nil diff --git a/server/application/application.go b/server/application/application.go index 53d6a27acaf2f..4aaf6a4966af8 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -331,6 +331,7 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan KubeVersion: serverVersion, ApiVersions: argo.APIGroupsToVersions(apiGroups), HelmRepoCreds: helmCreds, + TrackingMethod: string(argoutil.GetTrackingMethod(s.settingsMgr)), }) return err }) @@ -848,7 +849,7 @@ func (s *Server) validateAndNormalizeApp(ctx context.Context, app *appv1.Applica var conditions []appv1.ApplicationCondition if validate { - conditions, err = argo.ValidateRepo(ctx, app, s.repoClientset, s.db, kustomizeOptions, plugins, s.kubectl, proj) + conditions, err = argo.ValidateRepo(ctx, app, s.repoClientset, s.db, kustomizeOptions, plugins, s.kubectl, proj, s.settingsMgr) if err != nil { return err } diff --git a/util/argo/argo.go b/util/argo/argo.go index 0f60fb99dd033..9919224f45fb2 100644 --- a/util/argo/argo.go +++ b/util/argo/argo.go @@ -180,6 +180,7 @@ func ValidateRepo( plugins []*argoappv1.ConfigManagementPlugin, kubectl kube.Kubectl, proj *argoappv1.AppProject, + settingsMgr *settings.SettingsManager, ) ([]argoappv1.ApplicationCondition, error) { spec := &app.Spec conditions := make([]argoappv1.ApplicationCondition, 0) @@ -269,7 +270,7 @@ func ValidateRepo( return nil, err } conditions = append(conditions, verifyGenerateManifests( - ctx, repo, permittedHelmRepos, app, repoClient, kustomizeOptions, plugins, cluster.ServerVersion, APIGroupsToVersions(apiGroups), permittedHelmCredentials)...) + ctx, repo, permittedHelmRepos, app, repoClient, kustomizeOptions, plugins, cluster.ServerVersion, APIGroupsToVersions(apiGroups), permittedHelmCredentials, settingsMgr)...) return conditions, nil } @@ -465,6 +466,7 @@ func verifyGenerateManifests( kubeVersion string, apiVersions []string, repositoryCredentials []*argoappv1.RepoCreds, + settingsMgr *settings.SettingsManager, ) []argoappv1.ApplicationCondition { spec := &app.Spec var conditions []argoappv1.ApplicationCondition @@ -492,6 +494,7 @@ func verifyGenerateManifests( KubeVersion: kubeVersion, ApiVersions: apiVersions, HelmRepoCreds: repositoryCredentials, + TrackingMethod: string(GetTrackingMethod(settingsMgr)), } req.Repo.CopyCredentialsFromRepo(repoRes) req.Repo.CopySettingsFrom(repoRes) diff --git a/util/argo/argo_test.go b/util/argo/argo_test.go index ff1979f53b9ab..82a2b8c508304 100644 --- a/util/argo/argo_test.go +++ b/util/argo/argo_test.go @@ -278,7 +278,7 @@ func TestValidateRepo(t *testing.T) { return true })).Return(nil, nil) - conditions, err := ValidateRepo(context.Background(), app, repoClientSet, db, kustomizeOptions, nil, &kubetest.MockKubectlCmd{Version: kubeVersion, APIGroups: apiGroups}, proj) + conditions, err := ValidateRepo(context.Background(), app, repoClientSet, db, kustomizeOptions, nil, &kubetest.MockKubectlCmd{Version: kubeVersion, APIGroups: apiGroups}, proj, nil) assert.NoError(t, err) assert.Empty(t, conditions) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index 3c095e0f8db6c..0d4248142c027 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -1,6 +1,9 @@ package argo import ( + "encoding/json" + "log" + "github.com/argoproj/gitops-engine/pkg/utils/kube" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -47,10 +50,16 @@ func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string } func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string { + log.Println("Get app name, tracking method: " + trackingMethod) switch trackingMethod { case TrackingMethodLabel: return kube.GetAppInstanceLabel(un, key) case TrackingMethodAnnotation: + log.Println("Choose annotation strategy") + un2, _ := json.Marshal(un) + + log.Println("resource: " + string(un2)) + return GetAppInstanceAnnotation(un, key) default: return kube.GetAppInstanceLabel(un, key) @@ -58,6 +67,7 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string } func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error { + log.Println("Set app instance, tracking method: " + trackingMethod) switch trackingMethod { case TrackingMethodLabel: return argokube.SetAppInstanceLabel(un, key, val) From 4b3e7fcc4705dbc5df91c0f470db8ed46a129a1e Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Tue, 21 Sep 2021 15:37:08 +0300 Subject: [PATCH 10/32] rewrite way how to set label Signed-off-by: pashavictorovich --- util/argo/resource_tracking.go | 25 +++---------------------- util/kube/kube.go | 20 ++++++++++++++++---- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index 0d4248142c027..a4ef1c827fee1 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -1,10 +1,6 @@ package argo import ( - "encoding/json" - "log" - - "github.com/argoproj/gitops-engine/pkg/utils/kube" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "github.com/argoproj/argo-cd/v2/util/settings" @@ -41,33 +37,18 @@ func GetTrackingMethod(settingsMgr *settings.SettingsManager) v1alpha1.TrackingM return ToTrackingMethod(tm) } -// TODO: Remove after https://github.com/argoproj/gitops-engine/pull/330 get merged -func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string { - if annotations := un.GetAnnotations(); annotations != nil { - return annotations[key] - } - return "" -} - func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string { - log.Println("Get app name, tracking method: " + trackingMethod) switch trackingMethod { case TrackingMethodLabel: - return kube.GetAppInstanceLabel(un, key) + return argokube.GetAppInstanceLabel(un, key) case TrackingMethodAnnotation: - log.Println("Choose annotation strategy") - un2, _ := json.Marshal(un) - - log.Println("resource: " + string(un2)) - - return GetAppInstanceAnnotation(un, key) + return argokube.GetAppInstanceAnnotation(un, key) default: - return kube.GetAppInstanceLabel(un, key) + return argokube.GetAppInstanceLabel(un, key) } } func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error { - log.Println("Set app instance, tracking method: " + trackingMethod) switch trackingMethod { case TrackingMethodLabel: return argokube.SetAppInstanceLabel(un, key, val) diff --git a/util/kube/kube.go b/util/kube/kube.go index b8b09bc6cdd04..6f2c87814153f 100644 --- a/util/kube/kube.go +++ b/util/kube/kube.go @@ -102,9 +102,21 @@ func SetAppInstanceAnnotation(target *unstructured.Unstructured, key, val string } annotations[key] = val target.SetAnnotations(annotations) - if key != common.LabelKeyLegacyApplicationName { - // we no longer label the pod template sub resources in v0.11 - return nil - } return nil } + +// GetAppInstanceAnnotation returns the application instance name from annotation +func GetAppInstanceAnnotation(un *unstructured.Unstructured, key string) string { + if annotations := un.GetAnnotations(); annotations != nil { + return annotations[key] + } + return "" +} + +// GetAppInstanceLabel returns the application instance name from labels +func GetAppInstanceLabel(un *unstructured.Unstructured, key string) string { + if labels := un.GetLabels(); labels != nil { + return labels[key] + } + return "" +} From e84d14f8de04878c4de3df19475a0c0ca2f0b24b Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Tue, 21 Sep 2021 17:28:02 +0300 Subject: [PATCH 11/32] rewrite way how to set label Signed-off-by: pashavictorovich --- assets/swagger.json | 4 + manifests/core-install.yaml | 6 + manifests/crds/application-crd.yaml | 6 + manifests/ha/install.yaml | 6 + manifests/install.yaml | 6 + pkg/apis/application/v1alpha1/generated.pb.go | 882 +++++++++--------- pkg/apis/application/v1alpha1/generated.proto | 4 + .../application/v1alpha1/openapi_generated.go | 10 +- reposerver/apiclient/repository.pb.go | 283 ++++-- reposerver/repository/repository.proto | 1 + 10 files changed, 698 insertions(+), 510 deletions(-) diff --git a/assets/swagger.json b/assets/swagger.json index aa2e7f2e4dc90..99b465e0ae6c3 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -5038,6 +5038,10 @@ }, "syncPolicy": { "$ref": "#/definitions/v1alpha1SyncPolicy" + }, + "trackingMethod": { + "description": "Project is a reference to the project this application belongs to.\nThe empty string means that application belongs to the 'default' project.", + "type": "string" } } }, diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 8fa27175a712b..beeaef7d7ae7a 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -792,10 +792,16 @@ spec: type: string type: array type: object + trackingMethod: + description: Project is a reference to the project this application + belongs to. The empty string means that application belongs to the + 'default' project. + type: string required: - destination - project - source + - trackingMethod type: object status: description: ApplicationStatus contains status information for the application diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 94053a7934fda..ab6fe178db188 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -791,10 +791,16 @@ spec: type: string type: array type: object + trackingMethod: + description: Project is a reference to the project this application + belongs to. The empty string means that application belongs to the + 'default' project. + type: string required: - destination - project - source + - trackingMethod type: object status: description: ApplicationStatus contains status information for the application diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index cac3d0d5ef202..4c4c5d9d1d1e6 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -792,10 +792,16 @@ spec: type: string type: array type: object + trackingMethod: + description: Project is a reference to the project this application + belongs to. The empty string means that application belongs to the + 'default' project. + type: string required: - destination - project - source + - trackingMethod type: object status: description: ApplicationStatus contains status information for the application diff --git a/manifests/install.yaml b/manifests/install.yaml index b46cfd107e0bb..2c6427300d0dd 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -792,10 +792,16 @@ spec: type: string type: array type: object + trackingMethod: + description: Project is a reference to the project this application + belongs to. The empty string means that application belongs to the + 'default' project. + type: string required: - destination - project - source + - trackingMethod type: object status: description: ApplicationStatus contains status information for the application diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index c33a9564d47c1..dabf840e1102e 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -2633,427 +2633,429 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 6715 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x24, 0xd9, - 0x55, 0xf0, 0x56, 0xb7, 0x7f, 0xba, 0x8f, 0x7f, 0x66, 0x7c, 0x67, 0x76, 0xd6, 0xf1, 0xb7, 0x19, - 0x8f, 0x6a, 0x95, 0x64, 0xbf, 0x2f, 0x89, 0xfd, 0xed, 0xb0, 0x84, 0x25, 0x1b, 0x36, 0xb8, 0x6d, - 0xcf, 0x8c, 0x67, 0x3c, 0xb6, 0xe7, 0xd8, 0x33, 0x43, 0x7e, 0x08, 0x5b, 0xae, 0xbe, 0xdd, 0x5d, - 0xe3, 0xee, 0xaa, 0xde, 0xaa, 0x6a, 0x8f, 0x3b, 0x21, 0x7f, 0x28, 0x90, 0x15, 0xf9, 0xd9, 0x28, - 0xc9, 0x43, 0x22, 0x21, 0x08, 0x3f, 0x42, 0xe2, 0x21, 0x02, 0x9e, 0x00, 0x21, 0x1e, 0xc8, 0x53, - 0x10, 0x12, 0x44, 0x02, 0x25, 0x81, 0x08, 0x93, 0x0c, 0x41, 0x01, 0x24, 0x40, 0x40, 0x5e, 0x98, - 0x27, 0x74, 0x7f, 0xea, 0xde, 0x5b, 0xd5, 0xdd, 0x63, 0x7b, 0xba, 0x66, 0x12, 0x45, 0xbc, 0x75, - 0x9d, 0x73, 0xee, 0x39, 0xe7, 0xfe, 0x9d, 0x7b, 0xee, 0xb9, 0xe7, 0xde, 0x86, 0xf5, 0xba, 0x17, - 0x37, 0x3a, 0xbb, 0x0b, 0x6e, 0xd0, 0x5a, 0x74, 0xc2, 0x7a, 0xd0, 0x0e, 0x83, 0x3b, 0xfc, 0xc7, - 0x5b, 0xdd, 0xea, 0xe2, 0xfe, 0xc5, 0xc5, 0xf6, 0x5e, 0x7d, 0xd1, 0x69, 0x7b, 0xd1, 0xa2, 0xd3, - 0x6e, 0x37, 0x3d, 0xd7, 0x89, 0xbd, 0xc0, 0x5f, 0xdc, 0x7f, 0xce, 0x69, 0xb6, 0x1b, 0xce, 0x73, - 0x8b, 0x75, 0xea, 0xd3, 0xd0, 0x89, 0x69, 0x75, 0xa1, 0x1d, 0x06, 0x71, 0x40, 0xde, 0xa1, 0xb9, - 0x2d, 0x24, 0xdc, 0xf8, 0x8f, 0x9f, 0x73, 0xab, 0x0b, 0xfb, 0x17, 0x17, 0xda, 0x7b, 0xf5, 0x05, - 0xc6, 0x6d, 0xc1, 0xe0, 0xb6, 0x90, 0x70, 0x9b, 0x7b, 0xab, 0xa1, 0x4b, 0x3d, 0xa8, 0x07, 0x8b, - 0x9c, 0xe9, 0x6e, 0xa7, 0xc6, 0xbf, 0xf8, 0x07, 0xff, 0x25, 0x84, 0xcd, 0xd9, 0x7b, 0x2f, 0x44, - 0x0b, 0x5e, 0xc0, 0xd4, 0x5b, 0x74, 0x83, 0x90, 0x2e, 0xee, 0xf7, 0x28, 0x34, 0xf7, 0xbc, 0xa6, - 0x69, 0x39, 0x6e, 0xc3, 0xf3, 0x69, 0xd8, 0xd5, 0x75, 0x6a, 0xd1, 0xd8, 0xe9, 0x57, 0x6a, 0x71, - 0x50, 0xa9, 0xb0, 0xe3, 0xc7, 0x5e, 0x8b, 0xf6, 0x14, 0x78, 0xdb, 0x51, 0x05, 0x22, 0xb7, 0x41, - 0x5b, 0x4e, 0xb6, 0x9c, 0xfd, 0x0a, 0x4c, 0x2d, 0xdd, 0xde, 0x5e, 0xea, 0xc4, 0x8d, 0xe5, 0xc0, - 0xaf, 0x79, 0x75, 0xf2, 0xe3, 0x30, 0xe1, 0x36, 0x3b, 0x51, 0x4c, 0xc3, 0x0d, 0xa7, 0x45, 0x67, - 0xad, 0x0b, 0xd6, 0xb3, 0xe5, 0xca, 0x99, 0xaf, 0x1e, 0xce, 0x3f, 0x71, 0xef, 0x70, 0x7e, 0x62, - 0x59, 0xa3, 0xd0, 0xa4, 0x23, 0xff, 0x17, 0xc6, 0xc3, 0xa0, 0x49, 0x97, 0x70, 0x63, 0xb6, 0xc0, - 0x8b, 0x9c, 0x92, 0x45, 0xc6, 0x51, 0x80, 0x31, 0xc1, 0xdb, 0x5f, 0x2f, 0x00, 0x2c, 0xb5, 0xdb, - 0x5b, 0x61, 0x70, 0x87, 0xba, 0x31, 0x79, 0x19, 0x4a, 0xac, 0x15, 0xaa, 0x4e, 0xec, 0x70, 0x69, - 0x13, 0x17, 0xff, 0xff, 0x82, 0xa8, 0xcc, 0x82, 0x59, 0x19, 0xdd, 0x73, 0x8c, 0x7a, 0x61, 0xff, - 0xb9, 0x85, 0xcd, 0x5d, 0x56, 0xfe, 0x3a, 0x8d, 0x9d, 0x0a, 0x91, 0xc2, 0x40, 0xc3, 0x50, 0x71, - 0x25, 0x3e, 0x8c, 0x44, 0x6d, 0xea, 0x72, 0xc5, 0x26, 0x2e, 0xae, 0x2f, 0x0c, 0x33, 0x44, 0x16, - 0xb4, 0xe6, 0xdb, 0x6d, 0xea, 0x56, 0x26, 0xa5, 0xe4, 0x11, 0xf6, 0x85, 0x5c, 0x0e, 0xd9, 0x87, - 0xb1, 0x28, 0x76, 0xe2, 0x4e, 0x34, 0x5b, 0xe4, 0x12, 0x37, 0x72, 0x93, 0xc8, 0xb9, 0x56, 0xa6, - 0xa5, 0xcc, 0x31, 0xf1, 0x8d, 0x52, 0x9a, 0xfd, 0x77, 0x16, 0x4c, 0x6b, 0xe2, 0x75, 0x2f, 0x8a, - 0xc9, 0x7b, 0x7b, 0x1a, 0x77, 0xe1, 0x78, 0x8d, 0xcb, 0x4a, 0xf3, 0xa6, 0x3d, 0x2d, 0x85, 0x95, - 0x12, 0x88, 0xd1, 0xb0, 0x2d, 0x18, 0xf5, 0x62, 0xda, 0x8a, 0x66, 0x0b, 0x17, 0x8a, 0xcf, 0x4e, - 0x5c, 0xbc, 0x92, 0x57, 0x3d, 0x2b, 0x53, 0x52, 0xe8, 0xe8, 0x1a, 0x63, 0x8f, 0x42, 0x8a, 0xfd, - 0x7d, 0x30, 0xeb, 0xc7, 0x1a, 0x9c, 0x3c, 0x07, 0x13, 0x51, 0xd0, 0x09, 0x5d, 0x8a, 0xb4, 0x1d, - 0x44, 0xb3, 0xd6, 0x85, 0x22, 0x1b, 0x7a, 0x6c, 0xa4, 0x6e, 0x6b, 0x30, 0x9a, 0x34, 0xe4, 0xd3, + // 6743 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x6c, 0x24, 0xd9, + 0x55, 0xf0, 0x56, 0xb7, 0x1f, 0xdd, 0xc7, 0x8f, 0x19, 0xdf, 0x99, 0x9d, 0x75, 0xfc, 0x6d, 0xc6, + 0xa3, 0x5a, 0x25, 0xd9, 0xef, 0x4b, 0x62, 0x7f, 0x3b, 0x2c, 0x61, 0xc9, 0x86, 0x0d, 0x6e, 0x7b, + 0x1e, 0x9e, 0xf1, 0x6b, 0x8e, 0x3d, 0x33, 0xe4, 0x41, 0xd8, 0x72, 0xf5, 0xed, 0xee, 0x1a, 0x77, + 0x57, 0xf5, 0x56, 0x55, 0x7b, 0xdc, 0x09, 0x79, 0xa1, 0x40, 0x56, 0xe4, 0xb1, 0x51, 0xc2, 0x8f, + 0x44, 0x42, 0x10, 0x1e, 0x42, 0xe2, 0x47, 0x04, 0xfc, 0x02, 0x84, 0xf8, 0x41, 0x7e, 0x05, 0x21, + 0x41, 0x24, 0x50, 0x12, 0x88, 0x30, 0xc9, 0x10, 0x08, 0x20, 0x01, 0x02, 0xf2, 0x87, 0xf9, 0x85, + 0xee, 0xa3, 0xee, 0xbd, 0x55, 0xdd, 0x3d, 0xb6, 0xa7, 0x6b, 0x26, 0x51, 0xc4, 0x3f, 0xf7, 0x39, + 0xa7, 0xce, 0x39, 0xf7, 0x75, 0xee, 0x39, 0xe7, 0x9e, 0x7b, 0x0d, 0x6b, 0x75, 0x2f, 0x6e, 0x74, + 0x76, 0x17, 0xdc, 0xa0, 0xb5, 0xe8, 0x84, 0xf5, 0xa0, 0x1d, 0x06, 0x77, 0xf8, 0x1f, 0x6f, 0x75, + 0xab, 0x8b, 0xfb, 0x17, 0x17, 0xdb, 0x7b, 0xf5, 0x45, 0xa7, 0xed, 0x45, 0x8b, 0x4e, 0xbb, 0xdd, + 0xf4, 0x5c, 0x27, 0xf6, 0x02, 0x7f, 0x71, 0xff, 0x39, 0xa7, 0xd9, 0x6e, 0x38, 0xcf, 0x2d, 0xd6, + 0xa9, 0x4f, 0x43, 0x27, 0xa6, 0xd5, 0x85, 0x76, 0x18, 0xc4, 0x01, 0x79, 0x87, 0xe6, 0xb6, 0x90, + 0x70, 0xe3, 0x7f, 0xfc, 0x8c, 0x5b, 0x5d, 0xd8, 0xbf, 0xb8, 0xd0, 0xde, 0xab, 0x2f, 0x30, 0x6e, + 0x0b, 0x06, 0xb7, 0x85, 0x84, 0xdb, 0xdc, 0x5b, 0x0d, 0x5d, 0xea, 0x41, 0x3d, 0x58, 0xe4, 0x4c, + 0x77, 0x3b, 0x35, 0xfe, 0x8b, 0xff, 0xe0, 0x7f, 0x09, 0x61, 0x73, 0xf6, 0xde, 0x0b, 0xd1, 0x82, + 0x17, 0x30, 0xf5, 0x16, 0xdd, 0x20, 0xa4, 0x8b, 0xfb, 0x3d, 0x0a, 0xcd, 0x3d, 0xaf, 0x69, 0x5a, + 0x8e, 0xdb, 0xf0, 0x7c, 0x1a, 0x76, 0x75, 0x9b, 0x5a, 0x34, 0x76, 0xfa, 0x7d, 0xb5, 0x38, 0xe8, + 0xab, 0xb0, 0xe3, 0xc7, 0x5e, 0x8b, 0xf6, 0x7c, 0xf0, 0xb6, 0xa3, 0x3e, 0x88, 0xdc, 0x06, 0x6d, + 0x39, 0xd9, 0xef, 0xec, 0x57, 0x60, 0x6a, 0xe9, 0xf6, 0xf6, 0x52, 0x27, 0x6e, 0x2c, 0x07, 0x7e, + 0xcd, 0xab, 0x93, 0x1f, 0x85, 0x09, 0xb7, 0xd9, 0x89, 0x62, 0x1a, 0x6e, 0x38, 0x2d, 0x3a, 0x6b, + 0x5d, 0xb0, 0x9e, 0x2d, 0x57, 0xce, 0x7c, 0xe5, 0x70, 0xfe, 0x89, 0x7b, 0x87, 0xf3, 0x13, 0xcb, + 0x1a, 0x85, 0x26, 0x1d, 0xf9, 0xbf, 0x30, 0x1e, 0x06, 0x4d, 0xba, 0x84, 0x1b, 0xb3, 0x05, 0xfe, + 0xc9, 0x29, 0xf9, 0xc9, 0x38, 0x0a, 0x30, 0x26, 0x78, 0xfb, 0x6b, 0x05, 0x80, 0xa5, 0x76, 0x7b, + 0x2b, 0x0c, 0xee, 0x50, 0x37, 0x26, 0x2f, 0x43, 0x89, 0xf5, 0x42, 0xd5, 0x89, 0x1d, 0x2e, 0x6d, + 0xe2, 0xe2, 0xff, 0x5f, 0x10, 0x8d, 0x59, 0x30, 0x1b, 0xa3, 0x47, 0x8e, 0x51, 0x2f, 0xec, 0x3f, + 0xb7, 0xb0, 0xb9, 0xcb, 0xbe, 0x5f, 0xa7, 0xb1, 0x53, 0x21, 0x52, 0x18, 0x68, 0x18, 0x2a, 0xae, + 0xc4, 0x87, 0x91, 0xa8, 0x4d, 0x5d, 0xae, 0xd8, 0xc4, 0xc5, 0xb5, 0x85, 0x61, 0xa6, 0xc8, 0x82, + 0xd6, 0x7c, 0xbb, 0x4d, 0xdd, 0xca, 0xa4, 0x94, 0x3c, 0xc2, 0x7e, 0x21, 0x97, 0x43, 0xf6, 0x61, + 0x2c, 0x8a, 0x9d, 0xb8, 0x13, 0xcd, 0x16, 0xb9, 0xc4, 0x8d, 0xdc, 0x24, 0x72, 0xae, 0x95, 0x69, + 0x29, 0x73, 0x4c, 0xfc, 0x46, 0x29, 0xcd, 0xfe, 0x5b, 0x0b, 0xa6, 0x35, 0xf1, 0x9a, 0x17, 0xc5, + 0xe4, 0xbd, 0x3d, 0x9d, 0xbb, 0x70, 0xbc, 0xce, 0x65, 0x5f, 0xf3, 0xae, 0x3d, 0x2d, 0x85, 0x95, + 0x12, 0x88, 0xd1, 0xb1, 0x2d, 0x18, 0xf5, 0x62, 0xda, 0x8a, 0x66, 0x0b, 0x17, 0x8a, 0xcf, 0x4e, + 0x5c, 0xbc, 0x9a, 0x57, 0x3b, 0x2b, 0x53, 0x52, 0xe8, 0xe8, 0x2a, 0x63, 0x8f, 0x42, 0x8a, 0xfd, + 0x3d, 0x30, 0xdb, 0xc7, 0x3a, 0x9c, 0x3c, 0x07, 0x13, 0x51, 0xd0, 0x09, 0x5d, 0x8a, 0xb4, 0x1d, + 0x44, 0xb3, 0xd6, 0x85, 0x22, 0x9b, 0x7a, 0x6c, 0xa6, 0x6e, 0x6b, 0x30, 0x9a, 0x34, 0xe4, 0xd3, 0x16, 0x4c, 0x56, 0x69, 0x14, 0x7b, 0x3e, 0x97, 0x9f, 0x28, 0xbf, 0x33, 0xb4, 0xf2, 0x09, 0x70, - 0x45, 0x33, 0xaf, 0x9c, 0x95, 0x15, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3, 0x19, 0x57, 0xa5, - 0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0xcd, 0xc7, 0x8c, 0x31, 0xe3, 0x56, 0x34, 0x0a, 0x4d, 0x3a, 0xe2, - 0xc3, 0x28, 0x9b, 0x51, 0xd1, 0xec, 0x08, 0xd7, 0x7f, 0x6d, 0x38, 0xfd, 0x65, 0xa3, 0xb2, 0xc9, - 0xaa, 0x5b, 0x9f, 0x7d, 0x45, 0x28, 0xc4, 0x90, 0x4f, 0x59, 0x30, 0x2b, 0x67, 0x3c, 0x52, 0xd1, - 0xa0, 0xb7, 0x1b, 0x5e, 0x4c, 0x9b, 0x5e, 0x14, 0xcf, 0x8e, 0x72, 0x1d, 0x16, 0x8f, 0x37, 0xb6, - 0x2e, 0x87, 0x41, 0xa7, 0x7d, 0xcd, 0xf3, 0xab, 0x95, 0x0b, 0x52, 0xd2, 0xec, 0xf2, 0x00, 0xc6, - 0x38, 0x50, 0x24, 0xf9, 0x9c, 0x05, 0x73, 0xbe, 0xd3, 0xa2, 0x51, 0xdb, 0x61, 0x5d, 0x2b, 0xd0, - 0x95, 0xa6, 0xe3, 0xee, 0x71, 0x8d, 0xc6, 0x1e, 0x4e, 0x23, 0x5b, 0x6a, 0x34, 0xb7, 0x31, 0x90, - 0x35, 0x3e, 0x40, 0x2c, 0xf9, 0x4d, 0x0b, 0x66, 0x82, 0xb0, 0xdd, 0x70, 0x7c, 0x5a, 0x4d, 0xb0, - 0xd1, 0xec, 0x38, 0x9f, 0x7a, 0xef, 0x1b, 0xae, 0x8b, 0x36, 0xb3, 0x6c, 0xaf, 0x07, 0xbe, 0x17, - 0x07, 0xe1, 0x36, 0x8d, 0x63, 0xcf, 0xaf, 0x47, 0x95, 0x27, 0xef, 0x1d, 0xce, 0xcf, 0xf4, 0x50, - 0x61, 0xaf, 0x3e, 0xe4, 0x03, 0x30, 0x11, 0x75, 0x7d, 0xf7, 0xb6, 0xe7, 0x57, 0x83, 0xbb, 0xd1, - 0x6c, 0x29, 0x8f, 0xe9, 0xbb, 0xad, 0x18, 0xca, 0x09, 0xa8, 0x05, 0xa0, 0x29, 0xad, 0x7f, 0xc7, - 0xe9, 0xa1, 0x54, 0xce, 0xbb, 0xe3, 0xf4, 0x60, 0x7a, 0x80, 0x58, 0xf2, 0x71, 0x0b, 0xa6, 0x22, - 0xaf, 0xee, 0x3b, 0x71, 0x27, 0xa4, 0xd7, 0x68, 0x37, 0x9a, 0x05, 0xae, 0xc8, 0xd5, 0x21, 0x5b, - 0xc5, 0x60, 0x59, 0x79, 0x52, 0xea, 0x38, 0x65, 0x42, 0x23, 0x4c, 0xcb, 0xed, 0x37, 0xd1, 0xf4, - 0xb0, 0x9e, 0xc8, 0x77, 0xa2, 0xe9, 0x41, 0x3d, 0x50, 0xa4, 0xfd, 0x67, 0x05, 0x38, 0x9d, 0x5d, - 0x83, 0xc8, 0x6f, 0x5b, 0x70, 0xea, 0xce, 0xdd, 0x78, 0x27, 0xd8, 0xa3, 0x7e, 0x54, 0xe9, 0x32, - 0x4b, 0xc1, 0xad, 0xef, 0xc4, 0x45, 0x37, 0xdf, 0xd5, 0x6e, 0xe1, 0x6a, 0x5a, 0xca, 0xaa, 0x1f, - 0x87, 0xdd, 0xca, 0x53, 0xb2, 0x3e, 0xa7, 0xae, 0xde, 0xde, 0x31, 0xb1, 0x98, 0x55, 0x6a, 0xee, - 0x13, 0x16, 0x9c, 0xed, 0xc7, 0x82, 0x9c, 0x86, 0xe2, 0x1e, 0xed, 0x0a, 0x07, 0x07, 0xd9, 0x4f, - 0xf2, 0xb3, 0x30, 0xba, 0xef, 0x34, 0x3b, 0x54, 0x3a, 0x0a, 0x97, 0x87, 0xab, 0x88, 0xd2, 0x0c, - 0x05, 0xd7, 0xb7, 0x17, 0x5e, 0xb0, 0xec, 0xbf, 0x2c, 0xc2, 0x84, 0xb1, 0x54, 0x3c, 0x06, 0xe7, - 0x27, 0x48, 0x39, 0x3f, 0xd7, 0x73, 0x5b, 0xe5, 0x06, 0x7a, 0x3f, 0x77, 0x33, 0xde, 0xcf, 0x66, - 0x7e, 0x22, 0x1f, 0xe8, 0xfe, 0x90, 0x18, 0xca, 0x41, 0x9b, 0x39, 0xb7, 0x6c, 0x15, 0x1d, 0xc9, - 0xa3, 0x0b, 0x37, 0x13, 0x76, 0x95, 0xa9, 0x7b, 0x87, 0xf3, 0x65, 0xf5, 0x89, 0x5a, 0x90, 0xfd, - 0x0d, 0x0b, 0xce, 0x1a, 0x3a, 0x2e, 0x07, 0x7e, 0xd5, 0xe3, 0x5d, 0x7b, 0x01, 0x46, 0xe2, 0x6e, - 0x3b, 0xf1, 0xa0, 0x55, 0x4b, 0xed, 0x74, 0xdb, 0x14, 0x39, 0x86, 0xf9, 0xcc, 0x2d, 0x1a, 0x45, - 0x4e, 0x9d, 0x66, 0x7d, 0xe6, 0xeb, 0x02, 0x8c, 0x09, 0x9e, 0x84, 0x40, 0x9a, 0x4e, 0x14, 0xef, - 0x84, 0x8e, 0x1f, 0x71, 0xf6, 0x3b, 0x5e, 0x8b, 0xca, 0x06, 0xfe, 0x7f, 0xc7, 0x1b, 0x31, 0xac, - 0x44, 0xe5, 0xdc, 0xbd, 0xc3, 0x79, 0xb2, 0xde, 0xc3, 0x09, 0xfb, 0x70, 0xb7, 0x3f, 0x67, 0xc1, - 0xb9, 0xfe, 0x6e, 0x0d, 0x79, 0x23, 0x8c, 0x45, 0x34, 0xdc, 0xa7, 0xa1, 0xac, 0x9d, 0xee, 0x12, - 0x0e, 0x45, 0x89, 0x25, 0x8b, 0x50, 0x56, 0x26, 0x57, 0xd6, 0x71, 0x46, 0x92, 0x96, 0xb5, 0x9d, - 0xd6, 0x34, 0xac, 0xd1, 0xd8, 0x87, 0x74, 0x82, 0x54, 0xa3, 0xf1, 0xfd, 0x06, 0xc7, 0xd8, 0x7f, - 0x6f, 0xc1, 0x29, 0x43, 0xab, 0xc7, 0xe0, 0xe5, 0xfa, 0x69, 0x2f, 0x77, 0x2d, 0xb7, 0xf1, 0x3c, - 0xc0, 0xcd, 0xfd, 0xca, 0x18, 0xcc, 0x98, 0xa3, 0x9e, 0x9b, 0x63, 0xbe, 0xc1, 0xa2, 0xed, 0xe0, - 0x26, 0xae, 0xcb, 0x36, 0xd7, 0x1b, 0x2c, 0x01, 0xc6, 0x04, 0xcf, 0x1a, 0xb1, 0xed, 0xc4, 0x0d, - 0xd9, 0xe0, 0xaa, 0x11, 0xb7, 0x9c, 0xb8, 0x81, 0x1c, 0x43, 0x5e, 0x82, 0xe9, 0xd8, 0x09, 0xeb, - 0x34, 0x46, 0xba, 0xef, 0x45, 0xc9, 0x7c, 0x29, 0x57, 0xce, 0x49, 0xda, 0xe9, 0x9d, 0x14, 0x16, - 0x33, 0xd4, 0xe4, 0x15, 0x18, 0x69, 0xd0, 0x66, 0x4b, 0xfa, 0x35, 0xdb, 0xf9, 0xcd, 0x70, 0x5e, - 0xd7, 0x2b, 0xb4, 0xd9, 0xaa, 0x94, 0x98, 0xca, 0xec, 0x17, 0x72, 0x51, 0xe4, 0x17, 0x2d, 0x28, - 0xef, 0x75, 0xa2, 0x38, 0x68, 0x79, 0xef, 0xa7, 0xb3, 0x25, 0x2e, 0xf8, 0x67, 0x72, 0x16, 0x7c, - 0x2d, 0xe1, 0x2f, 0xe6, 0xbb, 0xfa, 0x44, 0x2d, 0x99, 0x7c, 0x10, 0xc6, 0xf7, 0xa2, 0xc0, 0xf7, - 0x29, 0xf3, 0x54, 0x98, 0x12, 0xb7, 0xf2, 0x56, 0x42, 0x70, 0xaf, 0x4c, 0xb0, 0xbe, 0x95, 0x1f, - 0x98, 0xc8, 0xe4, 0xcd, 0x50, 0xf5, 0x42, 0xea, 0xc6, 0x41, 0xd8, 0x9d, 0x85, 0x47, 0xd2, 0x0c, - 0x2b, 0x09, 0x7f, 0xd1, 0x0c, 0xea, 0x13, 0xb5, 0x64, 0xd2, 0x85, 0xb1, 0x76, 0xb3, 0x53, 0xf7, - 0xfc, 0xd9, 0x09, 0xae, 0xc3, 0xcd, 0x9c, 0x75, 0xd8, 0xe2, 0xcc, 0x2b, 0xc0, 0x8c, 0x8a, 0xf8, - 0x8d, 0x52, 0x20, 0x79, 0x06, 0x46, 0xdd, 0x86, 0x13, 0xc6, 0xb3, 0x93, 0x7c, 0xcc, 0xaa, 0x49, - 0xb4, 0xcc, 0x80, 0x28, 0x70, 0xf6, 0xaf, 0x17, 0x60, 0x6e, 0x70, 0xc5, 0xc4, 0x6c, 0x72, 0x3b, - 0x61, 0x24, 0xec, 0x73, 0xc9, 0x9c, 0x4d, 0x1c, 0x8c, 0x09, 0x9e, 0x7c, 0xd4, 0x82, 0xf1, 0x3b, - 0xb2, 0xc7, 0x0b, 0x8f, 0xa4, 0xc7, 0xaf, 0xca, 0x1e, 0x57, 0x3a, 0x5c, 0x4d, 0x7a, 0x5d, 0xca, - 0x65, 0xea, 0xd2, 0x03, 0xb7, 0xd9, 0xa9, 0x26, 0x96, 0x51, 0x91, 0xae, 0x0a, 0x30, 0x26, 0x78, - 0x46, 0xea, 0xf9, 0x82, 0x74, 0x24, 0x4d, 0xba, 0xe6, 0x4b, 0x52, 0x89, 0xb7, 0xbf, 0x5b, 0x84, - 0x27, 0xfb, 0x4e, 0x3e, 0xb2, 0x00, 0xc0, 0x7d, 0x96, 0x4b, 0x1e, 0xdb, 0x60, 0x8a, 0x5d, 0xf5, - 0x34, 0x73, 0x31, 0x6e, 0x29, 0x28, 0x1a, 0x14, 0xe4, 0xc3, 0x00, 0x6d, 0x27, 0x74, 0x5a, 0x34, - 0xa6, 0x61, 0x62, 0x27, 0xaf, 0x0d, 0xd7, 0x4a, 0x4c, 0x8f, 0xad, 0x84, 0xa7, 0xf6, 0x71, 0x14, - 0x28, 0x42, 0x43, 0x24, 0xdb, 0x43, 0x87, 0xb4, 0x49, 0x9d, 0x88, 0x6e, 0xe8, 0xe5, 0x43, 0xed, - 0xa1, 0x51, 0xa3, 0xd0, 0xa4, 0x63, 0xeb, 0x18, 0xaf, 0x45, 0x24, 0xdb, 0x4a, 0xad, 0x63, 0xbc, - 0x9e, 0x11, 0x4a, 0x2c, 0x79, 0xcd, 0x82, 0xe9, 0x9a, 0xd7, 0xa4, 0x5a, 0xba, 0xdc, 0xf1, 0x6e, - 0x0e, 0x5f, 0xc9, 0x4b, 0x26, 0x5f, 0x6d, 0x81, 0x53, 0xe0, 0x08, 0x33, 0xe2, 0x59, 0x37, 0xef, - 0xd3, 0x90, 0x9b, 0xee, 0xb1, 0x74, 0x37, 0xdf, 0x12, 0x60, 0x4c, 0xf0, 0xf6, 0x17, 0x0b, 0x30, - 0x3b, 0x68, 0xcc, 0x91, 0x88, 0x8d, 0xac, 0xf8, 0x96, 0x13, 0x46, 0xd2, 0x7d, 0x1f, 0x72, 0x17, - 0x28, 0xf9, 0xde, 0x72, 0x42, 0x73, 0x8c, 0x72, 0x01, 0x98, 0x48, 0x22, 0x77, 0x60, 0x24, 0x6e, - 0x3a, 0x39, 0x85, 0x8d, 0x0c, 0x89, 0xda, 0xc9, 0x5a, 0x5f, 0x8a, 0x90, 0xcb, 0x20, 0x4f, 0xc3, - 0x48, 0xd3, 0xdb, 0x65, 0xce, 0x28, 0x1b, 0xc4, 0x7c, 0x55, 0x59, 0xf7, 0x76, 0x23, 0xe4, 0x50, - 0xfb, 0xeb, 0x56, 0x9f, 0xb6, 0x91, 0x46, 0x97, 0x0d, 0x2a, 0xea, 0xef, 0x7b, 0x61, 0xe0, 0xb7, - 0xa8, 0x1f, 0x67, 0x43, 0xa1, 0xab, 0x1a, 0x85, 0x26, 0x1d, 0xf9, 0x05, 0xab, 0xcf, 0x6c, 0x18, - 0x32, 0x06, 0x28, 0x55, 0x3a, 0xf6, 0x84, 0xb0, 0xff, 0x7d, 0xac, 0x8f, 0xfd, 0x53, 0x0b, 0x1a, - 0xb9, 0x08, 0xc0, 0xbc, 0xa9, 0xad, 0x90, 0xd6, 0xbc, 0x03, 0x59, 0x33, 0xc5, 0x72, 0x43, 0x61, - 0xd0, 0xa0, 0x4a, 0xca, 0x6c, 0x77, 0x6a, 0xac, 0x4c, 0xa1, 0xb7, 0x8c, 0xc0, 0xa0, 0x41, 0x45, - 0x9e, 0x87, 0x31, 0xaf, 0xe5, 0xd4, 0x69, 0xd2, 0xfe, 0x4f, 0xb3, 0xc9, 0xb5, 0xc6, 0x21, 0xf7, - 0x0f, 0xe7, 0xa7, 0x95, 0x42, 0x1c, 0x84, 0x92, 0x96, 0xfc, 0x96, 0x05, 0x93, 0x6e, 0xd0, 0x6a, - 0x05, 0xfe, 0xba, 0xb3, 0x4b, 0x9b, 0x49, 0x88, 0xeb, 0xce, 0xa3, 0x5a, 0xee, 0x17, 0x96, 0x0d, - 0x61, 0x62, 0x83, 0xa9, 0x02, 0x77, 0x26, 0x0a, 0x53, 0x5a, 0x99, 0x73, 0x70, 0xf4, 0xc1, 0x73, - 0x90, 0xfc, 0xa1, 0x05, 0x33, 0xa2, 0xec, 0x92, 0xef, 0x07, 0xb1, 0x8c, 0x3c, 0x8a, 0x18, 0x55, - 0xf0, 0x88, 0xab, 0x65, 0x48, 0x14, 0x75, 0x7b, 0x9d, 0x54, 0x73, 0xa6, 0x07, 0x8f, 0xbd, 0x4a, - 0x92, 0xcb, 0x30, 0x53, 0x0b, 0x42, 0x97, 0x9a, 0x0d, 0xc1, 0x1d, 0xbf, 0x92, 0x66, 0x74, 0x29, - 0x4b, 0x80, 0xbd, 0x65, 0xc8, 0x2d, 0x38, 0x67, 0x00, 0xcd, 0x76, 0x28, 0x71, 0x6e, 0xe7, 0x25, - 0xb7, 0x73, 0x97, 0xfa, 0x52, 0xe1, 0x80, 0xd2, 0x73, 0xef, 0x84, 0x99, 0x9e, 0xfe, 0xeb, 0xb3, - 0xbb, 0x3f, 0x6b, 0xee, 0xee, 0xcb, 0xc6, 0xa6, 0x7c, 0x6e, 0x05, 0xce, 0xf5, 0x6f, 0xa9, 0x93, - 0x70, 0xb1, 0x7f, 0xd5, 0x82, 0xa7, 0x06, 0xb8, 0x31, 0x6a, 0x5b, 0x63, 0x0d, 0xda, 0xd6, 0x10, - 0x07, 0x8a, 0xd4, 0xdf, 0x97, 0xc6, 0xe2, 0xd2, 0x70, 0x23, 0x62, 0xd5, 0xdf, 0x17, 0x1d, 0x3d, - 0x7e, 0xef, 0x70, 0xbe, 0xb8, 0xea, 0xef, 0x23, 0xe3, 0x6d, 0x7f, 0x7e, 0x2c, 0xb5, 0x73, 0xda, - 0x4e, 0x36, 0xeb, 0x5c, 0x51, 0xb9, 0x6f, 0xda, 0xcc, 0x79, 0x2c, 0x1a, 0x3b, 0x43, 0x11, 0x82, - 0x97, 0xe2, 0xc8, 0x27, 0x2c, 0x1e, 0xf5, 0x4e, 0x76, 0x94, 0xd2, 0xb3, 0x7a, 0x34, 0x41, 0x78, - 0x33, 0x96, 0x9e, 0x00, 0xd1, 0x94, 0xce, 0x66, 0x72, 0x5b, 0x04, 0x9d, 0xb2, 0xfe, 0x55, 0x12, - 0x17, 0x4f, 0xf0, 0xe4, 0x00, 0x20, 0xea, 0xfa, 0xee, 0x56, 0xd0, 0xf4, 0xdc, 0xae, 0x0c, 0x33, - 0xe4, 0x10, 0x39, 0x15, 0xfc, 0x84, 0x93, 0xa5, 0xbf, 0xd1, 0x90, 0x45, 0xbe, 0x64, 0xc1, 0x8c, - 0x57, 0xf7, 0x83, 0x90, 0xae, 0x78, 0xb5, 0x1a, 0x0d, 0xa9, 0xef, 0xd2, 0xc4, 0x0f, 0xb9, 0x3d, - 0x9c, 0x06, 0x49, 0xd0, 0x6f, 0x2d, 0xcb, 0x5e, 0x4f, 0xf1, 0x1e, 0x14, 0xf6, 0x2a, 0x43, 0xaa, - 0x30, 0xe2, 0xf9, 0xb5, 0x40, 0x1a, 0xb6, 0xca, 0x70, 0x4a, 0xad, 0xf9, 0xb5, 0x40, 0xcf, 0x15, - 0xf6, 0x85, 0x9c, 0x3b, 0x59, 0x87, 0xb3, 0xa1, 0xdc, 0x89, 0x5e, 0xf1, 0x22, 0xe6, 0xcf, 0xaf, - 0x7b, 0x2d, 0x2f, 0xe6, 0x46, 0xa9, 0x58, 0x99, 0xbd, 0x77, 0x38, 0x7f, 0x16, 0xfb, 0xe0, 0xb1, - 0x6f, 0x29, 0xfb, 0xd5, 0x72, 0x7a, 0xbb, 0x2d, 0x82, 0x49, 0x1f, 0x84, 0x72, 0xa8, 0xc2, 0xf7, - 0xc2, 0x33, 0x5a, 0xcf, 0xa7, 0x8d, 0x65, 0x14, 0x4b, 0xc5, 0x41, 0x74, 0xa0, 0x5e, 0x4b, 0x64, - 0x1e, 0x12, 0xeb, 0x79, 0x39, 0x2d, 0x72, 0x18, 0x5f, 0x52, 0xaa, 0x0e, 0xd8, 0x75, 0x7d, 0x17, - 0xb9, 0x0c, 0x12, 0xc2, 0x58, 0x83, 0x3a, 0xcd, 0xb8, 0x21, 0xe3, 0x49, 0x57, 0x87, 0xf5, 0x69, - 0x19, 0xaf, 0x6c, 0xac, 0x4e, 0x40, 0x51, 0x4a, 0x22, 0x07, 0x30, 0xde, 0x10, 0x9d, 0x20, 0xd7, - 0xf6, 0xeb, 0xc3, 0x36, 0x6e, 0xaa, 0x67, 0xf5, 0xfc, 0x95, 0x00, 0x4c, 0xc4, 0x91, 0x5f, 0xb2, - 0x00, 0xdc, 0x24, 0x48, 0x97, 0x4c, 0x1f, 0xcc, 0xcd, 0xee, 0xa8, 0xf8, 0x9f, 0x76, 0x8d, 0x14, - 0x28, 0x42, 0x43, 0x32, 0x79, 0x19, 0x26, 0x43, 0xea, 0x06, 0xbe, 0xeb, 0x35, 0x69, 0x75, 0x29, - 0xe6, 0x6e, 0xfc, 0xc9, 0x82, 0x79, 0xa7, 0x99, 0x7f, 0x82, 0x06, 0x0f, 0x4c, 0x71, 0x24, 0xaf, - 0x5a, 0x30, 0xad, 0x02, 0x95, 0xac, 0x43, 0xa8, 0x0c, 0xd8, 0xac, 0xe7, 0x14, 0x16, 0xe5, 0x3c, - 0x2b, 0x84, 0x6d, 0x57, 0xd2, 0x30, 0xcc, 0xc8, 0x25, 0xef, 0x06, 0x08, 0x76, 0x79, 0x50, 0x90, - 0x55, 0xb5, 0x74, 0xe2, 0xaa, 0x4e, 0x8b, 0xf8, 0x76, 0xc2, 0x01, 0x0d, 0x6e, 0xe4, 0x1a, 0x80, - 0x98, 0x36, 0x3b, 0xdd, 0x36, 0xe5, 0x41, 0x99, 0x72, 0xe5, 0xcd, 0x49, 0xe3, 0x6f, 0x2b, 0xcc, - 0xfd, 0xc3, 0xf9, 0xde, 0xdd, 0x2e, 0x8f, 0xc6, 0x1a, 0xc5, 0xc9, 0x07, 0x60, 0x3c, 0xea, 0xb4, - 0x5a, 0x8e, 0x0a, 0xae, 0x6c, 0xe5, 0xb7, 0x22, 0x0a, 0xbe, 0x7a, 0x6c, 0x4a, 0x00, 0x26, 0x12, - 0x6d, 0x1f, 0x48, 0x2f, 0x3d, 0x79, 0x1e, 0x26, 0xe9, 0x41, 0x4c, 0x43, 0xdf, 0x69, 0xde, 0xc4, - 0xf5, 0x64, 0x3b, 0xce, 0x3b, 0x7f, 0xd5, 0x80, 0x63, 0x8a, 0x8a, 0xd8, 0xca, 0xf3, 0x2e, 0x70, - 0x7a, 0xd0, 0x9e, 0x77, 0xe2, 0x67, 0xdb, 0xff, 0x5d, 0x48, 0x79, 0x04, 0x3b, 0x21, 0xa5, 0x24, - 0x80, 0x51, 0x3f, 0xa8, 0x2a, 0xa3, 0x77, 0x35, 0x1f, 0xa3, 0xb7, 0x11, 0x54, 0x8d, 0x73, 0x65, - 0xf6, 0x15, 0xa1, 0x90, 0xc3, 0x0f, 0xde, 0x92, 0x13, 0x4a, 0x8e, 0x90, 0x4e, 0x50, 0x9e, 0x92, - 0xd5, 0xc1, 0xdb, 0xa6, 0x29, 0x08, 0xd3, 0x72, 0xc9, 0x1e, 0x8c, 0x36, 0x82, 0x28, 0x16, 0x7b, - 0x95, 0xa1, 0xbd, 0xb0, 0x2b, 0x41, 0x14, 0xf3, 0x25, 0x4c, 0x55, 0x9b, 0x41, 0x22, 0x14, 0x32, - 0xec, 0xef, 0x59, 0xa9, 0xe0, 0xcb, 0x6d, 0x27, 0x76, 0x1b, 0xab, 0xfb, 0x6c, 0xff, 0x78, 0x2d, - 0x75, 0x70, 0xf0, 0x13, 0xe6, 0xc1, 0xc1, 0xfd, 0xc3, 0xf9, 0x37, 0x0d, 0x4a, 0xf4, 0xb9, 0xcb, - 0x38, 0x2c, 0x70, 0x16, 0xc6, 0x19, 0xc3, 0x47, 0x2c, 0x98, 0x30, 0xd4, 0x93, 0x0b, 0x4a, 0x8e, - 0x31, 0x6c, 0xe5, 0x5c, 0x19, 0x40, 0x34, 0x45, 0xda, 0x9f, 0xb5, 0x60, 0xbc, 0xe2, 0xb8, 0x7b, - 0x41, 0xad, 0x46, 0xde, 0x02, 0xa5, 0x6a, 0x47, 0x1e, 0xd1, 0x88, 0xfa, 0xa9, 0xc8, 0xfb, 0x8a, - 0x84, 0xa3, 0xa2, 0x60, 0x63, 0xb8, 0xe6, 0xb8, 0x71, 0x10, 0x72, 0xb5, 0x8b, 0x62, 0x0c, 0x5f, - 0xe2, 0x10, 0x94, 0x18, 0xb6, 0x49, 0x6f, 0x39, 0x07, 0x49, 0xe1, 0x6c, 0xe4, 0xe7, 0xba, 0x46, - 0xa1, 0x49, 0x67, 0xff, 0x69, 0x19, 0xc6, 0xe5, 0x59, 0xe8, 0xb1, 0x4f, 0x33, 0x12, 0x2f, 0xbe, - 0x30, 0xd0, 0x8b, 0x8f, 0x60, 0xcc, 0xe5, 0x69, 0x54, 0x72, 0x29, 0x1d, 0x32, 0x06, 0x26, 0x15, - 0x14, 0x99, 0x59, 0x5a, 0x2d, 0xf1, 0x8d, 0x52, 0x14, 0xf9, 0x8c, 0x05, 0xa7, 0xdc, 0xc0, 0xf7, - 0xa9, 0xab, 0xed, 0xfc, 0x48, 0x1e, 0xa7, 0x7d, 0xcb, 0x69, 0xa6, 0xfa, 0xd0, 0x35, 0x83, 0xc0, - 0xac, 0x78, 0xf2, 0x22, 0x4c, 0x89, 0x36, 0xbb, 0x95, 0xda, 0x1f, 0xeb, 0xf3, 0x6f, 0x13, 0x89, - 0x69, 0x5a, 0xb2, 0x20, 0xe2, 0x0c, 0xfc, 0x40, 0x48, 0xec, 0x91, 0x65, 0xf0, 0x51, 0x9d, 0x18, - 0x45, 0x68, 0x50, 0x90, 0x10, 0x48, 0x48, 0x6b, 0x21, 0x8d, 0x1a, 0x48, 0x5f, 0xe9, 0xd0, 0x28, - 0xe6, 0x6b, 0xcc, 0xf8, 0xc3, 0x9d, 0x8d, 0x61, 0x0f, 0x27, 0xec, 0xc3, 0x9d, 0xec, 0x49, 0x47, - 0xb7, 0x94, 0xc7, 0x74, 0x92, 0xdd, 0x3c, 0xd0, 0xdf, 0x9d, 0x87, 0xd1, 0xa8, 0xe1, 0x84, 0x55, - 0xbe, 0xb6, 0x15, 0x2b, 0x65, 0x66, 0x4b, 0xb6, 0x19, 0x00, 0x05, 0x9c, 0xac, 0xc0, 0xe9, 0xcc, - 0xe9, 0x7d, 0xc4, 0x57, 0xaf, 0x52, 0x65, 0x56, 0xb2, 0x3b, 0x9d, 0x39, 0xf7, 0x8f, 0xb0, 0xa7, - 0x84, 0xb9, 0x09, 0x9a, 0x38, 0x62, 0x13, 0xd4, 0x85, 0xb1, 0xa6, 0x08, 0x04, 0x4c, 0x72, 0x53, - 0x79, 0x23, 0x97, 0x06, 0x58, 0x30, 0x03, 0x30, 0x6a, 0xb4, 0xcb, 0x80, 0x82, 0x14, 0x48, 0x3e, - 0xc5, 0x0c, 0x9a, 0x11, 0x3b, 0x98, 0xe2, 0x0a, 0xdc, 0xca, 0x47, 0x81, 0x9e, 0x50, 0x89, 0xb6, - 0x6e, 0x46, 0x20, 0xc2, 0x94, 0x3f, 0xf7, 0x93, 0x30, 0xf1, 0xb0, 0x71, 0x87, 0x97, 0xe0, 0xf4, - 0x50, 0x11, 0x87, 0xef, 0x5b, 0x90, 0xf4, 0xeb, 0xb2, 0xe3, 0x36, 0x28, 0x1b, 0x32, 0xe4, 0x25, - 0x98, 0x56, 0xdb, 0x88, 0xe5, 0xa0, 0x23, 0xe3, 0x96, 0x45, 0x1d, 0x58, 0xc6, 0x14, 0x16, 0x33, - 0xd4, 0x64, 0x11, 0xca, 0xac, 0x9d, 0x44, 0x51, 0x61, 0x76, 0xd5, 0x56, 0x65, 0x69, 0x6b, 0x4d, - 0x96, 0xd2, 0x34, 0x24, 0x80, 0x99, 0xa6, 0x13, 0xc5, 0x5c, 0x03, 0xb6, 0xab, 0x78, 0xc8, 0x93, - 0x69, 0x9e, 0xbc, 0xb4, 0x9e, 0x65, 0x84, 0xbd, 0xbc, 0xed, 0x6f, 0x8c, 0xc0, 0x54, 0xca, 0x32, - 0xb2, 0x55, 0xa5, 0x13, 0x31, 0xd7, 0x47, 0x85, 0x58, 0xd4, 0xaa, 0x72, 0x53, 0xc2, 0x51, 0x51, - 0x30, 0xea, 0xb6, 0x13, 0x45, 0x77, 0x83, 0xb0, 0x2a, 0x4d, 0xb9, 0xa2, 0xde, 0x92, 0x70, 0x54, - 0x14, 0x6c, 0x7d, 0xd9, 0xa5, 0x4e, 0x48, 0x43, 0x9e, 0xcc, 0x91, 0x5d, 0x5f, 0x2a, 0x1a, 0x85, - 0x26, 0x1d, 0x37, 0xca, 0x71, 0x33, 0x5a, 0x6e, 0x7a, 0xd4, 0x8f, 0x85, 0x9a, 0xf9, 0x18, 0xe5, - 0x9d, 0xf5, 0x6d, 0x93, 0xa9, 0x36, 0xca, 0x19, 0x04, 0x66, 0xc5, 0x93, 0x8f, 0x59, 0x30, 0xe5, - 0xdc, 0x8d, 0x74, 0xae, 0x2f, 0xb7, 0xca, 0x43, 0x2f, 0x52, 0xa9, 0xf4, 0xe1, 0xca, 0x0c, 0x33, - 0xef, 0x29, 0x10, 0xa6, 0x85, 0x92, 0x2f, 0x58, 0x40, 0xe8, 0x01, 0x75, 0xb7, 0xc2, 0x60, 0xdf, - 0xab, 0x26, 0x7d, 0x28, 0xb7, 0x3f, 0x43, 0x7a, 0xdb, 0xab, 0x3d, 0x7c, 0x85, 0x55, 0xef, 0x85, - 0x63, 0x1f, 0x1d, 0xec, 0xbf, 0x2d, 0xc2, 0x84, 0x61, 0x8c, 0xfb, 0xae, 0xac, 0xd6, 0x0f, 0xd9, - 0xca, 0x5a, 0x38, 0xc1, 0xca, 0xfa, 0x61, 0x28, 0xbb, 0x89, 0xa1, 0xc8, 0x27, 0x37, 0x39, 0x6b, - 0x7e, 0xb4, 0xad, 0x50, 0x20, 0xd4, 0x32, 0xc9, 0x65, 0x98, 0x31, 0xd8, 0x48, 0x23, 0x33, 0xc2, - 0x8d, 0x8c, 0x0a, 0x34, 0x2d, 0x65, 0x09, 0xb0, 0xb7, 0x0c, 0x79, 0x8e, 0x79, 0xb5, 0x9e, 0xac, - 0x97, 0xd8, 0xc5, 0xcb, 0xbc, 0xdf, 0xa5, 0xad, 0xb5, 0x04, 0x8c, 0x26, 0x8d, 0xfd, 0x0d, 0x4b, - 0x75, 0xee, 0x63, 0x48, 0x1a, 0xb9, 0x93, 0x4e, 0x1a, 0x59, 0xcd, 0xa5, 0x99, 0x07, 0x24, 0x8c, - 0x6c, 0xc0, 0xf8, 0x72, 0xd0, 0x6a, 0x39, 0x7e, 0x95, 0xbc, 0x01, 0xc6, 0x5d, 0xf1, 0x53, 0x6e, - 0x13, 0x79, 0x16, 0x81, 0xc4, 0x62, 0x82, 0x23, 0x4f, 0xc3, 0x88, 0x13, 0xd6, 0x93, 0xad, 0x21, - 0x3f, 0x14, 0x5b, 0x0a, 0xeb, 0x11, 0x72, 0xa8, 0xfd, 0xb9, 0x02, 0xc0, 0x72, 0xd0, 0x6a, 0x3b, - 0x21, 0xad, 0xee, 0x04, 0xff, 0x1b, 0x23, 0x16, 0x3b, 0x86, 0x4f, 0x5a, 0x40, 0x58, 0xab, 0x04, - 0x3e, 0xf5, 0xf5, 0x41, 0x1c, 0x5b, 0x2f, 0xdd, 0x04, 0x2a, 0x17, 0x1f, 0x3d, 0x07, 0x12, 0x04, - 0x6a, 0x9a, 0x63, 0xec, 0x22, 0x9e, 0x49, 0x56, 0xfc, 0x62, 0x3a, 0xc1, 0x81, 0x1f, 0x4a, 0x4b, - 0x07, 0xc0, 0xfe, 0x7c, 0x01, 0xce, 0x09, 0xb3, 0x75, 0xdd, 0xf1, 0x9d, 0x3a, 0x6d, 0x31, 0xad, - 0x8e, 0x7b, 0xda, 0xe0, 0x32, 0xf7, 0xd5, 0x4b, 0xf2, 0x19, 0x86, 0x1d, 0x9c, 0x62, 0x50, 0x89, - 0x61, 0xb4, 0xe6, 0x7b, 0x31, 0x72, 0xe6, 0x24, 0x82, 0x52, 0x72, 0xdb, 0x44, 0x1a, 0x9b, 0x9c, - 0x04, 0xa9, 0x79, 0x77, 0x59, 0xb2, 0x47, 0x25, 0xc8, 0xfe, 0x8a, 0x05, 0x59, 0x23, 0xca, 0xf7, - 0x77, 0x22, 0x23, 0x31, 0xbb, 0xbf, 0x4b, 0x27, 0x10, 0x9e, 0x20, 0x1f, 0xef, 0xbd, 0x30, 0xe1, - 0xc4, 0x31, 0x6d, 0xb5, 0xc5, 0x66, 0xa3, 0xf8, 0x70, 0x01, 0xad, 0xeb, 0x41, 0xd5, 0xab, 0x79, - 0x7c, 0x93, 0x61, 0xb2, 0xb3, 0x6f, 0x40, 0x29, 0x39, 0xc3, 0x39, 0x46, 0x67, 0x3e, 0x93, 0x72, - 0x10, 0x07, 0x0c, 0x97, 0xfb, 0x05, 0xe8, 0xb3, 0x0a, 0xb2, 0x2a, 0x6b, 0x7b, 0x91, 0xaa, 0xf2, - 0xc9, 0x6c, 0x06, 0x39, 0x10, 0xe7, 0x57, 0x22, 0x72, 0xf2, 0xae, 0xbc, 0x57, 0x71, 0x7d, 0xa4, - 0x35, 0x21, 0xf5, 0x53, 0xc7, 0x5a, 0xe4, 0x22, 0x80, 0x36, 0xf3, 0x32, 0x8f, 0x43, 0xc5, 0x5e, - 0xf5, 0x6a, 0x80, 0x06, 0x15, 0x73, 0xea, 0x3c, 0x3f, 0x8a, 0x9d, 0x66, 0xf3, 0x8a, 0xe7, 0xc7, - 0x72, 0x77, 0xaa, 0x4c, 0xc0, 0x9a, 0x46, 0xa1, 0x49, 0x37, 0xf7, 0x36, 0xa3, 0x5f, 0x4e, 0xe2, - 0xa8, 0x7f, 0xb2, 0x00, 0xd3, 0x97, 0xfd, 0xce, 0xd6, 0xe5, 0xad, 0xce, 0x6e, 0xd3, 0x73, 0xaf, - 0xd1, 0x2e, 0xeb, 0xb4, 0x3d, 0xda, 0x5d, 0x5b, 0x91, 0xcd, 0xae, 0x3a, 0xed, 0x1a, 0x03, 0xa2, - 0xc0, 0x31, 0x35, 0x6b, 0x9e, 0x5f, 0xa7, 0x61, 0x3b, 0xf4, 0xa4, 0x37, 0x6e, 0xa8, 0x79, 0x49, - 0xa3, 0xd0, 0xa4, 0x63, 0xbc, 0x83, 0xbb, 0x3e, 0x0d, 0xb3, 0xf6, 0x63, 0x93, 0x01, 0x51, 0xe0, - 0x18, 0x51, 0x1c, 0x76, 0xa2, 0x58, 0xb6, 0x98, 0x22, 0xda, 0x61, 0x40, 0x14, 0x38, 0x36, 0x3c, - 0xa2, 0xce, 0x2e, 0x8f, 0xab, 0x66, 0x4e, 0xb8, 0xb7, 0x05, 0x18, 0x13, 0x3c, 0x23, 0xdd, 0xa3, - 0xdd, 0x15, 0xb6, 0x9a, 0x66, 0x12, 0x52, 0xae, 0x09, 0x30, 0x26, 0x78, 0xfb, 0x1f, 0x2d, 0x20, - 0xe9, 0xe6, 0x78, 0x0c, 0x0b, 0xf2, 0x2b, 0xe9, 0x05, 0x79, 0xc8, 0x10, 0x78, 0x5a, 0xfd, 0x01, - 0xeb, 0xf2, 0x6f, 0x58, 0x30, 0x69, 0x9e, 0x86, 0x90, 0x7a, 0xc6, 0x10, 0x6d, 0xa6, 0x0d, 0xd1, - 0xfd, 0xc3, 0xf9, 0x9f, 0xea, 0x77, 0x19, 0xb2, 0xee, 0xc5, 0x41, 0x3b, 0x7a, 0x2b, 0xf5, 0xeb, - 0x9e, 0x4f, 0x79, 0xac, 0x4f, 0x9c, 0xa2, 0xa4, 0x8e, 0x5a, 0x96, 0x83, 0x2a, 0x7d, 0x08, 0x4b, - 0x66, 0xdf, 0x86, 0x99, 0x9e, 0x2c, 0xa4, 0x63, 0x18, 0x9d, 0x23, 0x73, 0x4c, 0xed, 0x4f, 0x59, - 0x30, 0x95, 0x4a, 0xe2, 0xca, 0xc9, 0x94, 0xf1, 0x59, 0x11, 0xf0, 0x83, 0xb4, 0xd0, 0xf3, 0x45, - 0xa4, 0xad, 0x64, 0xcc, 0x0a, 0x8d, 0x42, 0x93, 0xce, 0xfe, 0x6c, 0x01, 0x4a, 0x49, 0x4c, 0xf6, - 0x18, 0xaa, 0x7c, 0xc2, 0x82, 0x29, 0xb5, 0x35, 0xe6, 0x0e, 0x73, 0x2e, 0x89, 0x3c, 0x4c, 0x03, - 0x75, 0xda, 0xca, 0x1c, 0x66, 0xe5, 0xb9, 0xa3, 0x29, 0x0c, 0xd3, 0xb2, 0xc9, 0x2d, 0x80, 0xa8, - 0x1b, 0xc5, 0xb4, 0x65, 0xb8, 0xee, 0xb6, 0x31, 0x3b, 0x16, 0xdc, 0x20, 0xa4, 0x6c, 0x2e, 0x6c, - 0x04, 0x55, 0xba, 0xad, 0x28, 0xb5, 0x21, 0xd4, 0x30, 0x34, 0x38, 0xd9, 0xbf, 0x5b, 0x80, 0xd3, - 0x59, 0x95, 0xc8, 0x7b, 0x60, 0x32, 0x91, 0x6e, 0xdc, 0x01, 0x4d, 0x02, 0xd1, 0x93, 0x68, 0xe0, - 0xee, 0x1f, 0xce, 0xcf, 0xf7, 0x5e, 0x82, 0x5d, 0x30, 0x49, 0x30, 0xc5, 0x4c, 0xc4, 0x27, 0x64, - 0x20, 0xad, 0xd2, 0x5d, 0x6a, 0xb7, 0x65, 0x90, 0xc1, 0x88, 0x4f, 0x98, 0x58, 0xcc, 0x50, 0x93, - 0x2d, 0x38, 0x6b, 0x40, 0x36, 0xa8, 0x57, 0x6f, 0xec, 0x06, 0xa1, 0xb8, 0x6c, 0x50, 0xac, 0x3c, - 0x2d, 0xb9, 0x9c, 0xc5, 0x3e, 0x34, 0xd8, 0xb7, 0x24, 0x79, 0x0b, 0x94, 0x5c, 0xa7, 0xed, 0xb8, - 0x5e, 0xdc, 0x95, 0x7b, 0x11, 0x65, 0x47, 0x96, 0x25, 0x1c, 0x15, 0x85, 0x7d, 0x1d, 0x46, 0x8e, - 0x39, 0x82, 0x8e, 0xb5, 0x2e, 0xdf, 0x80, 0x12, 0x63, 0xc7, 0xec, 0x46, 0x5e, 0x2c, 0x03, 0x28, - 0x25, 0x77, 0x4f, 0x88, 0x0d, 0x45, 0xcf, 0x49, 0x42, 0x40, 0xaa, 0x5a, 0x6b, 0x51, 0xd4, 0xe1, - 0x5e, 0x07, 0x43, 0x92, 0x67, 0xa0, 0x48, 0x0f, 0xda, 0xd9, 0x58, 0xcf, 0xea, 0x41, 0xdb, 0x0b, - 0x69, 0xc4, 0x88, 0xe8, 0x41, 0x9b, 0xcc, 0x41, 0xc1, 0xab, 0xca, 0x05, 0x05, 0x24, 0x4d, 0x61, - 0x6d, 0x05, 0x0b, 0x5e, 0xd5, 0x3e, 0x80, 0xb2, 0xba, 0xec, 0x42, 0xf6, 0x12, 0x3b, 0x6b, 0xe5, - 0x71, 0x88, 0x92, 0xf0, 0x1d, 0x60, 0x61, 0x3b, 0x00, 0x3a, 0xfd, 0x2f, 0x2f, 0xfb, 0x72, 0x01, - 0x46, 0xdc, 0x40, 0x66, 0xda, 0x96, 0x34, 0x1b, 0x6e, 0x60, 0x39, 0xc6, 0xbe, 0x0d, 0xd3, 0xd7, - 0xfc, 0xe0, 0xae, 0xcf, 0x16, 0xbe, 0x4b, 0x1e, 0x6d, 0x56, 0x19, 0xe3, 0x1a, 0xfb, 0x91, 0x5d, - 0xce, 0x39, 0x16, 0x05, 0x4e, 0xdd, 0x08, 0x29, 0x0c, 0xba, 0x11, 0x62, 0xff, 0xb2, 0x05, 0xa7, - 0xb3, 0xa9, 0x7e, 0x3f, 0xb0, 0x1d, 0xc6, 0x47, 0x98, 0x32, 0x49, 0x2e, 0xd9, 0x66, 0x5b, 0x9c, - 0x5a, 0xbf, 0x00, 0x93, 0xbb, 0x1d, 0xaf, 0x59, 0x95, 0xdf, 0x52, 0x1f, 0x95, 0x2d, 0x57, 0x31, - 0x70, 0x98, 0xa2, 0x64, 0x7e, 0xda, 0xae, 0xe7, 0x3b, 0x61, 0x77, 0x4b, 0xaf, 0x1b, 0xca, 0x3c, - 0x55, 0x14, 0x06, 0x0d, 0x2a, 0xfb, 0xaf, 0x8b, 0xa0, 0x6f, 0xdd, 0x10, 0x4f, 0x26, 0x45, 0x58, - 0x79, 0x84, 0xad, 0xb6, 0xbb, 0xbe, 0xab, 0xef, 0xf7, 0x94, 0x32, 0x39, 0x11, 0x1f, 0xb7, 0x98, - 0x87, 0xe8, 0xc5, 0x9e, 0xc3, 0x8d, 0x85, 0xdc, 0x28, 0x6d, 0xe5, 0x74, 0x6e, 0xbe, 0x26, 0x38, - 0x07, 0xa1, 0xe9, 0x73, 0x2a, 0x61, 0x68, 0x4a, 0x26, 0x2f, 0xcb, 0x93, 0x86, 0x62, 0x6e, 0x29, - 0x35, 0xa5, 0xcc, 0xf1, 0x42, 0x1b, 0x46, 0x43, 0x1a, 0x87, 0x49, 0x32, 0xd3, 0xb5, 0x61, 0xcf, - 0x5d, 0xe3, 0xb0, 0xbb, 0x1d, 0xb3, 0xcd, 0x58, 0xdd, 0x70, 0x8c, 0x38, 0x18, 0x85, 0x20, 0x3b, - 0x02, 0xd2, 0xdb, 0x16, 0x27, 0x8c, 0xe2, 0x2e, 0x42, 0xd9, 0xe9, 0xc4, 0x41, 0x8b, 0x35, 0x13, - 0xef, 0x9e, 0x92, 0x11, 0xa7, 0x4e, 0x10, 0xa8, 0x69, 0xec, 0xd7, 0x46, 0x21, 0x93, 0xa5, 0x40, - 0x0e, 0xcc, 0x1b, 0x63, 0x56, 0xbe, 0x37, 0xc6, 0x94, 0x32, 0xfd, 0x6e, 0x8d, 0x91, 0x3a, 0x8c, - 0xb6, 0x1b, 0x4e, 0x94, 0xcc, 0xd1, 0x1b, 0x49, 0x33, 0x6d, 0x31, 0xe0, 0xfd, 0xc3, 0xf9, 0x9f, - 0x3e, 0x9e, 0x1f, 0xc8, 0xc6, 0xea, 0xa2, 0x48, 0xd9, 0xd4, 0xa2, 0x39, 0x0f, 0x14, 0xfc, 0x4d, - 0x4f, 0xb0, 0x78, 0xc4, 0x9e, 0xf6, 0xa3, 0x96, 0x48, 0x6d, 0x43, 0x1a, 0x75, 0x9a, 0xb1, 0x1c, - 0x0d, 0x37, 0x72, 0x9c, 0x65, 0x82, 0xb1, 0xce, 0x71, 0x13, 0xdf, 0x68, 0x08, 0x25, 0xef, 0x81, - 0x72, 0x14, 0x3b, 0x61, 0xfc, 0x90, 0x19, 0x31, 0xaa, 0xd1, 0xb7, 0x13, 0x26, 0xa8, 0xf9, 0x91, - 0x77, 0x03, 0xd4, 0x3c, 0xdf, 0x8b, 0x1a, 0x0f, 0x79, 0x40, 0xc8, 0x15, 0xbf, 0xa4, 0x38, 0xa0, - 0xc1, 0x8d, 0x59, 0x37, 0x3e, 0xb6, 0x45, 0x48, 0xb3, 0xc4, 0xd7, 0x52, 0x65, 0xdd, 0x50, 0x61, - 0xd0, 0xa0, 0xb2, 0x3f, 0x04, 0x67, 0xb2, 0xb7, 0xb5, 0xe5, 0xd6, 0xb0, 0x1e, 0x06, 0x9d, 0x76, - 0x76, 0x2d, 0xe1, 0xb7, 0x79, 0x51, 0xe0, 0x98, 0x8d, 0xdf, 0xf3, 0xfc, 0x6a, 0xd6, 0xc6, 0x5f, - 0xf3, 0xfc, 0x2a, 0x72, 0xcc, 0x31, 0xae, 0xd2, 0xfd, 0xb1, 0x05, 0x17, 0x8e, 0xba, 0x54, 0xce, - 0xb6, 0xfd, 0x77, 0x9d, 0xd0, 0x97, 0xd7, 0x64, 0xb8, 0xed, 0xb8, 0xed, 0x84, 0x3e, 0x72, 0x28, - 0xe9, 0xc2, 0x98, 0xc8, 0x02, 0x94, 0xde, 0xf1, 0x8d, 0x7c, 0xaf, 0xb8, 0xb3, 0xbd, 0x95, 0x8a, - 0xd6, 0x88, 0x0c, 0x44, 0x94, 0x02, 0xed, 0xd7, 0x2c, 0x20, 0x9b, 0xfb, 0x34, 0x0c, 0xbd, 0xaa, - 0x91, 0xb7, 0x48, 0x9e, 0x87, 0xc9, 0x3b, 0xdb, 0x9b, 0x1b, 0x5b, 0x81, 0xe7, 0xf3, 0xf4, 0x7b, - 0x23, 0x5b, 0xe6, 0xaa, 0x01, 0xc7, 0x14, 0x15, 0x59, 0x86, 0x99, 0x3b, 0xaf, 0xb0, 0x25, 0x67, - 0xf5, 0xa0, 0x1d, 0xd2, 0x28, 0x52, 0x0f, 0x43, 0x94, 0xc5, 0xc1, 0xd4, 0xd5, 0x1b, 0x19, 0x24, - 0xf6, 0xd2, 0xdb, 0x5f, 0x2e, 0xc0, 0x84, 0xf1, 0x8e, 0xc2, 0x31, 0xfc, 0x91, 0xcc, 0xd3, 0x0f, - 0x85, 0x63, 0x3e, 0xfd, 0xf0, 0x2c, 0x94, 0xda, 0x41, 0xd3, 0x73, 0x3d, 0x95, 0x57, 0x3f, 0xc9, - 0x4f, 0xaf, 0x24, 0x0c, 0x15, 0x96, 0xdc, 0x85, 0xb2, 0xba, 0x10, 0x2d, 0x33, 0xed, 0xf2, 0xf2, - 0xc8, 0xd4, 0x5c, 0xd3, 0x17, 0x9d, 0xb5, 0x2c, 0x62, 0xc3, 0x18, 0x1f, 0xa8, 0x49, 0x6c, 0x9e, - 0xa7, 0x6e, 0xf0, 0x11, 0x1c, 0xa1, 0xc4, 0xd8, 0xff, 0x32, 0x0a, 0x65, 0xa4, 0xed, 0x60, 0x39, - 0xa4, 0xd5, 0x88, 0xbc, 0x1e, 0x8a, 0x9d, 0xb0, 0x29, 0x1b, 0x4b, 0x85, 0x79, 0x6e, 0xe2, 0x3a, - 0x32, 0x78, 0x6a, 0x75, 0x28, 0x9c, 0xe8, 0x8c, 0xaf, 0x78, 0xe4, 0x19, 0xdf, 0x8b, 0x30, 0x15, - 0x45, 0x8d, 0xad, 0xd0, 0xdb, 0x77, 0x62, 0x36, 0xe6, 0x64, 0x4c, 0x44, 0x1f, 0xaa, 0x6c, 0x5f, - 0xd1, 0x48, 0x4c, 0xd3, 0x92, 0xcb, 0x30, 0xa3, 0x4f, 0xda, 0x68, 0x18, 0xf3, 0x10, 0x88, 0x88, - 0x96, 0xa8, 0x33, 0x0d, 0x7d, 0x36, 0x27, 0x09, 0xb0, 0xb7, 0x0c, 0x59, 0x81, 0xd3, 0x29, 0x20, - 0x53, 0x44, 0x84, 0x52, 0xd4, 0x29, 0x7e, 0x8a, 0x0f, 0xd3, 0xa5, 0xa7, 0x04, 0xb9, 0x0e, 0x67, - 0x44, 0xff, 0xf2, 0x8b, 0xf4, 0xaa, 0x46, 0xe3, 0x9c, 0xd1, 0xff, 0x91, 0x8c, 0xce, 0x5c, 0xee, - 0x25, 0xc1, 0x7e, 0xe5, 0xd8, 0x08, 0x55, 0xe0, 0xb5, 0x15, 0x69, 0xd8, 0xd4, 0x08, 0x55, 0x6c, - 0xd6, 0xaa, 0x68, 0xd2, 0x91, 0x77, 0xc1, 0x53, 0xfa, 0x53, 0x44, 0xd0, 0xc4, 0x6a, 0xbf, 0x22, - 0x93, 0x18, 0xe6, 0x25, 0x8b, 0xa7, 0x2e, 0xf7, 0x25, 0xab, 0xe2, 0xa0, 0xf2, 0x64, 0x17, 0xe6, - 0x14, 0x6a, 0x95, 0xcd, 0xde, 0x76, 0xe8, 0x45, 0xb4, 0xe2, 0x44, 0xf4, 0x66, 0xd8, 0xe4, 0x69, - 0x0f, 0x65, 0xfd, 0x18, 0xc4, 0x65, 0x2f, 0xbe, 0xd2, 0x8f, 0x12, 0xd7, 0xf1, 0x01, 0x5c, 0x98, - 0x73, 0x41, 0x7d, 0x67, 0xb7, 0x49, 0x37, 0x97, 0xd7, 0x78, 0x32, 0x84, 0xe1, 0x5c, 0xac, 0x26, - 0x08, 0xd4, 0x34, 0xca, 0xb5, 0x9f, 0x1c, 0xe8, 0xda, 0x7f, 0xcb, 0x82, 0x29, 0x35, 0xd8, 0x1f, - 0x43, 0xbc, 0xab, 0x99, 0x8e, 0x77, 0x5d, 0x1e, 0xd6, 0xab, 0x93, 0x9a, 0x0f, 0xd8, 0x88, 0x7d, - 0xaf, 0x0c, 0xc0, 0x9f, 0xd7, 0xf1, 0x78, 0x92, 0xed, 0x05, 0x18, 0x09, 0x69, 0x3b, 0xc8, 0x5a, - 0x3e, 0x46, 0x81, 0x1c, 0xf3, 0xc3, 0x3b, 0x9d, 0xfb, 0x9d, 0xf9, 0x8e, 0xfe, 0x60, 0xcf, 0x7c, - 0xb7, 0xe1, 0x49, 0xcf, 0x8f, 0xa8, 0xdb, 0x09, 0xe5, 0x42, 0x77, 0x25, 0x88, 0x94, 0x75, 0x28, - 0x55, 0x5e, 0x2f, 0x19, 0x3d, 0xb9, 0xd6, 0x8f, 0x08, 0xfb, 0x97, 0x65, 0x4d, 0x9a, 0x20, 0xe4, - 0x6d, 0x1e, 0x1d, 0x1e, 0x90, 0x70, 0x54, 0x14, 0x7a, 0x42, 0xac, 0xd7, 0x92, 0xeb, 0x3a, 0x99, - 0x09, 0xb1, 0x7e, 0x69, 0x1b, 0x35, 0x4d, 0x7f, 0xab, 0x58, 0xce, 0xc9, 0x2a, 0xc2, 0x89, 0xad, - 0x62, 0x32, 0x3f, 0x27, 0x06, 0x3e, 0xc6, 0x90, 0x2c, 0xd6, 0x93, 0x03, 0x17, 0xeb, 0x97, 0x60, - 0xda, 0xf3, 0x1b, 0x34, 0xf4, 0x62, 0x5a, 0xe5, 0x73, 0x61, 0x76, 0x8a, 0x37, 0x84, 0x8a, 0x5c, - 0xad, 0xa5, 0xb0, 0x98, 0xa1, 0x4e, 0x1b, 0x95, 0xe9, 0x63, 0x18, 0x95, 0x01, 0xa6, 0xfc, 0x54, - 0x3e, 0xa6, 0xfc, 0xf4, 0xf0, 0xa6, 0x7c, 0xe6, 0x91, 0x9a, 0x72, 0x92, 0x8b, 0x29, 0x7f, 0x06, - 0x46, 0xdb, 0x61, 0x70, 0xd0, 0x9d, 0x3d, 0x93, 0xf6, 0xa6, 0xb7, 0x18, 0x10, 0x05, 0xce, 0x4c, - 0x7d, 0x3b, 0xfb, 0xe0, 0xd4, 0x37, 0xfb, 0xd5, 0x02, 0x3c, 0xa9, 0x2d, 0x1d, 0x1b, 0x5f, 0x5e, - 0x8d, 0xcd, 0x75, 0x7e, 0xa7, 0x52, 0xa4, 0x5b, 0x18, 0x41, 0x53, 0x1d, 0x7f, 0x55, 0x18, 0x34, - 0xa8, 0x78, 0xec, 0x91, 0x86, 0x3c, 0x61, 0x37, 0x6b, 0x06, 0x97, 0x25, 0x1c, 0x15, 0x05, 0x7f, - 0x9b, 0x8f, 0x86, 0xb1, 0x3c, 0x7b, 0xc9, 0xe6, 0x22, 0x2d, 0x6b, 0x14, 0x9a, 0x74, 0xcc, 0x5d, - 0x74, 0x93, 0x29, 0xc8, 0x4c, 0xe1, 0xa4, 0x70, 0x17, 0xd5, 0xac, 0x53, 0xd8, 0x44, 0x1d, 0x1e, - 0x64, 0x1e, 0xed, 0x55, 0x87, 0x07, 0x0d, 0x14, 0x85, 0xfd, 0x5f, 0x16, 0xbc, 0xae, 0x6f, 0x53, - 0x3c, 0x86, 0xe5, 0xed, 0x20, 0xbd, 0xbc, 0x6d, 0x0f, 0xbf, 0xbc, 0xf5, 0xd4, 0x62, 0xc0, 0x52, - 0xf7, 0x37, 0x16, 0x4c, 0x6b, 0xfa, 0xc7, 0x50, 0x55, 0x2f, 0xd7, 0x57, 0xf6, 0xb4, 0xea, 0x22, - 0x91, 0x34, 0x55, 0xb7, 0x6f, 0xf1, 0xba, 0x89, 0xbd, 0xd7, 0x92, 0x9b, 0x3c, 0x63, 0x73, 0xc4, - 0x26, 0xa6, 0x0b, 0x63, 0xfc, 0xe2, 0x71, 0x94, 0xcf, 0x1e, 0x30, 0x2d, 0x9f, 0x87, 0x41, 0xf5, - 0x1e, 0x90, 0x7f, 0x46, 0x28, 0x05, 0xf2, 0x74, 0x72, 0x2f, 0x62, 0xf6, 0xb2, 0x2a, 0xc3, 0xb5, - 0x3a, 0x9d, 0x5c, 0xc2, 0x51, 0x51, 0xd8, 0x2d, 0x98, 0x4d, 0x33, 0x5f, 0xa1, 0x35, 0x1e, 0x6a, - 0x3b, 0x56, 0x35, 0x17, 0xa1, 0xec, 0xf0, 0x52, 0xeb, 0x1d, 0x27, 0xfb, 0x96, 0xcd, 0x52, 0x82, - 0x40, 0x4d, 0x63, 0xff, 0x8e, 0x05, 0x67, 0xfa, 0x54, 0x26, 0xc7, 0x30, 0x75, 0xac, 0xad, 0xc0, - 0x80, 0xf7, 0x85, 0xaa, 0xb4, 0xe6, 0x24, 0xc1, 0x1c, 0xc3, 0xaa, 0xad, 0x08, 0x30, 0x26, 0x78, - 0xfb, 0x5f, 0x2d, 0x38, 0x95, 0xd6, 0x35, 0x22, 0x57, 0x81, 0x88, 0xca, 0xac, 0x78, 0x91, 0x1b, - 0xec, 0xd3, 0xb0, 0xcb, 0x6a, 0x2e, 0xb4, 0x9e, 0x93, 0x9c, 0xc8, 0x52, 0x0f, 0x05, 0xf6, 0x29, - 0xc5, 0xb3, 0x76, 0xab, 0xaa, 0xb5, 0x93, 0x91, 0x72, 0x2b, 0xcf, 0x91, 0xa2, 0x3b, 0xd3, 0xdc, - 0x41, 0x2b, 0x91, 0x68, 0xca, 0xb7, 0xbf, 0x3d, 0x02, 0xea, 0x1c, 0x8b, 0x87, 0x0d, 0x72, 0x0a, - 0xba, 0xa4, 0x1e, 0x3c, 0x2a, 0x9e, 0xe0, 0xc1, 0xa3, 0x91, 0x07, 0xc5, 0x08, 0xc4, 0xeb, 0x3b, - 0xda, 0x17, 0x35, 0x8c, 0xfe, 0x8e, 0x46, 0xa1, 0x49, 0xc7, 0x34, 0x69, 0x7a, 0xfb, 0x54, 0x14, - 0x1a, 0x4b, 0x6b, 0xb2, 0x9e, 0x20, 0x50, 0xd3, 0x30, 0x4d, 0xaa, 0x5e, 0xad, 0x26, 0x77, 0x8a, - 0x4a, 0x13, 0xd6, 0x3a, 0xc8, 0x31, 0x8c, 0xa2, 0x11, 0x04, 0x7b, 0xd2, 0xff, 0x53, 0x14, 0x57, - 0x82, 0x60, 0x0f, 0x39, 0x86, 0x79, 0x2c, 0x7e, 0x10, 0xb6, 0x9c, 0xa6, 0xf7, 0x7e, 0x5a, 0x55, - 0x52, 0xa4, 0xdf, 0xa7, 0x3c, 0x96, 0x8d, 0x5e, 0x12, 0xec, 0x57, 0x8e, 0x8d, 0xc0, 0x76, 0x48, - 0xab, 0x9e, 0x1b, 0x9b, 0xdc, 0x20, 0x3d, 0x02, 0xb7, 0x7a, 0x28, 0xb0, 0x4f, 0x29, 0xb2, 0x04, - 0xa7, 0x92, 0x73, 0xc8, 0x24, 0x57, 0x44, 0x38, 0x83, 0xca, 0x0f, 0xc7, 0x34, 0x1a, 0xb3, 0xf4, - 0xcc, 0xda, 0xb4, 0x64, 0xc6, 0x0e, 0x77, 0x13, 0x0d, 0x6b, 0x93, 0x64, 0xf2, 0xa0, 0xa2, 0xb0, - 0x7f, 0xaf, 0xc0, 0x56, 0xc7, 0x01, 0xf7, 0x6a, 0x1f, 0x5b, 0x90, 0x2f, 0x3d, 0x22, 0x47, 0x8e, - 0x31, 0x22, 0x9f, 0x87, 0xc9, 0x3b, 0x51, 0xe0, 0xab, 0x00, 0xda, 0xe8, 0xc0, 0x00, 0x9a, 0x41, - 0xd5, 0x3f, 0x80, 0x36, 0x76, 0xc2, 0x00, 0xda, 0x9f, 0x8f, 0xc2, 0x39, 0x75, 0x74, 0x4c, 0xe3, - 0xbb, 0x41, 0xb8, 0xe7, 0xf9, 0x75, 0x7e, 0xdc, 0xfa, 0x25, 0x0b, 0x26, 0xc5, 0xf0, 0x96, 0x2f, - 0x10, 0x88, 0xe3, 0xc5, 0x5a, 0x4e, 0x97, 0xc4, 0x52, 0xc2, 0x16, 0x76, 0x0c, 0x41, 0x99, 0xe7, - 0x20, 0x4c, 0x14, 0xa6, 0x34, 0x22, 0x1f, 0x04, 0x48, 0x9e, 0xc9, 0xaa, 0xe5, 0xf4, 0x58, 0x58, - 0xa2, 0x1f, 0xd2, 0x9a, 0x76, 0x25, 0x77, 0x94, 0x10, 0x34, 0x04, 0x92, 0x57, 0x2d, 0x75, 0x29, - 0x43, 0x9c, 0x15, 0xbd, 0xfc, 0x48, 0xda, 0xe6, 0x38, 0x77, 0x34, 0x10, 0xc6, 0x3d, 0xbf, 0xce, - 0xba, 0x55, 0xc6, 0x1c, 0xdf, 0xd4, 0x2f, 0x55, 0x61, 0x3d, 0x70, 0xaa, 0x15, 0xa7, 0xe9, 0xf8, - 0x2e, 0x0d, 0xd7, 0x04, 0xb9, 0xf9, 0x58, 0x11, 0x07, 0x60, 0xc2, 0xa8, 0xe7, 0x16, 0xe4, 0xe8, - 0x71, 0x6e, 0x41, 0xce, 0xbd, 0x13, 0x66, 0x7a, 0x3a, 0xf3, 0x44, 0x77, 0x34, 0x1e, 0xfe, 0x7a, - 0x87, 0xfd, 0x27, 0x63, 0x7a, 0x8d, 0xd9, 0x08, 0xaa, 0xe2, 0x2e, 0x5e, 0xa8, 0x7b, 0x54, 0xba, - 0x8a, 0x39, 0x0e, 0x11, 0xe3, 0xc1, 0x23, 0x05, 0x44, 0x53, 0x24, 0x1b, 0xa3, 0x6d, 0x27, 0xa4, - 0xfe, 0xa3, 0x1e, 0xa3, 0x5b, 0x4a, 0x08, 0x1a, 0x02, 0x49, 0x23, 0x75, 0x98, 0x79, 0x69, 0xf8, - 0xc3, 0x4c, 0xe6, 0xbd, 0xf6, 0xbd, 0x33, 0xf5, 0x19, 0x0b, 0xa6, 0xfd, 0xd4, 0xc8, 0x95, 0x07, - 0x5a, 0x3b, 0x8f, 0x62, 0x56, 0x88, 0x3b, 0xd0, 0x69, 0x18, 0x66, 0xe4, 0xf7, 0x5b, 0x81, 0x46, - 0x4f, 0xb8, 0x02, 0xe9, 0x4b, 0xbd, 0x63, 0x83, 0x2e, 0xf5, 0x12, 0x5f, 0x5d, 0xe7, 0x1f, 0xcf, - 0xfd, 0x3a, 0x3f, 0xf4, 0xb9, 0xca, 0x7f, 0x1b, 0xca, 0x6e, 0x48, 0x9d, 0xf8, 0x21, 0x6f, 0x76, - 0xf3, 0x27, 0xe6, 0x96, 0x13, 0x06, 0xa8, 0x79, 0xd9, 0x7f, 0x55, 0x84, 0xd3, 0x49, 0x8b, 0x24, - 0x07, 0x3d, 0x6c, 0x39, 0x13, 0x72, 0xb5, 0x2f, 0xaa, 0x96, 0xb3, 0x2b, 0x09, 0x02, 0x35, 0x0d, - 0x73, 0x9f, 0x3a, 0x11, 0xdd, 0x6c, 0x53, 0x7f, 0xdd, 0xdb, 0x8d, 0x78, 0x8b, 0x1b, 0xd9, 0x62, - 0x37, 0x35, 0x0a, 0x4d, 0x3a, 0xe6, 0x3b, 0x0b, 0x37, 0x36, 0xca, 0x9e, 0x9b, 0x4a, 0xf7, 0x18, - 0x13, 0x3c, 0xf9, 0x62, 0xdf, 0x77, 0x39, 0xf2, 0xc9, 0x18, 0xe8, 0x39, 0xdf, 0x3a, 0xe1, 0x83, - 0x1c, 0xaf, 0x59, 0x70, 0x6a, 0x2f, 0x95, 0xaa, 0x92, 0x98, 0xe4, 0x21, 0x13, 0x20, 0xd3, 0xf9, - 0x2f, 0x7a, 0x08, 0xa7, 0xe1, 0x11, 0x66, 0xa5, 0xdb, 0xff, 0x61, 0x81, 0x69, 0x9e, 0x8e, 0xe7, - 0x08, 0x19, 0x2f, 0x2d, 0x15, 0x8e, 0x78, 0x69, 0x29, 0xf1, 0x99, 0x8a, 0xc7, 0xf3, 0xd1, 0x47, - 0x4e, 0xe0, 0xa3, 0x8f, 0x0e, 0x74, 0xb2, 0x5e, 0x0f, 0xc5, 0x8e, 0x57, 0x95, 0x6e, 0xb6, 0x3e, - 0xbb, 0x5a, 0x5b, 0x41, 0x06, 0xb7, 0xff, 0x68, 0x54, 0x6f, 0xab, 0xe5, 0x41, 0xf7, 0x8f, 0x44, - 0xb5, 0x6b, 0x2a, 0x9f, 0x55, 0xd4, 0x7c, 0xa3, 0x27, 0x9f, 0xf5, 0x1d, 0x27, 0xcf, 0x63, 0x10, - 0x0d, 0x34, 0x28, 0x9d, 0x75, 0xfc, 0x88, 0x24, 0x86, 0x3b, 0x50, 0x62, 0x3b, 0x11, 0x1e, 0x1f, - 0x2b, 0xa5, 0x94, 0x2a, 0x5d, 0x91, 0xf0, 0xfb, 0x87, 0xf3, 0x6f, 0x3f, 0xb9, 0x5a, 0x49, 0x69, - 0x54, 0xfc, 0x49, 0x04, 0x65, 0xf6, 0x9b, 0xe7, 0x5b, 0xc8, 0x3d, 0xce, 0x4d, 0x65, 0x8b, 0x12, - 0x44, 0x2e, 0xc9, 0x1c, 0x5a, 0x0e, 0xf1, 0xa1, 0xcc, 0xdf, 0x04, 0xe2, 0x42, 0xc5, 0x56, 0x68, - 0x4b, 0x65, 0x3d, 0x24, 0x88, 0xfb, 0x87, 0xf3, 0x2f, 0x9e, 0x5c, 0xa8, 0x2a, 0x8e, 0x5a, 0x84, - 0xfd, 0xdd, 0xa2, 0x1e, 0xbb, 0x32, 0x8d, 0xf9, 0x47, 0x62, 0xec, 0xbe, 0x90, 0x19, 0xbb, 0x17, - 0x7a, 0xc6, 0xee, 0xb4, 0x7e, 0x37, 0x27, 0x35, 0x1a, 0x1f, 0xf7, 0x02, 0x7b, 0xf4, 0xb6, 0x9b, - 0x7b, 0x16, 0xaf, 0x74, 0xbc, 0x90, 0x46, 0x5b, 0x61, 0xc7, 0xf7, 0xfc, 0x3a, 0x1f, 0x8e, 0x25, - 0xd3, 0xb3, 0x48, 0xa1, 0x31, 0x4b, 0x6f, 0x7f, 0x99, 0x1f, 0x4f, 0x1a, 0xa9, 0x5b, 0xac, 0x97, - 0x9b, 0xfc, 0x59, 0x25, 0x91, 0x3c, 0xaa, 0x7a, 0x59, 0xbc, 0xa5, 0x24, 0x70, 0xe4, 0x2e, 0x8c, - 0xef, 0x8a, 0xa7, 0x1d, 0xf2, 0xb9, 0x4b, 0x24, 0xdf, 0x89, 0xe0, 0xb7, 0x36, 0x93, 0x47, 0x23, - 0xee, 0xeb, 0x9f, 0x98, 0x48, 0xb3, 0x7f, 0xad, 0x08, 0xa7, 0x32, 0x8f, 0xfe, 0xb0, 0xfd, 0x79, - 0xf2, 0xc2, 0x53, 0x36, 0x98, 0xae, 0x5e, 0x32, 0x56, 0x14, 0xe4, 0x7d, 0x00, 0x55, 0xda, 0x6e, - 0x06, 0x5d, 0xee, 0xb8, 0x8c, 0x9c, 0xd8, 0x71, 0x51, 0xbe, 0xee, 0x8a, 0xe2, 0x82, 0x06, 0x47, - 0x99, 0x31, 0x3b, 0x2a, 0x1e, 0xae, 0x48, 0x67, 0xcc, 0x1a, 0x57, 0xea, 0xc6, 0x1e, 0xef, 0x95, - 0x3a, 0x0f, 0x4e, 0x09, 0x15, 0x55, 0x82, 0xd4, 0x43, 0xe4, 0x41, 0x9d, 0x61, 0x23, 0x6a, 0x25, - 0xcd, 0x06, 0xb3, 0x7c, 0xed, 0x4f, 0x17, 0x98, 0xfb, 0x26, 0x1a, 0xfb, 0x7a, 0x12, 0xcb, 0x7e, - 0x23, 0x8c, 0x39, 0x9d, 0xb8, 0x11, 0xf4, 0x3c, 0xb5, 0xb1, 0xc4, 0xa1, 0x28, 0xb1, 0x64, 0x1d, - 0x46, 0xaa, 0x4e, 0x9c, 0xbc, 0xc4, 0x7f, 0x12, 0xe5, 0x74, 0xe0, 0xca, 0x89, 0x29, 0x72, 0x2e, - 0xe4, 0x69, 0x18, 0x89, 0x9d, 0x7a, 0xea, 0x0d, 0xd0, 0x1d, 0xa7, 0x1e, 0x21, 0x87, 0x9a, 0xab, - 0xcb, 0xc8, 0x11, 0xab, 0xcb, 0x8b, 0xc6, 0x7f, 0x44, 0x18, 0x87, 0x24, 0xbd, 0xff, 0xeb, 0x20, - 0x72, 0xf8, 0x53, 0xb4, 0xf6, 0x8f, 0xc1, 0xa4, 0xf9, 0xbf, 0x0f, 0xc7, 0xba, 0x02, 0x64, 0xff, - 0xf3, 0x08, 0x4c, 0xa5, 0x92, 0xe8, 0x52, 0xa3, 0xdc, 0x3a, 0x72, 0x94, 0xf3, 0xe3, 0xaf, 0x8e, - 0x4f, 0x65, 0x8a, 0xa4, 0x71, 0xfc, 0xd5, 0xf1, 0x29, 0x0a, 0x1c, 0xeb, 0x95, 0x6a, 0xd8, 0xc5, - 0x8e, 0x2f, 0x83, 0xe8, 0xaa, 0x57, 0x56, 0x38, 0x14, 0x25, 0x96, 0x6d, 0x60, 0x27, 0x23, 0x6e, - 0x14, 0x85, 0x8d, 0x90, 0xb3, 0xe6, 0x6a, 0x1e, 0xcf, 0x93, 0xc9, 0x84, 0x51, 0xbe, 0xa1, 0x37, - 0x21, 0x98, 0x92, 0x48, 0x3e, 0x66, 0x99, 0x0f, 0xb3, 0x8d, 0xe5, 0x71, 0xf8, 0x93, 0xcd, 0x51, - 0x14, 0x33, 0xe8, 0xc1, 0xef, 0xb3, 0x45, 0x6a, 0x02, 0x8f, 0x3f, 0x9a, 0x09, 0x0c, 0x7d, 0x26, - 0xef, 0x9b, 0xa1, 0xdc, 0x72, 0x7c, 0xaf, 0x46, 0xa3, 0x58, 0xfc, 0x67, 0x4b, 0x59, 0xec, 0x9e, - 0xae, 0x27, 0x40, 0xd4, 0x78, 0xfe, 0xcf, 0x48, 0xbc, 0x62, 0x62, 0x13, 0x53, 0x36, 0xfe, 0x19, - 0x49, 0x83, 0xd1, 0xa4, 0xb1, 0x7f, 0xdf, 0x82, 0x27, 0xfb, 0x36, 0xc6, 0x0f, 0x6f, 0xb4, 0xd2, - 0xfe, 0x83, 0x02, 0x9c, 0xe9, 0x93, 0x64, 0x4a, 0xba, 0x8f, 0xec, 0xfd, 0x3e, 0x99, 0xc5, 0x3a, - 0x35, 0x70, 0x6c, 0x9c, 0x6c, 0x19, 0xd2, 0x4b, 0x41, 0xf1, 0xb1, 0x2e, 0x05, 0xf6, 0x97, 0x0b, - 0x60, 0xbc, 0x34, 0x49, 0x3e, 0x64, 0xe6, 0x53, 0x5b, 0x79, 0xe5, 0xfe, 0x0a, 0xe6, 0x2a, 0x1f, - 0x5b, 0xb4, 0x5a, 0xbf, 0xf4, 0xec, 0xec, 0x78, 0x2d, 0x1c, 0x3d, 0x5e, 0x49, 0x33, 0x49, 0x5c, - 0x2f, 0xe6, 0x9f, 0xb8, 0x5e, 0xee, 0x49, 0x5a, 0xff, 0x15, 0x4b, 0x8c, 0xb4, 0x4c, 0x95, 0xb4, - 0x85, 0xb5, 0x1e, 0x60, 0x61, 0xdf, 0x02, 0xa5, 0x88, 0x36, 0x6b, 0xcc, 0xb3, 0x93, 0x96, 0x58, - 0x8d, 0x89, 0x6d, 0x09, 0x47, 0x45, 0xc1, 0xaf, 0xb4, 0x36, 0x9b, 0xc1, 0xdd, 0xd5, 0x56, 0x3b, - 0xee, 0x4a, 0x9b, 0xac, 0xaf, 0xb4, 0x2a, 0x0c, 0x1a, 0x54, 0xf6, 0x7f, 0x5a, 0xa2, 0x3b, 0xa5, - 0x8f, 0xfe, 0x42, 0xe6, 0xaa, 0xe1, 0xf1, 0xdd, 0xdb, 0x9f, 0x07, 0x70, 0xd5, 0xe5, 0xff, 0x7c, - 0x1e, 0xa0, 0xd4, 0x8f, 0x09, 0x98, 0xaf, 0x22, 0x26, 0x30, 0x34, 0xe4, 0xa5, 0x26, 0x4f, 0xf1, - 0xa8, 0xc9, 0x63, 0xff, 0x9b, 0x05, 0xa9, 0xc5, 0x82, 0xb4, 0x61, 0x94, 0x69, 0xd0, 0xcd, 0xe7, - 0xa9, 0x02, 0x93, 0x35, 0x9b, 0x58, 0x72, 0x58, 0xf0, 0x9f, 0x28, 0x04, 0x91, 0xa6, 0xf4, 0xce, - 0x0b, 0x79, 0x3c, 0xa7, 0x61, 0x0a, 0x64, 0xfe, 0xbd, 0xfc, 0x17, 0x0c, 0xe5, 0xe9, 0xdb, 0x2f, - 0xc0, 0x4c, 0x8f, 0x52, 0xfc, 0xf2, 0x51, 0x90, 0xbc, 0xcf, 0x60, 0x8c, 0x40, 0x7e, 0x15, 0x12, - 0x05, 0x8e, 0x39, 0xf8, 0xa7, 0xb3, 0xec, 0xc9, 0x17, 0x2c, 0x98, 0x89, 0xb2, 0xfc, 0x1e, 0x55, - 0xdb, 0xa9, 0xc8, 0x55, 0x0f, 0x0a, 0x7b, 0x95, 0xb0, 0xff, 0x42, 0x9a, 0x27, 0xf1, 0xaf, 0x61, - 0x6a, 0x71, 0xb1, 0x06, 0x2e, 0x2e, 0x6c, 0x8a, 0xb9, 0x0d, 0x5a, 0xed, 0x34, 0x7b, 0x52, 0x69, - 0xb6, 0x25, 0x1c, 0x15, 0x45, 0xea, 0x21, 0xba, 0xe2, 0x91, 0x0f, 0xd1, 0x3d, 0x0f, 0x93, 0xe6, - 0x1b, 0x24, 0x3c, 0x84, 0x26, 0x0f, 0x1f, 0xcc, 0xe7, 0x4a, 0x30, 0x45, 0x95, 0x79, 0xc8, 0x6c, - 0xf4, 0xc8, 0x87, 0xcc, 0x9e, 0x85, 0x92, 0x7c, 0x94, 0x2b, 0x89, 0xef, 0x8a, 0x3c, 0x1d, 0x09, - 0x43, 0x85, 0x65, 0x06, 0xa2, 0xe5, 0xf8, 0x1d, 0xa7, 0xc9, 0x5a, 0x48, 0xa6, 0xef, 0xa9, 0x99, - 0x75, 0x5d, 0x61, 0xd0, 0xa0, 0xb2, 0xff, 0xc9, 0x82, 0xec, 0x1b, 0x41, 0xa9, 0x24, 0x40, 0xeb, - 0xc8, 0x24, 0xc0, 0x74, 0x82, 0x53, 0xe1, 0x58, 0x09, 0x4e, 0x66, 0xee, 0x51, 0xf1, 0x81, 0xb9, - 0x47, 0x6f, 0xd0, 0x17, 0xc8, 0x45, 0x92, 0xd2, 0x44, 0xbf, 0xcb, 0xe3, 0xc4, 0x86, 0x31, 0xd7, - 0x51, 0x39, 0xd6, 0x93, 0xc2, 0x51, 0x5a, 0x5e, 0xe2, 0x44, 0x12, 0x53, 0x59, 0xf8, 0xea, 0x77, - 0xce, 0x3f, 0xf1, 0xb5, 0xef, 0x9c, 0x7f, 0xe2, 0x9b, 0xdf, 0x39, 0xff, 0xc4, 0x47, 0xee, 0x9d, - 0xb7, 0xbe, 0x7a, 0xef, 0xbc, 0xf5, 0xb5, 0x7b, 0xe7, 0xad, 0x6f, 0xde, 0x3b, 0x6f, 0x7d, 0xfb, - 0xde, 0x79, 0xeb, 0x33, 0xff, 0x70, 0xfe, 0x89, 0x77, 0x97, 0x92, 0xb1, 0xfa, 0x3f, 0x01, 0x00, - 0x00, 0xff, 0xff, 0x0f, 0x7f, 0x2b, 0x5c, 0x83, 0x76, 0x00, 0x00, + 0x45, 0x33, 0xaf, 0x9c, 0x95, 0x0d, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3, 0x15, 0x57, 0xa5, + 0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0x9b, 0xcf, 0x19, 0x63, 0xc5, 0xad, 0x68, 0x14, 0x9a, 0x74, 0xc4, + 0x87, 0x51, 0xb6, 0xa2, 0xa2, 0xd9, 0x11, 0xae, 0xff, 0xea, 0x70, 0xfa, 0xcb, 0x4e, 0x65, 0x8b, + 0x55, 0xf7, 0x3e, 0xfb, 0x15, 0xa1, 0x10, 0x43, 0x3e, 0x65, 0xc1, 0xac, 0x5c, 0xf1, 0x48, 0x45, + 0x87, 0xde, 0x6e, 0x78, 0x31, 0x6d, 0x7a, 0x51, 0x3c, 0x3b, 0xca, 0x75, 0x58, 0x3c, 0xde, 0xdc, + 0xba, 0x12, 0x06, 0x9d, 0xf6, 0x75, 0xcf, 0xaf, 0x56, 0x2e, 0x48, 0x49, 0xb3, 0xcb, 0x03, 0x18, + 0xe3, 0x40, 0x91, 0xe4, 0x73, 0x16, 0xcc, 0xf9, 0x4e, 0x8b, 0x46, 0x6d, 0x87, 0x0d, 0xad, 0x40, + 0x57, 0x9a, 0x8e, 0xbb, 0xc7, 0x35, 0x1a, 0x7b, 0x38, 0x8d, 0x6c, 0xa9, 0xd1, 0xdc, 0xc6, 0x40, + 0xd6, 0xf8, 0x00, 0xb1, 0xe4, 0x37, 0x2c, 0x98, 0x09, 0xc2, 0x76, 0xc3, 0xf1, 0x69, 0x35, 0xc1, + 0x46, 0xb3, 0xe3, 0x7c, 0xe9, 0xbd, 0x6f, 0xb8, 0x21, 0xda, 0xcc, 0xb2, 0x5d, 0x0f, 0x7c, 0x2f, + 0x0e, 0xc2, 0x6d, 0x1a, 0xc7, 0x9e, 0x5f, 0x8f, 0x2a, 0x4f, 0xde, 0x3b, 0x9c, 0x9f, 0xe9, 0xa1, + 0xc2, 0x5e, 0x7d, 0xc8, 0x07, 0x60, 0x22, 0xea, 0xfa, 0xee, 0x6d, 0xcf, 0xaf, 0x06, 0x77, 0xa3, + 0xd9, 0x52, 0x1e, 0xcb, 0x77, 0x5b, 0x31, 0x94, 0x0b, 0x50, 0x0b, 0x40, 0x53, 0x5a, 0xff, 0x81, + 0xd3, 0x53, 0xa9, 0x9c, 0xf7, 0xc0, 0xe9, 0xc9, 0xf4, 0x00, 0xb1, 0xe4, 0xe3, 0x16, 0x4c, 0x45, + 0x5e, 0xdd, 0x77, 0xe2, 0x4e, 0x48, 0xaf, 0xd3, 0x6e, 0x34, 0x0b, 0x5c, 0x91, 0x6b, 0x43, 0xf6, + 0x8a, 0xc1, 0xb2, 0xf2, 0xa4, 0xd4, 0x71, 0xca, 0x84, 0x46, 0x98, 0x96, 0xdb, 0x6f, 0xa1, 0xe9, + 0x69, 0x3d, 0x91, 0xef, 0x42, 0xd3, 0x93, 0x7a, 0xa0, 0x48, 0xfb, 0x4f, 0x0b, 0x70, 0x3a, 0xbb, + 0x07, 0x91, 0xdf, 0xb2, 0xe0, 0xd4, 0x9d, 0xbb, 0xf1, 0x4e, 0xb0, 0x47, 0xfd, 0xa8, 0xd2, 0x65, + 0x96, 0x82, 0x5b, 0xdf, 0x89, 0x8b, 0x6e, 0xbe, 0xbb, 0xdd, 0xc2, 0xb5, 0xb4, 0x94, 0x4b, 0x7e, + 0x1c, 0x76, 0x2b, 0x4f, 0xc9, 0xf6, 0x9c, 0xba, 0x76, 0x7b, 0xc7, 0xc4, 0x62, 0x56, 0xa9, 0xb9, + 0x4f, 0x58, 0x70, 0xb6, 0x1f, 0x0b, 0x72, 0x1a, 0x8a, 0x7b, 0xb4, 0x2b, 0x1c, 0x1c, 0x64, 0x7f, + 0x92, 0x9f, 0x86, 0xd1, 0x7d, 0xa7, 0xd9, 0xa1, 0xd2, 0x51, 0xb8, 0x32, 0x5c, 0x43, 0x94, 0x66, + 0x28, 0xb8, 0xbe, 0xbd, 0xf0, 0x82, 0x65, 0xff, 0x45, 0x11, 0x26, 0x8c, 0xad, 0xe2, 0x31, 0x38, + 0x3f, 0x41, 0xca, 0xf9, 0x59, 0xcf, 0x6d, 0x97, 0x1b, 0xe8, 0xfd, 0xdc, 0xcd, 0x78, 0x3f, 0x9b, + 0xf9, 0x89, 0x7c, 0xa0, 0xfb, 0x43, 0x62, 0x28, 0x07, 0x6d, 0xe6, 0xdc, 0xb2, 0x5d, 0x74, 0x24, + 0x8f, 0x21, 0xdc, 0x4c, 0xd8, 0x55, 0xa6, 0xee, 0x1d, 0xce, 0x97, 0xd5, 0x4f, 0xd4, 0x82, 0xec, + 0xaf, 0x5b, 0x70, 0xd6, 0xd0, 0x71, 0x39, 0xf0, 0xab, 0x1e, 0x1f, 0xda, 0x0b, 0x30, 0x12, 0x77, + 0xdb, 0x89, 0x07, 0xad, 0x7a, 0x6a, 0xa7, 0xdb, 0xa6, 0xc8, 0x31, 0xcc, 0x67, 0x6e, 0xd1, 0x28, + 0x72, 0xea, 0x34, 0xeb, 0x33, 0xaf, 0x0b, 0x30, 0x26, 0x78, 0x12, 0x02, 0x69, 0x3a, 0x51, 0xbc, + 0x13, 0x3a, 0x7e, 0xc4, 0xd9, 0xef, 0x78, 0x2d, 0x2a, 0x3b, 0xf8, 0xff, 0x1d, 0x6f, 0xc6, 0xb0, + 0x2f, 0x2a, 0xe7, 0xee, 0x1d, 0xce, 0x93, 0xb5, 0x1e, 0x4e, 0xd8, 0x87, 0xbb, 0xfd, 0x39, 0x0b, + 0xce, 0xf5, 0x77, 0x6b, 0xc8, 0x1b, 0x61, 0x2c, 0xa2, 0xe1, 0x3e, 0x0d, 0x65, 0xeb, 0xf4, 0x90, + 0x70, 0x28, 0x4a, 0x2c, 0x59, 0x84, 0xb2, 0x32, 0xb9, 0xb2, 0x8d, 0x33, 0x92, 0xb4, 0xac, 0xed, + 0xb4, 0xa6, 0x61, 0x9d, 0xc6, 0x7e, 0x48, 0x27, 0x48, 0x75, 0x1a, 0x8f, 0x37, 0x38, 0xc6, 0xfe, + 0x3b, 0x0b, 0x4e, 0x19, 0x5a, 0x3d, 0x06, 0x2f, 0xd7, 0x4f, 0x7b, 0xb9, 0xab, 0xb9, 0xcd, 0xe7, + 0x01, 0x6e, 0xee, 0x97, 0xc7, 0x60, 0xc6, 0x9c, 0xf5, 0xdc, 0x1c, 0xf3, 0x00, 0x8b, 0xb6, 0x83, + 0x9b, 0xb8, 0x26, 0xfb, 0x5c, 0x07, 0x58, 0x02, 0x8c, 0x09, 0x9e, 0x75, 0x62, 0xdb, 0x89, 0x1b, + 0xb2, 0xc3, 0x55, 0x27, 0x6e, 0x39, 0x71, 0x03, 0x39, 0x86, 0xbc, 0x04, 0xd3, 0xb1, 0x13, 0xd6, + 0x69, 0x8c, 0x74, 0xdf, 0x8b, 0x92, 0xf5, 0x52, 0xae, 0x9c, 0x93, 0xb4, 0xd3, 0x3b, 0x29, 0x2c, + 0x66, 0xa8, 0xc9, 0x2b, 0x30, 0xd2, 0xa0, 0xcd, 0x96, 0xf4, 0x6b, 0xb6, 0xf3, 0x5b, 0xe1, 0xbc, + 0xad, 0x57, 0x69, 0xb3, 0x55, 0x29, 0x31, 0x95, 0xd9, 0x5f, 0xc8, 0x45, 0x91, 0x9f, 0xb7, 0xa0, + 0xbc, 0xd7, 0x89, 0xe2, 0xa0, 0xe5, 0xbd, 0x9f, 0xce, 0x96, 0xb8, 0xe0, 0x9f, 0xca, 0x59, 0xf0, + 0xf5, 0x84, 0xbf, 0x58, 0xef, 0xea, 0x27, 0x6a, 0xc9, 0xe4, 0x83, 0x30, 0xbe, 0x17, 0x05, 0xbe, + 0x4f, 0x99, 0xa7, 0xc2, 0x94, 0xb8, 0x95, 0xb7, 0x12, 0x82, 0x7b, 0x65, 0x82, 0x8d, 0xad, 0xfc, + 0x81, 0x89, 0x4c, 0xde, 0x0d, 0x55, 0x2f, 0xa4, 0x6e, 0x1c, 0x84, 0xdd, 0x59, 0x78, 0x24, 0xdd, + 0xb0, 0x92, 0xf0, 0x17, 0xdd, 0xa0, 0x7e, 0xa2, 0x96, 0x4c, 0xba, 0x30, 0xd6, 0x6e, 0x76, 0xea, + 0x9e, 0x3f, 0x3b, 0xc1, 0x75, 0xb8, 0x99, 0xb3, 0x0e, 0x5b, 0x9c, 0x79, 0x05, 0x98, 0x51, 0x11, + 0x7f, 0xa3, 0x14, 0x48, 0x9e, 0x81, 0x51, 0xb7, 0xe1, 0x84, 0xf1, 0xec, 0x24, 0x9f, 0xb3, 0x6a, + 0x11, 0x2d, 0x33, 0x20, 0x0a, 0x9c, 0xfd, 0x6b, 0x05, 0x98, 0x1b, 0xdc, 0x30, 0xb1, 0x9a, 0xdc, + 0x4e, 0x18, 0x09, 0xfb, 0x5c, 0x32, 0x57, 0x13, 0x07, 0x63, 0x82, 0x27, 0x1f, 0xb5, 0x60, 0xfc, + 0x8e, 0x1c, 0xf1, 0xc2, 0x23, 0x19, 0xf1, 0x6b, 0x72, 0xc4, 0x95, 0x0e, 0xd7, 0x92, 0x51, 0x97, + 0x72, 0x99, 0xba, 0xf4, 0xc0, 0x6d, 0x76, 0xaa, 0x89, 0x65, 0x54, 0xa4, 0x97, 0x04, 0x18, 0x13, + 0x3c, 0x23, 0xf5, 0x7c, 0x41, 0x3a, 0x92, 0x26, 0x5d, 0xf5, 0x25, 0xa9, 0xc4, 0xdb, 0xdf, 0x29, + 0xc2, 0x93, 0x7d, 0x17, 0x1f, 0x59, 0x00, 0xe0, 0x3e, 0xcb, 0x65, 0x8f, 0x05, 0x98, 0x22, 0xaa, + 0x9e, 0x66, 0x2e, 0xc6, 0x2d, 0x05, 0x45, 0x83, 0x82, 0x7c, 0x18, 0xa0, 0xed, 0x84, 0x4e, 0x8b, + 0xc6, 0x34, 0x4c, 0xec, 0xe4, 0xf5, 0xe1, 0x7a, 0x89, 0xe9, 0xb1, 0x95, 0xf0, 0xd4, 0x3e, 0x8e, + 0x02, 0x45, 0x68, 0x88, 0x64, 0x31, 0x74, 0x48, 0x9b, 0xd4, 0x89, 0xe8, 0x86, 0xde, 0x3e, 0x54, + 0x0c, 0x8d, 0x1a, 0x85, 0x26, 0x1d, 0xdb, 0xc7, 0x78, 0x2b, 0x22, 0xd9, 0x57, 0x6a, 0x1f, 0xe3, + 0xed, 0x8c, 0x50, 0x62, 0xc9, 0x6b, 0x16, 0x4c, 0xd7, 0xbc, 0x26, 0xd5, 0xd2, 0x65, 0xc4, 0xbb, + 0x39, 0x7c, 0x23, 0x2f, 0x9b, 0x7c, 0xb5, 0x05, 0x4e, 0x81, 0x23, 0xcc, 0x88, 0x67, 0xc3, 0xbc, + 0x4f, 0x43, 0x6e, 0xba, 0xc7, 0xd2, 0xc3, 0x7c, 0x4b, 0x80, 0x31, 0xc1, 0xdb, 0x5f, 0x28, 0xc0, + 0xec, 0xa0, 0x39, 0x47, 0x22, 0x36, 0xb3, 0xe2, 0x5b, 0x4e, 0x18, 0x49, 0xf7, 0x7d, 0xc8, 0x28, + 0x50, 0xf2, 0xbd, 0xe5, 0x84, 0xe6, 0x1c, 0xe5, 0x02, 0x30, 0x91, 0x44, 0xee, 0xc0, 0x48, 0xdc, + 0x74, 0x72, 0x4a, 0x1b, 0x19, 0x12, 0xb5, 0x93, 0xb5, 0xb6, 0x14, 0x21, 0x97, 0x41, 0x9e, 0x86, + 0x91, 0xa6, 0xb7, 0xcb, 0x9c, 0x51, 0x36, 0x89, 0xf9, 0xae, 0xb2, 0xe6, 0xed, 0x46, 0xc8, 0xa1, + 0xf6, 0xd7, 0xac, 0x3e, 0x7d, 0x23, 0x8d, 0x2e, 0x9b, 0x54, 0xd4, 0xdf, 0xf7, 0xc2, 0xc0, 0x6f, + 0x51, 0x3f, 0xce, 0xa6, 0x42, 0x2f, 0x69, 0x14, 0x9a, 0x74, 0xe4, 0xe7, 0xac, 0x3e, 0xab, 0x61, + 0xc8, 0x1c, 0xa0, 0x54, 0xe9, 0xd8, 0x0b, 0xc2, 0xfe, 0xf7, 0xb1, 0x3e, 0xf6, 0x4f, 0x6d, 0x68, + 0xe4, 0x22, 0x00, 0xf3, 0xa6, 0xb6, 0x42, 0x5a, 0xf3, 0x0e, 0x64, 0xcb, 0x14, 0xcb, 0x0d, 0x85, + 0x41, 0x83, 0x2a, 0xf9, 0x66, 0xbb, 0x53, 0x63, 0xdf, 0x14, 0x7a, 0xbf, 0x11, 0x18, 0x34, 0xa8, + 0xc8, 0xf3, 0x30, 0xe6, 0xb5, 0x9c, 0x3a, 0x4d, 0xfa, 0xff, 0x69, 0xb6, 0xb8, 0x56, 0x39, 0xe4, + 0xfe, 0xe1, 0xfc, 0xb4, 0x52, 0x88, 0x83, 0x50, 0xd2, 0x92, 0xdf, 0xb4, 0x60, 0xd2, 0x0d, 0x5a, + 0xad, 0xc0, 0x5f, 0x73, 0x76, 0x69, 0x33, 0x49, 0x71, 0xdd, 0x79, 0x54, 0xdb, 0xfd, 0xc2, 0xb2, + 0x21, 0x4c, 0x04, 0x98, 0x2a, 0x71, 0x67, 0xa2, 0x30, 0xa5, 0x95, 0xb9, 0x06, 0x47, 0x1f, 0xbc, + 0x06, 0xc9, 0x1f, 0x58, 0x30, 0x23, 0xbe, 0x5d, 0xf2, 0xfd, 0x20, 0x96, 0x99, 0x47, 0x91, 0xa3, + 0x0a, 0x1e, 0x71, 0xb3, 0x0c, 0x89, 0xa2, 0x6d, 0xaf, 0x93, 0x6a, 0xce, 0xf4, 0xe0, 0xb1, 0x57, + 0x49, 0x72, 0x05, 0x66, 0x6a, 0x41, 0xe8, 0x52, 0xb3, 0x23, 0xb8, 0xe3, 0x57, 0xd2, 0x8c, 0x2e, + 0x67, 0x09, 0xb0, 0xf7, 0x1b, 0x72, 0x0b, 0xce, 0x19, 0x40, 0xb3, 0x1f, 0x4a, 0x9c, 0xdb, 0x79, + 0xc9, 0xed, 0xdc, 0xe5, 0xbe, 0x54, 0x38, 0xe0, 0xeb, 0xb9, 0x77, 0xc2, 0x4c, 0xcf, 0xf8, 0xf5, + 0x89, 0xee, 0xcf, 0x9a, 0xd1, 0x7d, 0xd9, 0x08, 0xca, 0xe7, 0x56, 0xe0, 0x5c, 0xff, 0x9e, 0x3a, + 0x09, 0x17, 0xfb, 0x57, 0x2c, 0x78, 0x6a, 0x80, 0x1b, 0xa3, 0xc2, 0x1a, 0x6b, 0x50, 0x58, 0x43, + 0x1c, 0x28, 0x52, 0x7f, 0x5f, 0x1a, 0x8b, 0xcb, 0xc3, 0xcd, 0x88, 0x4b, 0xfe, 0xbe, 0x18, 0xe8, + 0xf1, 0x7b, 0x87, 0xf3, 0xc5, 0x4b, 0xfe, 0x3e, 0x32, 0xde, 0xf6, 0x3f, 0x8e, 0xa5, 0x22, 0xa7, + 0xed, 0x24, 0x58, 0xe7, 0x8a, 0xca, 0xb8, 0x69, 0x33, 0xe7, 0xb9, 0x68, 0x44, 0x86, 0x22, 0x05, + 0x2f, 0xc5, 0x91, 0x4f, 0x58, 0x3c, 0xeb, 0x9d, 0x44, 0x94, 0xd2, 0xb3, 0x7a, 0x34, 0x49, 0x78, + 0x33, 0x97, 0x9e, 0x00, 0xd1, 0x94, 0xce, 0x56, 0x72, 0x5b, 0x24, 0x9d, 0xb2, 0xfe, 0x55, 0x92, + 0x17, 0x4f, 0xf0, 0xe4, 0x00, 0x20, 0xea, 0xfa, 0xee, 0x56, 0xd0, 0xf4, 0xdc, 0xae, 0x4c, 0x33, + 0xe4, 0x90, 0x39, 0x15, 0xfc, 0x84, 0x93, 0xa5, 0x7f, 0xa3, 0x21, 0x8b, 0x7c, 0xd1, 0x82, 0x19, + 0xaf, 0xee, 0x07, 0x21, 0x5d, 0xf1, 0x6a, 0x35, 0x1a, 0x52, 0xdf, 0xa5, 0x89, 0x1f, 0x72, 0x7b, + 0x38, 0x0d, 0x92, 0xa4, 0xdf, 0x6a, 0x96, 0xbd, 0x5e, 0xe2, 0x3d, 0x28, 0xec, 0x55, 0x86, 0x54, + 0x61, 0xc4, 0xf3, 0x6b, 0x81, 0x34, 0x6c, 0x95, 0xe1, 0x94, 0x5a, 0xf5, 0x6b, 0x81, 0x5e, 0x2b, + 0xec, 0x17, 0x72, 0xee, 0x64, 0x0d, 0xce, 0x86, 0x32, 0x12, 0xbd, 0xea, 0x45, 0xcc, 0x9f, 0x5f, + 0xf3, 0x5a, 0x5e, 0xcc, 0x8d, 0x52, 0xb1, 0x32, 0x7b, 0xef, 0x70, 0xfe, 0x2c, 0xf6, 0xc1, 0x63, + 0xdf, 0xaf, 0xc8, 0x16, 0x4c, 0xc7, 0xa1, 0xe3, 0xee, 0x79, 0x7e, 0x7d, 0x9d, 0xc6, 0x8d, 0xa0, + 0xca, 0xcd, 0x51, 0xb9, 0xf2, 0xac, 0x8a, 0x85, 0x53, 0xd8, 0xfb, 0x3d, 0x10, 0xcc, 0x7c, 0x6f, + 0xbf, 0x5a, 0x4e, 0x07, 0xf0, 0x22, 0x3d, 0xf5, 0x41, 0x28, 0x87, 0xea, 0x40, 0x40, 0xf8, 0x5a, + 0x6b, 0xf9, 0x8c, 0x9a, 0xcc, 0x8b, 0xa9, 0xcc, 0x8a, 0x4e, 0xfd, 0x6b, 0x89, 0xcc, 0xe7, 0x62, + 0x73, 0x49, 0x2e, 0xb4, 0x1c, 0x66, 0xac, 0x94, 0xaa, 0x53, 0x80, 0x5d, 0xdf, 0x45, 0x2e, 0x83, + 0x84, 0x30, 0xd6, 0xa0, 0x4e, 0x33, 0x6e, 0xc8, 0x0c, 0xd5, 0xb5, 0x61, 0xbd, 0x64, 0xc6, 0x2b, + 0x9b, 0xfd, 0x13, 0x50, 0x94, 0x92, 0xc8, 0x01, 0x8c, 0x37, 0xc4, 0xb0, 0x4a, 0x6f, 0x61, 0x7d, + 0xd8, 0xce, 0x4d, 0xcd, 0x15, 0x6d, 0x11, 0x24, 0x00, 0x13, 0x71, 0xe4, 0x17, 0x2c, 0x00, 0x37, + 0x49, 0xfb, 0x25, 0x0b, 0x12, 0x73, 0xb3, 0x64, 0x2a, 0xa3, 0xa8, 0x9d, 0x2d, 0x05, 0x8a, 0xd0, + 0x90, 0x4c, 0x5e, 0x86, 0xc9, 0x90, 0xba, 0x81, 0xef, 0x7a, 0x4d, 0x5a, 0x5d, 0x8a, 0x79, 0x60, + 0x70, 0xb2, 0xf4, 0xe0, 0x69, 0xe6, 0xf1, 0xa0, 0xc1, 0x03, 0x53, 0x1c, 0xc9, 0xab, 0x16, 0x4c, + 0xab, 0xd4, 0x27, 0x1b, 0x10, 0x2a, 0x53, 0x40, 0x6b, 0x39, 0x25, 0x5a, 0x39, 0xcf, 0x0a, 0x61, + 0xcb, 0x2e, 0x0d, 0xc3, 0x8c, 0x5c, 0xf2, 0x6e, 0x80, 0x60, 0x97, 0xa7, 0x19, 0x59, 0x53, 0x4b, + 0x27, 0x6e, 0xea, 0xb4, 0xc8, 0x98, 0x27, 0x1c, 0xd0, 0xe0, 0x46, 0xae, 0x03, 0x88, 0x65, 0xb3, + 0xd3, 0x6d, 0x53, 0x9e, 0xe6, 0x29, 0x57, 0xde, 0x9c, 0x74, 0xfe, 0xb6, 0xc2, 0xdc, 0x3f, 0x9c, + 0xef, 0x8d, 0x9f, 0x79, 0x7e, 0xd7, 0xf8, 0x9c, 0x7c, 0x00, 0xc6, 0xa3, 0x4e, 0xab, 0xe5, 0xa8, + 0x74, 0xcd, 0x56, 0x7e, 0x7b, 0xac, 0xe0, 0xab, 0xe7, 0xa6, 0x04, 0x60, 0x22, 0xd1, 0xf6, 0x81, + 0xf4, 0xd2, 0x93, 0xe7, 0x61, 0x92, 0x1e, 0xc4, 0x34, 0xf4, 0x9d, 0xe6, 0x4d, 0x5c, 0x4b, 0x02, + 0x7c, 0x3e, 0xf8, 0x97, 0x0c, 0x38, 0xa6, 0xa8, 0x88, 0xad, 0x7c, 0xf9, 0x02, 0xa7, 0x07, 0xed, + 0xcb, 0x27, 0x9e, 0xbb, 0xfd, 0xdf, 0x85, 0x94, 0x8f, 0xb1, 0x13, 0x52, 0x4a, 0x02, 0x18, 0xf5, + 0x83, 0xaa, 0x32, 0x7a, 0xd7, 0xf2, 0x31, 0x7a, 0x1b, 0x41, 0xd5, 0x38, 0xa9, 0x66, 0xbf, 0x22, + 0x14, 0x72, 0xf8, 0x51, 0x5e, 0x72, 0xe6, 0xc9, 0x11, 0xd2, 0xad, 0xca, 0x53, 0xb2, 0x3a, 0xca, + 0xdb, 0x34, 0x05, 0x61, 0x5a, 0x2e, 0xd9, 0x83, 0xd1, 0x46, 0x10, 0xc5, 0x22, 0xfa, 0x19, 0xda, + 0xaf, 0xbb, 0x1a, 0x44, 0x31, 0xdf, 0x14, 0x55, 0xb3, 0x19, 0x24, 0x42, 0x21, 0xc3, 0xfe, 0xae, + 0x95, 0x4a, 0xe7, 0xdc, 0x76, 0x62, 0xb7, 0x71, 0x69, 0x9f, 0x45, 0xa4, 0xd7, 0x53, 0x47, 0x11, + 0x3f, 0x66, 0x1e, 0x45, 0xdc, 0x3f, 0x9c, 0x7f, 0xd3, 0xa0, 0xd2, 0xa1, 0xbb, 0x8c, 0xc3, 0x02, + 0x67, 0x61, 0x9c, 0x5a, 0x7c, 0xc4, 0x82, 0x09, 0x43, 0x3d, 0xb9, 0xa1, 0xe4, 0x98, 0x15, 0x57, + 0xee, 0x9a, 0x01, 0x44, 0x53, 0xa4, 0xfd, 0x59, 0x0b, 0xc6, 0x2b, 0x8e, 0xbb, 0x17, 0xd4, 0x6a, + 0xe4, 0x2d, 0x50, 0xaa, 0x76, 0xe4, 0xa1, 0x8f, 0x68, 0x9f, 0xca, 0xe5, 0xaf, 0x48, 0x38, 0x2a, + 0x0a, 0x36, 0x87, 0x6b, 0x8e, 0x1b, 0x07, 0x21, 0x57, 0xbb, 0x28, 0xe6, 0xf0, 0x65, 0x0e, 0x41, + 0x89, 0x61, 0x61, 0x7f, 0xcb, 0x39, 0x48, 0x3e, 0xce, 0xe6, 0x92, 0xd6, 0x35, 0x0a, 0x4d, 0x3a, + 0xfb, 0x4f, 0xca, 0x30, 0x2e, 0x4f, 0x57, 0x8f, 0x7d, 0x3e, 0x92, 0xc4, 0x05, 0x85, 0x81, 0x71, + 0x41, 0x04, 0x63, 0x2e, 0x2f, 0xcc, 0x92, 0x5b, 0xe9, 0x90, 0x59, 0x35, 0xa9, 0xa0, 0xa8, 0xf5, + 0xd2, 0x6a, 0x89, 0xdf, 0x28, 0x45, 0x91, 0xcf, 0x58, 0x70, 0xca, 0x0d, 0x7c, 0x9f, 0xba, 0xda, + 0xce, 0x8f, 0xe4, 0x71, 0x7e, 0xb8, 0x9c, 0x66, 0xaa, 0x8f, 0x71, 0x33, 0x08, 0xcc, 0x8a, 0x27, + 0x2f, 0xc2, 0x94, 0xe8, 0xb3, 0x5b, 0xa9, 0x88, 0x5b, 0x9f, 0xa8, 0x9b, 0x48, 0x4c, 0xd3, 0x92, + 0x05, 0x91, 0xb9, 0xe0, 0x47, 0x4c, 0x22, 0xea, 0x96, 0xe9, 0x4c, 0x75, 0x06, 0x15, 0xa1, 0x41, + 0x41, 0x42, 0x20, 0x21, 0xad, 0x85, 0x34, 0x6a, 0x20, 0x7d, 0xa5, 0x43, 0xa3, 0x98, 0xef, 0x31, + 0xe3, 0x0f, 0x77, 0xda, 0x86, 0x3d, 0x9c, 0xb0, 0x0f, 0x77, 0xb2, 0x27, 0x5d, 0xe7, 0x52, 0x1e, + 0xcb, 0x49, 0x0e, 0xf3, 0x40, 0x0f, 0x7a, 0x1e, 0x46, 0xa3, 0x86, 0x13, 0x56, 0xf9, 0xde, 0x56, + 0xac, 0x94, 0x99, 0x2d, 0xd9, 0x66, 0x00, 0x14, 0x70, 0xb2, 0x02, 0xa7, 0x33, 0xf5, 0x00, 0x11, + 0xdf, 0xbd, 0x4a, 0x95, 0x59, 0xc9, 0xee, 0x74, 0xa6, 0x92, 0x20, 0xc2, 0x9e, 0x2f, 0xcc, 0xb0, + 0x6a, 0xe2, 0x88, 0xb0, 0xaa, 0x0b, 0x63, 0x4d, 0x91, 0x5a, 0x98, 0xe4, 0xa6, 0xf2, 0x46, 0x2e, + 0x1d, 0xb0, 0x60, 0xa6, 0x74, 0xd4, 0x6c, 0x97, 0x29, 0x0a, 0x29, 0x90, 0x7c, 0x8a, 0x19, 0x34, + 0x23, 0x1b, 0x31, 0xc5, 0x15, 0xb8, 0x95, 0x8f, 0x02, 0x3d, 0xc9, 0x17, 0x6d, 0xdd, 0x8c, 0xd4, + 0x86, 0x29, 0x7f, 0xee, 0xc7, 0x61, 0xe2, 0x61, 0x33, 0x19, 0x2f, 0xc1, 0xe9, 0xa1, 0x72, 0x18, + 0xdf, 0xb3, 0x20, 0x19, 0xd7, 0x65, 0xc7, 0x6d, 0x50, 0x36, 0x65, 0xc8, 0x4b, 0x30, 0xad, 0xc2, + 0x88, 0xe5, 0xa0, 0x23, 0x33, 0xa1, 0x45, 0x9d, 0xaa, 0xc6, 0x14, 0x16, 0x33, 0xd4, 0x64, 0x11, + 0xca, 0xac, 0x9f, 0xc4, 0xa7, 0xc2, 0xec, 0xaa, 0x50, 0x65, 0x69, 0x6b, 0x55, 0x7e, 0xa5, 0x69, + 0x48, 0x00, 0x33, 0x4d, 0x27, 0x8a, 0xb9, 0x06, 0x2c, 0xaa, 0x78, 0xc8, 0xb3, 0x6e, 0x5e, 0x0e, + 0xb5, 0x96, 0x65, 0x84, 0xbd, 0xbc, 0xed, 0xaf, 0x8f, 0xc0, 0x54, 0xca, 0x32, 0xb2, 0x5d, 0xa5, + 0x13, 0x31, 0xd7, 0x47, 0x25, 0x6d, 0xd4, 0xae, 0x72, 0x53, 0xc2, 0x51, 0x51, 0x30, 0xea, 0xb6, + 0x13, 0x45, 0x77, 0x83, 0xb0, 0x2a, 0x4d, 0xb9, 0xa2, 0xde, 0x92, 0x70, 0x54, 0x14, 0x6c, 0x7f, + 0xd9, 0xa5, 0x4e, 0x48, 0x43, 0x5e, 0x1e, 0x92, 0xdd, 0x5f, 0x2a, 0x1a, 0x85, 0x26, 0x1d, 0x37, + 0xca, 0x71, 0x33, 0x5a, 0x6e, 0x7a, 0xd4, 0x8f, 0x85, 0x9a, 0xf9, 0x18, 0xe5, 0x9d, 0xb5, 0x6d, + 0x93, 0xa9, 0x36, 0xca, 0x19, 0x04, 0x66, 0xc5, 0x93, 0x8f, 0x59, 0x30, 0xe5, 0xdc, 0x8d, 0x74, + 0xf5, 0x30, 0xb7, 0xca, 0x43, 0x6f, 0x52, 0xa9, 0x82, 0xe4, 0xca, 0x0c, 0x33, 0xef, 0x29, 0x10, + 0xa6, 0x85, 0x92, 0xcf, 0x5b, 0x40, 0xe8, 0x01, 0x75, 0xb7, 0xc2, 0x60, 0xdf, 0xab, 0x26, 0x63, + 0x28, 0xc3, 0x9f, 0x21, 0xbd, 0xed, 0x4b, 0x3d, 0x7c, 0x85, 0x55, 0xef, 0x85, 0x63, 0x1f, 0x1d, + 0xec, 0xbf, 0x29, 0xc2, 0x84, 0x61, 0x8c, 0xfb, 0xee, 0xac, 0xd6, 0x0f, 0xd8, 0xce, 0x5a, 0x38, + 0xc1, 0xce, 0xfa, 0x61, 0x28, 0xbb, 0x89, 0xa1, 0xc8, 0xa7, 0xda, 0x39, 0x6b, 0x7e, 0xb4, 0xad, + 0x50, 0x20, 0xd4, 0x32, 0xc9, 0x15, 0x98, 0x31, 0xd8, 0x48, 0x23, 0x33, 0xc2, 0x8d, 0x8c, 0x4a, + 0x5d, 0x2d, 0x65, 0x09, 0xb0, 0xf7, 0x1b, 0xf2, 0x1c, 0xf3, 0x6a, 0x3d, 0xd9, 0x2e, 0x11, 0xc5, + 0xcb, 0x4a, 0xe2, 0xa5, 0xad, 0xd5, 0x04, 0x8c, 0x26, 0x8d, 0xfd, 0x75, 0x4b, 0x0d, 0xee, 0x63, + 0x28, 0x43, 0xb9, 0x93, 0x2e, 0x43, 0xb9, 0x94, 0x4b, 0x37, 0x0f, 0x28, 0x41, 0xd9, 0x80, 0xf1, + 0xe5, 0xa0, 0xd5, 0x72, 0xfc, 0x2a, 0x79, 0x03, 0x8c, 0xbb, 0xe2, 0x4f, 0x19, 0x26, 0xf2, 0xba, + 0x04, 0x89, 0xc5, 0x04, 0x47, 0x9e, 0x86, 0x11, 0x27, 0xac, 0x27, 0xa1, 0x21, 0x3f, 0x66, 0x5b, + 0x0a, 0xeb, 0x11, 0x72, 0xa8, 0xfd, 0xb9, 0x02, 0xc0, 0x72, 0xd0, 0x6a, 0x3b, 0x21, 0xad, 0xee, + 0x04, 0xff, 0x9b, 0x75, 0x16, 0x11, 0xc3, 0x27, 0x2d, 0x20, 0xac, 0x57, 0x02, 0x9f, 0xfa, 0xfa, + 0x68, 0x8f, 0xed, 0x97, 0x6e, 0x02, 0x95, 0x9b, 0x8f, 0x5e, 0x03, 0x09, 0x02, 0x35, 0xcd, 0x31, + 0xa2, 0x88, 0x67, 0x92, 0x1d, 0xbf, 0x98, 0x2e, 0x99, 0xe0, 0xc7, 0xdc, 0xd2, 0x01, 0xb0, 0x7f, + 0xa9, 0x00, 0xe7, 0x84, 0xd9, 0x5a, 0x77, 0x7c, 0xa7, 0x4e, 0x5b, 0x4c, 0xab, 0xe3, 0x9e, 0x5f, + 0xb8, 0xcc, 0x7d, 0xf5, 0x92, 0x0a, 0x89, 0x61, 0x27, 0xa7, 0x98, 0x54, 0x62, 0x1a, 0xad, 0xfa, + 0x5e, 0x8c, 0x9c, 0x39, 0x89, 0xa0, 0x94, 0xdc, 0x5f, 0x91, 0xc6, 0x26, 0x27, 0x41, 0x6a, 0xdd, + 0x5d, 0x91, 0xec, 0x51, 0x09, 0xb2, 0xbf, 0x6c, 0x41, 0xd6, 0x88, 0xf2, 0xf8, 0x4e, 0xd4, 0x38, + 0x66, 0xe3, 0xbb, 0x74, 0x49, 0xe2, 0x09, 0x2a, 0xfc, 0xde, 0x0b, 0x13, 0x4e, 0x1c, 0xd3, 0x56, + 0x5b, 0x04, 0x1b, 0xc5, 0x87, 0x4b, 0x68, 0xad, 0x07, 0x55, 0xaf, 0xe6, 0xf1, 0x20, 0xc3, 0x64, + 0x67, 0xdf, 0x80, 0x52, 0x72, 0x2a, 0x74, 0x8c, 0xc1, 0x7c, 0x26, 0xe5, 0x20, 0x0e, 0x98, 0x2e, + 0xf7, 0x0b, 0xd0, 0x67, 0x17, 0x64, 0x4d, 0xd6, 0xf6, 0x22, 0xd5, 0xe4, 0x93, 0xd9, 0x0c, 0x72, + 0x20, 0x4e, 0xc4, 0x44, 0xe6, 0xe4, 0x5d, 0x79, 0xef, 0xe2, 0xfa, 0x90, 0x6c, 0x42, 0xea, 0xa7, + 0x0e, 0xca, 0xc8, 0x45, 0x00, 0x6d, 0xe6, 0x65, 0x65, 0x88, 0xca, 0xbd, 0xea, 0xdd, 0x00, 0x0d, + 0x2a, 0xe6, 0xd4, 0x79, 0x7e, 0x14, 0x3b, 0xcd, 0xe6, 0x55, 0xcf, 0x8f, 0x65, 0x74, 0xaa, 0x4c, + 0xc0, 0xaa, 0x46, 0xa1, 0x49, 0x37, 0xf7, 0x36, 0x63, 0x5c, 0x4e, 0xe2, 0xa8, 0x7f, 0xb2, 0x00, + 0xd3, 0x57, 0xfc, 0xce, 0xd6, 0x95, 0xad, 0xce, 0x6e, 0xd3, 0x73, 0xaf, 0xd3, 0x2e, 0x1b, 0xb4, + 0x3d, 0xda, 0x5d, 0x5d, 0x91, 0xdd, 0xae, 0x06, 0xed, 0x3a, 0x03, 0xa2, 0xc0, 0x31, 0x35, 0x6b, + 0x9e, 0x5f, 0xa7, 0x61, 0x3b, 0xf4, 0xa4, 0x37, 0x6e, 0xa8, 0x79, 0x59, 0xa3, 0xd0, 0xa4, 0x63, + 0xbc, 0x83, 0xbb, 0x3e, 0x0d, 0xb3, 0xf6, 0x63, 0x93, 0x01, 0x51, 0xe0, 0x18, 0x51, 0x1c, 0x76, + 0xa2, 0x58, 0xf6, 0x98, 0x22, 0xda, 0x61, 0x40, 0x14, 0x38, 0x36, 0x3d, 0xa2, 0xce, 0x2e, 0xcf, + 0xab, 0x66, 0xce, 0xcc, 0xb7, 0x05, 0x18, 0x13, 0x3c, 0x23, 0xdd, 0xa3, 0xdd, 0x15, 0xb6, 0x9b, + 0x66, 0x4a, 0x5c, 0xae, 0x0b, 0x30, 0x26, 0x78, 0xfb, 0x1f, 0x2c, 0x20, 0xe9, 0xee, 0x78, 0x0c, + 0x1b, 0xf2, 0x2b, 0xe9, 0x0d, 0x79, 0xc8, 0x14, 0x78, 0x5a, 0xfd, 0x01, 0xfb, 0xf2, 0xaf, 0x5b, + 0x30, 0x69, 0x9e, 0x86, 0x90, 0x7a, 0xc6, 0x10, 0x6d, 0xa6, 0x0d, 0xd1, 0xfd, 0xc3, 0xf9, 0x9f, + 0xe8, 0x77, 0xbd, 0xb2, 0xee, 0xc5, 0x41, 0x3b, 0x7a, 0x2b, 0xf5, 0xeb, 0x9e, 0x4f, 0x79, 0xae, + 0x4f, 0x9c, 0xa2, 0xa4, 0x8e, 0x5a, 0x96, 0x83, 0x2a, 0x7d, 0x08, 0x4b, 0x66, 0xdf, 0x86, 0x99, + 0x9e, 0xba, 0xa6, 0x63, 0x18, 0x9d, 0x23, 0xab, 0x56, 0xed, 0x4f, 0x59, 0x30, 0x95, 0x2a, 0x0b, + 0xcb, 0xc9, 0x94, 0xf1, 0x55, 0x11, 0xf0, 0x83, 0xb4, 0xd0, 0xf3, 0x45, 0xa6, 0xad, 0x64, 0xac, + 0x0a, 0x8d, 0x42, 0x93, 0xce, 0xfe, 0x6c, 0x01, 0x4a, 0x49, 0x4e, 0xf6, 0x18, 0xaa, 0x7c, 0xc2, + 0x82, 0x29, 0x15, 0x1a, 0x73, 0x87, 0x39, 0x97, 0xd2, 0x20, 0xa6, 0x81, 0x3a, 0xbf, 0x65, 0x0e, + 0xb3, 0xf2, 0xdc, 0xd1, 0x14, 0x86, 0x69, 0xd9, 0xe4, 0x16, 0x40, 0xd4, 0x8d, 0x62, 0xda, 0x32, + 0x5c, 0x77, 0xdb, 0x58, 0x1d, 0x0b, 0x6e, 0x10, 0x52, 0xb6, 0x16, 0x36, 0x82, 0x2a, 0xdd, 0x56, + 0x94, 0xda, 0x10, 0x6a, 0x18, 0x1a, 0x9c, 0xec, 0xdf, 0x29, 0xc0, 0xe9, 0xac, 0x4a, 0xe4, 0x3d, + 0x30, 0x99, 0x48, 0x37, 0x6e, 0x95, 0x26, 0x89, 0xe8, 0x49, 0x34, 0x70, 0xf7, 0x0f, 0xe7, 0xe7, + 0x7b, 0xaf, 0xd5, 0x2e, 0x98, 0x24, 0x98, 0x62, 0x26, 0xf2, 0x13, 0x32, 0x91, 0x56, 0xe9, 0x2e, + 0xb5, 0xdb, 0x32, 0xc9, 0x60, 0xe4, 0x27, 0x4c, 0x2c, 0x66, 0xa8, 0xc9, 0x16, 0x9c, 0x35, 0x20, + 0x1b, 0xd4, 0xab, 0x37, 0x76, 0x83, 0x50, 0x5c, 0x5f, 0x28, 0x56, 0x9e, 0x96, 0x5c, 0xce, 0x62, + 0x1f, 0x1a, 0xec, 0xfb, 0x25, 0x79, 0x0b, 0x94, 0x5c, 0xa7, 0xed, 0xb8, 0x5e, 0xdc, 0x95, 0xb1, + 0x88, 0xb2, 0x23, 0xcb, 0x12, 0x8e, 0x8a, 0xc2, 0x5e, 0x87, 0x91, 0x63, 0xce, 0xa0, 0x63, 0xed, + 0xcb, 0x37, 0xa0, 0xc4, 0xd8, 0x31, 0xbb, 0x91, 0x17, 0xcb, 0x00, 0x4a, 0xc9, 0x6d, 0x16, 0x62, + 0x43, 0xd1, 0x73, 0x92, 0x14, 0x90, 0x6a, 0xd6, 0x6a, 0x14, 0x75, 0xb8, 0xd7, 0xc1, 0x90, 0xe4, + 0x19, 0x28, 0xd2, 0x83, 0x76, 0x36, 0xd7, 0x73, 0xe9, 0xa0, 0xed, 0x85, 0x34, 0x62, 0x44, 0xf4, + 0xa0, 0x4d, 0xe6, 0xa0, 0xe0, 0x55, 0xe5, 0x86, 0x02, 0x92, 0xa6, 0xb0, 0xba, 0x82, 0x05, 0xaf, + 0x6a, 0x1f, 0x40, 0x59, 0x5d, 0x9f, 0x21, 0x7b, 0x89, 0x9d, 0xb5, 0xf2, 0x38, 0x44, 0x49, 0xf8, + 0x0e, 0xb0, 0xb0, 0x1d, 0x00, 0x5d, 0x50, 0x98, 0x97, 0x7d, 0xb9, 0x00, 0x23, 0x6e, 0x20, 0x6b, + 0x77, 0x4b, 0x9a, 0x0d, 0x37, 0xb0, 0x1c, 0x63, 0xdf, 0x86, 0xe9, 0xeb, 0x7e, 0x70, 0xd7, 0x67, + 0x1b, 0xdf, 0x65, 0x8f, 0x36, 0xab, 0x8c, 0x71, 0x8d, 0xfd, 0x91, 0xdd, 0xce, 0x39, 0x16, 0x05, + 0x4e, 0xdd, 0x31, 0x29, 0x0c, 0xba, 0x63, 0x62, 0xff, 0xa2, 0x05, 0xa7, 0xb3, 0xc5, 0x83, 0xdf, + 0xb7, 0x08, 0xe3, 0x23, 0x4c, 0x99, 0xa4, 0x3a, 0x6d, 0xb3, 0x2d, 0x4e, 0xad, 0x5f, 0x80, 0xc9, + 0xdd, 0x8e, 0xd7, 0xac, 0xca, 0xdf, 0x52, 0x1f, 0x55, 0x7f, 0x57, 0x31, 0x70, 0x98, 0xa2, 0x64, + 0x7e, 0xda, 0xae, 0xe7, 0x3b, 0x61, 0x77, 0x4b, 0xef, 0x1b, 0xca, 0x3c, 0x55, 0x14, 0x06, 0x0d, + 0x2a, 0xfb, 0xaf, 0x8a, 0xa0, 0xef, 0xf1, 0x10, 0x4f, 0x16, 0x45, 0x58, 0x79, 0xa4, 0xad, 0xb6, + 0xbb, 0xbe, 0xab, 0x6f, 0x0c, 0x95, 0x32, 0x35, 0x11, 0x1f, 0xb7, 0x98, 0x87, 0xe8, 0xc5, 0x9e, + 0xc3, 0x8d, 0x85, 0x0c, 0x94, 0xb6, 0x72, 0x3a, 0x37, 0x5f, 0x15, 0x9c, 0x83, 0xd0, 0xf4, 0x39, + 0x95, 0x30, 0x34, 0x25, 0x93, 0x97, 0xe5, 0x49, 0x43, 0x31, 0xb7, 0x22, 0x9d, 0x52, 0xe6, 0x78, + 0xa1, 0x0d, 0xa3, 0x21, 0x8d, 0xc3, 0xa4, 0x3c, 0xea, 0xfa, 0xb0, 0xe7, 0xae, 0x71, 0xd8, 0xdd, + 0x8e, 0x59, 0x30, 0x56, 0x37, 0x1c, 0x23, 0x0e, 0x46, 0x21, 0xc8, 0x8e, 0x80, 0xf4, 0xf6, 0xc5, + 0x09, 0xb3, 0xb8, 0x8b, 0x50, 0x76, 0x3a, 0x71, 0xd0, 0x62, 0xdd, 0xc4, 0x87, 0xa7, 0x64, 0xe4, + 0xa9, 0x13, 0x04, 0x6a, 0x1a, 0xfb, 0xb5, 0x51, 0xc8, 0x54, 0x29, 0x90, 0x03, 0xf3, 0x0e, 0x9a, + 0x95, 0xef, 0x1d, 0x34, 0xa5, 0x4c, 0xbf, 0x7b, 0x68, 0xa4, 0x0e, 0xa3, 0xed, 0x86, 0x13, 0x25, + 0x6b, 0xf4, 0x46, 0xd2, 0x4d, 0x5b, 0x0c, 0x78, 0xff, 0x70, 0xfe, 0x27, 0x8f, 0xe7, 0x07, 0xb2, + 0xb9, 0xba, 0x28, 0x8a, 0x40, 0xb5, 0x68, 0xce, 0x03, 0x05, 0x7f, 0xd3, 0x13, 0x2c, 0x1e, 0x11, + 0xd3, 0x7e, 0xd4, 0x12, 0xc5, 0x72, 0x48, 0xa3, 0x4e, 0x33, 0x96, 0xb3, 0xe1, 0x46, 0x8e, 0xab, + 0x4c, 0x30, 0xd6, 0x55, 0x73, 0xe2, 0x37, 0x1a, 0x42, 0xc9, 0x7b, 0xa0, 0x1c, 0xc5, 0x4e, 0x18, + 0x3f, 0x64, 0x45, 0x8c, 0xea, 0xf4, 0xed, 0x84, 0x09, 0x6a, 0x7e, 0xe4, 0xdd, 0x00, 0x35, 0xcf, + 0xf7, 0xa2, 0xc6, 0x43, 0x1e, 0x10, 0x72, 0xc5, 0x2f, 0x2b, 0x0e, 0x68, 0x70, 0x63, 0xd6, 0x8d, + 0xcf, 0x6d, 0x91, 0xd2, 0x2c, 0xf1, 0xbd, 0x54, 0x59, 0x37, 0x54, 0x18, 0x34, 0xa8, 0xec, 0x0f, + 0xc1, 0x99, 0xec, 0xfd, 0x6f, 0x19, 0x1a, 0xd6, 0xc3, 0xa0, 0xd3, 0xce, 0xee, 0x25, 0xfc, 0x7e, + 0x30, 0x0a, 0x1c, 0xb3, 0xf1, 0x7b, 0x9e, 0x5f, 0xcd, 0xda, 0xf8, 0xeb, 0x9e, 0x5f, 0x45, 0x8e, + 0x39, 0xc6, 0xe5, 0xbc, 0x3f, 0xb2, 0xe0, 0xc2, 0x51, 0xd7, 0xd4, 0x59, 0xd8, 0x7f, 0xd7, 0x09, + 0x7d, 0x79, 0xf1, 0x86, 0xdb, 0x8e, 0xdb, 0x4e, 0xe8, 0x23, 0x87, 0x92, 0x2e, 0x8c, 0x89, 0xba, + 0x42, 0xe9, 0x1d, 0xdf, 0xc8, 0xf7, 0xd2, 0x3c, 0x8b, 0xad, 0x54, 0xb6, 0x46, 0xd4, 0x34, 0xa2, + 0x14, 0x68, 0xbf, 0x66, 0x01, 0xd9, 0xdc, 0xa7, 0x61, 0xe8, 0x55, 0x8d, 0x4a, 0x48, 0xf2, 0x3c, + 0x4c, 0xde, 0xd9, 0xde, 0xdc, 0xd8, 0x0a, 0x3c, 0x9f, 0x17, 0xf4, 0x1b, 0xd5, 0x32, 0xd7, 0x0c, + 0x38, 0xa6, 0xa8, 0xc8, 0x32, 0xcc, 0xdc, 0x79, 0x85, 0x6d, 0x39, 0x97, 0x0e, 0xda, 0x21, 0x8d, + 0x22, 0xf5, 0xd4, 0x44, 0x59, 0x1c, 0x4c, 0x5d, 0xbb, 0x91, 0x41, 0x62, 0x2f, 0xbd, 0xfd, 0xa5, + 0x02, 0x4c, 0x18, 0x2f, 0x33, 0x1c, 0xc3, 0x1f, 0xc9, 0x3c, 0x26, 0x51, 0x38, 0xe6, 0x63, 0x12, + 0xcf, 0x42, 0xa9, 0x1d, 0x34, 0x3d, 0xd7, 0x53, 0x95, 0xfa, 0x93, 0xfc, 0xf4, 0x4a, 0xc2, 0x50, + 0x61, 0xc9, 0x5d, 0x28, 0xab, 0x2b, 0xd6, 0xb2, 0xd2, 0x2e, 0x2f, 0x8f, 0x4c, 0xad, 0x35, 0x7d, + 0x75, 0x5a, 0xcb, 0x22, 0x36, 0x8c, 0xf1, 0x89, 0x9a, 0xe4, 0xe6, 0x79, 0xe9, 0x06, 0x9f, 0xc1, + 0x11, 0x4a, 0x8c, 0xfd, 0x2f, 0xa3, 0x50, 0x46, 0xda, 0x0e, 0x96, 0x43, 0x5a, 0x8d, 0xc8, 0xeb, + 0xa1, 0xd8, 0x09, 0x9b, 0xb2, 0xb3, 0x54, 0x9a, 0xe7, 0x26, 0xae, 0x21, 0x83, 0xa7, 0x76, 0x87, + 0xc2, 0x89, 0xce, 0xf8, 0x8a, 0x47, 0x9e, 0xf1, 0xbd, 0x08, 0x53, 0x51, 0xd4, 0xd8, 0x0a, 0xbd, + 0x7d, 0x27, 0x66, 0x73, 0x4e, 0xe6, 0x44, 0xf4, 0xa1, 0xca, 0xf6, 0x55, 0x8d, 0xc4, 0x34, 0x2d, + 0xb9, 0x02, 0x33, 0xfa, 0xa4, 0x8d, 0x86, 0x31, 0x4f, 0x81, 0x88, 0x6c, 0x89, 0x3a, 0xd3, 0xd0, + 0x67, 0x73, 0x92, 0x00, 0x7b, 0xbf, 0x21, 0x2b, 0x70, 0x3a, 0x05, 0x64, 0x8a, 0x88, 0x54, 0x8a, + 0x3a, 0xc5, 0x4f, 0xf1, 0x61, 0xba, 0xf4, 0x7c, 0x41, 0xd6, 0xe1, 0x8c, 0x18, 0x5f, 0x7e, 0x35, + 0x5f, 0xb5, 0x68, 0x9c, 0x33, 0xfa, 0x3f, 0x92, 0xd1, 0x99, 0x2b, 0xbd, 0x24, 0xd8, 0xef, 0x3b, + 0x36, 0x43, 0x15, 0x78, 0x75, 0x45, 0x1a, 0x36, 0x35, 0x43, 0x15, 0x9b, 0xd5, 0x2a, 0x9a, 0x74, + 0xe4, 0x5d, 0xf0, 0x94, 0xfe, 0x29, 0x32, 0x68, 0x62, 0xb7, 0x5f, 0x91, 0x45, 0x0c, 0xf3, 0x92, + 0xc5, 0x53, 0x57, 0xfa, 0x92, 0x55, 0x71, 0xd0, 0xf7, 0x64, 0x17, 0xe6, 0x14, 0xea, 0x12, 0x5b, + 0xbd, 0xed, 0xd0, 0x8b, 0x68, 0xc5, 0x89, 0xe8, 0xcd, 0xb0, 0xc9, 0xcb, 0x1e, 0xca, 0xfa, 0x79, + 0x89, 0x2b, 0x5e, 0x7c, 0xb5, 0x1f, 0x25, 0xae, 0xe1, 0x03, 0xb8, 0x30, 0xe7, 0x82, 0xfa, 0xce, + 0x6e, 0x93, 0x6e, 0x2e, 0xaf, 0xf2, 0x62, 0x08, 0xc3, 0xb9, 0xb8, 0x94, 0x20, 0x50, 0xd3, 0x28, + 0xd7, 0x7e, 0x72, 0xa0, 0x6b, 0xff, 0x4d, 0x0b, 0xa6, 0xd4, 0x64, 0x7f, 0x0c, 0xf9, 0xae, 0x66, + 0x3a, 0xdf, 0x75, 0x65, 0x58, 0xaf, 0x4e, 0x6a, 0x3e, 0x20, 0x10, 0xfb, 0x6e, 0x19, 0x80, 0x3f, + 0xd8, 0xe3, 0xf1, 0x22, 0xdb, 0x0b, 0x30, 0x12, 0xd2, 0x76, 0x90, 0xb5, 0x7c, 0x8c, 0x02, 0x39, + 0xe6, 0x07, 0x77, 0x39, 0xf7, 0x3b, 0xf3, 0x1d, 0xfd, 0xfe, 0x9e, 0xf9, 0x6e, 0xc3, 0x93, 0x9e, + 0x1f, 0x51, 0xb7, 0x13, 0xca, 0x8d, 0xee, 0x6a, 0x10, 0x29, 0xeb, 0x50, 0xaa, 0xbc, 0x5e, 0x32, + 0x7a, 0x72, 0xb5, 0x1f, 0x11, 0xf6, 0xff, 0x96, 0x75, 0x69, 0x82, 0x90, 0xf7, 0x83, 0x74, 0x7a, + 0x40, 0xc2, 0x51, 0x51, 0xe8, 0x05, 0xb1, 0x56, 0x4b, 0x2e, 0x00, 0x65, 0x16, 0xc4, 0xda, 0xe5, + 0x6d, 0xd4, 0x34, 0xfd, 0xad, 0x62, 0x39, 0x27, 0xab, 0x08, 0x27, 0xb6, 0x8a, 0xc9, 0xfa, 0x9c, + 0x18, 0xf8, 0xbc, 0x43, 0xb2, 0x59, 0x4f, 0x0e, 0xdc, 0xac, 0x5f, 0x82, 0x69, 0xcf, 0x6f, 0xd0, + 0xd0, 0x8b, 0x69, 0x95, 0xaf, 0x85, 0xd9, 0x29, 0xde, 0x11, 0x2a, 0x73, 0xb5, 0x9a, 0xc2, 0x62, + 0x86, 0x3a, 0x6d, 0x54, 0xa6, 0x8f, 0x61, 0x54, 0x06, 0x98, 0xf2, 0x53, 0xf9, 0x98, 0xf2, 0xd3, + 0xc3, 0x9b, 0xf2, 0x99, 0x47, 0x6a, 0xca, 0x49, 0x2e, 0xa6, 0xfc, 0x19, 0x18, 0x6d, 0x87, 0xc1, + 0x41, 0x77, 0xf6, 0x4c, 0xda, 0x9b, 0xde, 0x62, 0x40, 0x14, 0x38, 0xb3, 0xf4, 0xed, 0xec, 0x83, + 0x4b, 0xdf, 0xec, 0x57, 0x0b, 0xf0, 0xa4, 0xb6, 0x74, 0x6c, 0x7e, 0x79, 0x35, 0xb6, 0xd6, 0xf9, + 0x2d, 0x4d, 0x51, 0x6e, 0x61, 0x24, 0x4d, 0x75, 0xfe, 0x55, 0x61, 0xd0, 0xa0, 0xe2, 0xb9, 0x47, + 0x1a, 0xf2, 0x82, 0xdd, 0xac, 0x19, 0x5c, 0x96, 0x70, 0x54, 0x14, 0xfc, 0xb5, 0x3f, 0x1a, 0xc6, + 0xf2, 0xec, 0x25, 0x5b, 0x8b, 0xb4, 0xac, 0x51, 0x68, 0xd2, 0x31, 0x77, 0xd1, 0x4d, 0x96, 0x20, + 0x33, 0x85, 0x93, 0xc2, 0x5d, 0x54, 0xab, 0x4e, 0x61, 0x13, 0x75, 0x78, 0x92, 0x79, 0xb4, 0x57, + 0x1d, 0x9e, 0x34, 0x50, 0x14, 0xf6, 0x7f, 0x59, 0xf0, 0xba, 0xbe, 0x5d, 0xf1, 0x18, 0xb6, 0xb7, + 0x83, 0xf4, 0xf6, 0xb6, 0x3d, 0xfc, 0xf6, 0xd6, 0xd3, 0x8a, 0x01, 0x5b, 0xdd, 0x5f, 0x5b, 0x30, + 0xad, 0xe9, 0x1f, 0x43, 0x53, 0xbd, 0x5c, 0xdf, 0xed, 0xd3, 0xaa, 0x8b, 0x42, 0xd2, 0x54, 0xdb, + 0xbe, 0xc9, 0xdb, 0x26, 0x62, 0xaf, 0x25, 0x37, 0x79, 0x18, 0xe7, 0x88, 0x20, 0xa6, 0x0b, 0x63, + 0xfc, 0x2a, 0x73, 0x94, 0x4f, 0x0c, 0x98, 0x96, 0xcf, 0xd3, 0xa0, 0x3a, 0x06, 0xe4, 0x3f, 0x23, + 0x94, 0x02, 0x79, 0x39, 0xb9, 0x17, 0x31, 0x7b, 0x59, 0x95, 0xe9, 0x5a, 0x5d, 0x4e, 0x2e, 0xe1, + 0xa8, 0x28, 0xec, 0x16, 0xcc, 0xa6, 0x99, 0xaf, 0xd0, 0x1a, 0x4f, 0xb5, 0x1d, 0xab, 0x99, 0x8b, + 0x50, 0x76, 0xf8, 0x57, 0x6b, 0x1d, 0x27, 0xfb, 0x3a, 0xce, 0x52, 0x82, 0x40, 0x4d, 0x63, 0xff, + 0xb6, 0x05, 0x67, 0xfa, 0x34, 0x26, 0xc7, 0x34, 0x75, 0xac, 0xad, 0xc0, 0x80, 0x17, 0x8b, 0xaa, + 0xb4, 0xe6, 0x24, 0xc9, 0x1c, 0xc3, 0xaa, 0xad, 0x08, 0x30, 0x26, 0x78, 0xfb, 0x5f, 0x2d, 0x38, + 0x95, 0xd6, 0x35, 0x22, 0xd7, 0x80, 0x88, 0xc6, 0xac, 0x78, 0x91, 0x1b, 0xec, 0xd3, 0xb0, 0xcb, + 0x5a, 0x2e, 0xb4, 0x9e, 0x93, 0x9c, 0xc8, 0x52, 0x0f, 0x05, 0xf6, 0xf9, 0x8a, 0x57, 0xed, 0x56, + 0x55, 0x6f, 0x27, 0x33, 0xe5, 0x56, 0x9e, 0x33, 0x45, 0x0f, 0xa6, 0x19, 0x41, 0x2b, 0x91, 0x68, + 0xca, 0xb7, 0xbf, 0x35, 0x02, 0xea, 0x1c, 0x8b, 0xa7, 0x0d, 0x72, 0x4a, 0xba, 0xa4, 0x9e, 0x50, + 0x2a, 0x9e, 0xe0, 0x09, 0xa5, 0x91, 0x07, 0xe5, 0x08, 0xc4, 0x7b, 0x3e, 0xda, 0x17, 0x35, 0x8c, + 0xfe, 0x8e, 0x46, 0xa1, 0x49, 0xc7, 0x34, 0x69, 0x7a, 0xfb, 0x54, 0x7c, 0x34, 0x96, 0xd6, 0x64, + 0x2d, 0x41, 0xa0, 0xa6, 0x61, 0x9a, 0x54, 0xbd, 0x5a, 0x4d, 0x46, 0x8a, 0x4a, 0x13, 0xd6, 0x3b, + 0xc8, 0x31, 0x8c, 0xa2, 0x11, 0x04, 0x7b, 0xd2, 0xff, 0x53, 0x14, 0x57, 0x83, 0x60, 0x0f, 0x39, + 0x86, 0x79, 0x2c, 0x7e, 0x10, 0xb6, 0x9c, 0xa6, 0xf7, 0x7e, 0x5a, 0x55, 0x52, 0xa4, 0xdf, 0xa7, + 0x3c, 0x96, 0x8d, 0x5e, 0x12, 0xec, 0xf7, 0x1d, 0x9b, 0x81, 0xed, 0x90, 0x56, 0x3d, 0x37, 0x36, + 0xb9, 0x41, 0x7a, 0x06, 0x6e, 0xf5, 0x50, 0x60, 0x9f, 0xaf, 0xc8, 0x12, 0x9c, 0x4a, 0xce, 0x21, + 0x93, 0x5a, 0x11, 0xe1, 0x0c, 0x2a, 0x3f, 0x1c, 0xd3, 0x68, 0xcc, 0xd2, 0x33, 0x6b, 0xd3, 0x92, + 0x15, 0x3b, 0xdc, 0x4d, 0x34, 0xac, 0x4d, 0x52, 0xc9, 0x83, 0x8a, 0xc2, 0xfe, 0xdd, 0x02, 0xdb, + 0x1d, 0x07, 0xdc, 0xd4, 0x7d, 0x6c, 0x49, 0xbe, 0xf4, 0x8c, 0x1c, 0x39, 0xc6, 0x8c, 0x7c, 0x1e, + 0x26, 0xef, 0x44, 0x81, 0xaf, 0x12, 0x68, 0xa3, 0x03, 0x13, 0x68, 0x06, 0x55, 0xff, 0x04, 0xda, + 0xd8, 0x09, 0x13, 0x68, 0x7f, 0x36, 0x0a, 0xe7, 0xd4, 0xd1, 0x31, 0x8d, 0xef, 0x06, 0xe1, 0x9e, + 0xe7, 0xd7, 0xf9, 0x71, 0xeb, 0x17, 0x2d, 0x98, 0x14, 0xd3, 0x5b, 0xbe, 0x69, 0x20, 0x8e, 0x17, + 0x6b, 0x39, 0x5d, 0x12, 0x4b, 0x09, 0x5b, 0xd8, 0x31, 0x04, 0x65, 0x1e, 0x98, 0x30, 0x51, 0x98, + 0xd2, 0x88, 0x7c, 0x10, 0x20, 0x79, 0x78, 0xab, 0x96, 0xd3, 0xf3, 0x63, 0x89, 0x7e, 0x48, 0x6b, + 0xda, 0x95, 0xdc, 0x51, 0x42, 0xd0, 0x10, 0x48, 0x5e, 0xb5, 0xd4, 0xa5, 0x0c, 0x71, 0x56, 0xf4, + 0xf2, 0x23, 0xe9, 0x9b, 0xe3, 0xdc, 0xd1, 0x40, 0x18, 0xf7, 0xfc, 0x3a, 0x1b, 0x56, 0x99, 0x73, + 0x7c, 0x53, 0xbf, 0x52, 0x85, 0xb5, 0xc0, 0xa9, 0x56, 0x9c, 0xa6, 0xe3, 0xbb, 0x34, 0x5c, 0x15, + 0xe4, 0xe6, 0xf3, 0x47, 0x1c, 0x80, 0x09, 0xa3, 0x9e, 0x5b, 0x90, 0xa3, 0xc7, 0xb9, 0x05, 0x39, + 0xf7, 0x4e, 0x98, 0xe9, 0x19, 0xcc, 0x13, 0xdd, 0xd1, 0x78, 0xf8, 0xeb, 0x1d, 0xf6, 0x1f, 0x8f, + 0xe9, 0x3d, 0x66, 0x23, 0xa8, 0x8a, 0xbb, 0x78, 0xa1, 0x1e, 0x51, 0xe9, 0x2a, 0xe6, 0x38, 0x45, + 0x8c, 0x27, 0x94, 0x14, 0x10, 0x4d, 0x91, 0x6c, 0x8e, 0xb6, 0x9d, 0x90, 0xfa, 0x8f, 0x7a, 0x8e, + 0x6e, 0x29, 0x21, 0x68, 0x08, 0x24, 0x8d, 0xd4, 0x61, 0xe6, 0xe5, 0xe1, 0x0f, 0x33, 0x99, 0xf7, + 0xda, 0xf7, 0xce, 0xd4, 0x67, 0x2c, 0x98, 0xf6, 0x53, 0x33, 0x57, 0x1e, 0x68, 0xed, 0x3c, 0x8a, + 0x55, 0x21, 0xee, 0x40, 0xa7, 0x61, 0x98, 0x91, 0xdf, 0x6f, 0x07, 0x1a, 0x3d, 0xe1, 0x0e, 0xa4, + 0x2f, 0xf5, 0x8e, 0x0d, 0xba, 0xd4, 0x4b, 0x7c, 0x75, 0x9d, 0x7f, 0x3c, 0xf7, 0xeb, 0xfc, 0xd0, + 0xe7, 0x2a, 0xff, 0x6d, 0x28, 0xbb, 0x21, 0x75, 0xe2, 0x87, 0xbc, 0xd9, 0xcd, 0x1f, 0xad, 0x5b, + 0x4e, 0x18, 0xa0, 0xe6, 0x65, 0xff, 0x65, 0x11, 0x4e, 0x27, 0x3d, 0x92, 0x1c, 0xf4, 0xb0, 0xed, + 0x4c, 0xc8, 0xd5, 0xbe, 0xa8, 0xda, 0xce, 0xae, 0x26, 0x08, 0xd4, 0x34, 0xcc, 0x7d, 0xea, 0x44, + 0x74, 0xb3, 0x4d, 0xfd, 0x35, 0x6f, 0x37, 0xe2, 0x3d, 0x6e, 0x54, 0x8b, 0xdd, 0xd4, 0x28, 0x34, + 0xe9, 0x98, 0xef, 0x2c, 0xdc, 0xd8, 0x28, 0x7b, 0x6e, 0x2a, 0xdd, 0x63, 0x4c, 0xf0, 0xe4, 0x0b, + 0x7d, 0x5f, 0xfa, 0xc8, 0xa7, 0x62, 0xa0, 0xe7, 0x7c, 0xeb, 0x84, 0x4f, 0x7c, 0xbc, 0x66, 0xc1, + 0xa9, 0xbd, 0x54, 0xa9, 0x4a, 0x62, 0x92, 0x87, 0x2c, 0x80, 0x4c, 0xd7, 0xbf, 0xe8, 0x29, 0x9c, + 0x86, 0x47, 0x98, 0x95, 0x6e, 0xff, 0x87, 0x05, 0xa6, 0x79, 0x3a, 0x9e, 0x23, 0x64, 0xbc, 0xdd, + 0x54, 0x38, 0xe2, 0xed, 0xa6, 0xc4, 0x67, 0x2a, 0x1e, 0xcf, 0x47, 0x1f, 0x39, 0x81, 0x8f, 0x3e, + 0x3a, 0xd0, 0xc9, 0x7a, 0x3d, 0x14, 0x3b, 0x5e, 0x55, 0xba, 0xd9, 0xfa, 0xec, 0x6a, 0x75, 0x05, + 0x19, 0xdc, 0xfe, 0xc3, 0x51, 0x1d, 0x56, 0xcb, 0x83, 0xee, 0x1f, 0x8a, 0x66, 0xd7, 0x54, 0x3d, + 0xab, 0x68, 0xf9, 0x46, 0x4f, 0x3d, 0xeb, 0x3b, 0x4e, 0x5e, 0xc7, 0x20, 0x3a, 0x68, 0x50, 0x39, + 0xeb, 0xf8, 0x11, 0x45, 0x0c, 0x77, 0xa0, 0xc4, 0x22, 0x11, 0x9e, 0x1f, 0x2b, 0xa5, 0x94, 0x2a, + 0x5d, 0x95, 0xf0, 0xfb, 0x87, 0xf3, 0x6f, 0x3f, 0xb9, 0x5a, 0xc9, 0xd7, 0xa8, 0xf8, 0x93, 0x08, + 0xca, 0xec, 0x6f, 0x5e, 0x6f, 0x21, 0x63, 0x9c, 0x9b, 0xca, 0x16, 0x25, 0x88, 0x5c, 0x8a, 0x39, + 0xb4, 0x1c, 0xe2, 0x43, 0x99, 0xbf, 0x32, 0xc4, 0x85, 0x8a, 0x50, 0x68, 0x4b, 0x55, 0x3d, 0x24, + 0x88, 0xfb, 0x87, 0xf3, 0x2f, 0x9e, 0x5c, 0xa8, 0xfa, 0x1c, 0xb5, 0x08, 0xfb, 0x3b, 0x45, 0x3d, + 0x77, 0x65, 0x19, 0xf3, 0x0f, 0xc5, 0xdc, 0x7d, 0x21, 0x33, 0x77, 0x2f, 0xf4, 0xcc, 0xdd, 0x69, + 0xfd, 0x6e, 0x4e, 0x6a, 0x36, 0x3e, 0xee, 0x0d, 0xf6, 0xe8, 0xb0, 0x9b, 0x7b, 0x16, 0xaf, 0x74, + 0xbc, 0x90, 0x46, 0x5b, 0x61, 0xc7, 0xf7, 0xfc, 0x3a, 0x9f, 0x8e, 0x25, 0xd3, 0xb3, 0x48, 0xa1, + 0x31, 0x4b, 0x6f, 0x7f, 0x89, 0x1f, 0x4f, 0x1a, 0xa5, 0x5b, 0x6c, 0x94, 0x9b, 0xfc, 0xa1, 0x26, + 0x51, 0x3c, 0xaa, 0x46, 0x59, 0xbc, 0xce, 0x24, 0x70, 0xe4, 0x2e, 0x8c, 0xef, 0x8a, 0xa7, 0x1d, + 0xf2, 0xb9, 0x4b, 0x24, 0xdf, 0x89, 0xe0, 0xb7, 0x36, 0x93, 0x47, 0x23, 0xee, 0xeb, 0x3f, 0x31, + 0x91, 0x66, 0xff, 0x6a, 0x11, 0x4e, 0x65, 0x1e, 0xfd, 0x61, 0xf1, 0x79, 0xf2, 0x66, 0x54, 0x36, + 0x99, 0xae, 0xde, 0x46, 0x56, 0x14, 0xe4, 0x7d, 0x00, 0x55, 0xda, 0x6e, 0x06, 0x5d, 0xee, 0xb8, + 0x8c, 0x9c, 0xd8, 0x71, 0x51, 0xbe, 0xee, 0x8a, 0xe2, 0x82, 0x06, 0x47, 0x59, 0x31, 0x3b, 0x2a, + 0x1e, 0xae, 0x48, 0x57, 0xcc, 0x1a, 0x57, 0xea, 0xc6, 0x1e, 0xef, 0x95, 0x3a, 0x0f, 0x4e, 0x09, + 0x15, 0x55, 0x81, 0xd4, 0x43, 0xd4, 0x41, 0x9d, 0x61, 0x33, 0x6a, 0x25, 0xcd, 0x06, 0xb3, 0x7c, + 0xed, 0x4f, 0x17, 0x98, 0xfb, 0x26, 0x3a, 0x7b, 0x3d, 0xc9, 0x65, 0xbf, 0x11, 0xc6, 0x9c, 0x4e, + 0xdc, 0x08, 0x7a, 0x9e, 0xda, 0x58, 0xe2, 0x50, 0x94, 0x58, 0xb2, 0x06, 0x23, 0x55, 0x27, 0x4e, + 0xde, 0xf6, 0x3f, 0x89, 0x72, 0x3a, 0x71, 0xe5, 0xc4, 0x14, 0x39, 0x17, 0xf2, 0x34, 0x8c, 0xc4, + 0x4e, 0x3d, 0xf5, 0xaa, 0xe8, 0x8e, 0x53, 0x8f, 0x90, 0x43, 0xcd, 0xdd, 0x65, 0xe4, 0x88, 0xdd, + 0xe5, 0x45, 0xe3, 0xbf, 0x4e, 0x18, 0x87, 0x24, 0xbd, 0xff, 0x29, 0x42, 0xd4, 0xf0, 0xa7, 0x68, + 0xed, 0x1f, 0x81, 0x49, 0xf3, 0x3f, 0x49, 0x1c, 0xeb, 0x0a, 0x90, 0xfd, 0xcf, 0x23, 0x30, 0x95, + 0x2a, 0xa2, 0x4b, 0xcd, 0x72, 0xeb, 0xc8, 0x59, 0xce, 0x8f, 0xbf, 0x3a, 0x3e, 0x95, 0x25, 0x92, + 0xc6, 0xf1, 0x57, 0xc7, 0xa7, 0x28, 0x70, 0x6c, 0x54, 0xaa, 0x61, 0x17, 0x3b, 0xbe, 0x4c, 0xa2, + 0xab, 0x51, 0x59, 0xe1, 0x50, 0x94, 0x58, 0x16, 0xc0, 0x4e, 0x46, 0xdc, 0x28, 0x0a, 0x1b, 0x21, + 0x57, 0xcd, 0xb5, 0x3c, 0x9e, 0x27, 0x93, 0x05, 0xa3, 0x3c, 0xa0, 0x37, 0x21, 0x98, 0x92, 0x48, + 0x3e, 0x66, 0x99, 0x0f, 0xb3, 0x8d, 0xe5, 0x71, 0xf8, 0x93, 0xad, 0x51, 0x14, 0x2b, 0xe8, 0xc1, + 0xef, 0xb3, 0x45, 0x6a, 0x01, 0x8f, 0x3f, 0x9a, 0x05, 0x0c, 0x7d, 0x16, 0xef, 0x9b, 0xa1, 0xdc, + 0x72, 0x7c, 0xaf, 0x46, 0xa3, 0x58, 0xfc, 0x17, 0x98, 0xb2, 0x88, 0x9e, 0xd6, 0x13, 0x20, 0x6a, + 0x3c, 0xff, 0x5f, 0x4b, 0xbc, 0x61, 0x22, 0x88, 0x29, 0x1b, 0xff, 0x6b, 0x49, 0x83, 0xd1, 0xa4, + 0xb1, 0x7f, 0xcf, 0x82, 0x27, 0xfb, 0x76, 0xc6, 0x0f, 0x6e, 0xb6, 0xd2, 0xfe, 0xfd, 0x02, 0x9c, + 0xe9, 0x53, 0x64, 0x4a, 0xba, 0x8f, 0xec, 0xfd, 0x3e, 0x59, 0xc5, 0x3a, 0x35, 0x70, 0x6e, 0x9c, + 0x6c, 0x1b, 0xd2, 0x5b, 0x41, 0xf1, 0xb1, 0x6e, 0x05, 0xf6, 0x97, 0x0a, 0x60, 0xbc, 0x5d, 0x49, + 0x3e, 0x64, 0xd6, 0x53, 0x5b, 0x79, 0xd5, 0xfe, 0x0a, 0xe6, 0xaa, 0x1e, 0x5b, 0xf4, 0x5a, 0xbf, + 0xf2, 0xec, 0xec, 0x7c, 0x2d, 0x1c, 0x3d, 0x5f, 0x49, 0x33, 0x29, 0x5c, 0x2f, 0xe6, 0x5f, 0xb8, + 0x5e, 0xee, 0x29, 0x5a, 0xff, 0x65, 0x4b, 0xcc, 0xb4, 0x4c, 0x93, 0xb4, 0x85, 0xb5, 0x1e, 0x60, + 0x61, 0xdf, 0x02, 0xa5, 0x88, 0x36, 0x6b, 0xcc, 0xb3, 0x93, 0x96, 0x58, 0xcd, 0x89, 0x6d, 0x09, + 0x47, 0x45, 0xc1, 0xaf, 0xb4, 0x36, 0x9b, 0xc1, 0xdd, 0x4b, 0xad, 0x76, 0xdc, 0x95, 0x36, 0x59, + 0x5f, 0x69, 0x55, 0x18, 0x34, 0xa8, 0xec, 0xff, 0xb4, 0xc4, 0x70, 0x4a, 0x1f, 0xfd, 0x85, 0xcc, + 0x55, 0xc3, 0xe3, 0xbb, 0xb7, 0x3f, 0x0b, 0xe0, 0xaa, 0xcb, 0xff, 0xf9, 0x3c, 0x40, 0xa9, 0x1f, + 0x13, 0x30, 0x5f, 0x45, 0x4c, 0x60, 0x68, 0xc8, 0x4b, 0x2d, 0x9e, 0xe2, 0x51, 0x8b, 0xc7, 0xfe, + 0x37, 0x0b, 0x52, 0x9b, 0x05, 0x69, 0xc3, 0x28, 0xd3, 0xa0, 0x9b, 0xcf, 0x53, 0x05, 0x26, 0x6b, + 0xb6, 0xb0, 0xe4, 0xb4, 0xe0, 0x7f, 0xa2, 0x10, 0x44, 0x9a, 0xd2, 0x3b, 0x2f, 0xe4, 0xf1, 0x9c, + 0x86, 0x29, 0x90, 0xf9, 0xf7, 0xf2, 0xff, 0x6a, 0x28, 0x4f, 0xdf, 0x7e, 0x01, 0x66, 0x7a, 0x94, + 0xe2, 0x97, 0x8f, 0x82, 0xe4, 0x7d, 0x06, 0x63, 0x06, 0xf2, 0xab, 0x90, 0x28, 0x70, 0xcc, 0xc1, + 0x3f, 0x9d, 0x65, 0x4f, 0x3e, 0x6f, 0xc1, 0x4c, 0x94, 0xe5, 0xf7, 0xa8, 0xfa, 0x4e, 0x65, 0xae, + 0x7a, 0x50, 0xd8, 0xab, 0x84, 0xfd, 0xe7, 0xd2, 0x3c, 0x89, 0xff, 0x43, 0xa6, 0x36, 0x17, 0x6b, + 0xe0, 0xe6, 0xc2, 0x96, 0x98, 0xdb, 0xa0, 0xd5, 0x4e, 0xb3, 0xa7, 0x94, 0x66, 0x5b, 0xc2, 0x51, + 0x51, 0xa4, 0x1e, 0xa2, 0x2b, 0x1e, 0xf9, 0x10, 0xdd, 0xf3, 0x30, 0x69, 0xbe, 0x41, 0xc2, 0x53, + 0x68, 0xf2, 0xf0, 0xc1, 0x7c, 0xae, 0x04, 0x53, 0x54, 0x99, 0x87, 0xcc, 0x46, 0x8f, 0x7c, 0xc8, + 0xec, 0x59, 0x28, 0xc9, 0x47, 0xb9, 0x92, 0xfc, 0xae, 0xa8, 0xd3, 0x91, 0x30, 0x54, 0x58, 0x66, + 0x20, 0x5a, 0x8e, 0xdf, 0x71, 0x9a, 0xac, 0x87, 0x64, 0xf9, 0x9e, 0x5a, 0x59, 0xeb, 0x0a, 0x83, + 0x06, 0x95, 0xfd, 0x4f, 0x16, 0x64, 0xdf, 0x08, 0x4a, 0x15, 0x01, 0x5a, 0x47, 0x16, 0x01, 0xa6, + 0x0b, 0x9c, 0x0a, 0xc7, 0x2a, 0x70, 0x32, 0x6b, 0x8f, 0x8a, 0x0f, 0xac, 0x3d, 0x7a, 0x83, 0xbe, + 0x40, 0x2e, 0x8a, 0x94, 0x26, 0xfa, 0x5d, 0x1e, 0x27, 0x36, 0x8c, 0xb9, 0x8e, 0xaa, 0xb1, 0x9e, + 0x14, 0x8e, 0xd2, 0xf2, 0x12, 0x27, 0x92, 0x98, 0xca, 0xc2, 0x57, 0xbe, 0x7d, 0xfe, 0x89, 0xaf, + 0x7e, 0xfb, 0xfc, 0x13, 0xdf, 0xf8, 0xf6, 0xf9, 0x27, 0x3e, 0x72, 0xef, 0xbc, 0xf5, 0x95, 0x7b, + 0xe7, 0xad, 0xaf, 0xde, 0x3b, 0x6f, 0x7d, 0xe3, 0xde, 0x79, 0xeb, 0x5b, 0xf7, 0xce, 0x5b, 0x9f, + 0xf9, 0xfb, 0xf3, 0x4f, 0xbc, 0xbb, 0x94, 0xcc, 0xd5, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x25, + 0xff, 0xb8, 0x80, 0xd5, 0x76, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -4101,6 +4103,11 @@ func (m *ApplicationSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.TrackingMethod) + copy(dAtA[i:], m.TrackingMethod) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TrackingMethod))) + i-- + dAtA[i] = 0x42 if m.RevisionHistoryLimit != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) i-- @@ -8569,6 +8576,8 @@ func (m *ApplicationSpec) Size() (n int) { if m.RevisionHistoryLimit != nil { n += 1 + sovGenerated(uint64(*m.RevisionHistoryLimit)) } + l = len(m.TrackingMethod) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -10409,6 +10418,7 @@ func (this *ApplicationSpec) String() string { `IgnoreDifferences:` + repeatedStringForIgnoreDifferences + `,`, `Info:` + repeatedStringForInfo + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, + `TrackingMethod:` + fmt.Sprintf("%v", this.TrackingMethod) + `,`, `}`, }, "") return s @@ -15001,6 +15011,38 @@ func (m *ApplicationSpec) Unmarshal(dAtA []byte) error { } } m.RevisionHistoryLimit = &v + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrackingMethod", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + 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 ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TrackingMethod = TrackingMethod(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 3978741aabd0b..cd5ba919d73df 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -291,6 +291,10 @@ message ApplicationSpec { // Increasing will increase the space used to store the history, so we do not recommend increasing it. // Default is 10. optional int64 revisionHistoryLimit = 7; + + // Project is a reference to the project this application belongs to. + // The empty string means that application belongs to the 'default' project. + optional string trackingMethod = 8; } // ApplicationStatus contains status information for the application diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 682a319465333..868737c032eef 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -1078,8 +1078,16 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSpec(ref common.ReferenceCa Format: "int64", }, }, + "trackingMethod": { + SchemaProps: spec.SchemaProps{ + Description: "Project is a reference to the project this application belongs to. The empty string means that application belongs to the 'default' project.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, }, - Required: []string{"source", "destination", "project"}, + Required: []string{"source", "destination", "project", "trackingMethod"}, }, }, Dependencies: []string{ diff --git a/reposerver/apiclient/repository.pb.go b/reposerver/apiclient/repository.pb.go index e14d0a99f558a..e8c1ad1baa8b2 100644 --- a/reposerver/apiclient/repository.pb.go +++ b/reposerver/apiclient/repository.pb.go @@ -50,6 +50,7 @@ type ManifestRequest struct { VerifySignature bool `protobuf:"varint,16,opt,name=verifySignature,proto3" json:"verifySignature,omitempty"` HelmRepoCreds []*v1alpha1.RepoCreds `protobuf:"bytes,17,rep,name=helmRepoCreds,proto3" json:"helmRepoCreds,omitempty"` NoRevisionCache bool `protobuf:"varint,18,opt,name=noRevisionCache,proto3" json:"noRevisionCache,omitempty"` + TrackingMethod string `protobuf:"bytes,19,opt,name=trackingMethod,proto3" json:"trackingMethod,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -193,6 +194,13 @@ func (m *ManifestRequest) GetNoRevisionCache() bool { return false } +func (m *ManifestRequest) GetTrackingMethod() string { + if m != nil { + return m.TrackingMethod + } + return "" +} + // TestRepositoryRequest is a query to test repository is valid or not and has valid access. type TestRepositoryRequest struct { Repo *v1alpha1.Repository `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"` @@ -595,6 +603,7 @@ type RepoServerAppDetailsQuery struct { AppName string `protobuf:"bytes,5,opt,name=appName,proto3" json:"appName,omitempty"` NoCache bool `protobuf:"varint,6,opt,name=noCache,proto3" json:"noCache,omitempty"` NoRevisionCache bool `protobuf:"varint,7,opt,name=noRevisionCache,proto3" json:"noRevisionCache,omitempty"` + TrackingMethod string `protobuf:"bytes,8,opt,name=trackingMethod,proto3" json:"trackingMethod,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -682,6 +691,13 @@ func (m *RepoServerAppDetailsQuery) GetNoRevisionCache() bool { return false } +func (m *RepoServerAppDetailsQuery) GetTrackingMethod() string { + if m != nil { + return m.TrackingMethod + } + return "" +} + // RepoAppDetailsResponse application details type RepoAppDetailsResponse struct { Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` @@ -1367,95 +1383,96 @@ func init() { } var fileDescriptor_dd8723cfcc820480 = []byte{ - // 1399 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x4b, 0x6f, 0xdb, 0xc6, - 0x16, 0x36, 0x65, 0xd9, 0xb2, 0x8e, 0x12, 0x5b, 0x9e, 0x3c, 0x2e, 0xaf, 0xae, 0x23, 0x38, 0x04, - 0x6e, 0xe0, 0x36, 0x0d, 0x85, 0x28, 0x41, 0x1b, 0x24, 0x40, 0x01, 0xd5, 0x49, 0x1c, 0xc0, 0x49, - 0xec, 0xd2, 0x69, 0x81, 0x16, 0x41, 0x83, 0x31, 0x75, 0x4c, 0x4d, 0x25, 0x91, 0x13, 0x92, 0x52, - 0xe1, 0x00, 0x5d, 0x16, 0x5d, 0x74, 0xdd, 0xae, 0xfa, 0x5f, 0xba, 0xea, 0x63, 0xd9, 0xfe, 0x83, - 0x22, 0xbf, 0xa4, 0x98, 0xe1, 0x6b, 0x48, 0xd1, 0xee, 0x42, 0x89, 0xb3, 0xb1, 0x67, 0xce, 0x7b, - 0xce, 0x9c, 0xf3, 0xcd, 0xa1, 0xe0, 0x9a, 0x8f, 0xdc, 0x0b, 0xd0, 0x9f, 0xa2, 0xdf, 0x91, 0x4b, - 0x16, 0x7a, 0xfe, 0xb1, 0xb2, 0x34, 0xb9, 0xef, 0x85, 0x1e, 0x81, 0x8c, 0xd2, 0xba, 0xe8, 0x78, - 0x8e, 0x27, 0xc9, 0x1d, 0xb1, 0x8a, 0x24, 0x5a, 0x1b, 0x8e, 0xe7, 0x39, 0x23, 0xec, 0x50, 0xce, - 0x3a, 0xd4, 0x75, 0xbd, 0x90, 0x86, 0xcc, 0x73, 0x83, 0x98, 0x6b, 0x0c, 0xef, 0x04, 0x26, 0xf3, - 0x24, 0xd7, 0xf6, 0x7c, 0xec, 0x4c, 0x6f, 0x76, 0x1c, 0x74, 0xd1, 0xa7, 0x21, 0xf6, 0x63, 0x99, - 0xc7, 0x0e, 0x0b, 0x07, 0x93, 0x43, 0xd3, 0xf6, 0xc6, 0x1d, 0xea, 0x4b, 0x17, 0x5f, 0xcb, 0xc5, - 0x0d, 0xbb, 0xdf, 0x99, 0x76, 0x3b, 0x7c, 0xe8, 0x08, 0xfd, 0xa0, 0x43, 0x39, 0x1f, 0x31, 0x5b, - 0xda, 0xef, 0x4c, 0x6f, 0xd2, 0x11, 0x1f, 0xd0, 0x19, 0x6b, 0xc6, 0x5f, 0x35, 0x58, 0x7b, 0x42, - 0x5d, 0x76, 0x84, 0x41, 0x68, 0xe1, 0xcb, 0x09, 0x06, 0x21, 0x79, 0x0e, 0x55, 0x71, 0x0e, 0x5d, - 0xdb, 0xd4, 0xb6, 0x1a, 0xdd, 0x47, 0x66, 0xe6, 0xd0, 0x4c, 0x1c, 0xca, 0xc5, 0x0b, 0xbb, 0x6f, - 0x4e, 0xbb, 0x26, 0x1f, 0x3a, 0xa6, 0x70, 0x68, 0x2a, 0x0e, 0xcd, 0xc4, 0xa1, 0x69, 0xa5, 0x19, - 0xb1, 0xa4, 0x55, 0xd2, 0x82, 0x15, 0x1f, 0xa7, 0x2c, 0x60, 0x9e, 0xab, 0x57, 0x36, 0xb5, 0xad, - 0xba, 0x95, 0xee, 0x89, 0x0e, 0x35, 0xd7, 0xdb, 0xa6, 0xf6, 0x00, 0xf5, 0xc5, 0x4d, 0x6d, 0x6b, - 0xc5, 0x4a, 0xb6, 0x64, 0x13, 0x1a, 0x94, 0xf3, 0xc7, 0xf4, 0x10, 0x47, 0xbb, 0x78, 0xac, 0x57, - 0xa5, 0xa2, 0x4a, 0x12, 0xba, 0x94, 0xf3, 0xa7, 0x74, 0x8c, 0xfa, 0x92, 0xe4, 0x26, 0x5b, 0xb2, - 0x01, 0x75, 0x97, 0x8e, 0x31, 0xe0, 0xd4, 0x46, 0x7d, 0x45, 0xf2, 0x32, 0x02, 0xf9, 0x16, 0xd6, - 0x95, 0xc0, 0x0f, 0xbc, 0x89, 0x6f, 0xa3, 0x0e, 0xf2, 0xe8, 0x7b, 0xf3, 0x1d, 0xbd, 0x57, 0x34, - 0x6b, 0xcd, 0x7a, 0x22, 0x5f, 0xc1, 0x92, 0x2c, 0x1a, 0xbd, 0xb1, 0xb9, 0xf8, 0x46, 0xb3, 0x1d, - 0x99, 0x25, 0x2e, 0xd4, 0xf8, 0x68, 0xe2, 0x30, 0x37, 0xd0, 0xcf, 0x49, 0x0f, 0xcf, 0xe6, 0xf3, - 0xb0, 0xed, 0xb9, 0x47, 0xcc, 0x79, 0x42, 0x5d, 0xea, 0xe0, 0x18, 0xdd, 0x70, 0x5f, 0x1a, 0xb7, - 0x12, 0x27, 0xe4, 0x15, 0x34, 0x87, 0x93, 0x20, 0xf4, 0xc6, 0xec, 0x15, 0xee, 0x71, 0x59, 0xdc, - 0xfa, 0x79, 0x99, 0xcd, 0xa7, 0xf3, 0x39, 0xde, 0x2d, 0x58, 0xb5, 0x66, 0xfc, 0x88, 0x22, 0x19, - 0x4e, 0x0e, 0xf1, 0x73, 0xf4, 0x65, 0x75, 0xad, 0x46, 0x45, 0xa2, 0x90, 0xa2, 0x32, 0x62, 0xf1, - 0x2e, 0xd0, 0xd7, 0x36, 0x17, 0xa3, 0x32, 0x4a, 0x49, 0x64, 0x0b, 0xd6, 0xa6, 0xe8, 0xb3, 0xa3, - 0xe3, 0x03, 0xe6, 0xb8, 0x34, 0x9c, 0xf8, 0xa8, 0x37, 0x65, 0x29, 0x16, 0xc9, 0x64, 0x0c, 0xe7, - 0x07, 0x38, 0x1a, 0x8b, 0x94, 0x6f, 0xfb, 0xd8, 0x0f, 0xf4, 0x75, 0x99, 0xdf, 0x9d, 0xf9, 0x6f, - 0x50, 0x9a, 0xb3, 0xf2, 0xd6, 0x45, 0x60, 0xae, 0x67, 0xc5, 0x9d, 0x12, 0xf5, 0x08, 0x89, 0x02, - 0x2b, 0x90, 0x8d, 0x09, 0x5c, 0x7a, 0x26, 0xdb, 0x39, 0xad, 0x85, 0xb3, 0x68, 0x6c, 0xe3, 0x11, - 0x5c, 0x2e, 0xba, 0x0d, 0xb8, 0xe7, 0x06, 0x48, 0x4c, 0x20, 0x32, 0x79, 0x0c, 0xfb, 0x19, 0x57, - 0x46, 0xb1, 0x62, 0x95, 0x70, 0x8c, 0xdf, 0x34, 0x68, 0x66, 0xa0, 0x14, 0x1b, 0xd9, 0x80, 0xfa, - 0x38, 0xa6, 0x05, 0xba, 0x26, 0x2f, 0x2e, 0x23, 0xe4, 0x7b, 0xbc, 0x52, 0xec, 0xf1, 0xcb, 0xb0, - 0x1c, 0xa1, 0xb7, 0x84, 0x95, 0xba, 0x15, 0xef, 0x72, 0x58, 0x54, 0x2d, 0x60, 0x51, 0x1b, 0x20, - 0x90, 0x2d, 0xfa, 0xec, 0x98, 0xa3, 0xbe, 0x2c, 0xb9, 0x0a, 0x85, 0x18, 0x70, 0x2e, 0xaa, 0x08, - 0x0b, 0x83, 0xc9, 0x28, 0xd4, 0x6b, 0x52, 0x22, 0x47, 0x33, 0x3c, 0x58, 0x7b, 0xcc, 0xc4, 0x19, - 0x8e, 0x82, 0xb3, 0xb9, 0x83, 0x0f, 0xa1, 0x2a, 0x9c, 0x89, 0x83, 0x1d, 0xfa, 0xd4, 0xb5, 0x07, - 0x98, 0xe4, 0x2a, 0xdd, 0x13, 0x02, 0xd5, 0x90, 0x3a, 0x81, 0x5e, 0x91, 0x74, 0xb9, 0x36, 0x7e, - 0xd0, 0xa2, 0x48, 0x7b, 0x9c, 0x07, 0xef, 0xfc, 0x19, 0x30, 0x26, 0x50, 0xeb, 0x71, 0x2e, 0xe2, - 0x21, 0x37, 0xa1, 0x4a, 0x39, 0x8f, 0x0e, 0xd1, 0xe8, 0x5e, 0x31, 0x95, 0x27, 0x37, 0x16, 0x11, - 0xff, 0x83, 0x07, 0x6e, 0x28, 0x2c, 0x0b, 0xd1, 0xd6, 0x47, 0x50, 0x4f, 0x49, 0xa4, 0x09, 0x8b, - 0x43, 0x8c, 0x6a, 0xad, 0x6e, 0x89, 0x25, 0xb9, 0x08, 0x4b, 0x53, 0x3a, 0x9a, 0x24, 0x55, 0x12, - 0x6d, 0xee, 0x56, 0xee, 0x68, 0xc6, 0xcf, 0x55, 0xf8, 0xaf, 0x88, 0xf3, 0x40, 0x16, 0x47, 0x8f, - 0xf3, 0xfb, 0x18, 0x52, 0x36, 0x0a, 0x3e, 0x9d, 0xa0, 0x7f, 0xfc, 0x96, 0xd3, 0xe1, 0xc0, 0x72, - 0x54, 0x5b, 0x32, 0xac, 0xb7, 0xf0, 0xf4, 0xc4, 0xe6, 0xb3, 0xf7, 0x66, 0xf1, 0xed, 0xbc, 0x37, - 0x65, 0xf8, 0x5f, 0x3d, 0x23, 0xfc, 0x3f, 0x79, 0x04, 0x50, 0x06, 0x8b, 0xe5, 0xfc, 0x60, 0x51, - 0x02, 0xab, 0xb5, 0x72, 0x58, 0xfd, 0xbe, 0x02, 0x97, 0xc5, 0x79, 0xb3, 0xc2, 0x48, 0xb1, 0x49, - 0xb4, 0x94, 0x40, 0x89, 0xa8, 0xcc, 0xe4, 0x9a, 0xdc, 0x86, 0xda, 0x30, 0xf0, 0x5c, 0x17, 0xc3, - 0xf8, 0x4a, 0x5b, 0x6a, 0xf1, 0xee, 0x46, 0xac, 0x1e, 0xe7, 0x07, 0x1c, 0x6d, 0x2b, 0x11, 0x25, - 0xd7, 0xa1, 0x2a, 0x60, 0x5f, 0xe2, 0x54, 0xa3, 0xfb, 0x1f, 0x55, 0xe5, 0x11, 0x8e, 0xc6, 0x89, - 0xbc, 0x14, 0x22, 0x77, 0xa1, 0x9e, 0xe6, 0x20, 0x4e, 0xf2, 0x46, 0xce, 0x49, 0xc2, 0x4c, 0xd4, - 0x32, 0x71, 0xa1, 0xdb, 0x67, 0x3e, 0xda, 0x12, 0x8a, 0x97, 0x66, 0x75, 0xef, 0x27, 0xcc, 0x54, - 0x37, 0x15, 0x37, 0x7e, 0xd5, 0xe0, 0x6a, 0xd6, 0x28, 0x49, 0x96, 0x9e, 0x60, 0x48, 0xfb, 0x34, - 0xa4, 0xef, 0x7e, 0x8c, 0xbc, 0x06, 0xab, 0xf6, 0x00, 0xed, 0x61, 0xf6, 0x84, 0x47, 0xd3, 0x64, - 0x81, 0x6a, 0xfc, 0x5e, 0x81, 0xd5, 0xfc, 0x45, 0x88, 0x9b, 0x14, 0xcf, 0x46, 0x72, 0x93, 0x62, - 0x4d, 0xf6, 0xe1, 0x1c, 0xba, 0x53, 0xe6, 0x7b, 0xae, 0x18, 0x78, 0x92, 0xce, 0xf9, 0xe0, 0xe4, - 0xeb, 0x34, 0x1f, 0x28, 0xe2, 0x11, 0x34, 0xe5, 0x2c, 0x10, 0x17, 0x80, 0x53, 0x9f, 0x8e, 0x31, - 0x44, 0x5f, 0xb4, 0xc7, 0xe2, 0x1b, 0x68, 0x8f, 0x28, 0x82, 0xfd, 0xc4, 0xac, 0xa5, 0x78, 0x68, - 0xbd, 0x80, 0xf5, 0x99, 0x90, 0x4a, 0xa0, 0xf1, 0xb6, 0x0a, 0x8d, 0x8d, 0x6e, 0xbb, 0xe4, 0x84, - 0x8a, 0x19, 0x15, 0x3a, 0x7f, 0xa9, 0x40, 0x43, 0xa9, 0xcf, 0xd2, 0x34, 0xb6, 0x01, 0xa4, 0xc2, - 0x43, 0x36, 0xc2, 0x28, 0x89, 0x75, 0x4b, 0xa1, 0x90, 0x61, 0x49, 0x52, 0x76, 0xe7, 0x4b, 0x8a, - 0x08, 0xa9, 0x34, 0x23, 0x62, 0x22, 0x90, 0xae, 0x83, 0x18, 0x29, 0xe2, 0x1d, 0xf9, 0x06, 0x56, - 0x8f, 0xd8, 0x08, 0xf7, 0xb3, 0x40, 0x96, 0x65, 0x20, 0x7b, 0xf3, 0x07, 0xf2, 0x50, 0xb5, 0x6b, - 0x15, 0xdc, 0x18, 0xef, 0x43, 0xb3, 0xd8, 0xae, 0x22, 0x48, 0x36, 0xa6, 0x4e, 0x9a, 0xad, 0x78, - 0x67, 0xfc, 0xa8, 0x01, 0x99, 0xbd, 0x8f, 0x93, 0x92, 0x3e, 0xbc, 0x13, 0x24, 0x13, 0x71, 0xd4, - 0x28, 0x0a, 0x85, 0xec, 0x42, 0xa3, 0x8f, 0x41, 0xc8, 0x5c, 0x19, 0x70, 0x0c, 0x22, 0xef, 0x9d, - 0x7e, 0xf1, 0xf7, 0x33, 0x05, 0x4b, 0xd5, 0x36, 0x3e, 0x83, 0x2b, 0xa7, 0x4a, 0x2b, 0x73, 0x98, - 0x96, 0x9b, 0xc3, 0x4e, 0x9d, 0xde, 0x0c, 0x02, 0xcd, 0x22, 0x1a, 0x19, 0x2f, 0x61, 0x5d, 0xe4, - 0x74, 0x7b, 0x40, 0xfd, 0xf0, 0x8c, 0x66, 0xab, 0x7b, 0x50, 0x4f, 0x5d, 0x96, 0xe6, 0xba, 0x05, - 0x2b, 0xd3, 0xe4, 0xcb, 0x22, 0x1a, 0xae, 0xd2, 0xbd, 0xd1, 0x03, 0xa2, 0xc6, 0x1b, 0xbf, 0x1b, - 0xd7, 0x61, 0x89, 0x85, 0x38, 0x4e, 0xc6, 0x9b, 0x4b, 0x45, 0xb8, 0x97, 0xe2, 0x56, 0x24, 0xd3, - 0xfd, 0x6e, 0x09, 0xd6, 0x33, 0xd4, 0x15, 0x7f, 0x99, 0x8d, 0x64, 0x0f, 0x9a, 0x3b, 0xf1, 0x37, - 0x7d, 0x32, 0x32, 0x93, 0xff, 0xa9, 0x76, 0x0a, 0x5f, 0xf7, 0xad, 0x8d, 0x72, 0x66, 0x14, 0x91, - 0xb1, 0x40, 0xbe, 0x80, 0xd5, 0xfc, 0x18, 0x4f, 0xae, 0xaa, 0x1a, 0xa5, 0x5f, 0x16, 0x2d, 0xe3, - 0x34, 0x91, 0xd4, 0xf4, 0x3d, 0x58, 0x49, 0xc6, 0xe1, 0x7c, 0x8c, 0x85, 0x21, 0xb9, 0xd5, 0x54, - 0x99, 0x82, 0x61, 0x2c, 0x90, 0x8f, 0x23, 0x65, 0x31, 0xda, 0xcd, 0x2a, 0x2b, 0x73, 0x6b, 0xeb, - 0x42, 0xc9, 0x90, 0x68, 0x2c, 0x90, 0xe7, 0x70, 0x7e, 0x47, 0x22, 0x74, 0xfc, 0x78, 0x93, 0xff, - 0xe7, 0x9d, 0x9c, 0x30, 0xf7, 0xe5, 0x8f, 0x56, 0xfe, 0xfe, 0x1b, 0x0b, 0xe4, 0x27, 0x0d, 0x2e, - 0xec, 0x60, 0x58, 0x7c, 0x0b, 0xc9, 0x8d, 0x72, 0x27, 0x27, 0xbc, 0x99, 0xad, 0xa7, 0xf3, 0xd6, - 0x6c, 0xde, 0xac, 0xb1, 0x40, 0xf6, 0xe5, 0xb1, 0xb3, 0xda, 0x23, 0x57, 0x4a, 0x8b, 0x2c, 0xcd, - 0x5e, 0xfb, 0x24, 0x76, 0x72, 0xd4, 0x4f, 0x7a, 0x7f, 0xbc, 0x6e, 0x6b, 0x7f, 0xbe, 0x6e, 0x6b, - 0x7f, 0xbf, 0x6e, 0x6b, 0x5f, 0xde, 0xfa, 0x97, 0x9f, 0xa3, 0x94, 0x5f, 0xce, 0x28, 0x67, 0xf6, - 0x88, 0xa1, 0x1b, 0x1e, 0x2e, 0xcb, 0x1f, 0x9f, 0x6e, 0xfd, 0x13, 0x00, 0x00, 0xff, 0xff, 0x9e, - 0x66, 0xb6, 0xa2, 0x58, 0x13, 0x00, 0x00, + // 1423 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x5b, 0x6f, 0x1b, 0xc5, + 0x17, 0xcf, 0x26, 0x4e, 0x62, 0x1f, 0xb7, 0x89, 0x33, 0xbd, 0xfc, 0xf7, 0x6f, 0x52, 0x2b, 0x5d, + 0x89, 0x2a, 0x50, 0xba, 0x56, 0xdd, 0x0a, 0xaa, 0x56, 0x42, 0x32, 0x69, 0x9b, 0x4a, 0x69, 0x9a, + 0xb0, 0x29, 0x48, 0xa0, 0x8a, 0x6a, 0xb2, 0x3e, 0x59, 0x0f, 0xb6, 0x77, 0xa7, 0xbb, 0x6b, 0xa3, + 0x54, 0xe2, 0x11, 0xf1, 0xc0, 0x33, 0x7c, 0x1d, 0x5e, 0xb8, 0x3d, 0xf2, 0x11, 0x50, 0xbf, 0x05, + 0x6f, 0x68, 0x66, 0x6f, 0xb3, 0xeb, 0x4d, 0x40, 0x72, 0x9b, 0xbe, 0x24, 0x33, 0xe7, 0x3e, 0x67, + 0xce, 0xfc, 0xce, 0xf1, 0xc2, 0x35, 0x1f, 0xb9, 0x17, 0xa0, 0x3f, 0x41, 0xbf, 0x2d, 0x97, 0x2c, + 0xf4, 0xfc, 0x63, 0x65, 0x69, 0x72, 0xdf, 0x0b, 0x3d, 0x02, 0x19, 0xa5, 0x79, 0xd1, 0xf1, 0x1c, + 0x4f, 0x92, 0xdb, 0x62, 0x15, 0x49, 0x34, 0xd7, 0x1d, 0xcf, 0x73, 0x86, 0xd8, 0xa6, 0x9c, 0xb5, + 0xa9, 0xeb, 0x7a, 0x21, 0x0d, 0x99, 0xe7, 0x06, 0x31, 0xd7, 0x18, 0xdc, 0x09, 0x4c, 0xe6, 0x49, + 0xae, 0xed, 0xf9, 0xd8, 0x9e, 0xdc, 0x6c, 0x3b, 0xe8, 0xa2, 0x4f, 0x43, 0xec, 0xc5, 0x32, 0x8f, + 0x1d, 0x16, 0xf6, 0xc7, 0x87, 0xa6, 0xed, 0x8d, 0xda, 0xd4, 0x97, 0x2e, 0xbe, 0x96, 0x8b, 0x1b, + 0x76, 0xaf, 0x3d, 0xe9, 0xb4, 0xf9, 0xc0, 0x11, 0xfa, 0x41, 0x9b, 0x72, 0x3e, 0x64, 0xb6, 0xb4, + 0xdf, 0x9e, 0xdc, 0xa4, 0x43, 0xde, 0xa7, 0x53, 0xd6, 0x8c, 0xbf, 0x97, 0x61, 0x75, 0x97, 0xba, + 0xec, 0x08, 0x83, 0xd0, 0xc2, 0x17, 0x63, 0x0c, 0x42, 0xf2, 0x0c, 0x2a, 0xe2, 0x1c, 0xba, 0xb6, + 0xa1, 0x6d, 0xd6, 0x3b, 0x8f, 0xcc, 0xcc, 0xa1, 0x99, 0x38, 0x94, 0x8b, 0xe7, 0x76, 0xcf, 0x9c, + 0x74, 0x4c, 0x3e, 0x70, 0x4c, 0xe1, 0xd0, 0x54, 0x1c, 0x9a, 0x89, 0x43, 0xd3, 0x4a, 0x33, 0x62, + 0x49, 0xab, 0xa4, 0x09, 0x55, 0x1f, 0x27, 0x2c, 0x60, 0x9e, 0xab, 0xcf, 0x6f, 0x68, 0x9b, 0x35, + 0x2b, 0xdd, 0x13, 0x1d, 0x96, 0x5d, 0x6f, 0x8b, 0xda, 0x7d, 0xd4, 0x17, 0x36, 0xb4, 0xcd, 0xaa, + 0x95, 0x6c, 0xc9, 0x06, 0xd4, 0x29, 0xe7, 0x8f, 0xe9, 0x21, 0x0e, 0x77, 0xf0, 0x58, 0xaf, 0x48, + 0x45, 0x95, 0x24, 0x74, 0x29, 0xe7, 0x4f, 0xe8, 0x08, 0xf5, 0x45, 0xc9, 0x4d, 0xb6, 0x64, 0x1d, + 0x6a, 0x2e, 0x1d, 0x61, 0xc0, 0xa9, 0x8d, 0x7a, 0x55, 0xf2, 0x32, 0x02, 0xf9, 0x16, 0xd6, 0x94, + 0xc0, 0x0f, 0xbc, 0xb1, 0x6f, 0xa3, 0x0e, 0xf2, 0xe8, 0x7b, 0xb3, 0x1d, 0xbd, 0x5b, 0x34, 0x6b, + 0x4d, 0x7b, 0x22, 0x5f, 0xc1, 0xa2, 0x2c, 0x1a, 0xbd, 0xbe, 0xb1, 0xf0, 0x5a, 0xb3, 0x1d, 0x99, + 0x25, 0x2e, 0x2c, 0xf3, 0xe1, 0xd8, 0x61, 0x6e, 0xa0, 0x9f, 0x93, 0x1e, 0x9e, 0xce, 0xe6, 0x61, + 0xcb, 0x73, 0x8f, 0x98, 0xb3, 0x4b, 0x5d, 0xea, 0xe0, 0x08, 0xdd, 0x70, 0x5f, 0x1a, 0xb7, 0x12, + 0x27, 0xe4, 0x25, 0x34, 0x06, 0xe3, 0x20, 0xf4, 0x46, 0xec, 0x25, 0xee, 0x71, 0x59, 0xdc, 0xfa, + 0x79, 0x99, 0xcd, 0x27, 0xb3, 0x39, 0xde, 0x29, 0x58, 0xb5, 0xa6, 0xfc, 0x88, 0x22, 0x19, 0x8c, + 0x0f, 0xf1, 0x73, 0xf4, 0x65, 0x75, 0xad, 0x44, 0x45, 0xa2, 0x90, 0xa2, 0x32, 0x62, 0xf1, 0x2e, + 0xd0, 0x57, 0x37, 0x16, 0xa2, 0x32, 0x4a, 0x49, 0x64, 0x13, 0x56, 0x27, 0xe8, 0xb3, 0xa3, 0xe3, + 0x03, 0xe6, 0xb8, 0x34, 0x1c, 0xfb, 0xa8, 0x37, 0x64, 0x29, 0x16, 0xc9, 0x64, 0x04, 0xe7, 0xfb, + 0x38, 0x1c, 0x89, 0x94, 0x6f, 0xf9, 0xd8, 0x0b, 0xf4, 0x35, 0x99, 0xdf, 0xed, 0xd9, 0x6f, 0x50, + 0x9a, 0xb3, 0xf2, 0xd6, 0x45, 0x60, 0xae, 0x67, 0xc5, 0x2f, 0x25, 0x7a, 0x23, 0x24, 0x0a, 0xac, + 0x40, 0x26, 0xd7, 0x60, 0x25, 0xf4, 0xa9, 0x3d, 0x60, 0xae, 0xb3, 0x8b, 0x61, 0xdf, 0xeb, 0xe9, + 0x17, 0x64, 0x26, 0x0a, 0x54, 0x63, 0x0c, 0x97, 0x9e, 0xca, 0x67, 0x9f, 0xd6, 0xcc, 0x59, 0x00, + 0x80, 0xf1, 0x08, 0x2e, 0x17, 0xdd, 0x06, 0xdc, 0x73, 0x03, 0x24, 0x26, 0x10, 0x99, 0x64, 0x86, + 0xbd, 0x8c, 0x2b, 0xa3, 0xa8, 0x5a, 0x25, 0x1c, 0xe3, 0x37, 0x0d, 0x1a, 0x19, 0x78, 0xc5, 0x46, + 0xd6, 0xa1, 0x36, 0x8a, 0x69, 0x81, 0xae, 0xc9, 0x0b, 0xce, 0x08, 0x79, 0x2c, 0x98, 0x2f, 0x62, + 0xc1, 0x65, 0x58, 0x8a, 0x50, 0x5e, 0xc2, 0x4f, 0xcd, 0x8a, 0x77, 0x39, 0xcc, 0xaa, 0x14, 0x30, + 0xab, 0x05, 0x10, 0xc8, 0xa7, 0xfc, 0xf4, 0x98, 0xa3, 0xbe, 0x24, 0xb9, 0x0a, 0x85, 0x18, 0x70, + 0x2e, 0xaa, 0x1c, 0x0b, 0x83, 0xf1, 0x30, 0xd4, 0x97, 0xa5, 0x44, 0x8e, 0x66, 0x78, 0xb0, 0xfa, + 0x98, 0x89, 0x33, 0x1c, 0x05, 0x67, 0x73, 0x07, 0x1f, 0x42, 0x45, 0x38, 0x13, 0x07, 0x3b, 0xf4, + 0xa9, 0x6b, 0xf7, 0x31, 0xc9, 0x55, 0xba, 0x27, 0x04, 0x2a, 0x21, 0x75, 0x02, 0x7d, 0x5e, 0xd2, + 0xe5, 0xda, 0xf8, 0x41, 0x8b, 0x22, 0xed, 0x72, 0x1e, 0xbc, 0xf5, 0x76, 0x61, 0x8c, 0x61, 0xb9, + 0xcb, 0xb9, 0x88, 0x87, 0xdc, 0x84, 0x0a, 0xe5, 0x3c, 0x3a, 0x44, 0xbd, 0x73, 0xc5, 0x54, 0x5a, + 0x73, 0x2c, 0x22, 0xfe, 0x07, 0x0f, 0xdc, 0x50, 0x58, 0x16, 0xa2, 0xcd, 0x8f, 0xa0, 0x96, 0x92, + 0x48, 0x03, 0x16, 0x06, 0x18, 0xd5, 0x5a, 0xcd, 0x12, 0x4b, 0x72, 0x11, 0x16, 0x27, 0x74, 0x38, + 0x4e, 0xaa, 0x24, 0xda, 0xdc, 0x9d, 0xbf, 0xa3, 0x19, 0xbf, 0x54, 0xe0, 0xff, 0x22, 0xce, 0x03, + 0x59, 0x1c, 0x5d, 0xce, 0xef, 0x63, 0x48, 0xd9, 0x30, 0xf8, 0x74, 0x8c, 0xfe, 0xf1, 0x1b, 0x4e, + 0x87, 0x03, 0x4b, 0x51, 0x6d, 0xc9, 0xb0, 0xde, 0x40, 0x8b, 0x8a, 0xcd, 0x67, 0x7d, 0x69, 0xe1, + 0xcd, 0xf4, 0xa5, 0xb2, 0x3e, 0x51, 0x39, 0xa3, 0x3e, 0x71, 0xf2, 0xa8, 0xa0, 0x0c, 0x20, 0x4b, + 0xf9, 0x01, 0xa4, 0x04, 0x7e, 0x97, 0xff, 0x2b, 0xfc, 0x56, 0x4b, 0xe1, 0xf7, 0xfb, 0x79, 0xb8, + 0x2c, 0xf2, 0x92, 0x15, 0x50, 0x8a, 0x61, 0xe2, 0xe9, 0x09, 0x34, 0x89, 0xca, 0x51, 0xae, 0xc9, + 0x6d, 0x58, 0x1e, 0x04, 0x9e, 0xeb, 0x62, 0x18, 0x5f, 0x7d, 0x53, 0x2d, 0xf2, 0x9d, 0x88, 0xd5, + 0xe5, 0xfc, 0x80, 0xa3, 0x6d, 0x25, 0xa2, 0xe4, 0x3a, 0x54, 0x44, 0x1b, 0x91, 0x78, 0x56, 0xef, + 0xfc, 0x4f, 0x55, 0x79, 0x84, 0xc3, 0x51, 0x22, 0x2f, 0x85, 0xc8, 0x5d, 0xa8, 0xa5, 0xb9, 0x8a, + 0x2f, 0x63, 0x3d, 0xe7, 0x24, 0x61, 0x26, 0x6a, 0x99, 0xb8, 0xd0, 0xed, 0x31, 0x1f, 0x6d, 0x09, + 0xd9, 0x8b, 0xd3, 0xba, 0xf7, 0x13, 0x66, 0xaa, 0x9b, 0x8a, 0x1b, 0xbf, 0x6a, 0x70, 0x35, 0x7b, + 0x50, 0x49, 0x36, 0x77, 0x31, 0xa4, 0x3d, 0x1a, 0xd2, 0xb7, 0x3f, 0x96, 0x5e, 0x83, 0x15, 0xbb, + 0x8f, 0xf6, 0x20, 0x1b, 0x09, 0xa2, 0xe9, 0xb4, 0x40, 0x35, 0x7e, 0x9f, 0x87, 0x95, 0xfc, 0x45, + 0x88, 0x9b, 0x14, 0xed, 0x25, 0xb9, 0x49, 0xb1, 0x26, 0xfb, 0x70, 0x0e, 0xdd, 0x09, 0xf3, 0x3d, + 0x57, 0x0c, 0x50, 0xc9, 0x0b, 0xfb, 0xe0, 0xe4, 0xeb, 0x34, 0x1f, 0x28, 0xe2, 0x11, 0x84, 0xe5, + 0x2c, 0x10, 0x17, 0x80, 0x53, 0x9f, 0x8e, 0x30, 0x44, 0x5f, 0x3c, 0xa3, 0x85, 0xd7, 0xf0, 0x8c, + 0xa2, 0x08, 0xf6, 0x13, 0xb3, 0x96, 0xe2, 0xa1, 0xf9, 0x1c, 0xd6, 0xa6, 0x42, 0x2a, 0x81, 0xd0, + 0xdb, 0x2a, 0x84, 0xd6, 0x3b, 0xad, 0x92, 0x13, 0x2a, 0x66, 0x54, 0x88, 0xfd, 0x79, 0x1e, 0xea, + 0x4a, 0x7d, 0x96, 0xa6, 0xb1, 0x05, 0x20, 0x15, 0x1e, 0xb2, 0x21, 0x46, 0x49, 0xac, 0x59, 0x0a, + 0x85, 0x0c, 0x4a, 0x92, 0xb2, 0x33, 0x5b, 0x52, 0x44, 0x48, 0xa5, 0x19, 0x11, 0x93, 0x83, 0x74, + 0x1d, 0xc4, 0x88, 0x12, 0xef, 0xc8, 0x37, 0xb0, 0x72, 0xc4, 0x86, 0xb8, 0x9f, 0x05, 0xb2, 0x24, + 0x03, 0xd9, 0x9b, 0x3d, 0x90, 0x87, 0xaa, 0x5d, 0xab, 0xe0, 0xc6, 0x78, 0x1f, 0x1a, 0xc5, 0xe7, + 0x2a, 0x82, 0x64, 0x23, 0xea, 0xa4, 0xd9, 0x8a, 0x77, 0xc6, 0x8f, 0x1a, 0x90, 0xe9, 0xfb, 0x38, + 0x29, 0xe9, 0x83, 0x3b, 0x41, 0x32, 0x61, 0x47, 0x0f, 0x45, 0xa1, 0x90, 0x1d, 0xa8, 0xf7, 0x30, + 0x08, 0x99, 0x2b, 0x03, 0x8e, 0x41, 0xe4, 0xbd, 0xd3, 0x2f, 0xfe, 0x7e, 0xa6, 0x60, 0xa9, 0xda, + 0xc6, 0x67, 0x70, 0xe5, 0x54, 0x69, 0x65, 0x5e, 0xd3, 0x72, 0xf3, 0xda, 0xa9, 0x53, 0x9e, 0x41, + 0xa0, 0x51, 0x44, 0x23, 0xe3, 0x05, 0xac, 0x89, 0x9c, 0x6e, 0xf5, 0xa9, 0x1f, 0x9e, 0xd1, 0x0c, + 0x76, 0x0f, 0x6a, 0xa9, 0xcb, 0xd2, 0x5c, 0x37, 0xa1, 0x3a, 0x49, 0x7e, 0xa9, 0x44, 0x43, 0x58, + 0xba, 0x37, 0xba, 0x40, 0xd4, 0x78, 0xe3, 0xbe, 0x71, 0x1d, 0x16, 0x59, 0x88, 0xa3, 0x64, 0x0c, + 0xba, 0x54, 0x84, 0x7b, 0x29, 0x6e, 0x45, 0x32, 0x9d, 0xef, 0x16, 0x61, 0x2d, 0x43, 0x5d, 0xf1, + 0x97, 0xd9, 0x48, 0xf6, 0xa0, 0xb1, 0x1d, 0x7f, 0x23, 0x48, 0x46, 0x6b, 0xf2, 0x8e, 0x6a, 0xa7, + 0xf0, 0xb5, 0xa0, 0xb9, 0x5e, 0xce, 0x8c, 0x22, 0x32, 0xe6, 0xc8, 0x17, 0xb0, 0x92, 0x1f, 0xf7, + 0xc9, 0x55, 0x55, 0xa3, 0xf4, 0x17, 0x48, 0xd3, 0x38, 0x4d, 0x24, 0x35, 0x7d, 0x0f, 0xaa, 0xc9, + 0xd8, 0x9c, 0x8f, 0xb1, 0x30, 0x4c, 0x37, 0x1b, 0x2a, 0x53, 0x30, 0x8c, 0x39, 0xf2, 0x71, 0xa4, + 0x2c, 0x46, 0xc0, 0x69, 0x65, 0x65, 0xbe, 0x6d, 0x5e, 0x28, 0x19, 0x26, 0x8d, 0x39, 0xf2, 0x0c, + 0xce, 0x6f, 0x4b, 0x84, 0x8e, 0x9b, 0x37, 0x79, 0x37, 0xef, 0xe4, 0x84, 0xf9, 0x30, 0x7f, 0xb4, + 0xf2, 0xfe, 0x6f, 0xcc, 0x91, 0x9f, 0x34, 0xb8, 0xb0, 0x8d, 0x61, 0xb1, 0x17, 0x92, 0x1b, 0xe5, + 0x4e, 0x4e, 0xe8, 0x99, 0xcd, 0x27, 0xb3, 0xd6, 0x6c, 0xde, 0xac, 0x31, 0x47, 0xf6, 0xe5, 0xb1, + 0xb3, 0xda, 0x23, 0x57, 0x4a, 0x8b, 0x2c, 0xcd, 0x5e, 0xeb, 0x24, 0x76, 0x72, 0xd4, 0x4f, 0xba, + 0x7f, 0xbc, 0x6a, 0x69, 0x7f, 0xbe, 0x6a, 0x69, 0x7f, 0xbd, 0x6a, 0x69, 0x5f, 0xde, 0xfa, 0x97, + 0xcf, 0x5b, 0xca, 0x97, 0x38, 0xca, 0x99, 0x3d, 0x64, 0xe8, 0x86, 0x87, 0x4b, 0xf2, 0x63, 0xd6, + 0xad, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x25, 0x4e, 0x84, 0xa1, 0xa8, 0x13, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1792,6 +1809,15 @@ func (m *ManifestRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.TrackingMethod) > 0 { + i -= len(m.TrackingMethod) + copy(dAtA[i:], m.TrackingMethod) + i = encodeVarintRepository(dAtA, i, uint64(len(m.TrackingMethod))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } if m.NoRevisionCache { i-- if m.NoRevisionCache { @@ -2300,6 +2326,13 @@ func (m *RepoServerAppDetailsQuery) MarshalToSizedBuffer(dAtA []byte) (int, erro i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.TrackingMethod) > 0 { + i -= len(m.TrackingMethod) + copy(dAtA[i:], m.TrackingMethod) + i = encodeVarintRepository(dAtA, i, uint64(len(m.TrackingMethod))) + i-- + dAtA[i] = 0x42 + } if m.NoRevisionCache { i-- if m.NoRevisionCache { @@ -3032,6 +3065,10 @@ func (m *ManifestRequest) Size() (n int) { if m.NoRevisionCache { n += 3 } + l = len(m.TrackingMethod) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3221,6 +3258,10 @@ func (m *RepoServerAppDetailsQuery) Size() (n int) { if m.NoRevisionCache { n += 2 } + l = len(m.TrackingMethod) + if l > 0 { + n += 1 + l + sovRepository(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3982,6 +4023,38 @@ func (m *ManifestRequest) Unmarshal(dAtA []byte) error { } } m.NoRevisionCache = bool(v != 0) + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrackingMethod", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TrackingMethod = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRepository(dAtA[iNdEx:]) @@ -5147,6 +5220,38 @@ func (m *RepoServerAppDetailsQuery) Unmarshal(dAtA []byte) error { } } m.NoRevisionCache = bool(v != 0) + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrackingMethod", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + 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 ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TrackingMethod = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRepository(dAtA[iNdEx:]) diff --git a/reposerver/repository/repository.proto b/reposerver/repository/repository.proto index 057aa89739e0d..5d4724bb78c8e 100644 --- a/reposerver/repository/repository.proto +++ b/reposerver/repository/repository.proto @@ -83,6 +83,7 @@ message RepoServerAppDetailsQuery { string appName = 5; bool noCache = 6; bool noRevisionCache = 7; + string trackingMethod = 8; } // RepoAppDetailsResponse application details From ee7324becea1713f32d401945ad5d3e96923844d Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Tue, 21 Sep 2021 18:21:55 +0300 Subject: [PATCH 12/32] remove hardcoded annotation Signed-off-by: pashavictorovich --- reposerver/repository/repository.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index f53f6638bb922..354d3c3cfa153 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -1178,7 +1178,7 @@ func (s *Service) GetAppDetails(ctx context.Context, q *apiclient.RepoServerAppD return err } } - _ = s.cache.SetAppDetails(revision, q.Source, res, argo.TrackingMethodAnnotation) + _ = s.cache.SetAppDetails(revision, q.Source, res, v1alpha1.TrackingMethod(q.TrackingMethod)) return nil } @@ -1190,7 +1190,7 @@ func (s *Service) GetAppDetails(ctx context.Context, q *apiclient.RepoServerAppD func (s *Service) createGetAppDetailsCacheHandler(res *apiclient.RepoAppDetailsResponse, q *apiclient.RepoServerAppDetailsQuery) func(revision string, _ bool) (bool, error) { return func(revision string, _ bool) (bool, error) { - err := s.cache.GetAppDetails(revision, q.Source, res, argo.TrackingMethodAnnotation) + err := s.cache.GetAppDetails(revision, q.Source, res, v1alpha1.TrackingMethod(q.TrackingMethod)) if err == nil { log.Infof("app details cache hit: %s/%s", revision, q.Source.Path) return true, nil From 0084614effce23b38f6e9870fabbc673a9309c1b Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Tue, 21 Sep 2021 19:25:50 +0300 Subject: [PATCH 13/32] remove redundant changes Signed-off-by: pashavictorovich --- reposerver/repository/repository.go | 2 +- util/argo/resource_tracking.go | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 354d3c3cfa153..c1482843afb74 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -773,7 +773,7 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - err = argo.NewResourceTracking().SetAppInstance(target, q.AppLabelKey, q.AppName, argo.ToTrackingMethod(q.TrackingMethod)) + err = argo.NewResourceTracking().SetAppInstance(target, q.AppLabelKey, q.AppName, v1alpha1.TrackingMethod(q.TrackingMethod)) if err != nil { return nil, err } diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index a4ef1c827fee1..7567c3c13f0c7 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -34,7 +34,7 @@ func GetTrackingMethod(settingsMgr *settings.SettingsManager) v1alpha1.TrackingM return TrackingMethodAnnotationAndLabel } - return ToTrackingMethod(tm) + return v1alpha1.TrackingMethod(tm) } func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string { @@ -58,14 +58,3 @@ func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, v return argokube.SetAppInstanceLabel(un, key, val) } } - -func ToTrackingMethod(trackingMethod string) v1alpha1.TrackingMethod { - switch os := trackingMethod; os { - case "label": - return TrackingMethodLabel - case "annotation": - return TrackingMethodAnnotation - default: - return TrackingMethodAnnotationAndLabel - } -} From 4c9865a37f3ec2a0ff477c1da5f0089bec1286d9 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Tue, 21 Sep 2021 20:46:38 +0300 Subject: [PATCH 14/32] regenrate code and fix test Signed-off-by: pashavictorovich --- assets/swagger.json | 4 - controller/cache/cache.go | 2 - controller/state.go | 3 +- manifests/core-install.yaml | 6 - manifests/crds/application-crd.yaml | 6 - manifests/ha/install.yaml | 6 - manifests/install.yaml | 6 - pkg/apis/application/v1alpha1/generated.pb.go | 882 +++++++++--------- pkg/apis/application/v1alpha1/generated.proto | 4 - .../application/v1alpha1/openapi_generated.go | 10 +- pkg/apis/application/v1alpha1/types.go | 3 - reposerver/cache/cache.go | 5 + reposerver/cache/cache_test.go | 10 +- reposerver/repository/repository.go | 3 +- reposerver/repository/repository_test.go | 10 +- server/application/application.go | 1 + util/argo/argo.go | 1 + 17 files changed, 441 insertions(+), 521 deletions(-) diff --git a/assets/swagger.json b/assets/swagger.json index 99b465e0ae6c3..aa2e7f2e4dc90 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -5038,10 +5038,6 @@ }, "syncPolicy": { "$ref": "#/definitions/v1alpha1SyncPolicy" - }, - "trackingMethod": { - "description": "Project is a reference to the project this application belongs to.\nThe empty string means that application belongs to the 'default' project.", - "type": "string" } } }, diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 547933b17cbb8..4529a46d9220c 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -307,8 +307,6 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e } gvk := un.GroupVersionKind() - fmt.Println("Find app name " + appName) - // edge case. we do not label CRDs, so they miss the tracking label we inject. But we still // want the full resource to be available in our cache (to diff), so we store all CRDs return res, res.AppName != "" || gvk.Kind == kube.CustomResourceDefinitionKind diff --git a/controller/state.go b/controller/state.go index 17f73a90ac8fb..f164c52103b0c 100644 --- a/controller/state.go +++ b/controller/state.go @@ -159,7 +159,6 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 return nil, nil, err } ts.AddCheckpoint("version_ms") - trackingMethod := argo.GetTrackingMethod(m.settingsMgr) manifestInfo, err := repoClient.GenerateManifest(context.Background(), &apiclient.ManifestRequest{ Repo: repo, Repos: permittedHelmRepos, @@ -176,7 +175,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 ApiVersions: argo.APIGroupsToVersions(apiGroups), VerifySignature: verifySignature, HelmRepoCreds: permittedHelmCredentials, - TrackingMethod: string(trackingMethod), + TrackingMethod: string(argo.GetTrackingMethod(m.settingsMgr)), }) if err != nil { return nil, nil, err diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index beeaef7d7ae7a..8fa27175a712b 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -792,16 +792,10 @@ spec: type: string type: array type: object - trackingMethod: - description: Project is a reference to the project this application - belongs to. The empty string means that application belongs to the - 'default' project. - type: string required: - destination - project - source - - trackingMethod type: object status: description: ApplicationStatus contains status information for the application diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index ab6fe178db188..94053a7934fda 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -791,16 +791,10 @@ spec: type: string type: array type: object - trackingMethod: - description: Project is a reference to the project this application - belongs to. The empty string means that application belongs to the - 'default' project. - type: string required: - destination - project - source - - trackingMethod type: object status: description: ApplicationStatus contains status information for the application diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index 4c4c5d9d1d1e6..cac3d0d5ef202 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -792,16 +792,10 @@ spec: type: string type: array type: object - trackingMethod: - description: Project is a reference to the project this application - belongs to. The empty string means that application belongs to the - 'default' project. - type: string required: - destination - project - source - - trackingMethod type: object status: description: ApplicationStatus contains status information for the application diff --git a/manifests/install.yaml b/manifests/install.yaml index 2c6427300d0dd..b46cfd107e0bb 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -792,16 +792,10 @@ spec: type: string type: array type: object - trackingMethod: - description: Project is a reference to the project this application - belongs to. The empty string means that application belongs to the - 'default' project. - type: string required: - destination - project - source - - trackingMethod type: object status: description: ApplicationStatus contains status information for the application diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index dabf840e1102e..c33a9564d47c1 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -2633,429 +2633,427 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 6743 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x6c, 0x24, 0xd9, - 0x55, 0xf0, 0x56, 0xb7, 0x1f, 0xdd, 0xc7, 0x8f, 0x19, 0xdf, 0x99, 0x9d, 0x75, 0xfc, 0x6d, 0xc6, - 0xa3, 0x5a, 0x25, 0xd9, 0xef, 0x4b, 0x62, 0x7f, 0x3b, 0x2c, 0x61, 0xc9, 0x86, 0x0d, 0x6e, 0x7b, - 0x1e, 0x9e, 0xf1, 0x6b, 0x8e, 0x3d, 0x33, 0xe4, 0x41, 0xd8, 0x72, 0xf5, 0xed, 0xee, 0x1a, 0x77, - 0x57, 0xf5, 0x56, 0x55, 0x7b, 0xdc, 0x09, 0x79, 0xa1, 0x40, 0x56, 0xe4, 0xb1, 0x51, 0xc2, 0x8f, - 0x44, 0x42, 0x10, 0x1e, 0x42, 0xe2, 0x47, 0x04, 0xfc, 0x02, 0x84, 0xf8, 0x41, 0x7e, 0x05, 0x21, - 0x41, 0x24, 0x50, 0x12, 0x88, 0x30, 0xc9, 0x10, 0x08, 0x20, 0x01, 0x02, 0xf2, 0x87, 0xf9, 0x85, - 0xee, 0xa3, 0xee, 0xbd, 0x55, 0xdd, 0x3d, 0xb6, 0xa7, 0x6b, 0x26, 0x51, 0xc4, 0x3f, 0xf7, 0x39, - 0xa7, 0xce, 0x39, 0xf7, 0x75, 0xee, 0x39, 0xe7, 0x9e, 0x7b, 0x0d, 0x6b, 0x75, 0x2f, 0x6e, 0x74, - 0x76, 0x17, 0xdc, 0xa0, 0xb5, 0xe8, 0x84, 0xf5, 0xa0, 0x1d, 0x06, 0x77, 0xf8, 0x1f, 0x6f, 0x75, - 0xab, 0x8b, 0xfb, 0x17, 0x17, 0xdb, 0x7b, 0xf5, 0x45, 0xa7, 0xed, 0x45, 0x8b, 0x4e, 0xbb, 0xdd, - 0xf4, 0x5c, 0x27, 0xf6, 0x02, 0x7f, 0x71, 0xff, 0x39, 0xa7, 0xd9, 0x6e, 0x38, 0xcf, 0x2d, 0xd6, - 0xa9, 0x4f, 0x43, 0x27, 0xa6, 0xd5, 0x85, 0x76, 0x18, 0xc4, 0x01, 0x79, 0x87, 0xe6, 0xb6, 0x90, - 0x70, 0xe3, 0x7f, 0xfc, 0x8c, 0x5b, 0x5d, 0xd8, 0xbf, 0xb8, 0xd0, 0xde, 0xab, 0x2f, 0x30, 0x6e, - 0x0b, 0x06, 0xb7, 0x85, 0x84, 0xdb, 0xdc, 0x5b, 0x0d, 0x5d, 0xea, 0x41, 0x3d, 0x58, 0xe4, 0x4c, - 0x77, 0x3b, 0x35, 0xfe, 0x8b, 0xff, 0xe0, 0x7f, 0x09, 0x61, 0x73, 0xf6, 0xde, 0x0b, 0xd1, 0x82, - 0x17, 0x30, 0xf5, 0x16, 0xdd, 0x20, 0xa4, 0x8b, 0xfb, 0x3d, 0x0a, 0xcd, 0x3d, 0xaf, 0x69, 0x5a, - 0x8e, 0xdb, 0xf0, 0x7c, 0x1a, 0x76, 0x75, 0x9b, 0x5a, 0x34, 0x76, 0xfa, 0x7d, 0xb5, 0x38, 0xe8, - 0xab, 0xb0, 0xe3, 0xc7, 0x5e, 0x8b, 0xf6, 0x7c, 0xf0, 0xb6, 0xa3, 0x3e, 0x88, 0xdc, 0x06, 0x6d, - 0x39, 0xd9, 0xef, 0xec, 0x57, 0x60, 0x6a, 0xe9, 0xf6, 0xf6, 0x52, 0x27, 0x6e, 0x2c, 0x07, 0x7e, - 0xcd, 0xab, 0x93, 0x1f, 0x85, 0x09, 0xb7, 0xd9, 0x89, 0x62, 0x1a, 0x6e, 0x38, 0x2d, 0x3a, 0x6b, - 0x5d, 0xb0, 0x9e, 0x2d, 0x57, 0xce, 0x7c, 0xe5, 0x70, 0xfe, 0x89, 0x7b, 0x87, 0xf3, 0x13, 0xcb, - 0x1a, 0x85, 0x26, 0x1d, 0xf9, 0xbf, 0x30, 0x1e, 0x06, 0x4d, 0xba, 0x84, 0x1b, 0xb3, 0x05, 0xfe, - 0xc9, 0x29, 0xf9, 0xc9, 0x38, 0x0a, 0x30, 0x26, 0x78, 0xfb, 0x6b, 0x05, 0x80, 0xa5, 0x76, 0x7b, - 0x2b, 0x0c, 0xee, 0x50, 0x37, 0x26, 0x2f, 0x43, 0x89, 0xf5, 0x42, 0xd5, 0x89, 0x1d, 0x2e, 0x6d, - 0xe2, 0xe2, 0xff, 0x5f, 0x10, 0x8d, 0x59, 0x30, 0x1b, 0xa3, 0x47, 0x8e, 0x51, 0x2f, 0xec, 0x3f, - 0xb7, 0xb0, 0xb9, 0xcb, 0xbe, 0x5f, 0xa7, 0xb1, 0x53, 0x21, 0x52, 0x18, 0x68, 0x18, 0x2a, 0xae, - 0xc4, 0x87, 0x91, 0xa8, 0x4d, 0x5d, 0xae, 0xd8, 0xc4, 0xc5, 0xb5, 0x85, 0x61, 0xa6, 0xc8, 0x82, - 0xd6, 0x7c, 0xbb, 0x4d, 0xdd, 0xca, 0xa4, 0x94, 0x3c, 0xc2, 0x7e, 0x21, 0x97, 0x43, 0xf6, 0x61, - 0x2c, 0x8a, 0x9d, 0xb8, 0x13, 0xcd, 0x16, 0xb9, 0xc4, 0x8d, 0xdc, 0x24, 0x72, 0xae, 0x95, 0x69, - 0x29, 0x73, 0x4c, 0xfc, 0x46, 0x29, 0xcd, 0xfe, 0x5b, 0x0b, 0xa6, 0x35, 0xf1, 0x9a, 0x17, 0xc5, - 0xe4, 0xbd, 0x3d, 0x9d, 0xbb, 0x70, 0xbc, 0xce, 0x65, 0x5f, 0xf3, 0xae, 0x3d, 0x2d, 0x85, 0x95, - 0x12, 0x88, 0xd1, 0xb1, 0x2d, 0x18, 0xf5, 0x62, 0xda, 0x8a, 0x66, 0x0b, 0x17, 0x8a, 0xcf, 0x4e, - 0x5c, 0xbc, 0x9a, 0x57, 0x3b, 0x2b, 0x53, 0x52, 0xe8, 0xe8, 0x2a, 0x63, 0x8f, 0x42, 0x8a, 0xfd, - 0x3d, 0x30, 0xdb, 0xc7, 0x3a, 0x9c, 0x3c, 0x07, 0x13, 0x51, 0xd0, 0x09, 0x5d, 0x8a, 0xb4, 0x1d, - 0x44, 0xb3, 0xd6, 0x85, 0x22, 0x9b, 0x7a, 0x6c, 0xa6, 0x6e, 0x6b, 0x30, 0x9a, 0x34, 0xe4, 0xd3, + // 6715 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x24, 0xd9, + 0x55, 0xf0, 0x56, 0xb7, 0x7f, 0xba, 0x8f, 0x7f, 0x66, 0x7c, 0x67, 0x76, 0xd6, 0xf1, 0xb7, 0x19, + 0x8f, 0x6a, 0x95, 0x64, 0xbf, 0x2f, 0x89, 0xfd, 0xed, 0xb0, 0x84, 0x25, 0x1b, 0x36, 0xb8, 0x6d, + 0xcf, 0x8c, 0x67, 0x3c, 0xb6, 0xe7, 0xd8, 0x33, 0x43, 0x7e, 0x08, 0x5b, 0xae, 0xbe, 0xdd, 0x5d, + 0xe3, 0xee, 0xaa, 0xde, 0xaa, 0x6a, 0x8f, 0x3b, 0x21, 0x7f, 0x28, 0x90, 0x15, 0xf9, 0xd9, 0x28, + 0xc9, 0x43, 0x22, 0x21, 0x08, 0x3f, 0x42, 0xe2, 0x21, 0x02, 0x9e, 0x00, 0x21, 0x1e, 0xc8, 0x53, + 0x10, 0x12, 0x44, 0x02, 0x25, 0x81, 0x08, 0x93, 0x0c, 0x41, 0x01, 0x24, 0x40, 0x40, 0x5e, 0x98, + 0x27, 0x74, 0x7f, 0xea, 0xde, 0x5b, 0xd5, 0xdd, 0x63, 0x7b, 0xba, 0x66, 0x12, 0x45, 0xbc, 0x75, + 0x9d, 0x73, 0xee, 0x39, 0xe7, 0xfe, 0x9d, 0x7b, 0xee, 0xb9, 0xe7, 0xde, 0x86, 0xf5, 0xba, 0x17, + 0x37, 0x3a, 0xbb, 0x0b, 0x6e, 0xd0, 0x5a, 0x74, 0xc2, 0x7a, 0xd0, 0x0e, 0x83, 0x3b, 0xfc, 0xc7, + 0x5b, 0xdd, 0xea, 0xe2, 0xfe, 0xc5, 0xc5, 0xf6, 0x5e, 0x7d, 0xd1, 0x69, 0x7b, 0xd1, 0xa2, 0xd3, + 0x6e, 0x37, 0x3d, 0xd7, 0x89, 0xbd, 0xc0, 0x5f, 0xdc, 0x7f, 0xce, 0x69, 0xb6, 0x1b, 0xce, 0x73, + 0x8b, 0x75, 0xea, 0xd3, 0xd0, 0x89, 0x69, 0x75, 0xa1, 0x1d, 0x06, 0x71, 0x40, 0xde, 0xa1, 0xb9, + 0x2d, 0x24, 0xdc, 0xf8, 0x8f, 0x9f, 0x73, 0xab, 0x0b, 0xfb, 0x17, 0x17, 0xda, 0x7b, 0xf5, 0x05, + 0xc6, 0x6d, 0xc1, 0xe0, 0xb6, 0x90, 0x70, 0x9b, 0x7b, 0xab, 0xa1, 0x4b, 0x3d, 0xa8, 0x07, 0x8b, + 0x9c, 0xe9, 0x6e, 0xa7, 0xc6, 0xbf, 0xf8, 0x07, 0xff, 0x25, 0x84, 0xcd, 0xd9, 0x7b, 0x2f, 0x44, + 0x0b, 0x5e, 0xc0, 0xd4, 0x5b, 0x74, 0x83, 0x90, 0x2e, 0xee, 0xf7, 0x28, 0x34, 0xf7, 0xbc, 0xa6, + 0x69, 0x39, 0x6e, 0xc3, 0xf3, 0x69, 0xd8, 0xd5, 0x75, 0x6a, 0xd1, 0xd8, 0xe9, 0x57, 0x6a, 0x71, + 0x50, 0xa9, 0xb0, 0xe3, 0xc7, 0x5e, 0x8b, 0xf6, 0x14, 0x78, 0xdb, 0x51, 0x05, 0x22, 0xb7, 0x41, + 0x5b, 0x4e, 0xb6, 0x9c, 0xfd, 0x0a, 0x4c, 0x2d, 0xdd, 0xde, 0x5e, 0xea, 0xc4, 0x8d, 0xe5, 0xc0, + 0xaf, 0x79, 0x75, 0xf2, 0xe3, 0x30, 0xe1, 0x36, 0x3b, 0x51, 0x4c, 0xc3, 0x0d, 0xa7, 0x45, 0x67, + 0xad, 0x0b, 0xd6, 0xb3, 0xe5, 0xca, 0x99, 0xaf, 0x1e, 0xce, 0x3f, 0x71, 0xef, 0x70, 0x7e, 0x62, + 0x59, 0xa3, 0xd0, 0xa4, 0x23, 0xff, 0x17, 0xc6, 0xc3, 0xa0, 0x49, 0x97, 0x70, 0x63, 0xb6, 0xc0, + 0x8b, 0x9c, 0x92, 0x45, 0xc6, 0x51, 0x80, 0x31, 0xc1, 0xdb, 0x5f, 0x2f, 0x00, 0x2c, 0xb5, 0xdb, + 0x5b, 0x61, 0x70, 0x87, 0xba, 0x31, 0x79, 0x19, 0x4a, 0xac, 0x15, 0xaa, 0x4e, 0xec, 0x70, 0x69, + 0x13, 0x17, 0xff, 0xff, 0x82, 0xa8, 0xcc, 0x82, 0x59, 0x19, 0xdd, 0x73, 0x8c, 0x7a, 0x61, 0xff, + 0xb9, 0x85, 0xcd, 0x5d, 0x56, 0xfe, 0x3a, 0x8d, 0x9d, 0x0a, 0x91, 0xc2, 0x40, 0xc3, 0x50, 0x71, + 0x25, 0x3e, 0x8c, 0x44, 0x6d, 0xea, 0x72, 0xc5, 0x26, 0x2e, 0xae, 0x2f, 0x0c, 0x33, 0x44, 0x16, + 0xb4, 0xe6, 0xdb, 0x6d, 0xea, 0x56, 0x26, 0xa5, 0xe4, 0x11, 0xf6, 0x85, 0x5c, 0x0e, 0xd9, 0x87, + 0xb1, 0x28, 0x76, 0xe2, 0x4e, 0x34, 0x5b, 0xe4, 0x12, 0x37, 0x72, 0x93, 0xc8, 0xb9, 0x56, 0xa6, + 0xa5, 0xcc, 0x31, 0xf1, 0x8d, 0x52, 0x9a, 0xfd, 0x77, 0x16, 0x4c, 0x6b, 0xe2, 0x75, 0x2f, 0x8a, + 0xc9, 0x7b, 0x7b, 0x1a, 0x77, 0xe1, 0x78, 0x8d, 0xcb, 0x4a, 0xf3, 0xa6, 0x3d, 0x2d, 0x85, 0x95, + 0x12, 0x88, 0xd1, 0xb0, 0x2d, 0x18, 0xf5, 0x62, 0xda, 0x8a, 0x66, 0x0b, 0x17, 0x8a, 0xcf, 0x4e, + 0x5c, 0xbc, 0x92, 0x57, 0x3d, 0x2b, 0x53, 0x52, 0xe8, 0xe8, 0x1a, 0x63, 0x8f, 0x42, 0x8a, 0xfd, + 0x7d, 0x30, 0xeb, 0xc7, 0x1a, 0x9c, 0x3c, 0x07, 0x13, 0x51, 0xd0, 0x09, 0x5d, 0x8a, 0xb4, 0x1d, + 0x44, 0xb3, 0xd6, 0x85, 0x22, 0x1b, 0x7a, 0x6c, 0xa4, 0x6e, 0x6b, 0x30, 0x9a, 0x34, 0xe4, 0xd3, 0x16, 0x4c, 0x56, 0x69, 0x14, 0x7b, 0x3e, 0x97, 0x9f, 0x28, 0xbf, 0x33, 0xb4, 0xf2, 0x09, 0x70, - 0x45, 0x33, 0xaf, 0x9c, 0x95, 0x0d, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3, 0x15, 0x57, 0xa5, - 0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0x9b, 0xcf, 0x19, 0x63, 0xc5, 0xad, 0x68, 0x14, 0x9a, 0x74, 0xc4, - 0x87, 0x51, 0xb6, 0xa2, 0xa2, 0xd9, 0x11, 0xae, 0xff, 0xea, 0x70, 0xfa, 0xcb, 0x4e, 0x65, 0x8b, - 0x55, 0xf7, 0x3e, 0xfb, 0x15, 0xa1, 0x10, 0x43, 0x3e, 0x65, 0xc1, 0xac, 0x5c, 0xf1, 0x48, 0x45, - 0x87, 0xde, 0x6e, 0x78, 0x31, 0x6d, 0x7a, 0x51, 0x3c, 0x3b, 0xca, 0x75, 0x58, 0x3c, 0xde, 0xdc, - 0xba, 0x12, 0x06, 0x9d, 0xf6, 0x75, 0xcf, 0xaf, 0x56, 0x2e, 0x48, 0x49, 0xb3, 0xcb, 0x03, 0x18, - 0xe3, 0x40, 0x91, 0xe4, 0x73, 0x16, 0xcc, 0xf9, 0x4e, 0x8b, 0x46, 0x6d, 0x87, 0x0d, 0xad, 0x40, - 0x57, 0x9a, 0x8e, 0xbb, 0xc7, 0x35, 0x1a, 0x7b, 0x38, 0x8d, 0x6c, 0xa9, 0xd1, 0xdc, 0xc6, 0x40, - 0xd6, 0xf8, 0x00, 0xb1, 0xe4, 0x37, 0x2c, 0x98, 0x09, 0xc2, 0x76, 0xc3, 0xf1, 0x69, 0x35, 0xc1, - 0x46, 0xb3, 0xe3, 0x7c, 0xe9, 0xbd, 0x6f, 0xb8, 0x21, 0xda, 0xcc, 0xb2, 0x5d, 0x0f, 0x7c, 0x2f, - 0x0e, 0xc2, 0x6d, 0x1a, 0xc7, 0x9e, 0x5f, 0x8f, 0x2a, 0x4f, 0xde, 0x3b, 0x9c, 0x9f, 0xe9, 0xa1, - 0xc2, 0x5e, 0x7d, 0xc8, 0x07, 0x60, 0x22, 0xea, 0xfa, 0xee, 0x6d, 0xcf, 0xaf, 0x06, 0x77, 0xa3, - 0xd9, 0x52, 0x1e, 0xcb, 0x77, 0x5b, 0x31, 0x94, 0x0b, 0x50, 0x0b, 0x40, 0x53, 0x5a, 0xff, 0x81, - 0xd3, 0x53, 0xa9, 0x9c, 0xf7, 0xc0, 0xe9, 0xc9, 0xf4, 0x00, 0xb1, 0xe4, 0xe3, 0x16, 0x4c, 0x45, - 0x5e, 0xdd, 0x77, 0xe2, 0x4e, 0x48, 0xaf, 0xd3, 0x6e, 0x34, 0x0b, 0x5c, 0x91, 0x6b, 0x43, 0xf6, - 0x8a, 0xc1, 0xb2, 0xf2, 0xa4, 0xd4, 0x71, 0xca, 0x84, 0x46, 0x98, 0x96, 0xdb, 0x6f, 0xa1, 0xe9, - 0x69, 0x3d, 0x91, 0xef, 0x42, 0xd3, 0x93, 0x7a, 0xa0, 0x48, 0xfb, 0x4f, 0x0b, 0x70, 0x3a, 0xbb, - 0x07, 0x91, 0xdf, 0xb2, 0xe0, 0xd4, 0x9d, 0xbb, 0xf1, 0x4e, 0xb0, 0x47, 0xfd, 0xa8, 0xd2, 0x65, - 0x96, 0x82, 0x5b, 0xdf, 0x89, 0x8b, 0x6e, 0xbe, 0xbb, 0xdd, 0xc2, 0xb5, 0xb4, 0x94, 0x4b, 0x7e, - 0x1c, 0x76, 0x2b, 0x4f, 0xc9, 0xf6, 0x9c, 0xba, 0x76, 0x7b, 0xc7, 0xc4, 0x62, 0x56, 0xa9, 0xb9, - 0x4f, 0x58, 0x70, 0xb6, 0x1f, 0x0b, 0x72, 0x1a, 0x8a, 0x7b, 0xb4, 0x2b, 0x1c, 0x1c, 0x64, 0x7f, - 0x92, 0x9f, 0x86, 0xd1, 0x7d, 0xa7, 0xd9, 0xa1, 0xd2, 0x51, 0xb8, 0x32, 0x5c, 0x43, 0x94, 0x66, - 0x28, 0xb8, 0xbe, 0xbd, 0xf0, 0x82, 0x65, 0xff, 0x45, 0x11, 0x26, 0x8c, 0xad, 0xe2, 0x31, 0x38, - 0x3f, 0x41, 0xca, 0xf9, 0x59, 0xcf, 0x6d, 0x97, 0x1b, 0xe8, 0xfd, 0xdc, 0xcd, 0x78, 0x3f, 0x9b, - 0xf9, 0x89, 0x7c, 0xa0, 0xfb, 0x43, 0x62, 0x28, 0x07, 0x6d, 0xe6, 0xdc, 0xb2, 0x5d, 0x74, 0x24, - 0x8f, 0x21, 0xdc, 0x4c, 0xd8, 0x55, 0xa6, 0xee, 0x1d, 0xce, 0x97, 0xd5, 0x4f, 0xd4, 0x82, 0xec, - 0xaf, 0x5b, 0x70, 0xd6, 0xd0, 0x71, 0x39, 0xf0, 0xab, 0x1e, 0x1f, 0xda, 0x0b, 0x30, 0x12, 0x77, - 0xdb, 0x89, 0x07, 0xad, 0x7a, 0x6a, 0xa7, 0xdb, 0xa6, 0xc8, 0x31, 0xcc, 0x67, 0x6e, 0xd1, 0x28, - 0x72, 0xea, 0x34, 0xeb, 0x33, 0xaf, 0x0b, 0x30, 0x26, 0x78, 0x12, 0x02, 0x69, 0x3a, 0x51, 0xbc, - 0x13, 0x3a, 0x7e, 0xc4, 0xd9, 0xef, 0x78, 0x2d, 0x2a, 0x3b, 0xf8, 0xff, 0x1d, 0x6f, 0xc6, 0xb0, - 0x2f, 0x2a, 0xe7, 0xee, 0x1d, 0xce, 0x93, 0xb5, 0x1e, 0x4e, 0xd8, 0x87, 0xbb, 0xfd, 0x39, 0x0b, - 0xce, 0xf5, 0x77, 0x6b, 0xc8, 0x1b, 0x61, 0x2c, 0xa2, 0xe1, 0x3e, 0x0d, 0x65, 0xeb, 0xf4, 0x90, - 0x70, 0x28, 0x4a, 0x2c, 0x59, 0x84, 0xb2, 0x32, 0xb9, 0xb2, 0x8d, 0x33, 0x92, 0xb4, 0xac, 0xed, - 0xb4, 0xa6, 0x61, 0x9d, 0xc6, 0x7e, 0x48, 0x27, 0x48, 0x75, 0x1a, 0x8f, 0x37, 0x38, 0xc6, 0xfe, - 0x3b, 0x0b, 0x4e, 0x19, 0x5a, 0x3d, 0x06, 0x2f, 0xd7, 0x4f, 0x7b, 0xb9, 0xab, 0xb9, 0xcd, 0xe7, - 0x01, 0x6e, 0xee, 0x97, 0xc7, 0x60, 0xc6, 0x9c, 0xf5, 0xdc, 0x1c, 0xf3, 0x00, 0x8b, 0xb6, 0x83, - 0x9b, 0xb8, 0x26, 0xfb, 0x5c, 0x07, 0x58, 0x02, 0x8c, 0x09, 0x9e, 0x75, 0x62, 0xdb, 0x89, 0x1b, - 0xb2, 0xc3, 0x55, 0x27, 0x6e, 0x39, 0x71, 0x03, 0x39, 0x86, 0xbc, 0x04, 0xd3, 0xb1, 0x13, 0xd6, - 0x69, 0x8c, 0x74, 0xdf, 0x8b, 0x92, 0xf5, 0x52, 0xae, 0x9c, 0x93, 0xb4, 0xd3, 0x3b, 0x29, 0x2c, - 0x66, 0xa8, 0xc9, 0x2b, 0x30, 0xd2, 0xa0, 0xcd, 0x96, 0xf4, 0x6b, 0xb6, 0xf3, 0x5b, 0xe1, 0xbc, - 0xad, 0x57, 0x69, 0xb3, 0x55, 0x29, 0x31, 0x95, 0xd9, 0x5f, 0xc8, 0x45, 0x91, 0x9f, 0xb7, 0xa0, - 0xbc, 0xd7, 0x89, 0xe2, 0xa0, 0xe5, 0xbd, 0x9f, 0xce, 0x96, 0xb8, 0xe0, 0x9f, 0xca, 0x59, 0xf0, - 0xf5, 0x84, 0xbf, 0x58, 0xef, 0xea, 0x27, 0x6a, 0xc9, 0xe4, 0x83, 0x30, 0xbe, 0x17, 0x05, 0xbe, - 0x4f, 0x99, 0xa7, 0xc2, 0x94, 0xb8, 0x95, 0xb7, 0x12, 0x82, 0x7b, 0x65, 0x82, 0x8d, 0xad, 0xfc, - 0x81, 0x89, 0x4c, 0xde, 0x0d, 0x55, 0x2f, 0xa4, 0x6e, 0x1c, 0x84, 0xdd, 0x59, 0x78, 0x24, 0xdd, - 0xb0, 0x92, 0xf0, 0x17, 0xdd, 0xa0, 0x7e, 0xa2, 0x96, 0x4c, 0xba, 0x30, 0xd6, 0x6e, 0x76, 0xea, - 0x9e, 0x3f, 0x3b, 0xc1, 0x75, 0xb8, 0x99, 0xb3, 0x0e, 0x5b, 0x9c, 0x79, 0x05, 0x98, 0x51, 0x11, - 0x7f, 0xa3, 0x14, 0x48, 0x9e, 0x81, 0x51, 0xb7, 0xe1, 0x84, 0xf1, 0xec, 0x24, 0x9f, 0xb3, 0x6a, - 0x11, 0x2d, 0x33, 0x20, 0x0a, 0x9c, 0xfd, 0x6b, 0x05, 0x98, 0x1b, 0xdc, 0x30, 0xb1, 0x9a, 0xdc, - 0x4e, 0x18, 0x09, 0xfb, 0x5c, 0x32, 0x57, 0x13, 0x07, 0x63, 0x82, 0x27, 0x1f, 0xb5, 0x60, 0xfc, - 0x8e, 0x1c, 0xf1, 0xc2, 0x23, 0x19, 0xf1, 0x6b, 0x72, 0xc4, 0x95, 0x0e, 0xd7, 0x92, 0x51, 0x97, - 0x72, 0x99, 0xba, 0xf4, 0xc0, 0x6d, 0x76, 0xaa, 0x89, 0x65, 0x54, 0xa4, 0x97, 0x04, 0x18, 0x13, - 0x3c, 0x23, 0xf5, 0x7c, 0x41, 0x3a, 0x92, 0x26, 0x5d, 0xf5, 0x25, 0xa9, 0xc4, 0xdb, 0xdf, 0x29, - 0xc2, 0x93, 0x7d, 0x17, 0x1f, 0x59, 0x00, 0xe0, 0x3e, 0xcb, 0x65, 0x8f, 0x05, 0x98, 0x22, 0xaa, - 0x9e, 0x66, 0x2e, 0xc6, 0x2d, 0x05, 0x45, 0x83, 0x82, 0x7c, 0x18, 0xa0, 0xed, 0x84, 0x4e, 0x8b, - 0xc6, 0x34, 0x4c, 0xec, 0xe4, 0xf5, 0xe1, 0x7a, 0x89, 0xe9, 0xb1, 0x95, 0xf0, 0xd4, 0x3e, 0x8e, - 0x02, 0x45, 0x68, 0x88, 0x64, 0x31, 0x74, 0x48, 0x9b, 0xd4, 0x89, 0xe8, 0x86, 0xde, 0x3e, 0x54, - 0x0c, 0x8d, 0x1a, 0x85, 0x26, 0x1d, 0xdb, 0xc7, 0x78, 0x2b, 0x22, 0xd9, 0x57, 0x6a, 0x1f, 0xe3, - 0xed, 0x8c, 0x50, 0x62, 0xc9, 0x6b, 0x16, 0x4c, 0xd7, 0xbc, 0x26, 0xd5, 0xd2, 0x65, 0xc4, 0xbb, - 0x39, 0x7c, 0x23, 0x2f, 0x9b, 0x7c, 0xb5, 0x05, 0x4e, 0x81, 0x23, 0xcc, 0x88, 0x67, 0xc3, 0xbc, - 0x4f, 0x43, 0x6e, 0xba, 0xc7, 0xd2, 0xc3, 0x7c, 0x4b, 0x80, 0x31, 0xc1, 0xdb, 0x5f, 0x28, 0xc0, - 0xec, 0xa0, 0x39, 0x47, 0x22, 0x36, 0xb3, 0xe2, 0x5b, 0x4e, 0x18, 0x49, 0xf7, 0x7d, 0xc8, 0x28, - 0x50, 0xf2, 0xbd, 0xe5, 0x84, 0xe6, 0x1c, 0xe5, 0x02, 0x30, 0x91, 0x44, 0xee, 0xc0, 0x48, 0xdc, - 0x74, 0x72, 0x4a, 0x1b, 0x19, 0x12, 0xb5, 0x93, 0xb5, 0xb6, 0x14, 0x21, 0x97, 0x41, 0x9e, 0x86, - 0x91, 0xa6, 0xb7, 0xcb, 0x9c, 0x51, 0x36, 0x89, 0xf9, 0xae, 0xb2, 0xe6, 0xed, 0x46, 0xc8, 0xa1, - 0xf6, 0xd7, 0xac, 0x3e, 0x7d, 0x23, 0x8d, 0x2e, 0x9b, 0x54, 0xd4, 0xdf, 0xf7, 0xc2, 0xc0, 0x6f, - 0x51, 0x3f, 0xce, 0xa6, 0x42, 0x2f, 0x69, 0x14, 0x9a, 0x74, 0xe4, 0xe7, 0xac, 0x3e, 0xab, 0x61, - 0xc8, 0x1c, 0xa0, 0x54, 0xe9, 0xd8, 0x0b, 0xc2, 0xfe, 0xf7, 0xb1, 0x3e, 0xf6, 0x4f, 0x6d, 0x68, - 0xe4, 0x22, 0x00, 0xf3, 0xa6, 0xb6, 0x42, 0x5a, 0xf3, 0x0e, 0x64, 0xcb, 0x14, 0xcb, 0x0d, 0x85, - 0x41, 0x83, 0x2a, 0xf9, 0x66, 0xbb, 0x53, 0x63, 0xdf, 0x14, 0x7a, 0xbf, 0x11, 0x18, 0x34, 0xa8, - 0xc8, 0xf3, 0x30, 0xe6, 0xb5, 0x9c, 0x3a, 0x4d, 0xfa, 0xff, 0x69, 0xb6, 0xb8, 0x56, 0x39, 0xe4, - 0xfe, 0xe1, 0xfc, 0xb4, 0x52, 0x88, 0x83, 0x50, 0xd2, 0x92, 0xdf, 0xb4, 0x60, 0xd2, 0x0d, 0x5a, - 0xad, 0xc0, 0x5f, 0x73, 0x76, 0x69, 0x33, 0x49, 0x71, 0xdd, 0x79, 0x54, 0xdb, 0xfd, 0xc2, 0xb2, - 0x21, 0x4c, 0x04, 0x98, 0x2a, 0x71, 0x67, 0xa2, 0x30, 0xa5, 0x95, 0xb9, 0x06, 0x47, 0x1f, 0xbc, - 0x06, 0xc9, 0x1f, 0x58, 0x30, 0x23, 0xbe, 0x5d, 0xf2, 0xfd, 0x20, 0x96, 0x99, 0x47, 0x91, 0xa3, - 0x0a, 0x1e, 0x71, 0xb3, 0x0c, 0x89, 0xa2, 0x6d, 0xaf, 0x93, 0x6a, 0xce, 0xf4, 0xe0, 0xb1, 0x57, - 0x49, 0x72, 0x05, 0x66, 0x6a, 0x41, 0xe8, 0x52, 0xb3, 0x23, 0xb8, 0xe3, 0x57, 0xd2, 0x8c, 0x2e, - 0x67, 0x09, 0xb0, 0xf7, 0x1b, 0x72, 0x0b, 0xce, 0x19, 0x40, 0xb3, 0x1f, 0x4a, 0x9c, 0xdb, 0x79, - 0xc9, 0xed, 0xdc, 0xe5, 0xbe, 0x54, 0x38, 0xe0, 0xeb, 0xb9, 0x77, 0xc2, 0x4c, 0xcf, 0xf8, 0xf5, - 0x89, 0xee, 0xcf, 0x9a, 0xd1, 0x7d, 0xd9, 0x08, 0xca, 0xe7, 0x56, 0xe0, 0x5c, 0xff, 0x9e, 0x3a, - 0x09, 0x17, 0xfb, 0x57, 0x2c, 0x78, 0x6a, 0x80, 0x1b, 0xa3, 0xc2, 0x1a, 0x6b, 0x50, 0x58, 0x43, - 0x1c, 0x28, 0x52, 0x7f, 0x5f, 0x1a, 0x8b, 0xcb, 0xc3, 0xcd, 0x88, 0x4b, 0xfe, 0xbe, 0x18, 0xe8, - 0xf1, 0x7b, 0x87, 0xf3, 0xc5, 0x4b, 0xfe, 0x3e, 0x32, 0xde, 0xf6, 0x3f, 0x8e, 0xa5, 0x22, 0xa7, - 0xed, 0x24, 0x58, 0xe7, 0x8a, 0xca, 0xb8, 0x69, 0x33, 0xe7, 0xb9, 0x68, 0x44, 0x86, 0x22, 0x05, - 0x2f, 0xc5, 0x91, 0x4f, 0x58, 0x3c, 0xeb, 0x9d, 0x44, 0x94, 0xd2, 0xb3, 0x7a, 0x34, 0x49, 0x78, - 0x33, 0x97, 0x9e, 0x00, 0xd1, 0x94, 0xce, 0x56, 0x72, 0x5b, 0x24, 0x9d, 0xb2, 0xfe, 0x55, 0x92, - 0x17, 0x4f, 0xf0, 0xe4, 0x00, 0x20, 0xea, 0xfa, 0xee, 0x56, 0xd0, 0xf4, 0xdc, 0xae, 0x4c, 0x33, - 0xe4, 0x90, 0x39, 0x15, 0xfc, 0x84, 0x93, 0xa5, 0x7f, 0xa3, 0x21, 0x8b, 0x7c, 0xd1, 0x82, 0x19, - 0xaf, 0xee, 0x07, 0x21, 0x5d, 0xf1, 0x6a, 0x35, 0x1a, 0x52, 0xdf, 0xa5, 0x89, 0x1f, 0x72, 0x7b, - 0x38, 0x0d, 0x92, 0xa4, 0xdf, 0x6a, 0x96, 0xbd, 0x5e, 0xe2, 0x3d, 0x28, 0xec, 0x55, 0x86, 0x54, - 0x61, 0xc4, 0xf3, 0x6b, 0x81, 0x34, 0x6c, 0x95, 0xe1, 0x94, 0x5a, 0xf5, 0x6b, 0x81, 0x5e, 0x2b, - 0xec, 0x17, 0x72, 0xee, 0x64, 0x0d, 0xce, 0x86, 0x32, 0x12, 0xbd, 0xea, 0x45, 0xcc, 0x9f, 0x5f, - 0xf3, 0x5a, 0x5e, 0xcc, 0x8d, 0x52, 0xb1, 0x32, 0x7b, 0xef, 0x70, 0xfe, 0x2c, 0xf6, 0xc1, 0x63, - 0xdf, 0xaf, 0xc8, 0x16, 0x4c, 0xc7, 0xa1, 0xe3, 0xee, 0x79, 0x7e, 0x7d, 0x9d, 0xc6, 0x8d, 0xa0, - 0xca, 0xcd, 0x51, 0xb9, 0xf2, 0xac, 0x8a, 0x85, 0x53, 0xd8, 0xfb, 0x3d, 0x10, 0xcc, 0x7c, 0x6f, - 0xbf, 0x5a, 0x4e, 0x07, 0xf0, 0x22, 0x3d, 0xf5, 0x41, 0x28, 0x87, 0xea, 0x40, 0x40, 0xf8, 0x5a, - 0x6b, 0xf9, 0x8c, 0x9a, 0xcc, 0x8b, 0xa9, 0xcc, 0x8a, 0x4e, 0xfd, 0x6b, 0x89, 0xcc, 0xe7, 0x62, - 0x73, 0x49, 0x2e, 0xb4, 0x1c, 0x66, 0xac, 0x94, 0xaa, 0x53, 0x80, 0x5d, 0xdf, 0x45, 0x2e, 0x83, - 0x84, 0x30, 0xd6, 0xa0, 0x4e, 0x33, 0x6e, 0xc8, 0x0c, 0xd5, 0xb5, 0x61, 0xbd, 0x64, 0xc6, 0x2b, - 0x9b, 0xfd, 0x13, 0x50, 0x94, 0x92, 0xc8, 0x01, 0x8c, 0x37, 0xc4, 0xb0, 0x4a, 0x6f, 0x61, 0x7d, - 0xd8, 0xce, 0x4d, 0xcd, 0x15, 0x6d, 0x11, 0x24, 0x00, 0x13, 0x71, 0xe4, 0x17, 0x2c, 0x00, 0x37, - 0x49, 0xfb, 0x25, 0x0b, 0x12, 0x73, 0xb3, 0x64, 0x2a, 0xa3, 0xa8, 0x9d, 0x2d, 0x05, 0x8a, 0xd0, - 0x90, 0x4c, 0x5e, 0x86, 0xc9, 0x90, 0xba, 0x81, 0xef, 0x7a, 0x4d, 0x5a, 0x5d, 0x8a, 0x79, 0x60, - 0x70, 0xb2, 0xf4, 0xe0, 0x69, 0xe6, 0xf1, 0xa0, 0xc1, 0x03, 0x53, 0x1c, 0xc9, 0xab, 0x16, 0x4c, - 0xab, 0xd4, 0x27, 0x1b, 0x10, 0x2a, 0x53, 0x40, 0x6b, 0x39, 0x25, 0x5a, 0x39, 0xcf, 0x0a, 0x61, - 0xcb, 0x2e, 0x0d, 0xc3, 0x8c, 0x5c, 0xf2, 0x6e, 0x80, 0x60, 0x97, 0xa7, 0x19, 0x59, 0x53, 0x4b, - 0x27, 0x6e, 0xea, 0xb4, 0xc8, 0x98, 0x27, 0x1c, 0xd0, 0xe0, 0x46, 0xae, 0x03, 0x88, 0x65, 0xb3, - 0xd3, 0x6d, 0x53, 0x9e, 0xe6, 0x29, 0x57, 0xde, 0x9c, 0x74, 0xfe, 0xb6, 0xc2, 0xdc, 0x3f, 0x9c, - 0xef, 0x8d, 0x9f, 0x79, 0x7e, 0xd7, 0xf8, 0x9c, 0x7c, 0x00, 0xc6, 0xa3, 0x4e, 0xab, 0xe5, 0xa8, - 0x74, 0xcd, 0x56, 0x7e, 0x7b, 0xac, 0xe0, 0xab, 0xe7, 0xa6, 0x04, 0x60, 0x22, 0xd1, 0xf6, 0x81, - 0xf4, 0xd2, 0x93, 0xe7, 0x61, 0x92, 0x1e, 0xc4, 0x34, 0xf4, 0x9d, 0xe6, 0x4d, 0x5c, 0x4b, 0x02, - 0x7c, 0x3e, 0xf8, 0x97, 0x0c, 0x38, 0xa6, 0xa8, 0x88, 0xad, 0x7c, 0xf9, 0x02, 0xa7, 0x07, 0xed, - 0xcb, 0x27, 0x9e, 0xbb, 0xfd, 0xdf, 0x85, 0x94, 0x8f, 0xb1, 0x13, 0x52, 0x4a, 0x02, 0x18, 0xf5, - 0x83, 0xaa, 0x32, 0x7a, 0xd7, 0xf2, 0x31, 0x7a, 0x1b, 0x41, 0xd5, 0x38, 0xa9, 0x66, 0xbf, 0x22, - 0x14, 0x72, 0xf8, 0x51, 0x5e, 0x72, 0xe6, 0xc9, 0x11, 0xd2, 0xad, 0xca, 0x53, 0xb2, 0x3a, 0xca, - 0xdb, 0x34, 0x05, 0x61, 0x5a, 0x2e, 0xd9, 0x83, 0xd1, 0x46, 0x10, 0xc5, 0x22, 0xfa, 0x19, 0xda, - 0xaf, 0xbb, 0x1a, 0x44, 0x31, 0xdf, 0x14, 0x55, 0xb3, 0x19, 0x24, 0x42, 0x21, 0xc3, 0xfe, 0xae, - 0x95, 0x4a, 0xe7, 0xdc, 0x76, 0x62, 0xb7, 0x71, 0x69, 0x9f, 0x45, 0xa4, 0xd7, 0x53, 0x47, 0x11, - 0x3f, 0x66, 0x1e, 0x45, 0xdc, 0x3f, 0x9c, 0x7f, 0xd3, 0xa0, 0xd2, 0xa1, 0xbb, 0x8c, 0xc3, 0x02, - 0x67, 0x61, 0x9c, 0x5a, 0x7c, 0xc4, 0x82, 0x09, 0x43, 0x3d, 0xb9, 0xa1, 0xe4, 0x98, 0x15, 0x57, - 0xee, 0x9a, 0x01, 0x44, 0x53, 0xa4, 0xfd, 0x59, 0x0b, 0xc6, 0x2b, 0x8e, 0xbb, 0x17, 0xd4, 0x6a, - 0xe4, 0x2d, 0x50, 0xaa, 0x76, 0xe4, 0xa1, 0x8f, 0x68, 0x9f, 0xca, 0xe5, 0xaf, 0x48, 0x38, 0x2a, - 0x0a, 0x36, 0x87, 0x6b, 0x8e, 0x1b, 0x07, 0x21, 0x57, 0xbb, 0x28, 0xe6, 0xf0, 0x65, 0x0e, 0x41, - 0x89, 0x61, 0x61, 0x7f, 0xcb, 0x39, 0x48, 0x3e, 0xce, 0xe6, 0x92, 0xd6, 0x35, 0x0a, 0x4d, 0x3a, - 0xfb, 0x4f, 0xca, 0x30, 0x2e, 0x4f, 0x57, 0x8f, 0x7d, 0x3e, 0x92, 0xc4, 0x05, 0x85, 0x81, 0x71, - 0x41, 0x04, 0x63, 0x2e, 0x2f, 0xcc, 0x92, 0x5b, 0xe9, 0x90, 0x59, 0x35, 0xa9, 0xa0, 0xa8, 0xf5, - 0xd2, 0x6a, 0x89, 0xdf, 0x28, 0x45, 0x91, 0xcf, 0x58, 0x70, 0xca, 0x0d, 0x7c, 0x9f, 0xba, 0xda, - 0xce, 0x8f, 0xe4, 0x71, 0x7e, 0xb8, 0x9c, 0x66, 0xaa, 0x8f, 0x71, 0x33, 0x08, 0xcc, 0x8a, 0x27, - 0x2f, 0xc2, 0x94, 0xe8, 0xb3, 0x5b, 0xa9, 0x88, 0x5b, 0x9f, 0xa8, 0x9b, 0x48, 0x4c, 0xd3, 0x92, - 0x05, 0x91, 0xb9, 0xe0, 0x47, 0x4c, 0x22, 0xea, 0x96, 0xe9, 0x4c, 0x75, 0x06, 0x15, 0xa1, 0x41, - 0x41, 0x42, 0x20, 0x21, 0xad, 0x85, 0x34, 0x6a, 0x20, 0x7d, 0xa5, 0x43, 0xa3, 0x98, 0xef, 0x31, - 0xe3, 0x0f, 0x77, 0xda, 0x86, 0x3d, 0x9c, 0xb0, 0x0f, 0x77, 0xb2, 0x27, 0x5d, 0xe7, 0x52, 0x1e, - 0xcb, 0x49, 0x0e, 0xf3, 0x40, 0x0f, 0x7a, 0x1e, 0x46, 0xa3, 0x86, 0x13, 0x56, 0xf9, 0xde, 0x56, - 0xac, 0x94, 0x99, 0x2d, 0xd9, 0x66, 0x00, 0x14, 0x70, 0xb2, 0x02, 0xa7, 0x33, 0xf5, 0x00, 0x11, - 0xdf, 0xbd, 0x4a, 0x95, 0x59, 0xc9, 0xee, 0x74, 0xa6, 0x92, 0x20, 0xc2, 0x9e, 0x2f, 0xcc, 0xb0, - 0x6a, 0xe2, 0x88, 0xb0, 0xaa, 0x0b, 0x63, 0x4d, 0x91, 0x5a, 0x98, 0xe4, 0xa6, 0xf2, 0x46, 0x2e, - 0x1d, 0xb0, 0x60, 0xa6, 0x74, 0xd4, 0x6c, 0x97, 0x29, 0x0a, 0x29, 0x90, 0x7c, 0x8a, 0x19, 0x34, - 0x23, 0x1b, 0x31, 0xc5, 0x15, 0xb8, 0x95, 0x8f, 0x02, 0x3d, 0xc9, 0x17, 0x6d, 0xdd, 0x8c, 0xd4, - 0x86, 0x29, 0x7f, 0xee, 0xc7, 0x61, 0xe2, 0x61, 0x33, 0x19, 0x2f, 0xc1, 0xe9, 0xa1, 0x72, 0x18, - 0xdf, 0xb3, 0x20, 0x19, 0xd7, 0x65, 0xc7, 0x6d, 0x50, 0x36, 0x65, 0xc8, 0x4b, 0x30, 0xad, 0xc2, - 0x88, 0xe5, 0xa0, 0x23, 0x33, 0xa1, 0x45, 0x9d, 0xaa, 0xc6, 0x14, 0x16, 0x33, 0xd4, 0x64, 0x11, - 0xca, 0xac, 0x9f, 0xc4, 0xa7, 0xc2, 0xec, 0xaa, 0x50, 0x65, 0x69, 0x6b, 0x55, 0x7e, 0xa5, 0x69, - 0x48, 0x00, 0x33, 0x4d, 0x27, 0x8a, 0xb9, 0x06, 0x2c, 0xaa, 0x78, 0xc8, 0xb3, 0x6e, 0x5e, 0x0e, - 0xb5, 0x96, 0x65, 0x84, 0xbd, 0xbc, 0xed, 0xaf, 0x8f, 0xc0, 0x54, 0xca, 0x32, 0xb2, 0x5d, 0xa5, - 0x13, 0x31, 0xd7, 0x47, 0x25, 0x6d, 0xd4, 0xae, 0x72, 0x53, 0xc2, 0x51, 0x51, 0x30, 0xea, 0xb6, - 0x13, 0x45, 0x77, 0x83, 0xb0, 0x2a, 0x4d, 0xb9, 0xa2, 0xde, 0x92, 0x70, 0x54, 0x14, 0x6c, 0x7f, - 0xd9, 0xa5, 0x4e, 0x48, 0x43, 0x5e, 0x1e, 0x92, 0xdd, 0x5f, 0x2a, 0x1a, 0x85, 0x26, 0x1d, 0x37, - 0xca, 0x71, 0x33, 0x5a, 0x6e, 0x7a, 0xd4, 0x8f, 0x85, 0x9a, 0xf9, 0x18, 0xe5, 0x9d, 0xb5, 0x6d, - 0x93, 0xa9, 0x36, 0xca, 0x19, 0x04, 0x66, 0xc5, 0x93, 0x8f, 0x59, 0x30, 0xe5, 0xdc, 0x8d, 0x74, - 0xf5, 0x30, 0xb7, 0xca, 0x43, 0x6f, 0x52, 0xa9, 0x82, 0xe4, 0xca, 0x0c, 0x33, 0xef, 0x29, 0x10, - 0xa6, 0x85, 0x92, 0xcf, 0x5b, 0x40, 0xe8, 0x01, 0x75, 0xb7, 0xc2, 0x60, 0xdf, 0xab, 0x26, 0x63, - 0x28, 0xc3, 0x9f, 0x21, 0xbd, 0xed, 0x4b, 0x3d, 0x7c, 0x85, 0x55, 0xef, 0x85, 0x63, 0x1f, 0x1d, - 0xec, 0xbf, 0x29, 0xc2, 0x84, 0x61, 0x8c, 0xfb, 0xee, 0xac, 0xd6, 0x0f, 0xd8, 0xce, 0x5a, 0x38, - 0xc1, 0xce, 0xfa, 0x61, 0x28, 0xbb, 0x89, 0xa1, 0xc8, 0xa7, 0xda, 0x39, 0x6b, 0x7e, 0xb4, 0xad, - 0x50, 0x20, 0xd4, 0x32, 0xc9, 0x15, 0x98, 0x31, 0xd8, 0x48, 0x23, 0x33, 0xc2, 0x8d, 0x8c, 0x4a, - 0x5d, 0x2d, 0x65, 0x09, 0xb0, 0xf7, 0x1b, 0xf2, 0x1c, 0xf3, 0x6a, 0x3d, 0xd9, 0x2e, 0x11, 0xc5, - 0xcb, 0x4a, 0xe2, 0xa5, 0xad, 0xd5, 0x04, 0x8c, 0x26, 0x8d, 0xfd, 0x75, 0x4b, 0x0d, 0xee, 0x63, - 0x28, 0x43, 0xb9, 0x93, 0x2e, 0x43, 0xb9, 0x94, 0x4b, 0x37, 0x0f, 0x28, 0x41, 0xd9, 0x80, 0xf1, - 0xe5, 0xa0, 0xd5, 0x72, 0xfc, 0x2a, 0x79, 0x03, 0x8c, 0xbb, 0xe2, 0x4f, 0x19, 0x26, 0xf2, 0xba, - 0x04, 0x89, 0xc5, 0x04, 0x47, 0x9e, 0x86, 0x11, 0x27, 0xac, 0x27, 0xa1, 0x21, 0x3f, 0x66, 0x5b, - 0x0a, 0xeb, 0x11, 0x72, 0xa8, 0xfd, 0xb9, 0x02, 0xc0, 0x72, 0xd0, 0x6a, 0x3b, 0x21, 0xad, 0xee, - 0x04, 0xff, 0x9b, 0x75, 0x16, 0x11, 0xc3, 0x27, 0x2d, 0x20, 0xac, 0x57, 0x02, 0x9f, 0xfa, 0xfa, - 0x68, 0x8f, 0xed, 0x97, 0x6e, 0x02, 0x95, 0x9b, 0x8f, 0x5e, 0x03, 0x09, 0x02, 0x35, 0xcd, 0x31, - 0xa2, 0x88, 0x67, 0x92, 0x1d, 0xbf, 0x98, 0x2e, 0x99, 0xe0, 0xc7, 0xdc, 0xd2, 0x01, 0xb0, 0x7f, - 0xa9, 0x00, 0xe7, 0x84, 0xd9, 0x5a, 0x77, 0x7c, 0xa7, 0x4e, 0x5b, 0x4c, 0xab, 0xe3, 0x9e, 0x5f, - 0xb8, 0xcc, 0x7d, 0xf5, 0x92, 0x0a, 0x89, 0x61, 0x27, 0xa7, 0x98, 0x54, 0x62, 0x1a, 0xad, 0xfa, - 0x5e, 0x8c, 0x9c, 0x39, 0x89, 0xa0, 0x94, 0xdc, 0x5f, 0x91, 0xc6, 0x26, 0x27, 0x41, 0x6a, 0xdd, - 0x5d, 0x91, 0xec, 0x51, 0x09, 0xb2, 0xbf, 0x6c, 0x41, 0xd6, 0x88, 0xf2, 0xf8, 0x4e, 0xd4, 0x38, - 0x66, 0xe3, 0xbb, 0x74, 0x49, 0xe2, 0x09, 0x2a, 0xfc, 0xde, 0x0b, 0x13, 0x4e, 0x1c, 0xd3, 0x56, - 0x5b, 0x04, 0x1b, 0xc5, 0x87, 0x4b, 0x68, 0xad, 0x07, 0x55, 0xaf, 0xe6, 0xf1, 0x20, 0xc3, 0x64, - 0x67, 0xdf, 0x80, 0x52, 0x72, 0x2a, 0x74, 0x8c, 0xc1, 0x7c, 0x26, 0xe5, 0x20, 0x0e, 0x98, 0x2e, - 0xf7, 0x0b, 0xd0, 0x67, 0x17, 0x64, 0x4d, 0xd6, 0xf6, 0x22, 0xd5, 0xe4, 0x93, 0xd9, 0x0c, 0x72, - 0x20, 0x4e, 0xc4, 0x44, 0xe6, 0xe4, 0x5d, 0x79, 0xef, 0xe2, 0xfa, 0x90, 0x6c, 0x42, 0xea, 0xa7, - 0x0e, 0xca, 0xc8, 0x45, 0x00, 0x6d, 0xe6, 0x65, 0x65, 0x88, 0xca, 0xbd, 0xea, 0xdd, 0x00, 0x0d, - 0x2a, 0xe6, 0xd4, 0x79, 0x7e, 0x14, 0x3b, 0xcd, 0xe6, 0x55, 0xcf, 0x8f, 0x65, 0x74, 0xaa, 0x4c, - 0xc0, 0xaa, 0x46, 0xa1, 0x49, 0x37, 0xf7, 0x36, 0x63, 0x5c, 0x4e, 0xe2, 0xa8, 0x7f, 0xb2, 0x00, - 0xd3, 0x57, 0xfc, 0xce, 0xd6, 0x95, 0xad, 0xce, 0x6e, 0xd3, 0x73, 0xaf, 0xd3, 0x2e, 0x1b, 0xb4, - 0x3d, 0xda, 0x5d, 0x5d, 0x91, 0xdd, 0xae, 0x06, 0xed, 0x3a, 0x03, 0xa2, 0xc0, 0x31, 0x35, 0x6b, - 0x9e, 0x5f, 0xa7, 0x61, 0x3b, 0xf4, 0xa4, 0x37, 0x6e, 0xa8, 0x79, 0x59, 0xa3, 0xd0, 0xa4, 0x63, - 0xbc, 0x83, 0xbb, 0x3e, 0x0d, 0xb3, 0xf6, 0x63, 0x93, 0x01, 0x51, 0xe0, 0x18, 0x51, 0x1c, 0x76, - 0xa2, 0x58, 0xf6, 0x98, 0x22, 0xda, 0x61, 0x40, 0x14, 0x38, 0x36, 0x3d, 0xa2, 0xce, 0x2e, 0xcf, - 0xab, 0x66, 0xce, 0xcc, 0xb7, 0x05, 0x18, 0x13, 0x3c, 0x23, 0xdd, 0xa3, 0xdd, 0x15, 0xb6, 0x9b, - 0x66, 0x4a, 0x5c, 0xae, 0x0b, 0x30, 0x26, 0x78, 0xfb, 0x1f, 0x2c, 0x20, 0xe9, 0xee, 0x78, 0x0c, - 0x1b, 0xf2, 0x2b, 0xe9, 0x0d, 0x79, 0xc8, 0x14, 0x78, 0x5a, 0xfd, 0x01, 0xfb, 0xf2, 0xaf, 0x5b, - 0x30, 0x69, 0x9e, 0x86, 0x90, 0x7a, 0xc6, 0x10, 0x6d, 0xa6, 0x0d, 0xd1, 0xfd, 0xc3, 0xf9, 0x9f, - 0xe8, 0x77, 0xbd, 0xb2, 0xee, 0xc5, 0x41, 0x3b, 0x7a, 0x2b, 0xf5, 0xeb, 0x9e, 0x4f, 0x79, 0xae, - 0x4f, 0x9c, 0xa2, 0xa4, 0x8e, 0x5a, 0x96, 0x83, 0x2a, 0x7d, 0x08, 0x4b, 0x66, 0xdf, 0x86, 0x99, - 0x9e, 0xba, 0xa6, 0x63, 0x18, 0x9d, 0x23, 0xab, 0x56, 0xed, 0x4f, 0x59, 0x30, 0x95, 0x2a, 0x0b, - 0xcb, 0xc9, 0x94, 0xf1, 0x55, 0x11, 0xf0, 0x83, 0xb4, 0xd0, 0xf3, 0x45, 0xa6, 0xad, 0x64, 0xac, - 0x0a, 0x8d, 0x42, 0x93, 0xce, 0xfe, 0x6c, 0x01, 0x4a, 0x49, 0x4e, 0xf6, 0x18, 0xaa, 0x7c, 0xc2, - 0x82, 0x29, 0x15, 0x1a, 0x73, 0x87, 0x39, 0x97, 0xd2, 0x20, 0xa6, 0x81, 0x3a, 0xbf, 0x65, 0x0e, - 0xb3, 0xf2, 0xdc, 0xd1, 0x14, 0x86, 0x69, 0xd9, 0xe4, 0x16, 0x40, 0xd4, 0x8d, 0x62, 0xda, 0x32, - 0x5c, 0x77, 0xdb, 0x58, 0x1d, 0x0b, 0x6e, 0x10, 0x52, 0xb6, 0x16, 0x36, 0x82, 0x2a, 0xdd, 0x56, - 0x94, 0xda, 0x10, 0x6a, 0x18, 0x1a, 0x9c, 0xec, 0xdf, 0x29, 0xc0, 0xe9, 0xac, 0x4a, 0xe4, 0x3d, - 0x30, 0x99, 0x48, 0x37, 0x6e, 0x95, 0x26, 0x89, 0xe8, 0x49, 0x34, 0x70, 0xf7, 0x0f, 0xe7, 0xe7, - 0x7b, 0xaf, 0xd5, 0x2e, 0x98, 0x24, 0x98, 0x62, 0x26, 0xf2, 0x13, 0x32, 0x91, 0x56, 0xe9, 0x2e, - 0xb5, 0xdb, 0x32, 0xc9, 0x60, 0xe4, 0x27, 0x4c, 0x2c, 0x66, 0xa8, 0xc9, 0x16, 0x9c, 0x35, 0x20, - 0x1b, 0xd4, 0xab, 0x37, 0x76, 0x83, 0x50, 0x5c, 0x5f, 0x28, 0x56, 0x9e, 0x96, 0x5c, 0xce, 0x62, - 0x1f, 0x1a, 0xec, 0xfb, 0x25, 0x79, 0x0b, 0x94, 0x5c, 0xa7, 0xed, 0xb8, 0x5e, 0xdc, 0x95, 0xb1, - 0x88, 0xb2, 0x23, 0xcb, 0x12, 0x8e, 0x8a, 0xc2, 0x5e, 0x87, 0x91, 0x63, 0xce, 0xa0, 0x63, 0xed, - 0xcb, 0x37, 0xa0, 0xc4, 0xd8, 0x31, 0xbb, 0x91, 0x17, 0xcb, 0x00, 0x4a, 0xc9, 0x6d, 0x16, 0x62, - 0x43, 0xd1, 0x73, 0x92, 0x14, 0x90, 0x6a, 0xd6, 0x6a, 0x14, 0x75, 0xb8, 0xd7, 0xc1, 0x90, 0xe4, - 0x19, 0x28, 0xd2, 0x83, 0x76, 0x36, 0xd7, 0x73, 0xe9, 0xa0, 0xed, 0x85, 0x34, 0x62, 0x44, 0xf4, - 0xa0, 0x4d, 0xe6, 0xa0, 0xe0, 0x55, 0xe5, 0x86, 0x02, 0x92, 0xa6, 0xb0, 0xba, 0x82, 0x05, 0xaf, - 0x6a, 0x1f, 0x40, 0x59, 0x5d, 0x9f, 0x21, 0x7b, 0x89, 0x9d, 0xb5, 0xf2, 0x38, 0x44, 0x49, 0xf8, - 0x0e, 0xb0, 0xb0, 0x1d, 0x00, 0x5d, 0x50, 0x98, 0x97, 0x7d, 0xb9, 0x00, 0x23, 0x6e, 0x20, 0x6b, - 0x77, 0x4b, 0x9a, 0x0d, 0x37, 0xb0, 0x1c, 0x63, 0xdf, 0x86, 0xe9, 0xeb, 0x7e, 0x70, 0xd7, 0x67, - 0x1b, 0xdf, 0x65, 0x8f, 0x36, 0xab, 0x8c, 0x71, 0x8d, 0xfd, 0x91, 0xdd, 0xce, 0x39, 0x16, 0x05, - 0x4e, 0xdd, 0x31, 0x29, 0x0c, 0xba, 0x63, 0x62, 0xff, 0xa2, 0x05, 0xa7, 0xb3, 0xc5, 0x83, 0xdf, - 0xb7, 0x08, 0xe3, 0x23, 0x4c, 0x99, 0xa4, 0x3a, 0x6d, 0xb3, 0x2d, 0x4e, 0xad, 0x5f, 0x80, 0xc9, - 0xdd, 0x8e, 0xd7, 0xac, 0xca, 0xdf, 0x52, 0x1f, 0x55, 0x7f, 0x57, 0x31, 0x70, 0x98, 0xa2, 0x64, - 0x7e, 0xda, 0xae, 0xe7, 0x3b, 0x61, 0x77, 0x4b, 0xef, 0x1b, 0xca, 0x3c, 0x55, 0x14, 0x06, 0x0d, - 0x2a, 0xfb, 0xaf, 0x8a, 0xa0, 0xef, 0xf1, 0x10, 0x4f, 0x16, 0x45, 0x58, 0x79, 0xa4, 0xad, 0xb6, - 0xbb, 0xbe, 0xab, 0x6f, 0x0c, 0x95, 0x32, 0x35, 0x11, 0x1f, 0xb7, 0x98, 0x87, 0xe8, 0xc5, 0x9e, - 0xc3, 0x8d, 0x85, 0x0c, 0x94, 0xb6, 0x72, 0x3a, 0x37, 0x5f, 0x15, 0x9c, 0x83, 0xd0, 0xf4, 0x39, - 0x95, 0x30, 0x34, 0x25, 0x93, 0x97, 0xe5, 0x49, 0x43, 0x31, 0xb7, 0x22, 0x9d, 0x52, 0xe6, 0x78, - 0xa1, 0x0d, 0xa3, 0x21, 0x8d, 0xc3, 0xa4, 0x3c, 0xea, 0xfa, 0xb0, 0xe7, 0xae, 0x71, 0xd8, 0xdd, - 0x8e, 0x59, 0x30, 0x56, 0x37, 0x1c, 0x23, 0x0e, 0x46, 0x21, 0xc8, 0x8e, 0x80, 0xf4, 0xf6, 0xc5, - 0x09, 0xb3, 0xb8, 0x8b, 0x50, 0x76, 0x3a, 0x71, 0xd0, 0x62, 0xdd, 0xc4, 0x87, 0xa7, 0x64, 0xe4, - 0xa9, 0x13, 0x04, 0x6a, 0x1a, 0xfb, 0xb5, 0x51, 0xc8, 0x54, 0x29, 0x90, 0x03, 0xf3, 0x0e, 0x9a, - 0x95, 0xef, 0x1d, 0x34, 0xa5, 0x4c, 0xbf, 0x7b, 0x68, 0xa4, 0x0e, 0xa3, 0xed, 0x86, 0x13, 0x25, - 0x6b, 0xf4, 0x46, 0xd2, 0x4d, 0x5b, 0x0c, 0x78, 0xff, 0x70, 0xfe, 0x27, 0x8f, 0xe7, 0x07, 0xb2, - 0xb9, 0xba, 0x28, 0x8a, 0x40, 0xb5, 0x68, 0xce, 0x03, 0x05, 0x7f, 0xd3, 0x13, 0x2c, 0x1e, 0x11, - 0xd3, 0x7e, 0xd4, 0x12, 0xc5, 0x72, 0x48, 0xa3, 0x4e, 0x33, 0x96, 0xb3, 0xe1, 0x46, 0x8e, 0xab, - 0x4c, 0x30, 0xd6, 0x55, 0x73, 0xe2, 0x37, 0x1a, 0x42, 0xc9, 0x7b, 0xa0, 0x1c, 0xc5, 0x4e, 0x18, - 0x3f, 0x64, 0x45, 0x8c, 0xea, 0xf4, 0xed, 0x84, 0x09, 0x6a, 0x7e, 0xe4, 0xdd, 0x00, 0x35, 0xcf, - 0xf7, 0xa2, 0xc6, 0x43, 0x1e, 0x10, 0x72, 0xc5, 0x2f, 0x2b, 0x0e, 0x68, 0x70, 0x63, 0xd6, 0x8d, - 0xcf, 0x6d, 0x91, 0xd2, 0x2c, 0xf1, 0xbd, 0x54, 0x59, 0x37, 0x54, 0x18, 0x34, 0xa8, 0xec, 0x0f, - 0xc1, 0x99, 0xec, 0xfd, 0x6f, 0x19, 0x1a, 0xd6, 0xc3, 0xa0, 0xd3, 0xce, 0xee, 0x25, 0xfc, 0x7e, - 0x30, 0x0a, 0x1c, 0xb3, 0xf1, 0x7b, 0x9e, 0x5f, 0xcd, 0xda, 0xf8, 0xeb, 0x9e, 0x5f, 0x45, 0x8e, - 0x39, 0xc6, 0xe5, 0xbc, 0x3f, 0xb2, 0xe0, 0xc2, 0x51, 0xd7, 0xd4, 0x59, 0xd8, 0x7f, 0xd7, 0x09, - 0x7d, 0x79, 0xf1, 0x86, 0xdb, 0x8e, 0xdb, 0x4e, 0xe8, 0x23, 0x87, 0x92, 0x2e, 0x8c, 0x89, 0xba, - 0x42, 0xe9, 0x1d, 0xdf, 0xc8, 0xf7, 0xd2, 0x3c, 0x8b, 0xad, 0x54, 0xb6, 0x46, 0xd4, 0x34, 0xa2, - 0x14, 0x68, 0xbf, 0x66, 0x01, 0xd9, 0xdc, 0xa7, 0x61, 0xe8, 0x55, 0x8d, 0x4a, 0x48, 0xf2, 0x3c, - 0x4c, 0xde, 0xd9, 0xde, 0xdc, 0xd8, 0x0a, 0x3c, 0x9f, 0x17, 0xf4, 0x1b, 0xd5, 0x32, 0xd7, 0x0c, - 0x38, 0xa6, 0xa8, 0xc8, 0x32, 0xcc, 0xdc, 0x79, 0x85, 0x6d, 0x39, 0x97, 0x0e, 0xda, 0x21, 0x8d, - 0x22, 0xf5, 0xd4, 0x44, 0x59, 0x1c, 0x4c, 0x5d, 0xbb, 0x91, 0x41, 0x62, 0x2f, 0xbd, 0xfd, 0xa5, - 0x02, 0x4c, 0x18, 0x2f, 0x33, 0x1c, 0xc3, 0x1f, 0xc9, 0x3c, 0x26, 0x51, 0x38, 0xe6, 0x63, 0x12, - 0xcf, 0x42, 0xa9, 0x1d, 0x34, 0x3d, 0xd7, 0x53, 0x95, 0xfa, 0x93, 0xfc, 0xf4, 0x4a, 0xc2, 0x50, - 0x61, 0xc9, 0x5d, 0x28, 0xab, 0x2b, 0xd6, 0xb2, 0xd2, 0x2e, 0x2f, 0x8f, 0x4c, 0xad, 0x35, 0x7d, - 0x75, 0x5a, 0xcb, 0x22, 0x36, 0x8c, 0xf1, 0x89, 0x9a, 0xe4, 0xe6, 0x79, 0xe9, 0x06, 0x9f, 0xc1, - 0x11, 0x4a, 0x8c, 0xfd, 0x2f, 0xa3, 0x50, 0x46, 0xda, 0x0e, 0x96, 0x43, 0x5a, 0x8d, 0xc8, 0xeb, - 0xa1, 0xd8, 0x09, 0x9b, 0xb2, 0xb3, 0x54, 0x9a, 0xe7, 0x26, 0xae, 0x21, 0x83, 0xa7, 0x76, 0x87, - 0xc2, 0x89, 0xce, 0xf8, 0x8a, 0x47, 0x9e, 0xf1, 0xbd, 0x08, 0x53, 0x51, 0xd4, 0xd8, 0x0a, 0xbd, - 0x7d, 0x27, 0x66, 0x73, 0x4e, 0xe6, 0x44, 0xf4, 0xa1, 0xca, 0xf6, 0x55, 0x8d, 0xc4, 0x34, 0x2d, - 0xb9, 0x02, 0x33, 0xfa, 0xa4, 0x8d, 0x86, 0x31, 0x4f, 0x81, 0x88, 0x6c, 0x89, 0x3a, 0xd3, 0xd0, - 0x67, 0x73, 0x92, 0x00, 0x7b, 0xbf, 0x21, 0x2b, 0x70, 0x3a, 0x05, 0x64, 0x8a, 0x88, 0x54, 0x8a, - 0x3a, 0xc5, 0x4f, 0xf1, 0x61, 0xba, 0xf4, 0x7c, 0x41, 0xd6, 0xe1, 0x8c, 0x18, 0x5f, 0x7e, 0x35, - 0x5f, 0xb5, 0x68, 0x9c, 0x33, 0xfa, 0x3f, 0x92, 0xd1, 0x99, 0x2b, 0xbd, 0x24, 0xd8, 0xef, 0x3b, - 0x36, 0x43, 0x15, 0x78, 0x75, 0x45, 0x1a, 0x36, 0x35, 0x43, 0x15, 0x9b, 0xd5, 0x2a, 0x9a, 0x74, - 0xe4, 0x5d, 0xf0, 0x94, 0xfe, 0x29, 0x32, 0x68, 0x62, 0xb7, 0x5f, 0x91, 0x45, 0x0c, 0xf3, 0x92, - 0xc5, 0x53, 0x57, 0xfa, 0x92, 0x55, 0x71, 0xd0, 0xf7, 0x64, 0x17, 0xe6, 0x14, 0xea, 0x12, 0x5b, - 0xbd, 0xed, 0xd0, 0x8b, 0x68, 0xc5, 0x89, 0xe8, 0xcd, 0xb0, 0xc9, 0xcb, 0x1e, 0xca, 0xfa, 0x79, - 0x89, 0x2b, 0x5e, 0x7c, 0xb5, 0x1f, 0x25, 0xae, 0xe1, 0x03, 0xb8, 0x30, 0xe7, 0x82, 0xfa, 0xce, - 0x6e, 0x93, 0x6e, 0x2e, 0xaf, 0xf2, 0x62, 0x08, 0xc3, 0xb9, 0xb8, 0x94, 0x20, 0x50, 0xd3, 0x28, - 0xd7, 0x7e, 0x72, 0xa0, 0x6b, 0xff, 0x4d, 0x0b, 0xa6, 0xd4, 0x64, 0x7f, 0x0c, 0xf9, 0xae, 0x66, - 0x3a, 0xdf, 0x75, 0x65, 0x58, 0xaf, 0x4e, 0x6a, 0x3e, 0x20, 0x10, 0xfb, 0x6e, 0x19, 0x80, 0x3f, - 0xd8, 0xe3, 0xf1, 0x22, 0xdb, 0x0b, 0x30, 0x12, 0xd2, 0x76, 0x90, 0xb5, 0x7c, 0x8c, 0x02, 0x39, - 0xe6, 0x07, 0x77, 0x39, 0xf7, 0x3b, 0xf3, 0x1d, 0xfd, 0xfe, 0x9e, 0xf9, 0x6e, 0xc3, 0x93, 0x9e, - 0x1f, 0x51, 0xb7, 0x13, 0xca, 0x8d, 0xee, 0x6a, 0x10, 0x29, 0xeb, 0x50, 0xaa, 0xbc, 0x5e, 0x32, - 0x7a, 0x72, 0xb5, 0x1f, 0x11, 0xf6, 0xff, 0x96, 0x75, 0x69, 0x82, 0x90, 0xf7, 0x83, 0x74, 0x7a, - 0x40, 0xc2, 0x51, 0x51, 0xe8, 0x05, 0xb1, 0x56, 0x4b, 0x2e, 0x00, 0x65, 0x16, 0xc4, 0xda, 0xe5, - 0x6d, 0xd4, 0x34, 0xfd, 0xad, 0x62, 0x39, 0x27, 0xab, 0x08, 0x27, 0xb6, 0x8a, 0xc9, 0xfa, 0x9c, - 0x18, 0xf8, 0xbc, 0x43, 0xb2, 0x59, 0x4f, 0x0e, 0xdc, 0xac, 0x5f, 0x82, 0x69, 0xcf, 0x6f, 0xd0, - 0xd0, 0x8b, 0x69, 0x95, 0xaf, 0x85, 0xd9, 0x29, 0xde, 0x11, 0x2a, 0x73, 0xb5, 0x9a, 0xc2, 0x62, - 0x86, 0x3a, 0x6d, 0x54, 0xa6, 0x8f, 0x61, 0x54, 0x06, 0x98, 0xf2, 0x53, 0xf9, 0x98, 0xf2, 0xd3, - 0xc3, 0x9b, 0xf2, 0x99, 0x47, 0x6a, 0xca, 0x49, 0x2e, 0xa6, 0xfc, 0x19, 0x18, 0x6d, 0x87, 0xc1, - 0x41, 0x77, 0xf6, 0x4c, 0xda, 0x9b, 0xde, 0x62, 0x40, 0x14, 0x38, 0xb3, 0xf4, 0xed, 0xec, 0x83, - 0x4b, 0xdf, 0xec, 0x57, 0x0b, 0xf0, 0xa4, 0xb6, 0x74, 0x6c, 0x7e, 0x79, 0x35, 0xb6, 0xd6, 0xf9, - 0x2d, 0x4d, 0x51, 0x6e, 0x61, 0x24, 0x4d, 0x75, 0xfe, 0x55, 0x61, 0xd0, 0xa0, 0xe2, 0xb9, 0x47, - 0x1a, 0xf2, 0x82, 0xdd, 0xac, 0x19, 0x5c, 0x96, 0x70, 0x54, 0x14, 0xfc, 0xb5, 0x3f, 0x1a, 0xc6, - 0xf2, 0xec, 0x25, 0x5b, 0x8b, 0xb4, 0xac, 0x51, 0x68, 0xd2, 0x31, 0x77, 0xd1, 0x4d, 0x96, 0x20, - 0x33, 0x85, 0x93, 0xc2, 0x5d, 0x54, 0xab, 0x4e, 0x61, 0x13, 0x75, 0x78, 0x92, 0x79, 0xb4, 0x57, - 0x1d, 0x9e, 0x34, 0x50, 0x14, 0xf6, 0x7f, 0x59, 0xf0, 0xba, 0xbe, 0x5d, 0xf1, 0x18, 0xb6, 0xb7, - 0x83, 0xf4, 0xf6, 0xb6, 0x3d, 0xfc, 0xf6, 0xd6, 0xd3, 0x8a, 0x01, 0x5b, 0xdd, 0x5f, 0x5b, 0x30, - 0xad, 0xe9, 0x1f, 0x43, 0x53, 0xbd, 0x5c, 0xdf, 0xed, 0xd3, 0xaa, 0x8b, 0x42, 0xd2, 0x54, 0xdb, - 0xbe, 0xc9, 0xdb, 0x26, 0x62, 0xaf, 0x25, 0x37, 0x79, 0x18, 0xe7, 0x88, 0x20, 0xa6, 0x0b, 0x63, - 0xfc, 0x2a, 0x73, 0x94, 0x4f, 0x0c, 0x98, 0x96, 0xcf, 0xd3, 0xa0, 0x3a, 0x06, 0xe4, 0x3f, 0x23, - 0x94, 0x02, 0x79, 0x39, 0xb9, 0x17, 0x31, 0x7b, 0x59, 0x95, 0xe9, 0x5a, 0x5d, 0x4e, 0x2e, 0xe1, - 0xa8, 0x28, 0xec, 0x16, 0xcc, 0xa6, 0x99, 0xaf, 0xd0, 0x1a, 0x4f, 0xb5, 0x1d, 0xab, 0x99, 0x8b, - 0x50, 0x76, 0xf8, 0x57, 0x6b, 0x1d, 0x27, 0xfb, 0x3a, 0xce, 0x52, 0x82, 0x40, 0x4d, 0x63, 0xff, - 0xb6, 0x05, 0x67, 0xfa, 0x34, 0x26, 0xc7, 0x34, 0x75, 0xac, 0xad, 0xc0, 0x80, 0x17, 0x8b, 0xaa, - 0xb4, 0xe6, 0x24, 0xc9, 0x1c, 0xc3, 0xaa, 0xad, 0x08, 0x30, 0x26, 0x78, 0xfb, 0x5f, 0x2d, 0x38, - 0x95, 0xd6, 0x35, 0x22, 0xd7, 0x80, 0x88, 0xc6, 0xac, 0x78, 0x91, 0x1b, 0xec, 0xd3, 0xb0, 0xcb, - 0x5a, 0x2e, 0xb4, 0x9e, 0x93, 0x9c, 0xc8, 0x52, 0x0f, 0x05, 0xf6, 0xf9, 0x8a, 0x57, 0xed, 0x56, - 0x55, 0x6f, 0x27, 0x33, 0xe5, 0x56, 0x9e, 0x33, 0x45, 0x0f, 0xa6, 0x19, 0x41, 0x2b, 0x91, 0x68, - 0xca, 0xb7, 0xbf, 0x35, 0x02, 0xea, 0x1c, 0x8b, 0xa7, 0x0d, 0x72, 0x4a, 0xba, 0xa4, 0x9e, 0x50, - 0x2a, 0x9e, 0xe0, 0x09, 0xa5, 0x91, 0x07, 0xe5, 0x08, 0xc4, 0x7b, 0x3e, 0xda, 0x17, 0x35, 0x8c, - 0xfe, 0x8e, 0x46, 0xa1, 0x49, 0xc7, 0x34, 0x69, 0x7a, 0xfb, 0x54, 0x7c, 0x34, 0x96, 0xd6, 0x64, - 0x2d, 0x41, 0xa0, 0xa6, 0x61, 0x9a, 0x54, 0xbd, 0x5a, 0x4d, 0x46, 0x8a, 0x4a, 0x13, 0xd6, 0x3b, - 0xc8, 0x31, 0x8c, 0xa2, 0x11, 0x04, 0x7b, 0xd2, 0xff, 0x53, 0x14, 0x57, 0x83, 0x60, 0x0f, 0x39, - 0x86, 0x79, 0x2c, 0x7e, 0x10, 0xb6, 0x9c, 0xa6, 0xf7, 0x7e, 0x5a, 0x55, 0x52, 0xa4, 0xdf, 0xa7, - 0x3c, 0x96, 0x8d, 0x5e, 0x12, 0xec, 0xf7, 0x1d, 0x9b, 0x81, 0xed, 0x90, 0x56, 0x3d, 0x37, 0x36, - 0xb9, 0x41, 0x7a, 0x06, 0x6e, 0xf5, 0x50, 0x60, 0x9f, 0xaf, 0xc8, 0x12, 0x9c, 0x4a, 0xce, 0x21, - 0x93, 0x5a, 0x11, 0xe1, 0x0c, 0x2a, 0x3f, 0x1c, 0xd3, 0x68, 0xcc, 0xd2, 0x33, 0x6b, 0xd3, 0x92, - 0x15, 0x3b, 0xdc, 0x4d, 0x34, 0xac, 0x4d, 0x52, 0xc9, 0x83, 0x8a, 0xc2, 0xfe, 0xdd, 0x02, 0xdb, - 0x1d, 0x07, 0xdc, 0xd4, 0x7d, 0x6c, 0x49, 0xbe, 0xf4, 0x8c, 0x1c, 0x39, 0xc6, 0x8c, 0x7c, 0x1e, - 0x26, 0xef, 0x44, 0x81, 0xaf, 0x12, 0x68, 0xa3, 0x03, 0x13, 0x68, 0x06, 0x55, 0xff, 0x04, 0xda, - 0xd8, 0x09, 0x13, 0x68, 0x7f, 0x36, 0x0a, 0xe7, 0xd4, 0xd1, 0x31, 0x8d, 0xef, 0x06, 0xe1, 0x9e, - 0xe7, 0xd7, 0xf9, 0x71, 0xeb, 0x17, 0x2d, 0x98, 0x14, 0xd3, 0x5b, 0xbe, 0x69, 0x20, 0x8e, 0x17, - 0x6b, 0x39, 0x5d, 0x12, 0x4b, 0x09, 0x5b, 0xd8, 0x31, 0x04, 0x65, 0x1e, 0x98, 0x30, 0x51, 0x98, - 0xd2, 0x88, 0x7c, 0x10, 0x20, 0x79, 0x78, 0xab, 0x96, 0xd3, 0xf3, 0x63, 0x89, 0x7e, 0x48, 0x6b, - 0xda, 0x95, 0xdc, 0x51, 0x42, 0xd0, 0x10, 0x48, 0x5e, 0xb5, 0xd4, 0xa5, 0x0c, 0x71, 0x56, 0xf4, - 0xf2, 0x23, 0xe9, 0x9b, 0xe3, 0xdc, 0xd1, 0x40, 0x18, 0xf7, 0xfc, 0x3a, 0x1b, 0x56, 0x99, 0x73, - 0x7c, 0x53, 0xbf, 0x52, 0x85, 0xb5, 0xc0, 0xa9, 0x56, 0x9c, 0xa6, 0xe3, 0xbb, 0x34, 0x5c, 0x15, - 0xe4, 0xe6, 0xf3, 0x47, 0x1c, 0x80, 0x09, 0xa3, 0x9e, 0x5b, 0x90, 0xa3, 0xc7, 0xb9, 0x05, 0x39, - 0xf7, 0x4e, 0x98, 0xe9, 0x19, 0xcc, 0x13, 0xdd, 0xd1, 0x78, 0xf8, 0xeb, 0x1d, 0xf6, 0x1f, 0x8f, - 0xe9, 0x3d, 0x66, 0x23, 0xa8, 0x8a, 0xbb, 0x78, 0xa1, 0x1e, 0x51, 0xe9, 0x2a, 0xe6, 0x38, 0x45, - 0x8c, 0x27, 0x94, 0x14, 0x10, 0x4d, 0x91, 0x6c, 0x8e, 0xb6, 0x9d, 0x90, 0xfa, 0x8f, 0x7a, 0x8e, - 0x6e, 0x29, 0x21, 0x68, 0x08, 0x24, 0x8d, 0xd4, 0x61, 0xe6, 0xe5, 0xe1, 0x0f, 0x33, 0x99, 0xf7, - 0xda, 0xf7, 0xce, 0xd4, 0x67, 0x2c, 0x98, 0xf6, 0x53, 0x33, 0x57, 0x1e, 0x68, 0xed, 0x3c, 0x8a, - 0x55, 0x21, 0xee, 0x40, 0xa7, 0x61, 0x98, 0x91, 0xdf, 0x6f, 0x07, 0x1a, 0x3d, 0xe1, 0x0e, 0xa4, - 0x2f, 0xf5, 0x8e, 0x0d, 0xba, 0xd4, 0x4b, 0x7c, 0x75, 0x9d, 0x7f, 0x3c, 0xf7, 0xeb, 0xfc, 0xd0, - 0xe7, 0x2a, 0xff, 0x6d, 0x28, 0xbb, 0x21, 0x75, 0xe2, 0x87, 0xbc, 0xd9, 0xcd, 0x1f, 0xad, 0x5b, - 0x4e, 0x18, 0xa0, 0xe6, 0x65, 0xff, 0x65, 0x11, 0x4e, 0x27, 0x3d, 0x92, 0x1c, 0xf4, 0xb0, 0xed, - 0x4c, 0xc8, 0xd5, 0xbe, 0xa8, 0xda, 0xce, 0xae, 0x26, 0x08, 0xd4, 0x34, 0xcc, 0x7d, 0xea, 0x44, - 0x74, 0xb3, 0x4d, 0xfd, 0x35, 0x6f, 0x37, 0xe2, 0x3d, 0x6e, 0x54, 0x8b, 0xdd, 0xd4, 0x28, 0x34, - 0xe9, 0x98, 0xef, 0x2c, 0xdc, 0xd8, 0x28, 0x7b, 0x6e, 0x2a, 0xdd, 0x63, 0x4c, 0xf0, 0xe4, 0x0b, - 0x7d, 0x5f, 0xfa, 0xc8, 0xa7, 0x62, 0xa0, 0xe7, 0x7c, 0xeb, 0x84, 0x4f, 0x7c, 0xbc, 0x66, 0xc1, - 0xa9, 0xbd, 0x54, 0xa9, 0x4a, 0x62, 0x92, 0x87, 0x2c, 0x80, 0x4c, 0xd7, 0xbf, 0xe8, 0x29, 0x9c, - 0x86, 0x47, 0x98, 0x95, 0x6e, 0xff, 0x87, 0x05, 0xa6, 0x79, 0x3a, 0x9e, 0x23, 0x64, 0xbc, 0xdd, - 0x54, 0x38, 0xe2, 0xed, 0xa6, 0xc4, 0x67, 0x2a, 0x1e, 0xcf, 0x47, 0x1f, 0x39, 0x81, 0x8f, 0x3e, - 0x3a, 0xd0, 0xc9, 0x7a, 0x3d, 0x14, 0x3b, 0x5e, 0x55, 0xba, 0xd9, 0xfa, 0xec, 0x6a, 0x75, 0x05, - 0x19, 0xdc, 0xfe, 0xc3, 0x51, 0x1d, 0x56, 0xcb, 0x83, 0xee, 0x1f, 0x8a, 0x66, 0xd7, 0x54, 0x3d, - 0xab, 0x68, 0xf9, 0x46, 0x4f, 0x3d, 0xeb, 0x3b, 0x4e, 0x5e, 0xc7, 0x20, 0x3a, 0x68, 0x50, 0x39, - 0xeb, 0xf8, 0x11, 0x45, 0x0c, 0x77, 0xa0, 0xc4, 0x22, 0x11, 0x9e, 0x1f, 0x2b, 0xa5, 0x94, 0x2a, - 0x5d, 0x95, 0xf0, 0xfb, 0x87, 0xf3, 0x6f, 0x3f, 0xb9, 0x5a, 0xc9, 0xd7, 0xa8, 0xf8, 0x93, 0x08, - 0xca, 0xec, 0x6f, 0x5e, 0x6f, 0x21, 0x63, 0x9c, 0x9b, 0xca, 0x16, 0x25, 0x88, 0x5c, 0x8a, 0x39, - 0xb4, 0x1c, 0xe2, 0x43, 0x99, 0xbf, 0x32, 0xc4, 0x85, 0x8a, 0x50, 0x68, 0x4b, 0x55, 0x3d, 0x24, - 0x88, 0xfb, 0x87, 0xf3, 0x2f, 0x9e, 0x5c, 0xa8, 0xfa, 0x1c, 0xb5, 0x08, 0xfb, 0x3b, 0x45, 0x3d, - 0x77, 0x65, 0x19, 0xf3, 0x0f, 0xc5, 0xdc, 0x7d, 0x21, 0x33, 0x77, 0x2f, 0xf4, 0xcc, 0xdd, 0x69, - 0xfd, 0x6e, 0x4e, 0x6a, 0x36, 0x3e, 0xee, 0x0d, 0xf6, 0xe8, 0xb0, 0x9b, 0x7b, 0x16, 0xaf, 0x74, - 0xbc, 0x90, 0x46, 0x5b, 0x61, 0xc7, 0xf7, 0xfc, 0x3a, 0x9f, 0x8e, 0x25, 0xd3, 0xb3, 0x48, 0xa1, - 0x31, 0x4b, 0x6f, 0x7f, 0x89, 0x1f, 0x4f, 0x1a, 0xa5, 0x5b, 0x6c, 0x94, 0x9b, 0xfc, 0xa1, 0x26, - 0x51, 0x3c, 0xaa, 0x46, 0x59, 0xbc, 0xce, 0x24, 0x70, 0xe4, 0x2e, 0x8c, 0xef, 0x8a, 0xa7, 0x1d, - 0xf2, 0xb9, 0x4b, 0x24, 0xdf, 0x89, 0xe0, 0xb7, 0x36, 0x93, 0x47, 0x23, 0xee, 0xeb, 0x3f, 0x31, - 0x91, 0x66, 0xff, 0x6a, 0x11, 0x4e, 0x65, 0x1e, 0xfd, 0x61, 0xf1, 0x79, 0xf2, 0x66, 0x54, 0x36, - 0x99, 0xae, 0xde, 0x46, 0x56, 0x14, 0xe4, 0x7d, 0x00, 0x55, 0xda, 0x6e, 0x06, 0x5d, 0xee, 0xb8, - 0x8c, 0x9c, 0xd8, 0x71, 0x51, 0xbe, 0xee, 0x8a, 0xe2, 0x82, 0x06, 0x47, 0x59, 0x31, 0x3b, 0x2a, - 0x1e, 0xae, 0x48, 0x57, 0xcc, 0x1a, 0x57, 0xea, 0xc6, 0x1e, 0xef, 0x95, 0x3a, 0x0f, 0x4e, 0x09, - 0x15, 0x55, 0x81, 0xd4, 0x43, 0xd4, 0x41, 0x9d, 0x61, 0x33, 0x6a, 0x25, 0xcd, 0x06, 0xb3, 0x7c, - 0xed, 0x4f, 0x17, 0x98, 0xfb, 0x26, 0x3a, 0x7b, 0x3d, 0xc9, 0x65, 0xbf, 0x11, 0xc6, 0x9c, 0x4e, - 0xdc, 0x08, 0x7a, 0x9e, 0xda, 0x58, 0xe2, 0x50, 0x94, 0x58, 0xb2, 0x06, 0x23, 0x55, 0x27, 0x4e, - 0xde, 0xf6, 0x3f, 0x89, 0x72, 0x3a, 0x71, 0xe5, 0xc4, 0x14, 0x39, 0x17, 0xf2, 0x34, 0x8c, 0xc4, - 0x4e, 0x3d, 0xf5, 0xaa, 0xe8, 0x8e, 0x53, 0x8f, 0x90, 0x43, 0xcd, 0xdd, 0x65, 0xe4, 0x88, 0xdd, - 0xe5, 0x45, 0xe3, 0xbf, 0x4e, 0x18, 0x87, 0x24, 0xbd, 0xff, 0x29, 0x42, 0xd4, 0xf0, 0xa7, 0x68, - 0xed, 0x1f, 0x81, 0x49, 0xf3, 0x3f, 0x49, 0x1c, 0xeb, 0x0a, 0x90, 0xfd, 0xcf, 0x23, 0x30, 0x95, - 0x2a, 0xa2, 0x4b, 0xcd, 0x72, 0xeb, 0xc8, 0x59, 0xce, 0x8f, 0xbf, 0x3a, 0x3e, 0x95, 0x25, 0x92, - 0xc6, 0xf1, 0x57, 0xc7, 0xa7, 0x28, 0x70, 0x6c, 0x54, 0xaa, 0x61, 0x17, 0x3b, 0xbe, 0x4c, 0xa2, - 0xab, 0x51, 0x59, 0xe1, 0x50, 0x94, 0x58, 0x16, 0xc0, 0x4e, 0x46, 0xdc, 0x28, 0x0a, 0x1b, 0x21, - 0x57, 0xcd, 0xb5, 0x3c, 0x9e, 0x27, 0x93, 0x05, 0xa3, 0x3c, 0xa0, 0x37, 0x21, 0x98, 0x92, 0x48, - 0x3e, 0x66, 0x99, 0x0f, 0xb3, 0x8d, 0xe5, 0x71, 0xf8, 0x93, 0xad, 0x51, 0x14, 0x2b, 0xe8, 0xc1, - 0xef, 0xb3, 0x45, 0x6a, 0x01, 0x8f, 0x3f, 0x9a, 0x05, 0x0c, 0x7d, 0x16, 0xef, 0x9b, 0xa1, 0xdc, - 0x72, 0x7c, 0xaf, 0x46, 0xa3, 0x58, 0xfc, 0x17, 0x98, 0xb2, 0x88, 0x9e, 0xd6, 0x13, 0x20, 0x6a, - 0x3c, 0xff, 0x5f, 0x4b, 0xbc, 0x61, 0x22, 0x88, 0x29, 0x1b, 0xff, 0x6b, 0x49, 0x83, 0xd1, 0xa4, - 0xb1, 0x7f, 0xcf, 0x82, 0x27, 0xfb, 0x76, 0xc6, 0x0f, 0x6e, 0xb6, 0xd2, 0xfe, 0xfd, 0x02, 0x9c, - 0xe9, 0x53, 0x64, 0x4a, 0xba, 0x8f, 0xec, 0xfd, 0x3e, 0x59, 0xc5, 0x3a, 0x35, 0x70, 0x6e, 0x9c, - 0x6c, 0x1b, 0xd2, 0x5b, 0x41, 0xf1, 0xb1, 0x6e, 0x05, 0xf6, 0x97, 0x0a, 0x60, 0xbc, 0x5d, 0x49, - 0x3e, 0x64, 0xd6, 0x53, 0x5b, 0x79, 0xd5, 0xfe, 0x0a, 0xe6, 0xaa, 0x1e, 0x5b, 0xf4, 0x5a, 0xbf, - 0xf2, 0xec, 0xec, 0x7c, 0x2d, 0x1c, 0x3d, 0x5f, 0x49, 0x33, 0x29, 0x5c, 0x2f, 0xe6, 0x5f, 0xb8, - 0x5e, 0xee, 0x29, 0x5a, 0xff, 0x65, 0x4b, 0xcc, 0xb4, 0x4c, 0x93, 0xb4, 0x85, 0xb5, 0x1e, 0x60, - 0x61, 0xdf, 0x02, 0xa5, 0x88, 0x36, 0x6b, 0xcc, 0xb3, 0x93, 0x96, 0x58, 0xcd, 0x89, 0x6d, 0x09, - 0x47, 0x45, 0xc1, 0xaf, 0xb4, 0x36, 0x9b, 0xc1, 0xdd, 0x4b, 0xad, 0x76, 0xdc, 0x95, 0x36, 0x59, - 0x5f, 0x69, 0x55, 0x18, 0x34, 0xa8, 0xec, 0xff, 0xb4, 0xc4, 0x70, 0x4a, 0x1f, 0xfd, 0x85, 0xcc, - 0x55, 0xc3, 0xe3, 0xbb, 0xb7, 0x3f, 0x0b, 0xe0, 0xaa, 0xcb, 0xff, 0xf9, 0x3c, 0x40, 0xa9, 0x1f, - 0x13, 0x30, 0x5f, 0x45, 0x4c, 0x60, 0x68, 0xc8, 0x4b, 0x2d, 0x9e, 0xe2, 0x51, 0x8b, 0xc7, 0xfe, - 0x37, 0x0b, 0x52, 0x9b, 0x05, 0x69, 0xc3, 0x28, 0xd3, 0xa0, 0x9b, 0xcf, 0x53, 0x05, 0x26, 0x6b, - 0xb6, 0xb0, 0xe4, 0xb4, 0xe0, 0x7f, 0xa2, 0x10, 0x44, 0x9a, 0xd2, 0x3b, 0x2f, 0xe4, 0xf1, 0x9c, - 0x86, 0x29, 0x90, 0xf9, 0xf7, 0xf2, 0xff, 0x6a, 0x28, 0x4f, 0xdf, 0x7e, 0x01, 0x66, 0x7a, 0x94, - 0xe2, 0x97, 0x8f, 0x82, 0xe4, 0x7d, 0x06, 0x63, 0x06, 0xf2, 0xab, 0x90, 0x28, 0x70, 0xcc, 0xc1, - 0x3f, 0x9d, 0x65, 0x4f, 0x3e, 0x6f, 0xc1, 0x4c, 0x94, 0xe5, 0xf7, 0xa8, 0xfa, 0x4e, 0x65, 0xae, - 0x7a, 0x50, 0xd8, 0xab, 0x84, 0xfd, 0xe7, 0xd2, 0x3c, 0x89, 0xff, 0x43, 0xa6, 0x36, 0x17, 0x6b, - 0xe0, 0xe6, 0xc2, 0x96, 0x98, 0xdb, 0xa0, 0xd5, 0x4e, 0xb3, 0xa7, 0x94, 0x66, 0x5b, 0xc2, 0x51, - 0x51, 0xa4, 0x1e, 0xa2, 0x2b, 0x1e, 0xf9, 0x10, 0xdd, 0xf3, 0x30, 0x69, 0xbe, 0x41, 0xc2, 0x53, - 0x68, 0xf2, 0xf0, 0xc1, 0x7c, 0xae, 0x04, 0x53, 0x54, 0x99, 0x87, 0xcc, 0x46, 0x8f, 0x7c, 0xc8, - 0xec, 0x59, 0x28, 0xc9, 0x47, 0xb9, 0x92, 0xfc, 0xae, 0xa8, 0xd3, 0x91, 0x30, 0x54, 0x58, 0x66, - 0x20, 0x5a, 0x8e, 0xdf, 0x71, 0x9a, 0xac, 0x87, 0x64, 0xf9, 0x9e, 0x5a, 0x59, 0xeb, 0x0a, 0x83, - 0x06, 0x95, 0xfd, 0x4f, 0x16, 0x64, 0xdf, 0x08, 0x4a, 0x15, 0x01, 0x5a, 0x47, 0x16, 0x01, 0xa6, - 0x0b, 0x9c, 0x0a, 0xc7, 0x2a, 0x70, 0x32, 0x6b, 0x8f, 0x8a, 0x0f, 0xac, 0x3d, 0x7a, 0x83, 0xbe, - 0x40, 0x2e, 0x8a, 0x94, 0x26, 0xfa, 0x5d, 0x1e, 0x27, 0x36, 0x8c, 0xb9, 0x8e, 0xaa, 0xb1, 0x9e, - 0x14, 0x8e, 0xd2, 0xf2, 0x12, 0x27, 0x92, 0x98, 0xca, 0xc2, 0x57, 0xbe, 0x7d, 0xfe, 0x89, 0xaf, - 0x7e, 0xfb, 0xfc, 0x13, 0xdf, 0xf8, 0xf6, 0xf9, 0x27, 0x3e, 0x72, 0xef, 0xbc, 0xf5, 0x95, 0x7b, - 0xe7, 0xad, 0xaf, 0xde, 0x3b, 0x6f, 0x7d, 0xe3, 0xde, 0x79, 0xeb, 0x5b, 0xf7, 0xce, 0x5b, 0x9f, - 0xf9, 0xfb, 0xf3, 0x4f, 0xbc, 0xbb, 0x94, 0xcc, 0xd5, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x25, - 0xff, 0xb8, 0x80, 0xd5, 0x76, 0x00, 0x00, + 0x45, 0x33, 0xaf, 0x9c, 0x95, 0x15, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3, 0x19, 0x57, 0xa5, + 0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0xcd, 0xc7, 0x8c, 0x31, 0xe3, 0x56, 0x34, 0x0a, 0x4d, 0x3a, 0xe2, + 0xc3, 0x28, 0x9b, 0x51, 0xd1, 0xec, 0x08, 0xd7, 0x7f, 0x6d, 0x38, 0xfd, 0x65, 0xa3, 0xb2, 0xc9, + 0xaa, 0x5b, 0x9f, 0x7d, 0x45, 0x28, 0xc4, 0x90, 0x4f, 0x59, 0x30, 0x2b, 0x67, 0x3c, 0x52, 0xd1, + 0xa0, 0xb7, 0x1b, 0x5e, 0x4c, 0x9b, 0x5e, 0x14, 0xcf, 0x8e, 0x72, 0x1d, 0x16, 0x8f, 0x37, 0xb6, + 0x2e, 0x87, 0x41, 0xa7, 0x7d, 0xcd, 0xf3, 0xab, 0x95, 0x0b, 0x52, 0xd2, 0xec, 0xf2, 0x00, 0xc6, + 0x38, 0x50, 0x24, 0xf9, 0x9c, 0x05, 0x73, 0xbe, 0xd3, 0xa2, 0x51, 0xdb, 0x61, 0x5d, 0x2b, 0xd0, + 0x95, 0xa6, 0xe3, 0xee, 0x71, 0x8d, 0xc6, 0x1e, 0x4e, 0x23, 0x5b, 0x6a, 0x34, 0xb7, 0x31, 0x90, + 0x35, 0x3e, 0x40, 0x2c, 0xf9, 0x4d, 0x0b, 0x66, 0x82, 0xb0, 0xdd, 0x70, 0x7c, 0x5a, 0x4d, 0xb0, + 0xd1, 0xec, 0x38, 0x9f, 0x7a, 0xef, 0x1b, 0xae, 0x8b, 0x36, 0xb3, 0x6c, 0xaf, 0x07, 0xbe, 0x17, + 0x07, 0xe1, 0x36, 0x8d, 0x63, 0xcf, 0xaf, 0x47, 0x95, 0x27, 0xef, 0x1d, 0xce, 0xcf, 0xf4, 0x50, + 0x61, 0xaf, 0x3e, 0xe4, 0x03, 0x30, 0x11, 0x75, 0x7d, 0xf7, 0xb6, 0xe7, 0x57, 0x83, 0xbb, 0xd1, + 0x6c, 0x29, 0x8f, 0xe9, 0xbb, 0xad, 0x18, 0xca, 0x09, 0xa8, 0x05, 0xa0, 0x29, 0xad, 0x7f, 0xc7, + 0xe9, 0xa1, 0x54, 0xce, 0xbb, 0xe3, 0xf4, 0x60, 0x7a, 0x80, 0x58, 0xf2, 0x71, 0x0b, 0xa6, 0x22, + 0xaf, 0xee, 0x3b, 0x71, 0x27, 0xa4, 0xd7, 0x68, 0x37, 0x9a, 0x05, 0xae, 0xc8, 0xd5, 0x21, 0x5b, + 0xc5, 0x60, 0x59, 0x79, 0x52, 0xea, 0x38, 0x65, 0x42, 0x23, 0x4c, 0xcb, 0xed, 0x37, 0xd1, 0xf4, + 0xb0, 0x9e, 0xc8, 0x77, 0xa2, 0xe9, 0x41, 0x3d, 0x50, 0xa4, 0xfd, 0x67, 0x05, 0x38, 0x9d, 0x5d, + 0x83, 0xc8, 0x6f, 0x5b, 0x70, 0xea, 0xce, 0xdd, 0x78, 0x27, 0xd8, 0xa3, 0x7e, 0x54, 0xe9, 0x32, + 0x4b, 0xc1, 0xad, 0xef, 0xc4, 0x45, 0x37, 0xdf, 0xd5, 0x6e, 0xe1, 0x6a, 0x5a, 0xca, 0xaa, 0x1f, + 0x87, 0xdd, 0xca, 0x53, 0xb2, 0x3e, 0xa7, 0xae, 0xde, 0xde, 0x31, 0xb1, 0x98, 0x55, 0x6a, 0xee, + 0x13, 0x16, 0x9c, 0xed, 0xc7, 0x82, 0x9c, 0x86, 0xe2, 0x1e, 0xed, 0x0a, 0x07, 0x07, 0xd9, 0x4f, + 0xf2, 0xb3, 0x30, 0xba, 0xef, 0x34, 0x3b, 0x54, 0x3a, 0x0a, 0x97, 0x87, 0xab, 0x88, 0xd2, 0x0c, + 0x05, 0xd7, 0xb7, 0x17, 0x5e, 0xb0, 0xec, 0xbf, 0x2c, 0xc2, 0x84, 0xb1, 0x54, 0x3c, 0x06, 0xe7, + 0x27, 0x48, 0x39, 0x3f, 0xd7, 0x73, 0x5b, 0xe5, 0x06, 0x7a, 0x3f, 0x77, 0x33, 0xde, 0xcf, 0x66, + 0x7e, 0x22, 0x1f, 0xe8, 0xfe, 0x90, 0x18, 0xca, 0x41, 0x9b, 0x39, 0xb7, 0x6c, 0x15, 0x1d, 0xc9, + 0xa3, 0x0b, 0x37, 0x13, 0x76, 0x95, 0xa9, 0x7b, 0x87, 0xf3, 0x65, 0xf5, 0x89, 0x5a, 0x90, 0xfd, + 0x0d, 0x0b, 0xce, 0x1a, 0x3a, 0x2e, 0x07, 0x7e, 0xd5, 0xe3, 0x5d, 0x7b, 0x01, 0x46, 0xe2, 0x6e, + 0x3b, 0xf1, 0xa0, 0x55, 0x4b, 0xed, 0x74, 0xdb, 0x14, 0x39, 0x86, 0xf9, 0xcc, 0x2d, 0x1a, 0x45, + 0x4e, 0x9d, 0x66, 0x7d, 0xe6, 0xeb, 0x02, 0x8c, 0x09, 0x9e, 0x84, 0x40, 0x9a, 0x4e, 0x14, 0xef, + 0x84, 0x8e, 0x1f, 0x71, 0xf6, 0x3b, 0x5e, 0x8b, 0xca, 0x06, 0xfe, 0x7f, 0xc7, 0x1b, 0x31, 0xac, + 0x44, 0xe5, 0xdc, 0xbd, 0xc3, 0x79, 0xb2, 0xde, 0xc3, 0x09, 0xfb, 0x70, 0xb7, 0x3f, 0x67, 0xc1, + 0xb9, 0xfe, 0x6e, 0x0d, 0x79, 0x23, 0x8c, 0x45, 0x34, 0xdc, 0xa7, 0xa1, 0xac, 0x9d, 0xee, 0x12, + 0x0e, 0x45, 0x89, 0x25, 0x8b, 0x50, 0x56, 0x26, 0x57, 0xd6, 0x71, 0x46, 0x92, 0x96, 0xb5, 0x9d, + 0xd6, 0x34, 0xac, 0xd1, 0xd8, 0x87, 0x74, 0x82, 0x54, 0xa3, 0xf1, 0xfd, 0x06, 0xc7, 0xd8, 0x7f, + 0x6f, 0xc1, 0x29, 0x43, 0xab, 0xc7, 0xe0, 0xe5, 0xfa, 0x69, 0x2f, 0x77, 0x2d, 0xb7, 0xf1, 0x3c, + 0xc0, 0xcd, 0xfd, 0xca, 0x18, 0xcc, 0x98, 0xa3, 0x9e, 0x9b, 0x63, 0xbe, 0xc1, 0xa2, 0xed, 0xe0, + 0x26, 0xae, 0xcb, 0x36, 0xd7, 0x1b, 0x2c, 0x01, 0xc6, 0x04, 0xcf, 0x1a, 0xb1, 0xed, 0xc4, 0x0d, + 0xd9, 0xe0, 0xaa, 0x11, 0xb7, 0x9c, 0xb8, 0x81, 0x1c, 0x43, 0x5e, 0x82, 0xe9, 0xd8, 0x09, 0xeb, + 0x34, 0x46, 0xba, 0xef, 0x45, 0xc9, 0x7c, 0x29, 0x57, 0xce, 0x49, 0xda, 0xe9, 0x9d, 0x14, 0x16, + 0x33, 0xd4, 0xe4, 0x15, 0x18, 0x69, 0xd0, 0x66, 0x4b, 0xfa, 0x35, 0xdb, 0xf9, 0xcd, 0x70, 0x5e, + 0xd7, 0x2b, 0xb4, 0xd9, 0xaa, 0x94, 0x98, 0xca, 0xec, 0x17, 0x72, 0x51, 0xe4, 0x17, 0x2d, 0x28, + 0xef, 0x75, 0xa2, 0x38, 0x68, 0x79, 0xef, 0xa7, 0xb3, 0x25, 0x2e, 0xf8, 0x67, 0x72, 0x16, 0x7c, + 0x2d, 0xe1, 0x2f, 0xe6, 0xbb, 0xfa, 0x44, 0x2d, 0x99, 0x7c, 0x10, 0xc6, 0xf7, 0xa2, 0xc0, 0xf7, + 0x29, 0xf3, 0x54, 0x98, 0x12, 0xb7, 0xf2, 0x56, 0x42, 0x70, 0xaf, 0x4c, 0xb0, 0xbe, 0x95, 0x1f, + 0x98, 0xc8, 0xe4, 0xcd, 0x50, 0xf5, 0x42, 0xea, 0xc6, 0x41, 0xd8, 0x9d, 0x85, 0x47, 0xd2, 0x0c, + 0x2b, 0x09, 0x7f, 0xd1, 0x0c, 0xea, 0x13, 0xb5, 0x64, 0xd2, 0x85, 0xb1, 0x76, 0xb3, 0x53, 0xf7, + 0xfc, 0xd9, 0x09, 0xae, 0xc3, 0xcd, 0x9c, 0x75, 0xd8, 0xe2, 0xcc, 0x2b, 0xc0, 0x8c, 0x8a, 0xf8, + 0x8d, 0x52, 0x20, 0x79, 0x06, 0x46, 0xdd, 0x86, 0x13, 0xc6, 0xb3, 0x93, 0x7c, 0xcc, 0xaa, 0x49, + 0xb4, 0xcc, 0x80, 0x28, 0x70, 0xf6, 0xaf, 0x17, 0x60, 0x6e, 0x70, 0xc5, 0xc4, 0x6c, 0x72, 0x3b, + 0x61, 0x24, 0xec, 0x73, 0xc9, 0x9c, 0x4d, 0x1c, 0x8c, 0x09, 0x9e, 0x7c, 0xd4, 0x82, 0xf1, 0x3b, + 0xb2, 0xc7, 0x0b, 0x8f, 0xa4, 0xc7, 0xaf, 0xca, 0x1e, 0x57, 0x3a, 0x5c, 0x4d, 0x7a, 0x5d, 0xca, + 0x65, 0xea, 0xd2, 0x03, 0xb7, 0xd9, 0xa9, 0x26, 0x96, 0x51, 0x91, 0xae, 0x0a, 0x30, 0x26, 0x78, + 0x46, 0xea, 0xf9, 0x82, 0x74, 0x24, 0x4d, 0xba, 0xe6, 0x4b, 0x52, 0x89, 0xb7, 0xbf, 0x5b, 0x84, + 0x27, 0xfb, 0x4e, 0x3e, 0xb2, 0x00, 0xc0, 0x7d, 0x96, 0x4b, 0x1e, 0xdb, 0x60, 0x8a, 0x5d, 0xf5, + 0x34, 0x73, 0x31, 0x6e, 0x29, 0x28, 0x1a, 0x14, 0xe4, 0xc3, 0x00, 0x6d, 0x27, 0x74, 0x5a, 0x34, + 0xa6, 0x61, 0x62, 0x27, 0xaf, 0x0d, 0xd7, 0x4a, 0x4c, 0x8f, 0xad, 0x84, 0xa7, 0xf6, 0x71, 0x14, + 0x28, 0x42, 0x43, 0x24, 0xdb, 0x43, 0x87, 0xb4, 0x49, 0x9d, 0x88, 0x6e, 0xe8, 0xe5, 0x43, 0xed, + 0xa1, 0x51, 0xa3, 0xd0, 0xa4, 0x63, 0xeb, 0x18, 0xaf, 0x45, 0x24, 0xdb, 0x4a, 0xad, 0x63, 0xbc, + 0x9e, 0x11, 0x4a, 0x2c, 0x79, 0xcd, 0x82, 0xe9, 0x9a, 0xd7, 0xa4, 0x5a, 0xba, 0xdc, 0xf1, 0x6e, + 0x0e, 0x5f, 0xc9, 0x4b, 0x26, 0x5f, 0x6d, 0x81, 0x53, 0xe0, 0x08, 0x33, 0xe2, 0x59, 0x37, 0xef, + 0xd3, 0x90, 0x9b, 0xee, 0xb1, 0x74, 0x37, 0xdf, 0x12, 0x60, 0x4c, 0xf0, 0xf6, 0x17, 0x0b, 0x30, + 0x3b, 0x68, 0xcc, 0x91, 0x88, 0x8d, 0xac, 0xf8, 0x96, 0x13, 0x46, 0xd2, 0x7d, 0x1f, 0x72, 0x17, + 0x28, 0xf9, 0xde, 0x72, 0x42, 0x73, 0x8c, 0x72, 0x01, 0x98, 0x48, 0x22, 0x77, 0x60, 0x24, 0x6e, + 0x3a, 0x39, 0x85, 0x8d, 0x0c, 0x89, 0xda, 0xc9, 0x5a, 0x5f, 0x8a, 0x90, 0xcb, 0x20, 0x4f, 0xc3, + 0x48, 0xd3, 0xdb, 0x65, 0xce, 0x28, 0x1b, 0xc4, 0x7c, 0x55, 0x59, 0xf7, 0x76, 0x23, 0xe4, 0x50, + 0xfb, 0xeb, 0x56, 0x9f, 0xb6, 0x91, 0x46, 0x97, 0x0d, 0x2a, 0xea, 0xef, 0x7b, 0x61, 0xe0, 0xb7, + 0xa8, 0x1f, 0x67, 0x43, 0xa1, 0xab, 0x1a, 0x85, 0x26, 0x1d, 0xf9, 0x05, 0xab, 0xcf, 0x6c, 0x18, + 0x32, 0x06, 0x28, 0x55, 0x3a, 0xf6, 0x84, 0xb0, 0xff, 0x7d, 0xac, 0x8f, 0xfd, 0x53, 0x0b, 0x1a, + 0xb9, 0x08, 0xc0, 0xbc, 0xa9, 0xad, 0x90, 0xd6, 0xbc, 0x03, 0x59, 0x33, 0xc5, 0x72, 0x43, 0x61, + 0xd0, 0xa0, 0x4a, 0xca, 0x6c, 0x77, 0x6a, 0xac, 0x4c, 0xa1, 0xb7, 0x8c, 0xc0, 0xa0, 0x41, 0x45, + 0x9e, 0x87, 0x31, 0xaf, 0xe5, 0xd4, 0x69, 0xd2, 0xfe, 0x4f, 0xb3, 0xc9, 0xb5, 0xc6, 0x21, 0xf7, + 0x0f, 0xe7, 0xa7, 0x95, 0x42, 0x1c, 0x84, 0x92, 0x96, 0xfc, 0x96, 0x05, 0x93, 0x6e, 0xd0, 0x6a, + 0x05, 0xfe, 0xba, 0xb3, 0x4b, 0x9b, 0x49, 0x88, 0xeb, 0xce, 0xa3, 0x5a, 0xee, 0x17, 0x96, 0x0d, + 0x61, 0x62, 0x83, 0xa9, 0x02, 0x77, 0x26, 0x0a, 0x53, 0x5a, 0x99, 0x73, 0x70, 0xf4, 0xc1, 0x73, + 0x90, 0xfc, 0xa1, 0x05, 0x33, 0xa2, 0xec, 0x92, 0xef, 0x07, 0xb1, 0x8c, 0x3c, 0x8a, 0x18, 0x55, + 0xf0, 0x88, 0xab, 0x65, 0x48, 0x14, 0x75, 0x7b, 0x9d, 0x54, 0x73, 0xa6, 0x07, 0x8f, 0xbd, 0x4a, + 0x92, 0xcb, 0x30, 0x53, 0x0b, 0x42, 0x97, 0x9a, 0x0d, 0xc1, 0x1d, 0xbf, 0x92, 0x66, 0x74, 0x29, + 0x4b, 0x80, 0xbd, 0x65, 0xc8, 0x2d, 0x38, 0x67, 0x00, 0xcd, 0x76, 0x28, 0x71, 0x6e, 0xe7, 0x25, + 0xb7, 0x73, 0x97, 0xfa, 0x52, 0xe1, 0x80, 0xd2, 0x73, 0xef, 0x84, 0x99, 0x9e, 0xfe, 0xeb, 0xb3, + 0xbb, 0x3f, 0x6b, 0xee, 0xee, 0xcb, 0xc6, 0xa6, 0x7c, 0x6e, 0x05, 0xce, 0xf5, 0x6f, 0xa9, 0x93, + 0x70, 0xb1, 0x7f, 0xd5, 0x82, 0xa7, 0x06, 0xb8, 0x31, 0x6a, 0x5b, 0x63, 0x0d, 0xda, 0xd6, 0x10, + 0x07, 0x8a, 0xd4, 0xdf, 0x97, 0xc6, 0xe2, 0xd2, 0x70, 0x23, 0x62, 0xd5, 0xdf, 0x17, 0x1d, 0x3d, + 0x7e, 0xef, 0x70, 0xbe, 0xb8, 0xea, 0xef, 0x23, 0xe3, 0x6d, 0x7f, 0x7e, 0x2c, 0xb5, 0x73, 0xda, + 0x4e, 0x36, 0xeb, 0x5c, 0x51, 0xb9, 0x6f, 0xda, 0xcc, 0x79, 0x2c, 0x1a, 0x3b, 0x43, 0x11, 0x82, + 0x97, 0xe2, 0xc8, 0x27, 0x2c, 0x1e, 0xf5, 0x4e, 0x76, 0x94, 0xd2, 0xb3, 0x7a, 0x34, 0x41, 0x78, + 0x33, 0x96, 0x9e, 0x00, 0xd1, 0x94, 0xce, 0x66, 0x72, 0x5b, 0x04, 0x9d, 0xb2, 0xfe, 0x55, 0x12, + 0x17, 0x4f, 0xf0, 0xe4, 0x00, 0x20, 0xea, 0xfa, 0xee, 0x56, 0xd0, 0xf4, 0xdc, 0xae, 0x0c, 0x33, + 0xe4, 0x10, 0x39, 0x15, 0xfc, 0x84, 0x93, 0xa5, 0xbf, 0xd1, 0x90, 0x45, 0xbe, 0x64, 0xc1, 0x8c, + 0x57, 0xf7, 0x83, 0x90, 0xae, 0x78, 0xb5, 0x1a, 0x0d, 0xa9, 0xef, 0xd2, 0xc4, 0x0f, 0xb9, 0x3d, + 0x9c, 0x06, 0x49, 0xd0, 0x6f, 0x2d, 0xcb, 0x5e, 0x4f, 0xf1, 0x1e, 0x14, 0xf6, 0x2a, 0x43, 0xaa, + 0x30, 0xe2, 0xf9, 0xb5, 0x40, 0x1a, 0xb6, 0xca, 0x70, 0x4a, 0xad, 0xf9, 0xb5, 0x40, 0xcf, 0x15, + 0xf6, 0x85, 0x9c, 0x3b, 0x59, 0x87, 0xb3, 0xa1, 0xdc, 0x89, 0x5e, 0xf1, 0x22, 0xe6, 0xcf, 0xaf, + 0x7b, 0x2d, 0x2f, 0xe6, 0x46, 0xa9, 0x58, 0x99, 0xbd, 0x77, 0x38, 0x7f, 0x16, 0xfb, 0xe0, 0xb1, + 0x6f, 0x29, 0xfb, 0xd5, 0x72, 0x7a, 0xbb, 0x2d, 0x82, 0x49, 0x1f, 0x84, 0x72, 0xa8, 0xc2, 0xf7, + 0xc2, 0x33, 0x5a, 0xcf, 0xa7, 0x8d, 0x65, 0x14, 0x4b, 0xc5, 0x41, 0x74, 0xa0, 0x5e, 0x4b, 0x64, + 0x1e, 0x12, 0xeb, 0x79, 0x39, 0x2d, 0x72, 0x18, 0x5f, 0x52, 0xaa, 0x0e, 0xd8, 0x75, 0x7d, 0x17, + 0xb9, 0x0c, 0x12, 0xc2, 0x58, 0x83, 0x3a, 0xcd, 0xb8, 0x21, 0xe3, 0x49, 0x57, 0x87, 0xf5, 0x69, + 0x19, 0xaf, 0x6c, 0xac, 0x4e, 0x40, 0x51, 0x4a, 0x22, 0x07, 0x30, 0xde, 0x10, 0x9d, 0x20, 0xd7, + 0xf6, 0xeb, 0xc3, 0x36, 0x6e, 0xaa, 0x67, 0xf5, 0xfc, 0x95, 0x00, 0x4c, 0xc4, 0x91, 0x5f, 0xb2, + 0x00, 0xdc, 0x24, 0x48, 0x97, 0x4c, 0x1f, 0xcc, 0xcd, 0xee, 0xa8, 0xf8, 0x9f, 0x76, 0x8d, 0x14, + 0x28, 0x42, 0x43, 0x32, 0x79, 0x19, 0x26, 0x43, 0xea, 0x06, 0xbe, 0xeb, 0x35, 0x69, 0x75, 0x29, + 0xe6, 0x6e, 0xfc, 0xc9, 0x82, 0x79, 0xa7, 0x99, 0x7f, 0x82, 0x06, 0x0f, 0x4c, 0x71, 0x24, 0xaf, + 0x5a, 0x30, 0xad, 0x02, 0x95, 0xac, 0x43, 0xa8, 0x0c, 0xd8, 0xac, 0xe7, 0x14, 0x16, 0xe5, 0x3c, + 0x2b, 0x84, 0x6d, 0x57, 0xd2, 0x30, 0xcc, 0xc8, 0x25, 0xef, 0x06, 0x08, 0x76, 0x79, 0x50, 0x90, + 0x55, 0xb5, 0x74, 0xe2, 0xaa, 0x4e, 0x8b, 0xf8, 0x76, 0xc2, 0x01, 0x0d, 0x6e, 0xe4, 0x1a, 0x80, + 0x98, 0x36, 0x3b, 0xdd, 0x36, 0xe5, 0x41, 0x99, 0x72, 0xe5, 0xcd, 0x49, 0xe3, 0x6f, 0x2b, 0xcc, + 0xfd, 0xc3, 0xf9, 0xde, 0xdd, 0x2e, 0x8f, 0xc6, 0x1a, 0xc5, 0xc9, 0x07, 0x60, 0x3c, 0xea, 0xb4, + 0x5a, 0x8e, 0x0a, 0xae, 0x6c, 0xe5, 0xb7, 0x22, 0x0a, 0xbe, 0x7a, 0x6c, 0x4a, 0x00, 0x26, 0x12, + 0x6d, 0x1f, 0x48, 0x2f, 0x3d, 0x79, 0x1e, 0x26, 0xe9, 0x41, 0x4c, 0x43, 0xdf, 0x69, 0xde, 0xc4, + 0xf5, 0x64, 0x3b, 0xce, 0x3b, 0x7f, 0xd5, 0x80, 0x63, 0x8a, 0x8a, 0xd8, 0xca, 0xf3, 0x2e, 0x70, + 0x7a, 0xd0, 0x9e, 0x77, 0xe2, 0x67, 0xdb, 0xff, 0x5d, 0x48, 0x79, 0x04, 0x3b, 0x21, 0xa5, 0x24, + 0x80, 0x51, 0x3f, 0xa8, 0x2a, 0xa3, 0x77, 0x35, 0x1f, 0xa3, 0xb7, 0x11, 0x54, 0x8d, 0x73, 0x65, + 0xf6, 0x15, 0xa1, 0x90, 0xc3, 0x0f, 0xde, 0x92, 0x13, 0x4a, 0x8e, 0x90, 0x4e, 0x50, 0x9e, 0x92, + 0xd5, 0xc1, 0xdb, 0xa6, 0x29, 0x08, 0xd3, 0x72, 0xc9, 0x1e, 0x8c, 0x36, 0x82, 0x28, 0x16, 0x7b, + 0x95, 0xa1, 0xbd, 0xb0, 0x2b, 0x41, 0x14, 0xf3, 0x25, 0x4c, 0x55, 0x9b, 0x41, 0x22, 0x14, 0x32, + 0xec, 0xef, 0x59, 0xa9, 0xe0, 0xcb, 0x6d, 0x27, 0x76, 0x1b, 0xab, 0xfb, 0x6c, 0xff, 0x78, 0x2d, + 0x75, 0x70, 0xf0, 0x13, 0xe6, 0xc1, 0xc1, 0xfd, 0xc3, 0xf9, 0x37, 0x0d, 0x4a, 0xf4, 0xb9, 0xcb, + 0x38, 0x2c, 0x70, 0x16, 0xc6, 0x19, 0xc3, 0x47, 0x2c, 0x98, 0x30, 0xd4, 0x93, 0x0b, 0x4a, 0x8e, + 0x31, 0x6c, 0xe5, 0x5c, 0x19, 0x40, 0x34, 0x45, 0xda, 0x9f, 0xb5, 0x60, 0xbc, 0xe2, 0xb8, 0x7b, + 0x41, 0xad, 0x46, 0xde, 0x02, 0xa5, 0x6a, 0x47, 0x1e, 0xd1, 0x88, 0xfa, 0xa9, 0xc8, 0xfb, 0x8a, + 0x84, 0xa3, 0xa2, 0x60, 0x63, 0xb8, 0xe6, 0xb8, 0x71, 0x10, 0x72, 0xb5, 0x8b, 0x62, 0x0c, 0x5f, + 0xe2, 0x10, 0x94, 0x18, 0xb6, 0x49, 0x6f, 0x39, 0x07, 0x49, 0xe1, 0x6c, 0xe4, 0xe7, 0xba, 0x46, + 0xa1, 0x49, 0x67, 0xff, 0x69, 0x19, 0xc6, 0xe5, 0x59, 0xe8, 0xb1, 0x4f, 0x33, 0x12, 0x2f, 0xbe, + 0x30, 0xd0, 0x8b, 0x8f, 0x60, 0xcc, 0xe5, 0x69, 0x54, 0x72, 0x29, 0x1d, 0x32, 0x06, 0x26, 0x15, + 0x14, 0x99, 0x59, 0x5a, 0x2d, 0xf1, 0x8d, 0x52, 0x14, 0xf9, 0x8c, 0x05, 0xa7, 0xdc, 0xc0, 0xf7, + 0xa9, 0xab, 0xed, 0xfc, 0x48, 0x1e, 0xa7, 0x7d, 0xcb, 0x69, 0xa6, 0xfa, 0xd0, 0x35, 0x83, 0xc0, + 0xac, 0x78, 0xf2, 0x22, 0x4c, 0x89, 0x36, 0xbb, 0x95, 0xda, 0x1f, 0xeb, 0xf3, 0x6f, 0x13, 0x89, + 0x69, 0x5a, 0xb2, 0x20, 0xe2, 0x0c, 0xfc, 0x40, 0x48, 0xec, 0x91, 0x65, 0xf0, 0x51, 0x9d, 0x18, + 0x45, 0x68, 0x50, 0x90, 0x10, 0x48, 0x48, 0x6b, 0x21, 0x8d, 0x1a, 0x48, 0x5f, 0xe9, 0xd0, 0x28, + 0xe6, 0x6b, 0xcc, 0xf8, 0xc3, 0x9d, 0x8d, 0x61, 0x0f, 0x27, 0xec, 0xc3, 0x9d, 0xec, 0x49, 0x47, + 0xb7, 0x94, 0xc7, 0x74, 0x92, 0xdd, 0x3c, 0xd0, 0xdf, 0x9d, 0x87, 0xd1, 0xa8, 0xe1, 0x84, 0x55, + 0xbe, 0xb6, 0x15, 0x2b, 0x65, 0x66, 0x4b, 0xb6, 0x19, 0x00, 0x05, 0x9c, 0xac, 0xc0, 0xe9, 0xcc, + 0xe9, 0x7d, 0xc4, 0x57, 0xaf, 0x52, 0x65, 0x56, 0xb2, 0x3b, 0x9d, 0x39, 0xf7, 0x8f, 0xb0, 0xa7, + 0x84, 0xb9, 0x09, 0x9a, 0x38, 0x62, 0x13, 0xd4, 0x85, 0xb1, 0xa6, 0x08, 0x04, 0x4c, 0x72, 0x53, + 0x79, 0x23, 0x97, 0x06, 0x58, 0x30, 0x03, 0x30, 0x6a, 0xb4, 0xcb, 0x80, 0x82, 0x14, 0x48, 0x3e, + 0xc5, 0x0c, 0x9a, 0x11, 0x3b, 0x98, 0xe2, 0x0a, 0xdc, 0xca, 0x47, 0x81, 0x9e, 0x50, 0x89, 0xb6, + 0x6e, 0x46, 0x20, 0xc2, 0x94, 0x3f, 0xf7, 0x93, 0x30, 0xf1, 0xb0, 0x71, 0x87, 0x97, 0xe0, 0xf4, + 0x50, 0x11, 0x87, 0xef, 0x5b, 0x90, 0xf4, 0xeb, 0xb2, 0xe3, 0x36, 0x28, 0x1b, 0x32, 0xe4, 0x25, + 0x98, 0x56, 0xdb, 0x88, 0xe5, 0xa0, 0x23, 0xe3, 0x96, 0x45, 0x1d, 0x58, 0xc6, 0x14, 0x16, 0x33, + 0xd4, 0x64, 0x11, 0xca, 0xac, 0x9d, 0x44, 0x51, 0x61, 0x76, 0xd5, 0x56, 0x65, 0x69, 0x6b, 0x4d, + 0x96, 0xd2, 0x34, 0x24, 0x80, 0x99, 0xa6, 0x13, 0xc5, 0x5c, 0x03, 0xb6, 0xab, 0x78, 0xc8, 0x93, + 0x69, 0x9e, 0xbc, 0xb4, 0x9e, 0x65, 0x84, 0xbd, 0xbc, 0xed, 0x6f, 0x8c, 0xc0, 0x54, 0xca, 0x32, + 0xb2, 0x55, 0xa5, 0x13, 0x31, 0xd7, 0x47, 0x85, 0x58, 0xd4, 0xaa, 0x72, 0x53, 0xc2, 0x51, 0x51, + 0x30, 0xea, 0xb6, 0x13, 0x45, 0x77, 0x83, 0xb0, 0x2a, 0x4d, 0xb9, 0xa2, 0xde, 0x92, 0x70, 0x54, + 0x14, 0x6c, 0x7d, 0xd9, 0xa5, 0x4e, 0x48, 0x43, 0x9e, 0xcc, 0x91, 0x5d, 0x5f, 0x2a, 0x1a, 0x85, + 0x26, 0x1d, 0x37, 0xca, 0x71, 0x33, 0x5a, 0x6e, 0x7a, 0xd4, 0x8f, 0x85, 0x9a, 0xf9, 0x18, 0xe5, + 0x9d, 0xf5, 0x6d, 0x93, 0xa9, 0x36, 0xca, 0x19, 0x04, 0x66, 0xc5, 0x93, 0x8f, 0x59, 0x30, 0xe5, + 0xdc, 0x8d, 0x74, 0xae, 0x2f, 0xb7, 0xca, 0x43, 0x2f, 0x52, 0xa9, 0xf4, 0xe1, 0xca, 0x0c, 0x33, + 0xef, 0x29, 0x10, 0xa6, 0x85, 0x92, 0x2f, 0x58, 0x40, 0xe8, 0x01, 0x75, 0xb7, 0xc2, 0x60, 0xdf, + 0xab, 0x26, 0x7d, 0x28, 0xb7, 0x3f, 0x43, 0x7a, 0xdb, 0xab, 0x3d, 0x7c, 0x85, 0x55, 0xef, 0x85, + 0x63, 0x1f, 0x1d, 0xec, 0xbf, 0x2d, 0xc2, 0x84, 0x61, 0x8c, 0xfb, 0xae, 0xac, 0xd6, 0x0f, 0xd9, + 0xca, 0x5a, 0x38, 0xc1, 0xca, 0xfa, 0x61, 0x28, 0xbb, 0x89, 0xa1, 0xc8, 0x27, 0x37, 0x39, 0x6b, + 0x7e, 0xb4, 0xad, 0x50, 0x20, 0xd4, 0x32, 0xc9, 0x65, 0x98, 0x31, 0xd8, 0x48, 0x23, 0x33, 0xc2, + 0x8d, 0x8c, 0x0a, 0x34, 0x2d, 0x65, 0x09, 0xb0, 0xb7, 0x0c, 0x79, 0x8e, 0x79, 0xb5, 0x9e, 0xac, + 0x97, 0xd8, 0xc5, 0xcb, 0xbc, 0xdf, 0xa5, 0xad, 0xb5, 0x04, 0x8c, 0x26, 0x8d, 0xfd, 0x0d, 0x4b, + 0x75, 0xee, 0x63, 0x48, 0x1a, 0xb9, 0x93, 0x4e, 0x1a, 0x59, 0xcd, 0xa5, 0x99, 0x07, 0x24, 0x8c, + 0x6c, 0xc0, 0xf8, 0x72, 0xd0, 0x6a, 0x39, 0x7e, 0x95, 0xbc, 0x01, 0xc6, 0x5d, 0xf1, 0x53, 0x6e, + 0x13, 0x79, 0x16, 0x81, 0xc4, 0x62, 0x82, 0x23, 0x4f, 0xc3, 0x88, 0x13, 0xd6, 0x93, 0xad, 0x21, + 0x3f, 0x14, 0x5b, 0x0a, 0xeb, 0x11, 0x72, 0xa8, 0xfd, 0xb9, 0x02, 0xc0, 0x72, 0xd0, 0x6a, 0x3b, + 0x21, 0xad, 0xee, 0x04, 0xff, 0x1b, 0x23, 0x16, 0x3b, 0x86, 0x4f, 0x5a, 0x40, 0x58, 0xab, 0x04, + 0x3e, 0xf5, 0xf5, 0x41, 0x1c, 0x5b, 0x2f, 0xdd, 0x04, 0x2a, 0x17, 0x1f, 0x3d, 0x07, 0x12, 0x04, + 0x6a, 0x9a, 0x63, 0xec, 0x22, 0x9e, 0x49, 0x56, 0xfc, 0x62, 0x3a, 0xc1, 0x81, 0x1f, 0x4a, 0x4b, + 0x07, 0xc0, 0xfe, 0x7c, 0x01, 0xce, 0x09, 0xb3, 0x75, 0xdd, 0xf1, 0x9d, 0x3a, 0x6d, 0x31, 0xad, + 0x8e, 0x7b, 0xda, 0xe0, 0x32, 0xf7, 0xd5, 0x4b, 0xf2, 0x19, 0x86, 0x1d, 0x9c, 0x62, 0x50, 0x89, + 0x61, 0xb4, 0xe6, 0x7b, 0x31, 0x72, 0xe6, 0x24, 0x82, 0x52, 0x72, 0xdb, 0x44, 0x1a, 0x9b, 0x9c, + 0x04, 0xa9, 0x79, 0x77, 0x59, 0xb2, 0x47, 0x25, 0xc8, 0xfe, 0x8a, 0x05, 0x59, 0x23, 0xca, 0xf7, + 0x77, 0x22, 0x23, 0x31, 0xbb, 0xbf, 0x4b, 0x27, 0x10, 0x9e, 0x20, 0x1f, 0xef, 0xbd, 0x30, 0xe1, + 0xc4, 0x31, 0x6d, 0xb5, 0xc5, 0x66, 0xa3, 0xf8, 0x70, 0x01, 0xad, 0xeb, 0x41, 0xd5, 0xab, 0x79, + 0x7c, 0x93, 0x61, 0xb2, 0xb3, 0x6f, 0x40, 0x29, 0x39, 0xc3, 0x39, 0x46, 0x67, 0x3e, 0x93, 0x72, + 0x10, 0x07, 0x0c, 0x97, 0xfb, 0x05, 0xe8, 0xb3, 0x0a, 0xb2, 0x2a, 0x6b, 0x7b, 0x91, 0xaa, 0xf2, + 0xc9, 0x6c, 0x06, 0x39, 0x10, 0xe7, 0x57, 0x22, 0x72, 0xf2, 0xae, 0xbc, 0x57, 0x71, 0x7d, 0xa4, + 0x35, 0x21, 0xf5, 0x53, 0xc7, 0x5a, 0xe4, 0x22, 0x80, 0x36, 0xf3, 0x32, 0x8f, 0x43, 0xc5, 0x5e, + 0xf5, 0x6a, 0x80, 0x06, 0x15, 0x73, 0xea, 0x3c, 0x3f, 0x8a, 0x9d, 0x66, 0xf3, 0x8a, 0xe7, 0xc7, + 0x72, 0x77, 0xaa, 0x4c, 0xc0, 0x9a, 0x46, 0xa1, 0x49, 0x37, 0xf7, 0x36, 0xa3, 0x5f, 0x4e, 0xe2, + 0xa8, 0x7f, 0xb2, 0x00, 0xd3, 0x97, 0xfd, 0xce, 0xd6, 0xe5, 0xad, 0xce, 0x6e, 0xd3, 0x73, 0xaf, + 0xd1, 0x2e, 0xeb, 0xb4, 0x3d, 0xda, 0x5d, 0x5b, 0x91, 0xcd, 0xae, 0x3a, 0xed, 0x1a, 0x03, 0xa2, + 0xc0, 0x31, 0x35, 0x6b, 0x9e, 0x5f, 0xa7, 0x61, 0x3b, 0xf4, 0xa4, 0x37, 0x6e, 0xa8, 0x79, 0x49, + 0xa3, 0xd0, 0xa4, 0x63, 0xbc, 0x83, 0xbb, 0x3e, 0x0d, 0xb3, 0xf6, 0x63, 0x93, 0x01, 0x51, 0xe0, + 0x18, 0x51, 0x1c, 0x76, 0xa2, 0x58, 0xb6, 0x98, 0x22, 0xda, 0x61, 0x40, 0x14, 0x38, 0x36, 0x3c, + 0xa2, 0xce, 0x2e, 0x8f, 0xab, 0x66, 0x4e, 0xb8, 0xb7, 0x05, 0x18, 0x13, 0x3c, 0x23, 0xdd, 0xa3, + 0xdd, 0x15, 0xb6, 0x9a, 0x66, 0x12, 0x52, 0xae, 0x09, 0x30, 0x26, 0x78, 0xfb, 0x1f, 0x2d, 0x20, + 0xe9, 0xe6, 0x78, 0x0c, 0x0b, 0xf2, 0x2b, 0xe9, 0x05, 0x79, 0xc8, 0x10, 0x78, 0x5a, 0xfd, 0x01, + 0xeb, 0xf2, 0x6f, 0x58, 0x30, 0x69, 0x9e, 0x86, 0x90, 0x7a, 0xc6, 0x10, 0x6d, 0xa6, 0x0d, 0xd1, + 0xfd, 0xc3, 0xf9, 0x9f, 0xea, 0x77, 0x19, 0xb2, 0xee, 0xc5, 0x41, 0x3b, 0x7a, 0x2b, 0xf5, 0xeb, + 0x9e, 0x4f, 0x79, 0xac, 0x4f, 0x9c, 0xa2, 0xa4, 0x8e, 0x5a, 0x96, 0x83, 0x2a, 0x7d, 0x08, 0x4b, + 0x66, 0xdf, 0x86, 0x99, 0x9e, 0x2c, 0xa4, 0x63, 0x18, 0x9d, 0x23, 0x73, 0x4c, 0xed, 0x4f, 0x59, + 0x30, 0x95, 0x4a, 0xe2, 0xca, 0xc9, 0x94, 0xf1, 0x59, 0x11, 0xf0, 0x83, 0xb4, 0xd0, 0xf3, 0x45, + 0xa4, 0xad, 0x64, 0xcc, 0x0a, 0x8d, 0x42, 0x93, 0xce, 0xfe, 0x6c, 0x01, 0x4a, 0x49, 0x4c, 0xf6, + 0x18, 0xaa, 0x7c, 0xc2, 0x82, 0x29, 0xb5, 0x35, 0xe6, 0x0e, 0x73, 0x2e, 0x89, 0x3c, 0x4c, 0x03, + 0x75, 0xda, 0xca, 0x1c, 0x66, 0xe5, 0xb9, 0xa3, 0x29, 0x0c, 0xd3, 0xb2, 0xc9, 0x2d, 0x80, 0xa8, + 0x1b, 0xc5, 0xb4, 0x65, 0xb8, 0xee, 0xb6, 0x31, 0x3b, 0x16, 0xdc, 0x20, 0xa4, 0x6c, 0x2e, 0x6c, + 0x04, 0x55, 0xba, 0xad, 0x28, 0xb5, 0x21, 0xd4, 0x30, 0x34, 0x38, 0xd9, 0xbf, 0x5b, 0x80, 0xd3, + 0x59, 0x95, 0xc8, 0x7b, 0x60, 0x32, 0x91, 0x6e, 0xdc, 0x01, 0x4d, 0x02, 0xd1, 0x93, 0x68, 0xe0, + 0xee, 0x1f, 0xce, 0xcf, 0xf7, 0x5e, 0x82, 0x5d, 0x30, 0x49, 0x30, 0xc5, 0x4c, 0xc4, 0x27, 0x64, + 0x20, 0xad, 0xd2, 0x5d, 0x6a, 0xb7, 0x65, 0x90, 0xc1, 0x88, 0x4f, 0x98, 0x58, 0xcc, 0x50, 0x93, + 0x2d, 0x38, 0x6b, 0x40, 0x36, 0xa8, 0x57, 0x6f, 0xec, 0x06, 0xa1, 0xb8, 0x6c, 0x50, 0xac, 0x3c, + 0x2d, 0xb9, 0x9c, 0xc5, 0x3e, 0x34, 0xd8, 0xb7, 0x24, 0x79, 0x0b, 0x94, 0x5c, 0xa7, 0xed, 0xb8, + 0x5e, 0xdc, 0x95, 0x7b, 0x11, 0x65, 0x47, 0x96, 0x25, 0x1c, 0x15, 0x85, 0x7d, 0x1d, 0x46, 0x8e, + 0x39, 0x82, 0x8e, 0xb5, 0x2e, 0xdf, 0x80, 0x12, 0x63, 0xc7, 0xec, 0x46, 0x5e, 0x2c, 0x03, 0x28, + 0x25, 0x77, 0x4f, 0x88, 0x0d, 0x45, 0xcf, 0x49, 0x42, 0x40, 0xaa, 0x5a, 0x6b, 0x51, 0xd4, 0xe1, + 0x5e, 0x07, 0x43, 0x92, 0x67, 0xa0, 0x48, 0x0f, 0xda, 0xd9, 0x58, 0xcf, 0xea, 0x41, 0xdb, 0x0b, + 0x69, 0xc4, 0x88, 0xe8, 0x41, 0x9b, 0xcc, 0x41, 0xc1, 0xab, 0xca, 0x05, 0x05, 0x24, 0x4d, 0x61, + 0x6d, 0x05, 0x0b, 0x5e, 0xd5, 0x3e, 0x80, 0xb2, 0xba, 0xec, 0x42, 0xf6, 0x12, 0x3b, 0x6b, 0xe5, + 0x71, 0x88, 0x92, 0xf0, 0x1d, 0x60, 0x61, 0x3b, 0x00, 0x3a, 0xfd, 0x2f, 0x2f, 0xfb, 0x72, 0x01, + 0x46, 0xdc, 0x40, 0x66, 0xda, 0x96, 0x34, 0x1b, 0x6e, 0x60, 0x39, 0xc6, 0xbe, 0x0d, 0xd3, 0xd7, + 0xfc, 0xe0, 0xae, 0xcf, 0x16, 0xbe, 0x4b, 0x1e, 0x6d, 0x56, 0x19, 0xe3, 0x1a, 0xfb, 0x91, 0x5d, + 0xce, 0x39, 0x16, 0x05, 0x4e, 0xdd, 0x08, 0x29, 0x0c, 0xba, 0x11, 0x62, 0xff, 0xb2, 0x05, 0xa7, + 0xb3, 0xa9, 0x7e, 0x3f, 0xb0, 0x1d, 0xc6, 0x47, 0x98, 0x32, 0x49, 0x2e, 0xd9, 0x66, 0x5b, 0x9c, + 0x5a, 0xbf, 0x00, 0x93, 0xbb, 0x1d, 0xaf, 0x59, 0x95, 0xdf, 0x52, 0x1f, 0x95, 0x2d, 0x57, 0x31, + 0x70, 0x98, 0xa2, 0x64, 0x7e, 0xda, 0xae, 0xe7, 0x3b, 0x61, 0x77, 0x4b, 0xaf, 0x1b, 0xca, 0x3c, + 0x55, 0x14, 0x06, 0x0d, 0x2a, 0xfb, 0xaf, 0x8b, 0xa0, 0x6f, 0xdd, 0x10, 0x4f, 0x26, 0x45, 0x58, + 0x79, 0x84, 0xad, 0xb6, 0xbb, 0xbe, 0xab, 0xef, 0xf7, 0x94, 0x32, 0x39, 0x11, 0x1f, 0xb7, 0x98, + 0x87, 0xe8, 0xc5, 0x9e, 0xc3, 0x8d, 0x85, 0xdc, 0x28, 0x6d, 0xe5, 0x74, 0x6e, 0xbe, 0x26, 0x38, + 0x07, 0xa1, 0xe9, 0x73, 0x2a, 0x61, 0x68, 0x4a, 0x26, 0x2f, 0xcb, 0x93, 0x86, 0x62, 0x6e, 0x29, + 0x35, 0xa5, 0xcc, 0xf1, 0x42, 0x1b, 0x46, 0x43, 0x1a, 0x87, 0x49, 0x32, 0xd3, 0xb5, 0x61, 0xcf, + 0x5d, 0xe3, 0xb0, 0xbb, 0x1d, 0xb3, 0xcd, 0x58, 0xdd, 0x70, 0x8c, 0x38, 0x18, 0x85, 0x20, 0x3b, + 0x02, 0xd2, 0xdb, 0x16, 0x27, 0x8c, 0xe2, 0x2e, 0x42, 0xd9, 0xe9, 0xc4, 0x41, 0x8b, 0x35, 0x13, + 0xef, 0x9e, 0x92, 0x11, 0xa7, 0x4e, 0x10, 0xa8, 0x69, 0xec, 0xd7, 0x46, 0x21, 0x93, 0xa5, 0x40, + 0x0e, 0xcc, 0x1b, 0x63, 0x56, 0xbe, 0x37, 0xc6, 0x94, 0x32, 0xfd, 0x6e, 0x8d, 0x91, 0x3a, 0x8c, + 0xb6, 0x1b, 0x4e, 0x94, 0xcc, 0xd1, 0x1b, 0x49, 0x33, 0x6d, 0x31, 0xe0, 0xfd, 0xc3, 0xf9, 0x9f, + 0x3e, 0x9e, 0x1f, 0xc8, 0xc6, 0xea, 0xa2, 0x48, 0xd9, 0xd4, 0xa2, 0x39, 0x0f, 0x14, 0xfc, 0x4d, + 0x4f, 0xb0, 0x78, 0xc4, 0x9e, 0xf6, 0xa3, 0x96, 0x48, 0x6d, 0x43, 0x1a, 0x75, 0x9a, 0xb1, 0x1c, + 0x0d, 0x37, 0x72, 0x9c, 0x65, 0x82, 0xb1, 0xce, 0x71, 0x13, 0xdf, 0x68, 0x08, 0x25, 0xef, 0x81, + 0x72, 0x14, 0x3b, 0x61, 0xfc, 0x90, 0x19, 0x31, 0xaa, 0xd1, 0xb7, 0x13, 0x26, 0xa8, 0xf9, 0x91, + 0x77, 0x03, 0xd4, 0x3c, 0xdf, 0x8b, 0x1a, 0x0f, 0x79, 0x40, 0xc8, 0x15, 0xbf, 0xa4, 0x38, 0xa0, + 0xc1, 0x8d, 0x59, 0x37, 0x3e, 0xb6, 0x45, 0x48, 0xb3, 0xc4, 0xd7, 0x52, 0x65, 0xdd, 0x50, 0x61, + 0xd0, 0xa0, 0xb2, 0x3f, 0x04, 0x67, 0xb2, 0xb7, 0xb5, 0xe5, 0xd6, 0xb0, 0x1e, 0x06, 0x9d, 0x76, + 0x76, 0x2d, 0xe1, 0xb7, 0x79, 0x51, 0xe0, 0x98, 0x8d, 0xdf, 0xf3, 0xfc, 0x6a, 0xd6, 0xc6, 0x5f, + 0xf3, 0xfc, 0x2a, 0x72, 0xcc, 0x31, 0xae, 0xd2, 0xfd, 0xb1, 0x05, 0x17, 0x8e, 0xba, 0x54, 0xce, + 0xb6, 0xfd, 0x77, 0x9d, 0xd0, 0x97, 0xd7, 0x64, 0xb8, 0xed, 0xb8, 0xed, 0x84, 0x3e, 0x72, 0x28, + 0xe9, 0xc2, 0x98, 0xc8, 0x02, 0x94, 0xde, 0xf1, 0x8d, 0x7c, 0xaf, 0xb8, 0xb3, 0xbd, 0x95, 0x8a, + 0xd6, 0x88, 0x0c, 0x44, 0x94, 0x02, 0xed, 0xd7, 0x2c, 0x20, 0x9b, 0xfb, 0x34, 0x0c, 0xbd, 0xaa, + 0x91, 0xb7, 0x48, 0x9e, 0x87, 0xc9, 0x3b, 0xdb, 0x9b, 0x1b, 0x5b, 0x81, 0xe7, 0xf3, 0xf4, 0x7b, + 0x23, 0x5b, 0xe6, 0xaa, 0x01, 0xc7, 0x14, 0x15, 0x59, 0x86, 0x99, 0x3b, 0xaf, 0xb0, 0x25, 0x67, + 0xf5, 0xa0, 0x1d, 0xd2, 0x28, 0x52, 0x0f, 0x43, 0x94, 0xc5, 0xc1, 0xd4, 0xd5, 0x1b, 0x19, 0x24, + 0xf6, 0xd2, 0xdb, 0x5f, 0x2e, 0xc0, 0x84, 0xf1, 0x8e, 0xc2, 0x31, 0xfc, 0x91, 0xcc, 0xd3, 0x0f, + 0x85, 0x63, 0x3e, 0xfd, 0xf0, 0x2c, 0x94, 0xda, 0x41, 0xd3, 0x73, 0x3d, 0x95, 0x57, 0x3f, 0xc9, + 0x4f, 0xaf, 0x24, 0x0c, 0x15, 0x96, 0xdc, 0x85, 0xb2, 0xba, 0x10, 0x2d, 0x33, 0xed, 0xf2, 0xf2, + 0xc8, 0xd4, 0x5c, 0xd3, 0x17, 0x9d, 0xb5, 0x2c, 0x62, 0xc3, 0x18, 0x1f, 0xa8, 0x49, 0x6c, 0x9e, + 0xa7, 0x6e, 0xf0, 0x11, 0x1c, 0xa1, 0xc4, 0xd8, 0xff, 0x32, 0x0a, 0x65, 0xa4, 0xed, 0x60, 0x39, + 0xa4, 0xd5, 0x88, 0xbc, 0x1e, 0x8a, 0x9d, 0xb0, 0x29, 0x1b, 0x4b, 0x85, 0x79, 0x6e, 0xe2, 0x3a, + 0x32, 0x78, 0x6a, 0x75, 0x28, 0x9c, 0xe8, 0x8c, 0xaf, 0x78, 0xe4, 0x19, 0xdf, 0x8b, 0x30, 0x15, + 0x45, 0x8d, 0xad, 0xd0, 0xdb, 0x77, 0x62, 0x36, 0xe6, 0x64, 0x4c, 0x44, 0x1f, 0xaa, 0x6c, 0x5f, + 0xd1, 0x48, 0x4c, 0xd3, 0x92, 0xcb, 0x30, 0xa3, 0x4f, 0xda, 0x68, 0x18, 0xf3, 0x10, 0x88, 0x88, + 0x96, 0xa8, 0x33, 0x0d, 0x7d, 0x36, 0x27, 0x09, 0xb0, 0xb7, 0x0c, 0x59, 0x81, 0xd3, 0x29, 0x20, + 0x53, 0x44, 0x84, 0x52, 0xd4, 0x29, 0x7e, 0x8a, 0x0f, 0xd3, 0xa5, 0xa7, 0x04, 0xb9, 0x0e, 0x67, + 0x44, 0xff, 0xf2, 0x8b, 0xf4, 0xaa, 0x46, 0xe3, 0x9c, 0xd1, 0xff, 0x91, 0x8c, 0xce, 0x5c, 0xee, + 0x25, 0xc1, 0x7e, 0xe5, 0xd8, 0x08, 0x55, 0xe0, 0xb5, 0x15, 0x69, 0xd8, 0xd4, 0x08, 0x55, 0x6c, + 0xd6, 0xaa, 0x68, 0xd2, 0x91, 0x77, 0xc1, 0x53, 0xfa, 0x53, 0x44, 0xd0, 0xc4, 0x6a, 0xbf, 0x22, + 0x93, 0x18, 0xe6, 0x25, 0x8b, 0xa7, 0x2e, 0xf7, 0x25, 0xab, 0xe2, 0xa0, 0xf2, 0x64, 0x17, 0xe6, + 0x14, 0x6a, 0x95, 0xcd, 0xde, 0x76, 0xe8, 0x45, 0xb4, 0xe2, 0x44, 0xf4, 0x66, 0xd8, 0xe4, 0x69, + 0x0f, 0x65, 0xfd, 0x18, 0xc4, 0x65, 0x2f, 0xbe, 0xd2, 0x8f, 0x12, 0xd7, 0xf1, 0x01, 0x5c, 0x98, + 0x73, 0x41, 0x7d, 0x67, 0xb7, 0x49, 0x37, 0x97, 0xd7, 0x78, 0x32, 0x84, 0xe1, 0x5c, 0xac, 0x26, + 0x08, 0xd4, 0x34, 0xca, 0xb5, 0x9f, 0x1c, 0xe8, 0xda, 0x7f, 0xcb, 0x82, 0x29, 0x35, 0xd8, 0x1f, + 0x43, 0xbc, 0xab, 0x99, 0x8e, 0x77, 0x5d, 0x1e, 0xd6, 0xab, 0x93, 0x9a, 0x0f, 0xd8, 0x88, 0x7d, + 0xaf, 0x0c, 0xc0, 0x9f, 0xd7, 0xf1, 0x78, 0x92, 0xed, 0x05, 0x18, 0x09, 0x69, 0x3b, 0xc8, 0x5a, + 0x3e, 0x46, 0x81, 0x1c, 0xf3, 0xc3, 0x3b, 0x9d, 0xfb, 0x9d, 0xf9, 0x8e, 0xfe, 0x60, 0xcf, 0x7c, + 0xb7, 0xe1, 0x49, 0xcf, 0x8f, 0xa8, 0xdb, 0x09, 0xe5, 0x42, 0x77, 0x25, 0x88, 0x94, 0x75, 0x28, + 0x55, 0x5e, 0x2f, 0x19, 0x3d, 0xb9, 0xd6, 0x8f, 0x08, 0xfb, 0x97, 0x65, 0x4d, 0x9a, 0x20, 0xe4, + 0x6d, 0x1e, 0x1d, 0x1e, 0x90, 0x70, 0x54, 0x14, 0x7a, 0x42, 0xac, 0xd7, 0x92, 0xeb, 0x3a, 0x99, + 0x09, 0xb1, 0x7e, 0x69, 0x1b, 0x35, 0x4d, 0x7f, 0xab, 0x58, 0xce, 0xc9, 0x2a, 0xc2, 0x89, 0xad, + 0x62, 0x32, 0x3f, 0x27, 0x06, 0x3e, 0xc6, 0x90, 0x2c, 0xd6, 0x93, 0x03, 0x17, 0xeb, 0x97, 0x60, + 0xda, 0xf3, 0x1b, 0x34, 0xf4, 0x62, 0x5a, 0xe5, 0x73, 0x61, 0x76, 0x8a, 0x37, 0x84, 0x8a, 0x5c, + 0xad, 0xa5, 0xb0, 0x98, 0xa1, 0x4e, 0x1b, 0x95, 0xe9, 0x63, 0x18, 0x95, 0x01, 0xa6, 0xfc, 0x54, + 0x3e, 0xa6, 0xfc, 0xf4, 0xf0, 0xa6, 0x7c, 0xe6, 0x91, 0x9a, 0x72, 0x92, 0x8b, 0x29, 0x7f, 0x06, + 0x46, 0xdb, 0x61, 0x70, 0xd0, 0x9d, 0x3d, 0x93, 0xf6, 0xa6, 0xb7, 0x18, 0x10, 0x05, 0xce, 0x4c, + 0x7d, 0x3b, 0xfb, 0xe0, 0xd4, 0x37, 0xfb, 0xd5, 0x02, 0x3c, 0xa9, 0x2d, 0x1d, 0x1b, 0x5f, 0x5e, + 0x8d, 0xcd, 0x75, 0x7e, 0xa7, 0x52, 0xa4, 0x5b, 0x18, 0x41, 0x53, 0x1d, 0x7f, 0x55, 0x18, 0x34, + 0xa8, 0x78, 0xec, 0x91, 0x86, 0x3c, 0x61, 0x37, 0x6b, 0x06, 0x97, 0x25, 0x1c, 0x15, 0x05, 0x7f, + 0x9b, 0x8f, 0x86, 0xb1, 0x3c, 0x7b, 0xc9, 0xe6, 0x22, 0x2d, 0x6b, 0x14, 0x9a, 0x74, 0xcc, 0x5d, + 0x74, 0x93, 0x29, 0xc8, 0x4c, 0xe1, 0xa4, 0x70, 0x17, 0xd5, 0xac, 0x53, 0xd8, 0x44, 0x1d, 0x1e, + 0x64, 0x1e, 0xed, 0x55, 0x87, 0x07, 0x0d, 0x14, 0x85, 0xfd, 0x5f, 0x16, 0xbc, 0xae, 0x6f, 0x53, + 0x3c, 0x86, 0xe5, 0xed, 0x20, 0xbd, 0xbc, 0x6d, 0x0f, 0xbf, 0xbc, 0xf5, 0xd4, 0x62, 0xc0, 0x52, + 0xf7, 0x37, 0x16, 0x4c, 0x6b, 0xfa, 0xc7, 0x50, 0x55, 0x2f, 0xd7, 0x57, 0xf6, 0xb4, 0xea, 0x22, + 0x91, 0x34, 0x55, 0xb7, 0x6f, 0xf1, 0xba, 0x89, 0xbd, 0xd7, 0x92, 0x9b, 0x3c, 0x63, 0x73, 0xc4, + 0x26, 0xa6, 0x0b, 0x63, 0xfc, 0xe2, 0x71, 0x94, 0xcf, 0x1e, 0x30, 0x2d, 0x9f, 0x87, 0x41, 0xf5, + 0x1e, 0x90, 0x7f, 0x46, 0x28, 0x05, 0xf2, 0x74, 0x72, 0x2f, 0x62, 0xf6, 0xb2, 0x2a, 0xc3, 0xb5, + 0x3a, 0x9d, 0x5c, 0xc2, 0x51, 0x51, 0xd8, 0x2d, 0x98, 0x4d, 0x33, 0x5f, 0xa1, 0x35, 0x1e, 0x6a, + 0x3b, 0x56, 0x35, 0x17, 0xa1, 0xec, 0xf0, 0x52, 0xeb, 0x1d, 0x27, 0xfb, 0x96, 0xcd, 0x52, 0x82, + 0x40, 0x4d, 0x63, 0xff, 0x8e, 0x05, 0x67, 0xfa, 0x54, 0x26, 0xc7, 0x30, 0x75, 0xac, 0xad, 0xc0, + 0x80, 0xf7, 0x85, 0xaa, 0xb4, 0xe6, 0x24, 0xc1, 0x1c, 0xc3, 0xaa, 0xad, 0x08, 0x30, 0x26, 0x78, + 0xfb, 0x5f, 0x2d, 0x38, 0x95, 0xd6, 0x35, 0x22, 0x57, 0x81, 0x88, 0xca, 0xac, 0x78, 0x91, 0x1b, + 0xec, 0xd3, 0xb0, 0xcb, 0x6a, 0x2e, 0xb4, 0x9e, 0x93, 0x9c, 0xc8, 0x52, 0x0f, 0x05, 0xf6, 0x29, + 0xc5, 0xb3, 0x76, 0xab, 0xaa, 0xb5, 0x93, 0x91, 0x72, 0x2b, 0xcf, 0x91, 0xa2, 0x3b, 0xd3, 0xdc, + 0x41, 0x2b, 0x91, 0x68, 0xca, 0xb7, 0xbf, 0x3d, 0x02, 0xea, 0x1c, 0x8b, 0x87, 0x0d, 0x72, 0x0a, + 0xba, 0xa4, 0x1e, 0x3c, 0x2a, 0x9e, 0xe0, 0xc1, 0xa3, 0x91, 0x07, 0xc5, 0x08, 0xc4, 0xeb, 0x3b, + 0xda, 0x17, 0x35, 0x8c, 0xfe, 0x8e, 0x46, 0xa1, 0x49, 0xc7, 0x34, 0x69, 0x7a, 0xfb, 0x54, 0x14, + 0x1a, 0x4b, 0x6b, 0xb2, 0x9e, 0x20, 0x50, 0xd3, 0x30, 0x4d, 0xaa, 0x5e, 0xad, 0x26, 0x77, 0x8a, + 0x4a, 0x13, 0xd6, 0x3a, 0xc8, 0x31, 0x8c, 0xa2, 0x11, 0x04, 0x7b, 0xd2, 0xff, 0x53, 0x14, 0x57, + 0x82, 0x60, 0x0f, 0x39, 0x86, 0x79, 0x2c, 0x7e, 0x10, 0xb6, 0x9c, 0xa6, 0xf7, 0x7e, 0x5a, 0x55, + 0x52, 0xa4, 0xdf, 0xa7, 0x3c, 0x96, 0x8d, 0x5e, 0x12, 0xec, 0x57, 0x8e, 0x8d, 0xc0, 0x76, 0x48, + 0xab, 0x9e, 0x1b, 0x9b, 0xdc, 0x20, 0x3d, 0x02, 0xb7, 0x7a, 0x28, 0xb0, 0x4f, 0x29, 0xb2, 0x04, + 0xa7, 0x92, 0x73, 0xc8, 0x24, 0x57, 0x44, 0x38, 0x83, 0xca, 0x0f, 0xc7, 0x34, 0x1a, 0xb3, 0xf4, + 0xcc, 0xda, 0xb4, 0x64, 0xc6, 0x0e, 0x77, 0x13, 0x0d, 0x6b, 0x93, 0x64, 0xf2, 0xa0, 0xa2, 0xb0, + 0x7f, 0xaf, 0xc0, 0x56, 0xc7, 0x01, 0xf7, 0x6a, 0x1f, 0x5b, 0x90, 0x2f, 0x3d, 0x22, 0x47, 0x8e, + 0x31, 0x22, 0x9f, 0x87, 0xc9, 0x3b, 0x51, 0xe0, 0xab, 0x00, 0xda, 0xe8, 0xc0, 0x00, 0x9a, 0x41, + 0xd5, 0x3f, 0x80, 0x36, 0x76, 0xc2, 0x00, 0xda, 0x9f, 0x8f, 0xc2, 0x39, 0x75, 0x74, 0x4c, 0xe3, + 0xbb, 0x41, 0xb8, 0xe7, 0xf9, 0x75, 0x7e, 0xdc, 0xfa, 0x25, 0x0b, 0x26, 0xc5, 0xf0, 0x96, 0x2f, + 0x10, 0x88, 0xe3, 0xc5, 0x5a, 0x4e, 0x97, 0xc4, 0x52, 0xc2, 0x16, 0x76, 0x0c, 0x41, 0x99, 0xe7, + 0x20, 0x4c, 0x14, 0xa6, 0x34, 0x22, 0x1f, 0x04, 0x48, 0x9e, 0xc9, 0xaa, 0xe5, 0xf4, 0x58, 0x58, + 0xa2, 0x1f, 0xd2, 0x9a, 0x76, 0x25, 0x77, 0x94, 0x10, 0x34, 0x04, 0x92, 0x57, 0x2d, 0x75, 0x29, + 0x43, 0x9c, 0x15, 0xbd, 0xfc, 0x48, 0xda, 0xe6, 0x38, 0x77, 0x34, 0x10, 0xc6, 0x3d, 0xbf, 0xce, + 0xba, 0x55, 0xc6, 0x1c, 0xdf, 0xd4, 0x2f, 0x55, 0x61, 0x3d, 0x70, 0xaa, 0x15, 0xa7, 0xe9, 0xf8, + 0x2e, 0x0d, 0xd7, 0x04, 0xb9, 0xf9, 0x58, 0x11, 0x07, 0x60, 0xc2, 0xa8, 0xe7, 0x16, 0xe4, 0xe8, + 0x71, 0x6e, 0x41, 0xce, 0xbd, 0x13, 0x66, 0x7a, 0x3a, 0xf3, 0x44, 0x77, 0x34, 0x1e, 0xfe, 0x7a, + 0x87, 0xfd, 0x27, 0x63, 0x7a, 0x8d, 0xd9, 0x08, 0xaa, 0xe2, 0x2e, 0x5e, 0xa8, 0x7b, 0x54, 0xba, + 0x8a, 0x39, 0x0e, 0x11, 0xe3, 0xc1, 0x23, 0x05, 0x44, 0x53, 0x24, 0x1b, 0xa3, 0x6d, 0x27, 0xa4, + 0xfe, 0xa3, 0x1e, 0xa3, 0x5b, 0x4a, 0x08, 0x1a, 0x02, 0x49, 0x23, 0x75, 0x98, 0x79, 0x69, 0xf8, + 0xc3, 0x4c, 0xe6, 0xbd, 0xf6, 0xbd, 0x33, 0xf5, 0x19, 0x0b, 0xa6, 0xfd, 0xd4, 0xc8, 0x95, 0x07, + 0x5a, 0x3b, 0x8f, 0x62, 0x56, 0x88, 0x3b, 0xd0, 0x69, 0x18, 0x66, 0xe4, 0xf7, 0x5b, 0x81, 0x46, + 0x4f, 0xb8, 0x02, 0xe9, 0x4b, 0xbd, 0x63, 0x83, 0x2e, 0xf5, 0x12, 0x5f, 0x5d, 0xe7, 0x1f, 0xcf, + 0xfd, 0x3a, 0x3f, 0xf4, 0xb9, 0xca, 0x7f, 0x1b, 0xca, 0x6e, 0x48, 0x9d, 0xf8, 0x21, 0x6f, 0x76, + 0xf3, 0x27, 0xe6, 0x96, 0x13, 0x06, 0xa8, 0x79, 0xd9, 0x7f, 0x55, 0x84, 0xd3, 0x49, 0x8b, 0x24, + 0x07, 0x3d, 0x6c, 0x39, 0x13, 0x72, 0xb5, 0x2f, 0xaa, 0x96, 0xb3, 0x2b, 0x09, 0x02, 0x35, 0x0d, + 0x73, 0x9f, 0x3a, 0x11, 0xdd, 0x6c, 0x53, 0x7f, 0xdd, 0xdb, 0x8d, 0x78, 0x8b, 0x1b, 0xd9, 0x62, + 0x37, 0x35, 0x0a, 0x4d, 0x3a, 0xe6, 0x3b, 0x0b, 0x37, 0x36, 0xca, 0x9e, 0x9b, 0x4a, 0xf7, 0x18, + 0x13, 0x3c, 0xf9, 0x62, 0xdf, 0x77, 0x39, 0xf2, 0xc9, 0x18, 0xe8, 0x39, 0xdf, 0x3a, 0xe1, 0x83, + 0x1c, 0xaf, 0x59, 0x70, 0x6a, 0x2f, 0x95, 0xaa, 0x92, 0x98, 0xe4, 0x21, 0x13, 0x20, 0xd3, 0xf9, + 0x2f, 0x7a, 0x08, 0xa7, 0xe1, 0x11, 0x66, 0xa5, 0xdb, 0xff, 0x61, 0x81, 0x69, 0x9e, 0x8e, 0xe7, + 0x08, 0x19, 0x2f, 0x2d, 0x15, 0x8e, 0x78, 0x69, 0x29, 0xf1, 0x99, 0x8a, 0xc7, 0xf3, 0xd1, 0x47, + 0x4e, 0xe0, 0xa3, 0x8f, 0x0e, 0x74, 0xb2, 0x5e, 0x0f, 0xc5, 0x8e, 0x57, 0x95, 0x6e, 0xb6, 0x3e, + 0xbb, 0x5a, 0x5b, 0x41, 0x06, 0xb7, 0xff, 0x68, 0x54, 0x6f, 0xab, 0xe5, 0x41, 0xf7, 0x8f, 0x44, + 0xb5, 0x6b, 0x2a, 0x9f, 0x55, 0xd4, 0x7c, 0xa3, 0x27, 0x9f, 0xf5, 0x1d, 0x27, 0xcf, 0x63, 0x10, + 0x0d, 0x34, 0x28, 0x9d, 0x75, 0xfc, 0x88, 0x24, 0x86, 0x3b, 0x50, 0x62, 0x3b, 0x11, 0x1e, 0x1f, + 0x2b, 0xa5, 0x94, 0x2a, 0x5d, 0x91, 0xf0, 0xfb, 0x87, 0xf3, 0x6f, 0x3f, 0xb9, 0x5a, 0x49, 0x69, + 0x54, 0xfc, 0x49, 0x04, 0x65, 0xf6, 0x9b, 0xe7, 0x5b, 0xc8, 0x3d, 0xce, 0x4d, 0x65, 0x8b, 0x12, + 0x44, 0x2e, 0xc9, 0x1c, 0x5a, 0x0e, 0xf1, 0xa1, 0xcc, 0xdf, 0x04, 0xe2, 0x42, 0xc5, 0x56, 0x68, + 0x4b, 0x65, 0x3d, 0x24, 0x88, 0xfb, 0x87, 0xf3, 0x2f, 0x9e, 0x5c, 0xa8, 0x2a, 0x8e, 0x5a, 0x84, + 0xfd, 0xdd, 0xa2, 0x1e, 0xbb, 0x32, 0x8d, 0xf9, 0x47, 0x62, 0xec, 0xbe, 0x90, 0x19, 0xbb, 0x17, + 0x7a, 0xc6, 0xee, 0xb4, 0x7e, 0x37, 0x27, 0x35, 0x1a, 0x1f, 0xf7, 0x02, 0x7b, 0xf4, 0xb6, 0x9b, + 0x7b, 0x16, 0xaf, 0x74, 0xbc, 0x90, 0x46, 0x5b, 0x61, 0xc7, 0xf7, 0xfc, 0x3a, 0x1f, 0x8e, 0x25, + 0xd3, 0xb3, 0x48, 0xa1, 0x31, 0x4b, 0x6f, 0x7f, 0x99, 0x1f, 0x4f, 0x1a, 0xa9, 0x5b, 0xac, 0x97, + 0x9b, 0xfc, 0x59, 0x25, 0x91, 0x3c, 0xaa, 0x7a, 0x59, 0xbc, 0xa5, 0x24, 0x70, 0xe4, 0x2e, 0x8c, + 0xef, 0x8a, 0xa7, 0x1d, 0xf2, 0xb9, 0x4b, 0x24, 0xdf, 0x89, 0xe0, 0xb7, 0x36, 0x93, 0x47, 0x23, + 0xee, 0xeb, 0x9f, 0x98, 0x48, 0xb3, 0x7f, 0xad, 0x08, 0xa7, 0x32, 0x8f, 0xfe, 0xb0, 0xfd, 0x79, + 0xf2, 0xc2, 0x53, 0x36, 0x98, 0xae, 0x5e, 0x32, 0x56, 0x14, 0xe4, 0x7d, 0x00, 0x55, 0xda, 0x6e, + 0x06, 0x5d, 0xee, 0xb8, 0x8c, 0x9c, 0xd8, 0x71, 0x51, 0xbe, 0xee, 0x8a, 0xe2, 0x82, 0x06, 0x47, + 0x99, 0x31, 0x3b, 0x2a, 0x1e, 0xae, 0x48, 0x67, 0xcc, 0x1a, 0x57, 0xea, 0xc6, 0x1e, 0xef, 0x95, + 0x3a, 0x0f, 0x4e, 0x09, 0x15, 0x55, 0x82, 0xd4, 0x43, 0xe4, 0x41, 0x9d, 0x61, 0x23, 0x6a, 0x25, + 0xcd, 0x06, 0xb3, 0x7c, 0xed, 0x4f, 0x17, 0x98, 0xfb, 0x26, 0x1a, 0xfb, 0x7a, 0x12, 0xcb, 0x7e, + 0x23, 0x8c, 0x39, 0x9d, 0xb8, 0x11, 0xf4, 0x3c, 0xb5, 0xb1, 0xc4, 0xa1, 0x28, 0xb1, 0x64, 0x1d, + 0x46, 0xaa, 0x4e, 0x9c, 0xbc, 0xc4, 0x7f, 0x12, 0xe5, 0x74, 0xe0, 0xca, 0x89, 0x29, 0x72, 0x2e, + 0xe4, 0x69, 0x18, 0x89, 0x9d, 0x7a, 0xea, 0x0d, 0xd0, 0x1d, 0xa7, 0x1e, 0x21, 0x87, 0x9a, 0xab, + 0xcb, 0xc8, 0x11, 0xab, 0xcb, 0x8b, 0xc6, 0x7f, 0x44, 0x18, 0x87, 0x24, 0xbd, 0xff, 0xeb, 0x20, + 0x72, 0xf8, 0x53, 0xb4, 0xf6, 0x8f, 0xc1, 0xa4, 0xf9, 0xbf, 0x0f, 0xc7, 0xba, 0x02, 0x64, 0xff, + 0xf3, 0x08, 0x4c, 0xa5, 0x92, 0xe8, 0x52, 0xa3, 0xdc, 0x3a, 0x72, 0x94, 0xf3, 0xe3, 0xaf, 0x8e, + 0x4f, 0x65, 0x8a, 0xa4, 0x71, 0xfc, 0xd5, 0xf1, 0x29, 0x0a, 0x1c, 0xeb, 0x95, 0x6a, 0xd8, 0xc5, + 0x8e, 0x2f, 0x83, 0xe8, 0xaa, 0x57, 0x56, 0x38, 0x14, 0x25, 0x96, 0x6d, 0x60, 0x27, 0x23, 0x6e, + 0x14, 0x85, 0x8d, 0x90, 0xb3, 0xe6, 0x6a, 0x1e, 0xcf, 0x93, 0xc9, 0x84, 0x51, 0xbe, 0xa1, 0x37, + 0x21, 0x98, 0x92, 0x48, 0x3e, 0x66, 0x99, 0x0f, 0xb3, 0x8d, 0xe5, 0x71, 0xf8, 0x93, 0xcd, 0x51, + 0x14, 0x33, 0xe8, 0xc1, 0xef, 0xb3, 0x45, 0x6a, 0x02, 0x8f, 0x3f, 0x9a, 0x09, 0x0c, 0x7d, 0x26, + 0xef, 0x9b, 0xa1, 0xdc, 0x72, 0x7c, 0xaf, 0x46, 0xa3, 0x58, 0xfc, 0x67, 0x4b, 0x59, 0xec, 0x9e, + 0xae, 0x27, 0x40, 0xd4, 0x78, 0xfe, 0xcf, 0x48, 0xbc, 0x62, 0x62, 0x13, 0x53, 0x36, 0xfe, 0x19, + 0x49, 0x83, 0xd1, 0xa4, 0xb1, 0x7f, 0xdf, 0x82, 0x27, 0xfb, 0x36, 0xc6, 0x0f, 0x6f, 0xb4, 0xd2, + 0xfe, 0x83, 0x02, 0x9c, 0xe9, 0x93, 0x64, 0x4a, 0xba, 0x8f, 0xec, 0xfd, 0x3e, 0x99, 0xc5, 0x3a, + 0x35, 0x70, 0x6c, 0x9c, 0x6c, 0x19, 0xd2, 0x4b, 0x41, 0xf1, 0xb1, 0x2e, 0x05, 0xf6, 0x97, 0x0b, + 0x60, 0xbc, 0x34, 0x49, 0x3e, 0x64, 0xe6, 0x53, 0x5b, 0x79, 0xe5, 0xfe, 0x0a, 0xe6, 0x2a, 0x1f, + 0x5b, 0xb4, 0x5a, 0xbf, 0xf4, 0xec, 0xec, 0x78, 0x2d, 0x1c, 0x3d, 0x5e, 0x49, 0x33, 0x49, 0x5c, + 0x2f, 0xe6, 0x9f, 0xb8, 0x5e, 0xee, 0x49, 0x5a, 0xff, 0x15, 0x4b, 0x8c, 0xb4, 0x4c, 0x95, 0xb4, + 0x85, 0xb5, 0x1e, 0x60, 0x61, 0xdf, 0x02, 0xa5, 0x88, 0x36, 0x6b, 0xcc, 0xb3, 0x93, 0x96, 0x58, + 0x8d, 0x89, 0x6d, 0x09, 0x47, 0x45, 0xc1, 0xaf, 0xb4, 0x36, 0x9b, 0xc1, 0xdd, 0xd5, 0x56, 0x3b, + 0xee, 0x4a, 0x9b, 0xac, 0xaf, 0xb4, 0x2a, 0x0c, 0x1a, 0x54, 0xf6, 0x7f, 0x5a, 0xa2, 0x3b, 0xa5, + 0x8f, 0xfe, 0x42, 0xe6, 0xaa, 0xe1, 0xf1, 0xdd, 0xdb, 0x9f, 0x07, 0x70, 0xd5, 0xe5, 0xff, 0x7c, + 0x1e, 0xa0, 0xd4, 0x8f, 0x09, 0x98, 0xaf, 0x22, 0x26, 0x30, 0x34, 0xe4, 0xa5, 0x26, 0x4f, 0xf1, + 0xa8, 0xc9, 0x63, 0xff, 0x9b, 0x05, 0xa9, 0xc5, 0x82, 0xb4, 0x61, 0x94, 0x69, 0xd0, 0xcd, 0xe7, + 0xa9, 0x02, 0x93, 0x35, 0x9b, 0x58, 0x72, 0x58, 0xf0, 0x9f, 0x28, 0x04, 0x91, 0xa6, 0xf4, 0xce, + 0x0b, 0x79, 0x3c, 0xa7, 0x61, 0x0a, 0x64, 0xfe, 0xbd, 0xfc, 0x17, 0x0c, 0xe5, 0xe9, 0xdb, 0x2f, + 0xc0, 0x4c, 0x8f, 0x52, 0xfc, 0xf2, 0x51, 0x90, 0xbc, 0xcf, 0x60, 0x8c, 0x40, 0x7e, 0x15, 0x12, + 0x05, 0x8e, 0x39, 0xf8, 0xa7, 0xb3, 0xec, 0xc9, 0x17, 0x2c, 0x98, 0x89, 0xb2, 0xfc, 0x1e, 0x55, + 0xdb, 0xa9, 0xc8, 0x55, 0x0f, 0x0a, 0x7b, 0x95, 0xb0, 0xff, 0x42, 0x9a, 0x27, 0xf1, 0xaf, 0x61, + 0x6a, 0x71, 0xb1, 0x06, 0x2e, 0x2e, 0x6c, 0x8a, 0xb9, 0x0d, 0x5a, 0xed, 0x34, 0x7b, 0x52, 0x69, + 0xb6, 0x25, 0x1c, 0x15, 0x45, 0xea, 0x21, 0xba, 0xe2, 0x91, 0x0f, 0xd1, 0x3d, 0x0f, 0x93, 0xe6, + 0x1b, 0x24, 0x3c, 0x84, 0x26, 0x0f, 0x1f, 0xcc, 0xe7, 0x4a, 0x30, 0x45, 0x95, 0x79, 0xc8, 0x6c, + 0xf4, 0xc8, 0x87, 0xcc, 0x9e, 0x85, 0x92, 0x7c, 0x94, 0x2b, 0x89, 0xef, 0x8a, 0x3c, 0x1d, 0x09, + 0x43, 0x85, 0x65, 0x06, 0xa2, 0xe5, 0xf8, 0x1d, 0xa7, 0xc9, 0x5a, 0x48, 0xa6, 0xef, 0xa9, 0x99, + 0x75, 0x5d, 0x61, 0xd0, 0xa0, 0xb2, 0xff, 0xc9, 0x82, 0xec, 0x1b, 0x41, 0xa9, 0x24, 0x40, 0xeb, + 0xc8, 0x24, 0xc0, 0x74, 0x82, 0x53, 0xe1, 0x58, 0x09, 0x4e, 0x66, 0xee, 0x51, 0xf1, 0x81, 0xb9, + 0x47, 0x6f, 0xd0, 0x17, 0xc8, 0x45, 0x92, 0xd2, 0x44, 0xbf, 0xcb, 0xe3, 0xc4, 0x86, 0x31, 0xd7, + 0x51, 0x39, 0xd6, 0x93, 0xc2, 0x51, 0x5a, 0x5e, 0xe2, 0x44, 0x12, 0x53, 0x59, 0xf8, 0xea, 0x77, + 0xce, 0x3f, 0xf1, 0xb5, 0xef, 0x9c, 0x7f, 0xe2, 0x9b, 0xdf, 0x39, 0xff, 0xc4, 0x47, 0xee, 0x9d, + 0xb7, 0xbe, 0x7a, 0xef, 0xbc, 0xf5, 0xb5, 0x7b, 0xe7, 0xad, 0x6f, 0xde, 0x3b, 0x6f, 0x7d, 0xfb, + 0xde, 0x79, 0xeb, 0x33, 0xff, 0x70, 0xfe, 0x89, 0x77, 0x97, 0x92, 0xb1, 0xfa, 0x3f, 0x01, 0x00, + 0x00, 0xff, 0xff, 0x0f, 0x7f, 0x2b, 0x5c, 0x83, 0x76, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -4103,11 +4101,6 @@ func (m *ApplicationSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - i -= len(m.TrackingMethod) - copy(dAtA[i:], m.TrackingMethod) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.TrackingMethod))) - i-- - dAtA[i] = 0x42 if m.RevisionHistoryLimit != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) i-- @@ -8576,8 +8569,6 @@ func (m *ApplicationSpec) Size() (n int) { if m.RevisionHistoryLimit != nil { n += 1 + sovGenerated(uint64(*m.RevisionHistoryLimit)) } - l = len(m.TrackingMethod) - n += 1 + l + sovGenerated(uint64(l)) return n } @@ -10418,7 +10409,6 @@ func (this *ApplicationSpec) String() string { `IgnoreDifferences:` + repeatedStringForIgnoreDifferences + `,`, `Info:` + repeatedStringForInfo + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, - `TrackingMethod:` + fmt.Sprintf("%v", this.TrackingMethod) + `,`, `}`, }, "") return s @@ -15011,38 +15001,6 @@ func (m *ApplicationSpec) Unmarshal(dAtA []byte) error { } } m.RevisionHistoryLimit = &v - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TrackingMethod", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - 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 ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TrackingMethod = TrackingMethod(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index cd5ba919d73df..3978741aabd0b 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -291,10 +291,6 @@ message ApplicationSpec { // Increasing will increase the space used to store the history, so we do not recommend increasing it. // Default is 10. optional int64 revisionHistoryLimit = 7; - - // Project is a reference to the project this application belongs to. - // The empty string means that application belongs to the 'default' project. - optional string trackingMethod = 8; } // ApplicationStatus contains status information for the application diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 868737c032eef..682a319465333 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -1078,16 +1078,8 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSpec(ref common.ReferenceCa Format: "int64", }, }, - "trackingMethod": { - SchemaProps: spec.SchemaProps{ - Description: "Project is a reference to the project this application belongs to. The empty string means that application belongs to the 'default' project.", - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, }, - Required: []string{"source", "destination", "project", "trackingMethod"}, + Required: []string{"source", "destination", "project"}, }, }, Dependencies: []string{ diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index b46fce9a54cc8..af27f8b8aa098 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -72,9 +72,6 @@ type ApplicationSpec struct { // Increasing will increase the space used to store the history, so we do not recommend increasing it. // Default is 10. RevisionHistoryLimit *int64 `json:"revisionHistoryLimit,omitempty" protobuf:"bytes,7,name=revisionHistoryLimit"` - // Project is a reference to the project this application belongs to. - // The empty string means that application belongs to the 'default' project. - TrackingMethod TrackingMethod `json:"trackingMethod" protobuf:"bytes,8,name=project"` } type TrackingMethod string diff --git a/reposerver/cache/cache.go b/reposerver/cache/cache.go index 9c3924a05f421..265d9a0aabab6 100644 --- a/reposerver/cache/cache.go +++ b/reposerver/cache/cache.go @@ -10,6 +10,8 @@ import ( "strings" "time" + "github.com/argoproj/argo-cd/v2/util/argo" + "github.com/go-git/go-git/v5/plumbing" "github.com/go-redis/redis/v8" log "github.com/sirupsen/logrus" @@ -191,6 +193,9 @@ func (c *Cache) DeleteManifests(revision string, appSrc *appv1.ApplicationSource } func appDetailsCacheKey(revision string, appSrc *appv1.ApplicationSource, trackingMethod appv1.TrackingMethod) string { + if trackingMethod == "" { + trackingMethod = argo.TrackingMethodLabel + } return fmt.Sprintf("appdetails|%s|%d|%s", revision, appSourceKey(appSrc), trackingMethod) } diff --git a/reposerver/cache/cache_test.go b/reposerver/cache/cache_test.go index b7cfef0ea67cf..46841c00a229c 100644 --- a/reposerver/cache/cache_test.go +++ b/reposerver/cache/cache_test.go @@ -104,19 +104,19 @@ func TestCache_GetAppDetails(t *testing.T) { cache := newFixtures().Cache // cache miss value := &apiclient.RepoAppDetailsResponse{} - err := cache.GetAppDetails("my-revision", &ApplicationSource{}, value) + err := cache.GetAppDetails("my-revision", &ApplicationSource{}, value, "") assert.Equal(t, ErrCacheMiss, err) res := &apiclient.RepoAppDetailsResponse{Type: "my-type"} - err = cache.SetAppDetails("my-revision", &ApplicationSource{}, res) + err = cache.SetAppDetails("my-revision", &ApplicationSource{}, res, "") assert.NoError(t, err) //cache miss - err = cache.GetAppDetails("other-revision", &ApplicationSource{}, value) + err = cache.GetAppDetails("other-revision", &ApplicationSource{}, value, "") assert.Equal(t, ErrCacheMiss, err) //cache miss - err = cache.GetAppDetails("my-revision", &ApplicationSource{Path: "other-path"}, value) + err = cache.GetAppDetails("my-revision", &ApplicationSource{Path: "other-path"}, value, "") assert.Equal(t, ErrCacheMiss, err) // cache hit - err = cache.GetAppDetails("my-revision", &ApplicationSource{}, value) + err = cache.GetAppDetails("my-revision", &ApplicationSource{}, value, "") assert.NoError(t, err) assert.Equal(t, &apiclient.RepoAppDetailsResponse{Type: "my-type"}, value) } diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index c1482843afb74..f9e19aec5ae3f 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -715,6 +715,7 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest var targetObjs []*unstructured.Unstructured var dest *v1alpha1.ApplicationDestination + resourceTracking := argo.NewResourceTracking() appSourceType, err := GetAppSourceType(q.ApplicationSource, appPath, q.AppName) if err != nil { return nil, err @@ -773,7 +774,7 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - err = argo.NewResourceTracking().SetAppInstance(target, q.AppLabelKey, q.AppName, v1alpha1.TrackingMethod(q.TrackingMethod)) + err = resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName, v1alpha1.TrackingMethod(q.TrackingMethod)) if err != nil { return nil, err } diff --git a/reposerver/repository/repository_test.go b/reposerver/repository/repository_test.go index f43509e9b243a..6b70b9aa0eb23 100644 --- a/reposerver/repository/repository_test.go +++ b/reposerver/repository/repository_test.go @@ -14,6 +14,8 @@ import ( "testing" "time" + "github.com/argoproj/argo-cd/v2/util/argo" + "github.com/ghodss/yaml" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -70,7 +72,7 @@ func newServiceWithOpt(cf clientFunc) (*Service, *gitmocks.Client) { cacheutil.NewCache(cacheutil.NewInMemoryCache(1*time.Minute)), 1*time.Minute, 1*time.Minute, - ), RepoServerInitConstants{ParallelismLimit: 1}) + ), RepoServerInitConstants{ParallelismLimit: 1}, argo.NewResourceTracking()) chart := "my-chart" version := "1.1.0" @@ -138,7 +140,7 @@ func TestGenerateYamlManifestInDir(t *testing.T) { assert.Equal(t, countOfManifests, len(res1.Manifests)) // this will test concatenated manifests to verify we split YAMLs correctly - res2, err := service.GenerateManifests("./testdata/concatenated", "/", "", &q, false) + res2, err := GenerateManifests("./testdata/concatenated", "/", "", &q, false) assert.NoError(t, err) assert.Equal(t, 3, len(res2.Manifests)) } @@ -927,13 +929,11 @@ func TestRunCustomTool(t *testing.T) { } func TestGenerateFromUTF16(t *testing.T) { - service := newService("./testdata") - q := apiclient.ManifestRequest{ Repo: &argoappv1.Repository{}, ApplicationSource: &argoappv1.ApplicationSource{}, } - res1, err := service.GenerateManifests("./testdata/utf-16", "/", "", &q, false) + res1, err := GenerateManifests("./testdata/utf-16", "/", "", &q, false) assert.Nil(t, err) assert.Equal(t, 2, len(res1.Manifests)) } diff --git a/server/application/application.go b/server/application/application.go index 956b513a16dad..d621649059477 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -415,6 +415,7 @@ func (s *Server) Get(ctx context.Context, q *application.ApplicationQuery) (*app KustomizeOptions: kustomizeOptions, Repos: helmRepos, NoCache: true, + TrackingMethod: string(argoutil.GetTrackingMethod(s.settingsMgr)), }) return err }); err != nil { diff --git a/util/argo/argo.go b/util/argo/argo.go index 29187f1331bb5..e567636cead4a 100644 --- a/util/argo/argo.go +++ b/util/argo/argo.go @@ -245,6 +245,7 @@ func ValidateRepo( KustomizeOptions: kustomizeOptions, // don't use case during application change to make sure to fetch latest git/helm revisions NoRevisionCache: true, + TrackingMethod: string(GetTrackingMethod(settingsMgr)), }) if err != nil { conditions = append(conditions, argoappv1.ApplicationCondition{ From 9fe770ca22eae240c0908ce77f852c15b4ddaca5 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Tue, 21 Sep 2021 23:10:53 +0300 Subject: [PATCH 15/32] fix test Signed-off-by: pashavictorovich --- util/argo/argo_test.go | 29 ++++++++++++++++++++++++++++- util/settings/settings.go | 1 - 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/util/argo/argo_test.go b/util/argo/argo_test.go index 72f8adc65c2cc..4ceb4beed30c0 100644 --- a/util/argo/argo_test.go +++ b/util/argo/argo_test.go @@ -279,7 +279,34 @@ func TestValidateRepo(t *testing.T) { return true })).Return(nil, nil) - conditions, err := ValidateRepo(context.Background(), app, repoClientSet, db, kustomizeOptions, nil, &kubetest.MockKubectlCmd{Version: kubeVersion, APIGroups: apiGroups}, proj, nil) + cm := corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-cm", + Namespace: test.FakeArgoCDNamespace, + Labels: map[string]string{ + "app.kubernetes.io/part-of": "argocd", + }, + }, + Data: map[string]string{ + "globalProjects": ` + - projectName: default-x + labelSelector: + matchExpressions: + - key: is-x + operator: Exists + - projectName: default-non-x + labelSelector: + matchExpressions: + - key: is-x + operator: DoesNotExist +`, + }, + } + + kubeClient := fake.NewSimpleClientset(&cm) + settingsMgr := settings.NewSettingsManager(context.Background(), kubeClient, test.FakeArgoCDNamespace) + + conditions, err := ValidateRepo(context.Background(), app, repoClientSet, db, kustomizeOptions, nil, &kubetest.MockKubectlCmd{Version: kubeVersion, APIGroups: apiGroups}, proj, settingsMgr) assert.NoError(t, err) assert.Empty(t, conditions) diff --git a/util/settings/settings.go b/util/settings/settings.go index 4ccc7e3b64438..6c97909556997 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -332,7 +332,6 @@ type SettingsManager struct { reposCache []Repository repoCredsCache []RepositoryCredentials reposOrClusterChanged func() - trackingMethod string } type incompleteSettingsError struct { From 22daead87eeaef5003b132f1a0b4453f5c6b7bc8 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 22 Sep 2021 13:11:37 +0300 Subject: [PATCH 16/32] cover kube.go with tests Signed-off-by: pashavictorovich --- util/kube/kube_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/util/kube/kube_test.go b/util/kube/kube_test.go index b0d89e3264ad3..00b6f017c4132 100644 --- a/util/kube/kube_test.go +++ b/util/kube/kube_test.go @@ -162,3 +162,43 @@ func TestIsValidResourceName(t *testing.T) { assert.False(t, IsValidResourceName("Guestbook-ui")) assert.False(t, IsValidResourceName("-guestbook-ui")) } + +func TestSetAppInstanceAnnotation(t *testing.T) { + yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + var obj unstructured.Unstructured + err = yaml.Unmarshal(yamlBytes, &obj) + err = SetAppInstanceAnnotation(&obj, common.LabelKeyAppInstance, "my-app") + assert.Nil(t, err) + + manifestBytes, err := json.MarshalIndent(obj.Object, "", " ") + assert.Nil(t, err) + log.Println(string(manifestBytes)) + + var s apiv1.Service + err = json.Unmarshal(manifestBytes, &s) + assert.Nil(t, err) + + log.Println(s.Name) + log.Println(s.ObjectMeta) + assert.Equal(t, "my-app", s.ObjectMeta.Annotations[common.LabelKeyAppInstance]) +} + +func TestGetAppInstanceAnnotation(t *testing.T) { + yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + var obj unstructured.Unstructured + err = yaml.Unmarshal(yamlBytes, &obj) + err = SetAppInstanceAnnotation(&obj, common.LabelKeyAppInstance, "my-app") + assert.Nil(t, err) + + assert.Equal(t, "my-app", GetAppInstanceAnnotation(&obj, common.LabelKeyAppInstance)) +} + +func TestGetAppInstanceLabel(t *testing.T) { + yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + var obj unstructured.Unstructured + err = yaml.Unmarshal(yamlBytes, &obj) + err = SetAppInstanceLabel(&obj, common.LabelKeyAppInstance, "my-app") + assert.Nil(t, err) + + assert.Equal(t, "my-app", GetAppInstanceLabel(&obj, common.LabelKeyAppInstance)) +} From 414e97b0bc64dd3021d0ef085d4b7437fc0d042f Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 22 Sep 2021 13:36:17 +0300 Subject: [PATCH 17/32] add unit tests Signed-off-by: pashavictorovich --- util/argo/resource_tracking_test.go | 60 +++++++++++++++++++++++++++++ util/argo/testdata/svc.yaml | 11 ++++++ util/kube/kube_test.go | 7 +++- 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 util/argo/resource_tracking_test.go create mode 100644 util/argo/testdata/svc.yaml diff --git a/util/argo/resource_tracking_test.go b/util/argo/resource_tracking_test.go new file mode 100644 index 0000000000000..354e87c186891 --- /dev/null +++ b/util/argo/resource_tracking_test.go @@ -0,0 +1,60 @@ +package argo + +import ( + "io/ioutil" + "testing" + + "github.com/stretchr/testify/assert" + "gopkg.in/yaml.v2" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + + "github.com/argoproj/argo-cd/v2/common" +) + +func TestSetAppInstanceLabel(t *testing.T) { + yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + assert.Nil(t, err) + + var obj unstructured.Unstructured + err = yaml.Unmarshal(yamlBytes, &obj) + assert.Nil(t, err) + + resourceTracking := NewResourceTracking() + + err = resourceTracking.SetAppInstance(&obj, common.LabelKeyAppInstance, "my-app", TrackingMethodLabel) + assert.Nil(t, err) + + app := resourceTracking.GetAppName(&obj, common.LabelKeyAppInstance, TrackingMethodLabel) + assert.Equal(t, "my-app", app) +} + +func TestSetAppInstanceAnnotation(t *testing.T) { + yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + assert.Nil(t, err) + + var obj unstructured.Unstructured + err = yaml.Unmarshal(yamlBytes, &obj) + assert.Nil(t, err) + + resourceTracking := NewResourceTracking() + + err = resourceTracking.SetAppInstance(&obj, common.LabelKeyAppInstance, "my-app", TrackingMethodAnnotation) + assert.Nil(t, err) + + app := resourceTracking.GetAppName(&obj, common.LabelKeyAppInstance, TrackingMethodAnnotation) + assert.Equal(t, "my-app", app) +} + +func TestSetAppInstanceAnnotationNotFound(t *testing.T) { + yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + assert.Nil(t, err) + + var obj unstructured.Unstructured + err = yaml.Unmarshal(yamlBytes, &obj) + assert.Nil(t, err) + + resourceTracking := NewResourceTracking() + + app := resourceTracking.GetAppName(&obj, common.LabelKeyAppInstance, TrackingMethodAnnotation) + assert.Equal(t, "", app) +} diff --git a/util/argo/testdata/svc.yaml b/util/argo/testdata/svc.yaml new file mode 100644 index 0000000000000..11aeb957db7c3 --- /dev/null +++ b/util/argo/testdata/svc.yaml @@ -0,0 +1,11 @@ +kind: Service +apiVersion: v1 +metadata: + name: my-service +spec: + selector: + app: MyApp + ports: + - protocol: TCP + port: 80 + targetPort: 9376 diff --git a/util/kube/kube_test.go b/util/kube/kube_test.go index 00b6f017c4132..3f36dfc653227 100644 --- a/util/kube/kube_test.go +++ b/util/kube/kube_test.go @@ -165,8 +165,10 @@ func TestIsValidResourceName(t *testing.T) { func TestSetAppInstanceAnnotation(t *testing.T) { yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + assert.Nil(t, err) var obj unstructured.Unstructured err = yaml.Unmarshal(yamlBytes, &obj) + assert.Nil(t, err) err = SetAppInstanceAnnotation(&obj, common.LabelKeyAppInstance, "my-app") assert.Nil(t, err) @@ -185,8 +187,10 @@ func TestSetAppInstanceAnnotation(t *testing.T) { func TestGetAppInstanceAnnotation(t *testing.T) { yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + assert.Nil(t, err) var obj unstructured.Unstructured err = yaml.Unmarshal(yamlBytes, &obj) + assert.Nil(t, err) err = SetAppInstanceAnnotation(&obj, common.LabelKeyAppInstance, "my-app") assert.Nil(t, err) @@ -195,10 +199,11 @@ func TestGetAppInstanceAnnotation(t *testing.T) { func TestGetAppInstanceLabel(t *testing.T) { yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") + assert.Nil(t, err) var obj unstructured.Unstructured err = yaml.Unmarshal(yamlBytes, &obj) + assert.Nil(t, err) err = SetAppInstanceLabel(&obj, common.LabelKeyAppInstance, "my-app") assert.Nil(t, err) - assert.Equal(t, "my-app", GetAppInstanceLabel(&obj, common.LabelKeyAppInstance)) } From 2e76cae3e8830d326a148fb2b3d689182139a35e Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 22 Sep 2021 14:09:24 +0300 Subject: [PATCH 18/32] rerun unit tests Signed-off-by: pashavictorovich --- util/argo/resource_tracking.go | 1 - 1 file changed, 1 deletion(-) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index 7567c3c13f0c7..68a804dabbf1b 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -33,7 +33,6 @@ func GetTrackingMethod(settingsMgr *settings.SettingsManager) v1alpha1.TrackingM if err != nil { return TrackingMethodAnnotationAndLabel } - return v1alpha1.TrackingMethod(tm) } From eeaa4669a666b71add9e2d7d40ac16beca19da77 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 22 Sep 2021 20:23:38 +0300 Subject: [PATCH 19/32] add tracking method to cli Signed-off-by: pashavictorovich --- assets/swagger.json | 3 + cmd/argocd/commands/app.go | 11 +- pkg/apiclient/settings/settings.pb.go | 179 +++++++++++++++++--------- server/settings/settings.go | 6 + server/settings/settings.proto | 1 + util/settings/settings.go | 4 +- 6 files changed, 134 insertions(+), 70 deletions(-) diff --git a/assets/swagger.json b/assets/swagger.json index aa2e7f2e4dc90..2a0af5a655341 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -3660,6 +3660,9 @@ "statusBadgeEnabled": { "type": "boolean" }, + "trackingMethod": { + "type": "string" + }, "uiBannerContent": { "type": "string" }, diff --git a/cmd/argocd/commands/app.go b/cmd/argocd/commands/app.go index 782f278170905..da601b7741e8b 100644 --- a/cmd/argocd/commands/app.go +++ b/cmd/argocd/commands/app.go @@ -733,8 +733,8 @@ func liveObjects(resources []*argoappv1.ResourceDiff) ([]*unstructured.Unstructu } func getLocalObjects(app *argoappv1.Application, local, localRepoRoot, appLabelKey, kubeVersion string, kustomizeOptions *argoappv1.KustomizeOptions, - configManagementPlugins []*argoappv1.ConfigManagementPlugin) []*unstructured.Unstructured { - manifestStrings := getLocalObjectsString(app, local, localRepoRoot, appLabelKey, kubeVersion, kustomizeOptions, configManagementPlugins) + configManagementPlugins []*argoappv1.ConfigManagementPlugin, trackingMethod string) []*unstructured.Unstructured { + manifestStrings := getLocalObjectsString(app, local, localRepoRoot, appLabelKey, kubeVersion, kustomizeOptions, configManagementPlugins, trackingMethod) objs := make([]*unstructured.Unstructured, len(manifestStrings)) for i := range manifestStrings { obj := unstructured.Unstructured{} @@ -746,7 +746,7 @@ func getLocalObjects(app *argoappv1.Application, local, localRepoRoot, appLabelK } func getLocalObjectsString(app *argoappv1.Application, local, localRepoRoot, appLabelKey, kubeVersion string, kustomizeOptions *argoappv1.KustomizeOptions, - configManagementPlugins []*argoappv1.ConfigManagementPlugin) []string { + configManagementPlugins []*argoappv1.ConfigManagementPlugin, trackingMethod string) []string { res, err := repository.GenerateManifests(local, localRepoRoot, app.Spec.Source.TargetRevision, &repoapiclient.ManifestRequest{ Repo: &argoappv1.Repository{Repo: app.Spec.Source.RepoURL}, @@ -757,6 +757,7 @@ func getLocalObjectsString(app *argoappv1.Application, local, localRepoRoot, app KustomizeOptions: kustomizeOptions, KubeVersion: kubeVersion, Plugins: configManagementPlugins, + TrackingMethod: trackingMethod, }, true) errors.CheckError(err) @@ -842,7 +843,7 @@ func NewApplicationDiffCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co defer argoio.Close(conn) cluster, err := clusterIf.Get(context.Background(), &clusterpkg.ClusterQuery{Name: app.Spec.Destination.Name, Server: app.Spec.Destination.Server}) errors.CheckError(err) - localObjs := groupObjsByKey(getLocalObjects(app, local, localRepoRoot, argoSettings.AppLabelKey, cluster.ServerVersion, argoSettings.KustomizeOptions, argoSettings.ConfigManagementPlugins), liveObjs, app.Spec.Destination.Namespace) + localObjs := groupObjsByKey(getLocalObjects(app, local, localRepoRoot, argoSettings.AppLabelKey, cluster.ServerVersion, argoSettings.KustomizeOptions, argoSettings.ConfigManagementPlugins, argoSettings.TrackingMethod), liveObjs, app.Spec.Destination.Namespace) items = groupObjsForDiff(resources, localObjs, items, argoSettings, appName) } else if revision != "" { var unstructureds []*unstructured.Unstructured @@ -1377,7 +1378,7 @@ func NewApplicationSyncCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co cluster, err := clusterIf.Get(context.Background(), &clusterpkg.ClusterQuery{Name: app.Spec.Destination.Name, Server: app.Spec.Destination.Server}) errors.CheckError(err) argoio.Close(conn) - localObjsStrings = getLocalObjectsString(app, local, localRepoRoot, argoSettings.AppLabelKey, cluster.ServerVersion, argoSettings.KustomizeOptions, argoSettings.ConfigManagementPlugins) + localObjsStrings = getLocalObjectsString(app, local, localRepoRoot, argoSettings.AppLabelKey, cluster.ServerVersion, argoSettings.KustomizeOptions, argoSettings.ConfigManagementPlugins, argoSettings.TrackingMethod) } syncReq := applicationpkg.ApplicationSyncRequest{ diff --git a/pkg/apiclient/settings/settings.pb.go b/pkg/apiclient/settings/settings.pb.go index 054eca11ff258..f608640196691 100644 --- a/pkg/apiclient/settings/settings.pb.go +++ b/pkg/apiclient/settings/settings.pb.go @@ -93,6 +93,7 @@ type Settings struct { UiBannerContent string `protobuf:"bytes,15,opt,name=uiBannerContent,proto3" json:"uiBannerContent,omitempty"` UiBannerURL string `protobuf:"bytes,16,opt,name=uiBannerURL,proto3" json:"uiBannerURL,omitempty"` PasswordPattern string `protobuf:"bytes,17,opt,name=passwordPattern,proto3" json:"passwordPattern,omitempty"` + TrackingMethod string `protobuf:"bytes,18,opt,name=trackingMethod,proto3" json:"trackingMethod,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -250,6 +251,13 @@ func (m *Settings) GetPasswordPattern() string { return "" } +func (m *Settings) GetTrackingMethod() string { + if m != nil { + return m.TrackingMethod + } + return "" +} + type GoogleAnalyticsConfig struct { TrackingID string `protobuf:"bytes,1,opt,name=trackingID,proto3" json:"trackingID,omitempty"` AnonymizeUsers bool `protobuf:"varint,2,opt,name=anonymizeUsers,proto3" json:"anonymizeUsers,omitempty"` @@ -617,70 +625,70 @@ func init() { func init() { proto.RegisterFile("server/settings/settings.proto", fileDescriptor_a480d494da040caa) } var fileDescriptor_a480d494da040caa = []byte{ - // 996 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0x97, 0x9b, 0x6e, 0x9b, 0xbc, 0x6c, 0x9b, 0x76, 0x80, 0x62, 0xa2, 0x55, 0x1a, 0x72, 0x58, - 0x05, 0x09, 0x6c, 0x9a, 0x15, 0x02, 0x21, 0x24, 0x20, 0xce, 0x6a, 0x37, 0x6c, 0x96, 0x96, 0xd9, + // 1008 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xcd, 0x6f, 0xe3, 0x44, + 0x14, 0x97, 0x37, 0xdd, 0x36, 0x79, 0xd9, 0x36, 0xed, 0x00, 0xc5, 0x44, 0xab, 0x34, 0xe4, 0xb0, + 0x0a, 0x12, 0xd8, 0x34, 0x2b, 0x04, 0x42, 0x48, 0x40, 0x9c, 0xd5, 0x6e, 0xd8, 0x94, 0x96, 0xd9, 0x76, 0x0f, 0x48, 0xa8, 0x9a, 0xda, 0x83, 0x3b, 0xc4, 0x9d, 0xb1, 0x66, 0xc6, 0x61, 0xb3, 0x47, - 0x6e, 0x5c, 0xb8, 0xc0, 0x87, 0xe2, 0x88, 0xc4, 0xbd, 0x42, 0x11, 0x9f, 0x80, 0x4f, 0x80, 0x3c, - 0xfe, 0x53, 0x37, 0x09, 0x7f, 0xa4, 0xbd, 0xbd, 0xf9, 0xbd, 0xf7, 0x7e, 0x6f, 0xfc, 0xfc, 0xf3, - 0x7b, 0x86, 0x8e, 0xa2, 0x72, 0x46, 0xa5, 0xab, 0xa8, 0xd6, 0x8c, 0x87, 0xaa, 0x34, 0x9c, 0x58, - 0x0a, 0x2d, 0xd0, 0xb6, 0x1f, 0x25, 0x4a, 0x53, 0xd9, 0x7e, 0x3d, 0x14, 0xa1, 0x30, 0x98, 0x9b, - 0x5a, 0x99, 0xbb, 0x7d, 0x2f, 0x14, 0x22, 0x8c, 0xa8, 0x4b, 0x62, 0xe6, 0x12, 0xce, 0x85, 0x26, - 0x9a, 0x09, 0x9e, 0x27, 0xb7, 0x27, 0x21, 0xd3, 0x97, 0xc9, 0x85, 0xe3, 0x8b, 0x2b, 0x97, 0x48, - 0x93, 0xfe, 0x9d, 0x31, 0xde, 0xf3, 0x03, 0x77, 0x36, 0x70, 0xe3, 0x69, 0x98, 0x66, 0x2a, 0x97, - 0xc4, 0x71, 0xc4, 0x7c, 0x93, 0xeb, 0xce, 0x8e, 0x48, 0x14, 0x5f, 0x92, 0x23, 0x37, 0xa4, 0x9c, - 0x4a, 0xa2, 0x69, 0x90, 0xb3, 0x7d, 0xf6, 0x1f, 0x6c, 0xcb, 0x4f, 0x22, 0x58, 0xe0, 0xbb, 0x7e, - 0x44, 0xd8, 0x55, 0x7e, 0x9f, 0x5e, 0x0b, 0x76, 0x9e, 0xe5, 0xde, 0xaf, 0x12, 0x2a, 0xe7, 0xbd, - 0xbf, 0xea, 0x50, 0x2f, 0x10, 0xf4, 0x16, 0xd4, 0x12, 0x19, 0xd9, 0x56, 0xd7, 0xea, 0x37, 0x86, - 0xdb, 0x8b, 0xeb, 0xc3, 0xda, 0x19, 0x9e, 0xe0, 0x14, 0x43, 0xef, 0x43, 0x23, 0xa0, 0x2f, 0x3c, - 0xc1, 0xbf, 0x65, 0xa1, 0xbd, 0xd1, 0xb5, 0xfa, 0xcd, 0x01, 0x72, 0xf2, 0xce, 0x38, 0xa3, 0xc2, - 0x83, 0x6f, 0x82, 0x90, 0x07, 0x90, 0xd6, 0xcf, 0x53, 0x6a, 0x26, 0xe5, 0xb5, 0x32, 0xe5, 0x78, - 0x3c, 0xf2, 0x32, 0xd7, 0x70, 0x77, 0x71, 0x7d, 0x08, 0x37, 0x67, 0x5c, 0x49, 0x43, 0x5d, 0x68, - 0x92, 0x38, 0x9e, 0x90, 0x0b, 0x1a, 0x3d, 0xa1, 0x73, 0x7b, 0x33, 0xbd, 0x19, 0xae, 0x42, 0xe8, - 0x39, 0xec, 0x4b, 0xaa, 0x44, 0x22, 0x7d, 0x7a, 0x3c, 0xa3, 0x52, 0xb2, 0x80, 0x2a, 0xfb, 0x4e, - 0xb7, 0xd6, 0x6f, 0x0e, 0xfa, 0x65, 0xb5, 0xe2, 0x09, 0x1d, 0xbc, 0x1c, 0xfa, 0x90, 0x6b, 0x39, - 0xc7, 0xab, 0x14, 0xc8, 0x01, 0xa4, 0x34, 0xd1, 0x89, 0x1a, 0x92, 0x20, 0xa4, 0x0f, 0x39, 0xb9, - 0x88, 0x68, 0x60, 0x6f, 0x75, 0xad, 0x7e, 0x1d, 0xaf, 0xf1, 0xa0, 0xc7, 0xd0, 0xca, 0x94, 0xf0, - 0x39, 0x27, 0xd1, 0x5c, 0x33, 0x5f, 0xd9, 0xdb, 0xe6, 0x99, 0x3b, 0xe5, 0x2d, 0x1e, 0xdd, 0xf6, - 0xe7, 0x8f, 0xbb, 0x9c, 0x86, 0x5e, 0xc2, 0xde, 0x34, 0x51, 0x5a, 0x5c, 0xb1, 0x97, 0xf4, 0x38, - 0x36, 0x6a, 0xb2, 0xeb, 0x86, 0xea, 0x4b, 0xe7, 0x46, 0x00, 0x4e, 0x21, 0x00, 0x63, 0x9c, 0xfb, - 0x81, 0x33, 0x1b, 0x38, 0xf1, 0x34, 0x74, 0x52, 0x39, 0x39, 0x15, 0x39, 0x39, 0x85, 0x9c, 0x9c, - 0x27, 0x4b, 0xac, 0x78, 0xa5, 0x0e, 0x7a, 0x1b, 0x36, 0x2f, 0x69, 0x14, 0xdb, 0x0d, 0x53, 0x6f, - 0xa7, 0xbc, 0xfa, 0x63, 0x1a, 0xc5, 0xd8, 0xb8, 0xd0, 0x3b, 0xb0, 0x1d, 0x47, 0x49, 0xc8, 0xb8, - 0xb2, 0xc1, 0xb4, 0xb9, 0x55, 0x46, 0x9d, 0x18, 0x1c, 0x17, 0xfe, 0xb4, 0x87, 0x89, 0xa2, 0x72, - 0x22, 0xd2, 0xd3, 0x88, 0xa9, 0xac, 0x87, 0xcd, 0xac, 0x87, 0xab, 0x1e, 0xf4, 0x93, 0x05, 0x6f, - 0xfa, 0xa6, 0x2b, 0x4f, 0x09, 0x27, 0x21, 0xbd, 0xa2, 0x5c, 0x9f, 0xe4, 0xb5, 0xee, 0x9a, 0x5a, - 0xa7, 0xaf, 0xd6, 0x01, 0x6f, 0x2d, 0x39, 0xfe, 0xa7, 0xa2, 0xe8, 0x5d, 0xd8, 0x2f, 0x5b, 0xf4, - 0x9c, 0x4a, 0x65, 0xde, 0xc5, 0x4e, 0xb7, 0xd6, 0x6f, 0xe0, 0x55, 0x07, 0x6a, 0x43, 0x3d, 0x61, - 0x9e, 0x52, 0x67, 0x78, 0x62, 0xef, 0x1a, 0xa5, 0x96, 0x67, 0xd4, 0x87, 0x56, 0xc2, 0x86, 0x84, - 0x73, 0x2a, 0x3d, 0xc1, 0x35, 0xe5, 0xda, 0x6e, 0x99, 0x90, 0x65, 0x38, 0x95, 0x7c, 0x01, 0xa5, - 0x44, 0x7b, 0x99, 0xe4, 0x2b, 0x50, 0xca, 0x15, 0x13, 0xa5, 0xbe, 0x17, 0x32, 0x38, 0x21, 0x5a, - 0x53, 0xc9, 0xed, 0xfd, 0x8c, 0x6b, 0x09, 0x6e, 0xff, 0x62, 0xc1, 0xc1, 0x7a, 0xc9, 0xa3, 0x3d, - 0xa8, 0x4d, 0xe9, 0x3c, 0xfb, 0xd6, 0x71, 0x6a, 0xa2, 0x00, 0xee, 0xcc, 0x48, 0x94, 0xd0, 0xfc, - 0xf3, 0x7e, 0x45, 0xb1, 0x2d, 0x97, 0xc5, 0x19, 0xf9, 0xc7, 0x1b, 0x1f, 0x59, 0xbd, 0x73, 0x78, - 0x63, 0xed, 0xb7, 0x80, 0x3a, 0x00, 0x5a, 0x12, 0x7f, 0xca, 0x78, 0x38, 0x1e, 0xe5, 0x77, 0xab, - 0x20, 0xe8, 0x3e, 0xec, 0x12, 0x2e, 0xf8, 0x3c, 0x6d, 0xfb, 0x99, 0xa2, 0x52, 0x99, 0xbb, 0xd6, - 0xf1, 0x12, 0xda, 0xfb, 0x04, 0x36, 0x53, 0xc5, 0x22, 0x1b, 0xb6, 0xfd, 0x4b, 0xa2, 0xcf, 0x8a, - 0xa1, 0x86, 0x8b, 0x63, 0xfa, 0xae, 0x52, 0xf3, 0x94, 0xbe, 0xd0, 0x86, 0xa3, 0x81, 0xcb, 0x73, - 0xef, 0x1e, 0x6c, 0x65, 0x02, 0x40, 0x08, 0x36, 0x39, 0xb9, 0xa2, 0x79, 0xb2, 0xb1, 0x7b, 0x9f, - 0x42, 0xa3, 0x9c, 0x77, 0x68, 0x00, 0xe0, 0x0b, 0xce, 0xa9, 0xaf, 0x85, 0x54, 0xb6, 0x65, 0x34, - 0x7a, 0x33, 0x17, 0xbd, 0xc2, 0x85, 0x2b, 0x51, 0xbd, 0x07, 0xd0, 0x28, 0x1d, 0xeb, 0x2a, 0xa4, - 0x98, 0x9e, 0xc7, 0x34, 0xbf, 0x97, 0xb1, 0x7b, 0x3f, 0xd6, 0xa0, 0x32, 0x23, 0xd7, 0xa6, 0x1d, - 0xc0, 0x16, 0x53, 0x2a, 0xa1, 0x32, 0x4f, 0xcc, 0x4f, 0xa8, 0x0f, 0x75, 0x3f, 0x62, 0x94, 0xeb, - 0xf1, 0xc8, 0x8c, 0xe1, 0xc6, 0xf0, 0xee, 0xe2, 0xfa, 0xb0, 0xee, 0xe5, 0x18, 0x2e, 0xbd, 0xe8, - 0x08, 0x9a, 0x7e, 0xc4, 0x0a, 0x47, 0x36, 0x6d, 0x87, 0xad, 0xc5, 0xf5, 0x61, 0xd3, 0x9b, 0x8c, - 0xcb, 0xf8, 0x6a, 0x4c, 0x5a, 0x54, 0xf9, 0x22, 0xce, 0x67, 0x6e, 0x03, 0xe7, 0x27, 0x74, 0x0e, - 0x3b, 0x2c, 0x38, 0x15, 0x53, 0xca, 0x3d, 0xb3, 0x7f, 0xec, 0x2d, 0xd3, 0x9b, 0xfb, 0x6b, 0x16, - 0x80, 0x33, 0xae, 0x06, 0x1a, 0x75, 0x0e, 0xf7, 0x17, 0xd7, 0x87, 0x3b, 0xe3, 0x51, 0x05, 0xc7, - 0xb7, 0xf9, 0xda, 0x73, 0x40, 0xab, 0x79, 0x6b, 0x54, 0xfd, 0xf4, 0xb6, 0xaa, 0x3f, 0xfc, 0x57, - 0x55, 0x67, 0x0b, 0xd4, 0x29, 0xff, 0x00, 0xd2, 0x4d, 0xe4, 0x18, 0xfe, 0x8a, 0x7c, 0x07, 0xdf, - 0x40, 0xab, 0x58, 0x28, 0xcf, 0xa8, 0x9c, 0x31, 0x9f, 0xa2, 0x2f, 0xa0, 0xf6, 0x88, 0x6a, 0x74, - 0xb0, 0xb2, 0x71, 0xcc, 0x96, 0x6d, 0xef, 0xaf, 0xe0, 0x3d, 0xfb, 0x87, 0xdf, 0xff, 0xfc, 0x79, - 0x03, 0xa1, 0x3d, 0xf3, 0xe7, 0x30, 0x3b, 0x2a, 0xb7, 0xf6, 0xd0, 0xfb, 0x75, 0xd1, 0xb1, 0x7e, - 0x5b, 0x74, 0xac, 0x3f, 0x16, 0x1d, 0xeb, 0xeb, 0x0f, 0xfe, 0xdf, 0x1f, 0x44, 0xf6, 0x0e, 0x4b, - 0x92, 0x8b, 0x2d, 0xb3, 0xef, 0x1f, 0xfc, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x31, 0x2c, 0x49, - 0xde, 0x08, 0x00, 0x00, + 0x6e, 0x5c, 0xb8, 0xc0, 0x89, 0xbf, 0x88, 0x23, 0x12, 0xf7, 0x0a, 0x45, 0xfc, 0x21, 0xc8, 0xe3, + 0x8f, 0xba, 0x49, 0xf8, 0x90, 0xf6, 0xf6, 0xe6, 0xf7, 0x3e, 0xe7, 0xf9, 0xe7, 0xf7, 0x06, 0x3a, + 0x8a, 0xca, 0x19, 0x95, 0xae, 0xa2, 0x5a, 0x33, 0x1e, 0xaa, 0x52, 0x70, 0x62, 0x29, 0xb4, 0x40, + 0x5b, 0x7e, 0x94, 0x28, 0x4d, 0x65, 0xfb, 0xf5, 0x50, 0x84, 0xc2, 0x60, 0x6e, 0x2a, 0x65, 0xea, + 0xf6, 0xfd, 0x50, 0x88, 0x30, 0xa2, 0x2e, 0x89, 0x99, 0x4b, 0x38, 0x17, 0x9a, 0x68, 0x26, 0x78, + 0xee, 0xdc, 0x9e, 0x84, 0x4c, 0x5f, 0x26, 0x17, 0x8e, 0x2f, 0xae, 0x5c, 0x22, 0x8d, 0xfb, 0x77, + 0x46, 0x78, 0xcf, 0x0f, 0xdc, 0xd9, 0xc0, 0x8d, 0xa7, 0x61, 0xea, 0xa9, 0x5c, 0x12, 0xc7, 0x11, + 0xf3, 0x8d, 0xaf, 0x3b, 0x3b, 0x24, 0x51, 0x7c, 0x49, 0x0e, 0xdd, 0x90, 0x72, 0x2a, 0x89, 0xa6, + 0x41, 0x1e, 0xed, 0xb3, 0xff, 0x88, 0xb6, 0x7c, 0x13, 0xc1, 0x02, 0xdf, 0xf5, 0x23, 0xc2, 0xae, + 0xf2, 0x7a, 0x7a, 0x2d, 0xd8, 0x7e, 0x96, 0x6b, 0xbf, 0x4a, 0xa8, 0x9c, 0xf7, 0x7e, 0x6d, 0x40, + 0xbd, 0x40, 0xd0, 0x5b, 0x50, 0x4b, 0x64, 0x64, 0x5b, 0x5d, 0xab, 0xdf, 0x18, 0x6e, 0x2d, 0xae, + 0x0f, 0x6a, 0x67, 0x78, 0x82, 0x53, 0x0c, 0xbd, 0x0f, 0x8d, 0x80, 0xbe, 0xf0, 0x04, 0xff, 0x96, + 0x85, 0xf6, 0x9d, 0xae, 0xd5, 0x6f, 0x0e, 0x90, 0x93, 0x77, 0xc6, 0x19, 0x15, 0x1a, 0x7c, 0x63, + 0x84, 0x3c, 0x80, 0x34, 0x7f, 0xee, 0x52, 0x33, 0x2e, 0xaf, 0x95, 0x2e, 0xc7, 0xe3, 0x91, 0x97, + 0xa9, 0x86, 0x3b, 0x8b, 0xeb, 0x03, 0xb8, 0x39, 0xe3, 0x8a, 0x1b, 0xea, 0x42, 0x93, 0xc4, 0xf1, + 0x84, 0x5c, 0xd0, 0xe8, 0x29, 0x9d, 0xdb, 0x1b, 0x69, 0x65, 0xb8, 0x0a, 0xa1, 0xe7, 0xb0, 0x27, + 0xa9, 0x12, 0x89, 0xf4, 0xe9, 0xf1, 0x8c, 0x4a, 0xc9, 0x02, 0xaa, 0xec, 0xbb, 0xdd, 0x5a, 0xbf, + 0x39, 0xe8, 0x97, 0xd9, 0x8a, 0x1b, 0x3a, 0x78, 0xd9, 0xf4, 0x11, 0xd7, 0x72, 0x8e, 0x57, 0x43, + 0x20, 0x07, 0x90, 0xd2, 0x44, 0x27, 0x6a, 0x48, 0x82, 0x90, 0x3e, 0xe2, 0xe4, 0x22, 0xa2, 0x81, + 0xbd, 0xd9, 0xb5, 0xfa, 0x75, 0xbc, 0x46, 0x83, 0x9e, 0x40, 0x2b, 0x63, 0xc2, 0xe7, 0x9c, 0x44, + 0x73, 0xcd, 0x7c, 0x65, 0x6f, 0x99, 0x3b, 0x77, 0xca, 0x2a, 0x1e, 0xdf, 0xd6, 0xe7, 0xd7, 0x5d, + 0x76, 0x43, 0x2f, 0x61, 0x77, 0x9a, 0x28, 0x2d, 0xae, 0xd8, 0x4b, 0x7a, 0x1c, 0x1b, 0x36, 0xd9, + 0x75, 0x13, 0xea, 0x4b, 0xe7, 0x86, 0x00, 0x4e, 0x41, 0x00, 0x23, 0x9c, 0xfb, 0x81, 0x33, 0x1b, + 0x38, 0xf1, 0x34, 0x74, 0x52, 0x3a, 0x39, 0x15, 0x3a, 0x39, 0x05, 0x9d, 0x9c, 0xa7, 0x4b, 0x51, + 0xf1, 0x4a, 0x1e, 0xf4, 0x36, 0x6c, 0x5c, 0xd2, 0x28, 0xb6, 0x1b, 0x26, 0xdf, 0x76, 0x59, 0xfa, + 0x13, 0x1a, 0xc5, 0xd8, 0xa8, 0xd0, 0x3b, 0xb0, 0x15, 0x47, 0x49, 0xc8, 0xb8, 0xb2, 0xc1, 0xb4, + 0xb9, 0x55, 0x5a, 0x9d, 0x18, 0x1c, 0x17, 0xfa, 0xb4, 0x87, 0x89, 0xa2, 0x72, 0x22, 0xd2, 0xd3, + 0x88, 0xa9, 0xac, 0x87, 0xcd, 0xac, 0x87, 0xab, 0x1a, 0xf4, 0x93, 0x05, 0x6f, 0xfa, 0xa6, 0x2b, + 0x47, 0x84, 0x93, 0x90, 0x5e, 0x51, 0xae, 0x4f, 0xf2, 0x5c, 0xf7, 0x4c, 0xae, 0xd3, 0x57, 0xeb, + 0x80, 0xb7, 0x36, 0x38, 0xfe, 0xa7, 0xa4, 0xe8, 0x5d, 0xd8, 0x2b, 0x5b, 0xf4, 0x9c, 0x4a, 0x65, + 0xbe, 0xc5, 0x76, 0xb7, 0xd6, 0x6f, 0xe0, 0x55, 0x05, 0x6a, 0x43, 0x3d, 0x61, 0x9e, 0x52, 0x67, + 0x78, 0x62, 0xef, 0x18, 0xa6, 0x96, 0x67, 0xd4, 0x87, 0x56, 0xc2, 0x86, 0x84, 0x73, 0x2a, 0x3d, + 0xc1, 0x35, 0xe5, 0xda, 0x6e, 0x19, 0x93, 0x65, 0x38, 0xa5, 0x7c, 0x01, 0xa5, 0x81, 0x76, 0x33, + 0xca, 0x57, 0xa0, 0x34, 0x56, 0x4c, 0x94, 0xfa, 0x5e, 0xc8, 0xe0, 0x84, 0x68, 0x4d, 0x25, 0xb7, + 0xf7, 0xb2, 0x58, 0x4b, 0x30, 0x7a, 0x00, 0x3b, 0x5a, 0x12, 0x7f, 0xca, 0x78, 0x78, 0x44, 0xf5, + 0xa5, 0x08, 0x6c, 0x64, 0x0c, 0x97, 0xd0, 0xf6, 0x2f, 0x16, 0xec, 0xaf, 0xff, 0x35, 0xd0, 0x2e, + 0xd4, 0xa6, 0x74, 0x9e, 0xcd, 0x04, 0x9c, 0x8a, 0x28, 0x80, 0xbb, 0x33, 0x12, 0x25, 0x34, 0x1f, + 0x03, 0xaf, 0x48, 0xca, 0xe5, 0xb4, 0x38, 0x0b, 0xfe, 0xf1, 0x9d, 0x8f, 0xac, 0xde, 0x39, 0xbc, + 0xb1, 0xf6, 0x9f, 0x41, 0x1d, 0x80, 0xe2, 0x06, 0xe3, 0x51, 0x5e, 0x5b, 0x05, 0x49, 0xef, 0x4d, + 0xb8, 0xe0, 0xf3, 0xf4, 0xf3, 0x9c, 0x29, 0x2a, 0x95, 0xa9, 0xb5, 0x8e, 0x97, 0xd0, 0xde, 0x27, + 0xb0, 0x91, 0x32, 0x1b, 0xd9, 0xb0, 0xe5, 0x5f, 0x12, 0x7d, 0x56, 0x0c, 0x3f, 0x5c, 0x1c, 0xd3, + 0x6f, 0x9a, 0x8a, 0xa7, 0xf4, 0x85, 0x36, 0x31, 0x1a, 0xb8, 0x3c, 0xf7, 0xee, 0xc3, 0x66, 0x46, + 0x14, 0x84, 0x60, 0x83, 0x93, 0x2b, 0x9a, 0x3b, 0x1b, 0xb9, 0xf7, 0x29, 0x34, 0xca, 0xb9, 0x88, + 0x06, 0x00, 0xbe, 0xe0, 0x9c, 0xfa, 0x5a, 0x48, 0x65, 0x5b, 0x86, 0xcb, 0x37, 0xf3, 0xd3, 0x2b, + 0x54, 0xb8, 0x62, 0xd5, 0x7b, 0x08, 0x8d, 0x52, 0xb1, 0x2e, 0x43, 0x8a, 0xe9, 0x79, 0x4c, 0xf3, + 0xba, 0x8c, 0xdc, 0xfb, 0xb1, 0x06, 0x95, 0x59, 0xba, 0xd6, 0x6d, 0x1f, 0x36, 0x99, 0x52, 0x09, + 0x95, 0xb9, 0x63, 0x7e, 0x42, 0x7d, 0xa8, 0xfb, 0x11, 0xa3, 0x5c, 0x8f, 0x47, 0x66, 0x5c, 0x37, + 0x86, 0xf7, 0x16, 0xd7, 0x07, 0x75, 0x2f, 0xc7, 0x70, 0xa9, 0x45, 0x87, 0xd0, 0xf4, 0x23, 0x56, + 0x28, 0xb2, 0xa9, 0x3c, 0x6c, 0x2d, 0xae, 0x0f, 0x9a, 0xde, 0x64, 0x5c, 0xda, 0x57, 0x6d, 0xd2, + 0xa4, 0xca, 0x17, 0x71, 0x3e, 0x9b, 0x1b, 0x38, 0x3f, 0xa1, 0x73, 0xd8, 0x66, 0xc1, 0xa9, 0x98, + 0x52, 0xee, 0x99, 0x3d, 0x65, 0x6f, 0x9a, 0xde, 0x3c, 0x58, 0xb3, 0x28, 0x9c, 0x71, 0xd5, 0xd0, + 0xb0, 0x73, 0xb8, 0xb7, 0xb8, 0x3e, 0xd8, 0x1e, 0x8f, 0x2a, 0x38, 0xbe, 0x1d, 0xaf, 0x3d, 0x07, + 0xb4, 0xea, 0xb7, 0x86, 0xd5, 0x47, 0xb7, 0x59, 0xfd, 0xe1, 0xbf, 0xb2, 0x3a, 0x5b, 0xb4, 0x4e, + 0xf9, 0x52, 0x48, 0x37, 0x96, 0x63, 0xe2, 0x57, 0xe8, 0x3b, 0xf8, 0x06, 0x5a, 0xc5, 0xe2, 0x79, + 0x46, 0xe5, 0x8c, 0xf9, 0x14, 0x7d, 0x01, 0xb5, 0xc7, 0x54, 0xa3, 0xfd, 0x95, 0xcd, 0x64, 0xb6, + 0x71, 0x7b, 0x6f, 0x05, 0xef, 0xd9, 0x3f, 0xfc, 0xf1, 0xd7, 0xcf, 0x77, 0x10, 0xda, 0x35, 0x2f, + 0x8c, 0xd9, 0x61, 0xb9, 0xdd, 0x87, 0xde, 0x6f, 0x8b, 0x8e, 0xf5, 0xfb, 0xa2, 0x63, 0xfd, 0xb9, + 0xe8, 0x58, 0x5f, 0x7f, 0xf0, 0xff, 0x5e, 0x1a, 0xd9, 0x37, 0x2c, 0x83, 0x5c, 0x6c, 0x9a, 0x77, + 0xc1, 0xc3, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x16, 0xf9, 0xe1, 0x89, 0x06, 0x09, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -816,6 +824,15 @@ func (m *Settings) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.TrackingMethod) > 0 { + i -= len(m.TrackingMethod) + copy(dAtA[i:], m.TrackingMethod) + i = encodeVarintSettings(dAtA, i, uint64(len(m.TrackingMethod))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } if len(m.PasswordPattern) > 0 { i -= len(m.PasswordPattern) copy(dAtA[i:], m.PasswordPattern) @@ -1409,6 +1426,10 @@ func (m *Settings) Size() (n int) { if l > 0 { n += 2 + l + sovSettings(uint64(l)) } + l = len(m.TrackingMethod) + if l > 0 { + n += 2 + l + sovSettings(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -2282,6 +2303,38 @@ func (m *Settings) Unmarshal(dAtA []byte) error { } m.PasswordPattern = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrackingMethod", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowSettings + } + 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 ErrInvalidLengthSettings + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthSettings + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TrackingMethod = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipSettings(dAtA[iNdEx:]) diff --git a/server/settings/settings.go b/server/settings/settings.go index fbd32ca8c5b9e..21416cd03f00f 100644 --- a/server/settings/settings.go +++ b/server/settings/settings.go @@ -79,6 +79,11 @@ func (s *Server) Get(ctx context.Context, q *settingspkg.SettingsQuery) (*settin kustomizeVersions = append(kustomizeVersions, kustomizeSettings.Versions[i].Name) } + trackingMethod, err := s.mgr.GetTrackingMethod() + if err != nil { + return nil, err + } + set := settingspkg.Settings{ URL: argoCDSettings.URL, AppLabelKey: appInstanceLabelKey, @@ -100,6 +105,7 @@ func (s *Server) Get(ctx context.Context, q *settingspkg.SettingsQuery) (*settin KustomizeVersions: kustomizeVersions, UiCssURL: argoCDSettings.UiCssURL, PasswordPattern: argoCDSettings.PasswordPattern, + TrackingMethod: trackingMethod, } if sessionmgr.LoggedIn(ctx) || s.disableAuth { diff --git a/server/settings/settings.proto b/server/settings/settings.proto index a23a6ca25f65b..344b13c4d3996 100644 --- a/server/settings/settings.proto +++ b/server/settings/settings.proto @@ -34,6 +34,7 @@ message Settings { string uiBannerContent = 15; string uiBannerURL = 16; string passwordPattern = 17; + string trackingMethod = 18; } message GoogleAnalyticsConfig { diff --git a/util/settings/settings.go b/util/settings/settings.go index 6c97909556997..6359c94cf5172 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -273,8 +273,8 @@ const ( settingsWebhookGogsSecretKey = "webhook.gogs.secret" // settingsApplicationInstanceLabelKey is the key to configure injected app instance label key settingsApplicationInstanceLabelKey = "application.instanceLabelKey" - // settingsAppIdTrackingMethodKey is the key to configure injected app instance label key - settingsAppIdTrackingMethodKey = "application.appIdTrackingMethodKey" + // settingsAppIdTrackingMethodKey is the key to configure tracking method for application resources + settingsAppIdTrackingMethodKey = "application.appIdTrackingMethod" // resourcesCustomizationsKey is the key to the map of resource overrides resourceCustomizationsKey = "resource.customizations" // resourceExclusions is the key to the list of excluded resources From 2bc87796cb1c8558faef68c8b1e13304f2625c7c Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Thu, 23 Sep 2021 15:38:06 +0300 Subject: [PATCH 20/32] retrieve tracking method from application Signed-off-by: pashavictorovich --- controller/cache/cache.go | 19 ++++++++++++-- controller/state.go | 2 +- pkg/apis/application/v1alpha1/types.go | 1 + server/application/application.go | 4 +-- util/argo/argo.go | 4 +-- util/argo/resource_tracking.go | 34 ++++++++++++++++++++++++-- 6 files changed, 55 insertions(+), 9 deletions(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 4529a46d9220c..625f1ccf81af3 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -288,7 +288,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e return nil, fmt.Errorf("controller is configured to ignore cluster %s", cluster.Server) } - trackingMethod := argo.GetTrackingMethod(c.settingsMgr) + trackingMethod := argo.GetTrackingMethodFromSettings(c.settingsMgr) clusterCache = clustercache.NewClusterCache(cluster.RESTConfig(), clustercache.SetListSemaphore(c.listSemaphore), @@ -301,7 +301,22 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e populateNodeInfo(un, res) res.Health, _ = health.GetResourceHealth(un, cacheSettings.clusterSettings.ResourceHealthOverride) - appName := c.resourceTracking.GetAppName(un, cacheSettings.appInstanceLabelKey, trackingMethod) + var appName string + + appNameFromLabels := c.resourceTracking.GetApplicationNameIfResourceBelongApp(un, cacheSettings.appInstanceLabelKey, c.appInformer, argo.TrackingMethodLabel) + if appNameFromLabels != "" { + appName = appNameFromLabels + } else { + appNameFromAnnotations := c.resourceTracking.GetApplicationNameIfResourceBelongApp(un, cacheSettings.appInstanceLabelKey, c.appInformer, argo.TrackingMethodAnnotation) + if appNameFromAnnotations != "" { + appName = appNameFromAnnotations + } + } + + if appName == "" { + appName = c.resourceTracking.GetAppName(un, cacheSettings.appInstanceLabelKey, trackingMethod) + } + if isRoot && appName != "" { res.AppName = appName } diff --git a/controller/state.go b/controller/state.go index f164c52103b0c..faf769c91ecd8 100644 --- a/controller/state.go +++ b/controller/state.go @@ -175,7 +175,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 ApiVersions: argo.APIGroupsToVersions(apiGroups), VerifySignature: verifySignature, HelmRepoCreds: permittedHelmCredentials, - TrackingMethod: string(argo.GetTrackingMethod(m.settingsMgr)), + TrackingMethod: string(argo.GetTrackingMethodFromApplication(m.settingsMgr, app)), }) if err != nil { return nil, nil, err diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index af27f8b8aa098..600d65e41965f 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -72,6 +72,7 @@ type ApplicationSpec struct { // Increasing will increase the space used to store the history, so we do not recommend increasing it. // Default is 10. RevisionHistoryLimit *int64 `json:"revisionHistoryLimit,omitempty" protobuf:"bytes,7,name=revisionHistoryLimit"` + TrackingMethod TrackingMethod } type TrackingMethod string diff --git a/server/application/application.go b/server/application/application.go index d621649059477..5df4f563bb11e 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -331,7 +331,7 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan KubeVersion: serverVersion, ApiVersions: argo.APIGroupsToVersions(apiGroups), HelmRepoCreds: helmCreds, - TrackingMethod: string(argoutil.GetTrackingMethod(s.settingsMgr)), + TrackingMethod: string(argoutil.GetTrackingMethodFromApplication(s.settingsMgr, a)), }) return err }) @@ -415,7 +415,7 @@ func (s *Server) Get(ctx context.Context, q *application.ApplicationQuery) (*app KustomizeOptions: kustomizeOptions, Repos: helmRepos, NoCache: true, - TrackingMethod: string(argoutil.GetTrackingMethod(s.settingsMgr)), + TrackingMethod: string(argoutil.GetTrackingMethodFromApplication(s.settingsMgr, a)), }) return err }); err != nil { diff --git a/util/argo/argo.go b/util/argo/argo.go index e567636cead4a..f0de7d2f0fa26 100644 --- a/util/argo/argo.go +++ b/util/argo/argo.go @@ -245,7 +245,7 @@ func ValidateRepo( KustomizeOptions: kustomizeOptions, // don't use case during application change to make sure to fetch latest git/helm revisions NoRevisionCache: true, - TrackingMethod: string(GetTrackingMethod(settingsMgr)), + TrackingMethod: string(GetTrackingMethod(settingsMgr, app)), }) if err != nil { conditions = append(conditions, argoappv1.ApplicationCondition{ @@ -499,7 +499,7 @@ func verifyGenerateManifests( KubeVersion: kubeVersion, ApiVersions: apiVersions, HelmRepoCreds: repositoryCredentials, - TrackingMethod: string(GetTrackingMethod(settingsMgr)), + TrackingMethod: string(GetTrackingMethod(settingsMgr, app)), } req.Repo.CopyCredentialsFromRepo(repoRes) req.Repo.CopySettingsFrom(repoRes) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index 68a804dabbf1b..d8506e1487e73 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -1,12 +1,14 @@ package argo import ( + "fmt" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/client-go/tools/cache" "github.com/argoproj/argo-cd/v2/util/settings" "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" - argokube "github.com/argoproj/argo-cd/v2/util/kube" ) @@ -19,6 +21,7 @@ const ( type ResourceTracking interface { GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error + GetApplicationNameIfResourceBelongApp(un *unstructured.Unstructured, key string, appInformer cache.SharedIndexInformer, tm v1alpha1.TrackingMethod) string } type resourceTracking struct { @@ -28,7 +31,7 @@ func NewResourceTracking() ResourceTracking { return &resourceTracking{} } -func GetTrackingMethod(settingsMgr *settings.SettingsManager) v1alpha1.TrackingMethod { +func GetTrackingMethodFromSettings(settingsMgr *settings.SettingsManager) v1alpha1.TrackingMethod { tm, err := settingsMgr.GetTrackingMethod() if err != nil { return TrackingMethodAnnotationAndLabel @@ -36,6 +39,33 @@ func GetTrackingMethod(settingsMgr *settings.SettingsManager) v1alpha1.TrackingM return v1alpha1.TrackingMethod(tm) } +func GetTrackingMethodFromApplicationInformer(appInformer cache.SharedIndexInformer, namespace, appName string) (string, error) { + obj, exists, err := appInformer.GetIndexer().GetByKey(namespace + "/" + appName) + app, ok := obj.(*v1alpha1.Application) + if !exists && err != nil && !ok { + return "", fmt.Errorf("application not found") + } + return string(app.Spec.TrackingMethod), nil +} + +func GetTrackingMethod(settingsMgr *settings.SettingsManager, application *v1alpha1.Application) v1alpha1.TrackingMethod { + if application.Spec.TrackingMethod != "" { + return application.Spec.TrackingMethod + } + return GetTrackingMethodFromSettings(settingsMgr) +} + +func (rt *resourceTracking) GetApplicationNameIfResourceBelongApp(un *unstructured.Unstructured, key string, appInformer cache.SharedIndexInformer, tm v1alpha1.TrackingMethod) string { + appName := rt.GetAppName(un, key, tm) + if appName != "" { + trackingMethod, err := GetTrackingMethodFromApplicationInformer(appInformer, un.GetNamespace(), appName) + if err == nil && trackingMethod != "" && trackingMethod == string(tm) { + return appName + } + } + return "" +} + func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string { switch trackingMethod { case TrackingMethodLabel: From b15628eb30de4565629bc4b59060474936b57c9f Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Thu, 23 Sep 2021 17:30:52 +0300 Subject: [PATCH 21/32] regenerate structs Signed-off-by: pashavictorovich --- assets/swagger.json | 4 + controller/cache/cache.go | 3 + controller/state.go | 2 +- manifests/core-install.yaml | 4 + manifests/crds/application-crd.yaml | 4 + manifests/ha/install.yaml | 4 + manifests/install.yaml | 4 + pkg/apis/application/v1alpha1/generated.pb.go | 882 +++++++++--------- pkg/apis/application/v1alpha1/generated.proto | 3 + .../application/v1alpha1/openapi_generated.go | 7 + pkg/apis/application/v1alpha1/types.go | 3 +- server/application/application.go | 4 +- 12 files changed, 500 insertions(+), 424 deletions(-) diff --git a/assets/swagger.json b/assets/swagger.json index 2a0af5a655341..fb730c2e90be2 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -5041,6 +5041,10 @@ }, "syncPolicy": { "$ref": "#/definitions/v1alpha1SyncPolicy" + }, + "trackingMethod": { + "type": "string", + "title": "TrackingMethod is ability configure way how to track resources on application level" } } }, diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 625f1ccf81af3..89c34ccc0183e 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -303,6 +303,8 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e var appName string + // Get application name from label first, if it is exist and same as defined tracking method, this app name is taken + // In case if application name can't be retrieve or not same as tracking method inside retrieved app, we do same flow but with annotations appNameFromLabels := c.resourceTracking.GetApplicationNameIfResourceBelongApp(un, cacheSettings.appInstanceLabelKey, c.appInformer, argo.TrackingMethodLabel) if appNameFromLabels != "" { appName = appNameFromLabels @@ -313,6 +315,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e } } + // if application not exist in labels and annotations with related tracking method, application should be retrieved with settings level tracking method if appName == "" { appName = c.resourceTracking.GetAppName(un, cacheSettings.appInstanceLabelKey, trackingMethod) } diff --git a/controller/state.go b/controller/state.go index faf769c91ecd8..97db9f06def28 100644 --- a/controller/state.go +++ b/controller/state.go @@ -175,7 +175,7 @@ func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1 ApiVersions: argo.APIGroupsToVersions(apiGroups), VerifySignature: verifySignature, HelmRepoCreds: permittedHelmCredentials, - TrackingMethod: string(argo.GetTrackingMethodFromApplication(m.settingsMgr, app)), + TrackingMethod: string(argo.GetTrackingMethod(m.settingsMgr, app)), }) if err != nil { return nil, nil, err diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 8fa27175a712b..84507fc2d0a62 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -792,6 +792,10 @@ spec: type: string type: array type: object + trackingMethod: + description: TrackingMethod is ability configure way how to track + resources on application level + type: string required: - destination - project diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 94053a7934fda..227b90a86b552 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -791,6 +791,10 @@ spec: type: string type: array type: object + trackingMethod: + description: TrackingMethod is ability configure way how to track + resources on application level + type: string required: - destination - project diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index cac3d0d5ef202..53b17dc25e9f7 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -792,6 +792,10 @@ spec: type: string type: array type: object + trackingMethod: + description: TrackingMethod is ability configure way how to track + resources on application level + type: string required: - destination - project diff --git a/manifests/install.yaml b/manifests/install.yaml index b46cfd107e0bb..9dd5c006f9a1a 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -792,6 +792,10 @@ spec: type: string type: array type: object + trackingMethod: + description: TrackingMethod is ability configure way how to track + resources on application level + type: string required: - destination - project diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index c33a9564d47c1..dabf840e1102e 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -2633,427 +2633,429 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 6715 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x24, 0xd9, - 0x55, 0xf0, 0x56, 0xb7, 0x7f, 0xba, 0x8f, 0x7f, 0x66, 0x7c, 0x67, 0x76, 0xd6, 0xf1, 0xb7, 0x19, - 0x8f, 0x6a, 0x95, 0x64, 0xbf, 0x2f, 0x89, 0xfd, 0xed, 0xb0, 0x84, 0x25, 0x1b, 0x36, 0xb8, 0x6d, - 0xcf, 0x8c, 0x67, 0x3c, 0xb6, 0xe7, 0xd8, 0x33, 0x43, 0x7e, 0x08, 0x5b, 0xae, 0xbe, 0xdd, 0x5d, - 0xe3, 0xee, 0xaa, 0xde, 0xaa, 0x6a, 0x8f, 0x3b, 0x21, 0x7f, 0x28, 0x90, 0x15, 0xf9, 0xd9, 0x28, - 0xc9, 0x43, 0x22, 0x21, 0x08, 0x3f, 0x42, 0xe2, 0x21, 0x02, 0x9e, 0x00, 0x21, 0x1e, 0xc8, 0x53, - 0x10, 0x12, 0x44, 0x02, 0x25, 0x81, 0x08, 0x93, 0x0c, 0x41, 0x01, 0x24, 0x40, 0x40, 0x5e, 0x98, - 0x27, 0x74, 0x7f, 0xea, 0xde, 0x5b, 0xd5, 0xdd, 0x63, 0x7b, 0xba, 0x66, 0x12, 0x45, 0xbc, 0x75, - 0x9d, 0x73, 0xee, 0x39, 0xe7, 0xfe, 0x9d, 0x7b, 0xee, 0xb9, 0xe7, 0xde, 0x86, 0xf5, 0xba, 0x17, - 0x37, 0x3a, 0xbb, 0x0b, 0x6e, 0xd0, 0x5a, 0x74, 0xc2, 0x7a, 0xd0, 0x0e, 0x83, 0x3b, 0xfc, 0xc7, - 0x5b, 0xdd, 0xea, 0xe2, 0xfe, 0xc5, 0xc5, 0xf6, 0x5e, 0x7d, 0xd1, 0x69, 0x7b, 0xd1, 0xa2, 0xd3, - 0x6e, 0x37, 0x3d, 0xd7, 0x89, 0xbd, 0xc0, 0x5f, 0xdc, 0x7f, 0xce, 0x69, 0xb6, 0x1b, 0xce, 0x73, - 0x8b, 0x75, 0xea, 0xd3, 0xd0, 0x89, 0x69, 0x75, 0xa1, 0x1d, 0x06, 0x71, 0x40, 0xde, 0xa1, 0xb9, - 0x2d, 0x24, 0xdc, 0xf8, 0x8f, 0x9f, 0x73, 0xab, 0x0b, 0xfb, 0x17, 0x17, 0xda, 0x7b, 0xf5, 0x05, - 0xc6, 0x6d, 0xc1, 0xe0, 0xb6, 0x90, 0x70, 0x9b, 0x7b, 0xab, 0xa1, 0x4b, 0x3d, 0xa8, 0x07, 0x8b, - 0x9c, 0xe9, 0x6e, 0xa7, 0xc6, 0xbf, 0xf8, 0x07, 0xff, 0x25, 0x84, 0xcd, 0xd9, 0x7b, 0x2f, 0x44, - 0x0b, 0x5e, 0xc0, 0xd4, 0x5b, 0x74, 0x83, 0x90, 0x2e, 0xee, 0xf7, 0x28, 0x34, 0xf7, 0xbc, 0xa6, - 0x69, 0x39, 0x6e, 0xc3, 0xf3, 0x69, 0xd8, 0xd5, 0x75, 0x6a, 0xd1, 0xd8, 0xe9, 0x57, 0x6a, 0x71, - 0x50, 0xa9, 0xb0, 0xe3, 0xc7, 0x5e, 0x8b, 0xf6, 0x14, 0x78, 0xdb, 0x51, 0x05, 0x22, 0xb7, 0x41, - 0x5b, 0x4e, 0xb6, 0x9c, 0xfd, 0x0a, 0x4c, 0x2d, 0xdd, 0xde, 0x5e, 0xea, 0xc4, 0x8d, 0xe5, 0xc0, - 0xaf, 0x79, 0x75, 0xf2, 0xe3, 0x30, 0xe1, 0x36, 0x3b, 0x51, 0x4c, 0xc3, 0x0d, 0xa7, 0x45, 0x67, - 0xad, 0x0b, 0xd6, 0xb3, 0xe5, 0xca, 0x99, 0xaf, 0x1e, 0xce, 0x3f, 0x71, 0xef, 0x70, 0x7e, 0x62, - 0x59, 0xa3, 0xd0, 0xa4, 0x23, 0xff, 0x17, 0xc6, 0xc3, 0xa0, 0x49, 0x97, 0x70, 0x63, 0xb6, 0xc0, - 0x8b, 0x9c, 0x92, 0x45, 0xc6, 0x51, 0x80, 0x31, 0xc1, 0xdb, 0x5f, 0x2f, 0x00, 0x2c, 0xb5, 0xdb, - 0x5b, 0x61, 0x70, 0x87, 0xba, 0x31, 0x79, 0x19, 0x4a, 0xac, 0x15, 0xaa, 0x4e, 0xec, 0x70, 0x69, - 0x13, 0x17, 0xff, 0xff, 0x82, 0xa8, 0xcc, 0x82, 0x59, 0x19, 0xdd, 0x73, 0x8c, 0x7a, 0x61, 0xff, - 0xb9, 0x85, 0xcd, 0x5d, 0x56, 0xfe, 0x3a, 0x8d, 0x9d, 0x0a, 0x91, 0xc2, 0x40, 0xc3, 0x50, 0x71, - 0x25, 0x3e, 0x8c, 0x44, 0x6d, 0xea, 0x72, 0xc5, 0x26, 0x2e, 0xae, 0x2f, 0x0c, 0x33, 0x44, 0x16, - 0xb4, 0xe6, 0xdb, 0x6d, 0xea, 0x56, 0x26, 0xa5, 0xe4, 0x11, 0xf6, 0x85, 0x5c, 0x0e, 0xd9, 0x87, - 0xb1, 0x28, 0x76, 0xe2, 0x4e, 0x34, 0x5b, 0xe4, 0x12, 0x37, 0x72, 0x93, 0xc8, 0xb9, 0x56, 0xa6, - 0xa5, 0xcc, 0x31, 0xf1, 0x8d, 0x52, 0x9a, 0xfd, 0x77, 0x16, 0x4c, 0x6b, 0xe2, 0x75, 0x2f, 0x8a, - 0xc9, 0x7b, 0x7b, 0x1a, 0x77, 0xe1, 0x78, 0x8d, 0xcb, 0x4a, 0xf3, 0xa6, 0x3d, 0x2d, 0x85, 0x95, - 0x12, 0x88, 0xd1, 0xb0, 0x2d, 0x18, 0xf5, 0x62, 0xda, 0x8a, 0x66, 0x0b, 0x17, 0x8a, 0xcf, 0x4e, - 0x5c, 0xbc, 0x92, 0x57, 0x3d, 0x2b, 0x53, 0x52, 0xe8, 0xe8, 0x1a, 0x63, 0x8f, 0x42, 0x8a, 0xfd, - 0x7d, 0x30, 0xeb, 0xc7, 0x1a, 0x9c, 0x3c, 0x07, 0x13, 0x51, 0xd0, 0x09, 0x5d, 0x8a, 0xb4, 0x1d, - 0x44, 0xb3, 0xd6, 0x85, 0x22, 0x1b, 0x7a, 0x6c, 0xa4, 0x6e, 0x6b, 0x30, 0x9a, 0x34, 0xe4, 0xd3, + // 6743 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x6c, 0x24, 0xd9, + 0x55, 0xf0, 0x56, 0xb7, 0x1f, 0xdd, 0xc7, 0x8f, 0x19, 0xdf, 0x99, 0x9d, 0x75, 0xfc, 0x6d, 0xc6, + 0xa3, 0x5a, 0x25, 0xd9, 0xef, 0x4b, 0x62, 0x7f, 0x3b, 0x2c, 0x61, 0xc9, 0x86, 0x0d, 0x6e, 0x7b, + 0x1e, 0x9e, 0xf1, 0x6b, 0x8e, 0x3d, 0x33, 0xe4, 0x41, 0xd8, 0x72, 0xf5, 0xed, 0xee, 0x1a, 0x77, + 0x57, 0xf5, 0x56, 0x55, 0x7b, 0xdc, 0x09, 0x79, 0xa1, 0x40, 0x56, 0xe4, 0xb1, 0x51, 0xc2, 0x8f, + 0x44, 0x42, 0x10, 0x1e, 0x42, 0xe2, 0x47, 0x04, 0xfc, 0x02, 0x84, 0xf8, 0x41, 0x7e, 0x05, 0x21, + 0x41, 0x24, 0x50, 0x12, 0x88, 0x30, 0xc9, 0x10, 0x08, 0x20, 0x01, 0x02, 0xf2, 0x87, 0xf9, 0x85, + 0xee, 0xa3, 0xee, 0xbd, 0x55, 0xdd, 0x3d, 0xb6, 0xa7, 0x6b, 0x26, 0x51, 0xc4, 0x3f, 0xf7, 0x39, + 0xa7, 0xce, 0x39, 0xf7, 0x75, 0xee, 0x39, 0xe7, 0x9e, 0x7b, 0x0d, 0x6b, 0x75, 0x2f, 0x6e, 0x74, + 0x76, 0x17, 0xdc, 0xa0, 0xb5, 0xe8, 0x84, 0xf5, 0xa0, 0x1d, 0x06, 0x77, 0xf8, 0x1f, 0x6f, 0x75, + 0xab, 0x8b, 0xfb, 0x17, 0x17, 0xdb, 0x7b, 0xf5, 0x45, 0xa7, 0xed, 0x45, 0x8b, 0x4e, 0xbb, 0xdd, + 0xf4, 0x5c, 0x27, 0xf6, 0x02, 0x7f, 0x71, 0xff, 0x39, 0xa7, 0xd9, 0x6e, 0x38, 0xcf, 0x2d, 0xd6, + 0xa9, 0x4f, 0x43, 0x27, 0xa6, 0xd5, 0x85, 0x76, 0x18, 0xc4, 0x01, 0x79, 0x87, 0xe6, 0xb6, 0x90, + 0x70, 0xe3, 0x7f, 0xfc, 0x8c, 0x5b, 0x5d, 0xd8, 0xbf, 0xb8, 0xd0, 0xde, 0xab, 0x2f, 0x30, 0x6e, + 0x0b, 0x06, 0xb7, 0x85, 0x84, 0xdb, 0xdc, 0x5b, 0x0d, 0x5d, 0xea, 0x41, 0x3d, 0x58, 0xe4, 0x4c, + 0x77, 0x3b, 0x35, 0xfe, 0x8b, 0xff, 0xe0, 0x7f, 0x09, 0x61, 0x73, 0xf6, 0xde, 0x0b, 0xd1, 0x82, + 0x17, 0x30, 0xf5, 0x16, 0xdd, 0x20, 0xa4, 0x8b, 0xfb, 0x3d, 0x0a, 0xcd, 0x3d, 0xaf, 0x69, 0x5a, + 0x8e, 0xdb, 0xf0, 0x7c, 0x1a, 0x76, 0x75, 0x9b, 0x5a, 0x34, 0x76, 0xfa, 0x7d, 0xb5, 0x38, 0xe8, + 0xab, 0xb0, 0xe3, 0xc7, 0x5e, 0x8b, 0xf6, 0x7c, 0xf0, 0xb6, 0xa3, 0x3e, 0x88, 0xdc, 0x06, 0x6d, + 0x39, 0xd9, 0xef, 0xec, 0x57, 0x60, 0x6a, 0xe9, 0xf6, 0xf6, 0x52, 0x27, 0x6e, 0x2c, 0x07, 0x7e, + 0xcd, 0xab, 0x93, 0x1f, 0x85, 0x09, 0xb7, 0xd9, 0x89, 0x62, 0x1a, 0x6e, 0x38, 0x2d, 0x3a, 0x6b, + 0x5d, 0xb0, 0x9e, 0x2d, 0x57, 0xce, 0x7c, 0xe5, 0x70, 0xfe, 0x89, 0x7b, 0x87, 0xf3, 0x13, 0xcb, + 0x1a, 0x85, 0x26, 0x1d, 0xf9, 0xbf, 0x30, 0x1e, 0x06, 0x4d, 0xba, 0x84, 0x1b, 0xb3, 0x05, 0xfe, + 0xc9, 0x29, 0xf9, 0xc9, 0x38, 0x0a, 0x30, 0x26, 0x78, 0xfb, 0x6b, 0x05, 0x80, 0xa5, 0x76, 0x7b, + 0x2b, 0x0c, 0xee, 0x50, 0x37, 0x26, 0x2f, 0x43, 0x89, 0xf5, 0x42, 0xd5, 0x89, 0x1d, 0x2e, 0x6d, + 0xe2, 0xe2, 0xff, 0x5f, 0x10, 0x8d, 0x59, 0x30, 0x1b, 0xa3, 0x47, 0x8e, 0x51, 0x2f, 0xec, 0x3f, + 0xb7, 0xb0, 0xb9, 0xcb, 0xbe, 0x5f, 0xa7, 0xb1, 0x53, 0x21, 0x52, 0x18, 0x68, 0x18, 0x2a, 0xae, + 0xc4, 0x87, 0x91, 0xa8, 0x4d, 0x5d, 0xae, 0xd8, 0xc4, 0xc5, 0xb5, 0x85, 0x61, 0xa6, 0xc8, 0x82, + 0xd6, 0x7c, 0xbb, 0x4d, 0xdd, 0xca, 0xa4, 0x94, 0x3c, 0xc2, 0x7e, 0x21, 0x97, 0x43, 0xf6, 0x61, + 0x2c, 0x8a, 0x9d, 0xb8, 0x13, 0xcd, 0x16, 0xb9, 0xc4, 0x8d, 0xdc, 0x24, 0x72, 0xae, 0x95, 0x69, + 0x29, 0x73, 0x4c, 0xfc, 0x46, 0x29, 0xcd, 0xfe, 0x5b, 0x0b, 0xa6, 0x35, 0xf1, 0x9a, 0x17, 0xc5, + 0xe4, 0xbd, 0x3d, 0x9d, 0xbb, 0x70, 0xbc, 0xce, 0x65, 0x5f, 0xf3, 0xae, 0x3d, 0x2d, 0x85, 0x95, + 0x12, 0x88, 0xd1, 0xb1, 0x2d, 0x18, 0xf5, 0x62, 0xda, 0x8a, 0x66, 0x0b, 0x17, 0x8a, 0xcf, 0x4e, + 0x5c, 0xbc, 0x9a, 0x57, 0x3b, 0x2b, 0x53, 0x52, 0xe8, 0xe8, 0x2a, 0x63, 0x8f, 0x42, 0x8a, 0xfd, + 0x3d, 0x30, 0xdb, 0xc7, 0x3a, 0x9c, 0x3c, 0x07, 0x13, 0x51, 0xd0, 0x09, 0x5d, 0x8a, 0xb4, 0x1d, + 0x44, 0xb3, 0xd6, 0x85, 0x22, 0x9b, 0x7a, 0x6c, 0xa6, 0x6e, 0x6b, 0x30, 0x9a, 0x34, 0xe4, 0xd3, 0x16, 0x4c, 0x56, 0x69, 0x14, 0x7b, 0x3e, 0x97, 0x9f, 0x28, 0xbf, 0x33, 0xb4, 0xf2, 0x09, 0x70, - 0x45, 0x33, 0xaf, 0x9c, 0x95, 0x15, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3, 0x19, 0x57, 0xa5, - 0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0xcd, 0xc7, 0x8c, 0x31, 0xe3, 0x56, 0x34, 0x0a, 0x4d, 0x3a, 0xe2, - 0xc3, 0x28, 0x9b, 0x51, 0xd1, 0xec, 0x08, 0xd7, 0x7f, 0x6d, 0x38, 0xfd, 0x65, 0xa3, 0xb2, 0xc9, - 0xaa, 0x5b, 0x9f, 0x7d, 0x45, 0x28, 0xc4, 0x90, 0x4f, 0x59, 0x30, 0x2b, 0x67, 0x3c, 0x52, 0xd1, - 0xa0, 0xb7, 0x1b, 0x5e, 0x4c, 0x9b, 0x5e, 0x14, 0xcf, 0x8e, 0x72, 0x1d, 0x16, 0x8f, 0x37, 0xb6, - 0x2e, 0x87, 0x41, 0xa7, 0x7d, 0xcd, 0xf3, 0xab, 0x95, 0x0b, 0x52, 0xd2, 0xec, 0xf2, 0x00, 0xc6, - 0x38, 0x50, 0x24, 0xf9, 0x9c, 0x05, 0x73, 0xbe, 0xd3, 0xa2, 0x51, 0xdb, 0x61, 0x5d, 0x2b, 0xd0, - 0x95, 0xa6, 0xe3, 0xee, 0x71, 0x8d, 0xc6, 0x1e, 0x4e, 0x23, 0x5b, 0x6a, 0x34, 0xb7, 0x31, 0x90, - 0x35, 0x3e, 0x40, 0x2c, 0xf9, 0x4d, 0x0b, 0x66, 0x82, 0xb0, 0xdd, 0x70, 0x7c, 0x5a, 0x4d, 0xb0, - 0xd1, 0xec, 0x38, 0x9f, 0x7a, 0xef, 0x1b, 0xae, 0x8b, 0x36, 0xb3, 0x6c, 0xaf, 0x07, 0xbe, 0x17, - 0x07, 0xe1, 0x36, 0x8d, 0x63, 0xcf, 0xaf, 0x47, 0x95, 0x27, 0xef, 0x1d, 0xce, 0xcf, 0xf4, 0x50, - 0x61, 0xaf, 0x3e, 0xe4, 0x03, 0x30, 0x11, 0x75, 0x7d, 0xf7, 0xb6, 0xe7, 0x57, 0x83, 0xbb, 0xd1, - 0x6c, 0x29, 0x8f, 0xe9, 0xbb, 0xad, 0x18, 0xca, 0x09, 0xa8, 0x05, 0xa0, 0x29, 0xad, 0x7f, 0xc7, - 0xe9, 0xa1, 0x54, 0xce, 0xbb, 0xe3, 0xf4, 0x60, 0x7a, 0x80, 0x58, 0xf2, 0x71, 0x0b, 0xa6, 0x22, - 0xaf, 0xee, 0x3b, 0x71, 0x27, 0xa4, 0xd7, 0x68, 0x37, 0x9a, 0x05, 0xae, 0xc8, 0xd5, 0x21, 0x5b, - 0xc5, 0x60, 0x59, 0x79, 0x52, 0xea, 0x38, 0x65, 0x42, 0x23, 0x4c, 0xcb, 0xed, 0x37, 0xd1, 0xf4, - 0xb0, 0x9e, 0xc8, 0x77, 0xa2, 0xe9, 0x41, 0x3d, 0x50, 0xa4, 0xfd, 0x67, 0x05, 0x38, 0x9d, 0x5d, - 0x83, 0xc8, 0x6f, 0x5b, 0x70, 0xea, 0xce, 0xdd, 0x78, 0x27, 0xd8, 0xa3, 0x7e, 0x54, 0xe9, 0x32, - 0x4b, 0xc1, 0xad, 0xef, 0xc4, 0x45, 0x37, 0xdf, 0xd5, 0x6e, 0xe1, 0x6a, 0x5a, 0xca, 0xaa, 0x1f, - 0x87, 0xdd, 0xca, 0x53, 0xb2, 0x3e, 0xa7, 0xae, 0xde, 0xde, 0x31, 0xb1, 0x98, 0x55, 0x6a, 0xee, - 0x13, 0x16, 0x9c, 0xed, 0xc7, 0x82, 0x9c, 0x86, 0xe2, 0x1e, 0xed, 0x0a, 0x07, 0x07, 0xd9, 0x4f, - 0xf2, 0xb3, 0x30, 0xba, 0xef, 0x34, 0x3b, 0x54, 0x3a, 0x0a, 0x97, 0x87, 0xab, 0x88, 0xd2, 0x0c, - 0x05, 0xd7, 0xb7, 0x17, 0x5e, 0xb0, 0xec, 0xbf, 0x2c, 0xc2, 0x84, 0xb1, 0x54, 0x3c, 0x06, 0xe7, - 0x27, 0x48, 0x39, 0x3f, 0xd7, 0x73, 0x5b, 0xe5, 0x06, 0x7a, 0x3f, 0x77, 0x33, 0xde, 0xcf, 0x66, - 0x7e, 0x22, 0x1f, 0xe8, 0xfe, 0x90, 0x18, 0xca, 0x41, 0x9b, 0x39, 0xb7, 0x6c, 0x15, 0x1d, 0xc9, - 0xa3, 0x0b, 0x37, 0x13, 0x76, 0x95, 0xa9, 0x7b, 0x87, 0xf3, 0x65, 0xf5, 0x89, 0x5a, 0x90, 0xfd, - 0x0d, 0x0b, 0xce, 0x1a, 0x3a, 0x2e, 0x07, 0x7e, 0xd5, 0xe3, 0x5d, 0x7b, 0x01, 0x46, 0xe2, 0x6e, - 0x3b, 0xf1, 0xa0, 0x55, 0x4b, 0xed, 0x74, 0xdb, 0x14, 0x39, 0x86, 0xf9, 0xcc, 0x2d, 0x1a, 0x45, - 0x4e, 0x9d, 0x66, 0x7d, 0xe6, 0xeb, 0x02, 0x8c, 0x09, 0x9e, 0x84, 0x40, 0x9a, 0x4e, 0x14, 0xef, - 0x84, 0x8e, 0x1f, 0x71, 0xf6, 0x3b, 0x5e, 0x8b, 0xca, 0x06, 0xfe, 0x7f, 0xc7, 0x1b, 0x31, 0xac, - 0x44, 0xe5, 0xdc, 0xbd, 0xc3, 0x79, 0xb2, 0xde, 0xc3, 0x09, 0xfb, 0x70, 0xb7, 0x3f, 0x67, 0xc1, - 0xb9, 0xfe, 0x6e, 0x0d, 0x79, 0x23, 0x8c, 0x45, 0x34, 0xdc, 0xa7, 0xa1, 0xac, 0x9d, 0xee, 0x12, - 0x0e, 0x45, 0x89, 0x25, 0x8b, 0x50, 0x56, 0x26, 0x57, 0xd6, 0x71, 0x46, 0x92, 0x96, 0xb5, 0x9d, - 0xd6, 0x34, 0xac, 0xd1, 0xd8, 0x87, 0x74, 0x82, 0x54, 0xa3, 0xf1, 0xfd, 0x06, 0xc7, 0xd8, 0x7f, - 0x6f, 0xc1, 0x29, 0x43, 0xab, 0xc7, 0xe0, 0xe5, 0xfa, 0x69, 0x2f, 0x77, 0x2d, 0xb7, 0xf1, 0x3c, - 0xc0, 0xcd, 0xfd, 0xca, 0x18, 0xcc, 0x98, 0xa3, 0x9e, 0x9b, 0x63, 0xbe, 0xc1, 0xa2, 0xed, 0xe0, - 0x26, 0xae, 0xcb, 0x36, 0xd7, 0x1b, 0x2c, 0x01, 0xc6, 0x04, 0xcf, 0x1a, 0xb1, 0xed, 0xc4, 0x0d, - 0xd9, 0xe0, 0xaa, 0x11, 0xb7, 0x9c, 0xb8, 0x81, 0x1c, 0x43, 0x5e, 0x82, 0xe9, 0xd8, 0x09, 0xeb, - 0x34, 0x46, 0xba, 0xef, 0x45, 0xc9, 0x7c, 0x29, 0x57, 0xce, 0x49, 0xda, 0xe9, 0x9d, 0x14, 0x16, - 0x33, 0xd4, 0xe4, 0x15, 0x18, 0x69, 0xd0, 0x66, 0x4b, 0xfa, 0x35, 0xdb, 0xf9, 0xcd, 0x70, 0x5e, - 0xd7, 0x2b, 0xb4, 0xd9, 0xaa, 0x94, 0x98, 0xca, 0xec, 0x17, 0x72, 0x51, 0xe4, 0x17, 0x2d, 0x28, - 0xef, 0x75, 0xa2, 0x38, 0x68, 0x79, 0xef, 0xa7, 0xb3, 0x25, 0x2e, 0xf8, 0x67, 0x72, 0x16, 0x7c, - 0x2d, 0xe1, 0x2f, 0xe6, 0xbb, 0xfa, 0x44, 0x2d, 0x99, 0x7c, 0x10, 0xc6, 0xf7, 0xa2, 0xc0, 0xf7, - 0x29, 0xf3, 0x54, 0x98, 0x12, 0xb7, 0xf2, 0x56, 0x42, 0x70, 0xaf, 0x4c, 0xb0, 0xbe, 0x95, 0x1f, - 0x98, 0xc8, 0xe4, 0xcd, 0x50, 0xf5, 0x42, 0xea, 0xc6, 0x41, 0xd8, 0x9d, 0x85, 0x47, 0xd2, 0x0c, - 0x2b, 0x09, 0x7f, 0xd1, 0x0c, 0xea, 0x13, 0xb5, 0x64, 0xd2, 0x85, 0xb1, 0x76, 0xb3, 0x53, 0xf7, - 0xfc, 0xd9, 0x09, 0xae, 0xc3, 0xcd, 0x9c, 0x75, 0xd8, 0xe2, 0xcc, 0x2b, 0xc0, 0x8c, 0x8a, 0xf8, - 0x8d, 0x52, 0x20, 0x79, 0x06, 0x46, 0xdd, 0x86, 0x13, 0xc6, 0xb3, 0x93, 0x7c, 0xcc, 0xaa, 0x49, - 0xb4, 0xcc, 0x80, 0x28, 0x70, 0xf6, 0xaf, 0x17, 0x60, 0x6e, 0x70, 0xc5, 0xc4, 0x6c, 0x72, 0x3b, - 0x61, 0x24, 0xec, 0x73, 0xc9, 0x9c, 0x4d, 0x1c, 0x8c, 0x09, 0x9e, 0x7c, 0xd4, 0x82, 0xf1, 0x3b, - 0xb2, 0xc7, 0x0b, 0x8f, 0xa4, 0xc7, 0xaf, 0xca, 0x1e, 0x57, 0x3a, 0x5c, 0x4d, 0x7a, 0x5d, 0xca, - 0x65, 0xea, 0xd2, 0x03, 0xb7, 0xd9, 0xa9, 0x26, 0x96, 0x51, 0x91, 0xae, 0x0a, 0x30, 0x26, 0x78, - 0x46, 0xea, 0xf9, 0x82, 0x74, 0x24, 0x4d, 0xba, 0xe6, 0x4b, 0x52, 0x89, 0xb7, 0xbf, 0x5b, 0x84, - 0x27, 0xfb, 0x4e, 0x3e, 0xb2, 0x00, 0xc0, 0x7d, 0x96, 0x4b, 0x1e, 0xdb, 0x60, 0x8a, 0x5d, 0xf5, - 0x34, 0x73, 0x31, 0x6e, 0x29, 0x28, 0x1a, 0x14, 0xe4, 0xc3, 0x00, 0x6d, 0x27, 0x74, 0x5a, 0x34, - 0xa6, 0x61, 0x62, 0x27, 0xaf, 0x0d, 0xd7, 0x4a, 0x4c, 0x8f, 0xad, 0x84, 0xa7, 0xf6, 0x71, 0x14, - 0x28, 0x42, 0x43, 0x24, 0xdb, 0x43, 0x87, 0xb4, 0x49, 0x9d, 0x88, 0x6e, 0xe8, 0xe5, 0x43, 0xed, - 0xa1, 0x51, 0xa3, 0xd0, 0xa4, 0x63, 0xeb, 0x18, 0xaf, 0x45, 0x24, 0xdb, 0x4a, 0xad, 0x63, 0xbc, - 0x9e, 0x11, 0x4a, 0x2c, 0x79, 0xcd, 0x82, 0xe9, 0x9a, 0xd7, 0xa4, 0x5a, 0xba, 0xdc, 0xf1, 0x6e, - 0x0e, 0x5f, 0xc9, 0x4b, 0x26, 0x5f, 0x6d, 0x81, 0x53, 0xe0, 0x08, 0x33, 0xe2, 0x59, 0x37, 0xef, - 0xd3, 0x90, 0x9b, 0xee, 0xb1, 0x74, 0x37, 0xdf, 0x12, 0x60, 0x4c, 0xf0, 0xf6, 0x17, 0x0b, 0x30, - 0x3b, 0x68, 0xcc, 0x91, 0x88, 0x8d, 0xac, 0xf8, 0x96, 0x13, 0x46, 0xd2, 0x7d, 0x1f, 0x72, 0x17, - 0x28, 0xf9, 0xde, 0x72, 0x42, 0x73, 0x8c, 0x72, 0x01, 0x98, 0x48, 0x22, 0x77, 0x60, 0x24, 0x6e, - 0x3a, 0x39, 0x85, 0x8d, 0x0c, 0x89, 0xda, 0xc9, 0x5a, 0x5f, 0x8a, 0x90, 0xcb, 0x20, 0x4f, 0xc3, - 0x48, 0xd3, 0xdb, 0x65, 0xce, 0x28, 0x1b, 0xc4, 0x7c, 0x55, 0x59, 0xf7, 0x76, 0x23, 0xe4, 0x50, - 0xfb, 0xeb, 0x56, 0x9f, 0xb6, 0x91, 0x46, 0x97, 0x0d, 0x2a, 0xea, 0xef, 0x7b, 0x61, 0xe0, 0xb7, - 0xa8, 0x1f, 0x67, 0x43, 0xa1, 0xab, 0x1a, 0x85, 0x26, 0x1d, 0xf9, 0x05, 0xab, 0xcf, 0x6c, 0x18, - 0x32, 0x06, 0x28, 0x55, 0x3a, 0xf6, 0x84, 0xb0, 0xff, 0x7d, 0xac, 0x8f, 0xfd, 0x53, 0x0b, 0x1a, - 0xb9, 0x08, 0xc0, 0xbc, 0xa9, 0xad, 0x90, 0xd6, 0xbc, 0x03, 0x59, 0x33, 0xc5, 0x72, 0x43, 0x61, - 0xd0, 0xa0, 0x4a, 0xca, 0x6c, 0x77, 0x6a, 0xac, 0x4c, 0xa1, 0xb7, 0x8c, 0xc0, 0xa0, 0x41, 0x45, - 0x9e, 0x87, 0x31, 0xaf, 0xe5, 0xd4, 0x69, 0xd2, 0xfe, 0x4f, 0xb3, 0xc9, 0xb5, 0xc6, 0x21, 0xf7, - 0x0f, 0xe7, 0xa7, 0x95, 0x42, 0x1c, 0x84, 0x92, 0x96, 0xfc, 0x96, 0x05, 0x93, 0x6e, 0xd0, 0x6a, - 0x05, 0xfe, 0xba, 0xb3, 0x4b, 0x9b, 0x49, 0x88, 0xeb, 0xce, 0xa3, 0x5a, 0xee, 0x17, 0x96, 0x0d, - 0x61, 0x62, 0x83, 0xa9, 0x02, 0x77, 0x26, 0x0a, 0x53, 0x5a, 0x99, 0x73, 0x70, 0xf4, 0xc1, 0x73, - 0x90, 0xfc, 0xa1, 0x05, 0x33, 0xa2, 0xec, 0x92, 0xef, 0x07, 0xb1, 0x8c, 0x3c, 0x8a, 0x18, 0x55, - 0xf0, 0x88, 0xab, 0x65, 0x48, 0x14, 0x75, 0x7b, 0x9d, 0x54, 0x73, 0xa6, 0x07, 0x8f, 0xbd, 0x4a, - 0x92, 0xcb, 0x30, 0x53, 0x0b, 0x42, 0x97, 0x9a, 0x0d, 0xc1, 0x1d, 0xbf, 0x92, 0x66, 0x74, 0x29, - 0x4b, 0x80, 0xbd, 0x65, 0xc8, 0x2d, 0x38, 0x67, 0x00, 0xcd, 0x76, 0x28, 0x71, 0x6e, 0xe7, 0x25, - 0xb7, 0x73, 0x97, 0xfa, 0x52, 0xe1, 0x80, 0xd2, 0x73, 0xef, 0x84, 0x99, 0x9e, 0xfe, 0xeb, 0xb3, - 0xbb, 0x3f, 0x6b, 0xee, 0xee, 0xcb, 0xc6, 0xa6, 0x7c, 0x6e, 0x05, 0xce, 0xf5, 0x6f, 0xa9, 0x93, - 0x70, 0xb1, 0x7f, 0xd5, 0x82, 0xa7, 0x06, 0xb8, 0x31, 0x6a, 0x5b, 0x63, 0x0d, 0xda, 0xd6, 0x10, - 0x07, 0x8a, 0xd4, 0xdf, 0x97, 0xc6, 0xe2, 0xd2, 0x70, 0x23, 0x62, 0xd5, 0xdf, 0x17, 0x1d, 0x3d, - 0x7e, 0xef, 0x70, 0xbe, 0xb8, 0xea, 0xef, 0x23, 0xe3, 0x6d, 0x7f, 0x7e, 0x2c, 0xb5, 0x73, 0xda, - 0x4e, 0x36, 0xeb, 0x5c, 0x51, 0xb9, 0x6f, 0xda, 0xcc, 0x79, 0x2c, 0x1a, 0x3b, 0x43, 0x11, 0x82, - 0x97, 0xe2, 0xc8, 0x27, 0x2c, 0x1e, 0xf5, 0x4e, 0x76, 0x94, 0xd2, 0xb3, 0x7a, 0x34, 0x41, 0x78, - 0x33, 0x96, 0x9e, 0x00, 0xd1, 0x94, 0xce, 0x66, 0x72, 0x5b, 0x04, 0x9d, 0xb2, 0xfe, 0x55, 0x12, - 0x17, 0x4f, 0xf0, 0xe4, 0x00, 0x20, 0xea, 0xfa, 0xee, 0x56, 0xd0, 0xf4, 0xdc, 0xae, 0x0c, 0x33, - 0xe4, 0x10, 0x39, 0x15, 0xfc, 0x84, 0x93, 0xa5, 0xbf, 0xd1, 0x90, 0x45, 0xbe, 0x64, 0xc1, 0x8c, - 0x57, 0xf7, 0x83, 0x90, 0xae, 0x78, 0xb5, 0x1a, 0x0d, 0xa9, 0xef, 0xd2, 0xc4, 0x0f, 0xb9, 0x3d, - 0x9c, 0x06, 0x49, 0xd0, 0x6f, 0x2d, 0xcb, 0x5e, 0x4f, 0xf1, 0x1e, 0x14, 0xf6, 0x2a, 0x43, 0xaa, - 0x30, 0xe2, 0xf9, 0xb5, 0x40, 0x1a, 0xb6, 0xca, 0x70, 0x4a, 0xad, 0xf9, 0xb5, 0x40, 0xcf, 0x15, - 0xf6, 0x85, 0x9c, 0x3b, 0x59, 0x87, 0xb3, 0xa1, 0xdc, 0x89, 0x5e, 0xf1, 0x22, 0xe6, 0xcf, 0xaf, - 0x7b, 0x2d, 0x2f, 0xe6, 0x46, 0xa9, 0x58, 0x99, 0xbd, 0x77, 0x38, 0x7f, 0x16, 0xfb, 0xe0, 0xb1, - 0x6f, 0x29, 0xfb, 0xd5, 0x72, 0x7a, 0xbb, 0x2d, 0x82, 0x49, 0x1f, 0x84, 0x72, 0xa8, 0xc2, 0xf7, - 0xc2, 0x33, 0x5a, 0xcf, 0xa7, 0x8d, 0x65, 0x14, 0x4b, 0xc5, 0x41, 0x74, 0xa0, 0x5e, 0x4b, 0x64, - 0x1e, 0x12, 0xeb, 0x79, 0x39, 0x2d, 0x72, 0x18, 0x5f, 0x52, 0xaa, 0x0e, 0xd8, 0x75, 0x7d, 0x17, - 0xb9, 0x0c, 0x12, 0xc2, 0x58, 0x83, 0x3a, 0xcd, 0xb8, 0x21, 0xe3, 0x49, 0x57, 0x87, 0xf5, 0x69, - 0x19, 0xaf, 0x6c, 0xac, 0x4e, 0x40, 0x51, 0x4a, 0x22, 0x07, 0x30, 0xde, 0x10, 0x9d, 0x20, 0xd7, - 0xf6, 0xeb, 0xc3, 0x36, 0x6e, 0xaa, 0x67, 0xf5, 0xfc, 0x95, 0x00, 0x4c, 0xc4, 0x91, 0x5f, 0xb2, - 0x00, 0xdc, 0x24, 0x48, 0x97, 0x4c, 0x1f, 0xcc, 0xcd, 0xee, 0xa8, 0xf8, 0x9f, 0x76, 0x8d, 0x14, - 0x28, 0x42, 0x43, 0x32, 0x79, 0x19, 0x26, 0x43, 0xea, 0x06, 0xbe, 0xeb, 0x35, 0x69, 0x75, 0x29, - 0xe6, 0x6e, 0xfc, 0xc9, 0x82, 0x79, 0xa7, 0x99, 0x7f, 0x82, 0x06, 0x0f, 0x4c, 0x71, 0x24, 0xaf, - 0x5a, 0x30, 0xad, 0x02, 0x95, 0xac, 0x43, 0xa8, 0x0c, 0xd8, 0xac, 0xe7, 0x14, 0x16, 0xe5, 0x3c, - 0x2b, 0x84, 0x6d, 0x57, 0xd2, 0x30, 0xcc, 0xc8, 0x25, 0xef, 0x06, 0x08, 0x76, 0x79, 0x50, 0x90, - 0x55, 0xb5, 0x74, 0xe2, 0xaa, 0x4e, 0x8b, 0xf8, 0x76, 0xc2, 0x01, 0x0d, 0x6e, 0xe4, 0x1a, 0x80, - 0x98, 0x36, 0x3b, 0xdd, 0x36, 0xe5, 0x41, 0x99, 0x72, 0xe5, 0xcd, 0x49, 0xe3, 0x6f, 0x2b, 0xcc, - 0xfd, 0xc3, 0xf9, 0xde, 0xdd, 0x2e, 0x8f, 0xc6, 0x1a, 0xc5, 0xc9, 0x07, 0x60, 0x3c, 0xea, 0xb4, - 0x5a, 0x8e, 0x0a, 0xae, 0x6c, 0xe5, 0xb7, 0x22, 0x0a, 0xbe, 0x7a, 0x6c, 0x4a, 0x00, 0x26, 0x12, - 0x6d, 0x1f, 0x48, 0x2f, 0x3d, 0x79, 0x1e, 0x26, 0xe9, 0x41, 0x4c, 0x43, 0xdf, 0x69, 0xde, 0xc4, - 0xf5, 0x64, 0x3b, 0xce, 0x3b, 0x7f, 0xd5, 0x80, 0x63, 0x8a, 0x8a, 0xd8, 0xca, 0xf3, 0x2e, 0x70, - 0x7a, 0xd0, 0x9e, 0x77, 0xe2, 0x67, 0xdb, 0xff, 0x5d, 0x48, 0x79, 0x04, 0x3b, 0x21, 0xa5, 0x24, - 0x80, 0x51, 0x3f, 0xa8, 0x2a, 0xa3, 0x77, 0x35, 0x1f, 0xa3, 0xb7, 0x11, 0x54, 0x8d, 0x73, 0x65, - 0xf6, 0x15, 0xa1, 0x90, 0xc3, 0x0f, 0xde, 0x92, 0x13, 0x4a, 0x8e, 0x90, 0x4e, 0x50, 0x9e, 0x92, - 0xd5, 0xc1, 0xdb, 0xa6, 0x29, 0x08, 0xd3, 0x72, 0xc9, 0x1e, 0x8c, 0x36, 0x82, 0x28, 0x16, 0x7b, - 0x95, 0xa1, 0xbd, 0xb0, 0x2b, 0x41, 0x14, 0xf3, 0x25, 0x4c, 0x55, 0x9b, 0x41, 0x22, 0x14, 0x32, - 0xec, 0xef, 0x59, 0xa9, 0xe0, 0xcb, 0x6d, 0x27, 0x76, 0x1b, 0xab, 0xfb, 0x6c, 0xff, 0x78, 0x2d, - 0x75, 0x70, 0xf0, 0x13, 0xe6, 0xc1, 0xc1, 0xfd, 0xc3, 0xf9, 0x37, 0x0d, 0x4a, 0xf4, 0xb9, 0xcb, - 0x38, 0x2c, 0x70, 0x16, 0xc6, 0x19, 0xc3, 0x47, 0x2c, 0x98, 0x30, 0xd4, 0x93, 0x0b, 0x4a, 0x8e, - 0x31, 0x6c, 0xe5, 0x5c, 0x19, 0x40, 0x34, 0x45, 0xda, 0x9f, 0xb5, 0x60, 0xbc, 0xe2, 0xb8, 0x7b, - 0x41, 0xad, 0x46, 0xde, 0x02, 0xa5, 0x6a, 0x47, 0x1e, 0xd1, 0x88, 0xfa, 0xa9, 0xc8, 0xfb, 0x8a, - 0x84, 0xa3, 0xa2, 0x60, 0x63, 0xb8, 0xe6, 0xb8, 0x71, 0x10, 0x72, 0xb5, 0x8b, 0x62, 0x0c, 0x5f, - 0xe2, 0x10, 0x94, 0x18, 0xb6, 0x49, 0x6f, 0x39, 0x07, 0x49, 0xe1, 0x6c, 0xe4, 0xe7, 0xba, 0x46, - 0xa1, 0x49, 0x67, 0xff, 0x69, 0x19, 0xc6, 0xe5, 0x59, 0xe8, 0xb1, 0x4f, 0x33, 0x12, 0x2f, 0xbe, - 0x30, 0xd0, 0x8b, 0x8f, 0x60, 0xcc, 0xe5, 0x69, 0x54, 0x72, 0x29, 0x1d, 0x32, 0x06, 0x26, 0x15, - 0x14, 0x99, 0x59, 0x5a, 0x2d, 0xf1, 0x8d, 0x52, 0x14, 0xf9, 0x8c, 0x05, 0xa7, 0xdc, 0xc0, 0xf7, - 0xa9, 0xab, 0xed, 0xfc, 0x48, 0x1e, 0xa7, 0x7d, 0xcb, 0x69, 0xa6, 0xfa, 0xd0, 0x35, 0x83, 0xc0, - 0xac, 0x78, 0xf2, 0x22, 0x4c, 0x89, 0x36, 0xbb, 0x95, 0xda, 0x1f, 0xeb, 0xf3, 0x6f, 0x13, 0x89, - 0x69, 0x5a, 0xb2, 0x20, 0xe2, 0x0c, 0xfc, 0x40, 0x48, 0xec, 0x91, 0x65, 0xf0, 0x51, 0x9d, 0x18, - 0x45, 0x68, 0x50, 0x90, 0x10, 0x48, 0x48, 0x6b, 0x21, 0x8d, 0x1a, 0x48, 0x5f, 0xe9, 0xd0, 0x28, - 0xe6, 0x6b, 0xcc, 0xf8, 0xc3, 0x9d, 0x8d, 0x61, 0x0f, 0x27, 0xec, 0xc3, 0x9d, 0xec, 0x49, 0x47, - 0xb7, 0x94, 0xc7, 0x74, 0x92, 0xdd, 0x3c, 0xd0, 0xdf, 0x9d, 0x87, 0xd1, 0xa8, 0xe1, 0x84, 0x55, - 0xbe, 0xb6, 0x15, 0x2b, 0x65, 0x66, 0x4b, 0xb6, 0x19, 0x00, 0x05, 0x9c, 0xac, 0xc0, 0xe9, 0xcc, - 0xe9, 0x7d, 0xc4, 0x57, 0xaf, 0x52, 0x65, 0x56, 0xb2, 0x3b, 0x9d, 0x39, 0xf7, 0x8f, 0xb0, 0xa7, - 0x84, 0xb9, 0x09, 0x9a, 0x38, 0x62, 0x13, 0xd4, 0x85, 0xb1, 0xa6, 0x08, 0x04, 0x4c, 0x72, 0x53, - 0x79, 0x23, 0x97, 0x06, 0x58, 0x30, 0x03, 0x30, 0x6a, 0xb4, 0xcb, 0x80, 0x82, 0x14, 0x48, 0x3e, - 0xc5, 0x0c, 0x9a, 0x11, 0x3b, 0x98, 0xe2, 0x0a, 0xdc, 0xca, 0x47, 0x81, 0x9e, 0x50, 0x89, 0xb6, - 0x6e, 0x46, 0x20, 0xc2, 0x94, 0x3f, 0xf7, 0x93, 0x30, 0xf1, 0xb0, 0x71, 0x87, 0x97, 0xe0, 0xf4, - 0x50, 0x11, 0x87, 0xef, 0x5b, 0x90, 0xf4, 0xeb, 0xb2, 0xe3, 0x36, 0x28, 0x1b, 0x32, 0xe4, 0x25, - 0x98, 0x56, 0xdb, 0x88, 0xe5, 0xa0, 0x23, 0xe3, 0x96, 0x45, 0x1d, 0x58, 0xc6, 0x14, 0x16, 0x33, - 0xd4, 0x64, 0x11, 0xca, 0xac, 0x9d, 0x44, 0x51, 0x61, 0x76, 0xd5, 0x56, 0x65, 0x69, 0x6b, 0x4d, - 0x96, 0xd2, 0x34, 0x24, 0x80, 0x99, 0xa6, 0x13, 0xc5, 0x5c, 0x03, 0xb6, 0xab, 0x78, 0xc8, 0x93, - 0x69, 0x9e, 0xbc, 0xb4, 0x9e, 0x65, 0x84, 0xbd, 0xbc, 0xed, 0x6f, 0x8c, 0xc0, 0x54, 0xca, 0x32, - 0xb2, 0x55, 0xa5, 0x13, 0x31, 0xd7, 0x47, 0x85, 0x58, 0xd4, 0xaa, 0x72, 0x53, 0xc2, 0x51, 0x51, - 0x30, 0xea, 0xb6, 0x13, 0x45, 0x77, 0x83, 0xb0, 0x2a, 0x4d, 0xb9, 0xa2, 0xde, 0x92, 0x70, 0x54, - 0x14, 0x6c, 0x7d, 0xd9, 0xa5, 0x4e, 0x48, 0x43, 0x9e, 0xcc, 0x91, 0x5d, 0x5f, 0x2a, 0x1a, 0x85, - 0x26, 0x1d, 0x37, 0xca, 0x71, 0x33, 0x5a, 0x6e, 0x7a, 0xd4, 0x8f, 0x85, 0x9a, 0xf9, 0x18, 0xe5, - 0x9d, 0xf5, 0x6d, 0x93, 0xa9, 0x36, 0xca, 0x19, 0x04, 0x66, 0xc5, 0x93, 0x8f, 0x59, 0x30, 0xe5, - 0xdc, 0x8d, 0x74, 0xae, 0x2f, 0xb7, 0xca, 0x43, 0x2f, 0x52, 0xa9, 0xf4, 0xe1, 0xca, 0x0c, 0x33, - 0xef, 0x29, 0x10, 0xa6, 0x85, 0x92, 0x2f, 0x58, 0x40, 0xe8, 0x01, 0x75, 0xb7, 0xc2, 0x60, 0xdf, - 0xab, 0x26, 0x7d, 0x28, 0xb7, 0x3f, 0x43, 0x7a, 0xdb, 0xab, 0x3d, 0x7c, 0x85, 0x55, 0xef, 0x85, - 0x63, 0x1f, 0x1d, 0xec, 0xbf, 0x2d, 0xc2, 0x84, 0x61, 0x8c, 0xfb, 0xae, 0xac, 0xd6, 0x0f, 0xd9, - 0xca, 0x5a, 0x38, 0xc1, 0xca, 0xfa, 0x61, 0x28, 0xbb, 0x89, 0xa1, 0xc8, 0x27, 0x37, 0x39, 0x6b, - 0x7e, 0xb4, 0xad, 0x50, 0x20, 0xd4, 0x32, 0xc9, 0x65, 0x98, 0x31, 0xd8, 0x48, 0x23, 0x33, 0xc2, - 0x8d, 0x8c, 0x0a, 0x34, 0x2d, 0x65, 0x09, 0xb0, 0xb7, 0x0c, 0x79, 0x8e, 0x79, 0xb5, 0x9e, 0xac, - 0x97, 0xd8, 0xc5, 0xcb, 0xbc, 0xdf, 0xa5, 0xad, 0xb5, 0x04, 0x8c, 0x26, 0x8d, 0xfd, 0x0d, 0x4b, - 0x75, 0xee, 0x63, 0x48, 0x1a, 0xb9, 0x93, 0x4e, 0x1a, 0x59, 0xcd, 0xa5, 0x99, 0x07, 0x24, 0x8c, - 0x6c, 0xc0, 0xf8, 0x72, 0xd0, 0x6a, 0x39, 0x7e, 0x95, 0xbc, 0x01, 0xc6, 0x5d, 0xf1, 0x53, 0x6e, - 0x13, 0x79, 0x16, 0x81, 0xc4, 0x62, 0x82, 0x23, 0x4f, 0xc3, 0x88, 0x13, 0xd6, 0x93, 0xad, 0x21, - 0x3f, 0x14, 0x5b, 0x0a, 0xeb, 0x11, 0x72, 0xa8, 0xfd, 0xb9, 0x02, 0xc0, 0x72, 0xd0, 0x6a, 0x3b, - 0x21, 0xad, 0xee, 0x04, 0xff, 0x1b, 0x23, 0x16, 0x3b, 0x86, 0x4f, 0x5a, 0x40, 0x58, 0xab, 0x04, - 0x3e, 0xf5, 0xf5, 0x41, 0x1c, 0x5b, 0x2f, 0xdd, 0x04, 0x2a, 0x17, 0x1f, 0x3d, 0x07, 0x12, 0x04, - 0x6a, 0x9a, 0x63, 0xec, 0x22, 0x9e, 0x49, 0x56, 0xfc, 0x62, 0x3a, 0xc1, 0x81, 0x1f, 0x4a, 0x4b, - 0x07, 0xc0, 0xfe, 0x7c, 0x01, 0xce, 0x09, 0xb3, 0x75, 0xdd, 0xf1, 0x9d, 0x3a, 0x6d, 0x31, 0xad, - 0x8e, 0x7b, 0xda, 0xe0, 0x32, 0xf7, 0xd5, 0x4b, 0xf2, 0x19, 0x86, 0x1d, 0x9c, 0x62, 0x50, 0x89, - 0x61, 0xb4, 0xe6, 0x7b, 0x31, 0x72, 0xe6, 0x24, 0x82, 0x52, 0x72, 0xdb, 0x44, 0x1a, 0x9b, 0x9c, - 0x04, 0xa9, 0x79, 0x77, 0x59, 0xb2, 0x47, 0x25, 0xc8, 0xfe, 0x8a, 0x05, 0x59, 0x23, 0xca, 0xf7, - 0x77, 0x22, 0x23, 0x31, 0xbb, 0xbf, 0x4b, 0x27, 0x10, 0x9e, 0x20, 0x1f, 0xef, 0xbd, 0x30, 0xe1, - 0xc4, 0x31, 0x6d, 0xb5, 0xc5, 0x66, 0xa3, 0xf8, 0x70, 0x01, 0xad, 0xeb, 0x41, 0xd5, 0xab, 0x79, - 0x7c, 0x93, 0x61, 0xb2, 0xb3, 0x6f, 0x40, 0x29, 0x39, 0xc3, 0x39, 0x46, 0x67, 0x3e, 0x93, 0x72, - 0x10, 0x07, 0x0c, 0x97, 0xfb, 0x05, 0xe8, 0xb3, 0x0a, 0xb2, 0x2a, 0x6b, 0x7b, 0x91, 0xaa, 0xf2, - 0xc9, 0x6c, 0x06, 0x39, 0x10, 0xe7, 0x57, 0x22, 0x72, 0xf2, 0xae, 0xbc, 0x57, 0x71, 0x7d, 0xa4, - 0x35, 0x21, 0xf5, 0x53, 0xc7, 0x5a, 0xe4, 0x22, 0x80, 0x36, 0xf3, 0x32, 0x8f, 0x43, 0xc5, 0x5e, - 0xf5, 0x6a, 0x80, 0x06, 0x15, 0x73, 0xea, 0x3c, 0x3f, 0x8a, 0x9d, 0x66, 0xf3, 0x8a, 0xe7, 0xc7, - 0x72, 0x77, 0xaa, 0x4c, 0xc0, 0x9a, 0x46, 0xa1, 0x49, 0x37, 0xf7, 0x36, 0xa3, 0x5f, 0x4e, 0xe2, - 0xa8, 0x7f, 0xb2, 0x00, 0xd3, 0x97, 0xfd, 0xce, 0xd6, 0xe5, 0xad, 0xce, 0x6e, 0xd3, 0x73, 0xaf, - 0xd1, 0x2e, 0xeb, 0xb4, 0x3d, 0xda, 0x5d, 0x5b, 0x91, 0xcd, 0xae, 0x3a, 0xed, 0x1a, 0x03, 0xa2, - 0xc0, 0x31, 0x35, 0x6b, 0x9e, 0x5f, 0xa7, 0x61, 0x3b, 0xf4, 0xa4, 0x37, 0x6e, 0xa8, 0x79, 0x49, - 0xa3, 0xd0, 0xa4, 0x63, 0xbc, 0x83, 0xbb, 0x3e, 0x0d, 0xb3, 0xf6, 0x63, 0x93, 0x01, 0x51, 0xe0, - 0x18, 0x51, 0x1c, 0x76, 0xa2, 0x58, 0xb6, 0x98, 0x22, 0xda, 0x61, 0x40, 0x14, 0x38, 0x36, 0x3c, - 0xa2, 0xce, 0x2e, 0x8f, 0xab, 0x66, 0x4e, 0xb8, 0xb7, 0x05, 0x18, 0x13, 0x3c, 0x23, 0xdd, 0xa3, - 0xdd, 0x15, 0xb6, 0x9a, 0x66, 0x12, 0x52, 0xae, 0x09, 0x30, 0x26, 0x78, 0xfb, 0x1f, 0x2d, 0x20, - 0xe9, 0xe6, 0x78, 0x0c, 0x0b, 0xf2, 0x2b, 0xe9, 0x05, 0x79, 0xc8, 0x10, 0x78, 0x5a, 0xfd, 0x01, - 0xeb, 0xf2, 0x6f, 0x58, 0x30, 0x69, 0x9e, 0x86, 0x90, 0x7a, 0xc6, 0x10, 0x6d, 0xa6, 0x0d, 0xd1, - 0xfd, 0xc3, 0xf9, 0x9f, 0xea, 0x77, 0x19, 0xb2, 0xee, 0xc5, 0x41, 0x3b, 0x7a, 0x2b, 0xf5, 0xeb, - 0x9e, 0x4f, 0x79, 0xac, 0x4f, 0x9c, 0xa2, 0xa4, 0x8e, 0x5a, 0x96, 0x83, 0x2a, 0x7d, 0x08, 0x4b, - 0x66, 0xdf, 0x86, 0x99, 0x9e, 0x2c, 0xa4, 0x63, 0x18, 0x9d, 0x23, 0x73, 0x4c, 0xed, 0x4f, 0x59, - 0x30, 0x95, 0x4a, 0xe2, 0xca, 0xc9, 0x94, 0xf1, 0x59, 0x11, 0xf0, 0x83, 0xb4, 0xd0, 0xf3, 0x45, - 0xa4, 0xad, 0x64, 0xcc, 0x0a, 0x8d, 0x42, 0x93, 0xce, 0xfe, 0x6c, 0x01, 0x4a, 0x49, 0x4c, 0xf6, - 0x18, 0xaa, 0x7c, 0xc2, 0x82, 0x29, 0xb5, 0x35, 0xe6, 0x0e, 0x73, 0x2e, 0x89, 0x3c, 0x4c, 0x03, - 0x75, 0xda, 0xca, 0x1c, 0x66, 0xe5, 0xb9, 0xa3, 0x29, 0x0c, 0xd3, 0xb2, 0xc9, 0x2d, 0x80, 0xa8, - 0x1b, 0xc5, 0xb4, 0x65, 0xb8, 0xee, 0xb6, 0x31, 0x3b, 0x16, 0xdc, 0x20, 0xa4, 0x6c, 0x2e, 0x6c, - 0x04, 0x55, 0xba, 0xad, 0x28, 0xb5, 0x21, 0xd4, 0x30, 0x34, 0x38, 0xd9, 0xbf, 0x5b, 0x80, 0xd3, - 0x59, 0x95, 0xc8, 0x7b, 0x60, 0x32, 0x91, 0x6e, 0xdc, 0x01, 0x4d, 0x02, 0xd1, 0x93, 0x68, 0xe0, - 0xee, 0x1f, 0xce, 0xcf, 0xf7, 0x5e, 0x82, 0x5d, 0x30, 0x49, 0x30, 0xc5, 0x4c, 0xc4, 0x27, 0x64, - 0x20, 0xad, 0xd2, 0x5d, 0x6a, 0xb7, 0x65, 0x90, 0xc1, 0x88, 0x4f, 0x98, 0x58, 0xcc, 0x50, 0x93, - 0x2d, 0x38, 0x6b, 0x40, 0x36, 0xa8, 0x57, 0x6f, 0xec, 0x06, 0xa1, 0xb8, 0x6c, 0x50, 0xac, 0x3c, - 0x2d, 0xb9, 0x9c, 0xc5, 0x3e, 0x34, 0xd8, 0xb7, 0x24, 0x79, 0x0b, 0x94, 0x5c, 0xa7, 0xed, 0xb8, - 0x5e, 0xdc, 0x95, 0x7b, 0x11, 0x65, 0x47, 0x96, 0x25, 0x1c, 0x15, 0x85, 0x7d, 0x1d, 0x46, 0x8e, - 0x39, 0x82, 0x8e, 0xb5, 0x2e, 0xdf, 0x80, 0x12, 0x63, 0xc7, 0xec, 0x46, 0x5e, 0x2c, 0x03, 0x28, - 0x25, 0x77, 0x4f, 0x88, 0x0d, 0x45, 0xcf, 0x49, 0x42, 0x40, 0xaa, 0x5a, 0x6b, 0x51, 0xd4, 0xe1, - 0x5e, 0x07, 0x43, 0x92, 0x67, 0xa0, 0x48, 0x0f, 0xda, 0xd9, 0x58, 0xcf, 0xea, 0x41, 0xdb, 0x0b, - 0x69, 0xc4, 0x88, 0xe8, 0x41, 0x9b, 0xcc, 0x41, 0xc1, 0xab, 0xca, 0x05, 0x05, 0x24, 0x4d, 0x61, - 0x6d, 0x05, 0x0b, 0x5e, 0xd5, 0x3e, 0x80, 0xb2, 0xba, 0xec, 0x42, 0xf6, 0x12, 0x3b, 0x6b, 0xe5, - 0x71, 0x88, 0x92, 0xf0, 0x1d, 0x60, 0x61, 0x3b, 0x00, 0x3a, 0xfd, 0x2f, 0x2f, 0xfb, 0x72, 0x01, - 0x46, 0xdc, 0x40, 0x66, 0xda, 0x96, 0x34, 0x1b, 0x6e, 0x60, 0x39, 0xc6, 0xbe, 0x0d, 0xd3, 0xd7, - 0xfc, 0xe0, 0xae, 0xcf, 0x16, 0xbe, 0x4b, 0x1e, 0x6d, 0x56, 0x19, 0xe3, 0x1a, 0xfb, 0x91, 0x5d, - 0xce, 0x39, 0x16, 0x05, 0x4e, 0xdd, 0x08, 0x29, 0x0c, 0xba, 0x11, 0x62, 0xff, 0xb2, 0x05, 0xa7, - 0xb3, 0xa9, 0x7e, 0x3f, 0xb0, 0x1d, 0xc6, 0x47, 0x98, 0x32, 0x49, 0x2e, 0xd9, 0x66, 0x5b, 0x9c, - 0x5a, 0xbf, 0x00, 0x93, 0xbb, 0x1d, 0xaf, 0x59, 0x95, 0xdf, 0x52, 0x1f, 0x95, 0x2d, 0x57, 0x31, - 0x70, 0x98, 0xa2, 0x64, 0x7e, 0xda, 0xae, 0xe7, 0x3b, 0x61, 0x77, 0x4b, 0xaf, 0x1b, 0xca, 0x3c, - 0x55, 0x14, 0x06, 0x0d, 0x2a, 0xfb, 0xaf, 0x8b, 0xa0, 0x6f, 0xdd, 0x10, 0x4f, 0x26, 0x45, 0x58, - 0x79, 0x84, 0xad, 0xb6, 0xbb, 0xbe, 0xab, 0xef, 0xf7, 0x94, 0x32, 0x39, 0x11, 0x1f, 0xb7, 0x98, - 0x87, 0xe8, 0xc5, 0x9e, 0xc3, 0x8d, 0x85, 0xdc, 0x28, 0x6d, 0xe5, 0x74, 0x6e, 0xbe, 0x26, 0x38, - 0x07, 0xa1, 0xe9, 0x73, 0x2a, 0x61, 0x68, 0x4a, 0x26, 0x2f, 0xcb, 0x93, 0x86, 0x62, 0x6e, 0x29, - 0x35, 0xa5, 0xcc, 0xf1, 0x42, 0x1b, 0x46, 0x43, 0x1a, 0x87, 0x49, 0x32, 0xd3, 0xb5, 0x61, 0xcf, - 0x5d, 0xe3, 0xb0, 0xbb, 0x1d, 0xb3, 0xcd, 0x58, 0xdd, 0x70, 0x8c, 0x38, 0x18, 0x85, 0x20, 0x3b, - 0x02, 0xd2, 0xdb, 0x16, 0x27, 0x8c, 0xe2, 0x2e, 0x42, 0xd9, 0xe9, 0xc4, 0x41, 0x8b, 0x35, 0x13, - 0xef, 0x9e, 0x92, 0x11, 0xa7, 0x4e, 0x10, 0xa8, 0x69, 0xec, 0xd7, 0x46, 0x21, 0x93, 0xa5, 0x40, - 0x0e, 0xcc, 0x1b, 0x63, 0x56, 0xbe, 0x37, 0xc6, 0x94, 0x32, 0xfd, 0x6e, 0x8d, 0x91, 0x3a, 0x8c, - 0xb6, 0x1b, 0x4e, 0x94, 0xcc, 0xd1, 0x1b, 0x49, 0x33, 0x6d, 0x31, 0xe0, 0xfd, 0xc3, 0xf9, 0x9f, - 0x3e, 0x9e, 0x1f, 0xc8, 0xc6, 0xea, 0xa2, 0x48, 0xd9, 0xd4, 0xa2, 0x39, 0x0f, 0x14, 0xfc, 0x4d, - 0x4f, 0xb0, 0x78, 0xc4, 0x9e, 0xf6, 0xa3, 0x96, 0x48, 0x6d, 0x43, 0x1a, 0x75, 0x9a, 0xb1, 0x1c, - 0x0d, 0x37, 0x72, 0x9c, 0x65, 0x82, 0xb1, 0xce, 0x71, 0x13, 0xdf, 0x68, 0x08, 0x25, 0xef, 0x81, - 0x72, 0x14, 0x3b, 0x61, 0xfc, 0x90, 0x19, 0x31, 0xaa, 0xd1, 0xb7, 0x13, 0x26, 0xa8, 0xf9, 0x91, - 0x77, 0x03, 0xd4, 0x3c, 0xdf, 0x8b, 0x1a, 0x0f, 0x79, 0x40, 0xc8, 0x15, 0xbf, 0xa4, 0x38, 0xa0, - 0xc1, 0x8d, 0x59, 0x37, 0x3e, 0xb6, 0x45, 0x48, 0xb3, 0xc4, 0xd7, 0x52, 0x65, 0xdd, 0x50, 0x61, - 0xd0, 0xa0, 0xb2, 0x3f, 0x04, 0x67, 0xb2, 0xb7, 0xb5, 0xe5, 0xd6, 0xb0, 0x1e, 0x06, 0x9d, 0x76, - 0x76, 0x2d, 0xe1, 0xb7, 0x79, 0x51, 0xe0, 0x98, 0x8d, 0xdf, 0xf3, 0xfc, 0x6a, 0xd6, 0xc6, 0x5f, - 0xf3, 0xfc, 0x2a, 0x72, 0xcc, 0x31, 0xae, 0xd2, 0xfd, 0xb1, 0x05, 0x17, 0x8e, 0xba, 0x54, 0xce, - 0xb6, 0xfd, 0x77, 0x9d, 0xd0, 0x97, 0xd7, 0x64, 0xb8, 0xed, 0xb8, 0xed, 0x84, 0x3e, 0x72, 0x28, - 0xe9, 0xc2, 0x98, 0xc8, 0x02, 0x94, 0xde, 0xf1, 0x8d, 0x7c, 0xaf, 0xb8, 0xb3, 0xbd, 0x95, 0x8a, - 0xd6, 0x88, 0x0c, 0x44, 0x94, 0x02, 0xed, 0xd7, 0x2c, 0x20, 0x9b, 0xfb, 0x34, 0x0c, 0xbd, 0xaa, - 0x91, 0xb7, 0x48, 0x9e, 0x87, 0xc9, 0x3b, 0xdb, 0x9b, 0x1b, 0x5b, 0x81, 0xe7, 0xf3, 0xf4, 0x7b, - 0x23, 0x5b, 0xe6, 0xaa, 0x01, 0xc7, 0x14, 0x15, 0x59, 0x86, 0x99, 0x3b, 0xaf, 0xb0, 0x25, 0x67, - 0xf5, 0xa0, 0x1d, 0xd2, 0x28, 0x52, 0x0f, 0x43, 0x94, 0xc5, 0xc1, 0xd4, 0xd5, 0x1b, 0x19, 0x24, - 0xf6, 0xd2, 0xdb, 0x5f, 0x2e, 0xc0, 0x84, 0xf1, 0x8e, 0xc2, 0x31, 0xfc, 0x91, 0xcc, 0xd3, 0x0f, - 0x85, 0x63, 0x3e, 0xfd, 0xf0, 0x2c, 0x94, 0xda, 0x41, 0xd3, 0x73, 0x3d, 0x95, 0x57, 0x3f, 0xc9, - 0x4f, 0xaf, 0x24, 0x0c, 0x15, 0x96, 0xdc, 0x85, 0xb2, 0xba, 0x10, 0x2d, 0x33, 0xed, 0xf2, 0xf2, - 0xc8, 0xd4, 0x5c, 0xd3, 0x17, 0x9d, 0xb5, 0x2c, 0x62, 0xc3, 0x18, 0x1f, 0xa8, 0x49, 0x6c, 0x9e, - 0xa7, 0x6e, 0xf0, 0x11, 0x1c, 0xa1, 0xc4, 0xd8, 0xff, 0x32, 0x0a, 0x65, 0xa4, 0xed, 0x60, 0x39, - 0xa4, 0xd5, 0x88, 0xbc, 0x1e, 0x8a, 0x9d, 0xb0, 0x29, 0x1b, 0x4b, 0x85, 0x79, 0x6e, 0xe2, 0x3a, - 0x32, 0x78, 0x6a, 0x75, 0x28, 0x9c, 0xe8, 0x8c, 0xaf, 0x78, 0xe4, 0x19, 0xdf, 0x8b, 0x30, 0x15, - 0x45, 0x8d, 0xad, 0xd0, 0xdb, 0x77, 0x62, 0x36, 0xe6, 0x64, 0x4c, 0x44, 0x1f, 0xaa, 0x6c, 0x5f, - 0xd1, 0x48, 0x4c, 0xd3, 0x92, 0xcb, 0x30, 0xa3, 0x4f, 0xda, 0x68, 0x18, 0xf3, 0x10, 0x88, 0x88, - 0x96, 0xa8, 0x33, 0x0d, 0x7d, 0x36, 0x27, 0x09, 0xb0, 0xb7, 0x0c, 0x59, 0x81, 0xd3, 0x29, 0x20, - 0x53, 0x44, 0x84, 0x52, 0xd4, 0x29, 0x7e, 0x8a, 0x0f, 0xd3, 0xa5, 0xa7, 0x04, 0xb9, 0x0e, 0x67, - 0x44, 0xff, 0xf2, 0x8b, 0xf4, 0xaa, 0x46, 0xe3, 0x9c, 0xd1, 0xff, 0x91, 0x8c, 0xce, 0x5c, 0xee, - 0x25, 0xc1, 0x7e, 0xe5, 0xd8, 0x08, 0x55, 0xe0, 0xb5, 0x15, 0x69, 0xd8, 0xd4, 0x08, 0x55, 0x6c, - 0xd6, 0xaa, 0x68, 0xd2, 0x91, 0x77, 0xc1, 0x53, 0xfa, 0x53, 0x44, 0xd0, 0xc4, 0x6a, 0xbf, 0x22, - 0x93, 0x18, 0xe6, 0x25, 0x8b, 0xa7, 0x2e, 0xf7, 0x25, 0xab, 0xe2, 0xa0, 0xf2, 0x64, 0x17, 0xe6, - 0x14, 0x6a, 0x95, 0xcd, 0xde, 0x76, 0xe8, 0x45, 0xb4, 0xe2, 0x44, 0xf4, 0x66, 0xd8, 0xe4, 0x69, - 0x0f, 0x65, 0xfd, 0x18, 0xc4, 0x65, 0x2f, 0xbe, 0xd2, 0x8f, 0x12, 0xd7, 0xf1, 0x01, 0x5c, 0x98, - 0x73, 0x41, 0x7d, 0x67, 0xb7, 0x49, 0x37, 0x97, 0xd7, 0x78, 0x32, 0x84, 0xe1, 0x5c, 0xac, 0x26, - 0x08, 0xd4, 0x34, 0xca, 0xb5, 0x9f, 0x1c, 0xe8, 0xda, 0x7f, 0xcb, 0x82, 0x29, 0x35, 0xd8, 0x1f, - 0x43, 0xbc, 0xab, 0x99, 0x8e, 0x77, 0x5d, 0x1e, 0xd6, 0xab, 0x93, 0x9a, 0x0f, 0xd8, 0x88, 0x7d, - 0xaf, 0x0c, 0xc0, 0x9f, 0xd7, 0xf1, 0x78, 0x92, 0xed, 0x05, 0x18, 0x09, 0x69, 0x3b, 0xc8, 0x5a, - 0x3e, 0x46, 0x81, 0x1c, 0xf3, 0xc3, 0x3b, 0x9d, 0xfb, 0x9d, 0xf9, 0x8e, 0xfe, 0x60, 0xcf, 0x7c, - 0xb7, 0xe1, 0x49, 0xcf, 0x8f, 0xa8, 0xdb, 0x09, 0xe5, 0x42, 0x77, 0x25, 0x88, 0x94, 0x75, 0x28, - 0x55, 0x5e, 0x2f, 0x19, 0x3d, 0xb9, 0xd6, 0x8f, 0x08, 0xfb, 0x97, 0x65, 0x4d, 0x9a, 0x20, 0xe4, - 0x6d, 0x1e, 0x1d, 0x1e, 0x90, 0x70, 0x54, 0x14, 0x7a, 0x42, 0xac, 0xd7, 0x92, 0xeb, 0x3a, 0x99, - 0x09, 0xb1, 0x7e, 0x69, 0x1b, 0x35, 0x4d, 0x7f, 0xab, 0x58, 0xce, 0xc9, 0x2a, 0xc2, 0x89, 0xad, - 0x62, 0x32, 0x3f, 0x27, 0x06, 0x3e, 0xc6, 0x90, 0x2c, 0xd6, 0x93, 0x03, 0x17, 0xeb, 0x97, 0x60, - 0xda, 0xf3, 0x1b, 0x34, 0xf4, 0x62, 0x5a, 0xe5, 0x73, 0x61, 0x76, 0x8a, 0x37, 0x84, 0x8a, 0x5c, - 0xad, 0xa5, 0xb0, 0x98, 0xa1, 0x4e, 0x1b, 0x95, 0xe9, 0x63, 0x18, 0x95, 0x01, 0xa6, 0xfc, 0x54, - 0x3e, 0xa6, 0xfc, 0xf4, 0xf0, 0xa6, 0x7c, 0xe6, 0x91, 0x9a, 0x72, 0x92, 0x8b, 0x29, 0x7f, 0x06, - 0x46, 0xdb, 0x61, 0x70, 0xd0, 0x9d, 0x3d, 0x93, 0xf6, 0xa6, 0xb7, 0x18, 0x10, 0x05, 0xce, 0x4c, - 0x7d, 0x3b, 0xfb, 0xe0, 0xd4, 0x37, 0xfb, 0xd5, 0x02, 0x3c, 0xa9, 0x2d, 0x1d, 0x1b, 0x5f, 0x5e, - 0x8d, 0xcd, 0x75, 0x7e, 0xa7, 0x52, 0xa4, 0x5b, 0x18, 0x41, 0x53, 0x1d, 0x7f, 0x55, 0x18, 0x34, - 0xa8, 0x78, 0xec, 0x91, 0x86, 0x3c, 0x61, 0x37, 0x6b, 0x06, 0x97, 0x25, 0x1c, 0x15, 0x05, 0x7f, - 0x9b, 0x8f, 0x86, 0xb1, 0x3c, 0x7b, 0xc9, 0xe6, 0x22, 0x2d, 0x6b, 0x14, 0x9a, 0x74, 0xcc, 0x5d, - 0x74, 0x93, 0x29, 0xc8, 0x4c, 0xe1, 0xa4, 0x70, 0x17, 0xd5, 0xac, 0x53, 0xd8, 0x44, 0x1d, 0x1e, - 0x64, 0x1e, 0xed, 0x55, 0x87, 0x07, 0x0d, 0x14, 0x85, 0xfd, 0x5f, 0x16, 0xbc, 0xae, 0x6f, 0x53, - 0x3c, 0x86, 0xe5, 0xed, 0x20, 0xbd, 0xbc, 0x6d, 0x0f, 0xbf, 0xbc, 0xf5, 0xd4, 0x62, 0xc0, 0x52, - 0xf7, 0x37, 0x16, 0x4c, 0x6b, 0xfa, 0xc7, 0x50, 0x55, 0x2f, 0xd7, 0x57, 0xf6, 0xb4, 0xea, 0x22, - 0x91, 0x34, 0x55, 0xb7, 0x6f, 0xf1, 0xba, 0x89, 0xbd, 0xd7, 0x92, 0x9b, 0x3c, 0x63, 0x73, 0xc4, - 0x26, 0xa6, 0x0b, 0x63, 0xfc, 0xe2, 0x71, 0x94, 0xcf, 0x1e, 0x30, 0x2d, 0x9f, 0x87, 0x41, 0xf5, - 0x1e, 0x90, 0x7f, 0x46, 0x28, 0x05, 0xf2, 0x74, 0x72, 0x2f, 0x62, 0xf6, 0xb2, 0x2a, 0xc3, 0xb5, - 0x3a, 0x9d, 0x5c, 0xc2, 0x51, 0x51, 0xd8, 0x2d, 0x98, 0x4d, 0x33, 0x5f, 0xa1, 0x35, 0x1e, 0x6a, - 0x3b, 0x56, 0x35, 0x17, 0xa1, 0xec, 0xf0, 0x52, 0xeb, 0x1d, 0x27, 0xfb, 0x96, 0xcd, 0x52, 0x82, - 0x40, 0x4d, 0x63, 0xff, 0x8e, 0x05, 0x67, 0xfa, 0x54, 0x26, 0xc7, 0x30, 0x75, 0xac, 0xad, 0xc0, - 0x80, 0xf7, 0x85, 0xaa, 0xb4, 0xe6, 0x24, 0xc1, 0x1c, 0xc3, 0xaa, 0xad, 0x08, 0x30, 0x26, 0x78, - 0xfb, 0x5f, 0x2d, 0x38, 0x95, 0xd6, 0x35, 0x22, 0x57, 0x81, 0x88, 0xca, 0xac, 0x78, 0x91, 0x1b, - 0xec, 0xd3, 0xb0, 0xcb, 0x6a, 0x2e, 0xb4, 0x9e, 0x93, 0x9c, 0xc8, 0x52, 0x0f, 0x05, 0xf6, 0x29, - 0xc5, 0xb3, 0x76, 0xab, 0xaa, 0xb5, 0x93, 0x91, 0x72, 0x2b, 0xcf, 0x91, 0xa2, 0x3b, 0xd3, 0xdc, - 0x41, 0x2b, 0x91, 0x68, 0xca, 0xb7, 0xbf, 0x3d, 0x02, 0xea, 0x1c, 0x8b, 0x87, 0x0d, 0x72, 0x0a, - 0xba, 0xa4, 0x1e, 0x3c, 0x2a, 0x9e, 0xe0, 0xc1, 0xa3, 0x91, 0x07, 0xc5, 0x08, 0xc4, 0xeb, 0x3b, - 0xda, 0x17, 0x35, 0x8c, 0xfe, 0x8e, 0x46, 0xa1, 0x49, 0xc7, 0x34, 0x69, 0x7a, 0xfb, 0x54, 0x14, - 0x1a, 0x4b, 0x6b, 0xb2, 0x9e, 0x20, 0x50, 0xd3, 0x30, 0x4d, 0xaa, 0x5e, 0xad, 0x26, 0x77, 0x8a, - 0x4a, 0x13, 0xd6, 0x3a, 0xc8, 0x31, 0x8c, 0xa2, 0x11, 0x04, 0x7b, 0xd2, 0xff, 0x53, 0x14, 0x57, - 0x82, 0x60, 0x0f, 0x39, 0x86, 0x79, 0x2c, 0x7e, 0x10, 0xb6, 0x9c, 0xa6, 0xf7, 0x7e, 0x5a, 0x55, - 0x52, 0xa4, 0xdf, 0xa7, 0x3c, 0x96, 0x8d, 0x5e, 0x12, 0xec, 0x57, 0x8e, 0x8d, 0xc0, 0x76, 0x48, - 0xab, 0x9e, 0x1b, 0x9b, 0xdc, 0x20, 0x3d, 0x02, 0xb7, 0x7a, 0x28, 0xb0, 0x4f, 0x29, 0xb2, 0x04, - 0xa7, 0x92, 0x73, 0xc8, 0x24, 0x57, 0x44, 0x38, 0x83, 0xca, 0x0f, 0xc7, 0x34, 0x1a, 0xb3, 0xf4, - 0xcc, 0xda, 0xb4, 0x64, 0xc6, 0x0e, 0x77, 0x13, 0x0d, 0x6b, 0x93, 0x64, 0xf2, 0xa0, 0xa2, 0xb0, - 0x7f, 0xaf, 0xc0, 0x56, 0xc7, 0x01, 0xf7, 0x6a, 0x1f, 0x5b, 0x90, 0x2f, 0x3d, 0x22, 0x47, 0x8e, - 0x31, 0x22, 0x9f, 0x87, 0xc9, 0x3b, 0x51, 0xe0, 0xab, 0x00, 0xda, 0xe8, 0xc0, 0x00, 0x9a, 0x41, - 0xd5, 0x3f, 0x80, 0x36, 0x76, 0xc2, 0x00, 0xda, 0x9f, 0x8f, 0xc2, 0x39, 0x75, 0x74, 0x4c, 0xe3, - 0xbb, 0x41, 0xb8, 0xe7, 0xf9, 0x75, 0x7e, 0xdc, 0xfa, 0x25, 0x0b, 0x26, 0xc5, 0xf0, 0x96, 0x2f, - 0x10, 0x88, 0xe3, 0xc5, 0x5a, 0x4e, 0x97, 0xc4, 0x52, 0xc2, 0x16, 0x76, 0x0c, 0x41, 0x99, 0xe7, - 0x20, 0x4c, 0x14, 0xa6, 0x34, 0x22, 0x1f, 0x04, 0x48, 0x9e, 0xc9, 0xaa, 0xe5, 0xf4, 0x58, 0x58, - 0xa2, 0x1f, 0xd2, 0x9a, 0x76, 0x25, 0x77, 0x94, 0x10, 0x34, 0x04, 0x92, 0x57, 0x2d, 0x75, 0x29, - 0x43, 0x9c, 0x15, 0xbd, 0xfc, 0x48, 0xda, 0xe6, 0x38, 0x77, 0x34, 0x10, 0xc6, 0x3d, 0xbf, 0xce, - 0xba, 0x55, 0xc6, 0x1c, 0xdf, 0xd4, 0x2f, 0x55, 0x61, 0x3d, 0x70, 0xaa, 0x15, 0xa7, 0xe9, 0xf8, - 0x2e, 0x0d, 0xd7, 0x04, 0xb9, 0xf9, 0x58, 0x11, 0x07, 0x60, 0xc2, 0xa8, 0xe7, 0x16, 0xe4, 0xe8, - 0x71, 0x6e, 0x41, 0xce, 0xbd, 0x13, 0x66, 0x7a, 0x3a, 0xf3, 0x44, 0x77, 0x34, 0x1e, 0xfe, 0x7a, - 0x87, 0xfd, 0x27, 0x63, 0x7a, 0x8d, 0xd9, 0x08, 0xaa, 0xe2, 0x2e, 0x5e, 0xa8, 0x7b, 0x54, 0xba, - 0x8a, 0x39, 0x0e, 0x11, 0xe3, 0xc1, 0x23, 0x05, 0x44, 0x53, 0x24, 0x1b, 0xa3, 0x6d, 0x27, 0xa4, - 0xfe, 0xa3, 0x1e, 0xa3, 0x5b, 0x4a, 0x08, 0x1a, 0x02, 0x49, 0x23, 0x75, 0x98, 0x79, 0x69, 0xf8, - 0xc3, 0x4c, 0xe6, 0xbd, 0xf6, 0xbd, 0x33, 0xf5, 0x19, 0x0b, 0xa6, 0xfd, 0xd4, 0xc8, 0x95, 0x07, - 0x5a, 0x3b, 0x8f, 0x62, 0x56, 0x88, 0x3b, 0xd0, 0x69, 0x18, 0x66, 0xe4, 0xf7, 0x5b, 0x81, 0x46, - 0x4f, 0xb8, 0x02, 0xe9, 0x4b, 0xbd, 0x63, 0x83, 0x2e, 0xf5, 0x12, 0x5f, 0x5d, 0xe7, 0x1f, 0xcf, - 0xfd, 0x3a, 0x3f, 0xf4, 0xb9, 0xca, 0x7f, 0x1b, 0xca, 0x6e, 0x48, 0x9d, 0xf8, 0x21, 0x6f, 0x76, - 0xf3, 0x27, 0xe6, 0x96, 0x13, 0x06, 0xa8, 0x79, 0xd9, 0x7f, 0x55, 0x84, 0xd3, 0x49, 0x8b, 0x24, - 0x07, 0x3d, 0x6c, 0x39, 0x13, 0x72, 0xb5, 0x2f, 0xaa, 0x96, 0xb3, 0x2b, 0x09, 0x02, 0x35, 0x0d, - 0x73, 0x9f, 0x3a, 0x11, 0xdd, 0x6c, 0x53, 0x7f, 0xdd, 0xdb, 0x8d, 0x78, 0x8b, 0x1b, 0xd9, 0x62, - 0x37, 0x35, 0x0a, 0x4d, 0x3a, 0xe6, 0x3b, 0x0b, 0x37, 0x36, 0xca, 0x9e, 0x9b, 0x4a, 0xf7, 0x18, - 0x13, 0x3c, 0xf9, 0x62, 0xdf, 0x77, 0x39, 0xf2, 0xc9, 0x18, 0xe8, 0x39, 0xdf, 0x3a, 0xe1, 0x83, - 0x1c, 0xaf, 0x59, 0x70, 0x6a, 0x2f, 0x95, 0xaa, 0x92, 0x98, 0xe4, 0x21, 0x13, 0x20, 0xd3, 0xf9, - 0x2f, 0x7a, 0x08, 0xa7, 0xe1, 0x11, 0x66, 0xa5, 0xdb, 0xff, 0x61, 0x81, 0x69, 0x9e, 0x8e, 0xe7, - 0x08, 0x19, 0x2f, 0x2d, 0x15, 0x8e, 0x78, 0x69, 0x29, 0xf1, 0x99, 0x8a, 0xc7, 0xf3, 0xd1, 0x47, - 0x4e, 0xe0, 0xa3, 0x8f, 0x0e, 0x74, 0xb2, 0x5e, 0x0f, 0xc5, 0x8e, 0x57, 0x95, 0x6e, 0xb6, 0x3e, - 0xbb, 0x5a, 0x5b, 0x41, 0x06, 0xb7, 0xff, 0x68, 0x54, 0x6f, 0xab, 0xe5, 0x41, 0xf7, 0x8f, 0x44, - 0xb5, 0x6b, 0x2a, 0x9f, 0x55, 0xd4, 0x7c, 0xa3, 0x27, 0x9f, 0xf5, 0x1d, 0x27, 0xcf, 0x63, 0x10, - 0x0d, 0x34, 0x28, 0x9d, 0x75, 0xfc, 0x88, 0x24, 0x86, 0x3b, 0x50, 0x62, 0x3b, 0x11, 0x1e, 0x1f, - 0x2b, 0xa5, 0x94, 0x2a, 0x5d, 0x91, 0xf0, 0xfb, 0x87, 0xf3, 0x6f, 0x3f, 0xb9, 0x5a, 0x49, 0x69, - 0x54, 0xfc, 0x49, 0x04, 0x65, 0xf6, 0x9b, 0xe7, 0x5b, 0xc8, 0x3d, 0xce, 0x4d, 0x65, 0x8b, 0x12, - 0x44, 0x2e, 0xc9, 0x1c, 0x5a, 0x0e, 0xf1, 0xa1, 0xcc, 0xdf, 0x04, 0xe2, 0x42, 0xc5, 0x56, 0x68, - 0x4b, 0x65, 0x3d, 0x24, 0x88, 0xfb, 0x87, 0xf3, 0x2f, 0x9e, 0x5c, 0xa8, 0x2a, 0x8e, 0x5a, 0x84, - 0xfd, 0xdd, 0xa2, 0x1e, 0xbb, 0x32, 0x8d, 0xf9, 0x47, 0x62, 0xec, 0xbe, 0x90, 0x19, 0xbb, 0x17, - 0x7a, 0xc6, 0xee, 0xb4, 0x7e, 0x37, 0x27, 0x35, 0x1a, 0x1f, 0xf7, 0x02, 0x7b, 0xf4, 0xb6, 0x9b, - 0x7b, 0x16, 0xaf, 0x74, 0xbc, 0x90, 0x46, 0x5b, 0x61, 0xc7, 0xf7, 0xfc, 0x3a, 0x1f, 0x8e, 0x25, - 0xd3, 0xb3, 0x48, 0xa1, 0x31, 0x4b, 0x6f, 0x7f, 0x99, 0x1f, 0x4f, 0x1a, 0xa9, 0x5b, 0xac, 0x97, - 0x9b, 0xfc, 0x59, 0x25, 0x91, 0x3c, 0xaa, 0x7a, 0x59, 0xbc, 0xa5, 0x24, 0x70, 0xe4, 0x2e, 0x8c, - 0xef, 0x8a, 0xa7, 0x1d, 0xf2, 0xb9, 0x4b, 0x24, 0xdf, 0x89, 0xe0, 0xb7, 0x36, 0x93, 0x47, 0x23, - 0xee, 0xeb, 0x9f, 0x98, 0x48, 0xb3, 0x7f, 0xad, 0x08, 0xa7, 0x32, 0x8f, 0xfe, 0xb0, 0xfd, 0x79, - 0xf2, 0xc2, 0x53, 0x36, 0x98, 0xae, 0x5e, 0x32, 0x56, 0x14, 0xe4, 0x7d, 0x00, 0x55, 0xda, 0x6e, - 0x06, 0x5d, 0xee, 0xb8, 0x8c, 0x9c, 0xd8, 0x71, 0x51, 0xbe, 0xee, 0x8a, 0xe2, 0x82, 0x06, 0x47, - 0x99, 0x31, 0x3b, 0x2a, 0x1e, 0xae, 0x48, 0x67, 0xcc, 0x1a, 0x57, 0xea, 0xc6, 0x1e, 0xef, 0x95, - 0x3a, 0x0f, 0x4e, 0x09, 0x15, 0x55, 0x82, 0xd4, 0x43, 0xe4, 0x41, 0x9d, 0x61, 0x23, 0x6a, 0x25, - 0xcd, 0x06, 0xb3, 0x7c, 0xed, 0x4f, 0x17, 0x98, 0xfb, 0x26, 0x1a, 0xfb, 0x7a, 0x12, 0xcb, 0x7e, - 0x23, 0x8c, 0x39, 0x9d, 0xb8, 0x11, 0xf4, 0x3c, 0xb5, 0xb1, 0xc4, 0xa1, 0x28, 0xb1, 0x64, 0x1d, - 0x46, 0xaa, 0x4e, 0x9c, 0xbc, 0xc4, 0x7f, 0x12, 0xe5, 0x74, 0xe0, 0xca, 0x89, 0x29, 0x72, 0x2e, - 0xe4, 0x69, 0x18, 0x89, 0x9d, 0x7a, 0xea, 0x0d, 0xd0, 0x1d, 0xa7, 0x1e, 0x21, 0x87, 0x9a, 0xab, - 0xcb, 0xc8, 0x11, 0xab, 0xcb, 0x8b, 0xc6, 0x7f, 0x44, 0x18, 0x87, 0x24, 0xbd, 0xff, 0xeb, 0x20, - 0x72, 0xf8, 0x53, 0xb4, 0xf6, 0x8f, 0xc1, 0xa4, 0xf9, 0xbf, 0x0f, 0xc7, 0xba, 0x02, 0x64, 0xff, - 0xf3, 0x08, 0x4c, 0xa5, 0x92, 0xe8, 0x52, 0xa3, 0xdc, 0x3a, 0x72, 0x94, 0xf3, 0xe3, 0xaf, 0x8e, - 0x4f, 0x65, 0x8a, 0xa4, 0x71, 0xfc, 0xd5, 0xf1, 0x29, 0x0a, 0x1c, 0xeb, 0x95, 0x6a, 0xd8, 0xc5, - 0x8e, 0x2f, 0x83, 0xe8, 0xaa, 0x57, 0x56, 0x38, 0x14, 0x25, 0x96, 0x6d, 0x60, 0x27, 0x23, 0x6e, - 0x14, 0x85, 0x8d, 0x90, 0xb3, 0xe6, 0x6a, 0x1e, 0xcf, 0x93, 0xc9, 0x84, 0x51, 0xbe, 0xa1, 0x37, - 0x21, 0x98, 0x92, 0x48, 0x3e, 0x66, 0x99, 0x0f, 0xb3, 0x8d, 0xe5, 0x71, 0xf8, 0x93, 0xcd, 0x51, - 0x14, 0x33, 0xe8, 0xc1, 0xef, 0xb3, 0x45, 0x6a, 0x02, 0x8f, 0x3f, 0x9a, 0x09, 0x0c, 0x7d, 0x26, - 0xef, 0x9b, 0xa1, 0xdc, 0x72, 0x7c, 0xaf, 0x46, 0xa3, 0x58, 0xfc, 0x67, 0x4b, 0x59, 0xec, 0x9e, - 0xae, 0x27, 0x40, 0xd4, 0x78, 0xfe, 0xcf, 0x48, 0xbc, 0x62, 0x62, 0x13, 0x53, 0x36, 0xfe, 0x19, - 0x49, 0x83, 0xd1, 0xa4, 0xb1, 0x7f, 0xdf, 0x82, 0x27, 0xfb, 0x36, 0xc6, 0x0f, 0x6f, 0xb4, 0xd2, - 0xfe, 0x83, 0x02, 0x9c, 0xe9, 0x93, 0x64, 0x4a, 0xba, 0x8f, 0xec, 0xfd, 0x3e, 0x99, 0xc5, 0x3a, - 0x35, 0x70, 0x6c, 0x9c, 0x6c, 0x19, 0xd2, 0x4b, 0x41, 0xf1, 0xb1, 0x2e, 0x05, 0xf6, 0x97, 0x0b, - 0x60, 0xbc, 0x34, 0x49, 0x3e, 0x64, 0xe6, 0x53, 0x5b, 0x79, 0xe5, 0xfe, 0x0a, 0xe6, 0x2a, 0x1f, - 0x5b, 0xb4, 0x5a, 0xbf, 0xf4, 0xec, 0xec, 0x78, 0x2d, 0x1c, 0x3d, 0x5e, 0x49, 0x33, 0x49, 0x5c, - 0x2f, 0xe6, 0x9f, 0xb8, 0x5e, 0xee, 0x49, 0x5a, 0xff, 0x15, 0x4b, 0x8c, 0xb4, 0x4c, 0x95, 0xb4, - 0x85, 0xb5, 0x1e, 0x60, 0x61, 0xdf, 0x02, 0xa5, 0x88, 0x36, 0x6b, 0xcc, 0xb3, 0x93, 0x96, 0x58, - 0x8d, 0x89, 0x6d, 0x09, 0x47, 0x45, 0xc1, 0xaf, 0xb4, 0x36, 0x9b, 0xc1, 0xdd, 0xd5, 0x56, 0x3b, - 0xee, 0x4a, 0x9b, 0xac, 0xaf, 0xb4, 0x2a, 0x0c, 0x1a, 0x54, 0xf6, 0x7f, 0x5a, 0xa2, 0x3b, 0xa5, - 0x8f, 0xfe, 0x42, 0xe6, 0xaa, 0xe1, 0xf1, 0xdd, 0xdb, 0x9f, 0x07, 0x70, 0xd5, 0xe5, 0xff, 0x7c, - 0x1e, 0xa0, 0xd4, 0x8f, 0x09, 0x98, 0xaf, 0x22, 0x26, 0x30, 0x34, 0xe4, 0xa5, 0x26, 0x4f, 0xf1, - 0xa8, 0xc9, 0x63, 0xff, 0x9b, 0x05, 0xa9, 0xc5, 0x82, 0xb4, 0x61, 0x94, 0x69, 0xd0, 0xcd, 0xe7, - 0xa9, 0x02, 0x93, 0x35, 0x9b, 0x58, 0x72, 0x58, 0xf0, 0x9f, 0x28, 0x04, 0x91, 0xa6, 0xf4, 0xce, - 0x0b, 0x79, 0x3c, 0xa7, 0x61, 0x0a, 0x64, 0xfe, 0xbd, 0xfc, 0x17, 0x0c, 0xe5, 0xe9, 0xdb, 0x2f, - 0xc0, 0x4c, 0x8f, 0x52, 0xfc, 0xf2, 0x51, 0x90, 0xbc, 0xcf, 0x60, 0x8c, 0x40, 0x7e, 0x15, 0x12, - 0x05, 0x8e, 0x39, 0xf8, 0xa7, 0xb3, 0xec, 0xc9, 0x17, 0x2c, 0x98, 0x89, 0xb2, 0xfc, 0x1e, 0x55, - 0xdb, 0xa9, 0xc8, 0x55, 0x0f, 0x0a, 0x7b, 0x95, 0xb0, 0xff, 0x42, 0x9a, 0x27, 0xf1, 0xaf, 0x61, - 0x6a, 0x71, 0xb1, 0x06, 0x2e, 0x2e, 0x6c, 0x8a, 0xb9, 0x0d, 0x5a, 0xed, 0x34, 0x7b, 0x52, 0x69, - 0xb6, 0x25, 0x1c, 0x15, 0x45, 0xea, 0x21, 0xba, 0xe2, 0x91, 0x0f, 0xd1, 0x3d, 0x0f, 0x93, 0xe6, - 0x1b, 0x24, 0x3c, 0x84, 0x26, 0x0f, 0x1f, 0xcc, 0xe7, 0x4a, 0x30, 0x45, 0x95, 0x79, 0xc8, 0x6c, - 0xf4, 0xc8, 0x87, 0xcc, 0x9e, 0x85, 0x92, 0x7c, 0x94, 0x2b, 0x89, 0xef, 0x8a, 0x3c, 0x1d, 0x09, - 0x43, 0x85, 0x65, 0x06, 0xa2, 0xe5, 0xf8, 0x1d, 0xa7, 0xc9, 0x5a, 0x48, 0xa6, 0xef, 0xa9, 0x99, - 0x75, 0x5d, 0x61, 0xd0, 0xa0, 0xb2, 0xff, 0xc9, 0x82, 0xec, 0x1b, 0x41, 0xa9, 0x24, 0x40, 0xeb, - 0xc8, 0x24, 0xc0, 0x74, 0x82, 0x53, 0xe1, 0x58, 0x09, 0x4e, 0x66, 0xee, 0x51, 0xf1, 0x81, 0xb9, - 0x47, 0x6f, 0xd0, 0x17, 0xc8, 0x45, 0x92, 0xd2, 0x44, 0xbf, 0xcb, 0xe3, 0xc4, 0x86, 0x31, 0xd7, - 0x51, 0x39, 0xd6, 0x93, 0xc2, 0x51, 0x5a, 0x5e, 0xe2, 0x44, 0x12, 0x53, 0x59, 0xf8, 0xea, 0x77, - 0xce, 0x3f, 0xf1, 0xb5, 0xef, 0x9c, 0x7f, 0xe2, 0x9b, 0xdf, 0x39, 0xff, 0xc4, 0x47, 0xee, 0x9d, - 0xb7, 0xbe, 0x7a, 0xef, 0xbc, 0xf5, 0xb5, 0x7b, 0xe7, 0xad, 0x6f, 0xde, 0x3b, 0x6f, 0x7d, 0xfb, - 0xde, 0x79, 0xeb, 0x33, 0xff, 0x70, 0xfe, 0x89, 0x77, 0x97, 0x92, 0xb1, 0xfa, 0x3f, 0x01, 0x00, - 0x00, 0xff, 0xff, 0x0f, 0x7f, 0x2b, 0x5c, 0x83, 0x76, 0x00, 0x00, + 0x45, 0x33, 0xaf, 0x9c, 0x95, 0x0d, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3, 0x15, 0x57, 0xa5, + 0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0x9b, 0xcf, 0x19, 0x63, 0xc5, 0xad, 0x68, 0x14, 0x9a, 0x74, 0xc4, + 0x87, 0x51, 0xb6, 0xa2, 0xa2, 0xd9, 0x11, 0xae, 0xff, 0xea, 0x70, 0xfa, 0xcb, 0x4e, 0x65, 0x8b, + 0x55, 0xf7, 0x3e, 0xfb, 0x15, 0xa1, 0x10, 0x43, 0x3e, 0x65, 0xc1, 0xac, 0x5c, 0xf1, 0x48, 0x45, + 0x87, 0xde, 0x6e, 0x78, 0x31, 0x6d, 0x7a, 0x51, 0x3c, 0x3b, 0xca, 0x75, 0x58, 0x3c, 0xde, 0xdc, + 0xba, 0x12, 0x06, 0x9d, 0xf6, 0x75, 0xcf, 0xaf, 0x56, 0x2e, 0x48, 0x49, 0xb3, 0xcb, 0x03, 0x18, + 0xe3, 0x40, 0x91, 0xe4, 0x73, 0x16, 0xcc, 0xf9, 0x4e, 0x8b, 0x46, 0x6d, 0x87, 0x0d, 0xad, 0x40, + 0x57, 0x9a, 0x8e, 0xbb, 0xc7, 0x35, 0x1a, 0x7b, 0x38, 0x8d, 0x6c, 0xa9, 0xd1, 0xdc, 0xc6, 0x40, + 0xd6, 0xf8, 0x00, 0xb1, 0xe4, 0x37, 0x2c, 0x98, 0x09, 0xc2, 0x76, 0xc3, 0xf1, 0x69, 0x35, 0xc1, + 0x46, 0xb3, 0xe3, 0x7c, 0xe9, 0xbd, 0x6f, 0xb8, 0x21, 0xda, 0xcc, 0xb2, 0x5d, 0x0f, 0x7c, 0x2f, + 0x0e, 0xc2, 0x6d, 0x1a, 0xc7, 0x9e, 0x5f, 0x8f, 0x2a, 0x4f, 0xde, 0x3b, 0x9c, 0x9f, 0xe9, 0xa1, + 0xc2, 0x5e, 0x7d, 0xc8, 0x07, 0x60, 0x22, 0xea, 0xfa, 0xee, 0x6d, 0xcf, 0xaf, 0x06, 0x77, 0xa3, + 0xd9, 0x52, 0x1e, 0xcb, 0x77, 0x5b, 0x31, 0x94, 0x0b, 0x50, 0x0b, 0x40, 0x53, 0x5a, 0xff, 0x81, + 0xd3, 0x53, 0xa9, 0x9c, 0xf7, 0xc0, 0xe9, 0xc9, 0xf4, 0x00, 0xb1, 0xe4, 0xe3, 0x16, 0x4c, 0x45, + 0x5e, 0xdd, 0x77, 0xe2, 0x4e, 0x48, 0xaf, 0xd3, 0x6e, 0x34, 0x0b, 0x5c, 0x91, 0x6b, 0x43, 0xf6, + 0x8a, 0xc1, 0xb2, 0xf2, 0xa4, 0xd4, 0x71, 0xca, 0x84, 0x46, 0x98, 0x96, 0xdb, 0x6f, 0xa1, 0xe9, + 0x69, 0x3d, 0x91, 0xef, 0x42, 0xd3, 0x93, 0x7a, 0xa0, 0x48, 0xfb, 0x4f, 0x0b, 0x70, 0x3a, 0xbb, + 0x07, 0x91, 0xdf, 0xb2, 0xe0, 0xd4, 0x9d, 0xbb, 0xf1, 0x4e, 0xb0, 0x47, 0xfd, 0xa8, 0xd2, 0x65, + 0x96, 0x82, 0x5b, 0xdf, 0x89, 0x8b, 0x6e, 0xbe, 0xbb, 0xdd, 0xc2, 0xb5, 0xb4, 0x94, 0x4b, 0x7e, + 0x1c, 0x76, 0x2b, 0x4f, 0xc9, 0xf6, 0x9c, 0xba, 0x76, 0x7b, 0xc7, 0xc4, 0x62, 0x56, 0xa9, 0xb9, + 0x4f, 0x58, 0x70, 0xb6, 0x1f, 0x0b, 0x72, 0x1a, 0x8a, 0x7b, 0xb4, 0x2b, 0x1c, 0x1c, 0x64, 0x7f, + 0x92, 0x9f, 0x86, 0xd1, 0x7d, 0xa7, 0xd9, 0xa1, 0xd2, 0x51, 0xb8, 0x32, 0x5c, 0x43, 0x94, 0x66, + 0x28, 0xb8, 0xbe, 0xbd, 0xf0, 0x82, 0x65, 0xff, 0x45, 0x11, 0x26, 0x8c, 0xad, 0xe2, 0x31, 0x38, + 0x3f, 0x41, 0xca, 0xf9, 0x59, 0xcf, 0x6d, 0x97, 0x1b, 0xe8, 0xfd, 0xdc, 0xcd, 0x78, 0x3f, 0x9b, + 0xf9, 0x89, 0x7c, 0xa0, 0xfb, 0x43, 0x62, 0x28, 0x07, 0x6d, 0xe6, 0xdc, 0xb2, 0x5d, 0x74, 0x24, + 0x8f, 0x21, 0xdc, 0x4c, 0xd8, 0x55, 0xa6, 0xee, 0x1d, 0xce, 0x97, 0xd5, 0x4f, 0xd4, 0x82, 0xec, + 0xaf, 0x5b, 0x70, 0xd6, 0xd0, 0x71, 0x39, 0xf0, 0xab, 0x1e, 0x1f, 0xda, 0x0b, 0x30, 0x12, 0x77, + 0xdb, 0x89, 0x07, 0xad, 0x7a, 0x6a, 0xa7, 0xdb, 0xa6, 0xc8, 0x31, 0xcc, 0x67, 0x6e, 0xd1, 0x28, + 0x72, 0xea, 0x34, 0xeb, 0x33, 0xaf, 0x0b, 0x30, 0x26, 0x78, 0x12, 0x02, 0x69, 0x3a, 0x51, 0xbc, + 0x13, 0x3a, 0x7e, 0xc4, 0xd9, 0xef, 0x78, 0x2d, 0x2a, 0x3b, 0xf8, 0xff, 0x1d, 0x6f, 0xc6, 0xb0, + 0x2f, 0x2a, 0xe7, 0xee, 0x1d, 0xce, 0x93, 0xb5, 0x1e, 0x4e, 0xd8, 0x87, 0xbb, 0xfd, 0x39, 0x0b, + 0xce, 0xf5, 0x77, 0x6b, 0xc8, 0x1b, 0x61, 0x2c, 0xa2, 0xe1, 0x3e, 0x0d, 0x65, 0xeb, 0xf4, 0x90, + 0x70, 0x28, 0x4a, 0x2c, 0x59, 0x84, 0xb2, 0x32, 0xb9, 0xb2, 0x8d, 0x33, 0x92, 0xb4, 0xac, 0xed, + 0xb4, 0xa6, 0x61, 0x9d, 0xc6, 0x7e, 0x48, 0x27, 0x48, 0x75, 0x1a, 0x8f, 0x37, 0x38, 0xc6, 0xfe, + 0x3b, 0x0b, 0x4e, 0x19, 0x5a, 0x3d, 0x06, 0x2f, 0xd7, 0x4f, 0x7b, 0xb9, 0xab, 0xb9, 0xcd, 0xe7, + 0x01, 0x6e, 0xee, 0x97, 0xc7, 0x60, 0xc6, 0x9c, 0xf5, 0xdc, 0x1c, 0xf3, 0x00, 0x8b, 0xb6, 0x83, + 0x9b, 0xb8, 0x26, 0xfb, 0x5c, 0x07, 0x58, 0x02, 0x8c, 0x09, 0x9e, 0x75, 0x62, 0xdb, 0x89, 0x1b, + 0xb2, 0xc3, 0x55, 0x27, 0x6e, 0x39, 0x71, 0x03, 0x39, 0x86, 0xbc, 0x04, 0xd3, 0xb1, 0x13, 0xd6, + 0x69, 0x8c, 0x74, 0xdf, 0x8b, 0x92, 0xf5, 0x52, 0xae, 0x9c, 0x93, 0xb4, 0xd3, 0x3b, 0x29, 0x2c, + 0x66, 0xa8, 0xc9, 0x2b, 0x30, 0xd2, 0xa0, 0xcd, 0x96, 0xf4, 0x6b, 0xb6, 0xf3, 0x5b, 0xe1, 0xbc, + 0xad, 0x57, 0x69, 0xb3, 0x55, 0x29, 0x31, 0x95, 0xd9, 0x5f, 0xc8, 0x45, 0x91, 0x9f, 0xb7, 0xa0, + 0xbc, 0xd7, 0x89, 0xe2, 0xa0, 0xe5, 0xbd, 0x9f, 0xce, 0x96, 0xb8, 0xe0, 0x9f, 0xca, 0x59, 0xf0, + 0xf5, 0x84, 0xbf, 0x58, 0xef, 0xea, 0x27, 0x6a, 0xc9, 0xe4, 0x83, 0x30, 0xbe, 0x17, 0x05, 0xbe, + 0x4f, 0x99, 0xa7, 0xc2, 0x94, 0xb8, 0x95, 0xb7, 0x12, 0x82, 0x7b, 0x65, 0x82, 0x8d, 0xad, 0xfc, + 0x81, 0x89, 0x4c, 0xde, 0x0d, 0x55, 0x2f, 0xa4, 0x6e, 0x1c, 0x84, 0xdd, 0x59, 0x78, 0x24, 0xdd, + 0xb0, 0x92, 0xf0, 0x17, 0xdd, 0xa0, 0x7e, 0xa2, 0x96, 0x4c, 0xba, 0x30, 0xd6, 0x6e, 0x76, 0xea, + 0x9e, 0x3f, 0x3b, 0xc1, 0x75, 0xb8, 0x99, 0xb3, 0x0e, 0x5b, 0x9c, 0x79, 0x05, 0x98, 0x51, 0x11, + 0x7f, 0xa3, 0x14, 0x48, 0x9e, 0x81, 0x51, 0xb7, 0xe1, 0x84, 0xf1, 0xec, 0x24, 0x9f, 0xb3, 0x6a, + 0x11, 0x2d, 0x33, 0x20, 0x0a, 0x9c, 0xfd, 0x6b, 0x05, 0x98, 0x1b, 0xdc, 0x30, 0xb1, 0x9a, 0xdc, + 0x4e, 0x18, 0x09, 0xfb, 0x5c, 0x32, 0x57, 0x13, 0x07, 0x63, 0x82, 0x27, 0x1f, 0xb5, 0x60, 0xfc, + 0x8e, 0x1c, 0xf1, 0xc2, 0x23, 0x19, 0xf1, 0x6b, 0x72, 0xc4, 0x95, 0x0e, 0xd7, 0x92, 0x51, 0x97, + 0x72, 0x99, 0xba, 0xf4, 0xc0, 0x6d, 0x76, 0xaa, 0x89, 0x65, 0x54, 0xa4, 0x97, 0x04, 0x18, 0x13, + 0x3c, 0x23, 0xf5, 0x7c, 0x41, 0x3a, 0x92, 0x26, 0x5d, 0xf5, 0x25, 0xa9, 0xc4, 0xdb, 0xdf, 0x29, + 0xc2, 0x93, 0x7d, 0x17, 0x1f, 0x59, 0x00, 0xe0, 0x3e, 0xcb, 0x65, 0x8f, 0x05, 0x98, 0x22, 0xaa, + 0x9e, 0x66, 0x2e, 0xc6, 0x2d, 0x05, 0x45, 0x83, 0x82, 0x7c, 0x18, 0xa0, 0xed, 0x84, 0x4e, 0x8b, + 0xc6, 0x34, 0x4c, 0xec, 0xe4, 0xf5, 0xe1, 0x7a, 0x89, 0xe9, 0xb1, 0x95, 0xf0, 0xd4, 0x3e, 0x8e, + 0x02, 0x45, 0x68, 0x88, 0x64, 0x31, 0x74, 0x48, 0x9b, 0xd4, 0x89, 0xe8, 0x86, 0xde, 0x3e, 0x54, + 0x0c, 0x8d, 0x1a, 0x85, 0x26, 0x1d, 0xdb, 0xc7, 0x78, 0x2b, 0x22, 0xd9, 0x57, 0x6a, 0x1f, 0xe3, + 0xed, 0x8c, 0x50, 0x62, 0xc9, 0x6b, 0x16, 0x4c, 0xd7, 0xbc, 0x26, 0xd5, 0xd2, 0x65, 0xc4, 0xbb, + 0x39, 0x7c, 0x23, 0x2f, 0x9b, 0x7c, 0xb5, 0x05, 0x4e, 0x81, 0x23, 0xcc, 0x88, 0x67, 0xc3, 0xbc, + 0x4f, 0x43, 0x6e, 0xba, 0xc7, 0xd2, 0xc3, 0x7c, 0x4b, 0x80, 0x31, 0xc1, 0xdb, 0x5f, 0x28, 0xc0, + 0xec, 0xa0, 0x39, 0x47, 0x22, 0x36, 0xb3, 0xe2, 0x5b, 0x4e, 0x18, 0x49, 0xf7, 0x7d, 0xc8, 0x28, + 0x50, 0xf2, 0xbd, 0xe5, 0x84, 0xe6, 0x1c, 0xe5, 0x02, 0x30, 0x91, 0x44, 0xee, 0xc0, 0x48, 0xdc, + 0x74, 0x72, 0x4a, 0x1b, 0x19, 0x12, 0xb5, 0x93, 0xb5, 0xb6, 0x14, 0x21, 0x97, 0x41, 0x9e, 0x86, + 0x91, 0xa6, 0xb7, 0xcb, 0x9c, 0x51, 0x36, 0x89, 0xf9, 0xae, 0xb2, 0xe6, 0xed, 0x46, 0xc8, 0xa1, + 0xf6, 0xd7, 0xac, 0x3e, 0x7d, 0x23, 0x8d, 0x2e, 0x9b, 0x54, 0xd4, 0xdf, 0xf7, 0xc2, 0xc0, 0x6f, + 0x51, 0x3f, 0xce, 0xa6, 0x42, 0x2f, 0x69, 0x14, 0x9a, 0x74, 0xe4, 0xe7, 0xac, 0x3e, 0xab, 0x61, + 0xc8, 0x1c, 0xa0, 0x54, 0xe9, 0xd8, 0x0b, 0xc2, 0xfe, 0xf7, 0xb1, 0x3e, 0xf6, 0x4f, 0x6d, 0x68, + 0xe4, 0x22, 0x00, 0xf3, 0xa6, 0xb6, 0x42, 0x5a, 0xf3, 0x0e, 0x64, 0xcb, 0x14, 0xcb, 0x0d, 0x85, + 0x41, 0x83, 0x2a, 0xf9, 0x66, 0xbb, 0x53, 0x63, 0xdf, 0x14, 0x7a, 0xbf, 0x11, 0x18, 0x34, 0xa8, + 0xc8, 0xf3, 0x30, 0xe6, 0xb5, 0x9c, 0x3a, 0x4d, 0xfa, 0xff, 0x69, 0xb6, 0xb8, 0x56, 0x39, 0xe4, + 0xfe, 0xe1, 0xfc, 0xb4, 0x52, 0x88, 0x83, 0x50, 0xd2, 0x92, 0xdf, 0xb4, 0x60, 0xd2, 0x0d, 0x5a, + 0xad, 0xc0, 0x5f, 0x73, 0x76, 0x69, 0x33, 0x49, 0x71, 0xdd, 0x79, 0x54, 0xdb, 0xfd, 0xc2, 0xb2, + 0x21, 0x4c, 0x04, 0x98, 0x2a, 0x71, 0x67, 0xa2, 0x30, 0xa5, 0x95, 0xb9, 0x06, 0x47, 0x1f, 0xbc, + 0x06, 0xc9, 0x1f, 0x58, 0x30, 0x23, 0xbe, 0x5d, 0xf2, 0xfd, 0x20, 0x96, 0x99, 0x47, 0x91, 0xa3, + 0x0a, 0x1e, 0x71, 0xb3, 0x0c, 0x89, 0xa2, 0x6d, 0xaf, 0x93, 0x6a, 0xce, 0xf4, 0xe0, 0xb1, 0x57, + 0x49, 0x72, 0x05, 0x66, 0x6a, 0x41, 0xe8, 0x52, 0xb3, 0x23, 0xb8, 0xe3, 0x57, 0xd2, 0x8c, 0x2e, + 0x67, 0x09, 0xb0, 0xf7, 0x1b, 0x72, 0x0b, 0xce, 0x19, 0x40, 0xb3, 0x1f, 0x4a, 0x9c, 0xdb, 0x79, + 0xc9, 0xed, 0xdc, 0xe5, 0xbe, 0x54, 0x38, 0xe0, 0xeb, 0xb9, 0x77, 0xc2, 0x4c, 0xcf, 0xf8, 0xf5, + 0x89, 0xee, 0xcf, 0x9a, 0xd1, 0x7d, 0xd9, 0x08, 0xca, 0xe7, 0x56, 0xe0, 0x5c, 0xff, 0x9e, 0x3a, + 0x09, 0x17, 0xfb, 0x57, 0x2c, 0x78, 0x6a, 0x80, 0x1b, 0xa3, 0xc2, 0x1a, 0x6b, 0x50, 0x58, 0x43, + 0x1c, 0x28, 0x52, 0x7f, 0x5f, 0x1a, 0x8b, 0xcb, 0xc3, 0xcd, 0x88, 0x4b, 0xfe, 0xbe, 0x18, 0xe8, + 0xf1, 0x7b, 0x87, 0xf3, 0xc5, 0x4b, 0xfe, 0x3e, 0x32, 0xde, 0xf6, 0x3f, 0x8e, 0xa5, 0x22, 0xa7, + 0xed, 0x24, 0x58, 0xe7, 0x8a, 0xca, 0xb8, 0x69, 0x33, 0xe7, 0xb9, 0x68, 0x44, 0x86, 0x22, 0x05, + 0x2f, 0xc5, 0x91, 0x4f, 0x58, 0x3c, 0xeb, 0x9d, 0x44, 0x94, 0xd2, 0xb3, 0x7a, 0x34, 0x49, 0x78, + 0x33, 0x97, 0x9e, 0x00, 0xd1, 0x94, 0xce, 0x56, 0x72, 0x5b, 0x24, 0x9d, 0xb2, 0xfe, 0x55, 0x92, + 0x17, 0x4f, 0xf0, 0xe4, 0x00, 0x20, 0xea, 0xfa, 0xee, 0x56, 0xd0, 0xf4, 0xdc, 0xae, 0x4c, 0x33, + 0xe4, 0x90, 0x39, 0x15, 0xfc, 0x84, 0x93, 0xa5, 0x7f, 0xa3, 0x21, 0x8b, 0x7c, 0xd1, 0x82, 0x19, + 0xaf, 0xee, 0x07, 0x21, 0x5d, 0xf1, 0x6a, 0x35, 0x1a, 0x52, 0xdf, 0xa5, 0x89, 0x1f, 0x72, 0x7b, + 0x38, 0x0d, 0x92, 0xa4, 0xdf, 0x6a, 0x96, 0xbd, 0x5e, 0xe2, 0x3d, 0x28, 0xec, 0x55, 0x86, 0x54, + 0x61, 0xc4, 0xf3, 0x6b, 0x81, 0x34, 0x6c, 0x95, 0xe1, 0x94, 0x5a, 0xf5, 0x6b, 0x81, 0x5e, 0x2b, + 0xec, 0x17, 0x72, 0xee, 0x64, 0x0d, 0xce, 0x86, 0x32, 0x12, 0xbd, 0xea, 0x45, 0xcc, 0x9f, 0x5f, + 0xf3, 0x5a, 0x5e, 0xcc, 0x8d, 0x52, 0xb1, 0x32, 0x7b, 0xef, 0x70, 0xfe, 0x2c, 0xf6, 0xc1, 0x63, + 0xdf, 0xaf, 0xc8, 0x16, 0x4c, 0xc7, 0xa1, 0xe3, 0xee, 0x79, 0x7e, 0x7d, 0x9d, 0xc6, 0x8d, 0xa0, + 0xca, 0xcd, 0x51, 0xb9, 0xf2, 0xac, 0x8a, 0x85, 0x53, 0xd8, 0xfb, 0x3d, 0x10, 0xcc, 0x7c, 0x6f, + 0xbf, 0x5a, 0x4e, 0x07, 0xf0, 0x22, 0x3d, 0xf5, 0x41, 0x28, 0x87, 0xea, 0x40, 0x40, 0xf8, 0x5a, + 0x6b, 0xf9, 0x8c, 0x9a, 0xcc, 0x8b, 0xa9, 0xcc, 0x8a, 0x4e, 0xfd, 0x6b, 0x89, 0xcc, 0xe7, 0x62, + 0x73, 0x49, 0x2e, 0xb4, 0x1c, 0x66, 0xac, 0x94, 0xaa, 0x53, 0x80, 0x5d, 0xdf, 0x45, 0x2e, 0x83, + 0x84, 0x30, 0xd6, 0xa0, 0x4e, 0x33, 0x6e, 0xc8, 0x0c, 0xd5, 0xb5, 0x61, 0xbd, 0x64, 0xc6, 0x2b, + 0x9b, 0xfd, 0x13, 0x50, 0x94, 0x92, 0xc8, 0x01, 0x8c, 0x37, 0xc4, 0xb0, 0x4a, 0x6f, 0x61, 0x7d, + 0xd8, 0xce, 0x4d, 0xcd, 0x15, 0x6d, 0x11, 0x24, 0x00, 0x13, 0x71, 0xe4, 0x17, 0x2c, 0x00, 0x37, + 0x49, 0xfb, 0x25, 0x0b, 0x12, 0x73, 0xb3, 0x64, 0x2a, 0xa3, 0xa8, 0x9d, 0x2d, 0x05, 0x8a, 0xd0, + 0x90, 0x4c, 0x5e, 0x86, 0xc9, 0x90, 0xba, 0x81, 0xef, 0x7a, 0x4d, 0x5a, 0x5d, 0x8a, 0x79, 0x60, + 0x70, 0xb2, 0xf4, 0xe0, 0x69, 0xe6, 0xf1, 0xa0, 0xc1, 0x03, 0x53, 0x1c, 0xc9, 0xab, 0x16, 0x4c, + 0xab, 0xd4, 0x27, 0x1b, 0x10, 0x2a, 0x53, 0x40, 0x6b, 0x39, 0x25, 0x5a, 0x39, 0xcf, 0x0a, 0x61, + 0xcb, 0x2e, 0x0d, 0xc3, 0x8c, 0x5c, 0xf2, 0x6e, 0x80, 0x60, 0x97, 0xa7, 0x19, 0x59, 0x53, 0x4b, + 0x27, 0x6e, 0xea, 0xb4, 0xc8, 0x98, 0x27, 0x1c, 0xd0, 0xe0, 0x46, 0xae, 0x03, 0x88, 0x65, 0xb3, + 0xd3, 0x6d, 0x53, 0x9e, 0xe6, 0x29, 0x57, 0xde, 0x9c, 0x74, 0xfe, 0xb6, 0xc2, 0xdc, 0x3f, 0x9c, + 0xef, 0x8d, 0x9f, 0x79, 0x7e, 0xd7, 0xf8, 0x9c, 0x7c, 0x00, 0xc6, 0xa3, 0x4e, 0xab, 0xe5, 0xa8, + 0x74, 0xcd, 0x56, 0x7e, 0x7b, 0xac, 0xe0, 0xab, 0xe7, 0xa6, 0x04, 0x60, 0x22, 0xd1, 0xf6, 0x81, + 0xf4, 0xd2, 0x93, 0xe7, 0x61, 0x92, 0x1e, 0xc4, 0x34, 0xf4, 0x9d, 0xe6, 0x4d, 0x5c, 0x4b, 0x02, + 0x7c, 0x3e, 0xf8, 0x97, 0x0c, 0x38, 0xa6, 0xa8, 0x88, 0xad, 0x7c, 0xf9, 0x02, 0xa7, 0x07, 0xed, + 0xcb, 0x27, 0x9e, 0xbb, 0xfd, 0xdf, 0x85, 0x94, 0x8f, 0xb1, 0x13, 0x52, 0x4a, 0x02, 0x18, 0xf5, + 0x83, 0xaa, 0x32, 0x7a, 0xd7, 0xf2, 0x31, 0x7a, 0x1b, 0x41, 0xd5, 0x38, 0xa9, 0x66, 0xbf, 0x22, + 0x14, 0x72, 0xf8, 0x51, 0x5e, 0x72, 0xe6, 0xc9, 0x11, 0xd2, 0xad, 0xca, 0x53, 0xb2, 0x3a, 0xca, + 0xdb, 0x34, 0x05, 0x61, 0x5a, 0x2e, 0xd9, 0x83, 0xd1, 0x46, 0x10, 0xc5, 0x22, 0xfa, 0x19, 0xda, + 0xaf, 0xbb, 0x1a, 0x44, 0x31, 0xdf, 0x14, 0x55, 0xb3, 0x19, 0x24, 0x42, 0x21, 0xc3, 0xfe, 0xae, + 0x95, 0x4a, 0xe7, 0xdc, 0x76, 0x62, 0xb7, 0x71, 0x69, 0x9f, 0x45, 0xa4, 0xd7, 0x53, 0x47, 0x11, + 0x3f, 0x66, 0x1e, 0x45, 0xdc, 0x3f, 0x9c, 0x7f, 0xd3, 0xa0, 0xd2, 0xa1, 0xbb, 0x8c, 0xc3, 0x02, + 0x67, 0x61, 0x9c, 0x5a, 0x7c, 0xc4, 0x82, 0x09, 0x43, 0x3d, 0xb9, 0xa1, 0xe4, 0x98, 0x15, 0x57, + 0xee, 0x9a, 0x01, 0x44, 0x53, 0xa4, 0xfd, 0x59, 0x0b, 0xc6, 0x2b, 0x8e, 0xbb, 0x17, 0xd4, 0x6a, + 0xe4, 0x2d, 0x50, 0xaa, 0x76, 0xe4, 0xa1, 0x8f, 0x68, 0x9f, 0xca, 0xe5, 0xaf, 0x48, 0x38, 0x2a, + 0x0a, 0x36, 0x87, 0x6b, 0x8e, 0x1b, 0x07, 0x21, 0x57, 0xbb, 0x28, 0xe6, 0xf0, 0x65, 0x0e, 0x41, + 0x89, 0x61, 0x61, 0x7f, 0xcb, 0x39, 0x48, 0x3e, 0xce, 0xe6, 0x92, 0xd6, 0x35, 0x0a, 0x4d, 0x3a, + 0xfb, 0x4f, 0xca, 0x30, 0x2e, 0x4f, 0x57, 0x8f, 0x7d, 0x3e, 0x92, 0xc4, 0x05, 0x85, 0x81, 0x71, + 0x41, 0x04, 0x63, 0x2e, 0x2f, 0xcc, 0x92, 0x5b, 0xe9, 0x90, 0x59, 0x35, 0xa9, 0xa0, 0xa8, 0xf5, + 0xd2, 0x6a, 0x89, 0xdf, 0x28, 0x45, 0x91, 0xcf, 0x58, 0x70, 0xca, 0x0d, 0x7c, 0x9f, 0xba, 0xda, + 0xce, 0x8f, 0xe4, 0x71, 0x7e, 0xb8, 0x9c, 0x66, 0xaa, 0x8f, 0x71, 0x33, 0x08, 0xcc, 0x8a, 0x27, + 0x2f, 0xc2, 0x94, 0xe8, 0xb3, 0x5b, 0xa9, 0x88, 0x5b, 0x9f, 0xa8, 0x9b, 0x48, 0x4c, 0xd3, 0x92, + 0x05, 0x91, 0xb9, 0xe0, 0x47, 0x4c, 0x22, 0xea, 0x96, 0xe9, 0x4c, 0x75, 0x06, 0x15, 0xa1, 0x41, + 0x41, 0x42, 0x20, 0x21, 0xad, 0x85, 0x34, 0x6a, 0x20, 0x7d, 0xa5, 0x43, 0xa3, 0x98, 0xef, 0x31, + 0xe3, 0x0f, 0x77, 0xda, 0x86, 0x3d, 0x9c, 0xb0, 0x0f, 0x77, 0xb2, 0x27, 0x5d, 0xe7, 0x52, 0x1e, + 0xcb, 0x49, 0x0e, 0xf3, 0x40, 0x0f, 0x7a, 0x1e, 0x46, 0xa3, 0x86, 0x13, 0x56, 0xf9, 0xde, 0x56, + 0xac, 0x94, 0x99, 0x2d, 0xd9, 0x66, 0x00, 0x14, 0x70, 0xb2, 0x02, 0xa7, 0x33, 0xf5, 0x00, 0x11, + 0xdf, 0xbd, 0x4a, 0x95, 0x59, 0xc9, 0xee, 0x74, 0xa6, 0x92, 0x20, 0xc2, 0x9e, 0x2f, 0xcc, 0xb0, + 0x6a, 0xe2, 0x88, 0xb0, 0xaa, 0x0b, 0x63, 0x4d, 0x91, 0x5a, 0x98, 0xe4, 0xa6, 0xf2, 0x46, 0x2e, + 0x1d, 0xb0, 0x60, 0xa6, 0x74, 0xd4, 0x6c, 0x97, 0x29, 0x0a, 0x29, 0x90, 0x7c, 0x8a, 0x19, 0x34, + 0x23, 0x1b, 0x31, 0xc5, 0x15, 0xb8, 0x95, 0x8f, 0x02, 0x3d, 0xc9, 0x17, 0x6d, 0xdd, 0x8c, 0xd4, + 0x86, 0x29, 0x7f, 0xee, 0xc7, 0x61, 0xe2, 0x61, 0x33, 0x19, 0x2f, 0xc1, 0xe9, 0xa1, 0x72, 0x18, + 0xdf, 0xb3, 0x20, 0x19, 0xd7, 0x65, 0xc7, 0x6d, 0x50, 0x36, 0x65, 0xc8, 0x4b, 0x30, 0xad, 0xc2, + 0x88, 0xe5, 0xa0, 0x23, 0x33, 0xa1, 0x45, 0x9d, 0xaa, 0xc6, 0x14, 0x16, 0x33, 0xd4, 0x64, 0x11, + 0xca, 0xac, 0x9f, 0xc4, 0xa7, 0xc2, 0xec, 0xaa, 0x50, 0x65, 0x69, 0x6b, 0x55, 0x7e, 0xa5, 0x69, + 0x48, 0x00, 0x33, 0x4d, 0x27, 0x8a, 0xb9, 0x06, 0x2c, 0xaa, 0x78, 0xc8, 0xb3, 0x6e, 0x5e, 0x0e, + 0xb5, 0x96, 0x65, 0x84, 0xbd, 0xbc, 0xed, 0xaf, 0x8f, 0xc0, 0x54, 0xca, 0x32, 0xb2, 0x5d, 0xa5, + 0x13, 0x31, 0xd7, 0x47, 0x25, 0x6d, 0xd4, 0xae, 0x72, 0x53, 0xc2, 0x51, 0x51, 0x30, 0xea, 0xb6, + 0x13, 0x45, 0x77, 0x83, 0xb0, 0x2a, 0x4d, 0xb9, 0xa2, 0xde, 0x92, 0x70, 0x54, 0x14, 0x6c, 0x7f, + 0xd9, 0xa5, 0x4e, 0x48, 0x43, 0x5e, 0x1e, 0x92, 0xdd, 0x5f, 0x2a, 0x1a, 0x85, 0x26, 0x1d, 0x37, + 0xca, 0x71, 0x33, 0x5a, 0x6e, 0x7a, 0xd4, 0x8f, 0x85, 0x9a, 0xf9, 0x18, 0xe5, 0x9d, 0xb5, 0x6d, + 0x93, 0xa9, 0x36, 0xca, 0x19, 0x04, 0x66, 0xc5, 0x93, 0x8f, 0x59, 0x30, 0xe5, 0xdc, 0x8d, 0x74, + 0xf5, 0x30, 0xb7, 0xca, 0x43, 0x6f, 0x52, 0xa9, 0x82, 0xe4, 0xca, 0x0c, 0x33, 0xef, 0x29, 0x10, + 0xa6, 0x85, 0x92, 0xcf, 0x5b, 0x40, 0xe8, 0x01, 0x75, 0xb7, 0xc2, 0x60, 0xdf, 0xab, 0x26, 0x63, + 0x28, 0xc3, 0x9f, 0x21, 0xbd, 0xed, 0x4b, 0x3d, 0x7c, 0x85, 0x55, 0xef, 0x85, 0x63, 0x1f, 0x1d, + 0xec, 0xbf, 0x29, 0xc2, 0x84, 0x61, 0x8c, 0xfb, 0xee, 0xac, 0xd6, 0x0f, 0xd8, 0xce, 0x5a, 0x38, + 0xc1, 0xce, 0xfa, 0x61, 0x28, 0xbb, 0x89, 0xa1, 0xc8, 0xa7, 0xda, 0x39, 0x6b, 0x7e, 0xb4, 0xad, + 0x50, 0x20, 0xd4, 0x32, 0xc9, 0x15, 0x98, 0x31, 0xd8, 0x48, 0x23, 0x33, 0xc2, 0x8d, 0x8c, 0x4a, + 0x5d, 0x2d, 0x65, 0x09, 0xb0, 0xf7, 0x1b, 0xf2, 0x1c, 0xf3, 0x6a, 0x3d, 0xd9, 0x2e, 0x11, 0xc5, + 0xcb, 0x4a, 0xe2, 0xa5, 0xad, 0xd5, 0x04, 0x8c, 0x26, 0x8d, 0xfd, 0x75, 0x4b, 0x0d, 0xee, 0x63, + 0x28, 0x43, 0xb9, 0x93, 0x2e, 0x43, 0xb9, 0x94, 0x4b, 0x37, 0x0f, 0x28, 0x41, 0xd9, 0x80, 0xf1, + 0xe5, 0xa0, 0xd5, 0x72, 0xfc, 0x2a, 0x79, 0x03, 0x8c, 0xbb, 0xe2, 0x4f, 0x19, 0x26, 0xf2, 0xba, + 0x04, 0x89, 0xc5, 0x04, 0x47, 0x9e, 0x86, 0x11, 0x27, 0xac, 0x27, 0xa1, 0x21, 0x3f, 0x66, 0x5b, + 0x0a, 0xeb, 0x11, 0x72, 0xa8, 0xfd, 0xb9, 0x02, 0xc0, 0x72, 0xd0, 0x6a, 0x3b, 0x21, 0xad, 0xee, + 0x04, 0xff, 0x9b, 0x75, 0x16, 0x11, 0xc3, 0x27, 0x2d, 0x20, 0xac, 0x57, 0x02, 0x9f, 0xfa, 0xfa, + 0x68, 0x8f, 0xed, 0x97, 0x6e, 0x02, 0x95, 0x9b, 0x8f, 0x5e, 0x03, 0x09, 0x02, 0x35, 0xcd, 0x31, + 0xa2, 0x88, 0x67, 0x92, 0x1d, 0xbf, 0x98, 0x2e, 0x99, 0xe0, 0xc7, 0xdc, 0xd2, 0x01, 0xb0, 0x7f, + 0xa9, 0x00, 0xe7, 0x84, 0xd9, 0x5a, 0x77, 0x7c, 0xa7, 0x4e, 0x5b, 0x4c, 0xab, 0xe3, 0x9e, 0x5f, + 0xb8, 0xcc, 0x7d, 0xf5, 0x92, 0x0a, 0x89, 0x61, 0x27, 0xa7, 0x98, 0x54, 0x62, 0x1a, 0xad, 0xfa, + 0x5e, 0x8c, 0x9c, 0x39, 0x89, 0xa0, 0x94, 0xdc, 0x5f, 0x91, 0xc6, 0x26, 0x27, 0x41, 0x6a, 0xdd, + 0x5d, 0x91, 0xec, 0x51, 0x09, 0xb2, 0xbf, 0x6c, 0x41, 0xd6, 0x88, 0xf2, 0xf8, 0x4e, 0xd4, 0x38, + 0x66, 0xe3, 0xbb, 0x74, 0x49, 0xe2, 0x09, 0x2a, 0xfc, 0xde, 0x0b, 0x13, 0x4e, 0x1c, 0xd3, 0x56, + 0x5b, 0x04, 0x1b, 0xc5, 0x87, 0x4b, 0x68, 0xad, 0x07, 0x55, 0xaf, 0xe6, 0xf1, 0x20, 0xc3, 0x64, + 0x67, 0xdf, 0x80, 0x52, 0x72, 0x2a, 0x74, 0x8c, 0xc1, 0x7c, 0x26, 0xe5, 0x20, 0x0e, 0x98, 0x2e, + 0xf7, 0x0b, 0xd0, 0x67, 0x17, 0x64, 0x4d, 0xd6, 0xf6, 0x22, 0xd5, 0xe4, 0x93, 0xd9, 0x0c, 0x72, + 0x20, 0x4e, 0xc4, 0x44, 0xe6, 0xe4, 0x5d, 0x79, 0xef, 0xe2, 0xfa, 0x90, 0x6c, 0x42, 0xea, 0xa7, + 0x0e, 0xca, 0xc8, 0x45, 0x00, 0x6d, 0xe6, 0x65, 0x65, 0x88, 0xca, 0xbd, 0xea, 0xdd, 0x00, 0x0d, + 0x2a, 0xe6, 0xd4, 0x79, 0x7e, 0x14, 0x3b, 0xcd, 0xe6, 0x55, 0xcf, 0x8f, 0x65, 0x74, 0xaa, 0x4c, + 0xc0, 0xaa, 0x46, 0xa1, 0x49, 0x37, 0xf7, 0x36, 0x63, 0x5c, 0x4e, 0xe2, 0xa8, 0x7f, 0xb2, 0x00, + 0xd3, 0x57, 0xfc, 0xce, 0xd6, 0x95, 0xad, 0xce, 0x6e, 0xd3, 0x73, 0xaf, 0xd3, 0x2e, 0x1b, 0xb4, + 0x3d, 0xda, 0x5d, 0x5d, 0x91, 0xdd, 0xae, 0x06, 0xed, 0x3a, 0x03, 0xa2, 0xc0, 0x31, 0x35, 0x6b, + 0x9e, 0x5f, 0xa7, 0x61, 0x3b, 0xf4, 0xa4, 0x37, 0x6e, 0xa8, 0x79, 0x59, 0xa3, 0xd0, 0xa4, 0x63, + 0xbc, 0x83, 0xbb, 0x3e, 0x0d, 0xb3, 0xf6, 0x63, 0x93, 0x01, 0x51, 0xe0, 0x18, 0x51, 0x1c, 0x76, + 0xa2, 0x58, 0xf6, 0x98, 0x22, 0xda, 0x61, 0x40, 0x14, 0x38, 0x36, 0x3d, 0xa2, 0xce, 0x2e, 0xcf, + 0xab, 0x66, 0xce, 0xcc, 0xb7, 0x05, 0x18, 0x13, 0x3c, 0x23, 0xdd, 0xa3, 0xdd, 0x15, 0xb6, 0x9b, + 0x66, 0x4a, 0x5c, 0xae, 0x0b, 0x30, 0x26, 0x78, 0xfb, 0x1f, 0x2c, 0x20, 0xe9, 0xee, 0x78, 0x0c, + 0x1b, 0xf2, 0x2b, 0xe9, 0x0d, 0x79, 0xc8, 0x14, 0x78, 0x5a, 0xfd, 0x01, 0xfb, 0xf2, 0xaf, 0x5b, + 0x30, 0x69, 0x9e, 0x86, 0x90, 0x7a, 0xc6, 0x10, 0x6d, 0xa6, 0x0d, 0xd1, 0xfd, 0xc3, 0xf9, 0x9f, + 0xe8, 0x77, 0xbd, 0xb2, 0xee, 0xc5, 0x41, 0x3b, 0x7a, 0x2b, 0xf5, 0xeb, 0x9e, 0x4f, 0x79, 0xae, + 0x4f, 0x9c, 0xa2, 0xa4, 0x8e, 0x5a, 0x96, 0x83, 0x2a, 0x7d, 0x08, 0x4b, 0x66, 0xdf, 0x86, 0x99, + 0x9e, 0xba, 0xa6, 0x63, 0x18, 0x9d, 0x23, 0xab, 0x56, 0xed, 0x4f, 0x59, 0x30, 0x95, 0x2a, 0x0b, + 0xcb, 0xc9, 0x94, 0xf1, 0x55, 0x11, 0xf0, 0x83, 0xb4, 0xd0, 0xf3, 0x45, 0xa6, 0xad, 0x64, 0xac, + 0x0a, 0x8d, 0x42, 0x93, 0xce, 0xfe, 0x6c, 0x01, 0x4a, 0x49, 0x4e, 0xf6, 0x18, 0xaa, 0x7c, 0xc2, + 0x82, 0x29, 0x15, 0x1a, 0x73, 0x87, 0x39, 0x97, 0xd2, 0x20, 0xa6, 0x81, 0x3a, 0xbf, 0x65, 0x0e, + 0xb3, 0xf2, 0xdc, 0xd1, 0x14, 0x86, 0x69, 0xd9, 0xe4, 0x16, 0x40, 0xd4, 0x8d, 0x62, 0xda, 0x32, + 0x5c, 0x77, 0xdb, 0x58, 0x1d, 0x0b, 0x6e, 0x10, 0x52, 0xb6, 0x16, 0x36, 0x82, 0x2a, 0xdd, 0x56, + 0x94, 0xda, 0x10, 0x6a, 0x18, 0x1a, 0x9c, 0xec, 0xdf, 0x29, 0xc0, 0xe9, 0xac, 0x4a, 0xe4, 0x3d, + 0x30, 0x99, 0x48, 0x37, 0x6e, 0x95, 0x26, 0x89, 0xe8, 0x49, 0x34, 0x70, 0xf7, 0x0f, 0xe7, 0xe7, + 0x7b, 0xaf, 0xd5, 0x2e, 0x98, 0x24, 0x98, 0x62, 0x26, 0xf2, 0x13, 0x32, 0x91, 0x56, 0xe9, 0x2e, + 0xb5, 0xdb, 0x32, 0xc9, 0x60, 0xe4, 0x27, 0x4c, 0x2c, 0x66, 0xa8, 0xc9, 0x16, 0x9c, 0x35, 0x20, + 0x1b, 0xd4, 0xab, 0x37, 0x76, 0x83, 0x50, 0x5c, 0x5f, 0x28, 0x56, 0x9e, 0x96, 0x5c, 0xce, 0x62, + 0x1f, 0x1a, 0xec, 0xfb, 0x25, 0x79, 0x0b, 0x94, 0x5c, 0xa7, 0xed, 0xb8, 0x5e, 0xdc, 0x95, 0xb1, + 0x88, 0xb2, 0x23, 0xcb, 0x12, 0x8e, 0x8a, 0xc2, 0x5e, 0x87, 0x91, 0x63, 0xce, 0xa0, 0x63, 0xed, + 0xcb, 0x37, 0xa0, 0xc4, 0xd8, 0x31, 0xbb, 0x91, 0x17, 0xcb, 0x00, 0x4a, 0xc9, 0x6d, 0x16, 0x62, + 0x43, 0xd1, 0x73, 0x92, 0x14, 0x90, 0x6a, 0xd6, 0x6a, 0x14, 0x75, 0xb8, 0xd7, 0xc1, 0x90, 0xe4, + 0x19, 0x28, 0xd2, 0x83, 0x76, 0x36, 0xd7, 0x73, 0xe9, 0xa0, 0xed, 0x85, 0x34, 0x62, 0x44, 0xf4, + 0xa0, 0x4d, 0xe6, 0xa0, 0xe0, 0x55, 0xe5, 0x86, 0x02, 0x92, 0xa6, 0xb0, 0xba, 0x82, 0x05, 0xaf, + 0x6a, 0x1f, 0x40, 0x59, 0x5d, 0x9f, 0x21, 0x7b, 0x89, 0x9d, 0xb5, 0xf2, 0x38, 0x44, 0x49, 0xf8, + 0x0e, 0xb0, 0xb0, 0x1d, 0x00, 0x5d, 0x50, 0x98, 0x97, 0x7d, 0xb9, 0x00, 0x23, 0x6e, 0x20, 0x6b, + 0x77, 0x4b, 0x9a, 0x0d, 0x37, 0xb0, 0x1c, 0x63, 0xdf, 0x86, 0xe9, 0xeb, 0x7e, 0x70, 0xd7, 0x67, + 0x1b, 0xdf, 0x65, 0x8f, 0x36, 0xab, 0x8c, 0x71, 0x8d, 0xfd, 0x91, 0xdd, 0xce, 0x39, 0x16, 0x05, + 0x4e, 0xdd, 0x31, 0x29, 0x0c, 0xba, 0x63, 0x62, 0xff, 0xa2, 0x05, 0xa7, 0xb3, 0xc5, 0x83, 0xdf, + 0xb7, 0x08, 0xe3, 0x23, 0x4c, 0x99, 0xa4, 0x3a, 0x6d, 0xb3, 0x2d, 0x4e, 0xad, 0x5f, 0x80, 0xc9, + 0xdd, 0x8e, 0xd7, 0xac, 0xca, 0xdf, 0x52, 0x1f, 0x55, 0x7f, 0x57, 0x31, 0x70, 0x98, 0xa2, 0x64, + 0x7e, 0xda, 0xae, 0xe7, 0x3b, 0x61, 0x77, 0x4b, 0xef, 0x1b, 0xca, 0x3c, 0x55, 0x14, 0x06, 0x0d, + 0x2a, 0xfb, 0xaf, 0x8a, 0xa0, 0xef, 0xf1, 0x10, 0x4f, 0x16, 0x45, 0x58, 0x79, 0xa4, 0xad, 0xb6, + 0xbb, 0xbe, 0xab, 0x6f, 0x0c, 0x95, 0x32, 0x35, 0x11, 0x1f, 0xb7, 0x98, 0x87, 0xe8, 0xc5, 0x9e, + 0xc3, 0x8d, 0x85, 0x0c, 0x94, 0xb6, 0x72, 0x3a, 0x37, 0x5f, 0x15, 0x9c, 0x83, 0xd0, 0xf4, 0x39, + 0x95, 0x30, 0x34, 0x25, 0x93, 0x97, 0xe5, 0x49, 0x43, 0x31, 0xb7, 0x22, 0x9d, 0x52, 0xe6, 0x78, + 0xa1, 0x0d, 0xa3, 0x21, 0x8d, 0xc3, 0xa4, 0x3c, 0xea, 0xfa, 0xb0, 0xe7, 0xae, 0x71, 0xd8, 0xdd, + 0x8e, 0x59, 0x30, 0x56, 0x37, 0x1c, 0x23, 0x0e, 0x46, 0x21, 0xc8, 0x8e, 0x80, 0xf4, 0xf6, 0xc5, + 0x09, 0xb3, 0xb8, 0x8b, 0x50, 0x76, 0x3a, 0x71, 0xd0, 0x62, 0xdd, 0xc4, 0x87, 0xa7, 0x64, 0xe4, + 0xa9, 0x13, 0x04, 0x6a, 0x1a, 0xfb, 0xb5, 0x51, 0xc8, 0x54, 0x29, 0x90, 0x03, 0xf3, 0x0e, 0x9a, + 0x95, 0xef, 0x1d, 0x34, 0xa5, 0x4c, 0xbf, 0x7b, 0x68, 0xa4, 0x0e, 0xa3, 0xed, 0x86, 0x13, 0x25, + 0x6b, 0xf4, 0x46, 0xd2, 0x4d, 0x5b, 0x0c, 0x78, 0xff, 0x70, 0xfe, 0x27, 0x8f, 0xe7, 0x07, 0xb2, + 0xb9, 0xba, 0x28, 0x8a, 0x40, 0xb5, 0x68, 0xce, 0x03, 0x05, 0x7f, 0xd3, 0x13, 0x2c, 0x1e, 0x11, + 0xd3, 0x7e, 0xd4, 0x12, 0xc5, 0x72, 0x48, 0xa3, 0x4e, 0x33, 0x96, 0xb3, 0xe1, 0x46, 0x8e, 0xab, + 0x4c, 0x30, 0xd6, 0x55, 0x73, 0xe2, 0x37, 0x1a, 0x42, 0xc9, 0x7b, 0xa0, 0x1c, 0xc5, 0x4e, 0x18, + 0x3f, 0x64, 0x45, 0x8c, 0xea, 0xf4, 0xed, 0x84, 0x09, 0x6a, 0x7e, 0xe4, 0xdd, 0x00, 0x35, 0xcf, + 0xf7, 0xa2, 0xc6, 0x43, 0x1e, 0x10, 0x72, 0xc5, 0x2f, 0x2b, 0x0e, 0x68, 0x70, 0x63, 0xd6, 0x8d, + 0xcf, 0x6d, 0x91, 0xd2, 0x2c, 0xf1, 0xbd, 0x54, 0x59, 0x37, 0x54, 0x18, 0x34, 0xa8, 0xec, 0x0f, + 0xc1, 0x99, 0xec, 0xfd, 0x6f, 0x19, 0x1a, 0xd6, 0xc3, 0xa0, 0xd3, 0xce, 0xee, 0x25, 0xfc, 0x7e, + 0x30, 0x0a, 0x1c, 0xb3, 0xf1, 0x7b, 0x9e, 0x5f, 0xcd, 0xda, 0xf8, 0xeb, 0x9e, 0x5f, 0x45, 0x8e, + 0x39, 0xc6, 0xe5, 0xbc, 0x3f, 0xb2, 0xe0, 0xc2, 0x51, 0xd7, 0xd4, 0x59, 0xd8, 0x7f, 0xd7, 0x09, + 0x7d, 0x79, 0xf1, 0x86, 0xdb, 0x8e, 0xdb, 0x4e, 0xe8, 0x23, 0x87, 0x92, 0x2e, 0x8c, 0x89, 0xba, + 0x42, 0xe9, 0x1d, 0xdf, 0xc8, 0xf7, 0xd2, 0x3c, 0x8b, 0xad, 0x54, 0xb6, 0x46, 0xd4, 0x34, 0xa2, + 0x14, 0x68, 0xbf, 0x66, 0x01, 0xd9, 0xdc, 0xa7, 0x61, 0xe8, 0x55, 0x8d, 0x4a, 0x48, 0xf2, 0x3c, + 0x4c, 0xde, 0xd9, 0xde, 0xdc, 0xd8, 0x0a, 0x3c, 0x9f, 0x17, 0xf4, 0x1b, 0xd5, 0x32, 0xd7, 0x0c, + 0x38, 0xa6, 0xa8, 0xc8, 0x32, 0xcc, 0xdc, 0x79, 0x85, 0x6d, 0x39, 0x97, 0x0e, 0xda, 0x21, 0x8d, + 0x22, 0xf5, 0xd4, 0x44, 0x59, 0x1c, 0x4c, 0x5d, 0xbb, 0x91, 0x41, 0x62, 0x2f, 0xbd, 0xfd, 0xa5, + 0x02, 0x4c, 0x18, 0x2f, 0x33, 0x1c, 0xc3, 0x1f, 0xc9, 0x3c, 0x26, 0x51, 0x38, 0xe6, 0x63, 0x12, + 0xcf, 0x42, 0xa9, 0x1d, 0x34, 0x3d, 0xd7, 0x53, 0x95, 0xfa, 0x93, 0xfc, 0xf4, 0x4a, 0xc2, 0x50, + 0x61, 0xc9, 0x5d, 0x28, 0xab, 0x2b, 0xd6, 0xb2, 0xd2, 0x2e, 0x2f, 0x8f, 0x4c, 0xad, 0x35, 0x7d, + 0x75, 0x5a, 0xcb, 0x22, 0x36, 0x8c, 0xf1, 0x89, 0x9a, 0xe4, 0xe6, 0x79, 0xe9, 0x06, 0x9f, 0xc1, + 0x11, 0x4a, 0x8c, 0xfd, 0x2f, 0xa3, 0x50, 0x46, 0xda, 0x0e, 0x96, 0x43, 0x5a, 0x8d, 0xc8, 0xeb, + 0xa1, 0xd8, 0x09, 0x9b, 0xb2, 0xb3, 0x54, 0x9a, 0xe7, 0x26, 0xae, 0x21, 0x83, 0xa7, 0x76, 0x87, + 0xc2, 0x89, 0xce, 0xf8, 0x8a, 0x47, 0x9e, 0xf1, 0xbd, 0x08, 0x53, 0x51, 0xd4, 0xd8, 0x0a, 0xbd, + 0x7d, 0x27, 0x66, 0x73, 0x4e, 0xe6, 0x44, 0xf4, 0xa1, 0xca, 0xf6, 0x55, 0x8d, 0xc4, 0x34, 0x2d, + 0xb9, 0x02, 0x33, 0xfa, 0xa4, 0x8d, 0x86, 0x31, 0x4f, 0x81, 0x88, 0x6c, 0x89, 0x3a, 0xd3, 0xd0, + 0x67, 0x73, 0x92, 0x00, 0x7b, 0xbf, 0x21, 0x2b, 0x70, 0x3a, 0x05, 0x64, 0x8a, 0x88, 0x54, 0x8a, + 0x3a, 0xc5, 0x4f, 0xf1, 0x61, 0xba, 0xf4, 0x7c, 0x41, 0xd6, 0xe1, 0x8c, 0x18, 0x5f, 0x7e, 0x35, + 0x5f, 0xb5, 0x68, 0x9c, 0x33, 0xfa, 0x3f, 0x92, 0xd1, 0x99, 0x2b, 0xbd, 0x24, 0xd8, 0xef, 0x3b, + 0x36, 0x43, 0x15, 0x78, 0x75, 0x45, 0x1a, 0x36, 0x35, 0x43, 0x15, 0x9b, 0xd5, 0x2a, 0x9a, 0x74, + 0xe4, 0x5d, 0xf0, 0x94, 0xfe, 0x29, 0x32, 0x68, 0x62, 0xb7, 0x5f, 0x91, 0x45, 0x0c, 0xf3, 0x92, + 0xc5, 0x53, 0x57, 0xfa, 0x92, 0x55, 0x71, 0xd0, 0xf7, 0x64, 0x17, 0xe6, 0x14, 0xea, 0x12, 0x5b, + 0xbd, 0xed, 0xd0, 0x8b, 0x68, 0xc5, 0x89, 0xe8, 0xcd, 0xb0, 0xc9, 0xcb, 0x1e, 0xca, 0xfa, 0x79, + 0x89, 0x2b, 0x5e, 0x7c, 0xb5, 0x1f, 0x25, 0xae, 0xe1, 0x03, 0xb8, 0x30, 0xe7, 0x82, 0xfa, 0xce, + 0x6e, 0x93, 0x6e, 0x2e, 0xaf, 0xf2, 0x62, 0x08, 0xc3, 0xb9, 0xb8, 0x94, 0x20, 0x50, 0xd3, 0x28, + 0xd7, 0x7e, 0x72, 0xa0, 0x6b, 0xff, 0x4d, 0x0b, 0xa6, 0xd4, 0x64, 0x7f, 0x0c, 0xf9, 0xae, 0x66, + 0x3a, 0xdf, 0x75, 0x65, 0x58, 0xaf, 0x4e, 0x6a, 0x3e, 0x20, 0x10, 0xfb, 0x6e, 0x19, 0x80, 0x3f, + 0xd8, 0xe3, 0xf1, 0x22, 0xdb, 0x0b, 0x30, 0x12, 0xd2, 0x76, 0x90, 0xb5, 0x7c, 0x8c, 0x02, 0x39, + 0xe6, 0x07, 0x77, 0x39, 0xf7, 0x3b, 0xf3, 0x1d, 0xfd, 0xfe, 0x9e, 0xf9, 0x6e, 0xc3, 0x93, 0x9e, + 0x1f, 0x51, 0xb7, 0x13, 0xca, 0x8d, 0xee, 0x6a, 0x10, 0x29, 0xeb, 0x50, 0xaa, 0xbc, 0x5e, 0x32, + 0x7a, 0x72, 0xb5, 0x1f, 0x11, 0xf6, 0xff, 0x96, 0x75, 0x69, 0x82, 0x90, 0xf7, 0x83, 0x74, 0x7a, + 0x40, 0xc2, 0x51, 0x51, 0xe8, 0x05, 0xb1, 0x56, 0x4b, 0x2e, 0x00, 0x65, 0x16, 0xc4, 0xda, 0xe5, + 0x6d, 0xd4, 0x34, 0xfd, 0xad, 0x62, 0x39, 0x27, 0xab, 0x08, 0x27, 0xb6, 0x8a, 0xc9, 0xfa, 0x9c, + 0x18, 0xf8, 0xbc, 0x43, 0xb2, 0x59, 0x4f, 0x0e, 0xdc, 0xac, 0x5f, 0x82, 0x69, 0xcf, 0x6f, 0xd0, + 0xd0, 0x8b, 0x69, 0x95, 0xaf, 0x85, 0xd9, 0x29, 0xde, 0x11, 0x2a, 0x73, 0xb5, 0x9a, 0xc2, 0x62, + 0x86, 0x3a, 0x6d, 0x54, 0xa6, 0x8f, 0x61, 0x54, 0x06, 0x98, 0xf2, 0x53, 0xf9, 0x98, 0xf2, 0xd3, + 0xc3, 0x9b, 0xf2, 0x99, 0x47, 0x6a, 0xca, 0x49, 0x2e, 0xa6, 0xfc, 0x19, 0x18, 0x6d, 0x87, 0xc1, + 0x41, 0x77, 0xf6, 0x4c, 0xda, 0x9b, 0xde, 0x62, 0x40, 0x14, 0x38, 0xb3, 0xf4, 0xed, 0xec, 0x83, + 0x4b, 0xdf, 0xec, 0x57, 0x0b, 0xf0, 0xa4, 0xb6, 0x74, 0x6c, 0x7e, 0x79, 0x35, 0xb6, 0xd6, 0xf9, + 0x2d, 0x4d, 0x51, 0x6e, 0x61, 0x24, 0x4d, 0x75, 0xfe, 0x55, 0x61, 0xd0, 0xa0, 0xe2, 0xb9, 0x47, + 0x1a, 0xf2, 0x82, 0xdd, 0xac, 0x19, 0x5c, 0x96, 0x70, 0x54, 0x14, 0xfc, 0xb5, 0x3f, 0x1a, 0xc6, + 0xf2, 0xec, 0x25, 0x5b, 0x8b, 0xb4, 0xac, 0x51, 0x68, 0xd2, 0x31, 0x77, 0xd1, 0x4d, 0x96, 0x20, + 0x33, 0x85, 0x93, 0xc2, 0x5d, 0x54, 0xab, 0x4e, 0x61, 0x13, 0x75, 0x78, 0x92, 0x79, 0xb4, 0x57, + 0x1d, 0x9e, 0x34, 0x50, 0x14, 0xf6, 0x7f, 0x59, 0xf0, 0xba, 0xbe, 0x5d, 0xf1, 0x18, 0xb6, 0xb7, + 0x83, 0xf4, 0xf6, 0xb6, 0x3d, 0xfc, 0xf6, 0xd6, 0xd3, 0x8a, 0x01, 0x5b, 0xdd, 0x5f, 0x5b, 0x30, + 0xad, 0xe9, 0x1f, 0x43, 0x53, 0xbd, 0x5c, 0xdf, 0xed, 0xd3, 0xaa, 0x8b, 0x42, 0xd2, 0x54, 0xdb, + 0xbe, 0xc9, 0xdb, 0x26, 0x62, 0xaf, 0x25, 0x37, 0x79, 0x18, 0xe7, 0x88, 0x20, 0xa6, 0x0b, 0x63, + 0xfc, 0x2a, 0x73, 0x94, 0x4f, 0x0c, 0x98, 0x96, 0xcf, 0xd3, 0xa0, 0x3a, 0x06, 0xe4, 0x3f, 0x23, + 0x94, 0x02, 0x79, 0x39, 0xb9, 0x17, 0x31, 0x7b, 0x59, 0x95, 0xe9, 0x5a, 0x5d, 0x4e, 0x2e, 0xe1, + 0xa8, 0x28, 0xec, 0x16, 0xcc, 0xa6, 0x99, 0xaf, 0xd0, 0x1a, 0x4f, 0xb5, 0x1d, 0xab, 0x99, 0x8b, + 0x50, 0x76, 0xf8, 0x57, 0x6b, 0x1d, 0x27, 0xfb, 0x3a, 0xce, 0x52, 0x82, 0x40, 0x4d, 0x63, 0xff, + 0xb6, 0x05, 0x67, 0xfa, 0x34, 0x26, 0xc7, 0x34, 0x75, 0xac, 0xad, 0xc0, 0x80, 0x17, 0x8b, 0xaa, + 0xb4, 0xe6, 0x24, 0xc9, 0x1c, 0xc3, 0xaa, 0xad, 0x08, 0x30, 0x26, 0x78, 0xfb, 0x5f, 0x2d, 0x38, + 0x95, 0xd6, 0x35, 0x22, 0xd7, 0x80, 0x88, 0xc6, 0xac, 0x78, 0x91, 0x1b, 0xec, 0xd3, 0xb0, 0xcb, + 0x5a, 0x2e, 0xb4, 0x9e, 0x93, 0x9c, 0xc8, 0x52, 0x0f, 0x05, 0xf6, 0xf9, 0x8a, 0x57, 0xed, 0x56, + 0x55, 0x6f, 0x27, 0x33, 0xe5, 0x56, 0x9e, 0x33, 0x45, 0x0f, 0xa6, 0x19, 0x41, 0x2b, 0x91, 0x68, + 0xca, 0xb7, 0xbf, 0x35, 0x02, 0xea, 0x1c, 0x8b, 0xa7, 0x0d, 0x72, 0x4a, 0xba, 0xa4, 0x9e, 0x50, + 0x2a, 0x9e, 0xe0, 0x09, 0xa5, 0x91, 0x07, 0xe5, 0x08, 0xc4, 0x7b, 0x3e, 0xda, 0x17, 0x35, 0x8c, + 0xfe, 0x8e, 0x46, 0xa1, 0x49, 0xc7, 0x34, 0x69, 0x7a, 0xfb, 0x54, 0x7c, 0x34, 0x96, 0xd6, 0x64, + 0x2d, 0x41, 0xa0, 0xa6, 0x61, 0x9a, 0x54, 0xbd, 0x5a, 0x4d, 0x46, 0x8a, 0x4a, 0x13, 0xd6, 0x3b, + 0xc8, 0x31, 0x8c, 0xa2, 0x11, 0x04, 0x7b, 0xd2, 0xff, 0x53, 0x14, 0x57, 0x83, 0x60, 0x0f, 0x39, + 0x86, 0x79, 0x2c, 0x7e, 0x10, 0xb6, 0x9c, 0xa6, 0xf7, 0x7e, 0x5a, 0x55, 0x52, 0xa4, 0xdf, 0xa7, + 0x3c, 0x96, 0x8d, 0x5e, 0x12, 0xec, 0xf7, 0x1d, 0x9b, 0x81, 0xed, 0x90, 0x56, 0x3d, 0x37, 0x36, + 0xb9, 0x41, 0x7a, 0x06, 0x6e, 0xf5, 0x50, 0x60, 0x9f, 0xaf, 0xc8, 0x12, 0x9c, 0x4a, 0xce, 0x21, + 0x93, 0x5a, 0x11, 0xe1, 0x0c, 0x2a, 0x3f, 0x1c, 0xd3, 0x68, 0xcc, 0xd2, 0x33, 0x6b, 0xd3, 0x92, + 0x15, 0x3b, 0xdc, 0x4d, 0x34, 0xac, 0x4d, 0x52, 0xc9, 0x83, 0x8a, 0xc2, 0xfe, 0xdd, 0x02, 0xdb, + 0x1d, 0x07, 0xdc, 0xd4, 0x7d, 0x6c, 0x49, 0xbe, 0xf4, 0x8c, 0x1c, 0x39, 0xc6, 0x8c, 0x7c, 0x1e, + 0x26, 0xef, 0x44, 0x81, 0xaf, 0x12, 0x68, 0xa3, 0x03, 0x13, 0x68, 0x06, 0x55, 0xff, 0x04, 0xda, + 0xd8, 0x09, 0x13, 0x68, 0x7f, 0x36, 0x0a, 0xe7, 0xd4, 0xd1, 0x31, 0x8d, 0xef, 0x06, 0xe1, 0x9e, + 0xe7, 0xd7, 0xf9, 0x71, 0xeb, 0x17, 0x2d, 0x98, 0x14, 0xd3, 0x5b, 0xbe, 0x69, 0x20, 0x8e, 0x17, + 0x6b, 0x39, 0x5d, 0x12, 0x4b, 0x09, 0x5b, 0xd8, 0x31, 0x04, 0x65, 0x1e, 0x98, 0x30, 0x51, 0x98, + 0xd2, 0x88, 0x7c, 0x10, 0x20, 0x79, 0x78, 0xab, 0x96, 0xd3, 0xf3, 0x63, 0x89, 0x7e, 0x48, 0x6b, + 0xda, 0x95, 0xdc, 0x51, 0x42, 0xd0, 0x10, 0x48, 0x5e, 0xb5, 0xd4, 0xa5, 0x0c, 0x71, 0x56, 0xf4, + 0xf2, 0x23, 0xe9, 0x9b, 0xe3, 0xdc, 0xd1, 0x40, 0x18, 0xf7, 0xfc, 0x3a, 0x1b, 0x56, 0x99, 0x73, + 0x7c, 0x53, 0xbf, 0x52, 0x85, 0xb5, 0xc0, 0xa9, 0x56, 0x9c, 0xa6, 0xe3, 0xbb, 0x34, 0x5c, 0x15, + 0xe4, 0xe6, 0xf3, 0x47, 0x1c, 0x80, 0x09, 0xa3, 0x9e, 0x5b, 0x90, 0xa3, 0xc7, 0xb9, 0x05, 0x39, + 0xf7, 0x4e, 0x98, 0xe9, 0x19, 0xcc, 0x13, 0xdd, 0xd1, 0x78, 0xf8, 0xeb, 0x1d, 0xf6, 0x1f, 0x8f, + 0xe9, 0x3d, 0x66, 0x23, 0xa8, 0x8a, 0xbb, 0x78, 0xa1, 0x1e, 0x51, 0xe9, 0x2a, 0xe6, 0x38, 0x45, + 0x8c, 0x27, 0x94, 0x14, 0x10, 0x4d, 0x91, 0x6c, 0x8e, 0xb6, 0x9d, 0x90, 0xfa, 0x8f, 0x7a, 0x8e, + 0x6e, 0x29, 0x21, 0x68, 0x08, 0x24, 0x8d, 0xd4, 0x61, 0xe6, 0xe5, 0xe1, 0x0f, 0x33, 0x99, 0xf7, + 0xda, 0xf7, 0xce, 0xd4, 0x67, 0x2c, 0x98, 0xf6, 0x53, 0x33, 0x57, 0x1e, 0x68, 0xed, 0x3c, 0x8a, + 0x55, 0x21, 0xee, 0x40, 0xa7, 0x61, 0x98, 0x91, 0xdf, 0x6f, 0x07, 0x1a, 0x3d, 0xe1, 0x0e, 0xa4, + 0x2f, 0xf5, 0x8e, 0x0d, 0xba, 0xd4, 0x4b, 0x7c, 0x75, 0x9d, 0x7f, 0x3c, 0xf7, 0xeb, 0xfc, 0xd0, + 0xe7, 0x2a, 0xff, 0x6d, 0x28, 0xbb, 0x21, 0x75, 0xe2, 0x87, 0xbc, 0xd9, 0xcd, 0x1f, 0xad, 0x5b, + 0x4e, 0x18, 0xa0, 0xe6, 0x65, 0xff, 0x65, 0x11, 0x4e, 0x27, 0x3d, 0x92, 0x1c, 0xf4, 0xb0, 0xed, + 0x4c, 0xc8, 0xd5, 0xbe, 0xa8, 0xda, 0xce, 0xae, 0x26, 0x08, 0xd4, 0x34, 0xcc, 0x7d, 0xea, 0x44, + 0x74, 0xb3, 0x4d, 0xfd, 0x35, 0x6f, 0x37, 0xe2, 0x3d, 0x6e, 0x54, 0x8b, 0xdd, 0xd4, 0x28, 0x34, + 0xe9, 0x98, 0xef, 0x2c, 0xdc, 0xd8, 0x28, 0x7b, 0x6e, 0x2a, 0xdd, 0x63, 0x4c, 0xf0, 0xe4, 0x0b, + 0x7d, 0x5f, 0xfa, 0xc8, 0xa7, 0x62, 0xa0, 0xe7, 0x7c, 0xeb, 0x84, 0x4f, 0x7c, 0xbc, 0x66, 0xc1, + 0xa9, 0xbd, 0x54, 0xa9, 0x4a, 0x62, 0x92, 0x87, 0x2c, 0x80, 0x4c, 0xd7, 0xbf, 0xe8, 0x29, 0x9c, + 0x86, 0x47, 0x98, 0x95, 0x6e, 0xff, 0x87, 0x05, 0xa6, 0x79, 0x3a, 0x9e, 0x23, 0x64, 0xbc, 0xdd, + 0x54, 0x38, 0xe2, 0xed, 0xa6, 0xc4, 0x67, 0x2a, 0x1e, 0xcf, 0x47, 0x1f, 0x39, 0x81, 0x8f, 0x3e, + 0x3a, 0xd0, 0xc9, 0x7a, 0x3d, 0x14, 0x3b, 0x5e, 0x55, 0xba, 0xd9, 0xfa, 0xec, 0x6a, 0x75, 0x05, + 0x19, 0xdc, 0xfe, 0xc3, 0x51, 0x1d, 0x56, 0xcb, 0x83, 0xee, 0x1f, 0x8a, 0x66, 0xd7, 0x54, 0x3d, + 0xab, 0x68, 0xf9, 0x46, 0x4f, 0x3d, 0xeb, 0x3b, 0x4e, 0x5e, 0xc7, 0x20, 0x3a, 0x68, 0x50, 0x39, + 0xeb, 0xf8, 0x11, 0x45, 0x0c, 0x77, 0xa0, 0xc4, 0x22, 0x11, 0x9e, 0x1f, 0x2b, 0xa5, 0x94, 0x2a, + 0x5d, 0x95, 0xf0, 0xfb, 0x87, 0xf3, 0x6f, 0x3f, 0xb9, 0x5a, 0xc9, 0xd7, 0xa8, 0xf8, 0x93, 0x08, + 0xca, 0xec, 0x6f, 0x5e, 0x6f, 0x21, 0x63, 0x9c, 0x9b, 0xca, 0x16, 0x25, 0x88, 0x5c, 0x8a, 0x39, + 0xb4, 0x1c, 0xe2, 0x43, 0x99, 0xbf, 0x32, 0xc4, 0x85, 0x8a, 0x50, 0x68, 0x4b, 0x55, 0x3d, 0x24, + 0x88, 0xfb, 0x87, 0xf3, 0x2f, 0x9e, 0x5c, 0xa8, 0xfa, 0x1c, 0xb5, 0x08, 0xfb, 0x3b, 0x45, 0x3d, + 0x77, 0x65, 0x19, 0xf3, 0x0f, 0xc5, 0xdc, 0x7d, 0x21, 0x33, 0x77, 0x2f, 0xf4, 0xcc, 0xdd, 0x69, + 0xfd, 0x6e, 0x4e, 0x6a, 0x36, 0x3e, 0xee, 0x0d, 0xf6, 0xe8, 0xb0, 0x9b, 0x7b, 0x16, 0xaf, 0x74, + 0xbc, 0x90, 0x46, 0x5b, 0x61, 0xc7, 0xf7, 0xfc, 0x3a, 0x9f, 0x8e, 0x25, 0xd3, 0xb3, 0x48, 0xa1, + 0x31, 0x4b, 0x6f, 0x7f, 0x89, 0x1f, 0x4f, 0x1a, 0xa5, 0x5b, 0x6c, 0x94, 0x9b, 0xfc, 0xa1, 0x26, + 0x51, 0x3c, 0xaa, 0x46, 0x59, 0xbc, 0xce, 0x24, 0x70, 0xe4, 0x2e, 0x8c, 0xef, 0x8a, 0xa7, 0x1d, + 0xf2, 0xb9, 0x4b, 0x24, 0xdf, 0x89, 0xe0, 0xb7, 0x36, 0x93, 0x47, 0x23, 0xee, 0xeb, 0x3f, 0x31, + 0x91, 0x66, 0xff, 0x6a, 0x11, 0x4e, 0x65, 0x1e, 0xfd, 0x61, 0xf1, 0x79, 0xf2, 0x66, 0x54, 0x36, + 0x99, 0xae, 0xde, 0x46, 0x56, 0x14, 0xe4, 0x7d, 0x00, 0x55, 0xda, 0x6e, 0x06, 0x5d, 0xee, 0xb8, + 0x8c, 0x9c, 0xd8, 0x71, 0x51, 0xbe, 0xee, 0x8a, 0xe2, 0x82, 0x06, 0x47, 0x59, 0x31, 0x3b, 0x2a, + 0x1e, 0xae, 0x48, 0x57, 0xcc, 0x1a, 0x57, 0xea, 0xc6, 0x1e, 0xef, 0x95, 0x3a, 0x0f, 0x4e, 0x09, + 0x15, 0x55, 0x81, 0xd4, 0x43, 0xd4, 0x41, 0x9d, 0x61, 0x33, 0x6a, 0x25, 0xcd, 0x06, 0xb3, 0x7c, + 0xed, 0x4f, 0x17, 0x98, 0xfb, 0x26, 0x3a, 0x7b, 0x3d, 0xc9, 0x65, 0xbf, 0x11, 0xc6, 0x9c, 0x4e, + 0xdc, 0x08, 0x7a, 0x9e, 0xda, 0x58, 0xe2, 0x50, 0x94, 0x58, 0xb2, 0x06, 0x23, 0x55, 0x27, 0x4e, + 0xde, 0xf6, 0x3f, 0x89, 0x72, 0x3a, 0x71, 0xe5, 0xc4, 0x14, 0x39, 0x17, 0xf2, 0x34, 0x8c, 0xc4, + 0x4e, 0x3d, 0xf5, 0xaa, 0xe8, 0x8e, 0x53, 0x8f, 0x90, 0x43, 0xcd, 0xdd, 0x65, 0xe4, 0x88, 0xdd, + 0xe5, 0x45, 0xe3, 0xbf, 0x4e, 0x18, 0x87, 0x24, 0xbd, 0xff, 0x29, 0x42, 0xd4, 0xf0, 0xa7, 0x68, + 0xed, 0x1f, 0x81, 0x49, 0xf3, 0x3f, 0x49, 0x1c, 0xeb, 0x0a, 0x90, 0xfd, 0xcf, 0x23, 0x30, 0x95, + 0x2a, 0xa2, 0x4b, 0xcd, 0x72, 0xeb, 0xc8, 0x59, 0xce, 0x8f, 0xbf, 0x3a, 0x3e, 0x95, 0x25, 0x92, + 0xc6, 0xf1, 0x57, 0xc7, 0xa7, 0x28, 0x70, 0x6c, 0x54, 0xaa, 0x61, 0x17, 0x3b, 0xbe, 0x4c, 0xa2, + 0xab, 0x51, 0x59, 0xe1, 0x50, 0x94, 0x58, 0x16, 0xc0, 0x4e, 0x46, 0xdc, 0x28, 0x0a, 0x1b, 0x21, + 0x57, 0xcd, 0xb5, 0x3c, 0x9e, 0x27, 0x93, 0x05, 0xa3, 0x3c, 0xa0, 0x37, 0x21, 0x98, 0x92, 0x48, + 0x3e, 0x66, 0x99, 0x0f, 0xb3, 0x8d, 0xe5, 0x71, 0xf8, 0x93, 0xad, 0x51, 0x14, 0x2b, 0xe8, 0xc1, + 0xef, 0xb3, 0x45, 0x6a, 0x01, 0x8f, 0x3f, 0x9a, 0x05, 0x0c, 0x7d, 0x16, 0xef, 0x9b, 0xa1, 0xdc, + 0x72, 0x7c, 0xaf, 0x46, 0xa3, 0x58, 0xfc, 0x17, 0x98, 0xb2, 0x88, 0x9e, 0xd6, 0x13, 0x20, 0x6a, + 0x3c, 0xff, 0x5f, 0x4b, 0xbc, 0x61, 0x22, 0x88, 0x29, 0x1b, 0xff, 0x6b, 0x49, 0x83, 0xd1, 0xa4, + 0xb1, 0x7f, 0xcf, 0x82, 0x27, 0xfb, 0x76, 0xc6, 0x0f, 0x6e, 0xb6, 0xd2, 0xfe, 0xfd, 0x02, 0x9c, + 0xe9, 0x53, 0x64, 0x4a, 0xba, 0x8f, 0xec, 0xfd, 0x3e, 0x59, 0xc5, 0x3a, 0x35, 0x70, 0x6e, 0x9c, + 0x6c, 0x1b, 0xd2, 0x5b, 0x41, 0xf1, 0xb1, 0x6e, 0x05, 0xf6, 0x97, 0x0a, 0x60, 0xbc, 0x5d, 0x49, + 0x3e, 0x64, 0xd6, 0x53, 0x5b, 0x79, 0xd5, 0xfe, 0x0a, 0xe6, 0xaa, 0x1e, 0x5b, 0xf4, 0x5a, 0xbf, + 0xf2, 0xec, 0xec, 0x7c, 0x2d, 0x1c, 0x3d, 0x5f, 0x49, 0x33, 0x29, 0x5c, 0x2f, 0xe6, 0x5f, 0xb8, + 0x5e, 0xee, 0x29, 0x5a, 0xff, 0x65, 0x4b, 0xcc, 0xb4, 0x4c, 0x93, 0xb4, 0x85, 0xb5, 0x1e, 0x60, + 0x61, 0xdf, 0x02, 0xa5, 0x88, 0x36, 0x6b, 0xcc, 0xb3, 0x93, 0x96, 0x58, 0xcd, 0x89, 0x6d, 0x09, + 0x47, 0x45, 0xc1, 0xaf, 0xb4, 0x36, 0x9b, 0xc1, 0xdd, 0x4b, 0xad, 0x76, 0xdc, 0x95, 0x36, 0x59, + 0x5f, 0x69, 0x55, 0x18, 0x34, 0xa8, 0xec, 0xff, 0xb4, 0xc4, 0x70, 0x4a, 0x1f, 0xfd, 0x85, 0xcc, + 0x55, 0xc3, 0xe3, 0xbb, 0xb7, 0x3f, 0x0b, 0xe0, 0xaa, 0xcb, 0xff, 0xf9, 0x3c, 0x40, 0xa9, 0x1f, + 0x13, 0x30, 0x5f, 0x45, 0x4c, 0x60, 0x68, 0xc8, 0x4b, 0x2d, 0x9e, 0xe2, 0x51, 0x8b, 0xc7, 0xfe, + 0x37, 0x0b, 0x52, 0x9b, 0x05, 0x69, 0xc3, 0x28, 0xd3, 0xa0, 0x9b, 0xcf, 0x53, 0x05, 0x26, 0x6b, + 0xb6, 0xb0, 0xe4, 0xb4, 0xe0, 0x7f, 0xa2, 0x10, 0x44, 0x9a, 0xd2, 0x3b, 0x2f, 0xe4, 0xf1, 0x9c, + 0x86, 0x29, 0x90, 0xf9, 0xf7, 0xf2, 0xff, 0x6a, 0x28, 0x4f, 0xdf, 0x7e, 0x01, 0x66, 0x7a, 0x94, + 0xe2, 0x97, 0x8f, 0x82, 0xe4, 0x7d, 0x06, 0x63, 0x06, 0xf2, 0xab, 0x90, 0x28, 0x70, 0xcc, 0xc1, + 0x3f, 0x9d, 0x65, 0x4f, 0x3e, 0x6f, 0xc1, 0x4c, 0x94, 0xe5, 0xf7, 0xa8, 0xfa, 0x4e, 0x65, 0xae, + 0x7a, 0x50, 0xd8, 0xab, 0x84, 0xfd, 0xe7, 0xd2, 0x3c, 0x89, 0xff, 0x43, 0xa6, 0x36, 0x17, 0x6b, + 0xe0, 0xe6, 0xc2, 0x96, 0x98, 0xdb, 0xa0, 0xd5, 0x4e, 0xb3, 0xa7, 0x94, 0x66, 0x5b, 0xc2, 0x51, + 0x51, 0xa4, 0x1e, 0xa2, 0x2b, 0x1e, 0xf9, 0x10, 0xdd, 0xf3, 0x30, 0x69, 0xbe, 0x41, 0xc2, 0x53, + 0x68, 0xf2, 0xf0, 0xc1, 0x7c, 0xae, 0x04, 0x53, 0x54, 0x99, 0x87, 0xcc, 0x46, 0x8f, 0x7c, 0xc8, + 0xec, 0x59, 0x28, 0xc9, 0x47, 0xb9, 0x92, 0xfc, 0xae, 0xa8, 0xd3, 0x91, 0x30, 0x54, 0x58, 0x66, + 0x20, 0x5a, 0x8e, 0xdf, 0x71, 0x9a, 0xac, 0x87, 0x64, 0xf9, 0x9e, 0x5a, 0x59, 0xeb, 0x0a, 0x83, + 0x06, 0x95, 0xfd, 0x4f, 0x16, 0x64, 0xdf, 0x08, 0x4a, 0x15, 0x01, 0x5a, 0x47, 0x16, 0x01, 0xa6, + 0x0b, 0x9c, 0x0a, 0xc7, 0x2a, 0x70, 0x32, 0x6b, 0x8f, 0x8a, 0x0f, 0xac, 0x3d, 0x7a, 0x83, 0xbe, + 0x40, 0x2e, 0x8a, 0x94, 0x26, 0xfa, 0x5d, 0x1e, 0x27, 0x36, 0x8c, 0xb9, 0x8e, 0xaa, 0xb1, 0x9e, + 0x14, 0x8e, 0xd2, 0xf2, 0x12, 0x27, 0x92, 0x98, 0xca, 0xc2, 0x57, 0xbe, 0x7d, 0xfe, 0x89, 0xaf, + 0x7e, 0xfb, 0xfc, 0x13, 0xdf, 0xf8, 0xf6, 0xf9, 0x27, 0x3e, 0x72, 0xef, 0xbc, 0xf5, 0x95, 0x7b, + 0xe7, 0xad, 0xaf, 0xde, 0x3b, 0x6f, 0x7d, 0xe3, 0xde, 0x79, 0xeb, 0x5b, 0xf7, 0xce, 0x5b, 0x9f, + 0xf9, 0xfb, 0xf3, 0x4f, 0xbc, 0xbb, 0x94, 0xcc, 0xd5, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x25, + 0xff, 0xb8, 0x80, 0xd5, 0x76, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -4101,6 +4103,11 @@ func (m *ApplicationSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.TrackingMethod) + copy(dAtA[i:], m.TrackingMethod) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TrackingMethod))) + i-- + dAtA[i] = 0x42 if m.RevisionHistoryLimit != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) i-- @@ -8569,6 +8576,8 @@ func (m *ApplicationSpec) Size() (n int) { if m.RevisionHistoryLimit != nil { n += 1 + sovGenerated(uint64(*m.RevisionHistoryLimit)) } + l = len(m.TrackingMethod) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -10409,6 +10418,7 @@ func (this *ApplicationSpec) String() string { `IgnoreDifferences:` + repeatedStringForIgnoreDifferences + `,`, `Info:` + repeatedStringForInfo + `,`, `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, + `TrackingMethod:` + fmt.Sprintf("%v", this.TrackingMethod) + `,`, `}`, }, "") return s @@ -15001,6 +15011,38 @@ func (m *ApplicationSpec) Unmarshal(dAtA []byte) error { } } m.RevisionHistoryLimit = &v + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrackingMethod", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + 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 ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TrackingMethod = TrackingMethod(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 3978741aabd0b..313d0a8f24ac1 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -291,6 +291,9 @@ message ApplicationSpec { // Increasing will increase the space used to store the history, so we do not recommend increasing it. // Default is 10. optional int64 revisionHistoryLimit = 7; + + // TrackingMethod is ability configure way how to track resources on application level + optional string trackingMethod = 8; } // ApplicationStatus contains status information for the application diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 682a319465333..e640e1526f558 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -1078,6 +1078,13 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSpec(ref common.ReferenceCa Format: "int64", }, }, + "trackingMethod": { + SchemaProps: spec.SchemaProps{ + Description: "TrackingMethod is ability configure way how to track resources on application level", + Type: []string{"string"}, + Format: "", + }, + }, }, Required: []string{"source", "destination", "project"}, }, diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 600d65e41965f..f4a0b3a337a9f 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -72,7 +72,8 @@ type ApplicationSpec struct { // Increasing will increase the space used to store the history, so we do not recommend increasing it. // Default is 10. RevisionHistoryLimit *int64 `json:"revisionHistoryLimit,omitempty" protobuf:"bytes,7,name=revisionHistoryLimit"` - TrackingMethod TrackingMethod + // TrackingMethod is ability configure way how to track resources on application level + TrackingMethod TrackingMethod `json:"trackingMethod,omitempty" protobuf:"bytes,8,name=trackingMethod"` } type TrackingMethod string diff --git a/server/application/application.go b/server/application/application.go index 5df4f563bb11e..549e22c41b422 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -331,7 +331,7 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan KubeVersion: serverVersion, ApiVersions: argo.APIGroupsToVersions(apiGroups), HelmRepoCreds: helmCreds, - TrackingMethod: string(argoutil.GetTrackingMethodFromApplication(s.settingsMgr, a)), + TrackingMethod: string(argoutil.GetTrackingMethod(s.settingsMgr, a)), }) return err }) @@ -415,7 +415,7 @@ func (s *Server) Get(ctx context.Context, q *application.ApplicationQuery) (*app KustomizeOptions: kustomizeOptions, Repos: helmRepos, NoCache: true, - TrackingMethod: string(argoutil.GetTrackingMethodFromApplication(s.settingsMgr, a)), + TrackingMethod: string(argoutil.GetTrackingMethod(s.settingsMgr, a)), }) return err }); err != nil { From bc674a5d2d9fa8cd1026a87ac012a78e1106f1ed Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Thu, 23 Sep 2021 19:14:43 +0300 Subject: [PATCH 22/32] add comments Signed-off-by: pashavictorovich --- util/argo/resource_tracking.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index d8506e1487e73..b5b6dbb16d1ba 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -31,6 +31,7 @@ func NewResourceTracking() ResourceTracking { return &resourceTracking{} } +// GetTrackingMethodFromSettings retrieve tracking method from argo-cm configmap func GetTrackingMethodFromSettings(settingsMgr *settings.SettingsManager) v1alpha1.TrackingMethod { tm, err := settingsMgr.GetTrackingMethod() if err != nil { @@ -39,6 +40,7 @@ func GetTrackingMethodFromSettings(settingsMgr *settings.SettingsManager) v1alph return v1alpha1.TrackingMethod(tm) } +// GetTrackingMethodFromApplicationInformer retrieve tracking method from application func GetTrackingMethodFromApplicationInformer(appInformer cache.SharedIndexInformer, namespace, appName string) (string, error) { obj, exists, err := appInformer.GetIndexer().GetByKey(namespace + "/" + appName) app, ok := obj.(*v1alpha1.Application) @@ -48,6 +50,7 @@ func GetTrackingMethodFromApplicationInformer(appInformer cache.SharedIndexInfor return string(app.Spec.TrackingMethod), nil } +// GetTrackingMethod retrieve tracking method from application and if it is not exist take it from settings func GetTrackingMethod(settingsMgr *settings.SettingsManager, application *v1alpha1.Application) v1alpha1.TrackingMethod { if application.Spec.TrackingMethod != "" { return application.Spec.TrackingMethod @@ -55,6 +58,7 @@ func GetTrackingMethod(settingsMgr *settings.SettingsManager, application *v1alp return GetTrackingMethodFromSettings(settingsMgr) } +// GetApplicationNameIfResourceBelongApp get app name if tracking method that defined inside application same as tm func (rt *resourceTracking) GetApplicationNameIfResourceBelongApp(un *unstructured.Unstructured, key string, appInformer cache.SharedIndexInformer, tm v1alpha1.TrackingMethod) string { appName := rt.GetAppName(un, key, tm) if appName != "" { @@ -66,6 +70,7 @@ func (rt *resourceTracking) GetApplicationNameIfResourceBelongApp(un *unstructur return "" } +// GetAppName retrieve application name base on tracking method func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string { switch trackingMethod { case TrackingMethodLabel: @@ -77,6 +82,7 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string } } +// GetAppName set label/annotation base on tracking method func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error { switch trackingMethod { case TrackingMethodLabel: From bcd51214201127e25668c23853166b25c8d67699 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Thu, 23 Sep 2021 19:20:42 +0300 Subject: [PATCH 23/32] small refactoring Signed-off-by: pashavictorovich --- controller/cache/cache.go | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 89c34ccc0183e..a826cdb61c7d0 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -261,6 +261,16 @@ func skipAppRequeuing(key kube.ResourceKey) bool { return ignoredRefreshResources[key.Group+"/"+key.Kind] } +// Get application name from label first, if it is exist and same as defined tracking method, this app name is taken +// In case if application name can't be retrieve or not same as tracking method inside retrieved app, we do same flow but with annotations +func (c *liveStateCache) retrieveApplicationName(un *unstructured.Unstructured) string { + appNameFromLabels := c.resourceTracking.GetApplicationNameIfResourceBelongApp(un, c.cacheSettings.appInstanceLabelKey, c.appInformer, argo.TrackingMethodLabel) + if appNameFromLabels != "" { + return appNameFromLabels + } + return c.resourceTracking.GetApplicationNameIfResourceBelongApp(un, c.cacheSettings.appInstanceLabelKey, c.appInformer, argo.TrackingMethodAnnotation) +} + func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, error) { c.lock.RLock() clusterCache, ok := c.clusters[server] @@ -301,19 +311,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e populateNodeInfo(un, res) res.Health, _ = health.GetResourceHealth(un, cacheSettings.clusterSettings.ResourceHealthOverride) - var appName string - - // Get application name from label first, if it is exist and same as defined tracking method, this app name is taken - // In case if application name can't be retrieve or not same as tracking method inside retrieved app, we do same flow but with annotations - appNameFromLabels := c.resourceTracking.GetApplicationNameIfResourceBelongApp(un, cacheSettings.appInstanceLabelKey, c.appInformer, argo.TrackingMethodLabel) - if appNameFromLabels != "" { - appName = appNameFromLabels - } else { - appNameFromAnnotations := c.resourceTracking.GetApplicationNameIfResourceBelongApp(un, cacheSettings.appInstanceLabelKey, c.appInformer, argo.TrackingMethodAnnotation) - if appNameFromAnnotations != "" { - appName = appNameFromAnnotations - } - } + appName := c.retrieveApplicationName(un) // if application not exist in labels and annotations with related tracking method, application should be retrieved with settings level tracking method if appName == "" { From a9d7aa469d13eb9c438a1a604d32fecc3073770d Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Thu, 23 Sep 2021 19:45:01 +0300 Subject: [PATCH 24/32] add tests Signed-off-by: pashavictorovich --- util/argo/resource_tracking_test.go | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/util/argo/resource_tracking_test.go b/util/argo/resource_tracking_test.go index 354e87c186891..e00ab0078a928 100644 --- a/util/argo/resource_tracking_test.go +++ b/util/argo/resource_tracking_test.go @@ -3,14 +3,53 @@ package argo import ( "io/ioutil" "testing" + "time" + + "github.com/argoproj/argo-cd/v2/test" + + "k8s.io/client-go/tools/cache" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v2" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "github.com/argoproj/argo-cd/v2/common" + + appsv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + appsfake "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned/fake" + appinformers "github.com/argoproj/argo-cd/v2/pkg/client/informers/externalversions/application/v1alpha1" ) +const fakeApp = ` +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: test-app + namespace: default +spec: + source: + path: some/path + repoURL: https://github.com/argoproj/argocd-example-apps.git + targetRevision: HEAD + ksonnet: + environment: default + destination: + namespace: ` + test.FakeDestNamespace + ` + server: https://cluster-api.com +` + +func createTestApp(testApp string, opts ...func(app *appsv1.Application)) *appsv1.Application { + var app appsv1.Application + err := yaml.Unmarshal([]byte(testApp), &app) + if err != nil { + panic(err) + } + for i := range opts { + opts[i](&app) + } + return &app +} + func TestSetAppInstanceLabel(t *testing.T) { yamlBytes, err := ioutil.ReadFile("testdata/svc.yaml") assert.Nil(t, err) @@ -58,3 +97,12 @@ func TestSetAppInstanceAnnotationNotFound(t *testing.T) { app := resourceTracking.GetAppName(&obj, common.LabelKeyAppInstance, TrackingMethodAnnotation) assert.Equal(t, "", app) } + +func TestGetTrackingMethodFromApplicationInformer(t *testing.T) { + appclientset := appsfake.NewSimpleClientset() + appInformer := appinformers.NewApplicationInformer(appclientset, "", time.Minute, cache.Indexers{}) + + appName, err := GetTrackingMethodFromApplicationInformer(appInformer, "", "test") + assert.NoError(t, err) + +} From e300685453310479391bd84f911030d771b198c0 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Fri, 24 Sep 2021 15:01:35 +0300 Subject: [PATCH 25/32] add tests Signed-off-by: pashavictorovich --- util/argo/resource_tracking.go | 2 +- util/argo/resource_tracking_test.go | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index b5b6dbb16d1ba..640b7ec8b32a9 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -44,7 +44,7 @@ func GetTrackingMethodFromSettings(settingsMgr *settings.SettingsManager) v1alph func GetTrackingMethodFromApplicationInformer(appInformer cache.SharedIndexInformer, namespace, appName string) (string, error) { obj, exists, err := appInformer.GetIndexer().GetByKey(namespace + "/" + appName) app, ok := obj.(*v1alpha1.Application) - if !exists && err != nil && !ok { + if !exists || err != nil || !ok { return "", fmt.Errorf("application not found") } return string(app.Spec.TrackingMethod), nil diff --git a/util/argo/resource_tracking_test.go b/util/argo/resource_tracking_test.go index e00ab0078a928..6d53f60c654d5 100644 --- a/util/argo/resource_tracking_test.go +++ b/util/argo/resource_tracking_test.go @@ -3,21 +3,22 @@ package argo import ( "io/ioutil" "testing" - "time" - "github.com/argoproj/argo-cd/v2/test" + "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/tools/cache" + "github.com/argoproj/argo-cd/v2/test" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v2" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "github.com/argoproj/argo-cd/v2/common" appsv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" - appsfake "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned/fake" - appinformers "github.com/argoproj/argo-cd/v2/pkg/client/informers/externalversions/application/v1alpha1" + + apps "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned/fake" + appinformer "github.com/argoproj/argo-cd/v2/pkg/client/informers/externalversions" ) const fakeApp = ` @@ -99,10 +100,18 @@ func TestSetAppInstanceAnnotationNotFound(t *testing.T) { } func TestGetTrackingMethodFromApplicationInformer(t *testing.T) { - appclientset := appsfake.NewSimpleClientset() - appInformer := appinformers.NewApplicationInformer(appclientset, "", time.Minute, cache.Indexers{}) + app := createTestApp(fakeApp) + var objects []runtime.Object + objects = append(objects, app) + + fakeAppsClientset := apps.NewSimpleClientset(objects...) + + factory := appinformer.NewSharedInformerFactoryWithOptions(fakeAppsClientset, 0, appinformer.WithNamespace("default"), appinformer.WithTweakListOptions(func(options *metav1.ListOptions) {})) + + // populate the app informer with the fake objects + appInformer := factory.Argoproj().V1alpha1().Applications().Informer() - appName, err := GetTrackingMethodFromApplicationInformer(appInformer, "", "test") - assert.NoError(t, err) + _, err := GetTrackingMethodFromApplicationInformer(appInformer, "default", "test-app") + assert.Equal(t, err.Error(), "application not found") } From edaf1fa2bb4a8cefbea8e38f9c318f422732133b Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 29 Sep 2021 00:48:43 +0300 Subject: [PATCH 26/32] tracking method for annotations should be in another format Signed-off-by: pashavictorovich --- reposerver/repository/repository.go | 11 ++++++- util/argo/resource_tracking.go | 47 ++++++++++++++++++++++++++++- util/argo/resource_tracking_test.go | 11 +++++++ 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index f9e19aec5ae3f..5f30972d2667a 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -774,7 +774,16 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - err = resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName, v1alpha1.TrackingMethod(q.TrackingMethod)) + gvk := target.GetObjectKind().GroupVersionKind() + appInstanceValue := argo.AppInstanceValue{ + ApplicationName: q.AppName, + Group: gvk.Group, + Kind: gvk.Kind, + Namespace: target.GetNamespace(), + Name: target.GetName(), + } + value := resourceTracking.BuildAppInstanceValue(appInstanceValue) + err = resourceTracking.SetAppInstance(target, q.AppLabelKey, value, v1alpha1.TrackingMethod(q.TrackingMethod)) if err != nil { return nil, err } diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index 2c09560c78fe8..78f0edc250fe8 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -1,6 +1,9 @@ package argo import ( + "fmt" + "strings" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "github.com/argoproj/argo-cd/v2/util/settings" @@ -16,10 +19,23 @@ const ( TrackingMethodAnnotationAndLabel v1alpha1.TrackingMethod = "annotation+label" ) +var WrongResourceTrackingFormat = fmt.Errorf("wrong resource tracking format, should be ;///") + // ResourceTracking defines methods which allow setup and retrieve tracking information to resource type ResourceTracking interface { GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error + BuildAppInstanceValue(value AppInstanceValue) string + ParseAppInstanceValue(value string) (*AppInstanceValue, error) +} + +//AppInstanceValue store information about resource tracking info +type AppInstanceValue struct { + ApplicationName string + Group string + Kind string + Namespace string + Name string } type resourceTracking struct { @@ -44,7 +60,12 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string case TrackingMethodLabel: return argokube.GetAppInstanceLabel(un, key) case TrackingMethodAnnotation: - return argokube.GetAppInstanceAnnotation(un, key) + appInstanceAnnotation := argokube.GetAppInstanceAnnotation(un, key) + value, err := rt.ParseAppInstanceValue(appInstanceAnnotation) + if err != nil { + return "" + } + return value.ApplicationName default: return argokube.GetAppInstanceLabel(un, key) } @@ -61,3 +82,27 @@ func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, v return argokube.SetAppInstanceLabel(un, key, val) } } + +//BuildAppInstanceValue build resource tracking id in format ;/// +func (rt *resourceTracking) BuildAppInstanceValue(value AppInstanceValue) string { + return fmt.Sprintf("%s;%s/%s/%s/%s", value.ApplicationName, value.Group, value.Kind, value.Namespace, value.Name) +} + +//ParseAppInstanceValue parse resource tracking id from format ;/// to struct +func (rt *resourceTracking) ParseAppInstanceValue(value string) (*AppInstanceValue, error) { + var appInstanceValue AppInstanceValue + parts := strings.Split(value, ";") + appInstanceValue.ApplicationName = parts[0] + if len(parts) == 1 { + return nil, WrongResourceTrackingFormat + } + newParts := strings.Split(parts[1], "/") + if len(newParts) != 4 { + return nil, WrongResourceTrackingFormat + } + appInstanceValue.Group = newParts[0] + appInstanceValue.Kind = newParts[1] + appInstanceValue.Namespace = newParts[2] + appInstanceValue.Name = newParts[3] + return &appInstanceValue, nil +} diff --git a/util/argo/resource_tracking_test.go b/util/argo/resource_tracking_test.go index 354e87c186891..7c8123cf7ce8c 100644 --- a/util/argo/resource_tracking_test.go +++ b/util/argo/resource_tracking_test.go @@ -58,3 +58,14 @@ func TestSetAppInstanceAnnotationNotFound(t *testing.T) { app := resourceTracking.GetAppName(&obj, common.LabelKeyAppInstance, TrackingMethodAnnotation) assert.Equal(t, "", app) } + +func TestParseAppInstanceValue(t *testing.T) { + resourceTracking := NewResourceTracking() + appInstanceValue, err := resourceTracking.ParseAppInstanceValue("app;///") + assert.NoError(t, err) + assert.Equal(t, appInstanceValue.ApplicationName, "app") + assert.Equal(t, appInstanceValue.Group, "") + assert.Equal(t, appInstanceValue.Kind, "") + assert.Equal(t, appInstanceValue.Namespace, "") + assert.Equal(t, appInstanceValue.Name, "") +} From d13caf05bca0dbed91e75fb4d373ab3ae6d515ca Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 29 Sep 2021 00:54:07 +0300 Subject: [PATCH 27/32] not change behavior in case if tracking method is label or none Signed-off-by: pashavictorovich --- reposerver/repository/repository.go | 3 +-- util/argo/resource_tracking.go | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 5f30972d2667a..6d808638dee2e 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -782,8 +782,7 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest Namespace: target.GetNamespace(), Name: target.GetName(), } - value := resourceTracking.BuildAppInstanceValue(appInstanceValue) - err = resourceTracking.SetAppInstance(target, q.AppLabelKey, value, v1alpha1.TrackingMethod(q.TrackingMethod)) + err = resourceTracking.SetAppInstance(target, q.AppLabelKey, appInstanceValue, v1alpha1.TrackingMethod(q.TrackingMethod)) if err != nil { return nil, err } diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index 78f0edc250fe8..ace5493a0fb09 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -24,7 +24,7 @@ var WrongResourceTrackingFormat = fmt.Errorf("wrong resource tracking format, sh // ResourceTracking defines methods which allow setup and retrieve tracking information to resource type ResourceTracking interface { GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string - SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error + SetAppInstance(un *unstructured.Unstructured, key string, val AppInstanceValue, trackingMethod v1alpha1.TrackingMethod) error BuildAppInstanceValue(value AppInstanceValue) string ParseAppInstanceValue(value string) (*AppInstanceValue, error) } @@ -72,14 +72,14 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string } // SetAppInstance set label/annotation base on tracking method -func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error { +func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key string, val AppInstanceValue, trackingMethod v1alpha1.TrackingMethod) error { switch trackingMethod { case TrackingMethodLabel: - return argokube.SetAppInstanceLabel(un, key, val) + return argokube.SetAppInstanceLabel(un, key, val.ApplicationName) case TrackingMethodAnnotation: - return argokube.SetAppInstanceAnnotation(un, key, val) + return argokube.SetAppInstanceAnnotation(un, key, rt.BuildAppInstanceValue(val)) default: - return argokube.SetAppInstanceLabel(un, key, val) + return argokube.SetAppInstanceLabel(un, key, val.ApplicationName) } } From 538487326fb81e8cdc3792b8c96737b0b8aea69b Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 29 Sep 2021 01:03:23 +0300 Subject: [PATCH 28/32] fix tests and encapsulate how value was built Signed-off-by: pashavictorovich --- reposerver/repository/repository.go | 10 +--------- util/argo/resource_tracking.go | 18 +++++++++++++----- util/argo/resource_tracking_test.go | 12 ++++++++++++ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 6d808638dee2e..f9e19aec5ae3f 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -774,15 +774,7 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - gvk := target.GetObjectKind().GroupVersionKind() - appInstanceValue := argo.AppInstanceValue{ - ApplicationName: q.AppName, - Group: gvk.Group, - Kind: gvk.Kind, - Namespace: target.GetNamespace(), - Name: target.GetName(), - } - err = resourceTracking.SetAppInstance(target, q.AppLabelKey, appInstanceValue, v1alpha1.TrackingMethod(q.TrackingMethod)) + err = resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName, v1alpha1.TrackingMethod(q.TrackingMethod)) if err != nil { return nil, err } diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index ace5493a0fb09..d1a7f52afbbaa 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -24,7 +24,7 @@ var WrongResourceTrackingFormat = fmt.Errorf("wrong resource tracking format, sh // ResourceTracking defines methods which allow setup and retrieve tracking information to resource type ResourceTracking interface { GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string - SetAppInstance(un *unstructured.Unstructured, key string, val AppInstanceValue, trackingMethod v1alpha1.TrackingMethod) error + SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error BuildAppInstanceValue(value AppInstanceValue) string ParseAppInstanceValue(value string) (*AppInstanceValue, error) } @@ -72,14 +72,22 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string } // SetAppInstance set label/annotation base on tracking method -func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key string, val AppInstanceValue, trackingMethod v1alpha1.TrackingMethod) error { +func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error { switch trackingMethod { case TrackingMethodLabel: - return argokube.SetAppInstanceLabel(un, key, val.ApplicationName) + return argokube.SetAppInstanceLabel(un, key, val) case TrackingMethodAnnotation: - return argokube.SetAppInstanceAnnotation(un, key, rt.BuildAppInstanceValue(val)) + gvk := un.GetObjectKind().GroupVersionKind() + appInstanceValue := AppInstanceValue{ + ApplicationName: val, + Group: gvk.Group, + Kind: gvk.Kind, + Namespace: un.GetNamespace(), + Name: un.GetName(), + } + return argokube.SetAppInstanceAnnotation(un, key, rt.BuildAppInstanceValue(appInstanceValue)) default: - return argokube.SetAppInstanceLabel(un, key, val.ApplicationName) + return argokube.SetAppInstanceLabel(un, key, val) } } diff --git a/util/argo/resource_tracking_test.go b/util/argo/resource_tracking_test.go index 7c8123cf7ce8c..48db2e66c8829 100644 --- a/util/argo/resource_tracking_test.go +++ b/util/argo/resource_tracking_test.go @@ -69,3 +69,15 @@ func TestParseAppInstanceValue(t *testing.T) { assert.Equal(t, appInstanceValue.Namespace, "") assert.Equal(t, appInstanceValue.Name, "") } + +func TestParseAppInstanceValueWrongFormat1(t *testing.T) { + resourceTracking := NewResourceTracking() + _, err := resourceTracking.ParseAppInstanceValue("app") + assert.Error(t, err, WrongResourceTrackingFormat) +} + +func TestParseAppInstanceValueWrongFormat2(t *testing.T) { + resourceTracking := NewResourceTracking() + _, err := resourceTracking.ParseAppInstanceValue("app;group/kind/ns") + assert.Error(t, err, WrongResourceTrackingFormat) +} From c24fbaeed8562a2a4c16995db2df9e8ecf6a676a Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 29 Sep 2021 13:39:48 +0300 Subject: [PATCH 29/32] tracking method e2e test Signed-off-by: pashavictorovich --- reposerver/repository/repository.go | 2 +- test/e2e/deployment_test.go | 9 ++++++--- util/argo/resource_tracking.go | 10 +++++++--- util/argo/resource_tracking_test.go | 4 ++-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index f9e19aec5ae3f..a6b40f06c5a6f 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -774,7 +774,7 @@ func GenerateManifests(appPath, repoRoot, revision string, q *apiclient.Manifest for _, target := range targets { if q.AppLabelKey != "" && q.AppName != "" && !kube.IsCRD(target) { - err = resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName, v1alpha1.TrackingMethod(q.TrackingMethod)) + err = resourceTracking.SetAppInstance(target, q.AppLabelKey, q.AppName, q.Namespace, v1alpha1.TrackingMethod(q.TrackingMethod)) if err != nil { return nil, err } diff --git a/test/e2e/deployment_test.go b/test/e2e/deployment_test.go index dee795f8facae..d8e6871712e21 100644 --- a/test/e2e/deployment_test.go +++ b/test/e2e/deployment_test.go @@ -57,7 +57,8 @@ func TestDeploymentWithAnnotationTrackingMode(t *testing.T) { out, err := RunCli("app", "manifests", app.Name) assert.NoError(t, err) assert.Contains(t, out, fmt.Sprintf(`annotations: - app.kubernetes.io/instance: %s`, Name())) + app.kubernetes.io/instance: %s;apps/Deployment/%s/nginx-deployment +`, Name(), DeploymentNamespace())) }) } @@ -80,7 +81,8 @@ func TestDeploymentWithLabelTrackingMode(t *testing.T) { assert.NoError(t, err) assert.Contains(t, out, fmt.Sprintf(`labels: app: nginx - app.kubernetes.io/instance: %s`, Name())) + app.kubernetes.io/instance: %s +`, Name())) }) } @@ -101,6 +103,7 @@ func TestDeploymentWithoutTrackingMode(t *testing.T) { assert.NoError(t, err) assert.Contains(t, out, fmt.Sprintf(`labels: app: nginx - app.kubernetes.io/instance: %s`, Name())) + app.kubernetes.io/instance: %s +`, Name())) }) } diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index d1a7f52afbbaa..c1f20a5e75a84 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -1,7 +1,9 @@ package argo import ( + "encoding/json" "fmt" + "log" "strings" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -24,7 +26,7 @@ var WrongResourceTrackingFormat = fmt.Errorf("wrong resource tracking format, sh // ResourceTracking defines methods which allow setup and retrieve tracking information to resource type ResourceTracking interface { GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string - SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error + SetAppInstance(un *unstructured.Unstructured, key, val, namespace string, trackingMethod v1alpha1.TrackingMethod) error BuildAppInstanceValue(value AppInstanceValue) string ParseAppInstanceValue(value string) (*AppInstanceValue, error) } @@ -72,17 +74,19 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string } // SetAppInstance set label/annotation base on tracking method -func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error { +func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val, namespace string, trackingMethod v1alpha1.TrackingMethod) error { switch trackingMethod { case TrackingMethodLabel: return argokube.SetAppInstanceLabel(un, key, val) case TrackingMethodAnnotation: + str, _ := json.Marshal(un) + log.Println("Set app instance: " + string(str)) gvk := un.GetObjectKind().GroupVersionKind() appInstanceValue := AppInstanceValue{ ApplicationName: val, Group: gvk.Group, Kind: gvk.Kind, - Namespace: un.GetNamespace(), + Namespace: namespace, Name: un.GetName(), } return argokube.SetAppInstanceAnnotation(un, key, rt.BuildAppInstanceValue(appInstanceValue)) diff --git a/util/argo/resource_tracking_test.go b/util/argo/resource_tracking_test.go index 48db2e66c8829..aeec61fe1911a 100644 --- a/util/argo/resource_tracking_test.go +++ b/util/argo/resource_tracking_test.go @@ -21,7 +21,7 @@ func TestSetAppInstanceLabel(t *testing.T) { resourceTracking := NewResourceTracking() - err = resourceTracking.SetAppInstance(&obj, common.LabelKeyAppInstance, "my-app", TrackingMethodLabel) + err = resourceTracking.SetAppInstance(&obj, common.LabelKeyAppInstance, "my-app", "", TrackingMethodLabel) assert.Nil(t, err) app := resourceTracking.GetAppName(&obj, common.LabelKeyAppInstance, TrackingMethodLabel) @@ -38,7 +38,7 @@ func TestSetAppInstanceAnnotation(t *testing.T) { resourceTracking := NewResourceTracking() - err = resourceTracking.SetAppInstance(&obj, common.LabelKeyAppInstance, "my-app", TrackingMethodAnnotation) + err = resourceTracking.SetAppInstance(&obj, common.LabelKeyAppInstance, "my-app", "", TrackingMethodAnnotation) assert.Nil(t, err) app := resourceTracking.GetAppName(&obj, common.LabelKeyAppInstance, TrackingMethodAnnotation) From cc490639c3ba77d8d9d8b0c2557adc46736070b6 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 29 Sep 2021 13:44:04 +0300 Subject: [PATCH 30/32] remove redundant log Signed-off-by: pashavictorovich --- util/argo/resource_tracking.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index c1f20a5e75a84..841bbbb038863 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -1,9 +1,7 @@ package argo import ( - "encoding/json" "fmt" - "log" "strings" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -79,8 +77,6 @@ func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, v case TrackingMethodLabel: return argokube.SetAppInstanceLabel(un, key, val) case TrackingMethodAnnotation: - str, _ := json.Marshal(un) - log.Println("Set app instance: " + string(str)) gvk := un.GetObjectKind().GroupVersionKind() appInstanceValue := AppInstanceValue{ ApplicationName: val, From f11f8250e738143dd8b3a167dfe681d50976b750 Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 29 Sep 2021 16:05:13 +0300 Subject: [PATCH 31/32] fix merge issues Signed-off-by: pashavictorovich --- util/argo/resource_tracking.go | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/util/argo/resource_tracking.go b/util/argo/resource_tracking.go index 03c17935f26bb..826b197cdd45a 100644 --- a/util/argo/resource_tracking.go +++ b/util/argo/resource_tracking.go @@ -6,7 +6,6 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/client-go/tools/cache" "github.com/argoproj/argo-cd/v2/util/settings" @@ -30,6 +29,7 @@ type ResourceTracking interface { SetAppInstance(un *unstructured.Unstructured, key, val, namespace string, trackingMethod v1alpha1.TrackingMethod) error BuildAppInstanceValue(value AppInstanceValue) string ParseAppInstanceValue(value string) (*AppInstanceValue, error) + GetApplicationNameIfResourceBelongApp(un *unstructured.Unstructured, key string, appInformer cache.SharedIndexInformer, tm v1alpha1.TrackingMethod) string } //AppInstanceValue store information about resource tracking info @@ -39,10 +39,6 @@ type AppInstanceValue struct { Kind string Namespace string Name string -type ResourceTracking interface { - GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string - SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error - GetApplicationNameIfResourceBelongApp(un *unstructured.Unstructured, key string, appInformer cache.SharedIndexInformer, tm v1alpha1.TrackingMethod) string } type resourceTracking struct { @@ -52,8 +48,6 @@ func NewResourceTracking() ResourceTracking { return &resourceTracking{} } -// GetTrackingMethod retrieve tracking method from settings -func GetTrackingMethod(settingsMgr *settings.SettingsManager) v1alpha1.TrackingMethod { // GetTrackingMethodFromSettings retrieve tracking method from argo-cm configmap func GetTrackingMethodFromSettings(settingsMgr *settings.SettingsManager) v1alpha1.TrackingMethod { tm, err := settingsMgr.GetTrackingMethod() @@ -105,7 +99,6 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string return "" } return value.ApplicationName - return argokube.GetAppInstanceAnnotation(un, key) default: return argokube.GetAppInstanceLabel(un, key) } @@ -113,13 +106,10 @@ func (rt *resourceTracking) GetAppName(un *unstructured.Unstructured, key string // SetAppInstance set label/annotation base on tracking method func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val, namespace string, trackingMethod v1alpha1.TrackingMethod) error { -// GetAppName set label/annotation base on tracking method -func (rt *resourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val string, trackingMethod v1alpha1.TrackingMethod) error { switch trackingMethod { case TrackingMethodLabel: return argokube.SetAppInstanceLabel(un, key, val) case TrackingMethodAnnotation: - return argokube.SetAppInstanceAnnotation(un, key, val) gvk := un.GetObjectKind().GroupVersionKind() appInstanceValue := AppInstanceValue{ ApplicationName: val, From a54be016faf9b98261e4a2ba7560e7c06bf38bce Mon Sep 17 00:00:00 2001 From: pashavictorovich Date: Wed, 29 Sep 2021 16:10:06 +0300 Subject: [PATCH 32/32] fix tests Signed-off-by: pashavictorovich --- util/argo/resource_tracking_test.go | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/util/argo/resource_tracking_test.go b/util/argo/resource_tracking_test.go index b8b1db4a340e4..a81427cad71a0 100644 --- a/util/argo/resource_tracking_test.go +++ b/util/argo/resource_tracking_test.go @@ -4,13 +4,6 @@ import ( "io/ioutil" "testing" - "github.com/stretchr/testify/assert" - "gopkg.in/yaml.v2" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - - "github.com/argoproj/argo-cd/v2/common" -) - "k8s.io/apimachinery/pkg/runtime" "github.com/argoproj/argo-cd/v2/test" @@ -85,7 +78,7 @@ func TestSetAppInstanceAnnotation(t *testing.T) { resourceTracking := NewResourceTracking() - err = resourceTracking.SetAppInstance(&obj, common.LabelKeyAppInstance, "my-app", TrackingMethodAnnotation) + err = resourceTracking.SetAppInstance(&obj, common.LabelKeyAppInstance, "my-app", "", TrackingMethodAnnotation) assert.Nil(t, err) app := resourceTracking.GetAppName(&obj, common.LabelKeyAppInstance, TrackingMethodAnnotation) @@ -127,6 +120,8 @@ func TestParseAppInstanceValueWrongFormat2(t *testing.T) { resourceTracking := NewResourceTracking() _, err := resourceTracking.ParseAppInstanceValue("app;group/kind/ns") assert.Error(t, err, WrongResourceTrackingFormat) +} + func TestGetTrackingMethodFromApplicationInformer(t *testing.T) { app := createTestApp(fakeApp) var objects []runtime.Object