From 0e8ef6345b8669bfeecf20cc12916bd0b20c3dca Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 12 Jul 2024 14:21:04 +0000
Subject: [PATCH 1/3] chore(deps): bump
github.com/nats-io/nats-streaming-server from 0.24.3 to 0.24.6 (#3202)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
go.mod | 2 +-
go.sum | 18 ++++++++++--------
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/go.mod b/go.mod
index f44c039ef8..5476f5f33e 100644
--- a/go.mod
+++ b/go.mod
@@ -241,7 +241,7 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/nats-io/nats-server/v2 v2.9.23 // indirect
- github.com/nats-io/nats-streaming-server v0.24.3 // indirect
+ github.com/nats-io/nats-streaming-server v0.24.6 // indirect
github.com/nats-io/nkeys v0.4.7 // indirect
github.com/nats-io/nuid v1.0.1 // indirect
github.com/nicksnyder/go-i18n v1.10.1-0.20190510212457-b280125b035a // indirect
diff --git a/go.sum b/go.sum
index 778b084c62..25f0f999ee 100644
--- a/go.sum
+++ b/go.sum
@@ -495,8 +495,8 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hashicorp/raft v1.3.6 h1:v5xW5KzByoerQlN/o31VJrFNiozgzGyDoMgDJgXpsto=
-github.com/hashicorp/raft v1.3.6/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM=
+github.com/hashicorp/raft v1.3.9 h1:9yuo1aR0bFTr1cw7pj3S2Bk6MhJCsnr2NAxvIBrP2x4=
+github.com/hashicorp/raft v1.3.9/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM=
github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f h1:7LYC+Yfkj3CTRcShK0KOL/w6iTiKyqqBA9a41Wnggw8=
github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f/go.mod h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI=
github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
@@ -672,17 +672,19 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+
github.com/nats-io/graft v0.0.0-20220215174245-93d18541496f h1:UE9EK14XcoK/PmGqPtVWlrdMoPzBwJyzTCWEJ+cW7DI=
github.com/nats-io/graft v0.0.0-20220215174245-93d18541496f/go.mod h1:FDlTkeZBkKG5O+8RL3R0Q3gyhhHwG5sxcXcV7Lnx9x4=
github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k=
+github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k=
github.com/nats-io/jwt/v2 v2.5.0 h1:WQQ40AAlqqfx+f6ku+i0pOVm+ASirD4fUh+oQsiE9Ak=
github.com/nats-io/jwt/v2 v2.5.0/go.mod h1:24BeQtRwxRV8ruvC4CojXlx/WQ/VjuwlYiH+vu/+ibI=
github.com/nats-io/nats-server/v2 v2.7.2/go.mod h1:tckmrt0M6bVaDT3kmh9UrIq/CBOBBse+TpXQi5ldaa8=
-github.com/nats-io/nats-server/v2 v2.7.4/go.mod h1:1vZ2Nijh8tcyNe8BDVyTviCd9NYzRbubQYiEHsvOQWc=
+github.com/nats-io/nats-server/v2 v2.8.2/go.mod h1:vIdpKz3OG+DCg4q/xVPdXHoztEyKDWRtykQ4N7hd7C4=
github.com/nats-io/nats-server/v2 v2.9.23 h1:6Wj6H6QpP9FMlpCyWUaNu2yeZ/qGj+mdRkZ1wbikExU=
github.com/nats-io/nats-server/v2 v2.9.23/go.mod h1:wEjrEy9vnqIGE4Pqz4/c75v9Pmaq7My2IgFmnykc4C0=
-github.com/nats-io/nats-streaming-server v0.24.3 h1:uZez8jBkXscua++jaDsK7DhpSAkizdetar6yWbPMRco=
-github.com/nats-io/nats-streaming-server v0.24.3/go.mod h1:rqWfyCbxlhKj//fAp8POdQzeADwqkVhZcoWlbhkuU5w=
+github.com/nats-io/nats-streaming-server v0.24.6 h1:iIZXuPSznnYkiy0P3L0AP9zEN9Etp+tITbbX1KKeq4Q=
+github.com/nats-io/nats-streaming-server v0.24.6/go.mod h1:tdKXltY3XLeBJ21sHiZiaPl+j8sK3vcCKBWVyxeQs10=
github.com/nats-io/nats.go v1.13.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
github.com/nats-io/nats.go v1.13.1-0.20220121202836-972a071d373d/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
-github.com/nats-io/nats.go v1.13.1-0.20220308171302-2f2f6968e98d/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
+github.com/nats-io/nats.go v1.14.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
+github.com/nats-io/nats.go v1.15.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
github.com/nats-io/nats.go v1.22.1/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA=
github.com/nats-io/nats.go v1.36.0 h1:suEUPuWzTSse/XhESwqLxXGuj8vGRuPRoG7MoRN/qyU=
github.com/nats-io/nats.go v1.36.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
@@ -970,7 +972,7 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.0.0-20220307211146-efcb8507fb70/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
@@ -1099,8 +1101,8 @@ golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220406155245-289d7a0edf71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
From a6b45f1947e3c56607d3fadecb5ec92351fbc483 Mon Sep 17 00:00:00 2001
From: Taleb Zeghmi <4167032+talebzeghmi@users.noreply.github.com>
Date: Fri, 12 Jul 2024 10:20:39 -0700
Subject: [PATCH 2/3] feat: Jestream configurable DiscardNew policies (#3151)
Signed-off-by: Taleb Zeghmi
---
api/event-bus.html | 3 +-
api/event-bus.md | 4 ++-
api/jsonschema/schema.json | 2 +-
api/openapi-spec/swagger.json | 2 +-
eventbus/jetstream/base/jetstream.go | 33 +++++++++++++++++--
.../controller-manager/controller-config.yaml | 4 +++
manifests/install.yaml | 4 +++
manifests/namespace-install.yaml | 4 +++
pkg/apis/eventbus/v1alpha1/generated.proto | 3 +-
.../eventbus/v1alpha1/jetstream_eventbus.go | 3 +-
.../eventbus/v1alpha1/openapi_generated.go | 2 +-
11 files changed, 55 insertions(+), 9 deletions(-)
diff --git a/api/event-bus.html b/api/event-bus.html
index 66314c4a09..9264897c65 100644
--- a/api/event-bus.html
+++ b/api/event-bus.html
@@ -630,7 +630,8 @@ JetStreamBus
(Optional)
Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config.
-It accepts a YAML format configuration, available fields include, “maxBytes”, “maxMsgs”, “maxAge” (e.g. 72h), “replicas” (1, 3, 5), “duplicates” (e.g. 5m).
+It accepts a YAML format configuration, available fields include, “maxBytes”, “maxMsgs”, “maxAge” (e.g. 72h), “replicas” (1, 3, 5), “duplicates” (e.g. 5m),
+“retention” (e.g. 0: Limits (default), 1: Interest, 2: WorkQueue), “Discard” (e.g. 0: DiscardOld (default), 1: DiscardNew).
|
diff --git a/api/event-bus.md b/api/event-bus.md
index 1af65d8e46..00f622a537 100644
--- a/api/event-bus.md
+++ b/api/event-bus.md
@@ -622,7 +622,9 @@ Optional configuration for the streams to be created in this JetStream
service, if specified, it will be merged with the default configuration
in controller-config. It accepts a YAML format configuration, available
fields include, “maxBytes”, “maxMsgs”, “maxAge” (e.g. 72h), “replicas”
-(1, 3, 5), “duplicates” (e.g. 5m).
+(1, 3, 5), “duplicates” (e.g. 5m), “retention” (e.g. 0: Limits
+(default), 1: Interest, 2: WorkQueue), “Discard” (e.g. 0: DiscardOld
+(default), 1: DiscardNew).
diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json
index 42abf12d38..3e8ac84b1e 100644
--- a/api/jsonschema/schema.json
+++ b/api/jsonschema/schema.json
@@ -497,7 +497,7 @@
"type": "array"
},
"streamConfig": {
- "description": "Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxBytes\", \"maxMsgs\", \"maxAge\" (e.g. 72h), \"replicas\" (1, 3, 5), \"duplicates\" (e.g. 5m).",
+ "description": "Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxBytes\", \"maxMsgs\", \"maxAge\" (e.g. 72h), \"replicas\" (1, 3, 5), \"duplicates\" (e.g. 5m), \"retention\" (e.g. 0: Limits (default), 1: Interest, 2: WorkQueue), \"Discard\" (e.g. 0: DiscardOld (default), 1: DiscardNew).",
"type": "string"
},
"tolerations": {
diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index ad0db5b788..e3e4fae04e 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -490,7 +490,7 @@
}
},
"streamConfig": {
- "description": "Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxBytes\", \"maxMsgs\", \"maxAge\" (e.g. 72h), \"replicas\" (1, 3, 5), \"duplicates\" (e.g. 5m).",
+ "description": "Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxBytes\", \"maxMsgs\", \"maxAge\" (e.g. 72h), \"replicas\" (1, 3, 5), \"duplicates\" (e.g. 5m), \"retention\" (e.g. 0: Limits (default), 1: Interest, 2: WorkQueue), \"Discard\" (e.g. 0: DiscardOld (default), 1: DiscardNew).",
"type": "string"
},
"tolerations": {
diff --git a/eventbus/jetstream/base/jetstream.go b/eventbus/jetstream/base/jetstream.go
index 3087830fe1..6cd34cd169 100644
--- a/eventbus/jetstream/base/jetstream.go
+++ b/eventbus/jetstream/base/jetstream.go
@@ -127,11 +127,25 @@ func (stream *Jetstream) CreateStream(conn *JetstreamConnection) error {
return err
}
+ v.SetDefault("retention", 0) // Limits
+ v.SetDefault("discard", 0) // DiscardOld
+
+ retentionPolicy, err := intToRetentionPolicy(v.GetInt("retention"))
+ if err != nil {
+ stream.Logger.Errorf("invalid retention policy: %s, error: %v", retentionPolicy, err)
+ return err
+ }
+
+ discardPolicy, err := intToDiscardPolicy(v.GetInt("discard"))
+ if err != nil {
+ stream.Logger.Errorf("invalid discard policy: %s, error: %v", discardPolicy, err)
+ return err
+ }
streamConfig := nats.StreamConfig{
Name: common.JetStreamStreamName,
Subjects: []string{common.JetStreamStreamName + ".*.*"},
- Retention: nats.LimitsPolicy,
- Discard: nats.DiscardOld,
+ Retention: retentionPolicy,
+ Discard: discardPolicy,
MaxMsgs: v.GetInt64("maxMsgs"),
MaxAge: v.GetDuration("maxAge"),
MaxBytes: v.GetInt64("maxBytes"),
@@ -158,3 +172,18 @@ func (stream *Jetstream) CreateStream(conn *JetstreamConnection) error {
stream.Logger.Infof("Created Jetstream stream '%s' for connection %+v", common.JetStreamStreamName, conn)
return nil
}
+
+func intToRetentionPolicy(i int) (nats.RetentionPolicy, error) {
+ if i < 0 || i > int(nats.WorkQueuePolicy) {
+ // Handle invalid value, return a default value or panic
+ return -1, fmt.Errorf("invalid int for RetentionPolicy: %d", i)
+ }
+ return nats.RetentionPolicy(i), nil
+}
+
+func intToDiscardPolicy(i int) (nats.DiscardPolicy, error) {
+ if i < 0 || i > int(nats.DiscardNew) {
+ return -1, fmt.Errorf("invalid int for DiscardPolicy: %d", i)
+ }
+ return nats.DiscardPolicy(i), nil
+}
diff --git a/manifests/base/controller-manager/controller-config.yaml b/manifests/base/controller-manager/controller-config.yaml
index 119648be15..f7663eab70 100644
--- a/manifests/base/controller-manager/controller-config.yaml
+++ b/manifests/base/controller-manager/controller-config.yaml
@@ -26,6 +26,10 @@ data:
maxBytes: -1
replicas: 3
duplicates: 300s
+ # 0: Limits, 1: Interest, 2: WorkQueue
+ retention: 0
+ # 0: DiscardOld, 1: DiscardNew
+ discard: 0
versions:
- version: latest
natsImage: nats:2.10.10
diff --git a/manifests/install.yaml b/manifests/install.yaml
index ad68a6ccf5..09499a1984 100644
--- a/manifests/install.yaml
+++ b/manifests/install.yaml
@@ -330,6 +330,10 @@ data:
maxBytes: -1
replicas: 3
duplicates: 300s
+ # 0: Limits, 1: Interest, 2: WorkQueue
+ retention: 0
+ # 0: DiscardOld, 1: DiscardNew
+ discard: 0
versions:
- version: latest
natsImage: nats:2.10.10
diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml
index 5c28b136a1..1649db8844 100644
--- a/manifests/namespace-install.yaml
+++ b/manifests/namespace-install.yaml
@@ -250,6 +250,10 @@ data:
maxBytes: -1
replicas: 3
duplicates: 300s
+ # 0: Limits, 1: Interest, 2: WorkQueue
+ retention: 0
+ # 0: DiscardOld, 1: DiscardNew
+ discard: 0
versions:
- version: latest
natsImage: nats:2.10.10
diff --git a/pkg/apis/eventbus/v1alpha1/generated.proto b/pkg/apis/eventbus/v1alpha1/generated.proto
index d05cb3d67a..d786f3f951 100644
--- a/pkg/apis/eventbus/v1alpha1/generated.proto
+++ b/pkg/apis/eventbus/v1alpha1/generated.proto
@@ -191,7 +191,8 @@ message JetStreamBus {
repeated string startArgs = 17;
// Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config.
- // It accepts a YAML format configuration, available fields include, "maxBytes", "maxMsgs", "maxAge" (e.g. 72h), "replicas" (1, 3, 5), "duplicates" (e.g. 5m).
+ // It accepts a YAML format configuration, available fields include, "maxBytes", "maxMsgs", "maxAge" (e.g. 72h), "replicas" (1, 3, 5), "duplicates" (e.g. 5m),
+ // "retention" (e.g. 0: Limits (default), 1: Interest, 2: WorkQueue), "Discard" (e.g. 0: DiscardOld (default), 1: DiscardNew).
// +optional
optional string streamConfig = 18;
diff --git a/pkg/apis/eventbus/v1alpha1/jetstream_eventbus.go b/pkg/apis/eventbus/v1alpha1/jetstream_eventbus.go
index 97cad48fe2..ddb261bb17 100644
--- a/pkg/apis/eventbus/v1alpha1/jetstream_eventbus.go
+++ b/pkg/apis/eventbus/v1alpha1/jetstream_eventbus.go
@@ -79,7 +79,8 @@ type JetStreamBus struct {
// +optional
StartArgs []string `json:"startArgs,omitempty" protobuf:"bytes,17,rep,name=startArgs"`
// Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config.
- // It accepts a YAML format configuration, available fields include, "maxBytes", "maxMsgs", "maxAge" (e.g. 72h), "replicas" (1, 3, 5), "duplicates" (e.g. 5m).
+ // It accepts a YAML format configuration, available fields include, "maxBytes", "maxMsgs", "maxAge" (e.g. 72h), "replicas" (1, 3, 5), "duplicates" (e.g. 5m),
+ // "retention" (e.g. 0: Limits (default), 1: Interest, 2: WorkQueue), "Discard" (e.g. 0: DiscardOld (default), 1: DiscardNew).
// +optional
StreamConfig *string `json:"streamConfig,omitempty" protobuf:"bytes,18,opt,name=streamConfig"`
// Maximum number of bytes in a message payload, 0 means unlimited. Defaults to 1MB
diff --git a/pkg/apis/eventbus/v1alpha1/openapi_generated.go b/pkg/apis/eventbus/v1alpha1/openapi_generated.go
index e2427fb6d4..44465bc26c 100644
--- a/pkg/apis/eventbus/v1alpha1/openapi_generated.go
+++ b/pkg/apis/eventbus/v1alpha1/openapi_generated.go
@@ -443,7 +443,7 @@ func schema_pkg_apis_eventbus_v1alpha1_JetStreamBus(ref common.ReferenceCallback
},
"streamConfig": {
SchemaProps: spec.SchemaProps{
- Description: "Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxBytes\", \"maxMsgs\", \"maxAge\" (e.g. 72h), \"replicas\" (1, 3, 5), \"duplicates\" (e.g. 5m).",
+ Description: "Optional configuration for the streams to be created in this JetStream service, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxBytes\", \"maxMsgs\", \"maxAge\" (e.g. 72h), \"replicas\" (1, 3, 5), \"duplicates\" (e.g. 5m), \"retention\" (e.g. 0: Limits (default), 1: Interest, 2: WorkQueue), \"Discard\" (e.g. 0: DiscardOld (default), 1: DiscardNew).",
Type: []string{"string"},
Format: "",
},
From 2451789f0ac3516d1d666184ffc28dd5418b8717 Mon Sep 17 00:00:00 2001
From: Taleb Zeghmi <4167032+talebzeghmi@users.noreply.github.com>
Date: Fri, 12 Jul 2024 10:34:49 -0700
Subject: [PATCH 3/3] feat(EventSensor): Dead Letter Queue Trigger (#3199)
Signed-off-by: Taleb Zeghmi
---
.gitignore | 5 +-
api/jsonschema/schema.json | 4 +
api/openapi-spec/swagger.json | 4 +
api/sensor.html | 21 +-
api/sensor.md | 19 +-
controllers/sensor/validate.go | 43 +-
controllers/sensor/validate_test.go | 80 +++
.../more-about-sensors-and-triggers.md | 40 ++
pkg/apis/sensor/v1alpha1/generated.pb.go | 678 ++++++++++--------
pkg/apis/sensor/v1alpha1/generated.proto | 8 +
pkg/apis/sensor/v1alpha1/openapi_generated.go | 8 +-
pkg/apis/sensor/v1alpha1/types.go | 7 +
.../sensor/v1alpha1/zz_generated.deepcopy.go | 5 +
sensors/listener.go | 16 +
14 files changed, 614 insertions(+), 324 deletions(-)
diff --git a/.gitignore b/.gitignore
index 18545952b2..e5e95388d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,5 +15,6 @@ debug.test
site/
/go-diagrams/
argo-events
-.swo
-.swp
+# ignore temp vi files
+*.swo
+*.swp
diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json
index 3e8ac84b1e..e66bae75ec 100644
--- a/api/jsonschema/schema.json
+++ b/api/jsonschema/schema.json
@@ -4514,6 +4514,10 @@
"description": "AtLeastOnce determines the trigger execution semantics. Defaults to false. Trigger execution will use at-most-once semantics. If set to true, Trigger execution will switch to at-least-once semantics.",
"type": "boolean"
},
+ "dlqTrigger": {
+ "$ref": "#/definitions/io.argoproj.sensor.v1alpha1.Trigger",
+ "description": "If the trigger fails, it will retry up to the configured number of retries. If the maximum retries are reached and the trigger is set to execute atLeastOnce, the dead letter queue (DLQ) trigger will be invoked if specified. Invoking the dead letter queue trigger helps prevent data loss."
+ },
"parameters": {
"description": "Parameters is the list of parameters applied to the trigger template definition",
"items": {
diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index e3e4fae04e..11fb93c340 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -4489,6 +4489,10 @@
"description": "AtLeastOnce determines the trigger execution semantics. Defaults to false. Trigger execution will use at-most-once semantics. If set to true, Trigger execution will switch to at-least-once semantics.",
"type": "boolean"
},
+ "dlqTrigger": {
+ "description": "If the trigger fails, it will retry up to the configured number of retries. If the maximum retries are reached and the trigger is set to execute atLeastOnce, the dead letter queue (DLQ) trigger will be invoked if specified. Invoking the dead letter queue trigger helps prevent data loss.",
+ "$ref": "#/definitions/io.argoproj.sensor.v1alpha1.Trigger"
+ },
"parameters": {
"description": "Parameters is the list of parameters applied to the trigger template definition",
"type": "array",
diff --git a/api/sensor.html b/api/sensor.html
index 0b152aee7b..2462c3d1fa 100644
--- a/api/sensor.html
+++ b/api/sensor.html
@@ -3360,7 +3360,8 @@ Trigger
(Appears on:
-SensorSpec)
+SensorSpec,
+Trigger)
Trigger is an action taken, output produced, an event created, a message sent
@@ -3453,6 +3454,24 @@ Trigger
If set to true, Trigger execution will switch to at-least-once semantics.
+
+
+dlqTrigger
+
+
+Trigger
+
+
+ |
+
+(Optional)
+ If the trigger fails, it will retry up to the configured number of
+retries. If the maximum retries are reached and the trigger is set to
+execute atLeastOnce, the dead letter queue (DLQ) trigger will be invoked if
+specified. Invoking the dead letter queue trigger helps prevent data
+loss.
+ |
+
TriggerParameter
diff --git a/api/sensor.md b/api/sensor.md
index 7794974fa5..ed6570cf98 100644
--- a/api/sensor.md
+++ b/api/sensor.md
@@ -3488,7 +3488,8 @@ Trigger
(Appears on:
-SensorSpec)
+SensorSpec,
+Trigger)
@@ -3582,6 +3583,22 @@ true, Trigger execution will switch to at-least-once semantics.
+
+
+dlqTrigger
+ Trigger
+ |
+
+(Optional)
+
+If the trigger fails, it will retry up to the configured number of
+retries. If the maximum retries are reached and the trigger is set to
+execute atLeastOnce, the dead letter queue (DLQ) trigger will be invoked
+if specified. Invoking the dead letter queue trigger helps prevent data
+loss.
+
+ |
+
diff --git a/controllers/sensor/validate.go b/controllers/sensor/validate.go
index e480e2bcb2..0f46fc126b 100644
--- a/controllers/sensor/validate.go
+++ b/controllers/sensor/validate.go
@@ -64,23 +64,52 @@ func validateTriggers(triggers []v1alpha1.Trigger) error {
trigNames := make(map[string]bool)
for _, trigger := range triggers {
- if err := validateTriggerTemplate(trigger.Template); err != nil {
+ if err := validateTrigger(trigger); err != nil {
return err
}
if _, ok := trigNames[trigger.Template.Name]; ok {
return fmt.Errorf("duplicate trigger name: %s", trigger.Template.Name)
}
trigNames[trigger.Template.Name] = true
- if err := validateTriggerPolicy(&trigger); err != nil {
- return err
- }
- if err := validateTriggerTemplateParameters(&trigger); err != nil {
- return err
- }
}
return nil
}
+func validateTrigger(trigger v1alpha1.Trigger) error {
+ if err := validateTriggerTemplate(trigger.Template); err != nil {
+ return err
+ }
+ if err := validateTriggerPolicy(&trigger); err != nil {
+ return err
+ }
+ if err := validateTriggerTemplateParameters(&trigger); err != nil {
+ return err
+ }
+ if err := validateDlqTrigger(&trigger); err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// validateDlqTrigger validates trigger.atLeastOnce==true and the trigger.dlqTrigger
+func validateDlqTrigger(trigger *v1alpha1.Trigger) error {
+ if trigger == nil {
+ return fmt.Errorf("trigger can't be nil")
+ }
+ if trigger.DlqTrigger == nil {
+ return nil
+ }
+ if !trigger.AtLeastOnce {
+ return fmt.Errorf("to use dlqTrigger, trigger.atLeastOnce must be set to true")
+ }
+ if !trigger.DlqTrigger.AtLeastOnce {
+ return fmt.Errorf("atLeastOnce must be set to true within the dlqTrigger")
+ }
+
+ return validateTrigger(*trigger.DlqTrigger)
+}
+
// validateTriggerTemplate validates trigger template
func validateTriggerTemplate(template *v1alpha1.TriggerTemplate) error {
if template == nil {
diff --git a/controllers/sensor/validate_test.go b/controllers/sensor/validate_test.go
index ec3e4027a1..6d83d696c3 100644
--- a/controllers/sensor/validate_test.go
+++ b/controllers/sensor/validate_test.go
@@ -483,6 +483,86 @@ func TestValidTriggers(t *testing.T) {
assert.Equal(t, true, strings.Contains(err.Error(), "trigger template can't be nil"))
})
+ t.Run("vanilla dlqTrigger", func(t *testing.T) {
+ triggers := []v1alpha1.Trigger{
+ {
+ Template: &v1alpha1.TriggerTemplate{
+ Name: "fake-trigger",
+ K8s: &v1alpha1.StandardK8STrigger{
+ Operation: "create",
+ Source: &v1alpha1.ArtifactLocation{},
+ },
+ },
+ AtLeastOnce: true,
+ DlqTrigger: &v1alpha1.Trigger{
+ AtLeastOnce: true,
+ Template: &v1alpha1.TriggerTemplate{
+ Name: "dlq-fake-trigger",
+ K8s: &v1alpha1.StandardK8STrigger{
+ Operation: "create",
+ Source: &v1alpha1.ArtifactLocation{},
+ },
+ },
+ },
+ },
+ }
+ err := validateTriggers(triggers)
+ assert.Nil(t, err)
+ })
+
+ t.Run("!dlqTrigger.atLeastOnce", func(t *testing.T) {
+ triggers := []v1alpha1.Trigger{
+ {
+ Template: &v1alpha1.TriggerTemplate{
+ Name: "fake-trigger",
+ K8s: &v1alpha1.StandardK8STrigger{
+ Operation: "create",
+ Source: &v1alpha1.ArtifactLocation{},
+ },
+ },
+ AtLeastOnce: true,
+ DlqTrigger: &v1alpha1.Trigger{
+ Template: &v1alpha1.TriggerTemplate{
+ Name: "dlq-fake-trigger",
+ K8s: &v1alpha1.StandardK8STrigger{
+ Operation: "create",
+ Source: &v1alpha1.ArtifactLocation{},
+ },
+ },
+ },
+ },
+ }
+ err := validateTriggers(triggers)
+ assert.NotNil(t, err)
+ assert.Equal(t, true, strings.Contains(err.Error(), "atLeastOnce must be set to true within the dlqTrigger"))
+ })
+
+ t.Run("dlqTrigger !.atLeastOnce", func(t *testing.T) {
+ triggers := []v1alpha1.Trigger{
+ {
+ Template: &v1alpha1.TriggerTemplate{
+ Name: "fake-trigger",
+ K8s: &v1alpha1.StandardK8STrigger{
+ Operation: "create",
+ Source: &v1alpha1.ArtifactLocation{},
+ },
+ },
+ DlqTrigger: &v1alpha1.Trigger{
+ Template: &v1alpha1.TriggerTemplate{
+ Name: "dlq-fake-trigger",
+ K8s: &v1alpha1.StandardK8STrigger{
+ Operation: "create",
+ Source: &v1alpha1.ArtifactLocation{},
+ },
+ },
+ },
+ },
+ }
+ err := validateTriggers(triggers)
+ assert.NotNil(t, err)
+ assert.Equal(t, true, strings.Contains(err.Error(), "to use dlqTrigger, trigger.atLeastOnce must be set to true"))
+ })
+
t.Run("invalid conditions reset - cron", func(t *testing.T) {
triggers := []v1alpha1.Trigger{
{
diff --git a/docs/sensors/more-about-sensors-and-triggers.md b/docs/sensors/more-about-sensors-and-triggers.md
index 9e25098f1b..f97a98f821 100644
--- a/docs/sensors/more-about-sensors-and-triggers.md
+++ b/docs/sensors/more-about-sensors-and-triggers.md
@@ -134,3 +134,43 @@ spec:
# Optional
revisionHistoryLimit: 3
```
+
+## Dead Letter Queue Trigger
+
+To help avoid data loss and dropping a message on failure after all the retries are
+exhausted, optionally, a `dlqTrigger` may be configured as following to invoke
+any of the [10+ triggers](https://argoproj.github.io/argo-events/concepts/trigger/):
+
+```yaml
+spec:
+ triggers:
+ - template:
+ name: http-trigger
+ http:
+ url: https://xxxxx.com/
+ method: GET
+ # must be true for dlqTrigger
+ atLeastOnce: true
+ retryStrategy:
+ steps: 3
+ dlqTrigger:
+ template:
+ name: dlq-http-trigger
+ http:
+ url: https://xxxxx.com/
+ method: PUT
+ # must be true for dlqTrigger
+ atLeastOnce: true
+ # retries the dlqTrigger 5 times
+ retryStrategy:
+ steps: 5
+```
+
+If the trigger fails, it will retry up to the configured number of retries based
+on `retryStrategy`. If the maximum retries are reached and the trigger, the
+`dlqTrigger` will be invoked if specified. In order to use the `dlqTrigger`,
+the `atLeastOnce` must be set to true within the trigger and the `dlqTrigger` for
+the Sensor to know about the failure and invoke the `dlqTrigger`.
+
+**note:** `dlqTrigger` is only available for the top level trigger and not
+*recursively within the `dlqTrigger` template.
diff --git a/pkg/apis/sensor/v1alpha1/generated.pb.go b/pkg/apis/sensor/v1alpha1/generated.pb.go
index fb0bb83efe..cf1019c04e 100644
--- a/pkg/apis/sensor/v1alpha1/generated.pb.go
+++ b/pkg/apis/sensor/v1alpha1/generated.pb.go
@@ -1396,318 +1396,319 @@ func init() {
}
var fileDescriptor_6c4bded897df1f16 = []byte{
- // 4961 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3c, 0x4d, 0x8f, 0x63, 0xc7,
- 0x71, 0x4b, 0x0e, 0x39, 0x43, 0xd6, 0x70, 0x3e, 0xb6, 0x57, 0xbb, 0xa6, 0xc6, 0xd6, 0x72, 0x43,
- 0x23, 0xca, 0xda, 0x90, 0x39, 0xd2, 0x2a, 0x8e, 0xc7, 0x0a, 0x6c, 0x8b, 0xf3, 0xa5, 0xfd, 0xe0,
- 0xee, 0x8c, 0x8a, 0x1c, 0x09, 0xf9, 0x70, 0xa4, 0x37, 0x8f, 0x4d, 0xf2, 0x69, 0x1e, 0xdf, 0xe3,
- 0x76, 0x37, 0x67, 0x45, 0x01, 0x4e, 0xec, 0x18, 0x49, 0x60, 0x04, 0x90, 0x73, 0xf0, 0x21, 0x27,
- 0x23, 0x40, 0x90, 0x43, 0x80, 0x1c, 0x02, 0xe4, 0x1f, 0x38, 0x40, 0xa0, 0xa3, 0x73, 0xf3, 0x21,
- 0x18, 0x44, 0xe3, 0x5c, 0x72, 0x30, 0x12, 0x9f, 0x12, 0xec, 0x25, 0x41, 0x7f, 0xbc, 0x4f, 0x72,
- 0xb4, 0xc3, 0xe5, 0x6a, 0x64, 0xc0, 0x37, 0xbe, 0xaa, 0xea, 0xaa, 0xee, 0x7a, 0xd5, 0xd5, 0x55,
- 0xd5, 0xf5, 0x08, 0xb7, 0xbb, 0x8e, 0xe8, 0x0d, 0x0f, 0x6b, 0xb6, 0xdf, 0x5f, 0xb7, 0x58, 0xd7,
- 0x1f, 0x30, 0xff, 0x3d, 0xf5, 0xe3, 0x2b, 0xf4, 0x98, 0x7a, 0x82, 0xaf, 0x0f, 0x8e, 0xba, 0xeb,
- 0xd6, 0xc0, 0xe1, 0xeb, 0x9c, 0x7a, 0xdc, 0x67, 0xeb, 0xc7, 0xaf, 0x58, 0xee, 0xa0, 0x67, 0xbd,
- 0xb2, 0xde, 0xa5, 0x1e, 0x65, 0x96, 0xa0, 0xed, 0xda, 0x80, 0xf9, 0xc2, 0x27, 0x1b, 0x11, 0xa7,
- 0x5a, 0xc0, 0x49, 0xfd, 0x78, 0x47, 0x73, 0xaa, 0x0d, 0x8e, 0xba, 0x35, 0xc9, 0xa9, 0xa6, 0x39,
- 0xd5, 0x02, 0x4e, 0x6b, 0xdf, 0x3a, 0xf7, 0x1c, 0x6c, 0xbf, 0xdf, 0xf7, 0xbd, 0xb4, 0xe8, 0xb5,
- 0xaf, 0xc4, 0x18, 0x74, 0xfd, 0xae, 0xbf, 0xae, 0xc0, 0x87, 0xc3, 0x8e, 0x7a, 0x52, 0x0f, 0xea,
- 0x97, 0x21, 0xaf, 0x1e, 0x6d, 0xf0, 0x9a, 0xe3, 0x4b, 0x96, 0xeb, 0xb6, 0xcf, 0xe8, 0xfa, 0xf1,
- 0xd8, 0x6a, 0xd6, 0x7e, 0x3b, 0xa2, 0xe9, 0x5b, 0x76, 0xcf, 0xf1, 0x28, 0x1b, 0x45, 0xf3, 0xe8,
- 0x53, 0x61, 0x4d, 0x1a, 0xb5, 0x7e, 0xd6, 0x28, 0x36, 0xf4, 0x84, 0xd3, 0xa7, 0x63, 0x03, 0x7e,
- 0xe7, 0x49, 0x03, 0xb8, 0xdd, 0xa3, 0x7d, 0x2b, 0x3d, 0xae, 0xfa, 0x38, 0x07, 0xab, 0xf5, 0xb7,
- 0x9b, 0x0d, 0xab, 0x7f, 0xd8, 0xb6, 0x5a, 0xcc, 0xe9, 0x76, 0x29, 0x23, 0x1b, 0x50, 0xea, 0x0c,
- 0x3d, 0x5b, 0x38, 0xbe, 0xf7, 0xc0, 0xea, 0xd3, 0x72, 0xe6, 0x46, 0xe6, 0x66, 0x71, 0xf3, 0xb9,
- 0x8f, 0x4e, 0x2a, 0x97, 0x4e, 0x4f, 0x2a, 0xa5, 0xdd, 0x18, 0x0e, 0x13, 0x94, 0x04, 0xa1, 0x68,
- 0xd9, 0x36, 0xe5, 0xfc, 0x1e, 0x1d, 0x95, 0xb3, 0x37, 0x32, 0x37, 0x17, 0x6f, 0xfd, 0x66, 0x4d,
- 0x4f, 0x4d, 0xbe, 0xb2, 0x9a, 0xd4, 0x52, 0xed, 0xf8, 0x95, 0x5a, 0x93, 0xda, 0x8c, 0x8a, 0x7b,
- 0x74, 0xd4, 0xa4, 0x2e, 0xb5, 0x85, 0xcf, 0x36, 0x97, 0x4e, 0x4f, 0x2a, 0xc5, 0x7a, 0x30, 0x16,
- 0x23, 0x36, 0x92, 0x27, 0x0f, 0xc8, 0xcb, 0x73, 0x53, 0xf3, 0x0c, 0xc1, 0x18, 0xb1, 0x21, 0x2f,
- 0xc2, 0x3c, 0xa3, 0x5d, 0xc7, 0xf7, 0xca, 0x39, 0xb5, 0xb6, 0x65, 0xb3, 0xb6, 0x79, 0x54, 0x50,
- 0x34, 0x58, 0x32, 0x84, 0x85, 0x81, 0x35, 0x72, 0x7d, 0xab, 0x5d, 0xce, 0xdf, 0x98, 0xbb, 0xb9,
- 0x78, 0xeb, 0x6e, 0xed, 0x69, 0xad, 0xb3, 0x66, 0xb4, 0xbb, 0x6f, 0x31, 0xab, 0x4f, 0x05, 0x65,
- 0x9b, 0x2b, 0x46, 0xe8, 0xc2, 0xbe, 0x16, 0x81, 0x81, 0x2c, 0xf2, 0xc7, 0x00, 0x83, 0x80, 0x8c,
- 0x97, 0xe7, 0x9f, 0xb9, 0x64, 0x62, 0x24, 0x43, 0x08, 0xe2, 0x18, 0x93, 0x48, 0x5e, 0x83, 0x65,
- 0xc7, 0x3b, 0xf6, 0x6d, 0x4b, 0xbe, 0xd8, 0xd6, 0x68, 0x40, 0xcb, 0x0b, 0x4a, 0x4d, 0xe4, 0xf4,
- 0xa4, 0xb2, 0x7c, 0x27, 0x81, 0xc1, 0x14, 0x25, 0xf9, 0x12, 0x2c, 0x30, 0xdf, 0xa5, 0x75, 0x7c,
- 0x50, 0x2e, 0xa8, 0x41, 0xe1, 0x32, 0x51, 0x83, 0x31, 0xc0, 0x57, 0x7f, 0x91, 0x85, 0x2b, 0x75,
- 0xd6, 0xf5, 0xdf, 0xf6, 0xd9, 0x51, 0xc7, 0xf5, 0x1f, 0x05, 0xf6, 0xe7, 0xc1, 0x3c, 0xf7, 0x87,
- 0xcc, 0xd6, 0x96, 0x37, 0xd3, 0xd2, 0xeb, 0x4c, 0x38, 0x1d, 0xcb, 0x16, 0x0d, 0x33, 0xc5, 0x4d,
- 0x90, 0x6f, 0xb9, 0xa9, 0xb8, 0xa3, 0x91, 0x42, 0x6e, 0x43, 0xd1, 0x1f, 0xc8, 0x6d, 0x21, 0x0d,
- 0x22, 0xab, 0x26, 0xfd, 0x65, 0x33, 0xe9, 0xe2, 0x5e, 0x80, 0x78, 0x7c, 0x52, 0xb9, 0x1a, 0x9f,
- 0x6c, 0x88, 0xc0, 0x68, 0x70, 0xea, 0xc5, 0xcd, 0x5d, 0xf8, 0x8b, 0xfb, 0x02, 0xe4, 0x2c, 0xd6,
- 0xe5, 0xe5, 0xdc, 0x8d, 0xb9, 0x9b, 0xc5, 0xcd, 0xc2, 0xe9, 0x49, 0x25, 0x57, 0x67, 0x5d, 0x8e,
- 0x0a, 0x5a, 0xfd, 0xa5, 0xdc, 0xec, 0x29, 0x85, 0x90, 0x26, 0x64, 0xf9, 0xab, 0x46, 0xd1, 0xbf,
- 0x7b, 0xfe, 0xa9, 0x6a, 0x0f, 0x5a, 0x6b, 0xbe, 0x1a, 0x30, 0xdc, 0x9c, 0x3f, 0x3d, 0xa9, 0x64,
- 0x9b, 0xaf, 0x62, 0x96, 0xbf, 0x4a, 0xaa, 0x30, 0xef, 0x78, 0xae, 0xe3, 0x51, 0xa3, 0x4e, 0xa5,
- 0xf5, 0x3b, 0x0a, 0x82, 0x06, 0x43, 0xda, 0x90, 0xeb, 0x38, 0x2e, 0x35, 0x5b, 0x7a, 0xf7, 0xe9,
- 0xb5, 0xb4, 0xeb, 0xb8, 0x34, 0x9c, 0x85, 0x5a, 0xb3, 0x84, 0xa0, 0xe2, 0x4e, 0xde, 0x85, 0xb9,
- 0x21, 0x73, 0xd5, 0x36, 0x5f, 0xbc, 0xb5, 0xf3, 0xf4, 0x42, 0x0e, 0xb0, 0x11, 0xca, 0x58, 0x38,
- 0x3d, 0xa9, 0xcc, 0x1d, 0x60, 0x03, 0x25, 0x6b, 0x72, 0x00, 0x45, 0xdb, 0xf7, 0x3a, 0x4e, 0xb7,
- 0x6f, 0x0d, 0xca, 0x79, 0x25, 0xe7, 0xe6, 0x24, 0xff, 0xb4, 0xa5, 0x88, 0xee, 0x5b, 0x83, 0x31,
- 0x17, 0xb5, 0x15, 0x0c, 0xc7, 0x88, 0x93, 0x9c, 0x78, 0xd7, 0x11, 0xe5, 0xf9, 0x59, 0x27, 0xfe,
- 0x86, 0x23, 0x92, 0x13, 0x7f, 0xc3, 0x11, 0x28, 0x59, 0x13, 0x1b, 0x0a, 0x8c, 0x9a, 0x8d, 0xb6,
- 0xa0, 0xc4, 0x7c, 0x7d, 0xea, 0xf7, 0x8f, 0x86, 0xc1, 0x66, 0xe9, 0xf4, 0xa4, 0x52, 0x08, 0x9e,
- 0x30, 0x64, 0x5c, 0xfd, 0xa7, 0x1c, 0x5c, 0xad, 0x7f, 0x30, 0x64, 0x74, 0x47, 0x32, 0xb8, 0x3d,
- 0x3c, 0xe4, 0xc1, 0x2e, 0xbf, 0x01, 0xb9, 0xce, 0xc3, 0xb6, 0x67, 0x4e, 0x97, 0x92, 0xb1, 0xec,
- 0xdc, 0xee, 0x9b, 0xdb, 0x0f, 0x50, 0x61, 0xa4, 0x2b, 0xe9, 0x0d, 0x0f, 0xd5, 0x11, 0x94, 0x4d,
- 0xba, 0x92, 0xdb, 0x1a, 0x8c, 0x01, 0x9e, 0x0c, 0xe0, 0x0a, 0xef, 0x59, 0x8c, 0xb6, 0xc3, 0x23,
- 0x44, 0x0d, 0x9b, 0xea, 0xb8, 0xf8, 0xdc, 0xe9, 0x49, 0xe5, 0x4a, 0x73, 0x9c, 0x0b, 0x4e, 0x62,
- 0x4d, 0xda, 0xb0, 0x92, 0x02, 0x1b, 0x23, 0x3b, 0xa7, 0xb4, 0x2b, 0xa7, 0x27, 0x95, 0x95, 0x94,
- 0x34, 0x4c, 0xb3, 0xfc, 0x35, 0x3d, 0x80, 0xaa, 0xff, 0x93, 0x83, 0x6b, 0xca, 0x6a, 0x9a, 0x94,
- 0x1d, 0x3b, 0x36, 0xdd, 0x1c, 0x86, 0x66, 0xd3, 0x85, 0x55, 0xdb, 0xf7, 0x3c, 0xaa, 0x82, 0x8e,
- 0xa6, 0x60, 0x8e, 0xd7, 0x35, 0xde, 0xeb, 0x9c, 0x8a, 0x7f, 0xee, 0xf4, 0xa4, 0xb2, 0xba, 0x95,
- 0x62, 0x81, 0x63, 0x4c, 0xc9, 0x3a, 0x14, 0x1f, 0x0e, 0xe9, 0x90, 0xc6, 0xec, 0xef, 0x72, 0x70,
- 0x2a, 0xbc, 0x19, 0x20, 0x30, 0xa2, 0x91, 0x03, 0x84, 0x3f, 0x70, 0xec, 0xd0, 0xf2, 0x62, 0x03,
- 0x5a, 0x01, 0x02, 0x23, 0x1a, 0xb2, 0x0d, 0xab, 0x7c, 0x78, 0xc8, 0x6d, 0xe6, 0x0c, 0xc2, 0x58,
- 0x4b, 0xc7, 0x23, 0x65, 0x33, 0x6e, 0xb5, 0x99, 0xc2, 0xe3, 0xd8, 0x08, 0x72, 0x00, 0x73, 0xc2,
- 0xe5, 0xc6, 0xf3, 0xbc, 0x36, 0xf5, 0x0e, 0x6e, 0x35, 0x9a, 0xda, 0xff, 0x68, 0xef, 0xd0, 0x6a,
- 0x34, 0x51, 0xf2, 0x8b, 0x5b, 0xde, 0xfc, 0x67, 0x66, 0x79, 0x0b, 0x17, 0x6e, 0x79, 0x5d, 0xb8,
- 0xba, 0xe5, 0x7b, 0x6d, 0x47, 0xaa, 0x97, 0x23, 0xe5, 0x54, 0x6c, 0x8e, 0x5a, 0x4e, 0x9f, 0x4a,
- 0x77, 0x65, 0x33, 0x7f, 0xcc, 0x5d, 0x6d, 0x31, 0xdf, 0x43, 0x85, 0x21, 0x2f, 0x41, 0x41, 0x86,
- 0xda, 0x1f, 0xf8, 0xe1, 0xb1, 0xb7, 0x6a, 0xa8, 0x0a, 0x2d, 0x03, 0xc7, 0x90, 0xa2, 0xfa, 0x61,
- 0x06, 0x3e, 0x97, 0x92, 0xb4, 0xc5, 0x1c, 0x41, 0x99, 0x63, 0x11, 0x0e, 0xf3, 0x87, 0x4a, 0xaa,
- 0xb1, 0xec, 0xbd, 0xa7, 0x57, 0xc0, 0xc4, 0xc5, 0xe8, 0xf3, 0x58, 0xff, 0x46, 0x23, 0xaa, 0xfa,
- 0x8f, 0x79, 0x58, 0xda, 0x1a, 0x72, 0xe1, 0xf7, 0x83, 0xad, 0xb6, 0x2e, 0x23, 0x6f, 0x76, 0x4c,
- 0xd9, 0x01, 0x36, 0xcc, 0xba, 0x43, 0x83, 0x6e, 0x06, 0x08, 0x8c, 0x68, 0x64, 0x58, 0xcd, 0xa9,
- 0x3d, 0x64, 0x7a, 0xfd, 0x85, 0x28, 0xac, 0x6e, 0x2a, 0x28, 0x1a, 0x2c, 0x39, 0x00, 0xb0, 0x29,
- 0x13, 0x7a, 0x6f, 0x4e, 0xe7, 0xa4, 0x97, 0xe5, 0xbb, 0xdb, 0x0a, 0x07, 0x63, 0x8c, 0x11, 0xb9,
- 0x0b, 0x44, 0xcf, 0x45, 0xee, 0x8b, 0xbd, 0x63, 0xca, 0x98, 0xd3, 0x0e, 0x76, 0xd4, 0x9a, 0x99,
- 0x0a, 0x69, 0x8e, 0x51, 0xe0, 0x84, 0x51, 0x84, 0x43, 0x8e, 0x0f, 0xa8, 0x6d, 0xbc, 0xee, 0x9b,
- 0x33, 0xbc, 0x80, 0xb8, 0x4a, 0x6b, 0xcd, 0x01, 0xb5, 0x77, 0x3c, 0xc1, 0x46, 0x91, 0x05, 0x49,
- 0x10, 0x2a, 0x61, 0x9f, 0x79, 0xdc, 0x1f, 0xdb, 0xf3, 0x0b, 0x17, 0xb7, 0xe7, 0xd7, 0xbe, 0x06,
- 0xc5, 0x50, 0x2f, 0x64, 0x15, 0xe6, 0x8e, 0xe8, 0x48, 0x9b, 0x1b, 0xca, 0x9f, 0xe4, 0x39, 0xc8,
- 0x1f, 0x5b, 0xee, 0xd0, 0x6c, 0x2a, 0xd4, 0x0f, 0xaf, 0x65, 0x37, 0x32, 0xd5, 0x5f, 0x64, 0x00,
- 0xb6, 0x2d, 0x61, 0xed, 0x3a, 0xae, 0xd0, 0x11, 0xc5, 0xc0, 0x12, 0xbd, 0xf4, 0x16, 0xdd, 0xb7,
- 0x44, 0x0f, 0x15, 0x86, 0xbc, 0x04, 0x39, 0x21, 0xd3, 0x99, 0x6c, 0xc2, 0xcb, 0xe6, 0x64, 0xe2,
- 0xf2, 0xf8, 0xa4, 0x52, 0xb8, 0xdb, 0xdc, 0x7b, 0xa0, 0x92, 0x1a, 0x45, 0x45, 0x2a, 0x81, 0xe0,
- 0x39, 0x15, 0x4e, 0x17, 0x4f, 0x4f, 0x2a, 0xf9, 0xb7, 0x24, 0xc0, 0xcc, 0x81, 0xbc, 0x0e, 0x60,
- 0xfb, 0x7d, 0xa9, 0x40, 0xe1, 0x33, 0x63, 0x68, 0x37, 0x02, 0x1d, 0x6f, 0x85, 0x98, 0xc7, 0x89,
- 0x27, 0x8c, 0x8d, 0x51, 0x3e, 0x83, 0xf6, 0x07, 0xae, 0x25, 0xa8, 0xf2, 0xe0, 0x71, 0x9f, 0x61,
- 0xe0, 0x18, 0x52, 0x54, 0xff, 0x63, 0x0e, 0x4a, 0x3b, 0x7d, 0xcb, 0x71, 0x83, 0x1d, 0x9a, 0x34,
- 0x98, 0xcc, 0x85, 0x1b, 0xcc, 0x4b, 0x50, 0x18, 0x72, 0xca, 0xbc, 0xe8, 0x88, 0x0c, 0xa7, 0x7f,
- 0x60, 0xe0, 0x18, 0x52, 0x90, 0x3f, 0x80, 0x12, 0xef, 0x8b, 0xc1, 0xbe, 0xc5, 0xf9, 0x23, 0x9f,
- 0xb5, 0xa7, 0xdb, 0xf8, 0xab, 0xa7, 0x27, 0x95, 0x52, 0xf3, 0x7e, 0x6b, 0x3f, 0x18, 0x8e, 0x09,
- 0x66, 0xf2, 0xe5, 0xf7, 0x7c, 0x2e, 0xcc, 0x5b, 0x08, 0x5f, 0xfe, 0x6d, 0x9f, 0x0b, 0x54, 0x18,
- 0x65, 0x1e, 0x3e, 0x13, 0x4a, 0xcf, 0xf9, 0x98, 0x79, 0xf8, 0x4c, 0xa0, 0xc2, 0x90, 0x6b, 0x90,
- 0x15, 0xbe, 0xda, 0x77, 0x45, 0x9d, 0xce, 0xb4, 0x7c, 0xcc, 0x0a, 0x5f, 0x85, 0xaa, 0xcc, 0xef,
- 0x9b, 0x2c, 0x38, 0x0a, 0x55, 0x99, 0xdf, 0x47, 0x85, 0x91, 0xa1, 0x2a, 0x1f, 0x1e, 0xbe, 0x47,
- 0x6d, 0x91, 0xce, 0x7a, 0x9b, 0x1a, 0x8c, 0x01, 0x5e, 0x32, 0x3b, 0xf4, 0xdb, 0xa3, 0x72, 0x31,
- 0xc9, 0x6c, 0xd3, 0x6f, 0x8f, 0x50, 0x61, 0xaa, 0x3f, 0xce, 0x40, 0x5e, 0x85, 0xcb, 0xa4, 0x0f,
- 0x0b, 0xb6, 0xef, 0x09, 0xfa, 0xbe, 0x30, 0x27, 0xc1, 0x0c, 0x69, 0x92, 0xe2, 0xb8, 0xa5, 0xb9,
- 0x6d, 0x2e, 0xca, 0xa9, 0x99, 0x07, 0x0c, 0x64, 0xc8, 0xf4, 0xb1, 0x6d, 0x09, 0x4b, 0xbd, 0xca,
- 0x92, 0x4e, 0xa5, 0xe4, 0xf6, 0x42, 0x05, 0x7d, 0xad, 0xf0, 0xd7, 0x7f, 0x53, 0xb9, 0xf4, 0xdd,
- 0x7f, 0xbb, 0x71, 0xa9, 0xfa, 0xcb, 0x2c, 0x94, 0xe2, 0xec, 0xc8, 0x1a, 0x64, 0x9d, 0xb6, 0xd9,
- 0x77, 0x60, 0x56, 0x94, 0xbd, 0xb3, 0x8d, 0x59, 0xa7, 0xad, 0x0e, 0x05, 0x9d, 0x64, 0x64, 0x93,
- 0xb5, 0x96, 0x54, 0x16, 0xfe, 0x55, 0x58, 0x94, 0x4e, 0xf0, 0x98, 0x32, 0x2e, 0xf3, 0x70, 0x1d,
- 0x40, 0x5d, 0x31, 0xc4, 0x8b, 0xd2, 0x41, 0xbc, 0xa5, 0x51, 0x18, 0xa7, 0x93, 0xea, 0x54, 0x5b,
- 0x3a, 0xf5, 0xde, 0x63, 0xdb, 0xb8, 0x0e, 0x2b, 0x72, 0xfe, 0x6a, 0x91, 0x9e, 0x50, 0xc4, 0x7a,
- 0xab, 0x7d, 0xce, 0x10, 0xaf, 0xc8, 0x45, 0x6e, 0x69, 0xb4, 0x1a, 0x97, 0xa6, 0x8f, 0xbf, 0xde,
- 0xf9, 0x27, 0xbc, 0xde, 0x06, 0xe4, 0xe4, 0x19, 0x6f, 0x32, 0xaa, 0x2f, 0xc7, 0x8c, 0x3b, 0x2c,
- 0xcc, 0x45, 0xef, 0xa8, 0x4f, 0x85, 0x25, 0xcd, 0x5d, 0x1d, 0xca, 0xd1, 0xdc, 0xe5, 0xb1, 0xac,
- 0xb8, 0xc4, 0x74, 0xfe, 0x61, 0x0e, 0x56, 0x94, 0xce, 0xb7, 0xe9, 0x80, 0x7a, 0x6d, 0xea, 0xd9,
- 0x23, 0xb9, 0x76, 0x2f, 0x2a, 0xd0, 0x85, 0xe3, 0x55, 0xa0, 0xa8, 0x30, 0x72, 0xed, 0xca, 0x2e,
- 0xb4, 0xae, 0x63, 0xa1, 0x6c, 0xb8, 0xf6, 0x9d, 0x24, 0x1a, 0xd3, 0xf4, 0x32, 0x0a, 0x50, 0xa0,
- 0x49, 0x61, 0xed, 0x4e, 0x80, 0xc0, 0x88, 0x86, 0x1c, 0xc3, 0x42, 0x47, 0x39, 0x64, 0x6e, 0x32,
- 0xa2, 0xbd, 0x19, 0x8d, 0x36, 0x5a, 0xb1, 0x76, 0xf4, 0xda, 0x7a, 0xf5, 0x6f, 0x8e, 0x81, 0x30,
- 0xf2, 0xbd, 0x0c, 0x14, 0x05, 0xb3, 0x3c, 0xde, 0xf1, 0x59, 0xdf, 0xc4, 0xc3, 0xad, 0x67, 0x26,
- 0xba, 0x15, 0x70, 0xa6, 0x26, 0x6b, 0x0f, 0x01, 0x18, 0x49, 0x25, 0x0e, 0x5c, 0x33, 0xd3, 0x69,
- 0xf8, 0x5d, 0xc7, 0xb6, 0x5c, 0x5d, 0x26, 0xf2, 0x99, 0xb1, 0x9b, 0x57, 0x8c, 0xe6, 0xae, 0xed,
- 0x4e, 0xa4, 0x7a, 0x7c, 0x52, 0x59, 0x49, 0x81, 0xf0, 0x0c, 0x86, 0xd5, 0xbf, 0xcf, 0xc3, 0xd5,
- 0x89, 0xea, 0x21, 0x87, 0xc6, 0x04, 0xb5, 0xcb, 0xd8, 0x9e, 0xe1, 0x3c, 0x70, 0xfa, 0xd4, 0xa8,
- 0xbc, 0x90, 0x34, 0xcc, 0xb8, 0x67, 0xca, 0x5e, 0x80, 0x67, 0xea, 0x18, 0xcf, 0xa4, 0x4b, 0x6a,
- 0x33, 0x2c, 0x29, 0x0a, 0x17, 0xa2, 0xfd, 0x12, 0xf9, 0x38, 0xe2, 0x40, 0x9e, 0xbe, 0x3f, 0x60,
- 0xba, 0x82, 0x36, 0x93, 0xa0, 0x9d, 0xf7, 0x07, 0xcc, 0x08, 0x5a, 0x32, 0x82, 0xf2, 0x12, 0xc6,
- 0x51, 0x4b, 0x20, 0xef, 0xc2, 0x15, 0x29, 0x32, 0x6d, 0x27, 0xda, 0x35, 0xd5, 0xcc, 0x90, 0x2b,
- 0xdb, 0xe3, 0x24, 0x93, 0x8c, 0x64, 0x12, 0x2b, 0x29, 0x41, 0x8a, 0x9a, 0x6c, 0x89, 0xa1, 0x84,
- 0x9d, 0x71, 0x92, 0x89, 0x12, 0x26, 0xb0, 0x52, 0xbe, 0x5d, 0x25, 0xa3, 0xe6, 0x68, 0x8c, 0x7c,
- 0xbb, 0x82, 0xa2, 0xc1, 0x56, 0xdf, 0x85, 0xb5, 0xb3, 0xb7, 0x93, 0x3c, 0x3d, 0xde, 0x7b, 0x98,
- 0x3e, 0x3d, 0xee, 0xbe, 0x89, 0xd9, 0xf7, 0x1e, 0xc6, 0x24, 0x64, 0x3f, 0x51, 0xc2, 0x8f, 0x33,
- 0x00, 0x91, 0xca, 0xa5, 0x67, 0x94, 0xf3, 0x4d, 0x7b, 0x46, 0x49, 0x81, 0x0a, 0x43, 0x3c, 0x98,
- 0xef, 0x38, 0xd4, 0x6d, 0xf3, 0x72, 0x56, 0xbd, 0xea, 0x19, 0xec, 0xd7, 0x04, 0xb4, 0xbb, 0x92,
- 0x5d, 0x34, 0x41, 0xf5, 0xc8, 0xd1, 0x48, 0xa9, 0xbe, 0x0c, 0xa5, 0x78, 0xa1, 0xf2, 0xc9, 0xc1,
- 0x6a, 0xf5, 0xcf, 0xf3, 0xb0, 0x18, 0xab, 0xde, 0x91, 0x17, 0x74, 0x29, 0x53, 0x0f, 0x58, 0x34,
- 0x03, 0xa2, 0x3a, 0xe4, 0x37, 0x61, 0xd9, 0x76, 0x7d, 0x8f, 0x6e, 0x3b, 0x4c, 0x45, 0x4c, 0x23,
- 0xa3, 0xb1, 0x6b, 0x86, 0x72, 0x79, 0x2b, 0x81, 0xc5, 0x14, 0x35, 0xb1, 0x21, 0x6f, 0x33, 0xda,
- 0xe6, 0x26, 0x2c, 0xdb, 0x9c, 0xa9, 0xe4, 0xb8, 0x25, 0x39, 0xe9, 0x88, 0x59, 0xfd, 0x44, 0xcd,
- 0x5b, 0x85, 0x80, 0xbc, 0xa7, 0xe2, 0x3a, 0x95, 0xfb, 0xe5, 0xa6, 0x0f, 0x01, 0x9b, 0xb7, 0xc3,
- 0xe1, 0x98, 0x60, 0x26, 0xa3, 0xd1, 0x8e, 0xe3, 0x52, 0xa9, 0xc2, 0x74, 0x30, 0xbd, 0x6b, 0xe0,
- 0x18, 0x52, 0x48, 0xcb, 0x3a, 0x64, 0x96, 0x67, 0xf7, 0xcc, 0x86, 0x08, 0x5f, 0xdc, 0xa6, 0x82,
- 0xa2, 0xc1, 0x4a, 0xb5, 0x0b, 0xab, 0x6b, 0x0c, 0x3c, 0x54, 0x7b, 0xcb, 0xea, 0xa2, 0x84, 0x4b,
- 0x34, 0xa3, 0x1d, 0x13, 0xf5, 0x85, 0x68, 0xa4, 0x1d, 0x94, 0x70, 0xd2, 0x87, 0x79, 0x46, 0xfb,
- 0xbe, 0xa0, 0x2a, 0xde, 0x5b, 0xbc, 0x75, 0x67, 0x26, 0xb5, 0xa2, 0x62, 0x65, 0xea, 0x35, 0xa0,
- 0x2f, 0xac, 0x24, 0x04, 0x8d, 0x10, 0xd2, 0x84, 0xab, 0x8e, 0xa7, 0xb3, 0xec, 0x3b, 0x5d, 0xcf,
- 0x67, 0x54, 0xc6, 0xbf, 0xf7, 0xe8, 0xa8, 0x0c, 0x2a, 0x21, 0x7f, 0xc1, 0xcc, 0xef, 0xea, 0x9d,
- 0x49, 0x44, 0x38, 0x79, 0x6c, 0xf5, 0x1f, 0x32, 0x50, 0x08, 0xde, 0x29, 0xd9, 0x8b, 0x85, 0xfc,
- 0x53, 0xd5, 0xdd, 0x4a, 0x67, 0x64, 0x05, 0x7b, 0x50, 0x18, 0x04, 0x19, 0x41, 0x76, 0x6a, 0x86,
- 0x61, 0x36, 0x10, 0x32, 0xa9, 0xbe, 0x09, 0x2b, 0x29, 0x55, 0x9d, 0x23, 0x50, 0xfa, 0x02, 0xe4,
- 0x86, 0xcc, 0xd5, 0xce, 0xc0, 0xdc, 0x9c, 0x1c, 0x60, 0xa3, 0x89, 0x0a, 0x5a, 0xfd, 0xcf, 0x79,
- 0x58, 0xbc, 0xdd, 0x6a, 0xed, 0x07, 0x79, 0xd7, 0x13, 0xb6, 0x62, 0x2c, 0x8f, 0xce, 0x5e, 0x60,
- 0xed, 0xcc, 0x54, 0x02, 0xe7, 0x9e, 0x71, 0x25, 0xf0, 0x45, 0x98, 0xef, 0x53, 0xd1, 0xf3, 0xdb,
- 0xe9, 0xcb, 0xd2, 0xfb, 0x0a, 0x8a, 0x06, 0x9b, 0x4a, 0x46, 0xf3, 0x17, 0x9e, 0x8c, 0x7e, 0x09,
- 0x16, 0x64, 0x68, 0xe2, 0x0f, 0x75, 0x90, 0x3e, 0x17, 0x69, 0xaa, 0xa5, 0xc1, 0x18, 0xe0, 0x49,
- 0x17, 0x8a, 0x87, 0x16, 0x77, 0xec, 0xfa, 0x50, 0xf4, 0x4c, 0xa4, 0x3e, 0xbd, 0xbe, 0x36, 0x03,
- 0x0e, 0x3a, 0x1e, 0x0c, 0x1f, 0x31, 0xe2, 0x4d, 0xbe, 0x03, 0x0b, 0x3d, 0x6a, 0xb5, 0xa5, 0x42,
- 0x0a, 0x4a, 0x21, 0xf8, 0xf4, 0x0a, 0x89, 0x19, 0x60, 0xed, 0xb6, 0x66, 0xaa, 0x4b, 0x49, 0xd1,
- 0xb5, 0x88, 0x86, 0x62, 0x20, 0x93, 0x1c, 0xc3, 0x92, 0xde, 0xd0, 0x06, 0x53, 0x2e, 0xaa, 0x49,
- 0x7c, 0x63, 0xfa, 0x7b, 0xbe, 0x18, 0x97, 0xcd, 0xcb, 0xa7, 0x27, 0x95, 0xa5, 0x38, 0x84, 0x63,
- 0x52, 0xcc, 0xda, 0x6b, 0x50, 0x8a, 0xcf, 0x70, 0xaa, 0xa2, 0xce, 0x9f, 0xcd, 0xc1, 0xe5, 0x7b,
- 0x1b, 0xcd, 0xe0, 0x2e, 0x69, 0xdf, 0x77, 0x1d, 0x7b, 0x44, 0xfe, 0x04, 0xe6, 0x5d, 0xeb, 0x90,
- 0xba, 0x41, 0x95, 0xe3, 0xed, 0xa7, 0xd7, 0xe3, 0x18, 0xf3, 0x5a, 0x43, 0x71, 0xd6, 0xca, 0x0c,
- 0xad, 0x5b, 0x03, 0xd1, 0x88, 0x25, 0xef, 0xc0, 0xc2, 0xa1, 0x65, 0x1f, 0xf9, 0x9d, 0x8e, 0xf1,
- 0x52, 0x1b, 0x4f, 0x61, 0x30, 0x6a, 0xbc, 0x0e, 0x71, 0xcd, 0x03, 0x06, 0x5c, 0xa5, 0xeb, 0xa6,
- 0x8c, 0xf9, 0x6c, 0xcf, 0x33, 0x28, 0x63, 0xb5, 0x6a, 0x3f, 0xc7, 0x5c, 0xf7, 0xce, 0x24, 0x22,
- 0x9c, 0x3c, 0x76, 0xed, 0xeb, 0xb0, 0x18, 0x5b, 0xdc, 0x54, 0xef, 0xe1, 0x27, 0x0b, 0x50, 0xba,
- 0x67, 0x75, 0x8e, 0xac, 0x73, 0x3a, 0xbd, 0x2f, 0x42, 0x5e, 0x5d, 0x6d, 0x98, 0xb0, 0x23, 0x0c,
- 0x7a, 0xd5, 0xd5, 0x07, 0x6a, 0x9c, 0x4c, 0x26, 0x07, 0x16, 0x13, 0xaa, 0x22, 0xad, 0x16, 0x96,
- 0x8f, 0x92, 0xc9, 0xfd, 0x00, 0x81, 0x11, 0x4d, 0xca, 0xa9, 0xe4, 0x2e, 0xdc, 0xa9, 0x6c, 0x40,
- 0x89, 0xd1, 0x87, 0x43, 0x47, 0xdd, 0xca, 0x1d, 0x71, 0x53, 0x3c, 0x0a, 0x7b, 0x61, 0x30, 0x86,
- 0xc3, 0x04, 0xa5, 0x8c, 0x46, 0x6c, 0xbf, 0x3f, 0x60, 0x94, 0x73, 0xe5, 0x8f, 0x0a, 0x51, 0x34,
- 0xb2, 0x65, 0xe0, 0x18, 0x52, 0xc8, 0xe8, 0xad, 0xe3, 0x0e, 0x79, 0x6f, 0x57, 0xf2, 0x90, 0x01,
- 0xb2, 0x72, 0x4b, 0xf9, 0x28, 0x7a, 0xdb, 0x4d, 0x60, 0x31, 0x45, 0x1d, 0xf8, 0xfe, 0xc2, 0xa7,
- 0x77, 0x0b, 0x54, 0xbc, 0xc0, 0x93, 0xec, 0x1b, 0xb0, 0x12, 0x9a, 0x80, 0xe3, 0x75, 0x83, 0x00,
- 0xa6, 0xa8, 0x6f, 0x4d, 0xf7, 0x93, 0x28, 0x4c, 0xd3, 0xca, 0x93, 0x20, 0x28, 0x23, 0x2d, 0x26,
- 0xcb, 0x35, 0x41, 0x09, 0x29, 0xc0, 0x93, 0xdf, 0x83, 0x1c, 0xb7, 0xb8, 0x5b, 0x2e, 0x3d, 0x6d,
- 0x03, 0x44, 0xbd, 0xd9, 0x30, 0x9a, 0x53, 0x41, 0x83, 0x7c, 0x46, 0xc5, 0x92, 0x7c, 0x2f, 0x03,
- 0xcb, 0xba, 0xed, 0x0a, 0x69, 0xd7, 0xe1, 0x82, 0x8d, 0xca, 0x4b, 0xd3, 0xde, 0xe6, 0x07, 0x52,
- 0x12, 0x6c, 0x8c, 0x3c, 0xd5, 0x8d, 0x93, 0xc4, 0x60, 0x4a, 0x60, 0x75, 0x0f, 0xa0, 0xe1, 0x77,
- 0x83, 0x1d, 0x5c, 0x87, 0x15, 0xc7, 0x13, 0x94, 0x1d, 0x5b, 0x6e, 0x93, 0xda, 0xbe, 0xd7, 0xe6,
- 0x6a, 0x37, 0xe7, 0xa2, 0x6a, 0xd0, 0x9d, 0x24, 0x1a, 0xd3, 0xf4, 0xd5, 0xbf, 0x9b, 0x83, 0xc5,
- 0x07, 0xf5, 0x56, 0xf3, 0x9c, 0x4e, 0x21, 0x56, 0x38, 0xcb, 0x3e, 0xa1, 0x70, 0x16, 0x33, 0xb5,
- 0xb9, 0xcf, 0xec, 0xc2, 0xf1, 0xe2, 0x1d, 0xcc, 0xa7, 0x73, 0x7d, 0x5b, 0xfd, 0x61, 0x0e, 0x56,
- 0xf7, 0x06, 0xd4, 0x7b, 0xbb, 0xe7, 0xf0, 0xa3, 0x58, 0xcb, 0x85, 0xaa, 0x91, 0x67, 0xce, 0xac,
- 0x91, 0xc7, 0x76, 0x4e, 0xf6, 0x09, 0x3b, 0x67, 0x1d, 0x8a, 0x32, 0x72, 0xe6, 0x03, 0xcb, 0x1e,
- 0xab, 0x0b, 0x3e, 0x08, 0x10, 0x18, 0xd1, 0xa8, 0xe6, 0xc0, 0xa1, 0xe8, 0xb5, 0xfc, 0x23, 0xea,
- 0x4d, 0x97, 0xf8, 0xe9, 0xe6, 0xc0, 0x60, 0x2c, 0x46, 0x6c, 0xc8, 0x2d, 0x00, 0x2b, 0x6a, 0x54,
- 0xd4, 0x49, 0x5f, 0xa8, 0xf1, 0x7a, 0xd4, 0xa6, 0x18, 0xa3, 0xfa, 0x75, 0xbd, 0xd9, 0x46, 0x28,
- 0xc5, 0x0b, 0x15, 0xe7, 0xb8, 0x2d, 0x0b, 0xb2, 0xa6, 0xec, 0x59, 0x59, 0x53, 0xf5, 0xff, 0x8a,
- 0xb0, 0xb4, 0x3f, 0x74, 0xb9, 0xc5, 0x9e, 0x65, 0x90, 0xf0, 0x59, 0x77, 0xd1, 0xc5, 0x0c, 0x24,
- 0x77, 0x81, 0x06, 0x32, 0x80, 0x2b, 0xc2, 0xe5, 0x2d, 0x36, 0xe4, 0x62, 0x8b, 0x32, 0xc1, 0x4d,
- 0x89, 0x24, 0x3f, 0x75, 0x0f, 0x53, 0xab, 0xd1, 0x4c, 0x73, 0xc1, 0x49, 0xac, 0xc9, 0x21, 0xac,
- 0x09, 0x97, 0xd7, 0x5d, 0xd7, 0x7f, 0x14, 0x14, 0x04, 0xa2, 0xc6, 0x18, 0x13, 0xb4, 0x54, 0xcd,
- 0x7c, 0xd7, 0x5a, 0x8d, 0xe6, 0x19, 0x94, 0xf8, 0x09, 0x5c, 0xc8, 0x7d, 0xb5, 0xaa, 0xb7, 0x2c,
- 0xd7, 0x69, 0x5b, 0x42, 0x95, 0x14, 0x94, 0x4d, 0x2d, 0x28, 0xe6, 0x9f, 0x0f, 0x8a, 0x90, 0xad,
- 0x46, 0x33, 0x4d, 0x82, 0x93, 0xc6, 0x7d, 0x5a, 0x71, 0x4e, 0x1b, 0x56, 0x42, 0xa7, 0x62, 0xf4,
- 0x5e, 0x9c, 0xba, 0x9b, 0xab, 0x9e, 0xe4, 0x80, 0x69, 0x96, 0xe4, 0x3b, 0x70, 0x39, 0x6a, 0x33,
- 0x32, 0x91, 0xba, 0x0a, 0x6c, 0x66, 0xc9, 0x26, 0xae, 0x9e, 0x9e, 0x54, 0x2e, 0x6f, 0xa5, 0xd9,
- 0xe2, 0xb8, 0x24, 0xf2, 0xb7, 0x19, 0x58, 0x95, 0x53, 0xaa, 0x8b, 0x1e, 0xf5, 0x3e, 0x50, 0x26,
- 0xc9, 0xcb, 0x8b, 0xca, 0xc2, 0xbf, 0x3d, 0x43, 0xf5, 0x33, 0xbe, 0xff, 0x6b, 0xf5, 0x14, 0x7f,
- 0x9d, 0x54, 0x85, 0xfd, 0x4c, 0x69, 0x34, 0x8e, 0x4d, 0x88, 0x74, 0xe3, 0x93, 0x34, 0xef, 0xa2,
- 0x34, 0x75, 0x83, 0x57, 0x3d, 0xc5, 0x02, 0xc7, 0x98, 0xae, 0x6d, 0xc1, 0xd5, 0x89, 0xb3, 0x9d,
- 0x2a, 0x4b, 0xfa, 0xd3, 0x0c, 0x14, 0xd1, 0x12, 0xb4, 0xe1, 0xf4, 0x1d, 0x41, 0x6e, 0x41, 0x6e,
- 0xe8, 0x39, 0xc1, 0x01, 0x7b, 0x3d, 0xf0, 0x98, 0x07, 0x9e, 0x23, 0x1e, 0x9f, 0x54, 0x96, 0x43,
- 0x42, 0x2a, 0x21, 0xa8, 0x68, 0x65, 0x50, 0xa6, 0xa2, 0x78, 0x2e, 0xf8, 0x3e, 0x65, 0x12, 0xa1,
- 0xa4, 0xe4, 0xa3, 0xa0, 0x0c, 0x93, 0x68, 0x4c, 0xd3, 0x57, 0x7f, 0x92, 0x85, 0xf9, 0xa6, 0x7a,
- 0x2d, 0xe4, 0x5d, 0x28, 0xf4, 0xa9, 0xb0, 0xd4, 0x65, 0x89, 0x2e, 0xcf, 0xbd, 0x7c, 0xbe, 0x2b,
- 0xc8, 0x3d, 0x15, 0x85, 0xdd, 0xa7, 0xc2, 0x8a, 0xfc, 0x63, 0x04, 0xc3, 0x90, 0x2b, 0xe9, 0x98,
- 0xce, 0x98, 0xec, 0xac, 0xb7, 0x4b, 0x7a, 0xc6, 0xcd, 0x01, 0xb5, 0x27, 0x36, 0xc3, 0x78, 0x30,
- 0xcf, 0x85, 0x25, 0x86, 0x7c, 0xf6, 0x0e, 0x61, 0x23, 0x49, 0x71, 0x8b, 0xdd, 0x20, 0xa8, 0x67,
- 0x34, 0x52, 0xaa, 0xff, 0x9a, 0x01, 0xd0, 0x84, 0x0d, 0x87, 0x0b, 0xf2, 0x87, 0x63, 0x8a, 0xac,
- 0x9d, 0x4f, 0x91, 0x72, 0xb4, 0x52, 0x63, 0x98, 0xee, 0x05, 0x90, 0x98, 0x12, 0x29, 0xe4, 0x1d,
- 0x41, 0xfb, 0xc1, 0xe5, 0xc3, 0xeb, 0xb3, 0xae, 0x2d, 0x3a, 0x49, 0xef, 0x48, 0xb6, 0xa8, 0xb9,
- 0x57, 0x3f, 0x9a, 0x0f, 0xd6, 0x24, 0x15, 0x4b, 0xbe, 0x9f, 0x81, 0x52, 0x3b, 0xb8, 0x82, 0x71,
- 0x68, 0x50, 0x4b, 0xb9, 0xf3, 0xcc, 0x2e, 0x49, 0xa3, 0xc4, 0x78, 0x3b, 0x26, 0x06, 0x13, 0x42,
- 0x89, 0x0f, 0x05, 0xa1, 0xbd, 0x45, 0xb0, 0xfc, 0xfa, 0xcc, 0xe7, 0x6b, 0xac, 0x6d, 0xc6, 0xb0,
- 0xc6, 0x50, 0x08, 0x71, 0x63, 0x4d, 0x36, 0x33, 0x5f, 0x6e, 0x04, 0x6d, 0x39, 0xba, 0xfc, 0x3c,
- 0xde, 0xa4, 0x43, 0xee, 0x02, 0x31, 0xb5, 0x98, 0x5d, 0xcb, 0x71, 0x69, 0x1b, 0xfd, 0xa1, 0xa7,
- 0x4b, 0xa7, 0x85, 0xa8, 0x0b, 0x6d, 0x67, 0x8c, 0x02, 0x27, 0x8c, 0x22, 0x1b, 0x50, 0x52, 0xf3,
- 0xd9, 0x1c, 0xf2, 0x58, 0x80, 0x1b, 0x2a, 0x79, 0x27, 0x86, 0xc3, 0x04, 0x25, 0xb9, 0x09, 0x05,
- 0x46, 0x07, 0xae, 0x63, 0x5b, 0xba, 0xfa, 0x90, 0x0f, 0x3a, 0xb4, 0x35, 0x0c, 0x43, 0x2c, 0x69,
- 0xc0, 0x73, 0x8c, 0x1e, 0x3b, 0x32, 0xa6, 0xbf, 0xed, 0x70, 0xe1, 0xb3, 0x91, 0x72, 0x51, 0xa6,
- 0xfe, 0x50, 0x3e, 0x3d, 0xa9, 0x3c, 0x87, 0x13, 0xf0, 0x38, 0x71, 0x14, 0xf9, 0x51, 0x06, 0x96,
- 0x5c, 0xbf, 0xdb, 0x75, 0xbc, 0xae, 0xbe, 0x00, 0x33, 0x75, 0xcf, 0xb7, 0x9f, 0x85, 0x9f, 0xa8,
- 0x35, 0xe2, 0x9c, 0xf5, 0xd1, 0x72, 0xd5, 0x28, 0x63, 0x29, 0x81, 0xc3, 0xe4, 0x24, 0xd6, 0x5e,
- 0x07, 0x32, 0x3e, 0x76, 0x2a, 0x47, 0xef, 0x43, 0x29, 0xee, 0x46, 0xc8, 0x3b, 0xa1, 0x7b, 0xd2,
- 0xde, 0xe1, 0x6b, 0xd3, 0x27, 0xf5, 0x9f, 0xec, 0x8f, 0xbe, 0x0d, 0x8b, 0x4d, 0xd7, 0xb2, 0x8f,
- 0x9a, 0x72, 0xe7, 0xb0, 0x44, 0xab, 0x55, 0xe6, 0x89, 0xad, 0x56, 0x37, 0x20, 0xe7, 0xd8, 0x61,
- 0x12, 0x17, 0xba, 0xd7, 0x3b, 0xb6, 0xef, 0xa1, 0xc2, 0x54, 0xff, 0x39, 0x63, 0xf8, 0xb7, 0x7a,
- 0x8c, 0x5a, 0x6d, 0xd2, 0x84, 0xab, 0x7d, 0xca, 0xb9, 0xd5, 0xa5, 0xf5, 0x6e, 0x97, 0xd1, 0xae,
- 0xfa, 0x3a, 0xe4, 0x5e, 0xa0, 0x9d, 0xa8, 0xfc, 0x78, 0x7f, 0x12, 0x11, 0x4e, 0x1e, 0x4b, 0xde,
- 0x81, 0xe7, 0x0f, 0x99, 0x6f, 0xb5, 0x6d, 0x4b, 0x7a, 0x40, 0x45, 0xd1, 0xf2, 0xb7, 0x7a, 0x96,
- 0xe7, 0x51, 0xd7, 0xf4, 0x88, 0xfe, 0x86, 0x61, 0xfc, 0xfc, 0xe6, 0x59, 0x84, 0x78, 0x36, 0x8f,
- 0xea, 0xff, 0xe6, 0xa0, 0xa4, 0x57, 0xf1, 0x2b, 0xd2, 0x11, 0x77, 0x00, 0xc0, 0xd5, 0x7c, 0x54,
- 0x96, 0x9b, 0x9d, 0xba, 0xb5, 0xb5, 0x19, 0x0e, 0xc6, 0x18, 0x23, 0x99, 0x97, 0xdb, 0x46, 0x6d,
- 0x73, 0xc9, 0xbc, 0x3c, 0x50, 0x52, 0x80, 0x97, 0xa4, 0xe6, 0x65, 0x98, 0xfb, 0x9a, 0x90, 0xd4,
- 0x68, 0x0f, 0x03, 0x3c, 0xf9, 0x2a, 0x2c, 0x5a, 0x42, 0x58, 0x76, 0xaf, 0x2f, 0xb5, 0x60, 0xbc,
- 0x4b, 0xd8, 0x72, 0x55, 0x8f, 0x50, 0x18, 0xa7, 0x53, 0x37, 0xa7, 0xae, 0x6f, 0x1f, 0xf1, 0xb1,
- 0x9b, 0x53, 0x05, 0x45, 0x83, 0x25, 0x7d, 0x98, 0x17, 0xca, 0xb8, 0xcc, 0x15, 0xcb, 0x0c, 0x5f,
- 0xb1, 0xc4, 0x2c, 0x35, 0x12, 0xa7, 0x9f, 0xd1, 0x08, 0x91, 0xe2, 0xb8, 0xda, 0x2b, 0x26, 0x3b,
- 0x98, 0x55, 0x9c, 0xde, 0x78, 0xf1, 0x26, 0x66, 0xf9, 0x8c, 0x46, 0x48, 0xf5, 0xbf, 0xe7, 0x80,
- 0x34, 0x85, 0xe5, 0xb5, 0x2d, 0xd6, 0xbe, 0xb7, 0xd1, 0xfc, 0xac, 0x3e, 0x5e, 0x7b, 0x30, 0xfe,
- 0xf1, 0xda, 0xcb, 0x93, 0x3e, 0x5e, 0xfb, 0xfc, 0xbd, 0xe1, 0x21, 0x65, 0x1e, 0x15, 0x94, 0x07,
- 0xb7, 0x1f, 0xbf, 0x92, 0x9f, 0xb0, 0x75, 0x60, 0x69, 0x60, 0x09, 0xbb, 0xd7, 0x14, 0xcc, 0x12,
- 0xb4, 0x3b, 0x32, 0x46, 0xfc, 0x7a, 0xe0, 0xe6, 0xf7, 0xe3, 0xc8, 0xc7, 0x27, 0x95, 0xdf, 0x3a,
- 0xeb, 0xcb, 0x57, 0x31, 0x1a, 0x50, 0x5e, 0x53, 0xe4, 0xaa, 0xa9, 0x2f, 0xc9, 0x96, 0xdc, 0x02,
- 0x70, 0x9d, 0x63, 0xaa, 0x43, 0x5c, 0x65, 0xfa, 0x85, 0x68, 0x6e, 0x8d, 0x10, 0x83, 0x31, 0xaa,
- 0xea, 0x3a, 0x94, 0xb4, 0x93, 0x36, 0x97, 0x52, 0x15, 0xc8, 0x5b, 0x32, 0xed, 0x55, 0x7e, 0x26,
- 0xaf, 0xdb, 0x1d, 0x54, 0x1e, 0x8c, 0x1a, 0x5e, 0xfd, 0x41, 0x01, 0xc2, 0x10, 0x81, 0xd8, 0x63,
- 0x11, 0xe5, 0xf4, 0xdf, 0x5b, 0xdd, 0x37, 0x0c, 0xf4, 0x69, 0x1e, 0x3c, 0xc5, 0x02, 0x4b, 0xd3,
- 0x03, 0xef, 0xd8, 0xb4, 0x6e, 0xdb, 0xfe, 0xd0, 0xb4, 0xed, 0x65, 0xc7, 0x7b, 0xe0, 0x93, 0x14,
- 0x38, 0x61, 0x14, 0xb9, 0xab, 0xbe, 0x6c, 0x13, 0x96, 0xd4, 0xa9, 0x09, 0x9c, 0x5e, 0x38, 0xe3,
- 0xcb, 0x36, 0x4d, 0x14, 0x7e, 0xce, 0xa6, 0x1f, 0x31, 0x1a, 0x4e, 0x76, 0x60, 0xe1, 0xd8, 0x77,
- 0x87, 0x7d, 0x1a, 0xd4, 0x58, 0xd7, 0x26, 0x71, 0x7a, 0x4b, 0x91, 0xc4, 0x8a, 0x8e, 0x7a, 0x08,
- 0x06, 0x63, 0x09, 0x85, 0x15, 0x55, 0x61, 0x70, 0xc4, 0xc8, 0xf4, 0x88, 0x99, 0xfa, 0xc8, 0x8b,
- 0x93, 0xd8, 0xed, 0xfb, 0xed, 0x66, 0x92, 0xda, 0x7c, 0x76, 0x95, 0x04, 0x62, 0x9a, 0x27, 0xf9,
- 0x30, 0x03, 0x25, 0xcf, 0x6f, 0xd3, 0xc0, 0x37, 0x9b, 0x42, 0x61, 0x6b, 0xf6, 0xb0, 0xb1, 0xf6,
- 0x20, 0xc6, 0x56, 0x47, 0x30, 0x61, 0x38, 0x17, 0x47, 0x61, 0x42, 0x3e, 0x39, 0x80, 0x45, 0xe1,
- 0xbb, 0x66, 0x8f, 0x06, 0xd5, 0xc3, 0xeb, 0x93, 0xd6, 0xdc, 0x0a, 0xc9, 0x22, 0x4f, 0x1e, 0xc1,
- 0x38, 0xc6, 0xf9, 0x10, 0x0f, 0x56, 0x9d, 0xbe, 0xd5, 0xa5, 0xfb, 0x43, 0xd7, 0xd5, 0x07, 0x52,
- 0x10, 0xaf, 0x4d, 0xfc, 0x84, 0x51, 0x3a, 0x22, 0xd7, 0xec, 0x0b, 0xda, 0xa1, 0x8c, 0x7a, 0x36,
- 0x8d, 0x72, 0xfb, 0x3b, 0x29, 0x4e, 0x38, 0xc6, 0x9b, 0xbc, 0x01, 0x97, 0x07, 0xcc, 0xf1, 0x95,
- 0xaa, 0x5d, 0x8b, 0xeb, 0xa0, 0x56, 0x37, 0x42, 0x3f, 0x6f, 0xd8, 0x5c, 0xde, 0x4f, 0x13, 0xe0,
- 0xf8, 0x18, 0x19, 0xde, 0x06, 0x40, 0x55, 0x40, 0x31, 0xe1, 0x6d, 0x30, 0x16, 0x43, 0x2c, 0xd9,
- 0x85, 0x82, 0xd5, 0xe9, 0x38, 0x9e, 0xa4, 0x5c, 0x54, 0xa6, 0xf2, 0x85, 0x49, 0x4b, 0xab, 0x1b,
- 0x1a, 0xcd, 0x27, 0x78, 0xc2, 0x70, 0xec, 0xda, 0xb7, 0xe0, 0xf2, 0xd8, 0xab, 0x9b, 0x2a, 0x80,
- 0x6c, 0x02, 0x44, 0xfd, 0x94, 0xe4, 0x8b, 0x90, 0xe7, 0xc2, 0x62, 0x41, 0xa9, 0x20, 0x4c, 0xdf,
- 0x9a, 0x12, 0x88, 0x1a, 0x27, 0xa3, 0x38, 0x2e, 0xfc, 0x41, 0x3a, 0x8a, 0x6b, 0x0a, 0x7f, 0x80,
- 0x0a, 0x53, 0xfd, 0x8b, 0x3c, 0x2c, 0x04, 0x27, 0x0f, 0x8f, 0xa5, 0x39, 0x99, 0x59, 0x9b, 0x8d,
- 0x0c, 0xd3, 0x27, 0x66, 0x3b, 0xc9, 0xe3, 0x22, 0x7b, 0xe1, 0xc7, 0xc5, 0x11, 0xcc, 0x0f, 0x94,
- 0x33, 0x36, 0x0e, 0xea, 0x8d, 0xd9, 0x65, 0x2b, 0x76, 0xfa, 0xac, 0xd5, 0xbf, 0xd1, 0x88, 0x20,
- 0x0f, 0x61, 0x89, 0x51, 0xc1, 0x46, 0x89, 0xb3, 0x69, 0x96, 0xda, 0x9d, 0xea, 0xa4, 0xc0, 0x38,
- 0x4b, 0x4c, 0x4a, 0x20, 0x03, 0x28, 0xb2, 0xa0, 0x6a, 0x64, 0x5c, 0xdd, 0xd6, 0xd3, 0x2f, 0x31,
- 0x2c, 0x40, 0x69, 0x4f, 0x1d, 0x3e, 0x62, 0x24, 0x44, 0x07, 0x85, 0x0d, 0x6a, 0x71, 0xb1, 0xe7,
- 0xd9, 0xd4, 0x54, 0x81, 0x63, 0x41, 0x61, 0x88, 0xc2, 0x38, 0x5d, 0xf5, 0xbf, 0x32, 0xb0, 0x9a,
- 0x7e, 0x7b, 0xe4, 0x08, 0xe6, 0x38, 0xb3, 0x8d, 0x35, 0xee, 0x3f, 0x3b, 0xb3, 0xd0, 0x31, 0x90,
- 0xae, 0xe1, 0x36, 0x99, 0x8d, 0x52, 0x8a, 0xdc, 0x2d, 0x6d, 0xca, 0x45, 0x7a, 0xb7, 0x6c, 0x53,
- 0x2e, 0x50, 0x61, 0x48, 0x23, 0x1e, 0x2b, 0xcd, 0x25, 0xda, 0x60, 0x13, 0xb1, 0xd2, 0xf3, 0x69,
- 0x79, 0x93, 0x22, 0xa5, 0xea, 0x0f, 0xe6, 0xe0, 0xda, 0xe4, 0x89, 0x91, 0x6f, 0xc2, 0x72, 0x58,
- 0xf2, 0x18, 0xc5, 0xfe, 0x43, 0x23, 0xbc, 0xcd, 0xdf, 0x4e, 0x60, 0x31, 0x45, 0x2d, 0x83, 0x13,
- 0xd3, 0xf9, 0x1c, 0xfc, 0x91, 0x46, 0xec, 0x5a, 0x6b, 0x2b, 0xc4, 0x60, 0x8c, 0x8a, 0xd4, 0x61,
- 0xc5, 0x3c, 0xb5, 0xe2, 0xc5, 0x8e, 0x58, 0xab, 0xff, 0x56, 0x12, 0x8d, 0x69, 0x7a, 0x99, 0x3a,
- 0xc8, 0x20, 0x22, 0xf8, 0x96, 0x39, 0x96, 0x3a, 0x6c, 0x6b, 0x30, 0x06, 0x78, 0xb2, 0x01, 0x25,
- 0xf9, 0xb3, 0x95, 0xfc, 0x78, 0x29, 0x2a, 0xff, 0xc4, 0x70, 0x98, 0xa0, 0x8c, 0xbe, 0xaa, 0xd2,
- 0xc9, 0xc3, 0xf8, 0x57, 0x55, 0xb7, 0x00, 0x86, 0x9c, 0xa2, 0xf5, 0x48, 0x32, 0x31, 0x17, 0x05,
- 0xe1, 0xe2, 0x0f, 0x42, 0x0c, 0xc6, 0xa8, 0xaa, 0x3f, 0xcf, 0xc0, 0x52, 0x62, 0xff, 0x92, 0x0e,
- 0xcc, 0x1d, 0x6d, 0x04, 0xc9, 0xf9, 0xbd, 0x67, 0xd8, 0x2d, 0xa4, 0xad, 0xee, 0xde, 0x06, 0x47,
- 0x29, 0x80, 0xbc, 0x17, 0xd6, 0x01, 0x66, 0xee, 0x83, 0x8f, 0xc7, 0x96, 0x26, 0xd6, 0x4f, 0x96,
- 0x04, 0xfe, 0x65, 0x19, 0x56, 0x52, 0x8e, 0xf9, 0x1c, 0xad, 0x8d, 0xda, 0x98, 0xcc, 0x57, 0xa0,
- 0x13, 0x8c, 0x29, 0xf8, 0x3e, 0x34, 0x46, 0x45, 0xba, 0x5a, 0x7b, 0xda, 0xa7, 0x36, 0x66, 0x5a,
- 0x52, 0x2a, 0x41, 0x4a, 0xa9, 0xef, 0xfb, 0x19, 0x28, 0x59, 0xb1, 0xbf, 0xd5, 0x30, 0x2e, 0xf5,
- 0xfe, 0x2c, 0x59, 0xd3, 0xd8, 0x3f, 0x8a, 0xe8, 0xce, 0xe1, 0x38, 0x02, 0x13, 0x42, 0x89, 0x0d,
- 0xb9, 0x9e, 0x10, 0xc1, 0xdf, 0x37, 0xec, 0x3c, 0x93, 0x1e, 0x3d, 0xdd, 0x0f, 0x22, 0x01, 0xa8,
- 0x98, 0x93, 0x47, 0x50, 0xb4, 0x1e, 0x71, 0xfd, 0x57, 0x3b, 0xe6, 0x7f, 0x1d, 0x66, 0x49, 0x0e,
- 0x53, 0xff, 0xda, 0x63, 0x2e, 0xc9, 0x03, 0x28, 0x46, 0xb2, 0x08, 0x83, 0x79, 0x5b, 0x7d, 0x85,
- 0x6a, 0xf2, 0xf0, 0x37, 0x9e, 0xd1, 0xd7, 0xac, 0xfa, 0xf8, 0x4a, 0x80, 0xd0, 0x48, 0x22, 0x5d,
- 0xc8, 0x1f, 0x59, 0x9d, 0x23, 0xcb, 0xe4, 0xe2, 0x33, 0xec, 0x8a, 0x78, 0x0f, 0x9a, 0xf6, 0x16,
- 0x0a, 0x82, 0x9a, 0xbf, 0x7c, 0x75, 0x9e, 0x25, 0xb8, 0xb9, 0xae, 0x9b, 0xe1, 0xd5, 0xc5, 0xba,
- 0x5a, 0xf4, 0xab, 0x93, 0x00, 0x54, 0xcc, 0xe5, 0x6a, 0x54, 0x31, 0xc6, 0x5c, 0xd6, 0xed, 0xce,
- 0x5a, 0xc8, 0x88, 0xaf, 0x46, 0x41, 0x50, 0xf3, 0x97, 0x36, 0xe2, 0x07, 0x5d, 0x1b, 0x26, 0x5c,
- 0x9d, 0xc1, 0x46, 0xd2, 0x0d, 0x20, 0xda, 0x46, 0x42, 0x28, 0x46, 0xb2, 0xc8, 0x3b, 0x30, 0xe7,
- 0xfa, 0x5d, 0x73, 0xd1, 0x36, 0xc3, 0xa5, 0x4e, 0xd4, 0x6d, 0xa4, 0x37, 0x7a, 0xc3, 0xef, 0xa2,
- 0xe4, 0x4c, 0xfe, 0x32, 0x03, 0xcb, 0x56, 0xe2, 0x8f, 0x40, 0x4c, 0x37, 0xd4, 0x0c, 0x5f, 0x87,
- 0x4d, 0xfc, 0x63, 0x11, 0xdd, 0x17, 0x95, 0x44, 0x61, 0x4a, 0xb4, 0x0a, 0x1b, 0xd5, 0xbd, 0x65,
- 0x79, 0x79, 0xd6, 0x2d, 0x91, 0xb8, 0xff, 0x34, 0x61, 0xa3, 0x02, 0xa1, 0x11, 0x41, 0x7e, 0x94,
- 0x51, 0x47, 0x73, 0xfc, 0x3b, 0xfc, 0xf2, 0xca, 0xcc, 0xdf, 0x95, 0x4f, 0xfe, 0xef, 0x80, 0xc4,
- 0x69, 0x1f, 0x27, 0xc0, 0xf4, 0x14, 0xc8, 0x0f, 0x33, 0xb0, 0x62, 0x25, 0xff, 0x64, 0xa3, 0xbc,
- 0x3a, 0x6b, 0xa4, 0x36, 0xf9, 0x5f, 0x3b, 0xcc, 0xfd, 0x78, 0x12, 0x87, 0x69, 0xe9, 0x72, 0x9b,
- 0xd1, 0xbe, 0xe5, 0xb8, 0xe5, 0xcb, 0x33, 0x7f, 0x52, 0x16, 0xfb, 0x4a, 0x5a, 0x6f, 0x33, 0x05,
- 0x41, 0xcd, 0xbf, 0x6a, 0xc3, 0x62, 0xec, 0x0f, 0x7d, 0xce, 0xd1, 0x0a, 0x73, 0x0b, 0xe0, 0x98,
- 0x32, 0xa7, 0x33, 0xda, 0xa2, 0x4c, 0x98, 0xca, 0x75, 0x78, 0x86, 0xbe, 0x15, 0x62, 0x30, 0x46,
- 0xb5, 0xf9, 0x47, 0x1f, 0x7d, 0x7c, 0xfd, 0xd2, 0x4f, 0x3f, 0xbe, 0x7e, 0xe9, 0x67, 0x1f, 0x5f,
- 0xbf, 0xf4, 0xdd, 0xd3, 0xeb, 0x99, 0x8f, 0x4e, 0xaf, 0x67, 0x7e, 0x7a, 0x7a, 0x3d, 0xf3, 0xb3,
- 0xd3, 0xeb, 0x99, 0x7f, 0x3f, 0xbd, 0x9e, 0xf9, 0xab, 0x9f, 0x5f, 0xbf, 0xf4, 0xfb, 0x1b, 0x4f,
- 0xfb, 0xc7, 0x79, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x22, 0xad, 0xca, 0xcf, 0x73, 0x4f, 0x00,
- 0x00,
+ // 4984 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7c, 0xcd, 0x8f, 0x63, 0xc7,
+ 0x71, 0xf8, 0x92, 0x43, 0xce, 0x90, 0x35, 0x9c, 0x8f, 0xed, 0xd5, 0xae, 0xa9, 0xb1, 0xb4, 0xdc,
+ 0x1f, 0x8d, 0x9f, 0xb2, 0x36, 0x64, 0x8e, 0xb4, 0x8a, 0xe3, 0xb1, 0x02, 0xdb, 0xe2, 0x7c, 0x69,
+ 0x3f, 0xb8, 0x3b, 0xa3, 0x22, 0x47, 0x42, 0x3e, 0x1c, 0xe9, 0xcd, 0x63, 0x93, 0x7c, 0x9a, 0xc7,
+ 0xf7, 0xb8, 0xdd, 0xcd, 0x59, 0x51, 0x80, 0x13, 0x3b, 0x46, 0x02, 0x18, 0x01, 0xe4, 0x1c, 0x7c,
+ 0xc8, 0xc9, 0x08, 0x10, 0xe4, 0x10, 0x20, 0x87, 0x00, 0xf9, 0x0f, 0x1c, 0x20, 0xd0, 0xd1, 0xb9,
+ 0xf9, 0x10, 0x0c, 0xa2, 0x71, 0x2e, 0x39, 0x18, 0x89, 0x4f, 0x09, 0xf6, 0x92, 0xa0, 0x3f, 0xde,
+ 0x27, 0xb9, 0xda, 0xe1, 0x72, 0x34, 0x32, 0xe0, 0x1b, 0x5f, 0x55, 0x75, 0x55, 0x77, 0xbd, 0xea,
+ 0xea, 0xaa, 0xea, 0x7a, 0x84, 0xdb, 0x5d, 0x47, 0xf4, 0x86, 0x87, 0x35, 0xdb, 0xef, 0xaf, 0x5b,
+ 0xac, 0xeb, 0x0f, 0x98, 0xff, 0xbe, 0xfa, 0xf1, 0x55, 0x7a, 0x4c, 0x3d, 0xc1, 0xd7, 0x07, 0x47,
+ 0xdd, 0x75, 0x6b, 0xe0, 0xf0, 0x75, 0x4e, 0x3d, 0xee, 0xb3, 0xf5, 0xe3, 0x57, 0x2d, 0x77, 0xd0,
+ 0xb3, 0x5e, 0x5d, 0xef, 0x52, 0x8f, 0x32, 0x4b, 0xd0, 0x76, 0x6d, 0xc0, 0x7c, 0xe1, 0x93, 0x8d,
+ 0x88, 0x53, 0x2d, 0xe0, 0xa4, 0x7e, 0xbc, 0xab, 0x39, 0xd5, 0x06, 0x47, 0xdd, 0x9a, 0xe4, 0x54,
+ 0xd3, 0x9c, 0x6a, 0x01, 0xa7, 0xb5, 0x6f, 0x9f, 0x79, 0x0e, 0xb6, 0xdf, 0xef, 0xfb, 0x5e, 0x5a,
+ 0xf4, 0xda, 0x57, 0x63, 0x0c, 0xba, 0x7e, 0xd7, 0x5f, 0x57, 0xe0, 0xc3, 0x61, 0x47, 0x3d, 0xa9,
+ 0x07, 0xf5, 0xcb, 0x90, 0x57, 0x8f, 0x36, 0x78, 0xcd, 0xf1, 0x25, 0xcb, 0x75, 0xdb, 0x67, 0x74,
+ 0xfd, 0x78, 0x6c, 0x35, 0x6b, 0xbf, 0x1d, 0xd1, 0xf4, 0x2d, 0xbb, 0xe7, 0x78, 0x94, 0x8d, 0xa2,
+ 0x79, 0xf4, 0xa9, 0xb0, 0x26, 0x8d, 0x5a, 0x7f, 0xd2, 0x28, 0x36, 0xf4, 0x84, 0xd3, 0xa7, 0x63,
+ 0x03, 0x7e, 0xe7, 0x69, 0x03, 0xb8, 0xdd, 0xa3, 0x7d, 0x2b, 0x3d, 0xae, 0xfa, 0x38, 0x07, 0xab,
+ 0xf5, 0x77, 0x9a, 0x0d, 0xab, 0x7f, 0xd8, 0xb6, 0x5a, 0xcc, 0xe9, 0x76, 0x29, 0x23, 0x1b, 0x50,
+ 0xea, 0x0c, 0x3d, 0x5b, 0x38, 0xbe, 0xf7, 0xc0, 0xea, 0xd3, 0x72, 0xe6, 0x46, 0xe6, 0x66, 0x71,
+ 0xf3, 0xb9, 0x8f, 0x4f, 0x2a, 0x97, 0x4e, 0x4f, 0x2a, 0xa5, 0xdd, 0x18, 0x0e, 0x13, 0x94, 0x04,
+ 0xa1, 0x68, 0xd9, 0x36, 0xe5, 0xfc, 0x1e, 0x1d, 0x95, 0xb3, 0x37, 0x32, 0x37, 0x17, 0x6f, 0xfd,
+ 0xff, 0x9a, 0x9e, 0x9a, 0x7c, 0x65, 0x35, 0xa9, 0xa5, 0xda, 0xf1, 0xab, 0xb5, 0x26, 0xb5, 0x19,
+ 0x15, 0xf7, 0xe8, 0xa8, 0x49, 0x5d, 0x6a, 0x0b, 0x9f, 0x6d, 0x2e, 0x9d, 0x9e, 0x54, 0x8a, 0xf5,
+ 0x60, 0x2c, 0x46, 0x6c, 0x24, 0x4f, 0x1e, 0x90, 0x97, 0xe7, 0xa6, 0xe6, 0x19, 0x82, 0x31, 0x62,
+ 0x43, 0x5e, 0x82, 0x79, 0x46, 0xbb, 0x8e, 0xef, 0x95, 0x73, 0x6a, 0x6d, 0xcb, 0x66, 0x6d, 0xf3,
+ 0xa8, 0xa0, 0x68, 0xb0, 0x64, 0x08, 0x0b, 0x03, 0x6b, 0xe4, 0xfa, 0x56, 0xbb, 0x9c, 0xbf, 0x31,
+ 0x77, 0x73, 0xf1, 0xd6, 0xdd, 0xda, 0xb3, 0x5a, 0x67, 0xcd, 0x68, 0x77, 0xdf, 0x62, 0x56, 0x9f,
+ 0x0a, 0xca, 0x36, 0x57, 0x8c, 0xd0, 0x85, 0x7d, 0x2d, 0x02, 0x03, 0x59, 0xe4, 0x8f, 0x01, 0x06,
+ 0x01, 0x19, 0x2f, 0xcf, 0x9f, 0xbb, 0x64, 0x62, 0x24, 0x43, 0x08, 0xe2, 0x18, 0x93, 0x48, 0x5e,
+ 0x87, 0x65, 0xc7, 0x3b, 0xf6, 0x6d, 0x4b, 0xbe, 0xd8, 0xd6, 0x68, 0x40, 0xcb, 0x0b, 0x4a, 0x4d,
+ 0xe4, 0xf4, 0xa4, 0xb2, 0x7c, 0x27, 0x81, 0xc1, 0x14, 0x25, 0xf9, 0x32, 0x2c, 0x30, 0xdf, 0xa5,
+ 0x75, 0x7c, 0x50, 0x2e, 0xa8, 0x41, 0xe1, 0x32, 0x51, 0x83, 0x31, 0xc0, 0x57, 0x7f, 0x99, 0x85,
+ 0x2b, 0x75, 0xd6, 0xf5, 0xdf, 0xf1, 0xd9, 0x51, 0xc7, 0xf5, 0x1f, 0x05, 0xf6, 0xe7, 0xc1, 0x3c,
+ 0xf7, 0x87, 0xcc, 0xd6, 0x96, 0x37, 0xd3, 0xd2, 0xeb, 0x4c, 0x38, 0x1d, 0xcb, 0x16, 0x0d, 0x33,
+ 0xc5, 0x4d, 0x90, 0x6f, 0xb9, 0xa9, 0xb8, 0xa3, 0x91, 0x42, 0x6e, 0x43, 0xd1, 0x1f, 0xc8, 0x6d,
+ 0x21, 0x0d, 0x22, 0xab, 0x26, 0xfd, 0x15, 0x33, 0xe9, 0xe2, 0x5e, 0x80, 0x78, 0x7c, 0x52, 0xb9,
+ 0x1a, 0x9f, 0x6c, 0x88, 0xc0, 0x68, 0x70, 0xea, 0xc5, 0xcd, 0x5d, 0xf8, 0x8b, 0x7b, 0x01, 0x72,
+ 0x16, 0xeb, 0xf2, 0x72, 0xee, 0xc6, 0xdc, 0xcd, 0xe2, 0x66, 0xe1, 0xf4, 0xa4, 0x92, 0xab, 0xb3,
+ 0x2e, 0x47, 0x05, 0xad, 0xfe, 0x4a, 0x6e, 0xf6, 0x94, 0x42, 0x48, 0x13, 0xb2, 0xfc, 0x35, 0xa3,
+ 0xe8, 0xdf, 0x3d, 0xfb, 0x54, 0xb5, 0x07, 0xad, 0x35, 0x5f, 0x0b, 0x18, 0x6e, 0xce, 0x9f, 0x9e,
+ 0x54, 0xb2, 0xcd, 0xd7, 0x30, 0xcb, 0x5f, 0x23, 0x55, 0x98, 0x77, 0x3c, 0xd7, 0xf1, 0xa8, 0x51,
+ 0xa7, 0xd2, 0xfa, 0x1d, 0x05, 0x41, 0x83, 0x21, 0x6d, 0xc8, 0x75, 0x1c, 0x97, 0x9a, 0x2d, 0xbd,
+ 0xfb, 0xec, 0x5a, 0xda, 0x75, 0x5c, 0x1a, 0xce, 0x42, 0xad, 0x59, 0x42, 0x50, 0x71, 0x27, 0xef,
+ 0xc1, 0xdc, 0x90, 0xb9, 0x6a, 0x9b, 0x2f, 0xde, 0xda, 0x79, 0x76, 0x21, 0x07, 0xd8, 0x08, 0x65,
+ 0x2c, 0x9c, 0x9e, 0x54, 0xe6, 0x0e, 0xb0, 0x81, 0x92, 0x35, 0x39, 0x80, 0xa2, 0xed, 0x7b, 0x1d,
+ 0xa7, 0xdb, 0xb7, 0x06, 0xe5, 0xbc, 0x92, 0x73, 0x73, 0x92, 0x7f, 0xda, 0x52, 0x44, 0xf7, 0xad,
+ 0xc1, 0x98, 0x8b, 0xda, 0x0a, 0x86, 0x63, 0xc4, 0x49, 0x4e, 0xbc, 0xeb, 0x88, 0xf2, 0xfc, 0xac,
+ 0x13, 0x7f, 0xd3, 0x11, 0xc9, 0x89, 0xbf, 0xe9, 0x08, 0x94, 0xac, 0x89, 0x0d, 0x05, 0x46, 0xcd,
+ 0x46, 0x5b, 0x50, 0x62, 0xbe, 0x31, 0xf5, 0xfb, 0x47, 0xc3, 0x60, 0xb3, 0x74, 0x7a, 0x52, 0x29,
+ 0x04, 0x4f, 0x18, 0x32, 0xae, 0xfe, 0x63, 0x0e, 0xae, 0xd6, 0x3f, 0x1c, 0x32, 0xba, 0x23, 0x19,
+ 0xdc, 0x1e, 0x1e, 0xf2, 0x60, 0x97, 0xdf, 0x80, 0x5c, 0xe7, 0x61, 0xdb, 0x33, 0xa7, 0x4b, 0xc9,
+ 0x58, 0x76, 0x6e, 0xf7, 0xad, 0xed, 0x07, 0xa8, 0x30, 0xd2, 0x95, 0xf4, 0x86, 0x87, 0xea, 0x08,
+ 0xca, 0x26, 0x5d, 0xc9, 0x6d, 0x0d, 0xc6, 0x00, 0x4f, 0x06, 0x70, 0x85, 0xf7, 0x2c, 0x46, 0xdb,
+ 0xe1, 0x11, 0xa2, 0x86, 0x4d, 0x75, 0x5c, 0x7c, 0xe1, 0xf4, 0xa4, 0x72, 0xa5, 0x39, 0xce, 0x05,
+ 0x27, 0xb1, 0x26, 0x6d, 0x58, 0x49, 0x81, 0x8d, 0x91, 0x9d, 0x51, 0xda, 0x95, 0xd3, 0x93, 0xca,
+ 0x4a, 0x4a, 0x1a, 0xa6, 0x59, 0xfe, 0x86, 0x1e, 0x40, 0xd5, 0xff, 0xce, 0xc1, 0x35, 0x65, 0x35,
+ 0x4d, 0xca, 0x8e, 0x1d, 0x9b, 0x6e, 0x0e, 0x43, 0xb3, 0xe9, 0xc2, 0xaa, 0xed, 0x7b, 0x1e, 0x55,
+ 0x41, 0x47, 0x53, 0x30, 0xc7, 0xeb, 0x1a, 0xef, 0x75, 0x46, 0xc5, 0x3f, 0x77, 0x7a, 0x52, 0x59,
+ 0xdd, 0x4a, 0xb1, 0xc0, 0x31, 0xa6, 0x64, 0x1d, 0x8a, 0x0f, 0x87, 0x74, 0x48, 0x63, 0xf6, 0x77,
+ 0x39, 0x38, 0x15, 0xde, 0x0a, 0x10, 0x18, 0xd1, 0xc8, 0x01, 0xc2, 0x1f, 0x38, 0x76, 0x68, 0x79,
+ 0xb1, 0x01, 0xad, 0x00, 0x81, 0x11, 0x0d, 0xd9, 0x86, 0x55, 0x3e, 0x3c, 0xe4, 0x36, 0x73, 0x06,
+ 0x61, 0xac, 0xa5, 0xe3, 0x91, 0xb2, 0x19, 0xb7, 0xda, 0x4c, 0xe1, 0x71, 0x6c, 0x04, 0x39, 0x80,
+ 0x39, 0xe1, 0x72, 0xe3, 0x79, 0x5e, 0x9f, 0x7a, 0x07, 0xb7, 0x1a, 0x4d, 0xed, 0x7f, 0xb4, 0x77,
+ 0x68, 0x35, 0x9a, 0x28, 0xf9, 0xc5, 0x2d, 0x6f, 0xfe, 0x73, 0xb3, 0xbc, 0x85, 0x0b, 0xb7, 0xbc,
+ 0x2e, 0x5c, 0xdd, 0xf2, 0xbd, 0xb6, 0x23, 0xd5, 0xcb, 0x91, 0x72, 0x2a, 0x36, 0x47, 0x2d, 0xa7,
+ 0x4f, 0xa5, 0xbb, 0xb2, 0x99, 0x3f, 0xe6, 0xae, 0xb6, 0x98, 0xef, 0xa1, 0xc2, 0x90, 0x97, 0xa1,
+ 0x20, 0x43, 0xed, 0x0f, 0xfd, 0xf0, 0xd8, 0x5b, 0x35, 0x54, 0x85, 0x96, 0x81, 0x63, 0x48, 0x51,
+ 0xfd, 0x28, 0x03, 0x5f, 0x48, 0x49, 0xda, 0x62, 0x8e, 0xa0, 0xcc, 0xb1, 0x08, 0x87, 0xf9, 0x43,
+ 0x25, 0xd5, 0x58, 0xf6, 0xde, 0xb3, 0x2b, 0x60, 0xe2, 0x62, 0xf4, 0x79, 0xac, 0x7f, 0xa3, 0x11,
+ 0x55, 0xfd, 0x87, 0x3c, 0x2c, 0x6d, 0x0d, 0xb9, 0xf0, 0xfb, 0xc1, 0x56, 0x5b, 0x97, 0x91, 0x37,
+ 0x3b, 0xa6, 0xec, 0x00, 0x1b, 0x66, 0xdd, 0xa1, 0x41, 0x37, 0x03, 0x04, 0x46, 0x34, 0x32, 0xac,
+ 0xe6, 0xd4, 0x1e, 0x32, 0xbd, 0xfe, 0x42, 0x14, 0x56, 0x37, 0x15, 0x14, 0x0d, 0x96, 0x1c, 0x00,
+ 0xd8, 0x94, 0x09, 0xbd, 0x37, 0xa7, 0x73, 0xd2, 0xcb, 0xf2, 0xdd, 0x6d, 0x85, 0x83, 0x31, 0xc6,
+ 0x88, 0xdc, 0x05, 0xa2, 0xe7, 0x22, 0xf7, 0xc5, 0xde, 0x31, 0x65, 0xcc, 0x69, 0x07, 0x3b, 0x6a,
+ 0xcd, 0x4c, 0x85, 0x34, 0xc7, 0x28, 0x70, 0xc2, 0x28, 0xc2, 0x21, 0xc7, 0x07, 0xd4, 0x36, 0x5e,
+ 0xf7, 0xad, 0x19, 0x5e, 0x40, 0x5c, 0xa5, 0xb5, 0xe6, 0x80, 0xda, 0x3b, 0x9e, 0x60, 0xa3, 0xc8,
+ 0x82, 0x24, 0x08, 0x95, 0xb0, 0xcf, 0x3d, 0xee, 0x8f, 0xed, 0xf9, 0x85, 0x8b, 0xdb, 0xf3, 0x6b,
+ 0x5f, 0x87, 0x62, 0xa8, 0x17, 0xb2, 0x0a, 0x73, 0x47, 0x74, 0xa4, 0xcd, 0x0d, 0xe5, 0x4f, 0xf2,
+ 0x1c, 0xe4, 0x8f, 0x2d, 0x77, 0x68, 0x36, 0x15, 0xea, 0x87, 0xd7, 0xb3, 0x1b, 0x99, 0xea, 0x2f,
+ 0x33, 0x00, 0xdb, 0x96, 0xb0, 0x76, 0x1d, 0x57, 0xe8, 0x88, 0x62, 0x60, 0x89, 0x5e, 0x7a, 0x8b,
+ 0xee, 0x5b, 0xa2, 0x87, 0x0a, 0x43, 0x5e, 0x86, 0x9c, 0x90, 0xe9, 0x4c, 0x36, 0xe1, 0x65, 0x73,
+ 0x32, 0x71, 0x79, 0x7c, 0x52, 0x29, 0xdc, 0x6d, 0xee, 0x3d, 0x50, 0x49, 0x8d, 0xa2, 0x22, 0x95,
+ 0x40, 0xf0, 0x9c, 0x0a, 0xa7, 0x8b, 0xa7, 0x27, 0x95, 0xfc, 0xdb, 0x12, 0x60, 0xe6, 0x40, 0xde,
+ 0x00, 0xb0, 0xfd, 0xbe, 0x54, 0xa0, 0xf0, 0x99, 0x31, 0xb4, 0x1b, 0x81, 0x8e, 0xb7, 0x42, 0xcc,
+ 0xe3, 0xc4, 0x13, 0xc6, 0xc6, 0x28, 0x9f, 0x41, 0xfb, 0x03, 0xd7, 0x12, 0x54, 0x79, 0xf0, 0xb8,
+ 0xcf, 0x30, 0x70, 0x0c, 0x29, 0xaa, 0xff, 0x3e, 0x07, 0xa5, 0x9d, 0xbe, 0xe5, 0xb8, 0xc1, 0x0e,
+ 0x4d, 0x1a, 0x4c, 0xe6, 0xc2, 0x0d, 0xe6, 0x65, 0x28, 0x0c, 0x39, 0x65, 0x5e, 0x74, 0x44, 0x86,
+ 0xd3, 0x3f, 0x30, 0x70, 0x0c, 0x29, 0xc8, 0x1f, 0x40, 0x89, 0xf7, 0xc5, 0x60, 0xdf, 0xe2, 0xfc,
+ 0x91, 0xcf, 0xda, 0xd3, 0x6d, 0xfc, 0xd5, 0xd3, 0x93, 0x4a, 0xa9, 0x79, 0xbf, 0xb5, 0x1f, 0x0c,
+ 0xc7, 0x04, 0x33, 0xf9, 0xf2, 0x7b, 0x3e, 0x17, 0xe6, 0x2d, 0x84, 0x2f, 0xff, 0xb6, 0xcf, 0x05,
+ 0x2a, 0x8c, 0x32, 0x0f, 0x9f, 0x09, 0xa5, 0xe7, 0x7c, 0xcc, 0x3c, 0x7c, 0x26, 0x50, 0x61, 0xc8,
+ 0x35, 0xc8, 0x0a, 0x5f, 0xed, 0xbb, 0xa2, 0x4e, 0x67, 0x5a, 0x3e, 0x66, 0x85, 0xaf, 0x42, 0x55,
+ 0xe6, 0xf7, 0x4d, 0x16, 0x1c, 0x85, 0xaa, 0xcc, 0xef, 0xa3, 0xc2, 0xc8, 0x50, 0x95, 0x0f, 0x0f,
+ 0xdf, 0xa7, 0xb6, 0x48, 0x67, 0xbd, 0x4d, 0x0d, 0xc6, 0x00, 0x2f, 0x99, 0x1d, 0xfa, 0xed, 0x51,
+ 0xb9, 0x98, 0x64, 0xb6, 0xe9, 0xb7, 0x47, 0xa8, 0x30, 0xd5, 0x9f, 0x64, 0x20, 0xaf, 0xc2, 0x65,
+ 0xd2, 0x87, 0x05, 0xdb, 0xf7, 0x04, 0xfd, 0x40, 0x98, 0x93, 0x60, 0x86, 0x34, 0x49, 0x71, 0xdc,
+ 0xd2, 0xdc, 0x36, 0x17, 0xe5, 0xd4, 0xcc, 0x03, 0x06, 0x32, 0x64, 0xfa, 0xd8, 0xb6, 0x84, 0xa5,
+ 0x5e, 0x65, 0x49, 0xa7, 0x52, 0x72, 0x7b, 0xa1, 0x82, 0xbe, 0x5e, 0xf8, 0xab, 0xbf, 0xae, 0x5c,
+ 0xfa, 0xde, 0xbf, 0xde, 0xb8, 0x54, 0xfd, 0x55, 0x16, 0x4a, 0x71, 0x76, 0x64, 0x0d, 0xb2, 0x4e,
+ 0xdb, 0xec, 0x3b, 0x30, 0x2b, 0xca, 0xde, 0xd9, 0xc6, 0xac, 0xd3, 0x56, 0x87, 0x82, 0x4e, 0x32,
+ 0xb2, 0xc9, 0x5a, 0x4b, 0x2a, 0x0b, 0xff, 0x1a, 0x2c, 0x4a, 0x27, 0x78, 0x4c, 0x19, 0x97, 0x79,
+ 0xb8, 0x0e, 0xa0, 0xae, 0x18, 0xe2, 0x45, 0xe9, 0x20, 0xde, 0xd6, 0x28, 0x8c, 0xd3, 0x49, 0x75,
+ 0xaa, 0x2d, 0x9d, 0x7a, 0xef, 0xb1, 0x6d, 0x5c, 0x87, 0x15, 0x39, 0x7f, 0xb5, 0x48, 0x4f, 0x28,
+ 0x62, 0xbd, 0xd5, 0xbe, 0x60, 0x88, 0x57, 0xe4, 0x22, 0xb7, 0x34, 0x5a, 0x8d, 0x4b, 0xd3, 0xc7,
+ 0x5f, 0xef, 0xfc, 0x53, 0x5e, 0x6f, 0x03, 0x72, 0xf2, 0x8c, 0x37, 0x19, 0xd5, 0x57, 0x62, 0xc6,
+ 0x1d, 0x16, 0xe6, 0xa2, 0x77, 0xd4, 0xa7, 0xc2, 0x92, 0xe6, 0xae, 0x0e, 0xe5, 0x68, 0xee, 0xf2,
+ 0x58, 0x56, 0x5c, 0x62, 0x3a, 0xff, 0x28, 0x07, 0x2b, 0x4a, 0xe7, 0xdb, 0x74, 0x40, 0xbd, 0x36,
+ 0xf5, 0xec, 0x91, 0x5c, 0xbb, 0x17, 0x15, 0xe8, 0xc2, 0xf1, 0x2a, 0x50, 0x54, 0x18, 0xb9, 0x76,
+ 0x65, 0x17, 0x5a, 0xd7, 0xb1, 0x50, 0x36, 0x5c, 0xfb, 0x4e, 0x12, 0x8d, 0x69, 0x7a, 0x19, 0x05,
+ 0x28, 0xd0, 0xa4, 0xb0, 0x76, 0x27, 0x40, 0x60, 0x44, 0x43, 0x8e, 0x61, 0xa1, 0xa3, 0x1c, 0x32,
+ 0x37, 0x19, 0xd1, 0xde, 0x8c, 0x46, 0x1b, 0xad, 0x58, 0x3b, 0x7a, 0x6d, 0xbd, 0xfa, 0x37, 0xc7,
+ 0x40, 0x18, 0xf9, 0x7e, 0x06, 0x8a, 0x82, 0x59, 0x1e, 0xef, 0xf8, 0xac, 0x6f, 0xe2, 0xe1, 0xd6,
+ 0xb9, 0x89, 0x6e, 0x05, 0x9c, 0xa9, 0xc9, 0xda, 0x43, 0x00, 0x46, 0x52, 0x89, 0x03, 0xd7, 0xcc,
+ 0x74, 0x1a, 0x7e, 0xd7, 0xb1, 0x2d, 0x57, 0x97, 0x89, 0x7c, 0x66, 0xec, 0xe6, 0x55, 0xa3, 0xb9,
+ 0x6b, 0xbb, 0x13, 0xa9, 0x1e, 0x9f, 0x54, 0x56, 0x52, 0x20, 0x7c, 0x02, 0xc3, 0xea, 0xdf, 0xe5,
+ 0xe1, 0xea, 0x44, 0xf5, 0x90, 0x43, 0x63, 0x82, 0xda, 0x65, 0x6c, 0xcf, 0x70, 0x1e, 0x38, 0x7d,
+ 0x6a, 0x54, 0x5e, 0x48, 0x1a, 0x66, 0xdc, 0x33, 0x65, 0x2f, 0xc0, 0x33, 0x75, 0x8c, 0x67, 0xd2,
+ 0x25, 0xb5, 0x19, 0x96, 0x14, 0x85, 0x0b, 0xd1, 0x7e, 0x89, 0x7c, 0x1c, 0x71, 0x20, 0x4f, 0x3f,
+ 0x18, 0x30, 0x5d, 0x41, 0x9b, 0x49, 0xd0, 0xce, 0x07, 0x03, 0x66, 0x04, 0x2d, 0x19, 0x41, 0x79,
+ 0x09, 0xe3, 0xa8, 0x25, 0x90, 0xf7, 0xe0, 0x8a, 0x14, 0x99, 0xb6, 0x13, 0xed, 0x9a, 0x6a, 0x66,
+ 0xc8, 0x95, 0xed, 0x71, 0x92, 0x49, 0x46, 0x32, 0x89, 0x95, 0x94, 0x20, 0x45, 0x4d, 0xb6, 0xc4,
+ 0x50, 0xc2, 0xce, 0x38, 0xc9, 0x44, 0x09, 0x13, 0x58, 0x29, 0xdf, 0xae, 0x92, 0x51, 0x73, 0x34,
+ 0x46, 0xbe, 0x5d, 0x41, 0xd1, 0x60, 0xab, 0xef, 0xc1, 0xda, 0x93, 0xb7, 0x93, 0x3c, 0x3d, 0xde,
+ 0x7f, 0x98, 0x3e, 0x3d, 0xee, 0xbe, 0x85, 0xd9, 0xf7, 0x1f, 0xc6, 0x24, 0x64, 0x3f, 0x55, 0xc2,
+ 0x4f, 0x32, 0x00, 0x91, 0xca, 0xa5, 0x67, 0x94, 0xf3, 0x4d, 0x7b, 0x46, 0x49, 0x81, 0x0a, 0x43,
+ 0x3c, 0x98, 0xef, 0x38, 0xd4, 0x6d, 0xf3, 0x72, 0x56, 0xbd, 0xea, 0x19, 0xec, 0xd7, 0x04, 0xb4,
+ 0xbb, 0x92, 0x5d, 0x34, 0x41, 0xf5, 0xc8, 0xd1, 0x48, 0xa9, 0xbe, 0x02, 0xa5, 0x78, 0xa1, 0xf2,
+ 0xe9, 0xc1, 0x6a, 0xf5, 0xcf, 0xf3, 0xb0, 0x18, 0xab, 0xde, 0x91, 0x17, 0x75, 0x29, 0x53, 0x0f,
+ 0x58, 0x34, 0x03, 0xa2, 0x3a, 0xe4, 0xb7, 0x60, 0xd9, 0x76, 0x7d, 0x8f, 0x6e, 0x3b, 0x4c, 0x45,
+ 0x4c, 0x23, 0xa3, 0xb1, 0x6b, 0x86, 0x72, 0x79, 0x2b, 0x81, 0xc5, 0x14, 0x35, 0xb1, 0x21, 0x6f,
+ 0x33, 0xda, 0xe6, 0x26, 0x2c, 0xdb, 0x9c, 0xa9, 0xe4, 0xb8, 0x25, 0x39, 0xe9, 0x88, 0x59, 0xfd,
+ 0x44, 0xcd, 0x5b, 0x85, 0x80, 0xbc, 0xa7, 0xe2, 0x3a, 0x95, 0xfb, 0xe5, 0xa6, 0x0f, 0x01, 0x9b,
+ 0xb7, 0xc3, 0xe1, 0x98, 0x60, 0x26, 0xa3, 0xd1, 0x8e, 0xe3, 0x52, 0xa9, 0xc2, 0x74, 0x30, 0xbd,
+ 0x6b, 0xe0, 0x18, 0x52, 0x48, 0xcb, 0x3a, 0x64, 0x96, 0x67, 0xf7, 0xcc, 0x86, 0x08, 0x5f, 0xdc,
+ 0xa6, 0x82, 0xa2, 0xc1, 0x4a, 0xb5, 0x0b, 0xab, 0x6b, 0x0c, 0x3c, 0x54, 0x7b, 0xcb, 0xea, 0xa2,
+ 0x84, 0x4b, 0x34, 0xa3, 0x1d, 0x13, 0xf5, 0x85, 0x68, 0xa4, 0x1d, 0x94, 0x70, 0xd2, 0x87, 0x79,
+ 0x46, 0xfb, 0xbe, 0xa0, 0x2a, 0xde, 0x5b, 0xbc, 0x75, 0x67, 0x26, 0xb5, 0xa2, 0x62, 0x65, 0xea,
+ 0x35, 0xa0, 0x2f, 0xac, 0x24, 0x04, 0x8d, 0x10, 0xd2, 0x84, 0xab, 0x8e, 0xa7, 0xb3, 0xec, 0x3b,
+ 0x5d, 0xcf, 0x67, 0x54, 0xc6, 0xbf, 0xf7, 0xe8, 0xa8, 0x0c, 0x2a, 0x21, 0x7f, 0xd1, 0xcc, 0xef,
+ 0xea, 0x9d, 0x49, 0x44, 0x38, 0x79, 0x6c, 0xf5, 0xef, 0x33, 0x50, 0x08, 0xde, 0x29, 0xd9, 0x8b,
+ 0x85, 0xfc, 0x53, 0xd5, 0xdd, 0x4a, 0x4f, 0xc8, 0x0a, 0xf6, 0xa0, 0x30, 0x08, 0x32, 0x82, 0xec,
+ 0xd4, 0x0c, 0xc3, 0x6c, 0x20, 0x64, 0x52, 0x7d, 0x0b, 0x56, 0x52, 0xaa, 0x3a, 0x43, 0xa0, 0xf4,
+ 0x02, 0xe4, 0x86, 0xcc, 0xd5, 0xce, 0xc0, 0xdc, 0x9c, 0x1c, 0x60, 0xa3, 0x89, 0x0a, 0x5a, 0xfd,
+ 0x8f, 0x79, 0x58, 0xbc, 0xdd, 0x6a, 0xed, 0x07, 0x79, 0xd7, 0x53, 0xb6, 0x62, 0x2c, 0x8f, 0xce,
+ 0x5e, 0x60, 0xed, 0xcc, 0x54, 0x02, 0xe7, 0xce, 0xb9, 0x12, 0xf8, 0x12, 0xcc, 0xf7, 0xa9, 0xe8,
+ 0xf9, 0xed, 0xf4, 0x65, 0xe9, 0x7d, 0x05, 0x45, 0x83, 0x4d, 0x25, 0xa3, 0xf9, 0x0b, 0x4f, 0x46,
+ 0xbf, 0x0c, 0x0b, 0x32, 0x34, 0xf1, 0x87, 0x3a, 0x48, 0x9f, 0x8b, 0x34, 0xd5, 0xd2, 0x60, 0x0c,
+ 0xf0, 0xa4, 0x0b, 0xc5, 0x43, 0x8b, 0x3b, 0x76, 0x7d, 0x28, 0x7a, 0x26, 0x52, 0x9f, 0x5e, 0x5f,
+ 0x9b, 0x01, 0x07, 0x1d, 0x0f, 0x86, 0x8f, 0x18, 0xf1, 0x26, 0xdf, 0x85, 0x85, 0x1e, 0xb5, 0xda,
+ 0x52, 0x21, 0x05, 0xa5, 0x10, 0x7c, 0x76, 0x85, 0xc4, 0x0c, 0xb0, 0x76, 0x5b, 0x33, 0xd5, 0xa5,
+ 0xa4, 0xe8, 0x5a, 0x44, 0x43, 0x31, 0x90, 0x49, 0x8e, 0x61, 0x49, 0x6f, 0x68, 0x83, 0x29, 0x17,
+ 0xd5, 0x24, 0xbe, 0x39, 0xfd, 0x3d, 0x5f, 0x8c, 0xcb, 0xe6, 0xe5, 0xd3, 0x93, 0xca, 0x52, 0x1c,
+ 0xc2, 0x31, 0x29, 0x66, 0xed, 0x75, 0x28, 0xc5, 0x67, 0x38, 0x55, 0x51, 0xe7, 0xcf, 0xe6, 0xe0,
+ 0xf2, 0xbd, 0x8d, 0x66, 0x70, 0x97, 0xb4, 0xef, 0xbb, 0x8e, 0x3d, 0x22, 0x7f, 0x02, 0xf3, 0xae,
+ 0x75, 0x48, 0xdd, 0xa0, 0xca, 0xf1, 0xce, 0xb3, 0xeb, 0x71, 0x8c, 0x79, 0xad, 0xa1, 0x38, 0x6b,
+ 0x65, 0x86, 0xd6, 0xad, 0x81, 0x68, 0xc4, 0x92, 0x77, 0x61, 0xe1, 0xd0, 0xb2, 0x8f, 0xfc, 0x4e,
+ 0xc7, 0x78, 0xa9, 0x8d, 0x67, 0x30, 0x18, 0x35, 0x5e, 0x87, 0xb8, 0xe6, 0x01, 0x03, 0xae, 0xd2,
+ 0x75, 0x53, 0xc6, 0x7c, 0xb6, 0xe7, 0x19, 0x94, 0xb1, 0x5a, 0xb5, 0x9f, 0x63, 0xae, 0x7b, 0x67,
+ 0x12, 0x11, 0x4e, 0x1e, 0xbb, 0xf6, 0x0d, 0x58, 0x8c, 0x2d, 0x6e, 0xaa, 0xf7, 0xf0, 0xd3, 0x05,
+ 0x28, 0xdd, 0xb3, 0x3a, 0x47, 0xd6, 0x19, 0x9d, 0xde, 0x97, 0x20, 0xaf, 0xae, 0x36, 0x4c, 0xd8,
+ 0x11, 0x06, 0xbd, 0xea, 0xea, 0x03, 0x35, 0x4e, 0x26, 0x93, 0x03, 0x8b, 0x09, 0x55, 0x91, 0x56,
+ 0x0b, 0xcb, 0x47, 0xc9, 0xe4, 0x7e, 0x80, 0xc0, 0x88, 0x26, 0xe5, 0x54, 0x72, 0x17, 0xee, 0x54,
+ 0x36, 0xa0, 0xc4, 0xe8, 0xc3, 0xa1, 0xa3, 0x6e, 0xe5, 0x8e, 0xb8, 0x29, 0x1e, 0x85, 0xbd, 0x30,
+ 0x18, 0xc3, 0x61, 0x82, 0x52, 0x46, 0x23, 0xb6, 0xdf, 0x1f, 0x30, 0xca, 0xb9, 0xf2, 0x47, 0x85,
+ 0x28, 0x1a, 0xd9, 0x32, 0x70, 0x0c, 0x29, 0x64, 0xf4, 0xd6, 0x71, 0x87, 0xbc, 0xb7, 0x2b, 0x79,
+ 0xc8, 0x00, 0x59, 0xb9, 0xa5, 0x7c, 0x14, 0xbd, 0xed, 0x26, 0xb0, 0x98, 0xa2, 0x0e, 0x7c, 0x7f,
+ 0xe1, 0xb3, 0xbb, 0x05, 0x2a, 0x5e, 0xe0, 0x49, 0xf6, 0x4d, 0x58, 0x09, 0x4d, 0xc0, 0xf1, 0xba,
+ 0x41, 0x00, 0x53, 0xd4, 0xb7, 0xa6, 0xfb, 0x49, 0x14, 0xa6, 0x69, 0xe5, 0x49, 0x10, 0x94, 0x91,
+ 0x16, 0x93, 0xe5, 0x9a, 0xa0, 0x84, 0x14, 0xe0, 0xc9, 0xef, 0x41, 0x8e, 0x5b, 0xdc, 0x2d, 0x97,
+ 0x9e, 0xb5, 0x01, 0xa2, 0xde, 0x6c, 0x18, 0xcd, 0xa9, 0xa0, 0x41, 0x3e, 0xa3, 0x62, 0x49, 0xbe,
+ 0x9f, 0x81, 0x65, 0xdd, 0x76, 0x85, 0xb4, 0xeb, 0x70, 0xc1, 0x46, 0xe5, 0xa5, 0x69, 0x6f, 0xf3,
+ 0x03, 0x29, 0x09, 0x36, 0x46, 0x9e, 0xea, 0xc6, 0x49, 0x62, 0x30, 0x25, 0xb0, 0xba, 0x07, 0xd0,
+ 0xf0, 0xbb, 0xc1, 0x0e, 0xae, 0xc3, 0x8a, 0xe3, 0x09, 0xca, 0x8e, 0x2d, 0xb7, 0x49, 0x6d, 0xdf,
+ 0x6b, 0x73, 0xb5, 0x9b, 0x73, 0x51, 0x35, 0xe8, 0x4e, 0x12, 0x8d, 0x69, 0xfa, 0xea, 0xdf, 0xce,
+ 0xc1, 0xe2, 0x83, 0x7a, 0xab, 0x79, 0x46, 0xa7, 0x10, 0x2b, 0x9c, 0x65, 0x9f, 0x52, 0x38, 0x8b,
+ 0x99, 0xda, 0xdc, 0xe7, 0x76, 0xe1, 0x78, 0xf1, 0x0e, 0xe6, 0xb3, 0xb9, 0xbe, 0xad, 0xfe, 0x28,
+ 0x07, 0xab, 0x7b, 0x03, 0xea, 0xbd, 0xd3, 0x73, 0xf8, 0x51, 0xac, 0xe5, 0x42, 0xd5, 0xc8, 0x33,
+ 0x4f, 0xac, 0x91, 0xc7, 0x76, 0x4e, 0xf6, 0x29, 0x3b, 0x67, 0x1d, 0x8a, 0x32, 0x72, 0xe6, 0x03,
+ 0xcb, 0x1e, 0xab, 0x0b, 0x3e, 0x08, 0x10, 0x18, 0xd1, 0xa8, 0xe6, 0xc0, 0xa1, 0xe8, 0xb5, 0xfc,
+ 0x23, 0xea, 0x4d, 0x97, 0xf8, 0xe9, 0xe6, 0xc0, 0x60, 0x2c, 0x46, 0x6c, 0xc8, 0x2d, 0x00, 0x2b,
+ 0x6a, 0x54, 0xd4, 0x49, 0x5f, 0xa8, 0xf1, 0x7a, 0xd4, 0xa6, 0x18, 0xa3, 0xfa, 0x4d, 0xbd, 0xd9,
+ 0x46, 0x28, 0xc5, 0x0b, 0x15, 0x67, 0xb8, 0x2d, 0x0b, 0xb2, 0xa6, 0xec, 0x93, 0xb2, 0xa6, 0xea,
+ 0xff, 0x16, 0x61, 0x69, 0x7f, 0xe8, 0x72, 0x8b, 0x9d, 0x67, 0x90, 0xf0, 0x79, 0x77, 0xd1, 0xc5,
+ 0x0c, 0x24, 0x77, 0x81, 0x06, 0x32, 0x80, 0x2b, 0xc2, 0xe5, 0x2d, 0x36, 0xe4, 0x62, 0x8b, 0x32,
+ 0xc1, 0x4d, 0x89, 0x24, 0x3f, 0x75, 0x0f, 0x53, 0xab, 0xd1, 0x4c, 0x73, 0xc1, 0x49, 0xac, 0xc9,
+ 0x21, 0xac, 0x09, 0x97, 0xd7, 0x5d, 0xd7, 0x7f, 0x14, 0x14, 0x04, 0xa2, 0xc6, 0x18, 0x13, 0xb4,
+ 0x54, 0xcd, 0x7c, 0xd7, 0x5a, 0x8d, 0xe6, 0x13, 0x28, 0xf1, 0x53, 0xb8, 0x90, 0xfb, 0x6a, 0x55,
+ 0x6f, 0x5b, 0xae, 0xd3, 0xb6, 0x84, 0x2a, 0x29, 0x28, 0x9b, 0x5a, 0x50, 0xcc, 0xbf, 0x18, 0x14,
+ 0x21, 0x5b, 0x8d, 0x66, 0x9a, 0x04, 0x27, 0x8d, 0xfb, 0xac, 0xe2, 0x9c, 0x36, 0xac, 0x84, 0x4e,
+ 0xc5, 0xe8, 0xbd, 0x38, 0x75, 0x37, 0x57, 0x3d, 0xc9, 0x01, 0xd3, 0x2c, 0xc9, 0x77, 0xe1, 0x72,
+ 0xd4, 0x66, 0x64, 0x22, 0x75, 0x15, 0xd8, 0xcc, 0x92, 0x4d, 0x5c, 0x3d, 0x3d, 0xa9, 0x5c, 0xde,
+ 0x4a, 0xb3, 0xc5, 0x71, 0x49, 0xe4, 0x6f, 0x32, 0xb0, 0x2a, 0xa7, 0x54, 0x17, 0x3d, 0xea, 0x7d,
+ 0xa8, 0x4c, 0x92, 0x97, 0x17, 0x95, 0x85, 0x7f, 0x67, 0x86, 0xea, 0x67, 0x7c, 0xff, 0xd7, 0xea,
+ 0x29, 0xfe, 0x3a, 0xa9, 0x0a, 0xfb, 0x99, 0xd2, 0x68, 0x1c, 0x9b, 0x10, 0xe9, 0xc6, 0x27, 0x69,
+ 0xde, 0x45, 0x69, 0xea, 0x06, 0xaf, 0x7a, 0x8a, 0x05, 0x8e, 0x31, 0x5d, 0xdb, 0x82, 0xab, 0x13,
+ 0x67, 0x3b, 0x55, 0x96, 0xf4, 0xa7, 0x19, 0x28, 0xa2, 0x25, 0x68, 0xc3, 0xe9, 0x3b, 0x82, 0xdc,
+ 0x82, 0xdc, 0xd0, 0x73, 0x82, 0x03, 0xf6, 0x7a, 0xe0, 0x31, 0x0f, 0x3c, 0x47, 0x3c, 0x3e, 0xa9,
+ 0x2c, 0x87, 0x84, 0x54, 0x42, 0x50, 0xd1, 0xca, 0xa0, 0x4c, 0x45, 0xf1, 0x5c, 0xf0, 0x7d, 0xca,
+ 0x24, 0x42, 0x49, 0xc9, 0x47, 0x41, 0x19, 0x26, 0xd1, 0x98, 0xa6, 0xaf, 0xfe, 0x34, 0x0b, 0xf3,
+ 0x4d, 0xf5, 0x5a, 0xc8, 0x7b, 0x50, 0xe8, 0x53, 0x61, 0xa9, 0xcb, 0x12, 0x5d, 0x9e, 0x7b, 0xe5,
+ 0x6c, 0x57, 0x90, 0x7b, 0x2a, 0x0a, 0xbb, 0x4f, 0x85, 0x15, 0xf9, 0xc7, 0x08, 0x86, 0x21, 0x57,
+ 0xd2, 0x31, 0x9d, 0x31, 0xd9, 0x59, 0x6f, 0x97, 0xf4, 0x8c, 0x9b, 0x03, 0x6a, 0x4f, 0x6c, 0x86,
+ 0xf1, 0x60, 0x9e, 0x0b, 0x4b, 0x0c, 0xf9, 0xec, 0x1d, 0xc2, 0x46, 0x92, 0xe2, 0x16, 0xbb, 0x41,
+ 0x50, 0xcf, 0x68, 0xa4, 0x54, 0xff, 0x25, 0x03, 0xa0, 0x09, 0x1b, 0x0e, 0x17, 0xe4, 0x0f, 0xc7,
+ 0x14, 0x59, 0x3b, 0x9b, 0x22, 0xe5, 0x68, 0xa5, 0xc6, 0x30, 0xdd, 0x0b, 0x20, 0x31, 0x25, 0x52,
+ 0xc8, 0x3b, 0x82, 0xf6, 0x83, 0xcb, 0x87, 0x37, 0x66, 0x5d, 0x5b, 0x74, 0x92, 0xde, 0x91, 0x6c,
+ 0x51, 0x73, 0xaf, 0x7e, 0x3c, 0x1f, 0xac, 0x49, 0x2a, 0x96, 0xfc, 0x20, 0x03, 0xa5, 0x76, 0x70,
+ 0x05, 0xe3, 0xd0, 0xa0, 0x96, 0x72, 0xe7, 0xdc, 0x2e, 0x49, 0xa3, 0xc4, 0x78, 0x3b, 0x26, 0x06,
+ 0x13, 0x42, 0x89, 0x0f, 0x05, 0xa1, 0xbd, 0x45, 0xb0, 0xfc, 0xfa, 0xcc, 0xe7, 0x6b, 0xac, 0x6d,
+ 0xc6, 0xb0, 0xc6, 0x50, 0x08, 0x71, 0x63, 0x4d, 0x36, 0x33, 0x5f, 0x6e, 0x04, 0x6d, 0x39, 0xba,
+ 0xfc, 0x3c, 0xde, 0xa4, 0x43, 0xee, 0x02, 0x31, 0xb5, 0x98, 0x5d, 0xcb, 0x71, 0x69, 0x1b, 0xfd,
+ 0xa1, 0xa7, 0x4b, 0xa7, 0x85, 0xa8, 0x0b, 0x6d, 0x67, 0x8c, 0x02, 0x27, 0x8c, 0x22, 0x1b, 0x50,
+ 0x52, 0xf3, 0xd9, 0x1c, 0xf2, 0x58, 0x80, 0x1b, 0x2a, 0x79, 0x27, 0x86, 0xc3, 0x04, 0x25, 0xb9,
+ 0x09, 0x05, 0x46, 0x07, 0xae, 0x63, 0x5b, 0xba, 0xfa, 0x90, 0x0f, 0x3a, 0xb4, 0x35, 0x0c, 0x43,
+ 0x2c, 0x69, 0xc0, 0x73, 0x8c, 0x1e, 0x3b, 0x32, 0xa6, 0xbf, 0xed, 0x70, 0xe1, 0xb3, 0x91, 0x72,
+ 0x51, 0xa6, 0xfe, 0x50, 0x3e, 0x3d, 0xa9, 0x3c, 0x87, 0x13, 0xf0, 0x38, 0x71, 0x14, 0xf9, 0x71,
+ 0x06, 0x96, 0x5c, 0xbf, 0xdb, 0x75, 0xbc, 0xae, 0xbe, 0x00, 0x33, 0x75, 0xcf, 0x77, 0xce, 0xc3,
+ 0x4f, 0xd4, 0x1a, 0x71, 0xce, 0xfa, 0x68, 0xb9, 0x6a, 0x94, 0xb1, 0x94, 0xc0, 0x61, 0x72, 0x12,
+ 0x6b, 0x6f, 0x00, 0x19, 0x1f, 0x3b, 0x95, 0xa3, 0xf7, 0xa1, 0x14, 0x77, 0x23, 0xe4, 0xdd, 0xd0,
+ 0x3d, 0x69, 0xef, 0xf0, 0xf5, 0xe9, 0x93, 0xfa, 0x4f, 0xf7, 0x47, 0xdf, 0x81, 0xc5, 0xa6, 0x6b,
+ 0xd9, 0x47, 0x4d, 0xb9, 0x73, 0x58, 0xa2, 0xd5, 0x2a, 0xf3, 0xd4, 0x56, 0xab, 0x1b, 0x90, 0x73,
+ 0xec, 0x30, 0x89, 0x0b, 0xdd, 0xeb, 0x1d, 0xdb, 0xf7, 0x50, 0x61, 0xaa, 0xff, 0x94, 0x31, 0xfc,
+ 0x5b, 0x3d, 0x46, 0xad, 0x36, 0x69, 0xc2, 0xd5, 0x3e, 0xe5, 0xdc, 0xea, 0xd2, 0x7a, 0xb7, 0xcb,
+ 0x68, 0x57, 0x7d, 0x1d, 0x72, 0x2f, 0xd0, 0x4e, 0x54, 0x7e, 0xbc, 0x3f, 0x89, 0x08, 0x27, 0x8f,
+ 0x25, 0xef, 0xc2, 0xf3, 0x87, 0xcc, 0xb7, 0xda, 0xb6, 0x25, 0x3d, 0xa0, 0xa2, 0x68, 0xf9, 0x5b,
+ 0x3d, 0xcb, 0xf3, 0xa8, 0x6b, 0x7a, 0x44, 0xff, 0x9f, 0x61, 0xfc, 0xfc, 0xe6, 0x93, 0x08, 0xf1,
+ 0xc9, 0x3c, 0xaa, 0xff, 0x93, 0x83, 0x92, 0x5e, 0xc5, 0xaf, 0x49, 0x47, 0xdc, 0x01, 0x00, 0x57,
+ 0xf3, 0x51, 0x59, 0x6e, 0x76, 0xea, 0xd6, 0xd6, 0x66, 0x38, 0x18, 0x63, 0x8c, 0x64, 0x5e, 0x6e,
+ 0x1b, 0xb5, 0xcd, 0x25, 0xf3, 0xf2, 0x40, 0x49, 0x01, 0x5e, 0x92, 0x9a, 0x97, 0x61, 0xee, 0x6b,
+ 0x42, 0x52, 0xa3, 0x3d, 0x0c, 0xf0, 0xe4, 0x6b, 0xb0, 0x68, 0x09, 0x61, 0xd9, 0xbd, 0xbe, 0xd4,
+ 0x82, 0xf1, 0x2e, 0x61, 0xcb, 0x55, 0x3d, 0x42, 0x61, 0x9c, 0x4e, 0xdd, 0x9c, 0xba, 0xbe, 0x7d,
+ 0xc4, 0xc7, 0x6e, 0x4e, 0x15, 0x14, 0x0d, 0x96, 0xf4, 0x61, 0x5e, 0x28, 0xe3, 0x32, 0x57, 0x2c,
+ 0x33, 0x7c, 0xc5, 0x12, 0xb3, 0xd4, 0x48, 0x9c, 0x7e, 0x46, 0x23, 0x44, 0x8a, 0xe3, 0x6a, 0xaf,
+ 0x98, 0xec, 0x60, 0x56, 0x71, 0x7a, 0xe3, 0xc5, 0x9b, 0x98, 0xe5, 0x33, 0x1a, 0x21, 0xd5, 0xff,
+ 0x9a, 0x03, 0xd2, 0x14, 0x96, 0xd7, 0xb6, 0x58, 0xfb, 0xde, 0x46, 0xf3, 0xf3, 0xfa, 0x78, 0xed,
+ 0xc1, 0xf8, 0xc7, 0x6b, 0xaf, 0x4c, 0xfa, 0x78, 0xed, 0x8b, 0xf7, 0x86, 0x87, 0x94, 0x79, 0x54,
+ 0x50, 0x1e, 0xdc, 0x7e, 0xfc, 0x5a, 0x7e, 0xc2, 0xd6, 0x81, 0xa5, 0x81, 0x25, 0xec, 0x5e, 0x53,
+ 0x30, 0x4b, 0xd0, 0xee, 0xc8, 0x18, 0xf1, 0x1b, 0x81, 0x9b, 0xdf, 0x8f, 0x23, 0x1f, 0x9f, 0x54,
+ 0x7e, 0xeb, 0x49, 0x5f, 0xbe, 0x8a, 0xd1, 0x80, 0xf2, 0x9a, 0x22, 0x57, 0x4d, 0x7d, 0x49, 0xb6,
+ 0xe4, 0x16, 0x80, 0xeb, 0x1c, 0x53, 0x1d, 0xe2, 0x2a, 0xd3, 0x2f, 0x44, 0x73, 0x6b, 0x84, 0x18,
+ 0x8c, 0x51, 0x55, 0xd7, 0xa1, 0xa4, 0x9d, 0xb4, 0xb9, 0x94, 0xaa, 0x40, 0xde, 0x92, 0x69, 0xaf,
+ 0xf2, 0x33, 0x79, 0xdd, 0xee, 0xa0, 0xf2, 0x60, 0xd4, 0xf0, 0xea, 0x0f, 0x0b, 0x10, 0x86, 0x08,
+ 0xc4, 0x1e, 0x8b, 0x28, 0xa7, 0xff, 0xde, 0xea, 0xbe, 0x61, 0xa0, 0x4f, 0xf3, 0xe0, 0x29, 0x16,
+ 0x58, 0x9a, 0x1e, 0x78, 0xc7, 0xa6, 0x75, 0xdb, 0xf6, 0x87, 0xa6, 0x6d, 0x2f, 0x3b, 0xde, 0x03,
+ 0x9f, 0xa4, 0xc0, 0x09, 0xa3, 0xc8, 0x5d, 0xf5, 0x65, 0x9b, 0xb0, 0xa4, 0x4e, 0x4d, 0xe0, 0xf4,
+ 0xe2, 0x13, 0xbe, 0x6c, 0xd3, 0x44, 0xe1, 0xe7, 0x6c, 0xfa, 0x11, 0xa3, 0xe1, 0x64, 0x07, 0x16,
+ 0x8e, 0x7d, 0x77, 0xd8, 0xa7, 0x41, 0x8d, 0x75, 0x6d, 0x12, 0xa7, 0xb7, 0x15, 0x49, 0xac, 0xe8,
+ 0xa8, 0x87, 0x60, 0x30, 0x96, 0x50, 0x58, 0x51, 0x15, 0x06, 0x47, 0x8c, 0x4c, 0x8f, 0x98, 0xa9,
+ 0x8f, 0xbc, 0x34, 0x89, 0xdd, 0xbe, 0xdf, 0x6e, 0x26, 0xa9, 0xcd, 0x67, 0x57, 0x49, 0x20, 0xa6,
+ 0x79, 0x92, 0x8f, 0x32, 0x50, 0xf2, 0xfc, 0x36, 0x0d, 0x7c, 0xb3, 0x29, 0x14, 0xb6, 0x66, 0x0f,
+ 0x1b, 0x6b, 0x0f, 0x62, 0x6c, 0x75, 0x04, 0x13, 0x86, 0x73, 0x71, 0x14, 0x26, 0xe4, 0x93, 0x03,
+ 0x58, 0x14, 0xbe, 0x6b, 0xf6, 0x68, 0x50, 0x3d, 0xbc, 0x3e, 0x69, 0xcd, 0xad, 0x90, 0x2c, 0xf2,
+ 0xe4, 0x11, 0x8c, 0x63, 0x9c, 0x0f, 0xf1, 0x60, 0xd5, 0xe9, 0x5b, 0x5d, 0xba, 0x3f, 0x74, 0x5d,
+ 0x7d, 0x20, 0x05, 0xf1, 0xda, 0xc4, 0x4f, 0x18, 0xa5, 0x23, 0x72, 0xcd, 0xbe, 0xa0, 0x1d, 0xca,
+ 0xa8, 0x67, 0xd3, 0x28, 0xb7, 0xbf, 0x93, 0xe2, 0x84, 0x63, 0xbc, 0xc9, 0x9b, 0x70, 0x79, 0xc0,
+ 0x1c, 0x5f, 0xa9, 0xda, 0xb5, 0xb8, 0x0e, 0x6a, 0x75, 0x23, 0xf4, 0xf3, 0x86, 0xcd, 0xe5, 0xfd,
+ 0x34, 0x01, 0x8e, 0x8f, 0x91, 0xe1, 0x6d, 0x00, 0x54, 0x05, 0x14, 0x13, 0xde, 0x06, 0x63, 0x31,
+ 0xc4, 0x92, 0x5d, 0x28, 0x58, 0x9d, 0x8e, 0xe3, 0x49, 0xca, 0x45, 0x65, 0x2a, 0x2f, 0x4c, 0x5a,
+ 0x5a, 0xdd, 0xd0, 0x68, 0x3e, 0xc1, 0x13, 0x86, 0x63, 0xd7, 0xbe, 0x0d, 0x97, 0xc7, 0x5e, 0xdd,
+ 0x54, 0x01, 0x64, 0x13, 0x20, 0xea, 0xa7, 0x24, 0x5f, 0x82, 0x3c, 0x17, 0x16, 0x0b, 0x4a, 0x05,
+ 0x61, 0xfa, 0xd6, 0x94, 0x40, 0xd4, 0x38, 0x19, 0xc5, 0x71, 0xe1, 0x0f, 0xd2, 0x51, 0x5c, 0x53,
+ 0xf8, 0x03, 0x54, 0x98, 0xea, 0xe3, 0x3c, 0x2c, 0x04, 0x27, 0x0f, 0x8f, 0xa5, 0x39, 0x99, 0x59,
+ 0x9b, 0x8d, 0x0c, 0xd3, 0xa7, 0x66, 0x3b, 0xc9, 0xe3, 0x22, 0x7b, 0xe1, 0xc7, 0xc5, 0x11, 0xcc,
+ 0x0f, 0x94, 0x33, 0x36, 0x0e, 0xea, 0xcd, 0xd9, 0x65, 0x2b, 0x76, 0xfa, 0xac, 0xd5, 0xbf, 0xd1,
+ 0x88, 0x20, 0x0f, 0x61, 0x89, 0x51, 0xc1, 0x46, 0x89, 0xb3, 0x69, 0x96, 0xda, 0x9d, 0xea, 0xa4,
+ 0xc0, 0x38, 0x4b, 0x4c, 0x4a, 0x20, 0x03, 0x28, 0xb2, 0xa0, 0x6a, 0x64, 0x5c, 0xdd, 0xd6, 0xb3,
+ 0x2f, 0x31, 0x2c, 0x40, 0x69, 0x4f, 0x1d, 0x3e, 0x62, 0x24, 0x44, 0x07, 0x85, 0x0d, 0x6a, 0x71,
+ 0xb1, 0xe7, 0xd9, 0xd4, 0x54, 0x81, 0x63, 0x41, 0x61, 0x88, 0xc2, 0x38, 0x1d, 0x79, 0x08, 0xd0,
+ 0x76, 0x1f, 0x1a, 0x1d, 0x9a, 0x80, 0xef, 0x1c, 0xf2, 0x7a, 0x15, 0x14, 0x6f, 0x87, 0x8c, 0x31,
+ 0x26, 0xa4, 0xfa, 0x9f, 0x19, 0x58, 0x4d, 0x1b, 0x0c, 0x39, 0x82, 0x39, 0xce, 0x6c, 0xb3, 0x01,
+ 0xf6, 0xcf, 0xcf, 0x12, 0x75, 0xd8, 0xa5, 0xcb, 0xc6, 0x4d, 0x66, 0xa3, 0x94, 0x22, 0x37, 0x68,
+ 0x9b, 0x72, 0x91, 0xde, 0xa0, 0xdb, 0x94, 0x0b, 0x54, 0x18, 0xd2, 0x88, 0x87, 0x67, 0x73, 0x89,
+ 0xce, 0xdb, 0x44, 0x78, 0xf6, 0x7c, 0x5a, 0xde, 0xa4, 0xe0, 0xac, 0xfa, 0xc3, 0x39, 0xb8, 0x36,
+ 0x79, 0x62, 0xe4, 0x5b, 0xb0, 0x1c, 0x56, 0x59, 0x46, 0xb1, 0xbf, 0xed, 0x08, 0x1b, 0x08, 0xb6,
+ 0x13, 0x58, 0x4c, 0x51, 0xcb, 0x78, 0xc8, 0x34, 0x5b, 0x07, 0xff, 0xdd, 0x11, 0xbb, 0x49, 0xdb,
+ 0x0a, 0x31, 0x18, 0xa3, 0x22, 0x75, 0x58, 0x31, 0x4f, 0xad, 0x78, 0x7d, 0x25, 0xf6, 0x75, 0xc1,
+ 0x56, 0x12, 0x8d, 0x69, 0x7a, 0x99, 0xad, 0xc8, 0xb8, 0x25, 0xf8, 0x7c, 0x3a, 0x96, 0xad, 0x6c,
+ 0x6b, 0x30, 0x06, 0x78, 0xb2, 0x01, 0x25, 0xf9, 0xb3, 0x95, 0xfc, 0x5e, 0x2a, 0xaa, 0x38, 0xc5,
+ 0x70, 0x98, 0xa0, 0x8c, 0x3e, 0xe4, 0xd2, 0xf9, 0xca, 0xf8, 0x87, 0x5c, 0xb7, 0x00, 0x86, 0x9c,
+ 0xa2, 0xf5, 0x48, 0x32, 0x31, 0x77, 0x13, 0xe1, 0xe2, 0x0f, 0x42, 0x0c, 0xc6, 0xa8, 0xaa, 0xbf,
+ 0xc8, 0xc0, 0x52, 0xc2, 0x65, 0x90, 0x0e, 0xcc, 0x1d, 0x6d, 0x04, 0xf5, 0x80, 0x7b, 0xe7, 0xd8,
+ 0xa0, 0xa4, 0xad, 0xee, 0xde, 0x06, 0x47, 0x29, 0x80, 0xbc, 0x1f, 0x96, 0x1e, 0x66, 0x6e, 0xbd,
+ 0x8f, 0x87, 0xb3, 0x26, 0xbd, 0x48, 0x56, 0x21, 0xfe, 0x79, 0x19, 0x56, 0x52, 0x67, 0xc1, 0x19,
+ 0xba, 0x29, 0xb5, 0x31, 0x99, 0x0f, 0x4f, 0x27, 0x18, 0x53, 0xf0, 0x49, 0x6a, 0x8c, 0x8a, 0x74,
+ 0xb5, 0xf6, 0xb4, 0x1b, 0x6f, 0xcc, 0xb4, 0xa4, 0x54, 0x4e, 0x96, 0x52, 0xdf, 0x0f, 0x32, 0x50,
+ 0xb2, 0x62, 0xff, 0xe4, 0x61, 0xbc, 0xf8, 0xfd, 0x59, 0x12, 0xb5, 0xb1, 0x3f, 0x31, 0xd1, 0xcd,
+ 0xca, 0x71, 0x04, 0x26, 0x84, 0x12, 0x1b, 0x72, 0x3d, 0x21, 0x82, 0x7f, 0x8c, 0xd8, 0x39, 0x97,
+ 0xb6, 0x40, 0xdd, 0x82, 0x22, 0x01, 0xa8, 0x98, 0x93, 0x47, 0x50, 0xb4, 0x1e, 0x71, 0xfd, 0xef,
+ 0x3e, 0xe6, 0xaf, 0x24, 0x66, 0xc9, 0x47, 0x53, 0x7f, 0x14, 0x64, 0xee, 0xe5, 0x03, 0x28, 0x46,
+ 0xb2, 0x08, 0x83, 0x79, 0x5b, 0x7d, 0xf8, 0x6a, 0x4e, 0x82, 0x37, 0xcf, 0xe9, 0x03, 0x5a, 0x7d,
+ 0x62, 0x26, 0x40, 0x68, 0x24, 0x91, 0x2e, 0xe4, 0x8f, 0xac, 0xce, 0x91, 0x65, 0xd2, 0xff, 0x19,
+ 0x76, 0x45, 0xbc, 0xed, 0x4d, 0x7b, 0x0b, 0x05, 0x41, 0xcd, 0x5f, 0xbe, 0x3a, 0xcf, 0x12, 0xdc,
+ 0xdc, 0x10, 0xce, 0xf0, 0xea, 0x62, 0x8d, 0x34, 0xfa, 0xd5, 0x49, 0x00, 0x2a, 0xe6, 0x72, 0x35,
+ 0xaa, 0xfe, 0x63, 0xee, 0x07, 0x77, 0x67, 0xad, 0x9d, 0xc4, 0x57, 0xa3, 0x20, 0xa8, 0xf9, 0x4b,
+ 0x1b, 0xf1, 0x83, 0x46, 0x11, 0x13, 0x21, 0xcf, 0x60, 0x23, 0xe9, 0x9e, 0x13, 0x6d, 0x23, 0x21,
+ 0x14, 0x23, 0x59, 0xe4, 0x5d, 0x98, 0x73, 0xfd, 0xae, 0xb9, 0xdb, 0x9b, 0xe1, 0x1e, 0x29, 0x6a,
+ 0x70, 0xd2, 0x1b, 0xbd, 0xe1, 0x77, 0x51, 0x72, 0x26, 0x7f, 0x91, 0x81, 0x65, 0x2b, 0xf1, 0xdf,
+ 0x23, 0xa6, 0x01, 0x6b, 0x86, 0x0f, 0xd2, 0x26, 0xfe, 0x97, 0x89, 0x6e, 0xc5, 0x4a, 0xa2, 0x30,
+ 0x25, 0x5a, 0x45, 0xaa, 0xea, 0xaa, 0xb4, 0xbc, 0x3c, 0xeb, 0x96, 0x48, 0x5c, 0xb9, 0x9a, 0x48,
+ 0x55, 0x81, 0xd0, 0x88, 0x20, 0x3f, 0xce, 0xa8, 0xa3, 0x39, 0xfe, 0xe9, 0x7f, 0x79, 0x65, 0xe6,
+ 0x4f, 0xd9, 0x27, 0xff, 0x5d, 0x41, 0xe2, 0xb4, 0x8f, 0x13, 0x60, 0x7a, 0x0a, 0xe4, 0x47, 0x19,
+ 0x58, 0xb1, 0x92, 0xff, 0xeb, 0x51, 0x5e, 0x9d, 0x35, 0x52, 0x9b, 0xfc, 0x47, 0x21, 0xe6, 0x4a,
+ 0x3e, 0x89, 0xc3, 0xb4, 0x74, 0xb9, 0xcd, 0x68, 0xdf, 0x72, 0xdc, 0xf2, 0xe5, 0x99, 0xbf, 0x62,
+ 0x8b, 0x7d, 0x98, 0xad, 0xb7, 0x99, 0x82, 0xa0, 0xe6, 0x5f, 0xb5, 0x61, 0x31, 0xf6, 0x1f, 0x42,
+ 0x67, 0xe8, 0xbe, 0xb9, 0x05, 0x70, 0x4c, 0x99, 0xd3, 0x19, 0x6d, 0x51, 0x26, 0x4c, 0xb1, 0x3c,
+ 0x3c, 0x43, 0xdf, 0x0e, 0x31, 0x18, 0xa3, 0xda, 0xfc, 0xa3, 0x8f, 0x3f, 0xb9, 0x7e, 0xe9, 0x67,
+ 0x9f, 0x5c, 0xbf, 0xf4, 0xf3, 0x4f, 0xae, 0x5f, 0xfa, 0xde, 0xe9, 0xf5, 0xcc, 0xc7, 0xa7, 0xd7,
+ 0x33, 0x3f, 0x3b, 0xbd, 0x9e, 0xf9, 0xf9, 0xe9, 0xf5, 0xcc, 0xbf, 0x9d, 0x5e, 0xcf, 0xfc, 0xe5,
+ 0x2f, 0xae, 0x5f, 0xfa, 0xfd, 0x8d, 0x67, 0xfd, 0xaf, 0xbe, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff,
+ 0xd6, 0x34, 0xf1, 0x6f, 0xe6, 0x4f, 0x00, 0x00,
}
func (m *AWSLambdaTrigger) Marshal() (dAtA []byte, err error) {
@@ -4433,6 +4434,18 @@ func (m *Trigger) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ if m.DlqTrigger != nil {
+ {
+ size, err := m.DlqTrigger.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ }
i--
if m.AtLeastOnce {
dAtA[i] = 1
@@ -5978,6 +5991,10 @@ func (m *Trigger) Size() (n int) {
n += 1 + l + sovGenerated(uint64(l))
}
n += 2
+ if m.DlqTrigger != nil {
+ l = m.DlqTrigger.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
return n
}
@@ -6897,6 +6914,7 @@ func (this *Trigger) String() string {
`RetryStrategy:` + strings.Replace(fmt.Sprintf("%v", this.RetryStrategy), "Backoff", "common.Backoff", 1) + `,`,
`RateLimit:` + strings.Replace(this.RateLimit.String(), "RateLimit", "RateLimit", 1) + `,`,
`AtLeastOnce:` + fmt.Sprintf("%v", this.AtLeastOnce) + `,`,
+ `DlqTrigger:` + strings.Replace(this.DlqTrigger.String(), "Trigger", "Trigger", 1) + `,`,
`}`,
}, "")
return s
@@ -16129,6 +16147,42 @@ func (m *Trigger) Unmarshal(dAtA []byte) error {
}
}
m.AtLeastOnce = bool(v != 0)
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DlqTrigger", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.DlqTrigger == nil {
+ m.DlqTrigger = &Trigger{}
+ }
+ if err := m.DlqTrigger.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
diff --git a/pkg/apis/sensor/v1alpha1/generated.proto b/pkg/apis/sensor/v1alpha1/generated.proto
index b44ad7044a..83e4721f46 100644
--- a/pkg/apis/sensor/v1alpha1/generated.proto
+++ b/pkg/apis/sensor/v1alpha1/generated.proto
@@ -938,6 +938,14 @@ message Trigger {
// +kubebuilder:default=false
// +optional
optional bool atLeastOnce = 6;
+
+ // If the trigger fails, it will retry up to the configured number of
+ // retries. If the maximum retries are reached and the trigger is set to
+ // execute atLeastOnce, the dead letter queue (DLQ) trigger will be invoked if
+ // specified. Invoking the dead letter queue trigger helps prevent data
+ // loss.
+ // +optional
+ optional Trigger dlqTrigger = 7;
}
// TriggerParameter indicates a passed parameter to a service template
diff --git a/pkg/apis/sensor/v1alpha1/openapi_generated.go b/pkg/apis/sensor/v1alpha1/openapi_generated.go
index 87c02b804f..17cf1a9227 100644
--- a/pkg/apis/sensor/v1alpha1/openapi_generated.go
+++ b/pkg/apis/sensor/v1alpha1/openapi_generated.go
@@ -2441,11 +2441,17 @@ func schema_pkg_apis_sensor_v1alpha1_Trigger(ref common.ReferenceCallback) commo
Format: "",
},
},
+ "dlqTrigger": {
+ SchemaProps: spec.SchemaProps{
+ Description: "If the trigger fails, it will retry up to the configured number of retries. If the maximum retries are reached and the trigger is set to execute atLeastOnce, the dead letter queue (DLQ) trigger will be invoked if specified. Invoking the dead letter queue trigger helps prevent data loss.",
+ Ref: ref("github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.Trigger"),
+ },
+ },
},
},
},
Dependencies: []string{
- "github.com/argoproj/argo-events/pkg/apis/common.Backoff", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.RateLimit", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.TriggerParameter", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.TriggerPolicy", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.TriggerTemplate"},
+ "github.com/argoproj/argo-events/pkg/apis/common.Backoff", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.RateLimit", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.Trigger", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.TriggerParameter", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.TriggerPolicy", "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1.TriggerTemplate"},
}
}
diff --git a/pkg/apis/sensor/v1alpha1/types.go b/pkg/apis/sensor/v1alpha1/types.go
index fdfd9016b9..952fcba6df 100644
--- a/pkg/apis/sensor/v1alpha1/types.go
+++ b/pkg/apis/sensor/v1alpha1/types.go
@@ -336,6 +336,13 @@ type Trigger struct {
// +kubebuilder:default=false
// +optional
AtLeastOnce bool `json:"atLeastOnce,omitempty" protobuf:"varint,6,opt,name=atLeastOnce"`
+ // If the trigger fails, it will retry up to the configured number of
+ // retries. If the maximum retries are reached and the trigger is set to
+ // execute atLeastOnce, the dead letter queue (DLQ) trigger will be invoked if
+ // specified. Invoking the dead letter queue trigger helps prevent data
+ // loss.
+ // +optional
+ DlqTrigger *Trigger `json:"dlqTrigger,omitempty" protobuf:"bytes,7,opt,name=dlqTrigger"`
}
type RateLimiteUnit string
diff --git a/pkg/apis/sensor/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/sensor/v1alpha1/zz_generated.deepcopy.go
index 2f76878edd..1e7ed873fd 100644
--- a/pkg/apis/sensor/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/sensor/v1alpha1/zz_generated.deepcopy.go
@@ -1279,6 +1279,11 @@ func (in *Trigger) DeepCopyInto(out *Trigger) {
*out = new(RateLimit)
**out = **in
}
+ if in.DlqTrigger != nil {
+ in, out := &in.DlqTrigger, &out.DlqTrigger
+ *out = new(Trigger)
+ (*in).DeepCopyInto(*out)
+ }
return
}
diff --git a/sensors/listener.go b/sensors/listener.go
index 81dc35c225..5065d7136f 100644
--- a/sensors/listener.go
+++ b/sensors/listener.go
@@ -221,6 +221,22 @@ func (sensorCtx *SensorContext) listenEvents(ctx context.Context) error {
if err != nil {
triggerLogger.Warnf("failed to trigger actions, %v", err)
sensorCtx.metrics.ActionRetriesFailed(sensor.Name, trigger.Template.Name)
+ if trigger.DlqTrigger != nil {
+ dlqRetryStrategy := trigger.DlqTrigger.RetryStrategy
+ if dlqRetryStrategy == nil {
+ dlqRetryStrategy = &apicommon.Backoff{Steps: 1}
+ }
+
+ triggerLogger.Debugf("invoking dlqTrigger")
+ dlqErr := common.DoWithRetry(dlqRetryStrategy, func() error {
+ return sensorCtx.triggerActions(ctx, sensor, events, *trigger.DlqTrigger)
+ })
+
+ if dlqErr != nil {
+ triggerLogger.Errorf("failed to trigger dlqTrigger, %v", dlqErr)
+ sensorCtx.metrics.ActionRetriesFailed(sensor.Name, trigger.DlqTrigger.Template.Name)
+ }
+ }
}
}