diff --git a/builder/linode/config.go b/builder/linode/config.go
index fd4233827..548be2bc7 100644
--- a/builder/linode/config.go
+++ b/builder/linode/config.go
@@ -34,8 +34,6 @@ type Config struct {
RootSSHKey string `mapstructure:"root_ssh_key"`
ImageLabel string `mapstructure:"image_label"`
Description string `mapstructure:"image_description"`
-
- interCtx interpolate.Context
}
func createRandomRootPassword() (string, error) {
@@ -130,7 +128,7 @@ func (c *Config) Prepare(raws ...interface{}) ([]string, error) {
for _, t := range c.Tags {
if !tagRe.MatchString(t) {
- errs = packer.MultiErrorAppend(errs, errors.New(fmt.Sprintf("invalid tag: %s", t)))
+ errs = packer.MultiErrorAppend(errs, fmt.Errorf("invalid tag: %s", t))
}
}
diff --git a/go.mod b/go.mod
index 4af1d1c03..712d5ad24 100644
--- a/go.mod
+++ b/go.mod
@@ -34,7 +34,6 @@ require (
github.com/digitalocean/go-libvirt v0.0.0-20190626172931-4d226dd6c437 // indirect
github.com/digitalocean/go-qemu v0.0.0-20181112162955-dd7bb9c771b8
github.com/digitalocean/godo v1.11.1
- github.com/dnaeon/go-vcr v1.0.1 // indirect
github.com/docker/docker v0.0.0-20180422163414-57142e89befe // indirect
github.com/dustin/go-humanize v1.0.0 // indirect
github.com/dylanmei/iso8601 v0.1.0 // indirect
@@ -45,6 +44,7 @@ require (
github.com/ghodss/yaml v1.0.0 // indirect
github.com/go-ini/ini v1.25.4
github.com/go-ole/go-ole v1.2.4 // indirect
+ github.com/go-resty/resty/v2 v2.3.0 // indirect
github.com/gobwas/glob v0.2.3
github.com/gocolly/colly v1.2.0
github.com/gofrs/flock v0.7.1
@@ -92,7 +92,7 @@ require (
github.com/klauspost/crc32 v0.0.0-20160114101742-999f3125931f // indirect
github.com/klauspost/pgzip v0.0.0-20151221113845-47f36e165cec
github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169 // indirect
- github.com/linode/linodego v0.7.1
+ github.com/linode/linodego v0.14.0
github.com/masterzen/azure-sdk-for-go v0.0.0-20161014135628-ee4f0065d00c // indirect
github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 // indirect
github.com/masterzen/winrm v0.0.0-20180224160350-7e40f93ae939
@@ -102,6 +102,7 @@ require (
github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/go-testing-interface v1.0.3 // indirect
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed
+ github.com/mitchellh/gox v1.0.1 // indirect
github.com/mitchellh/iochan v1.0.0
github.com/mitchellh/mapstructure v1.2.3
github.com/mitchellh/panicwrap v0.0.0-20170106182340-fce601fe5557
@@ -145,7 +146,7 @@ require (
github.com/zclconf/go-cty-yaml v1.0.1
golang.org/x/crypto v0.0.0-20200422194213-44a606286825
golang.org/x/mobile v0.0.0-20191130191448-5c0e7e404af8
- golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
+ golang.org/x/net v0.0.0-20200602114024-627f9648deb9
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd
diff --git a/go.sum b/go.sum
index 064612257..3ab49a66a 100644
--- a/go.sum
+++ b/go.sum
@@ -205,6 +205,10 @@ github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3I
github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
+github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48 h1:JVrqSeQfdhYRFk24TvhTZWU0q8lfCojxZQFi3Ou7+uY=
+github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8=
+github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So=
+github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
@@ -343,6 +347,7 @@ github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go-version v1.1.0 h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0=
github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E=
@@ -429,6 +434,8 @@ github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3v
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
github.com/linode/linodego v0.7.1 h1:4WZmMpSA2NRwlPZcc0+4Gyn7rr99Evk9bnr0B3gXRKE=
github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZinAbj2sY=
+github.com/linode/linodego v0.14.0 h1:0APKMjiVGyry2TTUVDiok72H6cWpFNMMrFWBFn14aFU=
+github.com/linode/linodego v0.14.0/go.mod h1:2ce3S00NrDqJfp4i55ZuSlT0U3cKNELNYACWBPI8Tnw=
github.com/masterzen/azure-sdk-for-go v0.0.0-20161014135628-ee4f0065d00c h1:FMUOnVGy8nWk1cvlMCAoftRItQGMxI0vzJ3dQjeZTCE=
github.com/masterzen/azure-sdk-for-go v0.0.0-20161014135628-ee4f0065d00c/go.mod h1:mf8fjOu33zCqxUjuiU3I8S1lJMyEAlH+0F2+M5xl3hE=
github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 h1:2ZKn+w/BJeL43sCxI2jhPLRv73oVVOjEKZjKkflyqxg=
@@ -482,6 +489,8 @@ github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZX
github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4=
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
+github.com/mitchellh/gox v1.0.1 h1:x0jD3dcHk9a9xPSDN6YEL4xL6Qz0dvNYm8yZqui5chI=
+github.com/mitchellh/gox v1.0.1/go.mod h1:ED6BioOGXMswlXa2zxfh/xdd5QhwYliBFn9V18Ap4z4=
github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
@@ -707,6 +716,7 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -715,6 +725,9 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM=
+golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -904,6 +917,7 @@ gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4=
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
diff --git a/vendor/gopkg.in/resty.v1/.gitignore b/vendor/github.com/go-resty/resty/v2/.gitignore
similarity index 88%
rename from vendor/gopkg.in/resty.v1/.gitignore
rename to vendor/github.com/go-resty/resty/v2/.gitignore
index 8aa2df43d..54910a04a 100644
--- a/vendor/gopkg.in/resty.v1/.gitignore
+++ b/vendor/github.com/go-resty/resty/v2/.gitignore
@@ -26,3 +26,6 @@ _testmain.go
coverage.out
coverage.txt
go.sum
+
+# Exclude intellij IDE folders
+.idea/*
\ No newline at end of file
diff --git a/vendor/gopkg.in/resty.v1/.travis.yml b/vendor/github.com/go-resty/resty/v2/.travis.yml
similarity index 50%
rename from vendor/gopkg.in/resty.v1/.travis.yml
rename to vendor/github.com/go-resty/resty/v2/.travis.yml
index d11002900..fa1ce907d 100644
--- a/vendor/gopkg.in/resty.v1/.travis.yml
+++ b/vendor/github.com/go-resty/resty/v2/.travis.yml
@@ -2,23 +2,16 @@ language: go
sudo: false
-go:
-# - 1.3
-# - 1.4
-# - 1.5
-# - 1.6
-# - 1.7
-# - 1.8.x
-# - 1.9.x
- - 1.10.x
- - 1.11.x
+go: # use travis ci resource effectively, keep always latest 2 versions and tip :)
+ - 1.14.x
+ - 1.13.x
- tip
install:
- go get -v -t ./...
script:
- - go test ./... -coverprofile=coverage.txt -covermode=atomic
+ - go test ./... -race -coverprofile=coverage.txt -covermode=atomic
after_success:
- bash <(curl -s https://codecov.io/bash)
diff --git a/vendor/gopkg.in/resty.v1/BUILD.bazel b/vendor/github.com/go-resty/resty/v2/BUILD.bazel
similarity index 83%
rename from vendor/gopkg.in/resty.v1/BUILD.bazel
rename to vendor/github.com/go-resty/resty/v2/BUILD.bazel
index 698c326c5..6c47cbbbf 100644
--- a/vendor/gopkg.in/resty.v1/BUILD.bazel
+++ b/vendor/github.com/go-resty/resty/v2/BUILD.bazel
@@ -6,7 +6,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
gazelle(
name = "gazelle",
command = "fix",
- prefix = "gopkg.in/resty.v1",
+ prefix = "github.com/go-resty/resty/v2",
)
go_library(
@@ -15,7 +15,7 @@ go_library(
["*.go"],
exclude = ["*_test.go"],
),
- importpath = "gopkg.in/resty.v1",
+ importpath = "github.com/go-resty/resty/v2",
visibility = ["//visibility:public"],
deps = ["@org_golang_x_net//publicsuffix:go_default_library"],
)
@@ -29,7 +29,7 @@ go_test(
),
data = glob([".testdata/*"]),
embed = [":go_default_library"],
- importpath = "gopkg.in/resty.v1",
+ importpath = "github.com/go-resty/resty/v2",
deps = [
"@org_golang_x_net//proxy:go_default_library",
],
diff --git a/vendor/gopkg.in/resty.v1/LICENSE b/vendor/github.com/go-resty/resty/v2/LICENSE
similarity index 94%
rename from vendor/gopkg.in/resty.v1/LICENSE
rename to vendor/github.com/go-resty/resty/v2/LICENSE
index 5cf0a2f99..c9ae93e39 100644
--- a/vendor/gopkg.in/resty.v1/LICENSE
+++ b/vendor/github.com/go-resty/resty/v2/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2015-2019 Jeevanandam M., https://myjeeva.com
+Copyright (c) 2015-2020 Jeevanandam M., https://myjeeva.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/gopkg.in/resty.v1/README.md b/vendor/github.com/go-resty/resty/v2/README.md
similarity index 66%
rename from vendor/gopkg.in/resty.v1/README.md
rename to vendor/github.com/go-resty/resty/v2/README.md
index 8305734db..4d2199150 100644
--- a/vendor/gopkg.in/resty.v1/README.md
+++ b/vendor/github.com/go-resty/resty/v2/README.md
@@ -4,54 +4,51 @@
Features section describes in detail about Resty capabilities
-
+
Resty Communication Channels
-
+
## News
- * Resty `v2` development is in-progress :smile:
- * v1.12.0 [released](https://github.com/go-resty/resty/releases/tag/v1.12.0) and tagged on Feb 27, 2019.
- * v1.11.0 [released](https://github.com/go-resty/resty/releases/tag/v1.11.0) and tagged on Jan 06, 2019.
- * v1.10.3 [released](https://github.com/go-resty/resty/releases/tag/v1.10.3) and tagged on Dec 04, 2018.
+ * v2.3.0 [released](https://github.com/go-resty/resty/releases/tag/v2.3.0) and tagged on May 20, 2020.
+ * v2.0.0 [released](https://github.com/go-resty/resty/releases/tag/v2.0.0) and tagged on Jul 16, 2019.
+ * v1.12.0 [released](https://github.com/go-resty/resty/releases/tag/v1.12.0) and tagged on Feb 27, 2019.
* v1.0 released and tagged on Sep 25, 2017. - Resty's first version was released on Sep 15, 2015 then it grew gradually as a very handy and helpful library. Its been a two years since first release. I'm very thankful to Resty users and its [contributors](https://github.com/go-resty/resty/graphs/contributors).
## Features
* GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS, etc.
* Simple and chainable methods for settings and request
- * Request Body can be `string`, `[]byte`, `struct`, `map`, `slice` and `io.Reader` too
+ * [Request](https://godoc.org/github.com/go-resty/resty#Request) Body can be `string`, `[]byte`, `struct`, `map`, `slice` and `io.Reader` too
* Auto detects `Content-Type`
* Buffer less processing for `io.Reader`
- * [Response](https://godoc.org/gopkg.in/resty.v1#Response) object gives you more possibility
+ * Request Body can be read multiple times via `Request.RawRequest.GetBody()`
+ * [Response](https://godoc.org/github.com/go-resty/resty#Response) object gives you more possibility
* Access as `[]byte` array - `response.Body()` OR Access as `string` - `response.String()`
* Know your `response.Time()` and when we `response.ReceivedAt()`
* Automatic marshal and unmarshal for `JSON` and `XML` content type
* Default is `JSON`, if you supply `struct/map` without header `Content-Type`
* For auto-unmarshal, refer to -
- - Success scenario [Request.SetResult()](https://godoc.org/gopkg.in/resty.v1#Request.SetResult) and [Response.Result()](https://godoc.org/gopkg.in/resty.v1#Response.Result).
- - Error scenario [Request.SetError()](https://godoc.org/gopkg.in/resty.v1#Request.SetError) and [Response.Error()](https://godoc.org/gopkg.in/resty.v1#Response.Error).
+ - Success scenario [Request.SetResult()](https://godoc.org/github.com/go-resty/resty#Request.SetResult) and [Response.Result()](https://godoc.org/github.com/go-resty/resty#Response.Result).
+ - Error scenario [Request.SetError()](https://godoc.org/github.com/go-resty/resty#Request.SetError) and [Response.Error()](https://godoc.org/github.com/go-resty/resty#Response.Error).
- Supports [RFC7807](https://tools.ietf.org/html/rfc7807) - `application/problem+json` & `application/problem+xml`
* Easy to upload one or more file(s) via `multipart/form-data`
* Auto detects file content type
- * Request URL [Path Params (aka URI Params)](https://godoc.org/gopkg.in/resty.v1#Request.SetPathParams)
+ * Request URL [Path Params (aka URI Params)](https://godoc.org/github.com/go-resty/resty#Request.SetPathParams)
* Backoff Retry Mechanism with retry condition function [reference](retry_test.go)
- * resty client HTTP & REST [Request](https://godoc.org/gopkg.in/resty.v1#Client.OnBeforeRequest) and [Response](https://godoc.org/gopkg.in/resty.v1#Client.OnAfterResponse) middlewares
- * `Request.SetContext` supported `go1.7` and above
+ * Resty client HTTP & REST [Request](https://godoc.org/github.com/go-resty/resty#Client.OnBeforeRequest) and [Response](https://godoc.org/github.com/go-resty/resty#Client.OnAfterResponse) middlewares
+ * `Request.SetContext` supported
* Authorization option of `BasicAuth` and `Bearer` token
* Set request `ContentLength` value for all request or particular request
- * Choose between HTTP and REST mode. Default is `REST`
- * `HTTP` - default up to 10 redirects and no automatic response unmarshal
- * `REST` - defaults to no redirects and automatic response marshal/unmarshal for `JSON` & `XML`
- * Custom [Root Certificates](https://godoc.org/gopkg.in/resty.v1#Client.SetRootCertificate) and Client [Certificates](https://godoc.org/gopkg.in/resty.v1#Client.SetCertificates)
- * Download/Save HTTP response directly into File, like `curl -o` flag. See [SetOutputDirectory](https://godoc.org/gopkg.in/resty.v1#Client.SetOutputDirectory) & [SetOutput](https://godoc.org/gopkg.in/resty.v1#Request.SetOutput).
+ * Custom [Root Certificates](https://godoc.org/github.com/go-resty/resty#Client.SetRootCertificate) and Client [Certificates](https://godoc.org/github.com/go-resty/resty#Client.SetCertificates)
+ * Download/Save HTTP response directly into File, like `curl -o` flag. See [SetOutputDirectory](https://godoc.org/github.com/go-resty/resty#Client.SetOutputDirectory) & [SetOutput](https://godoc.org/github.com/go-resty/resty#Request.SetOutput).
* Cookies for your request and CookieJar support
* SRV Record based request instead of Host URL
* Client settings like `Timeout`, `RedirectPolicy`, `Proxy`, `TLSClientConfig`, `Transport`, etc.
- * Optionally allows GET request with payload, see [SetAllowGetMethodPayload](https://godoc.org/gopkg.in/resty.v1#Client.SetAllowGetMethodPayload)
+ * Optionally allows GET request with payload, see [SetAllowGetMethodPayload](https://godoc.org/github.com/go-resty/resty#Client.SetAllowGetMethodPayload)
* Supports registering external JSON library into resty, see [how to use](https://github.com/go-resty/resty/issues/76#issuecomment-314015250)
* Exposes Response reader without reading response (no auto-unmarshaling) if need be, see [how to use](https://github.com/go-resty/resty/issues/87#issuecomment-322100604)
* Option to specify expected `Content-Type` when response `Content-Type` header missing. Refer to [#92](https://github.com/go-resty/resty/issues/92)
@@ -59,18 +56,16 @@
* Have client level settings & options and also override at Request level if you want to
* Request and Response middlewares
* Create Multiple clients if you want to `resty.New()`
- * Supports `http.RoundTripper` implementation, see [SetTransport](https://godoc.org/gopkg.in/resty.v1#Client.SetTransport)
+ * Supports `http.RoundTripper` implementation, see [SetTransport](https://godoc.org/github.com/go-resty/resty#Client.SetTransport)
* goroutine concurrent safe
- * REST and HTTP modes
+ * Resty Client trace, see [Client.EnableTrace](https://godoc.org/github.com/go-resty/resty#Client.EnableTrace) and [Request.EnableTrace](https://godoc.org/github.com/go-resty/resty#Request.EnableTrace)
* Debug mode - clean and informative logging presentation
* Gzip - Go does it automatically also resty has fallback handling too
* Works fine with `HTTP/2` and `HTTP/1.1`
* [Bazel support](#bazel-support)
- * Easily mock resty for testing, [for e.g.](#mocking-http-requests-using-httpmock-library)
+ * Easily mock Resty for testing, [for e.g.](#mocking-http-requests-using-httpmock-library)
* Well tested client library
-Resty works with `go1.3` and above.
-
### Included Batteries
* Redirect Policies - see [how to use](#redirect-policy)
@@ -84,26 +79,16 @@ Resty works with `go1.3` and above.
* SRV Record based request instead of Host URL [how to use](resty_test.go#L1412)
* etc (upcoming - throw your idea's [here](https://github.com/go-resty/resty/issues)).
-## Installation
-#### Stable Version - Production Ready
+#### Supported Go Versions
-Please refer section [Versioning](#versioning) for detailed info.
+Initially Resty started supporting `go modules` since `v1.10.0` release.
-##### go.mod
+Starting Resty v2 and higher versions, it fully embraces [go modules](https://github.com/golang/go/wiki/Modules) package release. It requires a Go version capable of understanding `/vN` suffixed imports:
-```bash
-require gopkg.in/resty.v1 v1.12.0
-```
-
-##### go get
-```bash
-go get -u gopkg.in/resty.v1
-```
-
-#### Heads up for upcoming Resty v2
-
-Resty v2 release will be moving away from `gopkg.in` proxy versioning. It will completely follow and adpating Go Mod versioning recommendation. For e.g.: module definition would be `module github.com/go-resty/resty/v2`.
+- 1.9.7+
+- 1.10.3+
+- 1.11+
## It might be beneficial for your project :smile:
@@ -111,58 +96,102 @@ Resty v2 release will be moving away from `gopkg.in` proxy versioning. It will c
Resty author also published following projects for Go Community.
* [aah framework](https://aahframework.org) - A secure, flexible, rapid Go web framework.
- * [THUMBAI](https://thumbai.app), [Source Code](https://github.com/thumbai/thumbai) - Go Mod Repository, Go Vanity Service and Simple Proxy Server.
+ * [THUMBAI](https://thumbai.app) - Go Mod Repository, Go Vanity Service and Simple Proxy Server.
* [go-model](https://github.com/jeevatkm/go-model) - Robust & Easy to use model mapper and utility methods for Go `struct`.
+
+## Installation
+
+```bash
+# Go Modules
+require github.com/go-resty/resty/v2 v2.3.0
+```
+
## Usage
-The following samples will assist you to become as comfortable as possible with resty library. Resty comes with ready to use DefaultClient.
-
-Import resty into your code and refer it as `resty`.
+The following samples will assist you to become as comfortable as possible with resty library.
```go
-import "gopkg.in/resty.v1"
+// Import resty into your code and refer it as `resty`.
+import "github.com/go-resty/resty/v2"
```
#### Simple GET
```go
-// GET request
-resp, err := resty.R().Get("http://httpbin.org/get")
+// Create a Resty Client
+client := resty.New()
-// explore response object
-fmt.Printf("\nError: %v", err)
-fmt.Printf("\nResponse Status Code: %v", resp.StatusCode())
-fmt.Printf("\nResponse Status: %v", resp.Status())
-fmt.Printf("\nResponse Time: %v", resp.Time())
-fmt.Printf("\nResponse Received At: %v", resp.ReceivedAt())
-fmt.Printf("\nResponse Body: %v", resp) // or resp.String() or string(resp.Body())
-// more...
+resp, err := client.R().
+ EnableTrace().
+ Get("https://httpbin.org/get")
+
+// Explore response object
+fmt.Println("Response Info:")
+fmt.Println("Error :", err)
+fmt.Println("Status Code:", resp.StatusCode())
+fmt.Println("Status :", resp.Status())
+fmt.Println("Proto :", resp.Proto())
+fmt.Println("Time :", resp.Time())
+fmt.Println("Received At:", resp.ReceivedAt())
+fmt.Println("Body :\n", resp)
+fmt.Println()
+
+// Explore trace info
+fmt.Println("Request Trace Info:")
+ti := resp.Request.TraceInfo()
+fmt.Println("DNSLookup :", ti.DNSLookup)
+fmt.Println("ConnTime :", ti.ConnTime)
+fmt.Println("TCPConnTime :", ti.TCPConnTime)
+fmt.Println("TLSHandshake :", ti.TLSHandshake)
+fmt.Println("ServerTime :", ti.ServerTime)
+fmt.Println("ResponseTime :", ti.ResponseTime)
+fmt.Println("TotalTime :", ti.TotalTime)
+fmt.Println("IsConnReused :", ti.IsConnReused)
+fmt.Println("IsConnWasIdle:", ti.IsConnWasIdle)
+fmt.Println("ConnIdleTime :", ti.ConnIdleTime)
/* Output
-Error:
-Response Status Code: 200
-Response Status: 200 OK
-Response Time: 160.1151ms
-Response Received At: 2018-10-16 16:28:34.8595663 -0700 PDT m=+0.166119401
-Response Body: {
+Response Info:
+Error :
+Status Code: 200
+Status : 200 OK
+Proto : HTTP/2.0
+Time : 475.611189ms
+Received At: 2020-05-19 00:11:06.828188 -0700 PDT m=+0.476510773
+Body :
+ {
"args": {},
"headers": {
"Accept-Encoding": "gzip",
- "Connection": "close",
"Host": "httpbin.org",
- "User-Agent": "go-resty/1.10.0 (https://github.com/go-resty/resty)"
+ "User-Agent": "go-resty/2.3.0 (https://github.com/go-resty/resty)"
},
"origin": "0.0.0.0",
- "url": "http://httpbin.org/get"
+ "url": "https://httpbin.org/get"
}
+
+Request Trace Info:
+DNSLookup : 4.870246ms
+ConnTime : 393.95373ms
+TCPConnTime : 78.360432ms
+TLSHandshake : 310.032859ms
+ServerTime : 81.648284ms
+ResponseTime : 124.266µs
+TotalTime : 475.611189ms
+IsConnReused : false
+IsConnWasIdle: false
+ConnIdleTime : 0s
*/
```
#### Enhanced GET
```go
-resp, err := resty.R().
+// Create a Resty Client
+client := resty.New()
+
+resp, err := client.R().
SetQueryParams(map[string]string{
"page_no": "1",
"limit": "20",
@@ -176,7 +205,7 @@ resp, err := resty.R().
// Sample of using Request.SetQueryString method
-resp, err := resty.R().
+resp, err := client.R().
SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more").
SetHeader("Accept", "application/json").
SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F").
@@ -186,9 +215,12 @@ resp, err := resty.R().
#### Various POST method combinations
```go
+// Create a Resty Client
+client := resty.New()
+
// POST JSON string
// No need to set content type, if you have client level setting
-resp, err := resty.R().
+resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody(`{"username":"testuser", "password":"testpass"}`).
SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}).
@@ -196,21 +228,21 @@ resp, err := resty.R().
// POST []byte array
// No need to set content type, if you have client level setting
-resp, err := resty.R().
+resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody([]byte(`{"username":"testuser", "password":"testpass"}`)).
SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}).
Post("https://myapp.com/login")
// POST Struct, default is JSON content type. No need to set one
-resp, err := resty.R().
+resp, err := client.R().
SetBody(User{Username: "testuser", Password: "testpass"}).
SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}).
SetError(&AuthError{}). // or SetError(AuthError{}).
Post("https://myapp.com/login")
// POST Map, default is JSON content type. No need to set one
-resp, err := resty.R().
+resp, err := client.R().
SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}).
SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}).
SetError(&AuthError{}). // or SetError(AuthError{}).
@@ -220,7 +252,7 @@ resp, err := resty.R().
fileBytes, _ := ioutil.ReadFile("/Users/jeeva/mydocument.pdf")
// See we are not setting content-type header, since go-resty automatically detects Content-Type for you
-resp, err := resty.R().
+resp, err := client.R().
SetBody(fileBytes).
SetContentLength(true). // Dropbox expects this value
SetAuthToken("").
@@ -239,9 +271,12 @@ You can use various combinations of `PUT` method call like demonstrated for `POS
```go
// Note: This is one sample of PUT method usage, refer POST for more combination
+// Create a Resty Client
+client := resty.New()
+
// Request goes as JSON content type
// No need to set auth token, error, if you have client level settings
-resp, err := resty.R().
+resp, err := client.R().
SetBody(Article{
Title: "go-resty",
Content: "This is my article content, oh ya!",
@@ -260,9 +295,12 @@ You can use various combinations of `PATCH` method call like demonstrated for `P
```go
// Note: This is one sample of PUT method usage, refer POST for more combination
+// Create a Resty Client
+client := resty.New()
+
// Request goes as JSON content type
// No need to set auth token, error, if you have client level settings
-resp, err := resty.R().
+resp, err := client.R().
SetBody(Article{
Tags: []string{"new tag1", "new tag2"},
}).
@@ -274,16 +312,19 @@ resp, err := resty.R().
#### Sample DELETE, HEAD, OPTIONS
```go
+// Create a Resty Client
+client := resty.New()
+
// DELETE a article
// No need to set auth token, error, if you have client level settings
-resp, err := resty.R().
+resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // or SetError(Error{}).
Delete("https://myapp.com/articles/1234")
// DELETE a articles with payload/body as a JSON string
// No need to set auth token, error, if you have client level settings
-resp, err := resty.R().
+resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // or SetError(Error{}).
SetHeader("Content-Type", "application/json").
@@ -292,13 +333,13 @@ resp, err := resty.R().
// HEAD of resource
// No need to set auth token, if you have client level settings
-resp, err := resty.R().
+resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
Head("https://myapp.com/videos/hi-res-video")
// OPTIONS of resource
// No need to set auth token, if you have client level settings
-resp, err := resty.R().
+resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
Options("https://myapp.com/servers/nyc-dc-01")
```
@@ -311,7 +352,10 @@ resp, err := resty.R().
profileImgBytes, _ := ioutil.ReadFile("/Users/jeeva/test-img.png")
notesBytes, _ := ioutil.ReadFile("/Users/jeeva/text-file.txt")
-resp, err := resty.R().
+// Create a Resty Client
+client := resty.New()
+
+resp, err := client.R().
SetFileReader("profile_img", "test-img.png", bytes.NewReader(profileImgBytes)).
SetFileReader("notes", "text-file.txt", bytes.NewReader(notesBytes)).
SetFormData(map[string]string{
@@ -324,13 +368,16 @@ resp, err := resty.R().
#### Using File directly from Path
```go
+// Create a Resty Client
+client := resty.New()
+
// Single file scenario
-resp, err := resty.R().
+resp, err := client.R().
SetFile("profile_img", "/Users/jeeva/test-img.png").
Post("http://myapp.com/upload")
// Multiple files scenario
-resp, err := resty.R().
+resp, err := client.R().
SetFiles(map[string]string{
"profile_img": "/Users/jeeva/test-img.png",
"notes": "/Users/jeeva/text-file.txt",
@@ -338,7 +385,7 @@ resp, err := resty.R().
Post("http://myapp.com/upload")
// Multipart of form fields and files
-resp, err := resty.R().
+resp, err := client.R().
SetFiles(map[string]string{
"profile_img": "/Users/jeeva/test-img.png",
"notes": "/Users/jeeva/text-file.txt",
@@ -356,9 +403,12 @@ resp, err := resty.R().
#### Sample Form submission
```go
+// Create a Resty Client
+client := resty.New()
+
// just mentioning about POST as an example with simple flow
// User Login
-resp, err := resty.R().
+resp, err := client.R().
SetFormData(map[string]string{
"username": "jeeva",
"password": "mypass",
@@ -366,7 +416,7 @@ resp, err := resty.R().
Post("http://myapp.com/login")
// Followed by profile update
-resp, err := resty.R().
+resp, err := client.R().
SetFormData(map[string]string{
"first_name": "Jeevanandam",
"last_name": "M",
@@ -379,27 +429,30 @@ resp, err := resty.R().
criteria := url.Values{
"search_criteria": []string{"book", "glass", "pencil"},
}
-resp, err := resty.R().
- SetMultiValueFormData(criteria).
+resp, err := client.R().
+ SetFormDataFromValues(criteria).
Post("http://myapp.com/search")
```
#### Save HTTP Response into File
```go
+// Create a Resty Client
+client := resty.New()
+
// Setting output directory path, If directory not exists then resty creates one!
// This is optional one, if you're planning using absoule path in
// `Request.SetOutput` and can used together.
-resty.SetOutputDirectory("/Users/jeeva/Downloads")
+client.SetOutputDirectory("/Users/jeeva/Downloads")
// HTTP response gets saved into file, similar to curl -o flag
-_, err := resty.R().
+_, err := client.R().
SetOutput("plugin/ReplyWithHeader-v5.1-beta.zip").
Get("http://bit.ly/1LouEKr")
// OR using absolute path
-// Note: output directory path is not used for absoulte path
-_, err := resty.R().
+// Note: output directory path is not used for absolute path
+_, err := client.R().
SetOutput("/MyDownloads/plugin/ReplyWithHeader-v5.1-beta.zip").
Get("http://bit.ly/1LouEKr")
```
@@ -409,7 +462,10 @@ _, err := resty.R().
Resty provides easy to use dynamic request URL path params. Params can be set at client and request level. Client level params value can be overridden at request level.
```go
-resty.R().SetPathParams(map[string]string{
+// Create a Resty Client
+client := resty.New()
+
+client.R().SetPathParams(map[string]string{
"userId": "sample@sample.com",
"subAccountId": "100002",
}).
@@ -424,8 +480,11 @@ Get("/v1/users/{userId}/{subAccountId}/details")
Resty provides middleware ability to manipulate for Request and Response. It is more flexible than callback approach.
```go
+// Create a Resty Client
+client := resty.New()
+
// Registering Request Middleware
-resty.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
+client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// Now you have access to Client and current Request object
// manipulate it as per your need
@@ -433,7 +492,7 @@ resty.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
})
// Registering Response Middleware
-resty.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
+client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// Now you have access to Client and current Response object
// manipulate it as per your need
@@ -446,11 +505,14 @@ resty.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
Resty provides few ready to use redirect policy(s) also it supports multiple policies together.
```go
+// Create a Resty Client
+client := resty.New()
+
// Assign Client Redirect Policy. Create one as per you need
-resty.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
+client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// Wanna multiple policies such as redirect count, domain name check, etc
-resty.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
+client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
```
@@ -459,8 +521,11 @@ resty.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
Implement [RedirectPolicy](redirect.go#L20) interface and register it with resty client. Have a look [redirect.go](redirect.go) for more information.
```go
+// Create a Resty Client
+client := resty.New()
+
// Using raw func into resty.SetRedirectPolicy
-resty.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
+client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// Implement your logic here
// return nil for continue redirect otherwise return error to stop/prevent redirect
@@ -482,16 +547,19 @@ func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) err
}
// Registering in resty
-resty.SetRedirectPolicy(CustomRedirectPolicy{/* initialize variables */})
+client.SetRedirectPolicy(CustomRedirectPolicy{/* initialize variables */})
```
#### Custom Root Certificates and Client Certificates
```go
+// Create a Resty Client
+client := resty.New()
+
// Custom Root certificates, just supply .pem file.
// you can add one or more root certificates, its get appended
-resty.SetRootCertificate("/path/to/root/pemFile1.pem")
-resty.SetRootCertificate("/path/to/root/pemFile2.pem")
+client.SetRootCertificate("/path/to/root/pemFile1.pem")
+client.SetRootCertificate("/path/to/root/pemFile2.pem")
// ... and so on!
// Adding Client Certificates, you add one or more certificates
@@ -504,7 +572,30 @@ if err != nil {
// ...
// You add one or more certificates
-resty.SetCertificates(cert1, cert2, cert3)
+client.SetCertificates(cert1, cert2, cert3)
+```
+
+#### Custom Root Certificates and Client Certificates from string
+
+```go
+// Custom Root certificates from string
+// You can pass you certificates throught env variables as strings
+// you can add one or more root certificates, its get appended
+client.SetRootCertificateFromString("-----BEGIN CERTIFICATE-----content-----END CERTIFICATE-----")
+client.SetRootCertificateFromString("-----BEGIN CERTIFICATE-----content-----END CERTIFICATE-----")
+// ... and so on!
+
+// Adding Client Certificates, you add one or more certificates
+// Sample for creating certificate object
+// Parsing public/private key pair from a pair of files. The files must contain PEM encoded data.
+cert1, err := tls.X509KeyPair([]byte("-----BEGIN CERTIFICATE-----content-----END CERTIFICATE-----"), []byte("-----BEGIN CERTIFICATE-----content-----END CERTIFICATE-----"))
+if err != nil {
+ log.Fatalf("ERROR client certificate: %s", err)
+}
+// ...
+
+// You add one or more certificates
+client.SetCertificates(cert1, cert2, cert3)
```
#### Proxy Settings - Client as well as at Request Level
@@ -515,11 +606,14 @@ Choose as per your need.
**Client Level Proxy** settings applied to all the request
```go
+// Create a Resty Client
+client := resty.New()
+
// Setting a Proxy URL and Port
-resty.SetProxy("http://proxyserver:8888")
+client.SetProxy("http://proxyserver:8888")
// Want to remove proxy setting
-resty.RemoveProxy()
+client.RemoveProxy()
```
#### Retries
@@ -530,8 +624,11 @@ to increase retry intervals after each attempt.
Usage example:
```go
+// Create a Resty Client
+client := resty.New()
+
// Retries are configured per client
-resty.
+client.
// Set retry count to non zero to enable retries
SetRetryCount(3).
// You can override initial retry wait time.
@@ -539,7 +636,12 @@ resty.
SetRetryWaitTime(5 * time.Second).
// MaxWaitTime can be overridden as well.
// Default is 2 seconds.
- SetRetryMaxWaitTime(20 * time.Second)
+ SetRetryMaxWaitTime(20 * time.Second).
+ // SetRetryAfter sets callback to calculate wait time between retries.
+ // Default (nil) implies exponential backoff with jitter
+ SetRetryAfter(func(client *Client, resp *Response) (time.Duration, error) {
+ return 0, errors.New("quota exceeded")
+ })
```
Above setup will result in resty retrying requests returned non nil error up to
@@ -548,12 +650,14 @@ Above setup will result in resty retrying requests returned non nil error up to
You can optionally provide client with custom retry conditions:
```go
-resty.AddRetryCondition(
- // Condition function will be provided with *resty.Response as a
- // parameter. It is expected to return (bool, error) pair. Resty will retry
- // in case condition returns true or non nil error.
- func(r *resty.Response) (bool, error) {
- return r.StatusCode() == http.StatusTooManyRequests, nil
+// Create a Resty Client
+client := resty.New()
+
+client.AddRetryCondition(
+ // RetryConditionFunc type is for retry condition function
+ // input: non-nil Response OR request execution error
+ func(r *resty.Response, err error) bool {
+ return r.StatusCode() == http.StatusTooManyRequests
},
)
```
@@ -566,21 +670,14 @@ Multiple retry conditions can be added.
It is also possible to use `resty.Backoff(...)` to get arbitrary retry scenarios
implemented. [Reference](retry_test.go).
-#### Choose REST or HTTP mode
-
-```go
-// REST mode. This is Default.
-resty.SetRESTMode()
-
-// HTTP mode
-resty.SetHTTPMode()
-```
-
#### Allow GET request with Payload
```go
+// Create a Resty Client
+client := resty.New()
+
// Allow GET request with Payload. This is disabled by default.
-resty.SetAllowGetMethodPayload(true)
+client.SetAllowGetMethodPayload(true)
```
#### Wanna Multiple Clients
@@ -603,40 +700,39 @@ client2.R().Head("http://httpbin.org")
#### Remaining Client Settings & its Options
```go
+// Create a Resty Client
+client := resty.New()
+
// Unique settings at Client level
//--------------------------------
// Enable debug mode
-resty.SetDebug(true)
-
-// Using you custom log writer
-logFile, _ := os.OpenFile("/Users/jeeva/go-resty.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
-resty.SetLogger(logFile)
+client.SetDebug(true)
// Assign Client TLSClientConfig
// One can set custom root-certificate. Refer: http://golang.org/pkg/crypto/tls/#example_Dial
-resty.SetTLSClientConfig(&tls.Config{ RootCAs: roots })
+client.SetTLSClientConfig(&tls.Config{ RootCAs: roots })
// or One can disable security check (https)
-resty.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true })
+client.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true })
// Set client timeout as per your need
-resty.SetTimeout(1 * time.Minute)
+client.SetTimeout(1 * time.Minute)
// You can override all below settings and options at request level if you want to
//--------------------------------------------------------------------------------
// Host URL for all request. So you can use relative URL in the request
-resty.SetHostURL("http://httpbin.org")
+client.SetHostURL("http://httpbin.org")
// Headers for all request
-resty.SetHeader("Accept", "application/json")
-resty.SetHeaders(map[string]string{
+client.SetHeader("Accept", "application/json")
+client.SetHeaders(map[string]string{
"Content-Type": "application/json",
"User-Agent": "My custom User Agent String",
})
// Cookies for all request
-resty.SetCookie(&http.Cookie{
+client.SetCookie(&http.Cookie{
Name:"go-resty",
Value:"This is cookie value",
Path: "/",
@@ -645,32 +741,32 @@ resty.SetCookie(&http.Cookie{
HttpOnly: true,
Secure: false,
})
-resty.SetCookies(cookies)
+client.SetCookies(cookies)
// URL query parameters for all request
-resty.SetQueryParam("user_id", "00001")
-resty.SetQueryParams(map[string]string{ // sample of those who use this manner
+client.SetQueryParam("user_id", "00001")
+client.SetQueryParams(map[string]string{ // sample of those who use this manner
"api_key": "api-key-here",
"api_secert": "api-secert",
})
-resty.R().SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more")
+client.R().SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more")
// Form data for all request. Typically used with POST and PUT
-resty.SetFormData(map[string]string{
+client.SetFormData(map[string]string{
"access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F",
})
// Basic Auth for all request
-resty.SetBasicAuth("myuser", "mypass")
+client.SetBasicAuth("myuser", "mypass")
// Bearer Auth Token for all request
-resty.SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F")
+client.SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F")
// Enabling Content length value for all request
-resty.SetContentLength(true)
+client.SetContentLength(true)
// Registering global Error object structure for JSON/XML request
-resty.SetError(&Error{}) // or resty.SetError(Error{})
+client.SetError(&Error{}) // or resty.SetError(Error{})
```
#### Unix Socket
@@ -685,12 +781,15 @@ transport := http.Transport{
},
}
+// Create a Resty Client
+client := resty.New()
+
// Set the previous transport that we created, set the scheme of the communication to the
// socket and set the unixSocket as the HostURL.
-r := resty.New().SetTransport(&transport).SetScheme("http").SetHostURL(unixSocket)
+client.SetTransport(&transport).SetScheme("http").SetHostURL(unixSocket)
// No need to write the host's URL on the request, just the path.
-r.R().Get("/index.html")
+client.R().Get("/index.html")
```
#### Bazel support
@@ -710,16 +809,22 @@ could use the `httpmock` library.
When using the default resty client, you should pass the client to the library as follow:
```go
-httpmock.ActivateNonDefault(resty.DefaultClient.GetClient())
+// Create a Resty Client
+client := resty.New()
+
+// Get the underlying HTTP Client and set it to Mock
+httpmock.ActivateNonDefault(client.GetClient())
```
More detailed example of mocking resty http requests using ginko could be found [here](https://github.com/jarcoal/httpmock#ginkgo--resty-example).
## Versioning
-resty releases versions according to [Semantic Versioning](http://semver.org)
+Resty releases versions according to [Semantic Versioning](http://semver.org)
- * `gopkg.in/resty.vX` points to appropriate tagged versions; `X` denotes version series number and it's a stable release for production use. For e.g. `gopkg.in/resty.v0`.
+ * Resty v2 does not use `gopkg.in` service for library versioning.
+ * Resty fully adapted to `go mod` capabilities since `v1.10.0` release.
+ * Resty v1 series was using `gopkg.in` to provide versioning. `gopkg.in/resty.vX` points to appropriate tagged versions; `X` denotes version series number and it's a stable release for production use. For e.g. `gopkg.in/resty.v0`.
* Development takes place at the master branch. Although the code in master should always compile and test successfully, it might break API's. I aim to maintain backwards compatibility, but sometimes API's and behavior might be changed to fix a bug.
## Contribution
@@ -732,6 +837,10 @@ BTW, I'd like to know what you think about `Resty`. Kindly open an issue or send
[Jeevanandam M.](https://github.com/jeevatkm) (jeeva@myjeeva.com)
+## Core Team
+
+Have a look on [Members](https://github.com/orgs/go-resty/teams/core/members) page.
+
## Contributors
Have a look on [Contributors](https://github.com/go-resty/resty/graphs/contributors) page.
diff --git a/vendor/gopkg.in/resty.v1/WORKSPACE b/vendor/github.com/go-resty/resty/v2/WORKSPACE
similarity index 100%
rename from vendor/gopkg.in/resty.v1/WORKSPACE
rename to vendor/github.com/go-resty/resty/v2/WORKSPACE
diff --git a/vendor/gopkg.in/resty.v1/client.go b/vendor/github.com/go-resty/resty/v2/client.go
similarity index 55%
rename from vendor/gopkg.in/resty.v1/client.go
rename to vendor/github.com/go-resty/resty/v2/client.go
index 68d447fa6..7b51657d2 100644
--- a/vendor/gopkg.in/resty.v1/client.go
+++ b/vendor/github.com/go-resty/resty/v2/client.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
// resty source code and usage is governed by a MIT style
// license that can be found in the LICENSE file.
@@ -9,11 +9,12 @@ import (
"compress/gzip"
"crypto/tls"
"crypto/x509"
+ "encoding/json"
"errors"
"fmt"
"io"
"io/ioutil"
- "log"
+ "math"
"net/http"
"net/url"
"reflect"
@@ -55,18 +56,38 @@ var (
hdrAuthorizationKey = http.CanonicalHeaderKey("Authorization")
plainTextType = "text/plain; charset=utf-8"
- jsonContentType = "application/json; charset=utf-8"
+ jsonContentType = "application/json"
formContentType = "application/x-www-form-urlencoded"
jsonCheck = regexp.MustCompile(`(?i:(application|text)/(json|.*\+json|json\-.*)(;|$))`)
xmlCheck = regexp.MustCompile(`(?i:(application|text)/(xml|.*\+xml)(;|$))`)
- hdrUserAgentValue = "go-resty/%s (https://github.com/go-resty/resty)"
+ hdrUserAgentValue = "go-resty/" + Version + " (https://github.com/go-resty/resty)"
bufPool = &sync.Pool{New: func() interface{} { return &bytes.Buffer{} }}
)
-// Client type is used for HTTP/RESTful global values
-// for all request raised from the client
+type (
+ // RequestMiddleware type is for request middleware, called before a request is sent
+ RequestMiddleware func(*Client, *Request) error
+
+ // ResponseMiddleware type is for response middleware, called after a response has been received
+ ResponseMiddleware func(*Client, *Response) error
+
+ // PreRequestHook type is for the request hook, called right before the request is sent
+ PreRequestHook func(*Client, *http.Request) error
+
+ // RequestLogCallback type is for request logs, called before the request is logged
+ RequestLogCallback func(*RequestLog) error
+
+ // ResponseLogCallback type is for response logs, called before the response is logged
+ ResponseLogCallback func(*ResponseLog) error
+)
+
+// Client struct is used to create Resty client with client level settings,
+// these settings are applicable to all the request raised from the client.
+//
+// Resty also provides an options to override most of the client settings
+// at request level.
type Client struct {
HostURL string
QueryParam url.Values
@@ -74,37 +95,38 @@ type Client struct {
Header http.Header
UserInfo *User
Token string
+ AuthScheme string
Cookies []*http.Cookie
Error reflect.Type
Debug bool
DisableWarn bool
AllowGetMethodPayload bool
- Log *log.Logger
RetryCount int
RetryWaitTime time.Duration
RetryMaxWaitTime time.Duration
RetryConditions []RetryConditionFunc
+ RetryAfter RetryAfterFunc
JSONMarshal func(v interface{}) ([]byte, error)
JSONUnmarshal func(data []byte, v interface{}) error
jsonEscapeHTML bool
- httpClient *http.Client
setContentLength bool
- isHTTPMode bool
- outputDirectory string
- scheme string
- proxyURL *url.URL
closeConnection bool
notParseResponse bool
+ trace bool
debugBodySizeLimit int64
- logPrefix string
+ outputDirectory string
+ scheme string
pathParams map[string]string
- beforeRequest []func(*Client, *Request) error
- udBeforeRequest []func(*Client, *Request) error
- preReqHook func(*Client, *Request) error
- afterResponse []func(*Client, *Response) error
- requestLog func(*RequestLog) error
- responseLog func(*ResponseLog) error
+ log Logger
+ httpClient *http.Client
+ proxyURL *url.URL
+ beforeRequest []RequestMiddleware
+ udBeforeRequest []RequestMiddleware
+ preReqHook PreRequestHook
+ afterResponse []ResponseMiddleware
+ requestLog RequestLogCallback
+ responseLog ResponseLogCallback
}
// User type is to hold an username and password information
@@ -119,11 +141,10 @@ type User struct {
// SetHostURL method is to set Host URL in the client instance. It will be used with request
// raised from this client with relative URL
// // Setting HTTP address
-// resty.SetHostURL("http://myjeeva.com")
+// client.SetHostURL("http://myjeeva.com")
//
// // Setting HTTPS address
-// resty.SetHostURL("https://myjeeva.com")
-//
+// client.SetHostURL("https://myjeeva.com")
func (c *Client) SetHostURL(url string) *Client {
c.HostURL = strings.TrimRight(url, "/")
return c
@@ -131,15 +152,15 @@ func (c *Client) SetHostURL(url string) *Client {
// SetHeader method sets a single header field and its value in the client instance.
// These headers will be applied to all requests raised from this client instance.
-// Also it can be overridden at request level header options, see `resty.R().SetHeader`
-// or `resty.R().SetHeaders`.
+// Also it can be overridden at request level header options.
//
-// Example: To set `Content-Type` and `Accept` as `application/json`
+// See `Request.SetHeader` or `Request.SetHeaders`.
//
-// resty.
+// For Example: To set `Content-Type` and `Accept` as `application/json`
+//
+// client.
// SetHeader("Content-Type", "application/json").
// SetHeader("Accept", "application/json")
-//
func (c *Client) SetHeader(header, value string) *Client {
c.Header.Set(header, value)
return c
@@ -147,29 +168,29 @@ func (c *Client) SetHeader(header, value string) *Client {
// SetHeaders method sets multiple headers field and its values at one go in the client instance.
// These headers will be applied to all requests raised from this client instance. Also it can be
-// overridden at request level headers options, see `resty.R().SetHeaders` or `resty.R().SetHeader`.
+// overridden at request level headers options.
//
-// Example: To set `Content-Type` and `Accept` as `application/json`
+// See `Request.SetHeaders` or `Request.SetHeader`.
//
-// resty.SetHeaders(map[string]string{
+// For Example: To set `Content-Type` and `Accept` as `application/json`
+//
+// client.SetHeaders(map[string]string{
// "Content-Type": "application/json",
// "Accept": "application/json",
// })
-//
func (c *Client) SetHeaders(headers map[string]string) *Client {
for h, v := range headers {
c.Header.Set(h, v)
}
-
return c
}
// SetCookieJar method sets custom http.CookieJar in the resty client. Its way to override default.
-// Example: sometimes we don't want to save cookies in api contacting, we can remove the default
+//
+// For Example: sometimes we don't want to save cookies in api contacting, we can remove the default
// CookieJar in resty client.
//
-// resty.SetCookieJar(nil)
-//
+// client.SetCookieJar(nil)
func (c *Client) SetCookieJar(jar http.CookieJar) *Client {
c.httpClient.Jar = jar
return c
@@ -177,16 +198,10 @@ func (c *Client) SetCookieJar(jar http.CookieJar) *Client {
// SetCookie method appends a single cookie in the client instance.
// These cookies will be added to all the request raised from this client instance.
-// resty.SetCookie(&http.Cookie{
+// client.SetCookie(&http.Cookie{
// Name:"go-resty",
// Value:"This is cookie value",
-// Path: "/",
-// Domain: "sample.com",
-// MaxAge: 36000,
-// HttpOnly: true,
-// Secure: false,
// })
-//
func (c *Client) SetCookie(hc *http.Cookie) *Client {
c.Cookies = append(c.Cookies, hc)
return c
@@ -194,120 +209,136 @@ func (c *Client) SetCookie(hc *http.Cookie) *Client {
// SetCookies method sets an array of cookies in the client instance.
// These cookies will be added to all the request raised from this client instance.
-// cookies := make([]*http.Cookie, 0)
-//
-// cookies = append(cookies, &http.Cookie{
-// Name:"go-resty-1",
-// Value:"This is cookie 1 value",
-// Path: "/",
-// Domain: "sample.com",
-// MaxAge: 36000,
-// HttpOnly: true,
-// Secure: false,
-// })
-//
-// cookies = append(cookies, &http.Cookie{
-// Name:"go-resty-2",
-// Value:"This is cookie 2 value",
-// Path: "/",
-// Domain: "sample.com",
-// MaxAge: 36000,
-// HttpOnly: true,
-// Secure: false,
-// })
+// cookies := []*http.Cookie{
+// &http.Cookie{
+// Name:"go-resty-1",
+// Value:"This is cookie 1 value",
+// },
+// &http.Cookie{
+// Name:"go-resty-2",
+// Value:"This is cookie 2 value",
+// },
+// }
//
// // Setting a cookies into resty
-// resty.SetCookies(cookies)
-//
+// client.SetCookies(cookies)
func (c *Client) SetCookies(cs []*http.Cookie) *Client {
c.Cookies = append(c.Cookies, cs...)
return c
}
// SetQueryParam method sets single parameter and its value in the client instance.
-// It will be formed as query string for the request. For example: `search=kitchen%20papers&size=large`
+// It will be formed as query string for the request.
+//
+// For Example: `search=kitchen%20papers&size=large`
// in the URL after `?` mark. These query params will be added to all the request raised from
-// this client instance. Also it can be overridden at request level Query Param options,
-// see `resty.R().SetQueryParam` or `resty.R().SetQueryParams`.
-// resty.
+// this client instance. Also it can be overridden at request level Query Param options.
+//
+// See `Request.SetQueryParam` or `Request.SetQueryParams`.
+// client.
// SetQueryParam("search", "kitchen papers").
// SetQueryParam("size", "large")
-//
func (c *Client) SetQueryParam(param, value string) *Client {
c.QueryParam.Set(param, value)
return c
}
// SetQueryParams method sets multiple parameters and their values at one go in the client instance.
-// It will be formed as query string for the request. For example: `search=kitchen%20papers&size=large`
+// It will be formed as query string for the request.
+//
+// For Example: `search=kitchen%20papers&size=large`
// in the URL after `?` mark. These query params will be added to all the request raised from this
-// client instance. Also it can be overridden at request level Query Param options,
-// see `resty.R().SetQueryParams` or `resty.R().SetQueryParam`.
-// resty.SetQueryParams(map[string]string{
+// client instance. Also it can be overridden at request level Query Param options.
+//
+// See `Request.SetQueryParams` or `Request.SetQueryParam`.
+// client.SetQueryParams(map[string]string{
// "search": "kitchen papers",
// "size": "large",
// })
-//
func (c *Client) SetQueryParams(params map[string]string) *Client {
for p, v := range params {
c.SetQueryParam(p, v)
}
-
return c
}
// SetFormData method sets Form parameters and their values in the client instance.
// It's applicable only HTTP method `POST` and `PUT` and requets content type would be set as
// `application/x-www-form-urlencoded`. These form data will be added to all the request raised from
-// this client instance. Also it can be overridden at request level form data, see `resty.R().SetFormData`.
-// resty.SetFormData(map[string]string{
+// this client instance. Also it can be overridden at request level form data.
+//
+// See `Request.SetFormData`.
+// client.SetFormData(map[string]string{
// "access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F",
// "user_id": "3455454545",
// })
-//
func (c *Client) SetFormData(data map[string]string) *Client {
for k, v := range data {
c.FormData.Set(k, v)
}
-
return c
}
-// SetBasicAuth method sets the basic authentication header in the HTTP request. Example:
+// SetBasicAuth method sets the basic authentication header in the HTTP request. For Example:
// Authorization: Basic
//
-// Example: To set the header for username "go-resty" and password "welcome"
-// resty.SetBasicAuth("go-resty", "welcome")
+// For Example: To set the header for username "go-resty" and password "welcome"
+// client.SetBasicAuth("go-resty", "welcome")
//
// This basic auth information gets added to all the request rasied from this client instance.
-// Also it can be overridden or set one at the request level is supported, see `resty.R().SetBasicAuth`.
+// Also it can be overridden or set one at the request level is supported.
//
+// See `Request.SetBasicAuth`.
func (c *Client) SetBasicAuth(username, password string) *Client {
c.UserInfo = &User{Username: username, Password: password}
return c
}
-// SetAuthToken method sets bearer auth token header in the HTTP request. Example:
-// Authorization: Bearer
+// SetAuthToken method sets the auth token of the `Authorization` header for all HTTP requests.
+// The default auth scheme is `Bearer`, it can be customized with the method `SetAuthScheme`. For Example:
+// Authorization:
//
-// Example: To set auth token BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F
+// For Example: To set auth token BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F
//
-// resty.SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F")
+// client.SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F")
//
-// This bearer auth token gets added to all the request rasied from this client instance.
-// Also it can be overridden or set one at the request level is supported, see `resty.R().SetAuthToken`.
+// This auth token gets added to all the requests rasied from this client instance.
+// Also it can be overridden or set one at the request level is supported.
//
+// See `Request.SetAuthToken`.
func (c *Client) SetAuthToken(token string) *Client {
c.Token = token
return c
}
-// R method creates a request instance, its used for Get, Post, Put, Delete, Patch, Head and Options.
+// SetAuthScheme method sets the auth scheme type in the HTTP request. For Example:
+// Authorization:
+//
+// For Example: To set the scheme to use OAuth
+//
+// client.SetAuthScheme("OAuth")
+//
+// This auth scheme gets added to all the requests rasied from this client instance.
+// Also it can be overridden or set one at the request level is supported.
+//
+// Information about auth schemes can be found in RFC7235 which is linked to below
+// along with the page containing the currently defined official authentication schemes:
+// https://tools.ietf.org/html/rfc7235
+// https://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml#authschemes
+//
+// See `Request.SetAuthToken`.
+func (c *Client) SetAuthScheme(scheme string) *Client {
+ c.AuthScheme = scheme
+ return c
+}
+
+// R method creates a new request instance, its used for Get, Post, Put, Delete, Patch, Head, Options, etc.
func (c *Client) R() *Request {
r := &Request{
QueryParam: url.Values{},
FormData: url.Values{},
Header: http.Header{},
+ Cookies: make([]*http.Cookie, 0),
client: c,
multipartFiles: []*File{},
@@ -315,42 +346,39 @@ func (c *Client) R() *Request {
pathParams: map[string]string{},
jsonEscapeHTML: true,
}
-
return r
}
-// NewRequest is an alias for R(). Creates a request instance, its used for
-// Get, Post, Put, Delete, Patch, Head and Options.
+// NewRequest is an alias for method `R()`. Creates a new request instance, its used for
+// Get, Post, Put, Delete, Patch, Head, Options, etc.
func (c *Client) NewRequest() *Request {
return c.R()
}
// OnBeforeRequest method appends request middleware into the before request chain.
-// Its gets applied after default `go-resty` request middlewares and before request
-// been sent from `go-resty` to host server.
-// resty.OnBeforeRequest(func(c *resty.Client, r *resty.Request) error {
+// Its gets applied after default Resty request middlewares and before request
+// been sent from Resty to host server.
+// client.OnBeforeRequest(func(c *resty.Client, r *resty.Request) error {
// // Now you have access to Client and Request instance
// // manipulate it as per your need
//
// return nil // if its success otherwise return error
// })
-//
-func (c *Client) OnBeforeRequest(m func(*Client, *Request) error) *Client {
+func (c *Client) OnBeforeRequest(m RequestMiddleware) *Client {
c.udBeforeRequest = append(c.udBeforeRequest, m)
return c
}
// OnAfterResponse method appends response middleware into the after response chain.
-// Once we receive response from host server, default `go-resty` response middleware
+// Once we receive response from host server, default Resty response middleware
// gets applied and then user assigened response middlewares applied.
-// resty.OnAfterResponse(func(c *resty.Client, r *resty.Response) error {
+// client.OnAfterResponse(func(c *resty.Client, r *resty.Response) error {
// // Now you have access to Client and Response instance
// // manipulate it as per your need
//
// return nil // if its success otherwise return error
// })
-//
-func (c *Client) OnAfterResponse(m func(*Client, *Response) error) *Client {
+func (c *Client) OnAfterResponse(m ResponseMiddleware) *Client {
c.afterResponse = append(c.afterResponse, m)
return c
}
@@ -358,125 +386,118 @@ func (c *Client) OnAfterResponse(m func(*Client, *Response) error) *Client {
// SetPreRequestHook method sets the given pre-request function into resty client.
// It is called right before the request is fired.
//
-// Note: Only one pre-request hook can be registered. Use `resty.OnBeforeRequest` for mutilple.
-func (c *Client) SetPreRequestHook(h func(*Client, *Request) error) *Client {
+// Note: Only one pre-request hook can be registered. Use `client.OnBeforeRequest` for mutilple.
+func (c *Client) SetPreRequestHook(h PreRequestHook) *Client {
if c.preReqHook != nil {
- c.Log.Printf("Overwriting an existing pre-request hook: %s", functionName(h))
+ c.log.Warnf("Overwriting an existing pre-request hook: %s", functionName(h))
}
c.preReqHook = h
return c
}
-// SetDebug method enables the debug mode on `go-resty` client. Client logs details of every request and response.
+// SetDebug method enables the debug mode on Resty client. Client logs details of every request and response.
// For `Request` it logs information such as HTTP verb, Relative URL path, Host, Headers, Body if it has one.
// For `Response` it logs information such as Status, Response Time, Headers, Body if it has one.
-// resty.SetDebug(true)
-//
+// client.SetDebug(true)
func (c *Client) SetDebug(d bool) *Client {
c.Debug = d
return c
}
-// SetDebugBodyLimit sets the maximum size for which the response body will be logged in debug mode.
-// resty.SetDebugBodyLimit(1000000)
-//
+// SetDebugBodyLimit sets the maximum size for which the response and request body will be logged in debug mode.
+// client.SetDebugBodyLimit(1000000)
func (c *Client) SetDebugBodyLimit(sl int64) *Client {
c.debugBodySizeLimit = sl
return c
}
-// OnRequestLog method used to set request log callback into resty. Registered callback gets
+// OnRequestLog method used to set request log callback into Resty. Registered callback gets
// called before the resty actually logs the information.
-func (c *Client) OnRequestLog(rl func(*RequestLog) error) *Client {
+func (c *Client) OnRequestLog(rl RequestLogCallback) *Client {
if c.requestLog != nil {
- c.Log.Printf("Overwriting an existing on-request-log callback from=%s to=%s", functionName(c.requestLog), functionName(rl))
+ c.log.Warnf("Overwriting an existing on-request-log callback from=%s to=%s",
+ functionName(c.requestLog), functionName(rl))
}
c.requestLog = rl
return c
}
-// OnResponseLog method used to set response log callback into resty. Registered callback gets
+// OnResponseLog method used to set response log callback into Resty. Registered callback gets
// called before the resty actually logs the information.
-func (c *Client) OnResponseLog(rl func(*ResponseLog) error) *Client {
+func (c *Client) OnResponseLog(rl ResponseLogCallback) *Client {
if c.responseLog != nil {
- c.Log.Printf("Overwriting an existing on-response-log callback from=%s to=%s", functionName(c.responseLog), functionName(rl))
+ c.log.Warnf("Overwriting an existing on-response-log callback from=%s to=%s",
+ functionName(c.responseLog), functionName(rl))
}
c.responseLog = rl
return c
}
-// SetDisableWarn method disables the warning message on `go-resty` client.
-// For example: go-resty warns the user when BasicAuth used on HTTP mode.
-// resty.SetDisableWarn(true)
+// SetDisableWarn method disables the warning message on Resty client.
//
+// For Example: Resty warns the user when BasicAuth used on non-TLS mode.
+// client.SetDisableWarn(true)
func (c *Client) SetDisableWarn(d bool) *Client {
c.DisableWarn = d
return c
}
-// SetAllowGetMethodPayload method allows the GET method with payload on `go-resty` client.
-// For example: go-resty allows the user sends request with a payload on HTTP GET method.
-// resty.SetAllowGetMethodPayload(true)
+// SetAllowGetMethodPayload method allows the GET method with payload on Resty client.
//
+// For Example: Resty allows the user sends request with a payload on HTTP GET method.
+// client.SetAllowGetMethodPayload(true)
func (c *Client) SetAllowGetMethodPayload(a bool) *Client {
c.AllowGetMethodPayload = a
return c
}
-// SetLogger method sets given writer for logging go-resty request and response details.
-// Default is os.Stderr
-// file, _ := os.OpenFile("/Users/jeeva/go-resty.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+// SetLogger method sets given writer for logging Resty request and response details.
//
-// resty.SetLogger(file)
-//
-func (c *Client) SetLogger(w io.Writer) *Client {
- c.Log = getLogger(w)
+// Compliant to interface `resty.Logger`.
+func (c *Client) SetLogger(l Logger) *Client {
+ c.log = l
return c
}
// SetContentLength method enables the HTTP header `Content-Length` value for every request.
-// By default go-resty won't set `Content-Length`.
-// resty.SetContentLength(true)
-//
-// Also you have an option to enable for particular request. See `resty.R().SetContentLength`
+// By default Resty won't set `Content-Length`.
+// client.SetContentLength(true)
//
+// Also you have an option to enable for particular request. See `Request.SetContentLength`
func (c *Client) SetContentLength(l bool) *Client {
c.setContentLength = l
return c
}
// SetTimeout method sets timeout for request raised from client.
-// resty.SetTimeout(time.Duration(1 * time.Minute))
-//
+// client.SetTimeout(time.Duration(1 * time.Minute))
func (c *Client) SetTimeout(timeout time.Duration) *Client {
c.httpClient.Timeout = timeout
return c
}
-// SetError method is to register the global or client common `Error` object into go-resty.
+// SetError method is to register the global or client common `Error` object into Resty.
// It is used for automatic unmarshalling if response status code is greater than 399 and
// content type either JSON or XML. Can be pointer or non-pointer.
-// resty.SetError(&Error{})
+// client.SetError(&Error{})
// // OR
-// resty.SetError(Error{})
-//
+// client.SetError(Error{})
func (c *Client) SetError(err interface{}) *Client {
c.Error = typeOf(err)
return c
}
-// SetRedirectPolicy method sets the client redirect poilicy. go-resty provides ready to use
-// redirect policies. Wanna create one for yourself refer `redirect.go`.
+// SetRedirectPolicy method sets the client redirect poilicy. Resty provides ready to use
+// redirect policies. Wanna create one for yourself refer to `redirect.go`.
//
-// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20))
+// client.SetRedirectPolicy(FlexibleRedirectPolicy(20))
//
// // Need multiple redirect policies together
-// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20), DomainCheckRedirectPolicy("host1.com", "host2.net"))
-//
+// client.SetRedirectPolicy(FlexibleRedirectPolicy(20), DomainCheckRedirectPolicy("host1.com", "host2.net"))
func (c *Client) SetRedirectPolicy(policies ...interface{}) *Client {
for _, p := range policies {
if _, ok := p.(RedirectPolicy); !ok {
- c.Log.Printf("ERORR: %v does not implement resty.RedirectPolicy (missing Apply method)",
+ c.log.Errorf("%v does not implement resty.RedirectPolicy (missing Apply method)",
functionName(p))
}
}
@@ -493,7 +514,7 @@ func (c *Client) SetRedirectPolicy(policies ...interface{}) *Client {
return c
}
-// SetRetryCount method enables retry on `go-resty` client and allows you
+// SetRetryCount method enables retry on Resty client and allows you
// to set no. of retry count. Resty uses a Backoff mechanism.
func (c *Client) SetRetryCount(count int) *Client {
c.RetryCount = count
@@ -502,6 +523,7 @@ func (c *Client) SetRetryCount(count int) *Client {
// SetRetryWaitTime method sets default wait time to sleep before retrying
// request.
+//
// Default is 100 milliseconds.
func (c *Client) SetRetryWaitTime(waitTime time.Duration) *Client {
c.RetryWaitTime = waitTime
@@ -510,12 +532,20 @@ func (c *Client) SetRetryWaitTime(waitTime time.Duration) *Client {
// SetRetryMaxWaitTime method sets max wait time to sleep before retrying
// request.
+//
// Default is 2 seconds.
func (c *Client) SetRetryMaxWaitTime(maxWaitTime time.Duration) *Client {
c.RetryMaxWaitTime = maxWaitTime
return c
}
+// SetRetryAfter sets callback to calculate wait time between retries.
+// Default (nil) implies exponential backoff with jitter
+func (c *Client) SetRetryAfter(callback RetryAfterFunc) *Client {
+ c.RetryAfter = callback
+ return c
+}
+
// AddRetryCondition method adds a retry condition function to array of functions
// that are checked to determine if the request is retried. The request will
// retry if any of the functions return true and error is nil.
@@ -524,109 +554,56 @@ func (c *Client) AddRetryCondition(condition RetryConditionFunc) *Client {
return c
}
-// SetHTTPMode method sets go-resty mode to 'http'
-func (c *Client) SetHTTPMode() *Client {
- return c.SetMode("http")
-}
-
-// SetRESTMode method sets go-resty mode to 'rest'
-func (c *Client) SetRESTMode() *Client {
- return c.SetMode("rest")
-}
-
-// SetMode method sets go-resty client mode to given value such as 'http' & 'rest'.
-// 'rest':
-// - No Redirect
-// - Automatic response unmarshal if it is JSON or XML
-// 'http':
-// - Up to 10 Redirects
-// - No automatic unmarshall. Response will be treated as `response.String()`
-//
-// If you want more redirects, use FlexibleRedirectPolicy
-// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20))
-//
-func (c *Client) SetMode(mode string) *Client {
- // HTTP
- if mode == "http" {
- c.isHTTPMode = true
- c.SetRedirectPolicy(FlexibleRedirectPolicy(10))
- c.afterResponse = []func(*Client, *Response) error{
- responseLogger,
- saveResponseIntoFile,
- }
- return c
- }
-
- // RESTful
- c.isHTTPMode = false
- c.SetRedirectPolicy(NoRedirectPolicy())
- c.afterResponse = []func(*Client, *Response) error{
- responseLogger,
- parseResponseBody,
- saveResponseIntoFile,
- }
- return c
-}
-
-// Mode method returns the current client mode. Typically its a "http" or "rest".
-// Default is "rest"
-func (c *Client) Mode() string {
- if c.isHTTPMode {
- return "http"
- }
- return "rest"
-}
-
// SetTLSClientConfig method sets TLSClientConfig for underling client Transport.
//
-// Example:
+// For Example:
// // One can set custom root-certificate. Refer: http://golang.org/pkg/crypto/tls/#example_Dial
-// resty.SetTLSClientConfig(&tls.Config{ RootCAs: roots })
+// client.SetTLSClientConfig(&tls.Config{ RootCAs: roots })
//
// // or One can disable security check (https)
-// resty.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true })
-// Note: This method overwrites existing `TLSClientConfig`.
+// client.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true })
//
+// Note: This method overwrites existing `TLSClientConfig`.
func (c *Client) SetTLSClientConfig(config *tls.Config) *Client {
- transport, err := c.getTransport()
+ transport, err := c.transport()
if err != nil {
- c.Log.Printf("ERROR %v", err)
+ c.log.Errorf("%v", err)
return c
}
transport.TLSClientConfig = config
return c
}
-// SetProxy method sets the Proxy URL and Port for resty client.
-// resty.SetProxy("http://proxyserver:8888")
+// SetProxy method sets the Proxy URL and Port for Resty client.
+// client.SetProxy("http://proxyserver:8888")
//
-// Alternatives: At request level proxy, see `Request.SetProxy`. OR Without this `SetProxy` method,
-// you can also set Proxy via environment variable. By default `Go` uses setting from `HTTP_PROXY`.
+// OR Without this `SetProxy` method, you could also set Proxy via environment variable.
//
+// Refer to godoc `http.ProxyFromEnvironment`.
func (c *Client) SetProxy(proxyURL string) *Client {
- transport, err := c.getTransport()
+ transport, err := c.transport()
if err != nil {
- c.Log.Printf("ERROR %v", err)
+ c.log.Errorf("%v", err)
return c
}
- if pURL, err := url.Parse(proxyURL); err == nil {
- c.proxyURL = pURL
- transport.Proxy = http.ProxyURL(c.proxyURL)
- } else {
- c.Log.Printf("ERROR %v", err)
- c.RemoveProxy()
+ pURL, err := url.Parse(proxyURL)
+ if err != nil {
+ c.log.Errorf("%v", err)
+ return c
}
+
+ c.proxyURL = pURL
+ transport.Proxy = http.ProxyURL(c.proxyURL)
return c
}
-// RemoveProxy method removes the proxy configuration from resty client
-// resty.RemoveProxy()
-//
+// RemoveProxy method removes the proxy configuration from Resty client
+// client.RemoveProxy()
func (c *Client) RemoveProxy() *Client {
- transport, err := c.getTransport()
+ transport, err := c.transport()
if err != nil {
- c.Log.Printf("ERROR %v", err)
+ c.log.Errorf("%v", err)
return c
}
c.proxyURL = nil
@@ -634,31 +611,29 @@ func (c *Client) RemoveProxy() *Client {
return c
}
-// SetCertificates method helps to set client certificates into resty conveniently.
-//
+// SetCertificates method helps to set client certificates into Resty conveniently.
func (c *Client) SetCertificates(certs ...tls.Certificate) *Client {
- config, err := c.getTLSConfig()
+ config, err := c.tlsConfig()
if err != nil {
- c.Log.Printf("ERROR %v", err)
+ c.log.Errorf("%v", err)
return c
}
config.Certificates = append(config.Certificates, certs...)
return c
}
-// SetRootCertificate method helps to add one or more root certificates into resty client
-// resty.SetRootCertificate("/path/to/root/pemFile.pem")
-//
+// SetRootCertificate method helps to add one or more root certificates into Resty client
+// client.SetRootCertificate("/path/to/root/pemFile.pem")
func (c *Client) SetRootCertificate(pemFilePath string) *Client {
rootPemData, err := ioutil.ReadFile(pemFilePath)
if err != nil {
- c.Log.Printf("ERROR %v", err)
+ c.log.Errorf("%v", err)
return c
}
- config, err := c.getTLSConfig()
+ config, err := c.tlsConfig()
if err != nil {
- c.Log.Printf("ERROR %v", err)
+ c.log.Errorf("%v", err)
return c
}
if config.RootCAs == nil {
@@ -666,15 +641,29 @@ func (c *Client) SetRootCertificate(pemFilePath string) *Client {
}
config.RootCAs.AppendCertsFromPEM(rootPemData)
+ return c
+}
+// SetRootCertificateFromString method helps to add one or more root certificates into Resty client
+// client.SetRootCertificateFromString("pem file content")
+func (c *Client) SetRootCertificateFromString(pemContent string) *Client {
+ config, err := c.tlsConfig()
+ if err != nil {
+ c.log.Errorf("%v", err)
+ return c
+ }
+ if config.RootCAs == nil {
+ config.RootCAs = x509.NewCertPool()
+ }
+
+ config.RootCAs.AppendCertsFromPEM([]byte(pemContent))
return c
}
// SetOutputDirectory method sets output directory for saving HTTP response into file.
// If the output directory not exists then resty creates one. This setting is optional one,
-// if you're planning using absoule path in `Request.SetOutput` and can used together.
-// resty.SetOutputDirectory("/save/http/response/here")
-//
+// if you're planning using absolute path in `Request.SetOutput` and can used together.
+// client.SetOutputDirectory("/save/http/response/here")
func (c *Client) SetOutputDirectory(dirPath string) *Client {
c.outputDirectory = dirPath
return c
@@ -683,12 +672,12 @@ func (c *Client) SetOutputDirectory(dirPath string) *Client {
// SetTransport method sets custom `*http.Transport` or any `http.RoundTripper`
// compatible interface implementation in the resty client.
//
-// NOTE:
+// Note:
//
// - If transport is not type of `*http.Transport` then you may not be able to
-// take advantage of some of the `resty` client settings.
+// take advantage of some of the Resty client settings.
//
-// - It overwrites the resty client transport instance and it's configurations.
+// - It overwrites the Resty client transport instance and it's configurations.
//
// transport := &http.Transport{
// // somthing like Proxying to httptest.Server, etc...
@@ -697,8 +686,7 @@ func (c *Client) SetOutputDirectory(dirPath string) *Client {
// },
// }
//
-// resty.SetTransport(transport)
-//
+// client.SetTransport(transport)
func (c *Client) SetTransport(transport http.RoundTripper) *Client {
if transport != nil {
c.httpClient.Transport = transport
@@ -706,14 +694,12 @@ func (c *Client) SetTransport(transport http.RoundTripper) *Client {
return c
}
-// SetScheme method sets custom scheme in the resty client. It's way to override default.
-// resty.SetScheme("http")
-//
+// SetScheme method sets custom scheme in the Resty client. It's way to override default.
+// client.SetScheme("http")
func (c *Client) SetScheme(scheme string) *Client {
if !IsStringEmpty(scheme) {
c.scheme = scheme
}
-
return c
}
@@ -728,23 +714,16 @@ func (c *Client) SetCloseConnection(close bool) *Client {
// Resty exposes the raw response body as `io.ReadCloser`. Also do not forget to close the body,
// otherwise you might get into connection leaks, no connection reuse.
//
-// Please Note: Response middlewares are not applicable, if you use this option. Basically you have
+// Note: Response middlewares are not applicable, if you use this option. Basically you have
// taken over the control of response parsing from `Resty`.
func (c *Client) SetDoNotParseResponse(parse bool) *Client {
c.notParseResponse = parse
return c
}
-// SetLogPrefix method sets the Resty logger prefix value.
-func (c *Client) SetLogPrefix(prefix string) *Client {
- c.logPrefix = prefix
- c.Log.SetPrefix(prefix)
- return c
-}
-
// SetPathParams method sets multiple URL path key-value pairs at one go in the
-// resty client instance.
-// resty.SetPathParams(map[string]string{
+// Resty client instance.
+// client.SetPathParams(map[string]string{
// "userId": "sample@sample.com",
// "subAccountId": "100002",
// })
@@ -763,27 +742,54 @@ func (c *Client) SetPathParams(params map[string]string) *Client {
// SetJSONEscapeHTML method is to enable/disable the HTML escape on JSON marshal.
//
-// NOTE: This option only applicable to standard JSON Marshaller.
+// Note: This option only applicable to standard JSON Marshaller.
func (c *Client) SetJSONEscapeHTML(b bool) *Client {
c.jsonEscapeHTML = b
return c
}
-// IsProxySet method returns the true if proxy is set on client otherwise false.
+// EnableTrace method enables the Resty client trace for the requests fired from
+// the client using `httptrace.ClientTrace` and provides insights.
+//
+// client := resty.New().EnableTrace()
+//
+// resp, err := client.R().Get("https://httpbin.org/get")
+// fmt.Println("Error:", err)
+// fmt.Println("Trace Info:", resp.Request.TraceInfo())
+//
+// Also `Request.EnableTrace` available too to get trace info for single request.
+//
+// Since v2.0.0
+func (c *Client) EnableTrace() *Client {
+ c.trace = true
+ return c
+}
+
+// DisableTrace method disables the Resty client trace. Refer to `Client.EnableTrace`.
+//
+// Since v2.0.0
+func (c *Client) DisableTrace() *Client {
+ c.trace = false
+ return c
+}
+
+// IsProxySet method returns the true is proxy is set from resty client otherwise
+// false. By default proxy is set from environment, refer to `http.ProxyFromEnvironment`.
func (c *Client) IsProxySet() bool {
return c.proxyURL != nil
}
-// GetClient method returns the current http.Client used by the resty client.
+// GetClient method returns the current `http.Client` used by the resty client.
func (c *Client) GetClient() *http.Client {
return c.httpClient
}
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
// Client Unexported methods
-//___________________________________
+//_______________________________________________________________________
-// executes the given `Request` object and returns response
+// Executes method executes the given `Request` object and returns response
+// error.
func (c *Client) execute(req *Request) (*Response, error) {
defer releaseBuffer(req.bodyBuf)
// Apply Request middleware
@@ -793,21 +799,14 @@ func (c *Client) execute(req *Request) (*Response, error) {
// to modify the *resty.Request object
for _, f := range c.udBeforeRequest {
if err = f(c, req); err != nil {
- return nil, err
+ return nil, wrapNoRetryErr(err)
}
}
// resty middlewares
for _, f := range c.beforeRequest {
if err = f(c, req); err != nil {
- return nil, err
- }
- }
-
- // call pre-request if defined
- if c.preReqHook != nil {
- if err = c.preReqHook(c, req); err != nil {
- return nil, err
+ return nil, wrapNoRetryErr(err)
}
}
@@ -815,8 +814,15 @@ func (c *Client) execute(req *Request) (*Response, error) {
req.RawRequest.Host = hostHeader
}
+ // call pre-request if defined
+ if c.preReqHook != nil {
+ if err = c.preReqHook(c, req.RawRequest); err != nil {
+ return nil, wrapNoRetryErr(err)
+ }
+ }
+
if err = requestLogger(c, req); err != nil {
- return nil, err
+ return nil, wrapNoRetryErr(err)
}
req.Time = time.Now()
@@ -825,10 +831,10 @@ func (c *Client) execute(req *Request) (*Response, error) {
response := &Response{
Request: req,
RawResponse: resp,
- receivedAt: time.Now(),
}
if err != nil || req.notParseResponse || c.notParseResponse {
+ response.setReceivedAt()
return response, err
}
@@ -841,6 +847,7 @@ func (c *Client) execute(req *Request) (*Response, error) {
if _, ok := body.(*gzip.Reader); !ok {
body, err = gzip.NewReader(body)
if err != nil {
+ response.setReceivedAt()
return response, err
}
defer closeq(body)
@@ -848,9 +855,11 @@ func (c *Client) execute(req *Request) (*Response, error) {
}
if response.body, err = ioutil.ReadAll(body); err != nil {
+ response.setReceivedAt()
return response, err
}
+ response.setReceivedAt() // after we read the body
response.size = int64(len(response.body))
}
@@ -861,24 +870,12 @@ func (c *Client) execute(req *Request) (*Response, error) {
}
}
- return response, err
-}
-
-// enables a log prefix
-func (c *Client) enableLogPrefix() {
- c.Log.SetFlags(log.LstdFlags)
- c.Log.SetPrefix(c.logPrefix)
-}
-
-// disables a log prefix
-func (c *Client) disableLogPrefix() {
- c.Log.SetFlags(0)
- c.Log.SetPrefix("")
+ return response, wrapNoRetryErr(err)
}
// getting TLS client config if not exists then create one
-func (c *Client) getTLSConfig() (*tls.Config, error) {
- transport, err := c.getTransport()
+func (c *Client) tlsConfig() (*tls.Config, error) {
+ transport, err := c.transport()
if err != nil {
return nil, err
}
@@ -888,24 +885,26 @@ func (c *Client) getTLSConfig() (*tls.Config, error) {
return transport.TLSClientConfig, nil
}
-// returns `*http.Transport` currently in use or error
-// in case currently used `transport` is not an `*http.Transport`
-func (c *Client) getTransport() (*http.Transport, error) {
- if c.httpClient.Transport == nil {
- c.SetTransport(new(http.Transport))
- }
-
+// Transport method returns `*http.Transport` currently in use or error
+// in case currently used `transport` is not a `*http.Transport`.
+func (c *Client) transport() (*http.Transport, error) {
if transport, ok := c.httpClient.Transport.(*http.Transport); ok {
return transport, nil
}
return nil, errors.New("current transport is not an *http.Transport instance")
}
-//
-// File
-//
+// just an internal helper method
+func (c *Client) outputLogTo(w io.Writer) *Client {
+ c.log.(*logger).l.SetOutput(w)
+ return c
+}
-// File represent file information for multipart request
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// File struct and its methods
+//_______________________________________________________________________
+
+// File struct represent file information for multipart request
type File struct {
Name string
ParamName string
@@ -917,10 +916,63 @@ func (f *File) String() string {
return fmt.Sprintf("ParamName: %v; FileName: %v", f.ParamName, f.Name)
}
-// MultipartField represent custom data part for multipart request
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// MultipartField struct
+//_______________________________________________________________________
+
+// MultipartField struct represent custom data part for multipart request
type MultipartField struct {
Param string
FileName string
ContentType string
io.Reader
}
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// Unexported package methods
+//_______________________________________________________________________
+
+func createClient(hc *http.Client) *Client {
+ if hc.Transport == nil {
+ hc.Transport = createTransport(nil)
+ }
+
+ c := &Client{ // not setting lang default values
+ QueryParam: url.Values{},
+ FormData: url.Values{},
+ Header: http.Header{},
+ Cookies: make([]*http.Cookie, 0),
+ RetryWaitTime: defaultWaitTime,
+ RetryMaxWaitTime: defaultMaxWaitTime,
+ JSONMarshal: json.Marshal,
+ JSONUnmarshal: json.Unmarshal,
+ jsonEscapeHTML: true,
+ httpClient: hc,
+ debugBodySizeLimit: math.MaxInt32,
+ pathParams: make(map[string]string),
+ }
+
+ // Logger
+ c.SetLogger(createLogger())
+
+ // default before request middlewares
+ c.beforeRequest = []RequestMiddleware{
+ parseRequestURL,
+ parseRequestHeader,
+ parseRequestBody,
+ createHTTPRequest,
+ addCredentials,
+ }
+
+ // user defined request middlewares
+ c.udBeforeRequest = []RequestMiddleware{}
+
+ // default after response middlewares
+ c.afterResponse = []ResponseMiddleware{
+ responseLogger,
+ parseResponseBody,
+ saveResponseIntoFile,
+ }
+
+ return c
+}
diff --git a/vendor/github.com/go-resty/resty/v2/go.mod b/vendor/github.com/go-resty/resty/v2/go.mod
new file mode 100644
index 000000000..f1faf5f1b
--- /dev/null
+++ b/vendor/github.com/go-resty/resty/v2/go.mod
@@ -0,0 +1,5 @@
+module github.com/go-resty/resty/v2
+
+require golang.org/x/net v0.0.0-20200513185701-a91f0712d120
+
+go 1.11
diff --git a/vendor/gopkg.in/resty.v1/middleware.go b/vendor/github.com/go-resty/resty/v2/middleware.go
similarity index 73%
rename from vendor/gopkg.in/resty.v1/middleware.go
rename to vendor/github.com/go-resty/resty/v2/middleware.go
index 9b6f102ed..703f07c60 100644
--- a/vendor/gopkg.in/resty.v1/middleware.go
+++ b/vendor/github.com/go-resty/resty/v2/middleware.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
// resty source code and usage is governed by a MIT style
// license that can be found in the LICENSE file.
@@ -10,6 +10,7 @@ import (
"errors"
"fmt"
"io"
+ "io/ioutil"
"mime/multipart"
"net/http"
"net/url"
@@ -20,9 +21,11 @@ import (
"time"
)
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+const debugRequestLogKey = "__restyDebugRequestLog"
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
// Request Middleware(s)
-//___________________________________
+//_______________________________________________________________________
func parseRequestURL(c *Client, r *Request) error {
// GitHub #103 Path Params
@@ -104,7 +107,7 @@ func parseRequestHeader(c *Client, r *Request) error {
}
if IsStringEmpty(hdr.Get(hdrUserAgentKey)) {
- hdr.Set(hdrUserAgentKey, fmt.Sprintf(hdrUserAgentValue, Version))
+ hdr.Set(hdrUserAgentKey, hdrUserAgentValue)
}
ct := hdr.Get(hdrContentTypeKey)
@@ -176,19 +179,58 @@ func createHTTPRequest(c *Client, r *Request) (err error) {
// Add headers into http request
r.RawRequest.Header = r.Header
- // Add cookies into http request
+ // Add cookies from client instance into http request
for _, cookie := range c.Cookies {
r.RawRequest.AddCookie(cookie)
}
+ // Add cookies from request instance into http request
+ for _, cookie := range r.Cookies {
+ r.RawRequest.AddCookie(cookie)
+ }
+
// it's for non-http scheme option
if r.RawRequest.URL != nil && r.RawRequest.URL.Scheme == "" {
r.RawRequest.URL.Scheme = c.scheme
r.RawRequest.URL.Host = r.URL
}
+ // Enable trace
+ if c.trace || r.trace {
+ r.clientTrace = &clientTrace{}
+ r.ctx = r.clientTrace.createContext(r.Context())
+ }
+
// Use context if it was specified
- r.addContextIfAvailable()
+ if r.ctx != nil {
+ r.RawRequest = r.RawRequest.WithContext(r.ctx)
+ }
+
+ // assign get body func for the underlying raw request instance
+ r.RawRequest.GetBody = func() (io.ReadCloser, error) {
+ // If r.bodyBuf present, return the copy
+ if r.bodyBuf != nil {
+ return ioutil.NopCloser(bytes.NewReader(r.bodyBuf.Bytes())), nil
+ }
+
+ // Maybe body is `io.Reader`.
+ // Note: Resty user have to watchout for large body size of `io.Reader`
+ if r.RawRequest.Body != nil {
+ b, err := ioutil.ReadAll(r.RawRequest.Body)
+ if err != nil {
+ return nil, err
+ }
+
+ // Restore the Body
+ closeq(r.RawRequest.Body)
+ r.RawRequest.Body = ioutil.NopCloser(bytes.NewBuffer(b))
+
+ // Return the Body bytes
+ return ioutil.NopCloser(bytes.NewBuffer(b)), nil
+ }
+
+ return nil, nil
+ }
return
}
@@ -206,15 +248,25 @@ func addCredentials(c *Client, r *Request) error {
if !c.DisableWarn {
if isBasicAuth && !strings.HasPrefix(r.URL, "https") {
- c.Log.Println("WARNING - Using Basic Auth in HTTP mode is not secure.")
+ c.log.Warnf("Using Basic Auth in HTTP mode is not secure, use HTTPS")
}
}
- // Token Auth
+ // Set the Authorization Header Scheme
+ var authScheme string
+ if !IsStringEmpty(r.AuthScheme) {
+ authScheme = r.AuthScheme
+ } else if !IsStringEmpty(c.AuthScheme) {
+ authScheme = c.AuthScheme
+ } else {
+ authScheme = "Bearer"
+ }
+
+ // Build the Token Auth header
if !IsStringEmpty(r.Token) { // takes precedence
- r.RawRequest.Header.Set(hdrAuthorizationKey, "Bearer "+r.Token)
+ r.RawRequest.Header.Set(hdrAuthorizationKey, authScheme+" "+r.Token)
} else if !IsStringEmpty(c.Token) {
- r.RawRequest.Header.Set(hdrAuthorizationKey, "Bearer "+c.Token)
+ r.RawRequest.Header.Set(hdrAuthorizationKey, authScheme+" "+c.Token)
}
return nil
@@ -223,30 +275,32 @@ func addCredentials(c *Client, r *Request) error {
func requestLogger(c *Client, r *Request) error {
if c.Debug {
rr := r.RawRequest
- rl := &RequestLog{Header: copyHeaders(rr.Header), Body: r.fmtBodyString()}
+ rl := &RequestLog{Header: copyHeaders(rr.Header), Body: r.fmtBodyString(c.debugBodySizeLimit)}
if c.requestLog != nil {
if err := c.requestLog(rl); err != nil {
return err
}
}
+ // fmt.Sprintf("COOKIES:\n%s\n", composeCookies(c.GetClient().Jar, *rr.URL)) +
- reqLog := "\n---------------------- REQUEST LOG -----------------------\n" +
+ reqLog := "\n==============================================================================\n" +
+ "~~~ REQUEST ~~~\n" +
fmt.Sprintf("%s %s %s\n", r.Method, rr.URL.RequestURI(), rr.Proto) +
fmt.Sprintf("HOST : %s\n", rr.URL.Host) +
- fmt.Sprintf("HEADERS:\n") +
- composeHeaders(rl.Header) + "\n" +
+ fmt.Sprintf("HEADERS:\n%s\n", composeHeaders(c, r, rl.Header)) +
fmt.Sprintf("BODY :\n%v\n", rl.Body) +
- "----------------------------------------------------------\n"
+ "------------------------------------------------------------------------------\n"
- c.Log.Print(reqLog)
+ r.initValuesMap()
+ r.values[debugRequestLogKey] = reqLog
}
return nil
}
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
// Response Middleware(s)
-//___________________________________
+//_______________________________________________________________________
func responseLogger(c *Client, res *Response) error {
if c.Debug {
@@ -257,20 +311,22 @@ func responseLogger(c *Client, res *Response) error {
}
}
- resLog := "\n---------------------- RESPONSE LOG -----------------------\n" +
- fmt.Sprintf("STATUS : %s\n", res.Status()) +
- fmt.Sprintf("RECEIVED AT : %v\n", res.ReceivedAt().Format(time.RFC3339Nano)) +
- fmt.Sprintf("RESPONSE TIME : %v\n", res.Time()) +
- "HEADERS:\n" +
- composeHeaders(rl.Header) + "\n"
+ debugLog := res.Request.values[debugRequestLogKey].(string)
+ debugLog += "~~~ RESPONSE ~~~\n" +
+ fmt.Sprintf("STATUS : %s\n", res.Status()) +
+ fmt.Sprintf("PROTO : %s\n", res.RawResponse.Proto) +
+ fmt.Sprintf("RECEIVED AT : %v\n", res.ReceivedAt().Format(time.RFC3339Nano)) +
+ fmt.Sprintf("TIME DURATION: %v\n", res.Time()) +
+ "HEADERS :\n" +
+ composeHeaders(c, res.Request, rl.Header) + "\n"
if res.Request.isSaveResponse {
- resLog += fmt.Sprintf("BODY :\n***** RESPONSE WRITTEN INTO FILE *****\n")
+ debugLog += fmt.Sprintf("BODY :\n***** RESPONSE WRITTEN INTO FILE *****\n")
} else {
- resLog += fmt.Sprintf("BODY :\n%v\n", rl.Body)
+ debugLog += fmt.Sprintf("BODY :\n%v\n", rl.Body)
}
- resLog += "----------------------------------------------------------\n"
+ debugLog += "==============================================================================\n"
- c.Log.Print(resLog)
+ c.log.Debugf("%s", debugLog)
}
return nil
@@ -281,10 +337,11 @@ func parseResponseBody(c *Client, res *Response) (err error) {
return
}
// Handles only JSON or XML content type
- ct := firstNonEmpty(res.Header().Get(hdrContentTypeKey), res.Request.fallbackContentType)
+ ct := firstNonEmpty(res.Request.forceContentType, res.Header().Get(hdrContentTypeKey), res.Request.fallbackContentType)
if IsJSONType(ct) || IsXMLType(ct) {
// HTTP status code > 199 and < 300, considered as Result
if res.IsSuccess() {
+ res.Request.Error = nil
if res.Request.Result != nil {
err = Unmarshalc(c, ct, res.body, res.Request.Result)
return
@@ -398,7 +455,7 @@ func handleRequestBody(c *Client, r *Request) (err error) {
r.bodyBuf = nil
if reader, ok := r.Body.(io.Reader); ok {
- if c.setContentLength || r.setContentLength { // keep backward compability
+ if c.setContentLength || r.setContentLength { // keep backward compatibility
r.bodyBuf = acquireBuffer()
_, err = r.bodyBuf.ReadFrom(reader)
r.Body = nil
diff --git a/vendor/gopkg.in/resty.v1/redirect.go b/vendor/github.com/go-resty/resty/v2/redirect.go
similarity index 85%
rename from vendor/gopkg.in/resty.v1/redirect.go
rename to vendor/github.com/go-resty/resty/v2/redirect.go
index b426134ad..2976b7c5a 100644
--- a/vendor/gopkg.in/resty.v1/redirect.go
+++ b/vendor/github.com/go-resty/resty/v2/redirect.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
// resty source code and usage is governed by a MIT style
// license that can be found in the LICENSE file.
@@ -47,9 +47,7 @@ func FlexibleRedirectPolicy(noOfRedirect int) RedirectPolicy {
if len(via) >= noOfRedirect {
return fmt.Errorf("stopped after %d redirects", noOfRedirect)
}
-
checkHostAndAddHeaders(req, via[0])
-
return nil
})
}
@@ -74,6 +72,10 @@ func DomainCheckRedirectPolicy(hostnames ...string) RedirectPolicy {
return fn
}
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// Package Unexported methods
+//_______________________________________________________________________
+
func getHostname(host string) (hostname string) {
if strings.Index(host, ":") > 0 {
host, _, _ = net.SplitHostPort(host)
@@ -85,7 +87,7 @@ func getHostname(host string) (hostname string) {
// By default Golang will not redirect request headers
// after go throughing various discussion comments from thread
// https://github.com/golang/go/issues/4800
-// go-resty will add all the headers during a redirect for the same host
+// Resty will add all the headers during a redirect for the same host
func checkHostAndAddHeaders(cur *http.Request, pre *http.Request) {
curHostname := getHostname(cur.URL.Host)
preHostname := getHostname(pre.URL.Host)
@@ -94,6 +96,6 @@ func checkHostAndAddHeaders(cur *http.Request, pre *http.Request) {
cur.Header[key] = val
}
} else { // only library User-Agent header is added
- cur.Header.Set(hdrUserAgentKey, fmt.Sprintf(hdrUserAgentValue, Version))
+ cur.Header.Set(hdrUserAgentKey, hdrUserAgentValue)
}
}
diff --git a/vendor/gopkg.in/resty.v1/request.go b/vendor/github.com/go-resty/resty/v2/request.go
similarity index 52%
rename from vendor/gopkg.in/resty.v1/request.go
rename to vendor/github.com/go-resty/resty/v2/request.go
index c6adff3dd..3bf236fd9 100644
--- a/vendor/gopkg.in/resty.v1/request.go
+++ b/vendor/github.com/go-resty/resty/v2/request.go
@@ -1,66 +1,124 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
// resty source code and usage is governed by a MIT style
// license that can be found in the LICENSE file.
package resty
import (
- "encoding/base64"
+ "bytes"
+ "context"
"encoding/json"
"encoding/xml"
"fmt"
"io"
"net"
+ "net/http"
"net/url"
"reflect"
"strings"
+ "time"
)
-// SRVRecord holds the data to query the SRV record for the following service
-type SRVRecord struct {
- Service string
- Domain string
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// Request struct and methods
+//_______________________________________________________________________
+
+// Request struct is used to compose and fire individual request from
+// resty client. Request provides an options to override client level
+// settings and also an options for the request composition.
+type Request struct {
+ URL string
+ Method string
+ Token string
+ AuthScheme string
+ QueryParam url.Values
+ FormData url.Values
+ Header http.Header
+ Time time.Time
+ Body interface{}
+ Result interface{}
+ Error interface{}
+ RawRequest *http.Request
+ SRV *SRVRecord
+ UserInfo *User
+ Cookies []*http.Cookie
+
+ isMultiPart bool
+ isFormData bool
+ setContentLength bool
+ isSaveResponse bool
+ notParseResponse bool
+ jsonEscapeHTML bool
+ trace bool
+ outputFile string
+ fallbackContentType string
+ forceContentType string
+ ctx context.Context
+ pathParams map[string]string
+ values map[string]interface{}
+ client *Client
+ bodyBuf *bytes.Buffer
+ clientTrace *clientTrace
+ multipartFiles []*File
+ multipartFields []*MultipartField
+}
+
+// Context method returns the Context if its already set in request
+// otherwise it creates new one using `context.Background()`.
+func (r *Request) Context() context.Context {
+ if r.ctx == nil {
+ return context.Background()
+ }
+ return r.ctx
+}
+
+// SetContext method sets the context.Context for current Request. It allows
+// to interrupt the request execution if ctx.Done() channel is closed.
+// See https://blog.golang.org/context article and the "context" package
+// documentation.
+func (r *Request) SetContext(ctx context.Context) *Request {
+ r.ctx = ctx
+ return r
}
// SetHeader method is to set a single header field and its value in the current request.
-// Example: To set `Content-Type` and `Accept` as `application/json`.
-// resty.R().
+//
+// For Example: To set `Content-Type` and `Accept` as `application/json`.
+// client.R().
// SetHeader("Content-Type", "application/json").
// SetHeader("Accept", "application/json")
//
// Also you can override header value, which was set at client instance level.
-//
func (r *Request) SetHeader(header, value string) *Request {
r.Header.Set(header, value)
return r
}
// SetHeaders method sets multiple headers field and its values at one go in the current request.
-// Example: To set `Content-Type` and `Accept` as `application/json`
//
-// resty.R().
+// For Example: To set `Content-Type` and `Accept` as `application/json`
+//
+// client.R().
// SetHeaders(map[string]string{
// "Content-Type": "application/json",
// "Accept": "application/json",
// })
// Also you can override header value, which was set at client instance level.
-//
func (r *Request) SetHeaders(headers map[string]string) *Request {
for h, v := range headers {
r.SetHeader(h, v)
}
-
return r
}
// SetQueryParam method sets single parameter and its value in the current request.
// It will be formed as query string for the request.
-// Example: `search=kitchen%20papers&size=large` in the URL after `?` mark.
-// resty.R().
+//
+// For Example: `search=kitchen%20papers&size=large` in the URL after `?` mark.
+// client.R().
// SetQueryParam("search", "kitchen papers").
// SetQueryParam("size", "large")
-// Also you can override query params value, which was set at client instance level
-//
+// Also you can override query params value, which was set at client instance level.
func (r *Request) SetQueryParam(param, value string) *Request {
r.QueryParam.Set(param, value)
return r
@@ -68,47 +126,45 @@ func (r *Request) SetQueryParam(param, value string) *Request {
// SetQueryParams method sets multiple parameters and its values at one go in the current request.
// It will be formed as query string for the request.
-// Example: `search=kitchen%20papers&size=large` in the URL after `?` mark.
-// resty.R().
+//
+// For Example: `search=kitchen%20papers&size=large` in the URL after `?` mark.
+// client.R().
// SetQueryParams(map[string]string{
// "search": "kitchen papers",
// "size": "large",
// })
-// Also you can override query params value, which was set at client instance level
-//
+// Also you can override query params value, which was set at client instance level.
func (r *Request) SetQueryParams(params map[string]string) *Request {
for p, v := range params {
r.SetQueryParam(p, v)
}
-
return r
}
-// SetMultiValueQueryParams method appends multiple parameters with multi-value
-// at one go in the current request. It will be formed as query string for the request.
-// Example: `status=pending&status=approved&status=open` in the URL after `?` mark.
-// resty.R().
-// SetMultiValueQueryParams(url.Values{
+// SetQueryParamsFromValues method appends multiple parameters with multi-value
+// (`url.Values`) at one go in the current request. It will be formed as
+// query string for the request.
+//
+// For Example: `status=pending&status=approved&status=open` in the URL after `?` mark.
+// client.R().
+// SetQueryParamsFromValues(url.Values{
// "status": []string{"pending", "approved", "open"},
// })
-// Also you can override query params value, which was set at client instance level
-//
-func (r *Request) SetMultiValueQueryParams(params url.Values) *Request {
+// Also you can override query params value, which was set at client instance level.
+func (r *Request) SetQueryParamsFromValues(params url.Values) *Request {
for p, v := range params {
for _, pv := range v {
r.QueryParam.Add(p, pv)
}
}
-
return r
}
// SetQueryString method provides ability to use string as an input to set URL query string for the request.
//
// Using String as an input
-// resty.R().
+// client.R().
// SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more")
-//
func (r *Request) SetQueryString(query string) *Request {
params, err := url.ParseQuery(strings.TrimSpace(query))
if err == nil {
@@ -118,7 +174,7 @@ func (r *Request) SetQueryString(query string) *Request {
}
}
} else {
- r.client.Log.Printf("ERROR %v", err)
+ r.client.log.Errorf("%v", err)
}
return r
}
@@ -126,36 +182,32 @@ func (r *Request) SetQueryString(query string) *Request {
// SetFormData method sets Form parameters and their values in the current request.
// It's applicable only HTTP method `POST` and `PUT` and requests content type would be set as
// `application/x-www-form-urlencoded`.
-// resty.R().
+// client.R().
// SetFormData(map[string]string{
// "access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F",
// "user_id": "3455454545",
// })
-// Also you can override form data value, which was set at client instance level
-//
+// Also you can override form data value, which was set at client instance level.
func (r *Request) SetFormData(data map[string]string) *Request {
for k, v := range data {
r.FormData.Set(k, v)
}
-
return r
}
-// SetMultiValueFormData method appends multiple form parameters with multi-value
-// at one go in the current request.
-// resty.R().
-// SetMultiValueFormData(url.Values{
+// SetFormDataFromValues method appends multiple form parameters with multi-value
+// (`url.Values`) at one go in the current request.
+// client.R().
+// SetFormDataFromValues(url.Values{
// "search_criteria": []string{"book", "glass", "pencil"},
// })
-// Also you can override form data value, which was set at client instance level
-//
-func (r *Request) SetMultiValueFormData(params url.Values) *Request {
- for k, v := range params {
+// Also you can override form data value, which was set at client instance level.
+func (r *Request) SetFormDataFromValues(data url.Values) *Request {
+ for k, v := range data {
for _, kv := range v {
r.FormData.Add(k, kv)
}
}
-
return r
}
@@ -166,17 +218,15 @@ func (r *Request) SetMultiValueFormData(params url.Values) *Request {
//
// Note: `io.Reader` is processed as bufferless mode while sending request.
//
-// Example:
-//
-// Struct as a body input, based on content type, it will be marshalled.
-// resty.R().
+// For Example: Struct as a body input, based on content type, it will be marshalled.
+// client.R().
// SetBody(User{
// Username: "jeeva@myjeeva.com",
// Password: "welcome2resty",
// })
//
// Map as a body input, based on content type, it will be marshalled.
-// resty.R().
+// client.R().
// SetBody(map[string]interface{}{
// "username": "jeeva@myjeeva.com",
// "password": "welcome2resty",
@@ -190,57 +240,53 @@ func (r *Request) SetMultiValueFormData(params url.Values) *Request {
// })
//
// String as a body input. Suitable for any need as a string input.
-// resty.R().
+// client.R().
// SetBody(`{
// "username": "jeeva@getrightcare.com",
// "password": "admin"
// }`)
//
// []byte as a body input. Suitable for raw request such as file upload, serialize & deserialize, etc.
-// resty.R().
+// client.R().
// SetBody([]byte("This is my raw request, sent as-is"))
-//
func (r *Request) SetBody(body interface{}) *Request {
r.Body = body
return r
}
-// SetResult method is to register the response `Result` object for automatic unmarshalling in the RESTful mode
+// SetResult method is to register the response `Result` object for automatic unmarshalling for the request,
// if response status code is between 200 and 299 and content type either JSON or XML.
//
// Note: Result object can be pointer or non-pointer.
-// resty.R().SetResult(&AuthToken{})
+// client.R().SetResult(&AuthToken{})
// // OR
-// resty.R().SetResult(AuthToken{})
+// client.R().SetResult(AuthToken{})
//
-// Accessing a result value
+// Accessing a result value from response instance.
// response.Result().(*AuthToken)
-//
func (r *Request) SetResult(res interface{}) *Request {
r.Result = getPointer(res)
return r
}
-// SetError method is to register the request `Error` object for automatic unmarshalling in the RESTful mode
+// SetError method is to register the request `Error` object for automatic unmarshalling for the request,
// if response status code is greater than 399 and content type either JSON or XML.
//
// Note: Error object can be pointer or non-pointer.
-// resty.R().SetError(&AuthError{})
+// client.R().SetError(&AuthError{})
// // OR
-// resty.R().SetError(AuthError{})
+// client.R().SetError(AuthError{})
//
-// Accessing a error value
+// Accessing a error value from response instance.
// response.Error().(*AuthError)
-//
func (r *Request) SetError(err interface{}) *Request {
r.Error = getPointer(err)
return r
}
// SetFile method is to set single file field name and its path for multipart upload.
-// resty.R().
+// client.R().
// SetFile("my_file", "/Users/jeeva/Gas Bill - Sep.pdf")
-//
func (r *Request) SetFile(param, filePath string) *Request {
r.isMultiPart = true
r.FormData.Set("@"+param, filePath)
@@ -248,28 +294,24 @@ func (r *Request) SetFile(param, filePath string) *Request {
}
// SetFiles method is to set multiple file field name and its path for multipart upload.
-// resty.R().
+// client.R().
// SetFiles(map[string]string{
// "my_file1": "/Users/jeeva/Gas Bill - Sep.pdf",
// "my_file2": "/Users/jeeva/Electricity Bill - Sep.pdf",
// "my_file3": "/Users/jeeva/Water Bill - Sep.pdf",
// })
-//
func (r *Request) SetFiles(files map[string]string) *Request {
r.isMultiPart = true
-
for f, fp := range files {
r.FormData.Set("@"+f, fp)
}
-
return r
}
// SetFileReader method is to set single file using io.Reader for multipart upload.
-// resty.R().
+// client.R().
// SetFileReader("profile_img", "my-profile-img.png", bytes.NewReader(profileImgBytes)).
// SetFileReader("notes", "user-notes.txt", bytes.NewReader(notesBytes))
-//
func (r *Request) SetFileReader(param, fileName string, reader io.Reader) *Request {
r.isMultiPart = true
r.multipartFiles = append(r.multipartFiles, &File{
@@ -280,6 +322,15 @@ func (r *Request) SetFileReader(param, fileName string, reader io.Reader) *Reque
return r
}
+// SetMultipartFormData method allows simple form data to be attached to the request as `multipart:form-data`
+func (r *Request) SetMultipartFormData(data map[string]string) *Request {
+ for k, v := range data {
+ r = r.SetMultipartField(k, "", "", strings.NewReader(v))
+ }
+
+ return r
+}
+
// SetMultipartField method is to set custom data using io.Reader for multipart upload.
func (r *Request) SetMultipartField(param, fileName, contentType string, reader io.Reader) *Request {
r.isMultiPart = true
@@ -293,8 +344,9 @@ func (r *Request) SetMultipartField(param, fileName, contentType string, reader
}
// SetMultipartFields method is to set multiple data fields using io.Reader for multipart upload.
-// Example:
-// resty.R().SetMultipartFields(
+//
+// For Example:
+// client.R().SetMultipartFields(
// &resty.MultipartField{
// Param: "uploadManifest1",
// FileName: "upload-file-1.json",
@@ -309,7 +361,7 @@ func (r *Request) SetMultipartField(param, fileName, contentType string, reader
// })
//
// If you have slice already, then simply call-
-// resty.R().SetMultipartFields(fields...)
+// client.R().SetMultipartFields(fields...)
func (r *Request) SetMultipartFields(fields ...*MultipartField) *Request {
r.isMultiPart = true
r.multipartFields = append(r.multipartFields, fields...)
@@ -317,48 +369,69 @@ func (r *Request) SetMultipartFields(fields ...*MultipartField) *Request {
}
// SetContentLength method sets the HTTP header `Content-Length` value for current request.
-// By default go-resty won't set `Content-Length`. Also you have an option to enable for every
-// request. See `resty.SetContentLength`
-// resty.R().SetContentLength(true)
+// By default Resty won't set `Content-Length`. Also you have an option to enable for every
+// request.
//
+// See `Client.SetContentLength`
+// client.R().SetContentLength(true)
func (r *Request) SetContentLength(l bool) *Request {
r.setContentLength = true
return r
}
// SetBasicAuth method sets the basic authentication header in the current HTTP request.
-// For Header example:
+//
+// For Example:
// Authorization: Basic
//
// To set the header for username "go-resty" and password "welcome"
-// resty.R().SetBasicAuth("go-resty", "welcome")
-//
-// This method overrides the credentials set by method `resty.SetBasicAuth`.
+// client.R().SetBasicAuth("go-resty", "welcome")
//
+// This method overrides the credentials set by method `Client.SetBasicAuth`.
func (r *Request) SetBasicAuth(username, password string) *Request {
r.UserInfo = &User{Username: username, Password: password}
return r
}
-// SetAuthToken method sets bearer auth token header in the current HTTP request. Header example:
+// SetAuthToken method sets the auth token header(Default Scheme: Bearer) in the current HTTP request. Header example:
// Authorization: Bearer
//
-// Example: To set auth token BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F
+// For Example: To set auth token BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F
//
-// resty.R().SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F")
-//
-// This method overrides the Auth token set by method `resty.SetAuthToken`.
+// client.R().SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F")
//
+// This method overrides the Auth token set by method `Client.SetAuthToken`.
func (r *Request) SetAuthToken(token string) *Request {
r.Token = token
return r
}
+// SetAuthScheme method sets the auth token scheme type in the HTTP request. For Example:
+// Authorization:
+//
+// For Example: To set the scheme to use OAuth
+//
+// client.R().SetAuthScheme("OAuth")
+//
+// This auth header scheme gets added to all the request rasied from this client instance.
+// Also it can be overridden or set one at the request level is supported.
+//
+// Information about Auth schemes can be found in RFC7235 which is linked to below along with the page containing
+// the currently defined official authentication schemes:
+// https://tools.ietf.org/html/rfc7235
+// https://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml#authschemes
+//
+// This method overrides the Authorization scheme set by method `Client.SetAuthScheme`.
+func (r *Request) SetAuthScheme(scheme string) *Request {
+ r.AuthScheme = scheme
+ return r
+}
+
// SetOutput method sets the output file for current HTTP request. Current HTTP response will be
// saved into given file. It is similar to `curl -o` flag. Absolute path or relative path can be used.
// If is it relative path then output file goes under the output directory, as mentioned
// in the `Client.SetOutputDirectory`.
-// resty.R().
+// client.R().
// SetOutput("/Users/jeeva/Downloads/ReplyWithHeader-v5.1-beta.zip").
// Get("http://bit.ly/1LouEKr")
//
@@ -371,7 +444,7 @@ func (r *Request) SetOutput(file string) *Request {
// SetSRV method sets the details to query the service SRV record and execute the
// request.
-// resty.R().
+// client.R().
// SetSRV(SRVRecord{"web", "testservice.com"}).
// Get("/get")
func (r *Request) SetSRV(srv *SRVRecord) *Request {
@@ -383,7 +456,7 @@ func (r *Request) SetSRV(srv *SRVRecord) *Request {
// Resty exposes the raw response body as `io.ReadCloser`. Also do not forget to close the body,
// otherwise you might get into connection leaks, no connection reuse.
//
-// Please Note: Response middlewares are not applicable, if you use this option. Basically you have
+// Note: Response middlewares are not applicable, if you use this option. Basically you have
// taken over the control of response parsing from `Resty`.
func (r *Request) SetDoNotParseResponse(parse bool) *Request {
r.notParseResponse = parse
@@ -391,8 +464,8 @@ func (r *Request) SetDoNotParseResponse(parse bool) *Request {
}
// SetPathParams method sets multiple URL path key-value pairs at one go in the
-// resty current request instance.
-// resty.R().SetPathParams(map[string]string{
+// Resty current request instance.
+// client.R().SetPathParams(map[string]string{
// "userId": "sample@sample.com",
// "subAccountId": "100002",
// })
@@ -416,17 +489,122 @@ func (r *Request) ExpectContentType(contentType string) *Request {
return r
}
+// ForceContentType method provides a strong sense of response `Content-Type` for automatic unmarshalling.
+// Resty will respect it with higher priority; even response `Content-Type` response header value is available.
+func (r *Request) ForceContentType(contentType string) *Request {
+ r.forceContentType = contentType
+ return r
+}
+
// SetJSONEscapeHTML method is to enable/disable the HTML escape on JSON marshal.
//
-// NOTE: This option only applicable to standard JSON Marshaller.
+// Note: This option only applicable to standard JSON Marshaller.
func (r *Request) SetJSONEscapeHTML(b bool) *Request {
r.jsonEscapeHTML = b
return r
}
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// SetCookie method appends a single cookie in the current request instance.
+// client.R().SetCookie(&http.Cookie{
+// Name:"go-resty",
+// Value:"This is cookie value",
+// })
+//
+// Note: Method appends the Cookie value into existing Cookie if already existing.
+//
+// Since v2.1.0
+func (r *Request) SetCookie(hc *http.Cookie) *Request {
+ r.Cookies = append(r.Cookies, hc)
+ return r
+}
+
+// SetCookies method sets an array of cookies in the current request instance.
+// cookies := []*http.Cookie{
+// &http.Cookie{
+// Name:"go-resty-1",
+// Value:"This is cookie 1 value",
+// },
+// &http.Cookie{
+// Name:"go-resty-2",
+// Value:"This is cookie 2 value",
+// },
+// }
+//
+// // Setting a cookies into resty's current request
+// client.R().SetCookies(cookies)
+//
+// Note: Method appends the Cookie value into existing Cookie if already existing.
+//
+// Since v2.1.0
+func (r *Request) SetCookies(rs []*http.Cookie) *Request {
+ r.Cookies = append(r.Cookies, rs...)
+ return r
+}
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// HTTP request tracing
+//_______________________________________________________________________
+
+// EnableTrace method enables trace for the current request
+// using `httptrace.ClientTrace` and provides insights.
+//
+// client := resty.New()
+//
+// resp, err := client.R().EnableTrace().Get("https://httpbin.org/get")
+// fmt.Println("Error:", err)
+// fmt.Println("Trace Info:", resp.Request.TraceInfo())
+//
+// See `Client.EnableTrace` available too to get trace info for all requests.
+//
+// Since v2.0.0
+func (r *Request) EnableTrace() *Request {
+ r.trace = true
+ return r
+}
+
+// TraceInfo method returns the trace info for the request.
+// If either the Client or Request EnableTrace function has not been called
+// prior to the request being made, an empty TraceInfo object will be returned.
+//
+// Since v2.0.0
+func (r *Request) TraceInfo() TraceInfo {
+ ct := r.clientTrace
+
+ if ct == nil {
+ return TraceInfo{}
+ }
+
+ ti := TraceInfo{
+ DNSLookup: ct.dnsDone.Sub(ct.dnsStart),
+ TLSHandshake: ct.tlsHandshakeDone.Sub(ct.tlsHandshakeStart),
+ ServerTime: ct.gotFirstResponseByte.Sub(ct.gotConn),
+ TotalTime: ct.endTime.Sub(ct.dnsStart),
+ IsConnReused: ct.gotConnInfo.Reused,
+ IsConnWasIdle: ct.gotConnInfo.WasIdle,
+ ConnIdleTime: ct.gotConnInfo.IdleTime,
+ }
+
+ // Only calcuate on successful connections
+ if !ct.connectDone.IsZero() {
+ ti.TCPConnTime = ct.connectDone.Sub(ct.dnsDone)
+ }
+
+ // Only calcuate on successful connections
+ if !ct.gotConn.IsZero() {
+ ti.ConnTime = ct.gotConn.Sub(ct.getConn)
+ }
+
+ // Only calcuate on successful connections
+ if !ct.gotFirstResponseByte.IsZero() {
+ ti.ResponseTime = ct.endTime.Sub(ct.gotFirstResponseByte)
+ }
+
+ return ti
+}
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
// HTTP verb method starts here
-//___________________________________
+//_______________________________________________________________________
// Get method does GET HTTP request. It's defined in section 4.3.1 of RFC7231.
func (r *Request) Get(url string) (*Response, error) {
@@ -463,15 +641,25 @@ func (r *Request) Patch(url string) (*Response, error) {
return r.Execute(MethodPatch, url)
}
+// Send method performs the HTTP request using the method and URL already defined
+// for current `Request`.
+// req := client.R()
+// req.Method = resty.GET
+// req.URL = "http://httpbin.org/get"
+// resp, err := client.R().Send()
+func (r *Request) Send() (*Response, error) {
+ return r.Execute(r.Method, r.URL)
+}
+
// Execute method performs the HTTP request with given HTTP method and URL
// for current `Request`.
-// resp, err := resty.R().Execute(resty.GET, "http://httpbin.org/get")
-//
+// resp, err := client.R().Execute(resty.GET, "http://httpbin.org/get")
func (r *Request) Execute(method, url string) (*Response, error) {
var addrs []*net.SRV
+ var resp *Response
var err error
- if r.isMultiPart && !(method == MethodPost || method == MethodPut) {
+ if r.isMultiPart && !(method == MethodPost || method == MethodPut || method == MethodPatch) {
return nil, fmt.Errorf("multipart content is not allowed in HTTP verb [%v]", method)
}
@@ -486,12 +674,12 @@ func (r *Request) Execute(method, url string) (*Response, error) {
r.URL = r.selectAddr(addrs, url, 0)
if r.client.RetryCount == 0 {
- return r.client.execute(r)
+ resp, err = r.client.execute(r)
+ return resp, unwrapNoRetryErr(err)
}
- var resp *Response
attempt := 0
- _ = Backoff(
+ err = Backoff(
func() (*Response, error) {
attempt++
@@ -499,12 +687,7 @@ func (r *Request) Execute(method, url string) (*Response, error) {
resp, err = r.client.execute(r)
if err != nil {
- r.client.Log.Printf("ERROR %v, Attempt %v", err, attempt)
- if r.isContextCancelledIfAvailable() {
- // stop Backoff from retrying request if request has been
- // canceled by context
- return resp, nil
- }
+ r.client.log.Errorf("%v, Attempt %v", err, attempt)
}
return resp, err
@@ -515,58 +698,83 @@ func (r *Request) Execute(method, url string) (*Response, error) {
RetryConditions(r.client.RetryConditions),
)
- return resp, err
+ return resp, unwrapNoRetryErr(err)
}
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// SRVRecord struct
+//_______________________________________________________________________
+
+// SRVRecord struct holds the data to query the SRV record for the
+// following service.
+type SRVRecord struct {
+ Service string
+ Domain string
+}
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
// Request Unexported methods
-//___________________________________
+//_______________________________________________________________________
-func (r *Request) fmtBodyString() (body string) {
+func (r *Request) fmtBodyString(sl int64) (body string) {
body = "***** NO CONTENT *****"
- if isPayloadSupported(r.Method, r.client.AllowGetMethodPayload) {
- if _, ok := r.Body.(io.Reader); ok {
- body = "***** BODY IS io.Reader *****"
+ if !isPayloadSupported(r.Method, r.client.AllowGetMethodPayload) {
+ return
+ }
+
+ if _, ok := r.Body.(io.Reader); ok {
+ body = "***** BODY IS io.Reader *****"
+ return
+ }
+
+ // multipart or form-data
+ if r.isMultiPart || r.isFormData {
+ bodySize := int64(r.bodyBuf.Len())
+ if bodySize > sl {
+ body = fmt.Sprintf("***** REQUEST TOO LARGE (size - %d) *****", bodySize)
return
}
+ body = r.bodyBuf.String()
+ return
+ }
- // multipart or form-data
- if r.isMultiPart || r.isFormData {
- body = r.bodyBuf.String()
- return
- }
+ // request body data
+ if r.Body == nil {
+ return
+ }
+ var prtBodyBytes []byte
+ var err error
- // request body data
- if r.Body == nil {
- return
- }
- var prtBodyBytes []byte
- var err error
-
- contentType := r.Header.Get(hdrContentTypeKey)
- kind := kindOf(r.Body)
- if canJSONMarshal(contentType, kind) {
- prtBodyBytes, err = json.MarshalIndent(&r.Body, "", " ")
- } else if IsXMLType(contentType) && (kind == reflect.Struct) {
- prtBodyBytes, err = xml.MarshalIndent(&r.Body, "", " ")
- } else if b, ok := r.Body.(string); ok {
- if IsJSONType(contentType) {
- bodyBytes := []byte(b)
- out := acquireBuffer()
- defer releaseBuffer(out)
- if err = json.Indent(out, bodyBytes, "", " "); err == nil {
- prtBodyBytes = out.Bytes()
- }
- } else {
- body = b
- return
+ contentType := r.Header.Get(hdrContentTypeKey)
+ kind := kindOf(r.Body)
+ if canJSONMarshal(contentType, kind) {
+ prtBodyBytes, err = json.MarshalIndent(&r.Body, "", " ")
+ } else if IsXMLType(contentType) && (kind == reflect.Struct) {
+ prtBodyBytes, err = xml.MarshalIndent(&r.Body, "", " ")
+ } else if b, ok := r.Body.(string); ok {
+ if IsJSONType(contentType) {
+ bodyBytes := []byte(b)
+ out := acquireBuffer()
+ defer releaseBuffer(out)
+ if err = json.Indent(out, bodyBytes, "", " "); err == nil {
+ prtBodyBytes = out.Bytes()
}
- } else if b, ok := r.Body.([]byte); ok {
- body = base64.StdEncoding.EncodeToString(b)
+ } else {
+ body = b
}
+ } else if b, ok := r.Body.([]byte); ok {
+ body = fmt.Sprintf("***** BODY IS byte(s) (size - %d) *****", len(b))
+ return
+ }
- if prtBodyBytes != nil && err == nil {
- body = string(prtBodyBytes)
+ if prtBodyBytes != nil && err == nil {
+ body = string(prtBodyBytes)
+ }
+
+ if len(body) > 0 {
+ bodySize := int64(len([]byte(body)))
+ if bodySize > sl {
+ body = fmt.Sprintf("***** REQUEST TOO LARGE (size - %d) *****", bodySize)
}
}
@@ -584,3 +792,18 @@ func (r *Request) selectAddr(addrs []*net.SRV, path string, attempt int) string
return fmt.Sprintf("%s://%s:%d/%s", r.client.scheme, domain, addrs[idx].Port, path)
}
+
+func (r *Request) initValuesMap() {
+ if r.values == nil {
+ r.values = make(map[string]interface{})
+ }
+}
+
+var noescapeJSONMarshal = func(v interface{}) ([]byte, error) {
+ buf := acquireBuffer()
+ defer releaseBuffer(buf)
+ encoder := json.NewEncoder(buf)
+ encoder.SetEscapeHTML(false)
+ err := encoder.Encode(v)
+ return buf.Bytes(), err
+}
diff --git a/vendor/gopkg.in/resty.v1/response.go b/vendor/github.com/go-resty/resty/v2/response.go
similarity index 68%
rename from vendor/gopkg.in/resty.v1/response.go
rename to vendor/github.com/go-resty/resty/v2/response.go
index ea2a027a5..b82bce448 100644
--- a/vendor/gopkg.in/resty.v1/response.go
+++ b/vendor/github.com/go-resty/resty/v2/response.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
// resty source code and usage is governed by a MIT style
// license that can be found in the LICENSE file.
@@ -13,7 +13,11 @@ import (
"time"
)
-// Response is an object represents executed request and its values.
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// Response struct and methods
+//_______________________________________________________________________
+
+// Response struct holds response values of executed request.
type Response struct {
Request *Request
RawResponse *http.Response
@@ -24,6 +28,7 @@ type Response struct {
}
// Body method returns HTTP response as []byte array for the executed request.
+//
// Note: `Response.Body` might be nil, if `Request.SetOutput` is used.
func (r *Response) Body() []byte {
if r.RawResponse == nil {
@@ -38,7 +43,6 @@ func (r *Response) Status() string {
if r.RawResponse == nil {
return ""
}
-
return r.RawResponse.Status
}
@@ -48,10 +52,17 @@ func (r *Response) StatusCode() int {
if r.RawResponse == nil {
return 0
}
-
return r.RawResponse.StatusCode
}
+// Proto method returns the HTTP response protocol used for the request.
+func (r *Response) Proto() string {
+ if r.RawResponse == nil {
+ return ""
+ }
+ return r.RawResponse.Proto
+}
+
// Result method returns the response value as an object if it has one
func (r *Response) Result() interface{} {
return r.Request.Result
@@ -67,7 +78,6 @@ func (r *Response) Header() http.Header {
if r.RawResponse == nil {
return http.Header{}
}
-
return r.RawResponse.Header
}
@@ -76,7 +86,6 @@ func (r *Response) Cookies() []*http.Cookie {
if r.RawResponse == nil {
return make([]*http.Cookie, 0)
}
-
return r.RawResponse.Cookies()
}
@@ -85,14 +94,17 @@ func (r *Response) String() string {
if r.body == nil {
return ""
}
-
return strings.TrimSpace(string(r.body))
}
// Time method returns the time of HTTP response time that from request we sent and received a request.
-// See `response.ReceivedAt` to know when client recevied response and see `response.Request.Time` to know
+//
+// See `Response.ReceivedAt` to know when client recevied response and see `Response.Request.Time` to know
// when client sent a request.
func (r *Response) Time() time.Duration {
+ if r.Request.clientTrace != nil {
+ return r.Request.TraceInfo().TotalTime
+ }
return r.receivedAt.Sub(r.Request.Time)
}
@@ -120,16 +132,27 @@ func (r *Response) RawBody() io.ReadCloser {
return r.RawResponse.Body
}
-// IsSuccess method returns true if HTTP status code >= 200 and <= 299 otherwise false.
+// IsSuccess method returns true if HTTP status `code >= 200 and <= 299` otherwise false.
func (r *Response) IsSuccess() bool {
return r.StatusCode() > 199 && r.StatusCode() < 300
}
-// IsError method returns true if HTTP status code >= 400 otherwise false.
+// IsError method returns true if HTTP status `code >= 400` otherwise false.
func (r *Response) IsError() bool {
return r.StatusCode() > 399
}
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// Response Unexported methods
+//_______________________________________________________________________
+
+func (r *Response) setReceivedAt() {
+ r.receivedAt = time.Now()
+ if r.Request.clientTrace != nil {
+ r.Request.clientTrace.endTime = r.receivedAt
+ }
+}
+
func (r *Response) fmtBodyString(sl int64) string {
if r.body != nil {
if int64(len(r.body)) > sl {
@@ -139,9 +162,11 @@ func (r *Response) fmtBodyString(sl int64) string {
if IsJSONType(ct) {
out := acquireBuffer()
defer releaseBuffer(out)
- if err := json.Indent(out, r.body, "", " "); err == nil {
- return out.String()
+ err := json.Indent(out, r.body, "", " ")
+ if err != nil {
+ return fmt.Sprintf("*** Error: Unable to format response body - \"%s\" ***\n\nLog Body as-is:\n%s", err, r.String())
}
+ return out.String()
}
return r.String()
}
diff --git a/vendor/github.com/go-resty/resty/v2/resty.go b/vendor/github.com/go-resty/resty/v2/resty.go
new file mode 100644
index 000000000..4685594b8
--- /dev/null
+++ b/vendor/github.com/go-resty/resty/v2/resty.go
@@ -0,0 +1,40 @@
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// resty source code and usage is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+// Package resty provides Simple HTTP and REST client library for Go.
+package resty
+
+import (
+ "net"
+ "net/http"
+ "net/http/cookiejar"
+
+ "golang.org/x/net/publicsuffix"
+)
+
+// Version # of resty
+const Version = "2.3.0"
+
+// New method creates a new Resty client.
+func New() *Client {
+ cookieJar, _ := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
+ return createClient(&http.Client{
+ Jar: cookieJar,
+ })
+}
+
+// NewWithClient method creates a new Resty client with given `http.Client`.
+func NewWithClient(hc *http.Client) *Client {
+ return createClient(hc)
+}
+
+// NewWithLocalAddr method creates a new Resty client with given Local Address
+// to dial from.
+func NewWithLocalAddr(localAddr net.Addr) *Client {
+ cookieJar, _ := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
+ return createClient(&http.Client{
+ Jar: cookieJar,
+ Transport: createTransport(localAddr),
+ })
+}
diff --git a/vendor/github.com/go-resty/resty/v2/retry.go b/vendor/github.com/go-resty/resty/v2/retry.go
new file mode 100644
index 000000000..0b7c6ffe8
--- /dev/null
+++ b/vendor/github.com/go-resty/resty/v2/retry.go
@@ -0,0 +1,181 @@
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// resty source code and usage is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+package resty
+
+import (
+ "context"
+ "math"
+ "math/rand"
+ "time"
+)
+
+const (
+ defaultMaxRetries = 3
+ defaultWaitTime = time.Duration(100) * time.Millisecond
+ defaultMaxWaitTime = time.Duration(2000) * time.Millisecond
+)
+
+type (
+ // Option is to create convenient retry options like wait time, max retries, etc.
+ Option func(*Options)
+
+ // RetryConditionFunc type is for retry condition function
+ // input: non-nil Response OR request execution error
+ RetryConditionFunc func(*Response, error) bool
+
+ // RetryAfterFunc returns time to wait before retry
+ // For example, it can parse HTTP Retry-After header
+ // https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
+ // Non-nil error is returned if it is found that request is not retryable
+ // (0, nil) is a special result means 'use default algorithm'
+ RetryAfterFunc func(*Client, *Response) (time.Duration, error)
+
+ // Options struct is used to hold retry settings.
+ Options struct {
+ maxRetries int
+ waitTime time.Duration
+ maxWaitTime time.Duration
+ retryConditions []RetryConditionFunc
+ }
+)
+
+// Retries sets the max number of retries
+func Retries(value int) Option {
+ return func(o *Options) {
+ o.maxRetries = value
+ }
+}
+
+// WaitTime sets the default wait time to sleep between requests
+func WaitTime(value time.Duration) Option {
+ return func(o *Options) {
+ o.waitTime = value
+ }
+}
+
+// MaxWaitTime sets the max wait time to sleep between requests
+func MaxWaitTime(value time.Duration) Option {
+ return func(o *Options) {
+ o.maxWaitTime = value
+ }
+}
+
+// RetryConditions sets the conditions that will be checked for retry.
+func RetryConditions(conditions []RetryConditionFunc) Option {
+ return func(o *Options) {
+ o.retryConditions = conditions
+ }
+}
+
+// Backoff retries with increasing timeout duration up until X amount of retries
+// (Default is 3 attempts, Override with option Retries(n))
+func Backoff(operation func() (*Response, error), options ...Option) error {
+ // Defaults
+ opts := Options{
+ maxRetries: defaultMaxRetries,
+ waitTime: defaultWaitTime,
+ maxWaitTime: defaultMaxWaitTime,
+ retryConditions: []RetryConditionFunc{},
+ }
+
+ for _, o := range options {
+ o(&opts)
+ }
+
+ var (
+ resp *Response
+ err error
+ )
+
+ for attempt := 0; attempt <= opts.maxRetries; attempt++ {
+ resp, err = operation()
+ ctx := context.Background()
+ if resp != nil && resp.Request.ctx != nil {
+ ctx = resp.Request.ctx
+ }
+ if ctx.Err() != nil {
+ return err
+ }
+
+ err1 := unwrapNoRetryErr(err) // raw error, it used for return users callback.
+ needsRetry := err != nil && err == err1 // retry on a few operation errors by default
+
+ for _, condition := range opts.retryConditions {
+ needsRetry = condition(resp, err1)
+ if needsRetry {
+ break
+ }
+ }
+
+ if !needsRetry {
+ return err
+ }
+
+ waitTime, err2 := sleepDuration(resp, opts.waitTime, opts.maxWaitTime, attempt)
+ if err2 != nil {
+ if err == nil {
+ err = err2
+ }
+ return err
+ }
+
+ select {
+ case <-time.After(waitTime):
+ case <-ctx.Done():
+ return ctx.Err()
+ }
+ }
+
+ return err
+}
+
+func sleepDuration(resp *Response, min, max time.Duration, attempt int) (time.Duration, error) {
+ const maxInt = 1<<31 - 1 // max int for arch 386
+
+ if max < 0 {
+ max = maxInt
+ }
+
+ if resp == nil {
+ goto defaultCase
+ }
+
+ // 1. Check for custom callback
+ if retryAfterFunc := resp.Request.client.RetryAfter; retryAfterFunc != nil {
+ result, err := retryAfterFunc(resp.Request.client, resp)
+ if err != nil {
+ return 0, err // i.e. 'API quota exceeded'
+ }
+ if result == 0 {
+ goto defaultCase
+ }
+ if result < 0 || max < result {
+ result = max
+ }
+ if result < min {
+ result = min
+ }
+ return result, nil
+ }
+
+ // 2. Return capped exponential backoff with jitter
+ // http://www.awsarchitectureblog.com/2015/03/backoff.html
+defaultCase:
+ base := float64(min)
+ capLevel := float64(max)
+
+ temp := math.Min(capLevel, base*math.Exp2(float64(attempt)))
+ ri := int(temp / 2)
+ if ri <= 0 {
+ ri = maxInt // max int for arch 386
+ }
+ result := time.Duration(math.Abs(float64(ri + rand.Intn(ri))))
+
+ if result < min {
+ result = min
+ }
+
+ return result, nil
+}
diff --git a/vendor/github.com/go-resty/resty/v2/trace.go b/vendor/github.com/go-resty/resty/v2/trace.go
new file mode 100644
index 000000000..025b7d9b5
--- /dev/null
+++ b/vendor/github.com/go-resty/resty/v2/trace.go
@@ -0,0 +1,122 @@
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// resty source code and usage is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+package resty
+
+import (
+ "context"
+ "crypto/tls"
+ "net/http/httptrace"
+ "time"
+)
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// TraceInfo struct
+//_______________________________________________________________________
+
+// TraceInfo struct is used provide request trace info such as DNS lookup
+// duration, Connection obtain duration, Server processing duration, etc.
+//
+// Since v2.0.0
+type TraceInfo struct {
+ // DNSLookup is a duration that transport took to perform
+ // DNS lookup.
+ DNSLookup time.Duration
+
+ // ConnTime is a duration that took to obtain a successful connection.
+ ConnTime time.Duration
+
+ // TCPConnTime is a duration that took to obtain the TCP connection.
+ TCPConnTime time.Duration
+
+ // TLSHandshake is a duration that TLS handshake took place.
+ TLSHandshake time.Duration
+
+ // ServerTime is a duration that server took to respond first byte.
+ ServerTime time.Duration
+
+ // ResponseTime is a duration since first response byte from server to
+ // request completion.
+ ResponseTime time.Duration
+
+ // TotalTime is a duration that total request took end-to-end.
+ TotalTime time.Duration
+
+ // IsConnReused is whether this connection has been previously
+ // used for another HTTP request.
+ IsConnReused bool
+
+ // IsConnWasIdle is whether this connection was obtained from an
+ // idle pool.
+ IsConnWasIdle bool
+
+ // ConnIdleTime is a duration how long the connection was previously
+ // idle, if IsConnWasIdle is true.
+ ConnIdleTime time.Duration
+}
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// CientTrace struct and its methods
+//_______________________________________________________________________
+
+// tracer struct maps the `httptrace.ClientTrace` hooks into Fields
+// with same naming for easy understanding. Plus additional insights
+// Request.
+type clientTrace struct {
+ getConn time.Time
+ dnsStart time.Time
+ dnsDone time.Time
+ connectDone time.Time
+ tlsHandshakeStart time.Time
+ tlsHandshakeDone time.Time
+ gotConn time.Time
+ gotFirstResponseByte time.Time
+ endTime time.Time
+ gotConnInfo httptrace.GotConnInfo
+}
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// Trace unexported methods
+//_______________________________________________________________________
+
+func (t *clientTrace) createContext(ctx context.Context) context.Context {
+ return httptrace.WithClientTrace(
+ ctx,
+ &httptrace.ClientTrace{
+ DNSStart: func(_ httptrace.DNSStartInfo) {
+ t.dnsStart = time.Now()
+ },
+ DNSDone: func(_ httptrace.DNSDoneInfo) {
+ t.dnsDone = time.Now()
+ },
+ ConnectStart: func(_, _ string) {
+ if t.dnsDone.IsZero() {
+ t.dnsDone = time.Now()
+ }
+ if t.dnsStart.IsZero() {
+ t.dnsStart = t.dnsDone
+ }
+ },
+ ConnectDone: func(net, addr string, err error) {
+ t.connectDone = time.Now()
+ },
+ GetConn: func(_ string) {
+ t.getConn = time.Now()
+ },
+ GotConn: func(ci httptrace.GotConnInfo) {
+ t.gotConn = time.Now()
+ t.gotConnInfo = ci
+ },
+ GotFirstResponseByte: func() {
+ t.gotFirstResponseByte = time.Now()
+ },
+ TLSHandshakeStart: func() {
+ t.tlsHandshakeStart = time.Now()
+ },
+ TLSHandshakeDone: func(_ tls.ConnectionState, _ error) {
+ t.tlsHandshakeDone = time.Now()
+ },
+ },
+ )
+}
diff --git a/vendor/github.com/go-resty/resty/v2/transport.go b/vendor/github.com/go-resty/resty/v2/transport.go
new file mode 100644
index 000000000..6cde29e8e
--- /dev/null
+++ b/vendor/github.com/go-resty/resty/v2/transport.go
@@ -0,0 +1,35 @@
+// +build go1.13
+
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// resty source code and usage is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+package resty
+
+import (
+ "net"
+ "net/http"
+ "runtime"
+ "time"
+)
+
+func createTransport(localAddr net.Addr) *http.Transport {
+ dialer := &net.Dialer{
+ Timeout: 30 * time.Second,
+ KeepAlive: 30 * time.Second,
+ DualStack: true,
+ }
+ if localAddr != nil {
+ dialer.LocalAddr = localAddr
+ }
+ return &http.Transport{
+ Proxy: http.ProxyFromEnvironment,
+ DialContext: dialer.DialContext,
+ ForceAttemptHTTP2: true,
+ MaxIdleConns: 100,
+ IdleConnTimeout: 90 * time.Second,
+ TLSHandshakeTimeout: 10 * time.Second,
+ ExpectContinueTimeout: 1 * time.Second,
+ MaxIdleConnsPerHost: runtime.GOMAXPROCS(0) + 1,
+ }
+}
diff --git a/vendor/github.com/go-resty/resty/v2/transport112.go b/vendor/github.com/go-resty/resty/v2/transport112.go
new file mode 100644
index 000000000..ff7c2770c
--- /dev/null
+++ b/vendor/github.com/go-resty/resty/v2/transport112.go
@@ -0,0 +1,34 @@
+// +build !go1.13
+
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// resty source code and usage is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+package resty
+
+import (
+ "net"
+ "net/http"
+ "runtime"
+ "time"
+)
+
+func createTransport(localAddr net.Addr) *http.Transport {
+ dialer := &net.Dialer{
+ Timeout: 30 * time.Second,
+ KeepAlive: 30 * time.Second,
+ DualStack: true,
+ }
+ if localAddr != nil {
+ dialer.LocalAddr = localAddr
+ }
+ return &http.Transport{
+ Proxy: http.ProxyFromEnvironment,
+ DialContext: dialer.DialContext,
+ MaxIdleConns: 100,
+ IdleConnTimeout: 90 * time.Second,
+ TLSHandshakeTimeout: 10 * time.Second,
+ ExpectContinueTimeout: 1 * time.Second,
+ MaxIdleConnsPerHost: runtime.GOMAXPROCS(0) + 1,
+ }
+}
diff --git a/vendor/gopkg.in/resty.v1/util.go b/vendor/github.com/go-resty/resty/v2/util.go
similarity index 63%
rename from vendor/gopkg.in/resty.v1/util.go
rename to vendor/github.com/go-resty/resty/v2/util.go
index 997cd1009..aaa53c236 100644
--- a/vendor/gopkg.in/resty.v1/util.go
+++ b/vendor/github.com/go-resty/resty/v2/util.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
+// Copyright (c) 2015-2020 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
// resty source code and usage is governed by a MIT style
// license that can be found in the LICENSE file.
@@ -6,7 +6,6 @@ package resty
import (
"bytes"
- "encoding/json"
"encoding/xml"
"fmt"
"io"
@@ -22,9 +21,52 @@ import (
"strings"
)
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+// Logger interface
+//_______________________________________________________________________
+
+// Logger interface is to abstract the logging from Resty. Gives control to
+// the Resty users, choice of the logger.
+type Logger interface {
+ Errorf(format string, v ...interface{})
+ Warnf(format string, v ...interface{})
+ Debugf(format string, v ...interface{})
+}
+
+func createLogger() *logger {
+ l := &logger{l: log.New(os.Stderr, "", log.Ldate|log.Lmicroseconds)}
+ return l
+}
+
+var _ Logger = (*logger)(nil)
+
+type logger struct {
+ l *log.Logger
+}
+
+func (l *logger) Errorf(format string, v ...interface{}) {
+ l.output("ERROR RESTY "+format, v...)
+}
+
+func (l *logger) Warnf(format string, v ...interface{}) {
+ l.output("WARN RESTY "+format, v...)
+}
+
+func (l *logger) Debugf(format string, v ...interface{}) {
+ l.output("DEBUG RESTY "+format, v...)
+}
+
+func (l *logger) output(format string, v ...interface{}) {
+ if len(v) == 0 {
+ l.l.Print(format)
+ return
+ }
+ l.l.Printf(format, v...)
+}
+
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
// Package Helper methods
-//___________________________________
+//_______________________________________________________________________
// IsStringEmpty method tells whether given string is empty or not
func IsStringEmpty(str string) bool {
@@ -61,18 +103,6 @@ func IsXMLType(ct string) bool {
return xmlCheck.MatchString(ct)
}
-// Unmarshal content into object from JSON or XML
-// Deprecated: kept for backward compatibility
-func Unmarshal(ct string, b []byte, d interface{}) (err error) {
- if IsJSONType(ct) {
- err = json.Unmarshal(b, d)
- } else if IsXMLType(ct) {
- err = xml.Unmarshal(b, d)
- }
-
- return
-}
-
// Unmarshalc content into object from JSON or XML
func Unmarshalc(c *Client, ct string, b []byte, d interface{}) (err error) {
if IsJSONType(ct) {
@@ -84,9 +114,9 @@ func Unmarshalc(c *Client, ct string, b []byte, d interface{}) (err error) {
return
}
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
// RequestLog and ResponseLog type
-//___________________________________
+//_______________________________________________________________________
// RequestLog struct is used to collected information from resty request
// instance for debug logging. It sent to request log callback before resty
@@ -104,9 +134,9 @@ type ResponseLog struct {
Body string
}
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
// Package Unexported methods
-//___________________________________
+//_______________________________________________________________________
// way to disable the HTML escape as opt-in
func jsonMarshal(c *Client, r *Request, d interface{}) ([]byte, error) {
@@ -127,10 +157,6 @@ func firstNonEmpty(v ...string) string {
return ""
}
-func getLogger(w io.Writer) *log.Logger {
- return log.New(w, "RESTY ", log.LstdFlags)
-}
-
var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"")
func escapeQuotes(s string) string {
@@ -139,9 +165,19 @@ func escapeQuotes(s string) string {
func createMultipartHeader(param, fileName, contentType string) textproto.MIMEHeader {
hdr := make(textproto.MIMEHeader)
- hdr.Set("Content-Disposition", fmt.Sprintf(`form-data; name="%s"; filename="%s"`,
- escapeQuotes(param), escapeQuotes(fileName)))
- hdr.Set("Content-Type", contentType)
+
+ var contentDispositionValue string
+ if IsStringEmpty(fileName) {
+ contentDispositionValue = fmt.Sprintf(`form-data; name="%s"`, param)
+ } else {
+ contentDispositionValue = fmt.Sprintf(`form-data; name="%s"; filename="%s"`,
+ param, escapeQuotes(fileName))
+ }
+ hdr.Set("Content-Disposition", contentDispositionValue)
+
+ if !IsStringEmpty(contentType) {
+ hdr.Set(hdrContentTypeKey, contentType)
+ }
return hdr
}
@@ -249,22 +285,40 @@ func releaseBuffer(buf *bytes.Buffer) {
func closeq(v interface{}) {
if c, ok := v.(io.Closer); ok {
- sliently(c.Close())
+ silently(c.Close())
}
}
-func sliently(_ ...interface{}) {}
+func silently(_ ...interface{}) {}
-func composeHeaders(hdrs http.Header) string {
- var str []string
+func composeHeaders(c *Client, r *Request, hdrs http.Header) string {
+ str := make([]string, 0, len(hdrs))
for _, k := range sortHeaderKeys(hdrs) {
- str = append(str, fmt.Sprintf("%25s: %s", k, strings.Join(hdrs[k], ", ")))
+ var v string
+ if k == "Cookie" {
+ cv := strings.TrimSpace(strings.Join(hdrs[k], ", "))
+ if c.GetClient().Jar != nil {
+ for _, c := range c.GetClient().Jar.Cookies(r.RawRequest.URL) {
+ if cv != "" {
+ cv = cv + "; " + c.String()
+ } else {
+ cv = c.String()
+ }
+ }
+ }
+ v = strings.TrimSpace(fmt.Sprintf("%25s: %s", k, cv))
+ } else {
+ v = strings.TrimSpace(fmt.Sprintf("%25s: %s", k, strings.Join(hdrs[k], ", ")))
+ }
+ if v != "" {
+ str = append(str, "\t"+v)
+ }
}
return strings.Join(str, "\n")
}
func sortHeaderKeys(hdrs http.Header) []string {
- var keys []string
+ keys := make([]string, 0, len(hdrs))
for key := range hdrs {
keys = append(keys, key)
}
@@ -279,3 +333,25 @@ func copyHeaders(hdrs http.Header) http.Header {
}
return nh
}
+
+type noRetryErr struct {
+ err error
+}
+
+func (e *noRetryErr) Error() string {
+ return e.err.Error()
+}
+
+func wrapNoRetryErr(err error) error {
+ if err != nil {
+ err = &noRetryErr{err: err}
+ }
+ return err
+}
+
+func unwrapNoRetryErr(err error) error {
+ if e, ok := err.(*noRetryErr); ok {
+ err = e.err
+ }
+ return err
+}
diff --git a/vendor/github.com/linode/linodego/.golangci.yml b/vendor/github.com/linode/linodego/.golangci.yml
new file mode 100644
index 000000000..82774a287
--- /dev/null
+++ b/vendor/github.com/linode/linodego/.golangci.yml
@@ -0,0 +1,47 @@
+run:
+ tests: false
+
+linters-settings:
+ errcheck:
+ check-type-assertions: true
+ check-blank: true
+
+ govet:
+ check-shadowing: true
+
+ enable:
+ - atomicalign
+ enable-all: false
+ disable:
+ - shadow
+ disable-all: false
+ golint:
+ min-confidence: 0.8
+ gocyclo:
+ min-complexity: 30
+ gocognit:
+ min-complexity: 30
+ maligned:
+ suggest-new: true
+ dupl:
+ threshold: 100
+
+linters:
+ enable-all: true
+ disable:
+ - vetshadow
+ - gocyclo
+ - unparam
+ - nakedret
+ - lll
+ - dupl
+ - gosec
+ - gochecknoinits
+ - gochecknoglobals
+ - errcheck
+ - staticcheck
+ - stylecheck
+ - wsl
+ - interfacer
+ - gomnd
+ fast: false
diff --git a/vendor/github.com/linode/linodego/.travis.yml b/vendor/github.com/linode/linodego/.travis.yml
index 83fec93e3..58180008e 100644
--- a/vendor/github.com/linode/linodego/.travis.yml
+++ b/vendor/github.com/linode/linodego/.travis.yml
@@ -4,19 +4,18 @@ matrix:
allow_failures:
- go: tip
-go:
- - "1.10"
- - tip
+env:
+ - GO111MODULE=on
-install:
- - go get -u gopkg.in/alecthomas/gometalinter.v2
- - gometalinter.v2 --install
+go:
+ - "1.13"
script:
- touch .env
- - make test ARGS='-v -race -count=2 -coverprofile=coverage.txt -covermode=atomic ./...'
- - gometalinter.v2 --enable-all --disable=vetshadow --disable=gocyclo --disable=unparam --disable=nakedret --disable=lll --disable=dupl --disable=gosec --disable=gochecknoinits --disable=gochecknoglobals --disable=test --deadline=120s
- - gometalinter.v2 --disable-all --enable=vetshadow --enable=gocyclo --enable=unparam --enable=nakedret --enable=lll --enable=dupl --enable=gosec --enable=gochecknoinits --enable=gochecknoglobals --deadline=120s || true
+ - curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(go env GOPATH)/bin v1.21.0
+ - go mod download
+ - go mod vendor
+ - make test ARGS='-race -count=2 -coverprofile=coverage.txt -covermode=atomic ./...'
after_success:
- bash <(curl -s https://codecov.io/bash)
diff --git a/vendor/github.com/linode/linodego/API_SUPPORT.md b/vendor/github.com/linode/linodego/API_SUPPORT.md
index 2fd663f4f..5eab78c60 100644
--- a/vendor/github.com/linode/linodego/API_SUPPORT.md
+++ b/vendor/github.com/linode/linodego/API_SUPPORT.md
@@ -1,5 +1,19 @@
# API Support
+This document tracks LinodeGo support for the features of the [Linode API](https://developers.linode.com/changelog/api/).
+
+Endpoints are implemented as needed, by need or user-request. As new features are added (as reported in the [Linode API Changelog](https://developers.linode.com/changelog/api/)) this document should be updated to reflect any missing endpoints. New or deprecated fields should also be indicated below the affected HTTP method, for example:
+
+```markdown
+- `/fake/endpoint`
+ - [x] `GET`
+ * 4.0.29 field X is not implemented
+ - [ ] `POST`
+ * 4.0.30 added support to create Fake things
+```
+
+See `template.go` and `template_test.go` for tips on adding new endpoints.
+
## Linodes
- `/linode/instances`
@@ -68,11 +82,11 @@
### IPs
- `/linode/instances/$id/ips`
- - [ ] `GET`
- - [ ] `POST`
+ - [X] `GET`
+ - [X] `POST`
- `/linode/instances/$id/ips/$ip_address`
- - [ ] `GET`
- - [ ] `PUT`
+ - [X] `GET`
+ - [X] `PUT`
- [ ] `DELETE`
- `/linode/instances/$id/ips/sharing`
- [ ] `POST`
@@ -97,9 +111,9 @@
### Stats
- `/linode/instances/$id/stats`
- - [ ] `GET`
+ - [X] `GET`
- `/linode/instances/$id/stats/$year/$month`
- - [ ] `GET`
+ - [X] `GET`
### Types
@@ -127,6 +141,27 @@
- [X] `PUT`
- [X] `DELETE`
+## LKE
+
+- `/lke/clusters`
+ - [X] `POST`
+ - [X] `GET`
+ - [X] `PUT`
+ - [X] `DELETE`
+- `/lke/clusters/$id/pools`
+ - [X] `POST`
+ - [X] `GET`
+ - [X] `PUT`
+ - [X] `DELETE`
+- `/lke/clusters/$id/api-endpoint`
+ - [X] `GET`
+- `/lke/clusters/$id/kubeconfig`
+ - [X] `GET`
+- `/lke/clusters/$id/versions`
+ - [X] `GET`
+- `/lke/clusters/$id/versions/$id`
+ - [X] `GET`
+
## Longview
- `/longview/clients`
@@ -153,6 +188,8 @@
- [X] `GET`
- [X] `PUT`
- [X] `DELETE`
+- `/nodebalancers/$id/stats`
+ - [X] `GET`
### NodeBalancer Configs
@@ -181,7 +218,7 @@
- [ ] `POST`
- `/networking/ips/$address`
- [X] `GET`
- - [ ] `PUT`
+ - [X] `PUT`
- [ ] `DELETE`
### IPv6
@@ -191,9 +228,9 @@
- `/networking/ips/$address`
- [X] `GET`
- [ ] `PUT`
-- /networking/ipv6/ranges
+- `/networking/ipv6/ranges`
- [X] `GET`
-- /networking/ipv6/pools
+- `/networking/ipv6/pools`
- [X] `GET`
## Regions
@@ -255,25 +292,50 @@
### OAuth Clients
- `/account/oauth-clients`
- - [ ] `GET`
- - [ ] `POST`
+ - [X] `GET`
+ - [X] `POST`
- `/account/oauth-clients/$id`
- - [ ] `GET`
- - [ ] `PUT`
- - [ ] `DELETE`
+ - [X] `GET`
+ - [X] `PUT`
+ - [X] `DELETE`
- `/account/oauth-clients/$id/reset_secret`
- [ ] `POST`
- `/account/oauth-clients/$id/thumbnail`
- [ ] `GET`
- [ ] `PUT`
+### Object Storage Keys
+
+- `/object-storage/keys`
+ - [X] `GET`
+ - [X] `POST`
+- `/object-storage/keys/$id`
+ - [X] `GET`
+ - [X] `PUT`
+ - [X] `DELETE`
+
+### Object Storage Clusters
+- `/object-storage/clusters`
+ - [X] `GET`
+- `/object-storage/clusters/$id`
+ - [X] `GET`
+
+### Object Storage Buckets
+
+- `/object-storage/buckets`
+ - [X] `GET`
+ - [X] `POST`
+- `/object-storage/buckets/$id/$id`
+ - [X] `GET`
+ - [X] `DELETE`
+
### Payments
- `/account/payments`
- - [ ] `GET`
- - [ ] `POST`
+ - [X] `GET`
+ - [X] `POST`
- `/account/payments/$id`
- - [ ] `GET`
+ - [X] `GET`
- `/account/payments/paypal`
- [ ] `GET`
- `/account/payments/paypal/execute`
@@ -282,8 +344,8 @@
### Settings
- `/account/settings`
- - [ ] `GET`
- - [ ] `PUT`
+ - [X] `GET`
+ - [X] `PUT`
### Users
@@ -330,7 +392,7 @@
- [x] `GET`
- [x] `PUT`
- [x] `DELETE`
-
+
### Two-Factor
- `/profile/tfa-disable`
diff --git a/vendor/github.com/linode/linodego/CHANGELOG.md b/vendor/github.com/linode/linodego/CHANGELOG.md
index 54c176642..70bf97e87 100644
--- a/vendor/github.com/linode/linodego/CHANGELOG.md
+++ b/vendor/github.com/linode/linodego/CHANGELOG.md
@@ -1,239 +1 @@
-# Change Log
-
-## Unreleased
-
-### Fixes
-
-### Features
-
-
-
-## [v0.7.1](https://github.com/linode/linodego/compare/v0.7.0..v0.7.1) (2018-02-05)
-
-### Features
-
-* add `ClassDedicated` constant (`dedicated`) for use in `LinodeType` `Class` values
- See the [Dedicated CPU Announcement](https://blog.linode.com/2019/02/05/introducing-linode-dedicated-cpu-instances/)
-
-
-
-## [v0.7.0](https://github.com/linode/linodego/compare/v0.6.2..v0.7.0) (2018-12-03)
-
-### Features
-
-* add `Tags` field in: `NodeBalancer`, `Domain`, `Volume`
-* add `UpdateIPAddress` (for setting RDNS)
-
-### Fixes
-
-* invalid URL for `/v4/networking/` enpoints (IPv6 Ranges and Pools) has been correcrted
-
-
-
-## [v0.6.2](https://github.com/linode/linodego/compare/v0.6.1..v0.6.2) (2018-10-26)
-
-### Fixes
-
-* add missing `Account` fields: `address_1`, `address_2`, `phone`
-
-
-## [v0.6.1](https://github.com/linode/linodego/compare/v0.6.0..v0.6.1) (2018-10-26)
-
-### Features
-
-* Adds support for fetching and updating basic Profile information
-
-
-## [v0.6.0](https://github.com/linode/linodego/compare/v0.5.1..v0.6.0) (2018-10-25)
-
-### Fixes
-
-* Fixes Image date handling
-* Fixes broken example code in README
-* Fixes WaitForEventFinished when encountering events without entity
-* Fixes ResizeInstanceDisk which was executing CloneInstanceDisk
-* Fixes go-resty import path to gopkg.in version for future go module support
-
-### Features
-
-* Adds support for user account operations
-* Adds support for profile tokens
-* Adds support for Tags
-* Adds PasswordResetInstanceDisk
-* Adds DiskStatus constants
-* Adds WaitForInstanceDiskStatus
-* Adds SetPollDelay for configuring poll duration
-
- * Reduced polling time to millisecond granularity
- * Change polling default to 3s to avoid 429 conditions
- * Use poll delay in waitfor functions
-
-
-## [v0.5.1](https://github.com/linode/linodego/compare/v0.5.0...v0.5.1) (2018-09-10)
-
-### Fixes
-
-* Domain.Status was not imported from API responses correctly
-
-
-## [v0.5.0](https://github.com/linode/linodego/compare/v0.4.0...v0.5.0) (2018-09-09)
-
-### Breaking Changes
-
-* List functions return slice of thing instead of slice of pointer to thing
-
-### Feature
-
-* add SSHKeys methods to client (also affects InstanceCreate, InstanceDiskCreate)
-* add RebuildNodeBalancerConfig (and CreateNodeBalancerConfig with Nodes)
-
-### Fixes
-
-* Event.TimeRemaining wouldn't parse all possible API value
-* Tests no longer rely on known/special instance and volume ids
-
-
-## [0.4.0](https://github.com/linode/linodego/compare/v0.3.0...0.4.0) (2018-08-27)
-
-### Breaking Changes
-
-Replaces bool, error results with error results, for:
-
-* instance\_snapshots.go: EnableInstanceBackups
-* instance\_snapshots.go: CancelInstanceBackups
-* instance\_snapshots.go: RestoreInstanceBackup
-* instances.go: BootInstance
-* instances.go: RebootInstance
-* instances.go: MutateInstance
-* instances.go: RescueInstance
-* instances.go: ResizeInstance
-* instances.go: ShutdownInstance
-* volumes.go: DetachVolume
-* volumes.go: ResizeVolume
-
-
-### Docs
-
-* reword text about breaking changes until first tag
-
-### Feat
-
-* added MigrateInstance and InstanceResizing from 4.0.1-4.0.3 API Changelog
-* added gometalinter to travis builds
-* added missing function and type comments as reported by linting tools
-* supply json values for all fields, useful for mocking responses using linodego types
-* use context channels in WaitFor\* functions
-* add LinodeTypeClass type (enum)
-* add TicketStatus type (enum)
-* update template thing and add a test template
-
-### Fix
-
-* TransferQuota was TransferQuote (and not parsed from the api correctly)
-* stackscripts udf was not parsed correctly
-* add InstanceCreateOptions.PrivateIP
-* check the WaitFor timeout before sleeping to avoid extra sleep
-* various linting warnings and unhandled err results as reported by linting tools
-* fix GetStackscript 404 handling
-
-
-
-
-## [0.3.0](https://github.com/linode/linodego/compare/v0.2.0...0.3.0) (2018-08-15)
-
-### Breaking Changes
-
-* WaitForVolumeLinodeID return fetch volume for consistency with out WaitFors
-* Moved linodego from chiefy to github.com/linode. Thanks [@chiefy](https://github.com/chiefy)!
-
-
-
-## [v0.2.0](https://github.com/linode/linodego/compare/v0.1.1...v0.2.0) (2018-08-11)
-
-### Breaking Changes
-
-* WaitFor\* should be client methods
- *use `client.WaitFor...` rather than `linodego.WaitFor(..., client, ...)`*
-
-* remove ListInstanceSnapshots (does not exist in the API)
- *this never worked, so shouldn't cause a problem*
-
-* Changes UpdateOptions and CreateOptions and similar Options parameters to values instead of pointers
- *these were never optional and the function never updated any values in the Options structures*
-
-* fixed various optional/zero Update and Create options
- *some values are now pointers, and vice-versa*
-
- * Changes InstanceUpdateOptions to use pointers for optional fields Backups and Alerts
- * Changes InstanceClone's Disks and Configs to ints instead of strings
-
-* using new enum string aliased types where appropriate
- *`InstanceSnapshotStatus`, `DiskFilesystem`, `NodeMode`*
-
-### Feature
-
-* add RescueInstance and RescueInstanceOptions
-* add CreateImage, UpdateImage, DeleteImage
-* add EnableInstanceBackups, CancelInstanceBackups, RestoreInstanceBackup
-* add WatchdogEnabled to InstanceUpdateOptions
-
-### Fix
-
-* return Volume from AttachVolume instead of bool
-* add more boilerplate to template.go
-* nodebalancers and domain records had no pagination support
-* NodeBalancer transfer stats are not int
-
-### Tests
-
-* add fixtures and tests for NodeBalancerNodes
-* fix nodebalancer tests to handle changes due to random labels
-* add tests for nodebalancers and nodebalancer configs
-* added tests for Backups flow
-* TestListInstanceBackups fixture is hand tweaked because repeated polled events
- appear to get the tests stuck
-
-### Deps
-
-* update all dependencies to latest
-
-
-
-## [v0.1.1](https://github.com/linode/linodego/compare/v0.0.1...v0.1.0) (2018-07-30)
-
-Adds more Domain handling
-
-### Fixed
-
-* go-resty doesnt pass errors when content-type is not set
-* Domain, DomainRecords, tests and fixtures
-
-### Added
-
-* add CreateDomainRecord, UpdateDomainRecord, and DeleteDomainRecord
-
-
-
-## [v0.1.0](https://github.com/linode/linodego/compare/v0.0.1...v0.1.0) (2018-07-23)
-
-Deals with NewClient and context for all http requests
-
-### Breaking Changes
-
-* changed `NewClient(token, *http.RoundTripper)` to `NewClient(*http.Client)`
-* changed all `Client` `Get`, `List`, `Create`, `Update`, `Delete`, and `Wait` calls to take context as the first parameter
-
-### Fixed
-
-* fixed docs should now show Examples for more functions
-
-### Added
-
-* added `Client.SetBaseURL(url string)`
-
-
-## v0.0.1 (2018-07-20)
-
-### Changed
-
-* Initial tagged release
+Release notes for this project are kept here: https://github.com/linode/linodego/releases
diff --git a/vendor/github.com/linode/linodego/Gopkg.lock b/vendor/github.com/linode/linodego/Gopkg.lock
deleted file mode 100644
index a7ca4f015..000000000
--- a/vendor/github.com/linode/linodego/Gopkg.lock
+++ /dev/null
@@ -1,111 +0,0 @@
-# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
-
-
-[[projects]]
- branch = "master"
- digest = "1:6e1c13bc32e58ccb4afa1115a3ba4fc071d918ed897b40dfa323ffb3fcc6619d"
- name = "github.com/dnaeon/go-vcr"
- packages = [
- "cassette",
- "recorder",
- ]
- pruneopts = "UT"
- revision = "aafff18a5cc28fa0b2f26baf6a14472cda9b54c6"
-
-[[projects]]
- digest = "1:97df918963298c287643883209a2c3f642e6593379f97ab400c2a2e219ab647d"
- name = "github.com/golang/protobuf"
- packages = ["proto"]
- pruneopts = "UT"
- revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5"
- version = "v1.2.0"
-
-[[projects]]
- branch = "master"
- digest = "1:33b9d71d1dde2106309484a388eb7ba53cd1f67014e34a71f7b3dbc20bd186e5"
- name = "golang.org/x/net"
- packages = [
- "context",
- "context/ctxhttp",
- "idna",
- "publicsuffix",
- ]
- pruneopts = "UT"
- revision = "8a410e7b638dca158bf9e766925842f6651ff828"
-
-[[projects]]
- branch = "master"
- digest = "1:363b547c971a2b07474c598b6e9ebcb238d556d8a27f37b3895ad20cd50e7281"
- name = "golang.org/x/oauth2"
- packages = [
- ".",
- "internal",
- ]
- pruneopts = "UT"
- revision = "d2e6202438beef2727060aa7cabdd924d92ebfd9"
-
-[[projects]]
- digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18"
- name = "golang.org/x/text"
- packages = [
- "collate",
- "collate/build",
- "internal/colltab",
- "internal/gen",
- "internal/tag",
- "internal/triegen",
- "internal/ucd",
- "language",
- "secure/bidirule",
- "transform",
- "unicode/bidi",
- "unicode/cldr",
- "unicode/norm",
- "unicode/rangetable",
- ]
- pruneopts = "UT"
- revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0"
- version = "v0.3.0"
-
-[[projects]]
- digest = "1:328b5e4f197d928c444a51a75385f4b978915c0e75521f0ad6a3db976c97a7d3"
- name = "google.golang.org/appengine"
- packages = [
- "internal",
- "internal/base",
- "internal/datastore",
- "internal/log",
- "internal/remote_api",
- "internal/urlfetch",
- "urlfetch",
- ]
- pruneopts = "UT"
- revision = "b1f26356af11148e710935ed1ac8a7f5702c7612"
- version = "v1.1.0"
-
-[[projects]]
- digest = "1:b7fc4c3fd91df516486f53cc86f4b55a0c815782dbe852c5a19cce8e6c577aac"
- name = "gopkg.in/resty.v1"
- packages = ["."]
- pruneopts = "UT"
- revision = "d4920dcf5b7689548a6db640278a9b35a5b48ec6"
- version = "v1.9.1"
-
-[[projects]]
- digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202"
- name = "gopkg.in/yaml.v2"
- packages = ["."]
- pruneopts = "UT"
- revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
- version = "v2.2.1"
-
-[solve-meta]
- analyzer-name = "dep"
- analyzer-version = 1
- input-imports = [
- "github.com/dnaeon/go-vcr/recorder",
- "golang.org/x/oauth2",
- "gopkg.in/resty.v1",
- ]
- solver-name = "gps-cdcl"
- solver-version = 1
diff --git a/vendor/github.com/linode/linodego/Gopkg.toml b/vendor/github.com/linode/linodego/Gopkg.toml
deleted file mode 100644
index 2765dc95c..000000000
--- a/vendor/github.com/linode/linodego/Gopkg.toml
+++ /dev/null
@@ -1,29 +0,0 @@
-# Gopkg.toml example
-#
-# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
-# for detailed Gopkg.toml documentation.
-#
-# required = ["github.com/user/thing/cmd/thing"]
-# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
-#
-# [[constraint]]
-# name = "github.com/user/project"
-# version = "1.0.0"
-#
-# [[constraint]]
-# name = "github.com/user/project2"
-# branch = "dev"
-# source = "github.com/myfork/project2"
-#
-# [[override]]
-# name = "github.com/x/y"
-# version = "2.4.0"
-#
-# [prune]
-# non-go = false
-# go-tests = true
-# unused-packages = true
-
-[prune]
- go-tests = true
- unused-packages = true
diff --git a/vendor/github.com/linode/linodego/Makefile b/vendor/github.com/linode/linodego/Makefile
index e5f533d42..2e10984c7 100644
--- a/vendor/github.com/linode/linodego/Makefile
+++ b/vendor/github.com/linode/linodego/Makefile
@@ -1,35 +1,61 @@
-include .env
+-include .env
+BIN_DIR := $(GOPATH)/bin
-.PHONY: vendor example refresh-fixtures clean-fixtures
+GOLANGCILINT := golangci-lint
+GOLANGCILINT_IMG := golangci/golangci-lint:v1.23-alpine
+GOLANGCILINT_ARGS := run
-.PHONY: test
-test: vendor
+PACKAGES := $(shell go list ./... | grep -v integration)
+
+SKIP_LINT ?= 0
+
+.PHONY: build vet test refresh-fixtures clean-fixtures lint run_fixtures sanitize fixtures godoc testint testunit
+
+test: testunit testint
+
+citest: lint test
+
+testunit: build lint
+ go test -v $(PACKAGES) $(ARGS)
+
+testint: build lint
@LINODE_FIXTURE_MODE="play" \
LINODE_TOKEN="awesometokenawesometokenawesometoken" \
- go test $(ARGS)
+ LINODE_API_VERSION="v4beta" \
+ GO111MODULE="on" \
+ go test -v ./test/integration $(ARGS)
-$(GOPATH)/bin/dep:
- @go get -u github.com/golang/dep/cmd/dep
+build: vet lint
+ go build ./...
-vendor: $(GOPATH)/bin/dep
- @dep ensure
+vet:
+ go vet ./...
-example:
- @go run example/main.go
+lint:
+ifeq ($(SKIP_LINT), 1)
+ @echo Skipping lint stage
+else
+ docker run --rm -v $(shell pwd):/app -w /app $(GOLANGCILINT_IMG) $(GOLANGCILINT) run
+endif
clean-fixtures:
@-rm fixtures/*.yaml
refresh-fixtures: clean-fixtures fixtures
-.PHONY: fixtures
-fixtures:
+run_fixtures:
@echo "* Running fixtures"
- @LINODE_TOKEN=$(LINODE_TOKEN) \
- LINODE_FIXTURE_MODE="record" go test $(ARGS)
- @echo "* Santizing fixtures"
- @for yaml in fixtures/*yaml; do \
- sed -E -i "" -e "s/$(LINODE_TOKEN)/awesometokenawesometokenawesometoken/g" \
+ @LINODE_FIXTURE_MODE="record" \
+ LINODE_TOKEN=$(LINODE_TOKEN) \
+ LINODE_API_VERSION="v4beta" \
+ GO111MODULE="on" \
+ go test -timeout=60m -v ./test/integration $(ARGS)
+
+sanitize:
+ @echo "* Sanitizing fixtures"
+ @for yaml in test/integration/fixtures/*yaml; do \
+ sed -E -i.bak \
+ -e 's_stats/20[0-9]{2}/[1-9][0-2]?_stats/2018/1_g' \
-e 's/20[0-9]{2}-[01][0-9]-[0-3][0-9]T[0-2][0-9]:[0-9]{2}:[0-9]{2}/2018-01-02T03:04:05/g' \
-e 's/nb-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}\./nb-10-20-30-40./g' \
-e 's/192\.168\.((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.)(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/192.168.030.040/g' \
@@ -37,7 +63,9 @@ fixtures:
-e 's/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/1234::5678/g' \
$$yaml; \
done
+ @find test/integration/fixtures -name *yaml.bak -exec rm {} \;
+
+fixtures: run_fixtures sanitize
-.PHONY: godoc
godoc:
@godoc -http=:6060
diff --git a/vendor/github.com/linode/linodego/README.md b/vendor/github.com/linode/linodego/README.md
index 7d0ae2bc1..234e73e88 100644
--- a/vendor/github.com/linode/linodego/README.md
+++ b/vendor/github.com/linode/linodego/README.md
@@ -1,6 +1,7 @@
# linodego
[![Build Status](https://travis-ci.org/linode/linodego.svg?branch=master)](https://travis-ci.org/linode/linodego)
+[![Release](https://img.shields.io/github/v/release/linode/linodego)](https://github.com/linode/linodego/releases/latest)
[![GoDoc](https://godoc.org/github.com/linode/linodego?status.svg)](https://godoc.org/github.com/linode/linodego)
[![Go Report Card](https://goreportcard.com/badge/github.com/linode/linodego)](https://goreportcard.com/report/github.com/linode/linodego)
[![codecov](https://codecov.io/gh/linode/linodego/branch/master/graph/badge.svg)](https://codecov.io/gh/linode/linodego)
@@ -84,7 +85,7 @@ kernels, err := linodego.ListKernels(context.Background(), nil)
Or, use a page value of "0":
```go
-opts := NewListOptions(0,"")
+opts := linodego.NewListOptions(0,"")
kernels, err := linodego.ListKernels(context.Background(), opts)
// len(kernels) == 218
```
@@ -92,8 +93,8 @@ kernels, err := linodego.ListKernels(context.Background(), opts)
#### Single Page
```go
-opts := NewListOptions(2,"")
-// or opts := ListOptions{PageOptions: &PageOptions: {Page: 2 }}
+opts := linodego.NewListOptions(2,"")
+// or opts := linodego.ListOptions{PageOptions: &PageOptions: {Page: 2 }}
kernels, err := linodego.ListKernels(context.Background(), opts)
// len(kernels) == 100
```
@@ -108,8 +109,8 @@ values are set in the supplied ListOptions.
#### Filtering
```go
-opts := ListOptions{Filter: "{\"mine\":true}"}
-// or opts := NewListOptions(0, "{\"mine\":true}")
+opts := linodego.ListOptions{Filter: "{\"mine\":true}"}
+// or opts := linodego.NewListOptions(0, "{\"mine\":true}")
stackscripts, err := linodego.ListStackscripts(context.Background(), opts)
```
@@ -118,7 +119,7 @@ stackscripts, err := linodego.ListStackscripts(context.Background(), opts)
#### Getting Single Entities
```go
-linode, err := linodego.GetLinode(context.Background(), 555) // any Linode ID that does not exist or is not yours
+linode, err := linodego.GetInstance(context.Background(), 555) // any Linode ID that does not exist or is not yours
// linode == nil: true
// err.Error() == "[404] Not Found"
// err.Code == "404"
@@ -130,7 +131,7 @@ linode, err := linodego.GetLinode(context.Background(), 555) // any Linode ID th
For lists, the list is still returned as `[]`, but `err` works the same way as on the `Get` request.
```go
-linodes, err := linodego.ListLinodes(context.Background(), NewListOptions(0, "{\"foo\":bar}"))
+linodes, err := linodego.ListInstances(context.Background(), linodego.NewListOptions(0, "{\"foo\":bar}"))
// linodes == []
// err.Error() == "[400] [X-Filter] Cannot filter on foo"
```
@@ -138,7 +139,7 @@ linodes, err := linodego.ListLinodes(context.Background(), NewListOptions(0, "{\
Otherwise sane requests beyond the last page do not trigger an error, just an empty result:
```go
-linodes, err := linodego.ListLinodes(context.Background(), NewListOptions(9999, ""))
+linodes, err := linodego.ListInstances(context.Background(), linodego.NewListOptions(9999, ""))
// linodes == []
// err = nil
```
@@ -153,15 +154,9 @@ When performing a `POST` or `PUT` request, multiple field related errors will be
## Tests
-Run `make test` to run the unit tests. This is the same as running `go test` except that `make test` will
-execute the tests while playing back API response fixtures that were recorded during a previous development build.
+Run `make testunit` to run the unit tests.
-`go test` can be used without the fixtures. Copy `env.sample` to `.env` and configure your persistent test
-settings, including an API token.
-
-`go test -short` can be used to run live API tests that do not require an account token.
-
-This will be simplified in future versions.
+Run `make testint` to run the integration tests. The integration tests use fixtures.
To update the test fixtures, run `make fixtures`. This will record the API responses into the `fixtures/` directory.
Be careful about committing any sensitive account details. An attempt has been made to sanitize IP addresses and
diff --git a/vendor/github.com/linode/linodego/account.go b/vendor/github.com/linode/linodego/account.go
index d6092f07d..75ca888c5 100644
--- a/vendor/github.com/linode/linodego/account.go
+++ b/vendor/github.com/linode/linodego/account.go
@@ -4,20 +4,21 @@ import "context"
// Account associated with the token in use
type Account struct {
- FirstName string `json:"first_name"`
- LastName string `json:"last_name"`
- Email string `json:"email"`
- Company string `json:"company"`
- Address1 string `json:"address_1"`
- Address2 string `json:"address_2"`
- Balance float32 `json:"balance"`
- City string `json:"city"`
- State string `json:"state"`
- Zip string `json:"zip"`
- Country string `json:"country"`
- TaxID string `json:"tax_id"`
- Phone string `json:"phone"`
- CreditCard *CreditCard `json:"credit_card"`
+ FirstName string `json:"first_name"`
+ LastName string `json:"last_name"`
+ Email string `json:"email"`
+ Company string `json:"company"`
+ Address1 string `json:"address_1"`
+ Address2 string `json:"address_2"`
+ Balance float32 `json:"balance"`
+ BalanceUninvoiced float32 `json:"balance_uninvoiced"`
+ City string `json:"city"`
+ State string `json:"state"`
+ Zip string `json:"zip"`
+ Country string `json:"country"`
+ TaxID string `json:"tax_id"`
+ Phone string `json:"phone"`
+ CreditCard *CreditCard `json:"credit_card"`
}
// CreditCard information associated with the Account.
@@ -26,20 +27,18 @@ type CreditCard struct {
Expiry string `json:"expiry"`
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *Account) fixDates() *Account {
- return v
-}
-
// GetAccount gets the contact and billing information related to the Account
func (c *Client) GetAccount(ctx context.Context) (*Account, error) {
e, err := c.Account.Endpoint()
if err != nil {
return nil, err
}
+
r, err := coupleAPIErrors(c.R(ctx).SetResult(&Account{}).Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*Account).fixDates(), nil
+
+ return r.Result().(*Account), nil
}
diff --git a/vendor/github.com/linode/linodego/account_events.go b/vendor/github.com/linode/linodego/account_events.go
index e2365c35b..4e2b26854 100644
--- a/vendor/github.com/linode/linodego/account_events.go
+++ b/vendor/github.com/linode/linodego/account_events.go
@@ -4,16 +4,14 @@ import (
"context"
"encoding/json"
"fmt"
- "log"
- "strconv"
- "strings"
"time"
+
+ "github.com/linode/linodego/internal/duration"
+ "github.com/linode/linodego/internal/parseabletime"
)
// Event represents an action taken on the Account.
type Event struct {
- CreatedStr string `json:"created"`
-
// The unique ID of this Event.
ID int `json:"id"`
@@ -36,8 +34,7 @@ type Event struct {
Seen bool `json:"seen"`
// The estimated time remaining until the completion of this Event. This value is only returned for in-progress events.
- TimeRemainingMsg json.RawMessage `json:"time_remaining"`
- TimeRemaining *int `json:"-"`
+ TimeRemaining *int `json:"-"`
// The username of the User who caused the Event.
Username string `json:"username"`
@@ -45,6 +42,9 @@ type Event struct {
// Detailed information about the Event's entity, including ID, type, label, and URL used to access it.
Entity *EventEntity `json:"entity"`
+ // Detailed information about the Event's secondary or related entity, including ID, type, label, and URL used to access it.
+ SecondaryEntity *EventEntity `json:"secondary_entity"`
+
// When this Event was created.
Created *time.Time `json:"-"`
}
@@ -54,59 +54,80 @@ type EventAction string
// EventAction constants represent the actions that cause an Event. New actions may be added in the future.
const (
+ ActionAccountUpdate EventAction = "account_update"
+ ActionAccountSettingsUpdate EventAction = "account_settings_update"
ActionBackupsEnable EventAction = "backups_enable"
ActionBackupsCancel EventAction = "backups_cancel"
ActionBackupsRestore EventAction = "backups_restore"
ActionCommunityQuestionReply EventAction = "community_question_reply"
+ ActionCommunityLike EventAction = "community_like"
ActionCreateCardUpdated EventAction = "credit_card_updated"
ActionDiskCreate EventAction = "disk_create"
ActionDiskDelete EventAction = "disk_delete"
+ ActionDiskUpdate EventAction = "disk_update"
ActionDiskDuplicate EventAction = "disk_duplicate"
ActionDiskImagize EventAction = "disk_imagize"
ActionDiskResize EventAction = "disk_resize"
ActionDNSRecordCreate EventAction = "dns_record_create"
ActionDNSRecordDelete EventAction = "dns_record_delete"
+ ActionDNSRecordUpdate EventAction = "dns_record_update"
ActionDNSZoneCreate EventAction = "dns_zone_create"
ActionDNSZoneDelete EventAction = "dns_zone_delete"
+ ActionDNSZoneUpdate EventAction = "dns_zone_update"
+ ActionHostReboot EventAction = "host_reboot"
ActionImageDelete EventAction = "image_delete"
+ ActionImageUpdate EventAction = "image_update"
+ ActionLassieReboot EventAction = "lassie_reboot"
ActionLinodeAddIP EventAction = "linode_addip"
ActionLinodeBoot EventAction = "linode_boot"
ActionLinodeClone EventAction = "linode_clone"
ActionLinodeCreate EventAction = "linode_create"
ActionLinodeDelete EventAction = "linode_delete"
+ ActionLinodeUpdate EventAction = "linode_update"
ActionLinodeDeleteIP EventAction = "linode_deleteip"
ActionLinodeMigrate EventAction = "linode_migrate"
ActionLinodeMutate EventAction = "linode_mutate"
+ ActionLinodeMutateCreate EventAction = "linode_mutate_create"
ActionLinodeReboot EventAction = "linode_reboot"
ActionLinodeRebuild EventAction = "linode_rebuild"
ActionLinodeResize EventAction = "linode_resize"
+ ActionLinodeResizeCreate EventAction = "linode_resize_create"
ActionLinodeShutdown EventAction = "linode_shutdown"
ActionLinodeSnapshot EventAction = "linode_snapshot"
+ ActionLinodeConfigCreate EventAction = "linode_config_create"
+ ActionLinodeConfigDelete EventAction = "linode_config_delete"
+ ActionLinodeConfigUpdate EventAction = "linode_config_update"
+ ActionLishBoot EventAction = "lish_boot"
ActionLongviewClientCreate EventAction = "longviewclient_create"
ActionLongviewClientDelete EventAction = "longviewclient_delete"
+ ActionLongviewClientUpdate EventAction = "longviewclient_update"
ActionManagedDisabled EventAction = "managed_disabled"
ActionManagedEnabled EventAction = "managed_enabled"
ActionManagedServiceCreate EventAction = "managed_service_create"
ActionManagedServiceDelete EventAction = "managed_service_delete"
ActionNodebalancerCreate EventAction = "nodebalancer_create"
ActionNodebalancerDelete EventAction = "nodebalancer_delete"
+ ActionNodebalancerUpdate EventAction = "nodebalancer_update"
ActionNodebalancerConfigCreate EventAction = "nodebalancer_config_create"
ActionNodebalancerConfigDelete EventAction = "nodebalancer_config_delete"
+ ActionNodebalancerConfigUpdate EventAction = "nodebalancer_config_update"
ActionPasswordReset EventAction = "password_reset"
ActionPaymentSubmitted EventAction = "payment_submitted"
ActionStackScriptCreate EventAction = "stackscript_create"
ActionStackScriptDelete EventAction = "stackscript_delete"
+ ActionStackScriptUpdate EventAction = "stackscript_update"
ActionStackScriptPublicize EventAction = "stackscript_publicize"
ActionStackScriptRevise EventAction = "stackscript_revise"
ActionTFADisabled EventAction = "tfa_disabled"
ActionTFAEnabled EventAction = "tfa_enabled"
ActionTicketAttachmentUpload EventAction = "ticket_attachment_upload"
ActionTicketCreate EventAction = "ticket_create"
- ActionTicketReply EventAction = "ticket_reply"
+ ActionTicketUpdate EventAction = "ticket_update"
ActionVolumeAttach EventAction = "volume_attach"
ActionVolumeClone EventAction = "volume_clone"
ActionVolumeCreate EventAction = "volume_create"
ActionVolumeDelte EventAction = "volume_delete"
+ ActionVolumeUpdate EventAction = "volume_update"
ActionVolumeDetach EventAction = "volume_detach"
ActionVolumeResize EventAction = "volume_resize"
)
@@ -114,10 +135,12 @@ const (
// EntityType constants start with Entity and include Linode API Event Entity Types
type EntityType string
-// EntityType contants are the entities an Event can be related to
+// EntityType contants are the entities an Event can be related to.
const (
- EntityLinode EntityType = "linode"
- EntityDisk EntityType = "disk"
+ EntityLinode EntityType = "linode"
+ EntityDisk EntityType = "disk"
+ EntityDomain EntityType = "domain"
+ EntityNodebalancer EntityType = "nodebalancer"
)
// EventStatus constants start with Event and include Linode API Event Status values
@@ -155,16 +178,41 @@ func (EventsPagedResponse) endpoint(c *Client) string {
if err != nil {
panic(err)
}
+
return endpoint
}
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *Event) UnmarshalJSON(b []byte) error {
+ type Mask Event
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ TimeRemaining json.RawMessage `json:"time_remaining"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.TimeRemaining = duration.UnmarshalTimeRemaining(p.TimeRemaining)
+
+ return nil
+}
+
// endpointWithID gets the endpoint URL for a specific Event
-func (e Event) endpointWithID(c *Client) string {
+func (i Event) endpointWithID(c *Client) string {
endpoint, err := c.Events.Endpoint()
if err != nil {
panic(err)
}
- endpoint = fmt.Sprintf("%s/%d", endpoint, e.ID)
+
+ endpoint = fmt.Sprintf("%s/%d", endpoint, i.ID)
+
return endpoint
}
@@ -179,12 +227,11 @@ func (resp *EventsPagedResponse) appendData(r *EventsPagedResponse) {
func (c *Client) ListEvents(ctx context.Context, opts *ListOptions) ([]Event, error) {
response := EventsPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
+
return response.Data, nil
}
@@ -194,19 +241,15 @@ func (c *Client) GetEvent(ctx context.Context, id int) (*Event, error) {
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%d", e, id)
r, err := c.R(ctx).SetResult(&Event{}).Get(e)
+
if err != nil {
return nil, err
}
- return r.Result().(*Event).fixDates(), nil
-}
-// fixDates converts JSON timestamps to Go time.Time values
-func (e *Event) fixDates() *Event {
- e.Created, _ = parseDates(e.CreatedStr)
- e.TimeRemaining = unmarshalTimeRemaining(e.TimeRemainingMsg)
- return e
+ return r.Result().(*Event), nil
}
// MarkEventRead marks a single Event as read.
@@ -228,50 +271,3 @@ func (c *Client) MarkEventsSeen(ctx context.Context, event *Event) error {
return err
}
-
-func unmarshalTimeRemaining(m json.RawMessage) *int {
- jsonBytes, err := m.MarshalJSON()
- if err != nil {
- panic(jsonBytes)
- }
-
- if len(jsonBytes) == 4 && string(jsonBytes) == "null" {
- return nil
- }
-
- var timeStr string
- if err := json.Unmarshal(jsonBytes, &timeStr); err == nil && len(timeStr) > 0 {
- if dur, err := durationToSeconds(timeStr); err != nil {
- panic(err)
- } else {
- return &dur
- }
- } else {
- var intPtr int
- if err := json.Unmarshal(jsonBytes, &intPtr); err == nil {
- return &intPtr
- }
- }
-
- log.Println("[WARN] Unexpected unmarshalTimeRemaining value: ", jsonBytes)
- return nil
-}
-
-// durationToSeconds takes a hh:mm:ss string and returns the number of seconds
-func durationToSeconds(s string) (int, error) {
- multipliers := [3]int{60 * 60, 60, 1}
- segs := strings.Split(s, ":")
- if len(segs) > len(multipliers) {
- return 0, fmt.Errorf("too many ':' separators in time duration: %s", s)
- }
- var d int
- l := len(segs)
- for i := 0; i < l; i++ {
- m, err := strconv.Atoi(segs[i])
- if err != nil {
- return 0, err
- }
- d += m * multipliers[i+len(multipliers)-l]
- }
- return d, nil
-}
diff --git a/vendor/github.com/linode/linodego/account_invoices.go b/vendor/github.com/linode/linodego/account_invoices.go
index 75ca2f73d..5d68c6c1c 100644
--- a/vendor/github.com/linode/linodego/account_invoices.go
+++ b/vendor/github.com/linode/linodego/account_invoices.go
@@ -2,14 +2,15 @@ package linodego
import (
"context"
+ "encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// Invoice structs reflect an invoice for billable activity on the account.
type Invoice struct {
- DateStr string `json:"date"`
-
ID int `json:"id"`
Label string `json:"label"`
Total float32 `json:"total"`
@@ -18,9 +19,6 @@ type Invoice struct {
// InvoiceItem structs reflect an single billable activity associate with an Invoice
type InvoiceItem struct {
- FromStr string `json:"from"`
- ToStr string `json:"to"`
-
Label string `json:"label"`
Type string `json:"type"`
UnitPrice int `json:"unitprice"`
@@ -42,6 +40,7 @@ func (InvoicesPagedResponse) endpoint(c *Client) string {
if err != nil {
panic(err)
}
+
return endpoint
}
@@ -54,26 +53,54 @@ func (resp *InvoicesPagedResponse) appendData(r *InvoicesPagedResponse) {
func (c *Client) ListInvoices(ctx context.Context, opts *ListOptions) ([]Invoice, error) {
response := InvoicesPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
+
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *Invoice) fixDates() *Invoice {
- v.Date, _ = parseDates(v.DateStr)
- return v
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *Invoice) UnmarshalJSON(b []byte) error {
+ type Mask Invoice
+
+ p := struct {
+ *Mask
+ Date *parseabletime.ParseableTime `json:"date"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Date = (*time.Time)(p.Date)
+
+ return nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *InvoiceItem) fixDates() *InvoiceItem {
- v.From, _ = parseDates(v.FromStr)
- v.To, _ = parseDates(v.ToStr)
- return v
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *InvoiceItem) UnmarshalJSON(b []byte) error {
+ type Mask InvoiceItem
+
+ p := struct {
+ *Mask
+ From *parseabletime.ParseableTime `json:"from"`
+ To *parseabletime.ParseableTime `json:"to"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.From = (*time.Time)(p.From)
+ i.To = (*time.Time)(p.To)
+
+ return nil
}
// GetInvoice gets the a single Invoice matching the provided ID
@@ -85,10 +112,12 @@ func (c *Client) GetInvoice(ctx context.Context, id int) (*Invoice, error) {
e = fmt.Sprintf("%s/%d", e, id)
r, err := coupleAPIErrors(c.R(ctx).SetResult(&Invoice{}).Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*Invoice).fixDates(), nil
+
+ return r.Result().(*Invoice), nil
}
// InvoiceItemsPagedResponse represents a paginated Invoice Item API response
@@ -103,6 +132,7 @@ func (InvoiceItemsPagedResponse) endpointWithID(c *Client, id int) string {
if err != nil {
panic(err)
}
+
return endpoint
}
@@ -115,11 +145,10 @@ func (resp *InvoiceItemsPagedResponse) appendData(r *InvoiceItemsPagedResponse)
func (c *Client) ListInvoiceItems(ctx context.Context, id int, opts *ListOptions) ([]InvoiceItem, error) {
response := InvoiceItemsPagedResponse{}
err := c.listHelperWithID(ctx, &response, id, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
+
return response.Data, nil
}
diff --git a/vendor/github.com/linode/linodego/account_notifications.go b/vendor/github.com/linode/linodego/account_notifications.go
index 1d2de2e62..69bb64745 100644
--- a/vendor/github.com/linode/linodego/account_notifications.go
+++ b/vendor/github.com/linode/linodego/account_notifications.go
@@ -2,14 +2,14 @@ package linodego
import (
"context"
+ "encoding/json"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// Notification represents a notification on an Account
type Notification struct {
- UntilStr string `json:"until"`
- WhenStr string `json:"when"`
-
Label string `json:"label"`
Body *string `json:"body"`
Message string `json:"message"`
@@ -68,6 +68,7 @@ func (NotificationsPagedResponse) endpoint(c *Client) string {
if err != nil {
panic(err)
}
+
return endpoint
}
@@ -84,18 +85,32 @@ func (resp *NotificationsPagedResponse) appendData(r *NotificationsPagedResponse
func (c *Client) ListNotifications(ctx context.Context, opts *ListOptions) ([]Notification, error) {
response := NotificationsPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
+
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *Notification) fixDates() *Notification {
- v.Until, _ = parseDates(v.UntilStr)
- v.When, _ = parseDates(v.WhenStr)
- return v
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *Notification) UnmarshalJSON(b []byte) error {
+ type Mask Notification
+
+ p := struct {
+ *Mask
+ Until *parseabletime.ParseableTime `json:"until"`
+ When *parseabletime.ParseableTime `json:"when"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Until = (*time.Time)(p.Until)
+ i.When = (*time.Time)(p.When)
+
+ return nil
}
diff --git a/vendor/github.com/linode/linodego/account_oauth_client.go b/vendor/github.com/linode/linodego/account_oauth_client.go
new file mode 100644
index 000000000..4ef4b52f1
--- /dev/null
+++ b/vendor/github.com/linode/linodego/account_oauth_client.go
@@ -0,0 +1,207 @@
+package linodego
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+)
+
+// OAuthClientStatus constants start with OAuthClient and include Linode API Instance Status values
+type OAuthClientStatus string
+
+// OAuthClientStatus constants reflect the current status of an OAuth Client
+const (
+ OAuthClientActive OAuthClientStatus = "active"
+ OAuthClientDisabled OAuthClientStatus = "disabled"
+ OAuthClientSuspended OAuthClientStatus = "suspended"
+)
+
+// OAuthClient represents a OAuthClient object
+type OAuthClient struct {
+ // The unique ID of this OAuth Client.
+ ID string `json:"id"`
+
+ // The location a successful log in from https://login.linode.com should be redirected to for this client. The receiver of this redirect should be ready to accept an OAuth exchange code and finish the OAuth exchange.
+ RedirectURI string `json:"redirect_uri"`
+
+ // The name of this application. This will be presented to users when they are asked to grant it access to their Account.
+ Label string `json:"label"`
+
+ // Current status of the OAuth Client, Enum: "active" "disabled" "suspended"
+ Status OAuthClientStatus `json:"status"`
+
+ // The OAuth Client secret, used in the OAuth exchange. This is returned as except when an OAuth Client is created or its secret is reset. This is a secret, and should not be shared or disclosed publicly.
+ Secret string `json:"secret"`
+
+ // If this OAuth Client is public or private.
+ Public bool `json:"public"`
+
+ // The URL where this client's thumbnail may be viewed, or nil if this client does not have a thumbnail set.
+ ThumbnailURL *string `json:"thumbnail_url"`
+}
+
+// OAuthClientCreateOptions fields are those accepted by CreateOAuthClient
+type OAuthClientCreateOptions struct {
+ // The location a successful log in from https://login.linode.com should be redirected to for this client. The receiver of this redirect should be ready to accept an OAuth exchange code and finish the OAuth exchange.
+ RedirectURI string `json:"redirect_uri"`
+
+ // The name of this application. This will be presented to users when they are asked to grant it access to their Account.
+ Label string `json:"label"`
+
+ // If this OAuth Client is public or private.
+ Public bool `json:"public"`
+}
+
+// OAuthClientUpdateOptions fields are those accepted by UpdateOAuthClient
+type OAuthClientUpdateOptions struct {
+ // The location a successful log in from https://login.linode.com should be redirected to for this client. The receiver of this redirect should be ready to accept an OAuth exchange code and finish the OAuth exchange.
+ RedirectURI string `json:"redirect_uri"`
+
+ // The name of this application. This will be presented to users when they are asked to grant it access to their Account.
+ Label string `json:"label"`
+
+ // If this OAuth Client is public or private.
+ Public bool `json:"public"`
+}
+
+// GetCreateOptions converts a OAuthClient to OAuthClientCreateOptions for use in CreateOAuthClient
+func (i OAuthClient) GetCreateOptions() (o OAuthClientCreateOptions) {
+ o.RedirectURI = i.RedirectURI
+ o.Label = i.Label
+ o.Public = i.Public
+
+ return
+}
+
+// GetUpdateOptions converts a OAuthClient to OAuthClientUpdateOptions for use in UpdateOAuthClient
+func (i OAuthClient) GetUpdateOptions() (o OAuthClientUpdateOptions) {
+ o.RedirectURI = i.RedirectURI
+ o.Label = i.Label
+ o.Public = i.Public
+
+ return
+}
+
+// OAuthClientsPagedResponse represents a paginated OAuthClient API response
+type OAuthClientsPagedResponse struct {
+ *PageOptions
+ Data []OAuthClient `json:"data"`
+}
+
+// endpoint gets the endpoint URL for OAuthClient
+func (OAuthClientsPagedResponse) endpoint(c *Client) string {
+ endpoint, err := c.OAuthClients.Endpoint()
+ if err != nil {
+ panic(err)
+ }
+
+ return endpoint
+}
+
+// appendData appends OAuthClients when processing paginated OAuthClient responses
+func (resp *OAuthClientsPagedResponse) appendData(r *OAuthClientsPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// ListOAuthClients lists OAuthClients
+func (c *Client) ListOAuthClients(ctx context.Context, opts *ListOptions) ([]OAuthClient, error) {
+ response := OAuthClientsPagedResponse{}
+ err := c.listHelper(ctx, &response, opts)
+
+ if err != nil {
+ return nil, err
+ }
+
+ return response.Data, nil
+}
+
+// GetOAuthClient gets the OAuthClient with the provided ID
+func (c *Client) GetOAuthClient(ctx context.Context, id string) (*OAuthClient, error) {
+ e, err := c.OAuthClients.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+
+ e = fmt.Sprintf("%s/%s", e, id)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&OAuthClient{}).Get(e))
+
+ if err != nil {
+ return nil, err
+ }
+
+ return r.Result().(*OAuthClient), nil
+}
+
+// CreateOAuthClient creates an OAuthClient
+func (c *Client) CreateOAuthClient(ctx context.Context, createOpts OAuthClientCreateOptions) (*OAuthClient, error) {
+ var body string
+
+ e, err := c.OAuthClients.Endpoint()
+
+ if err != nil {
+ return nil, err
+ }
+
+ req := c.R(ctx).SetResult(&OAuthClient{})
+
+ if bodyData, err := json.Marshal(createOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Post(e))
+
+ if err != nil {
+ return nil, err
+ }
+
+ return r.Result().(*OAuthClient), nil
+}
+
+// UpdateOAuthClient updates the OAuthClient with the specified id
+func (c *Client) UpdateOAuthClient(ctx context.Context, id string, updateOpts OAuthClientUpdateOptions) (*OAuthClient, error) {
+ var body string
+
+ e, err := c.OAuthClients.Endpoint()
+
+ if err != nil {
+ return nil, err
+ }
+
+ e = fmt.Sprintf("%s/%s", e, id)
+
+ req := c.R(ctx).SetResult(&OAuthClient{})
+
+ if bodyData, err := json.Marshal(updateOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Put(e))
+
+ if err != nil {
+ return nil, err
+ }
+
+ return r.Result().(*OAuthClient), nil
+}
+
+// DeleteOAuthClient deletes the OAuthClient with the specified id
+func (c *Client) DeleteOAuthClient(ctx context.Context, id string) error {
+ e, err := c.OAuthClients.Endpoint()
+ if err != nil {
+ return err
+ }
+
+ e = fmt.Sprintf("%s/%s", e, id)
+
+ _, err = coupleAPIErrors(c.R(ctx).Delete(e))
+
+ return err
+}
diff --git a/vendor/github.com/linode/linodego/account_payments.go b/vendor/github.com/linode/linodego/account_payments.go
new file mode 100644
index 000000000..fddf6702f
--- /dev/null
+++ b/vendor/github.com/linode/linodego/account_payments.go
@@ -0,0 +1,136 @@
+package linodego
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "time"
+
+ "github.com/linode/linodego/internal/parseabletime"
+)
+
+// Payment represents a Payment object
+type Payment struct {
+ // The unique ID of the Payment
+ ID int `json:"id"`
+
+ // The amount, in US dollars, of the Payment.
+ USD json.Number `json:"usd,Number"`
+
+ // When the Payment was made.
+ Date *time.Time `json:"-"`
+}
+
+// PaymentCreateOptions fields are those accepted by CreatePayment
+type PaymentCreateOptions struct {
+ // CVV (Card Verification Value) of the credit card to be used for the Payment
+ CVV string `json:"cvv,omitempty"`
+
+ // The amount, in US dollars, of the Payment
+ USD json.Number `json:"usd,Number"`
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *Payment) UnmarshalJSON(b []byte) error {
+ type Mask Payment
+
+ p := struct {
+ *Mask
+ Date *parseabletime.ParseableTime `json:"date"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Date = (*time.Time)(p.Date)
+
+ return nil
+}
+
+// GetCreateOptions converts a Payment to PaymentCreateOptions for use in CreatePayment
+func (i Payment) GetCreateOptions() (o PaymentCreateOptions) {
+ o.USD = i.USD
+ return
+}
+
+// PaymentsPagedResponse represents a paginated Payment API response
+type PaymentsPagedResponse struct {
+ *PageOptions
+ Data []Payment `json:"data"`
+}
+
+// endpoint gets the endpoint URL for Payment
+func (PaymentsPagedResponse) endpoint(c *Client) string {
+ endpoint, err := c.Payments.Endpoint()
+ if err != nil {
+ panic(err)
+ }
+
+ return endpoint
+}
+
+// appendData appends Payments when processing paginated Payment responses
+func (resp *PaymentsPagedResponse) appendData(r *PaymentsPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// ListPayments lists Payments
+func (c *Client) ListPayments(ctx context.Context, opts *ListOptions) ([]Payment, error) {
+ response := PaymentsPagedResponse{}
+ err := c.listHelper(ctx, &response, opts)
+
+ if err != nil {
+ return nil, err
+ }
+
+ return response.Data, nil
+}
+
+// GetPayment gets the payment with the provided ID
+func (c *Client) GetPayment(ctx context.Context, id int) (*Payment, error) {
+ e, err := c.Payments.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+
+ e = fmt.Sprintf("%s/%d", e, id)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&Payment{}).Get(e))
+
+ if err != nil {
+ return nil, err
+ }
+
+ return r.Result().(*Payment), nil
+}
+
+// CreatePayment creates a Payment
+func (c *Client) CreatePayment(ctx context.Context, createOpts PaymentCreateOptions) (*Payment, error) {
+ var body string
+
+ e, err := c.Payments.Endpoint()
+
+ if err != nil {
+ return nil, err
+ }
+
+ req := c.R(ctx).SetResult(&Payment{})
+
+ if bodyData, err := json.Marshal(createOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Post(e))
+
+ if err != nil {
+ return nil, err
+ }
+
+ return r.Result().(*Payment), nil
+}
diff --git a/vendor/github.com/linode/linodego/account_settings.go b/vendor/github.com/linode/linodego/account_settings.go
new file mode 100644
index 000000000..e8bed5af7
--- /dev/null
+++ b/vendor/github.com/linode/linodego/account_settings.go
@@ -0,0 +1,78 @@
+package linodego
+
+import (
+ "context"
+ "encoding/json"
+)
+
+// AccountSettings are the account wide flags or plans that effect new resources
+type AccountSettings struct {
+ // The default backups enrollment status for all new Linodes for all users on the account. When enabled, backups are mandatory per instance.
+ BackupsEnabled bool `json:"backups_enabled"`
+
+ // Wether or not Linode Managed service is enabled for the account.
+ Managed bool `json:"managed"`
+
+ // Wether or not the Network Helper is enabled for all new Linode Instance Configs on the account.
+ NetworkHelper bool `json:"network_helper"`
+
+ // A plan name like "longview-3"..."longview-100", or a nil value for to cancel any existing subscription plan.
+ LongviewSubscription *string `json:"longview_subscription"`
+}
+
+// AccountSettingsUpdateOptions are the updateable account wide flags or plans that effect new resources.
+type AccountSettingsUpdateOptions struct {
+ // The default backups enrollment status for all new Linodes for all users on the account. When enabled, backups are mandatory per instance.
+ BackupsEnabled *bool `json:"backups_enabled,omitempty"`
+
+ // A plan name like "longview-3"..."longview-100", or a nil value for to cancel any existing subscription plan.
+ LongviewSubscription *string `json:"longview_subscription,omitempty"`
+
+ // The default network helper setting for all new Linodes and Linode Configs for all users on the account.
+ NetworkHelper *bool `json:"network_helper,omitempty"`
+}
+
+// GetAccountSettings gets the account wide flags or plans that effect new resources
+func (c *Client) GetAccountSettings(ctx context.Context) (*AccountSettings, error) {
+ e, err := c.AccountSettings.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&AccountSettings{}).Get(e))
+
+ if err != nil {
+ return nil, err
+ }
+
+ return r.Result().(*AccountSettings), nil
+}
+
+// UpdateAccountSettings updates the settings associated with the account
+func (c *Client) UpdateAccountSettings(ctx context.Context, settings AccountSettingsUpdateOptions) (*AccountSettings, error) {
+ var body string
+
+ e, err := c.AccountSettings.Endpoint()
+
+ if err != nil {
+ return nil, err
+ }
+
+ req := c.R(ctx).SetResult(&AccountSettings{})
+
+ if bodyData, err := json.Marshal(settings); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Put(e))
+
+ if err != nil {
+ return nil, err
+ }
+
+ return r.Result().(*AccountSettings), nil
+}
diff --git a/vendor/github.com/linode/linodego/account_users.go b/vendor/github.com/linode/linodego/account_users.go
index a51fbe7f1..df59eb5e2 100644
--- a/vendor/github.com/linode/linodego/account_users.go
+++ b/vendor/github.com/linode/linodego/account_users.go
@@ -34,6 +34,7 @@ func (i User) GetCreateOptions() (o UserCreateOptions) {
o.Username = i.Username
o.Email = i.Email
o.Restricted = i.Restricted
+
return
}
@@ -42,6 +43,7 @@ func (i User) GetUpdateOptions() (o UserUpdateOptions) {
o.Username = i.Username
o.Email = i.Email
o.Restricted = copyBool(&i.Restricted)
+
return
}
@@ -57,6 +59,7 @@ func (UsersPagedResponse) endpoint(c *Client) string {
if err != nil {
panic(err)
}
+
return endpoint
}
@@ -69,18 +72,12 @@ func (resp *UsersPagedResponse) appendData(r *UsersPagedResponse) {
func (c *Client) ListUsers(ctx context.Context, opts *ListOptions) ([]User, error) {
response := UsersPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
- return response.Data, nil
-}
-// fixDates converts JSON timestamps to Go time.Time values
-func (i *User) fixDates() *User {
- return i
+ return response.Data, nil
}
// GetUser gets the user with the provided ID
@@ -89,19 +86,24 @@ func (c *Client) GetUser(ctx context.Context, id string) (*User, error) {
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%s", e, id)
r, err := coupleAPIErrors(c.R(ctx).SetResult(&User{}).Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*User).fixDates(), nil
+
+ return r.Result().(*User), nil
}
// CreateUser creates a User. The email address must be confirmed before the
// User account can be accessed.
func (c *Client) CreateUser(ctx context.Context, createOpts UserCreateOptions) (*User, error) {
var body string
+
e, err := c.Users.Endpoint()
+
if err != nil {
return nil, err
}
@@ -121,16 +123,20 @@ func (c *Client) CreateUser(ctx context.Context, createOpts UserCreateOptions) (
if err != nil {
return nil, err
}
- return r.Result().(*User).fixDates(), nil
+
+ return r.Result().(*User), nil
}
// UpdateUser updates the User with the specified id
func (c *Client) UpdateUser(ctx context.Context, id string, updateOpts UserUpdateOptions) (*User, error) {
var body string
+
e, err := c.Users.Endpoint()
+
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%s", e, id)
req := c.R(ctx).SetResult(&User{})
@@ -148,7 +154,8 @@ func (c *Client) UpdateUser(ctx context.Context, id string, updateOpts UserUpdat
if err != nil {
return nil, err
}
- return r.Result().(*User).fixDates(), nil
+
+ return r.Result().(*User), nil
}
// DeleteUser deletes the User with the specified id
@@ -157,8 +164,10 @@ func (c *Client) DeleteUser(ctx context.Context, id string) error {
if err != nil {
return err
}
+
e = fmt.Sprintf("%s/%s", e, id)
_, err = coupleAPIErrors(c.R(ctx).Delete(e))
+
return err
}
diff --git a/vendor/github.com/linode/linodego/client.go b/vendor/github.com/linode/linodego/client.go
index 224a496de..b898d208f 100644
--- a/vendor/github.com/linode/linodego/client.go
+++ b/vendor/github.com/linode/linodego/client.go
@@ -3,28 +3,37 @@ package linodego
import (
"context"
"fmt"
+ "io/ioutil"
"log"
"net/http"
"os"
"strconv"
"time"
- "gopkg.in/resty.v1"
+ "github.com/go-resty/resty/v2"
)
const (
// APIHost Linode API hostname
APIHost = "api.linode.com"
+ // APIHostVar environment var to check for alternate API URL
+ APIHostVar = "LINODE_URL"
+ // APIHostCert environment var containing path to CA cert to validate against
+ APIHostCert = "LINODE_CA"
// APIVersion Linode API version
APIVersion = "v4"
+ // APIVersionVar environment var to check for alternate API Version
+ APIVersionVar = "LINODE_API_VERSION"
// APIProto connect to API with http(s)
APIProto = "https"
// Version of linodego
- Version = "0.7.0"
+ Version = "0.12.0"
// APIEnvVar environment var to check for API token
APIEnvVar = "LINODE_TOKEN"
// APISecondsPerPoll how frequently to poll for new Events or Status in WaitFor functions
APISecondsPerPoll = 3
+ // Maximum wait time for retries
+ APIRetryMaxWaitTime = time.Duration(30) * time.Second
// DefaultUserAgent is the default User-Agent sent in HTTP request headers
DefaultUserAgent = "linodego " + Version + " https://github.com/linode/linodego"
)
@@ -35,49 +44,62 @@ var (
// Client is a wrapper around the Resty client
type Client struct {
- resty *resty.Client
- userAgent string
- resources map[string]*Resource
- debug bool
+ resty *resty.Client
+ userAgent string
+ resources map[string]*Resource
+ debug bool
+ retryConditionals []RetryConditional
millisecondsPerPoll time.Duration
- Images *Resource
- InstanceDisks *Resource
- InstanceConfigs *Resource
- InstanceSnapshots *Resource
- InstanceIPs *Resource
- InstanceVolumes *Resource
- Instances *Resource
+ Account *Resource
+ AccountSettings *Resource
+ DomainRecords *Resource
+ Domains *Resource
+ Events *Resource
+ Firewalls *Resource
IPAddresses *Resource
IPv6Pools *Resource
IPv6Ranges *Resource
- Regions *Resource
- StackScripts *Resource
- Volumes *Resource
+ Images *Resource
+ InstanceConfigs *Resource
+ InstanceDisks *Resource
+ InstanceIPs *Resource
+ InstanceSnapshots *Resource
+ InstanceStats *Resource
+ InstanceVolumes *Resource
+ Instances *Resource
+ InvoiceItems *Resource
+ Invoices *Resource
Kernels *Resource
- Types *Resource
- Domains *Resource
- DomainRecords *Resource
+ LKEClusters *Resource
+ LKEClusterPools *Resource
+ LKEVersions *Resource
Longview *Resource
LongviewClients *Resource
LongviewSubscriptions *Resource
- NodeBalancers *Resource
+ Managed *Resource
NodeBalancerConfigs *Resource
NodeBalancerNodes *Resource
- SSHKeys *Resource
- Tickets *Resource
- Tokens *Resource
- Token *Resource
- Account *Resource
- Invoices *Resource
- InvoiceItems *Resource
- Events *Resource
+ NodeBalancerStats *Resource
+ NodeBalancers *Resource
Notifications *Resource
+ OAuthClients *Resource
+ ObjectStorageBuckets *Resource
+ ObjectStorageClusters *Resource
+ ObjectStorageKeys *Resource
+ Payments *Resource
Profile *Resource
- Managed *Resource
+ Regions *Resource
+ SSHKeys *Resource
+ StackScripts *Resource
Tags *Resource
+ Tickets *Resource
+ Token *Resource
+ Tokens *Resource
+ Types *Resource
Users *Resource
+ Volumes *Resource
}
func init() {
@@ -90,7 +112,6 @@ func init() {
log.Println("[WARN] LINODE_DEBUG should be an integer, 0 or 1")
}
}
-
}
// SetUserAgent sets a custom user-agent for HTTP requests
@@ -114,6 +135,7 @@ func (c *Client) R(ctx context.Context) *resty.Request {
func (c *Client) SetDebug(debug bool) *Client {
c.debug = debug
c.resty.SetDebug(debug)
+
return c
}
@@ -123,10 +145,50 @@ func (c *Client) SetBaseURL(url string) *Client {
return c
}
+// SetAPIVersion sets the version of the API to interface with
+func (c *Client) SetAPIVersion(apiVersion string) *Client {
+ c.SetBaseURL(fmt.Sprintf("%s://%s/%s", APIProto, APIHost, apiVersion))
+ return c
+}
+
+// SetRootCertificate adds a root certificate to the underlying TLS client config
+func (c *Client) SetRootCertificate(path string) *Client {
+ c.resty.SetRootCertificate(path)
+ return c
+}
+
+// SetToken sets the API token for all requests from this client
+// Only necessary if you haven't already provided an http client to NewClient() configured with the token.
+func (c *Client) SetToken(token string) *Client {
+ c.resty.SetHeader("Authorization", fmt.Sprintf("Bearer %s", token))
+ return c
+}
+
+// SetRetries adds retry conditions for "Linode Busy." errors and 429s.
+func (c *Client) SetRetries() *Client {
+ c.
+ addRetryConditional(linodeBusyRetryCondition).
+ addRetryConditional(tooManyRequestsRetryCondition).
+ SetRetryMaxWaitTime(APIRetryMaxWaitTime)
+ configureRetries(c)
+ return c
+}
+
+func (c *Client) addRetryConditional(retryConditional RetryConditional) *Client {
+ c.retryConditionals = append(c.retryConditionals, retryConditional)
+ return c
+}
+
+func (c *Client) SetRetryMaxWaitTime(max time.Duration) *Client {
+ c.resty.SetRetryMaxWaitTime(max)
+ return c
+}
+
// SetPollDelay sets the number of milliseconds to wait between events or status polls.
-// Affects all WaitFor* functions.
+// Affects all WaitFor* functions and retries.
func (c *Client) SetPollDelay(delay time.Duration) *Client {
c.millisecondsPerPoll = delay
+ c.resty.SetRetryWaitTime(delay * time.Millisecond)
return c
}
@@ -136,99 +198,165 @@ func (c Client) Resource(resourceName string) *Resource {
if !ok {
log.Fatalf("Could not find resource named '%s', exiting.", resourceName)
}
+
return selectedResource
}
// NewClient factory to create new Client struct
func NewClient(hc *http.Client) (client Client) {
- restyClient := resty.NewWithClient(hc)
- client.resty = restyClient
- client.SetUserAgent(DefaultUserAgent)
- client.SetBaseURL(fmt.Sprintf("%s://%s/%s", APIProto, APIHost, APIVersion))
- client.SetPollDelay(1000 * APISecondsPerPoll)
+ if hc != nil {
+ client.resty = resty.NewWithClient(hc)
+ } else {
+ client.resty = resty.New()
+ }
+ client.SetUserAgent(DefaultUserAgent)
+
+ baseURL, baseURLExists := os.LookupEnv(APIHostVar)
+
+ if baseURLExists {
+ client.SetBaseURL(baseURL)
+ } else {
+ apiVersion, apiVersionExists := os.LookupEnv(APIVersionVar)
+ if apiVersionExists {
+ client.SetAPIVersion(apiVersion)
+ } else {
+ client.SetAPIVersion(APIVersion)
+ }
+ }
+
+ certPath, certPathExists := os.LookupEnv(APIHostCert)
+
+ if certPathExists {
+ cert, err := ioutil.ReadFile(certPath)
+ if err != nil {
+ log.Fatalf("[ERROR] Error when reading cert at %s: %s\n", certPath, err.Error())
+ }
+
+ client.SetRootCertificate(certPath)
+
+ if envDebug {
+ log.Printf("[DEBUG] Set API root certificate to %s with contents %s\n", certPath, cert)
+ }
+ }
+
+ client.
+ SetPollDelay(1000 * APISecondsPerPoll).
+ SetRetries().
+ SetDebug(envDebug)
+
+ addResources(&client)
+
+ return
+}
+
+// nolint
+func addResources(client *Client) {
resources := map[string]*Resource{
- stackscriptsName: NewResource(&client, stackscriptsName, stackscriptsEndpoint, false, Stackscript{}, StackscriptsPagedResponse{}),
- imagesName: NewResource(&client, imagesName, imagesEndpoint, false, Image{}, ImagesPagedResponse{}),
- instancesName: NewResource(&client, instancesName, instancesEndpoint, false, Instance{}, InstancesPagedResponse{}),
- instanceDisksName: NewResource(&client, instanceDisksName, instanceDisksEndpoint, true, InstanceDisk{}, InstanceDisksPagedResponse{}),
- instanceConfigsName: NewResource(&client, instanceConfigsName, instanceConfigsEndpoint, true, InstanceConfig{}, InstanceConfigsPagedResponse{}),
- instanceSnapshotsName: NewResource(&client, instanceSnapshotsName, instanceSnapshotsEndpoint, true, InstanceSnapshot{}, nil),
- instanceIPsName: NewResource(&client, instanceIPsName, instanceIPsEndpoint, true, InstanceIP{}, nil), // really?
- instanceVolumesName: NewResource(&client, instanceVolumesName, instanceVolumesEndpoint, true, nil, InstanceVolumesPagedResponse{}), // really?
- ipaddressesName: NewResource(&client, ipaddressesName, ipaddressesEndpoint, false, nil, IPAddressesPagedResponse{}), // really?
- ipv6poolsName: NewResource(&client, ipv6poolsName, ipv6poolsEndpoint, false, nil, IPv6PoolsPagedResponse{}), // really?
- ipv6rangesName: NewResource(&client, ipv6rangesName, ipv6rangesEndpoint, false, IPv6Range{}, IPv6RangesPagedResponse{}),
- regionsName: NewResource(&client, regionsName, regionsEndpoint, false, Region{}, RegionsPagedResponse{}),
- volumesName: NewResource(&client, volumesName, volumesEndpoint, false, Volume{}, VolumesPagedResponse{}),
- kernelsName: NewResource(&client, kernelsName, kernelsEndpoint, false, LinodeKernel{}, LinodeKernelsPagedResponse{}),
- typesName: NewResource(&client, typesName, typesEndpoint, false, LinodeType{}, LinodeTypesPagedResponse{}),
- domainsName: NewResource(&client, domainsName, domainsEndpoint, false, Domain{}, DomainsPagedResponse{}),
- domainRecordsName: NewResource(&client, domainRecordsName, domainRecordsEndpoint, true, DomainRecord{}, DomainRecordsPagedResponse{}),
- longviewName: NewResource(&client, longviewName, longviewEndpoint, false, nil, nil), // really?
- longviewclientsName: NewResource(&client, longviewclientsName, longviewclientsEndpoint, false, LongviewClient{}, LongviewClientsPagedResponse{}),
- longviewsubscriptionsName: NewResource(&client, longviewsubscriptionsName, longviewsubscriptionsEndpoint, false, LongviewSubscription{}, LongviewSubscriptionsPagedResponse{}),
- nodebalancersName: NewResource(&client, nodebalancersName, nodebalancersEndpoint, false, NodeBalancer{}, NodeBalancerConfigsPagedResponse{}),
- nodebalancerconfigsName: NewResource(&client, nodebalancerconfigsName, nodebalancerconfigsEndpoint, true, NodeBalancerConfig{}, NodeBalancerConfigsPagedResponse{}),
- nodebalancernodesName: NewResource(&client, nodebalancernodesName, nodebalancernodesEndpoint, true, NodeBalancerNode{}, NodeBalancerNodesPagedResponse{}),
- notificationsName: NewResource(&client, notificationsName, notificationsEndpoint, false, Notification{}, NotificationsPagedResponse{}),
- sshkeysName: NewResource(&client, sshkeysName, sshkeysEndpoint, false, SSHKey{}, SSHKeysPagedResponse{}),
- ticketsName: NewResource(&client, ticketsName, ticketsEndpoint, false, Ticket{}, TicketsPagedResponse{}),
- tokensName: NewResource(&client, tokensName, tokensEndpoint, false, Token{}, TokensPagedResponse{}),
- accountName: NewResource(&client, accountName, accountEndpoint, false, Account{}, nil), // really?
- eventsName: NewResource(&client, eventsName, eventsEndpoint, false, Event{}, EventsPagedResponse{}),
- invoicesName: NewResource(&client, invoicesName, invoicesEndpoint, false, Invoice{}, InvoicesPagedResponse{}),
- invoiceItemsName: NewResource(&client, invoiceItemsName, invoiceItemsEndpoint, true, InvoiceItem{}, InvoiceItemsPagedResponse{}),
- profileName: NewResource(&client, profileName, profileEndpoint, false, nil, nil), // really?
- managedName: NewResource(&client, managedName, managedEndpoint, false, nil, nil), // really?
- tagsName: NewResource(&client, tagsName, tagsEndpoint, false, Tag{}, TagsPagedResponse{}),
- usersName: NewResource(&client, usersName, usersEndpoint, false, User{}, UsersPagedResponse{}),
+ accountName: NewResource(client, accountName, accountEndpoint, false, Account{}, nil), // really?
+ accountSettingsName: NewResource(client, accountSettingsName, accountSettingsEndpoint, false, AccountSettings{}, nil), // really?
+ domainRecordsName: NewResource(client, domainRecordsName, domainRecordsEndpoint, true, DomainRecord{}, DomainRecordsPagedResponse{}),
+ domainsName: NewResource(client, domainsName, domainsEndpoint, false, Domain{}, DomainsPagedResponse{}),
+ eventsName: NewResource(client, eventsName, eventsEndpoint, false, Event{}, EventsPagedResponse{}),
+ firewallsName: NewResource(client, firewallsName, firewallsEndpoint, false, Firewall{}, FirewallsPagedResponse{}),
+ imagesName: NewResource(client, imagesName, imagesEndpoint, false, Image{}, ImagesPagedResponse{}),
+ instanceConfigsName: NewResource(client, instanceConfigsName, instanceConfigsEndpoint, true, InstanceConfig{}, InstanceConfigsPagedResponse{}),
+ instanceDisksName: NewResource(client, instanceDisksName, instanceDisksEndpoint, true, InstanceDisk{}, InstanceDisksPagedResponse{}),
+ instanceIPsName: NewResource(client, instanceIPsName, instanceIPsEndpoint, true, InstanceIP{}, nil), // really?
+ instanceSnapshotsName: NewResource(client, instanceSnapshotsName, instanceSnapshotsEndpoint, true, InstanceSnapshot{}, nil),
+ instanceStatsName: NewResource(client, instanceStatsName, instanceStatsEndpoint, true, InstanceStats{}, nil),
+ instanceVolumesName: NewResource(client, instanceVolumesName, instanceVolumesEndpoint, true, nil, InstanceVolumesPagedResponse{}), // really?
+ instancesName: NewResource(client, instancesName, instancesEndpoint, false, Instance{}, InstancesPagedResponse{}),
+ invoiceItemsName: NewResource(client, invoiceItemsName, invoiceItemsEndpoint, true, InvoiceItem{}, InvoiceItemsPagedResponse{}),
+ invoicesName: NewResource(client, invoicesName, invoicesEndpoint, false, Invoice{}, InvoicesPagedResponse{}),
+ ipaddressesName: NewResource(client, ipaddressesName, ipaddressesEndpoint, false, nil, IPAddressesPagedResponse{}), // really?
+ ipv6poolsName: NewResource(client, ipv6poolsName, ipv6poolsEndpoint, false, nil, IPv6PoolsPagedResponse{}), // really?
+ ipv6rangesName: NewResource(client, ipv6rangesName, ipv6rangesEndpoint, false, IPv6Range{}, IPv6RangesPagedResponse{}),
+ kernelsName: NewResource(client, kernelsName, kernelsEndpoint, false, LinodeKernel{}, LinodeKernelsPagedResponse{}),
+ lkeClustersName: NewResource(client, lkeClustersName, lkeClustersEndpoint, false, LKECluster{}, LKEClustersPagedResponse{}),
+ lkeClusterPoolsName: NewResource(client, lkeClusterPoolsName, lkeClusterPoolsEndpoint, true, LKEClusterPool{}, LKEClusterPoolsPagedResponse{}),
+ lkeVersionsName: NewResource(client, lkeVersionsName, lkeVersionsEndpoint, false, LKEVersion{}, LKEVersionsPagedResponse{}),
+ longviewName: NewResource(client, longviewName, longviewEndpoint, false, nil, nil), // really?
+ longviewclientsName: NewResource(client, longviewclientsName, longviewclientsEndpoint, false, LongviewClient{}, LongviewClientsPagedResponse{}),
+ longviewsubscriptionsName: NewResource(client, longviewsubscriptionsName, longviewsubscriptionsEndpoint, false, LongviewSubscription{}, LongviewSubscriptionsPagedResponse{}),
+ managedName: NewResource(client, managedName, managedEndpoint, false, nil, nil), // really?
+ nodebalancerconfigsName: NewResource(client, nodebalancerconfigsName, nodebalancerconfigsEndpoint, true, NodeBalancerConfig{}, NodeBalancerConfigsPagedResponse{}),
+ nodebalancernodesName: NewResource(client, nodebalancernodesName, nodebalancernodesEndpoint, true, NodeBalancerNode{}, NodeBalancerNodesPagedResponse{}),
+ nodebalancerStatsName: NewResource(client, nodebalancerStatsName, nodebalancerStatsEndpoint, true, NodeBalancerStats{}, nil),
+ nodebalancersName: NewResource(client, nodebalancersName, nodebalancersEndpoint, false, NodeBalancer{}, NodeBalancerConfigsPagedResponse{}),
+ notificationsName: NewResource(client, notificationsName, notificationsEndpoint, false, Notification{}, NotificationsPagedResponse{}),
+ oauthClientsName: NewResource(client, oauthClientsName, oauthClientsEndpoint, false, OAuthClient{}, OAuthClientsPagedResponse{}),
+ objectStorageBucketsName: NewResource(client, objectStorageBucketsName, objectStorageBucketsEndpoint, false, ObjectStorageBucket{}, ObjectStorageBucketsPagedResponse{}),
+ objectStorageClustersName: NewResource(client, objectStorageClustersName, objectStorageClustersEndpoint, false, ObjectStorageCluster{}, ObjectStorageClustersPagedResponse{}),
+ objectStorageKeysName: NewResource(client, objectStorageKeysName, objectStorageKeysEndpoint, false, ObjectStorageKey{}, ObjectStorageKeysPagedResponse{}),
+ paymentsName: NewResource(client, paymentsName, paymentsEndpoint, false, Payment{}, PaymentsPagedResponse{}),
+ profileName: NewResource(client, profileName, profileEndpoint, false, nil, nil), // really?
+ regionsName: NewResource(client, regionsName, regionsEndpoint, false, Region{}, RegionsPagedResponse{}),
+ sshkeysName: NewResource(client, sshkeysName, sshkeysEndpoint, false, SSHKey{}, SSHKeysPagedResponse{}),
+ stackscriptsName: NewResource(client, stackscriptsName, stackscriptsEndpoint, false, Stackscript{}, StackscriptsPagedResponse{}),
+ tagsName: NewResource(client, tagsName, tagsEndpoint, false, Tag{}, TagsPagedResponse{}),
+ ticketsName: NewResource(client, ticketsName, ticketsEndpoint, false, Ticket{}, TicketsPagedResponse{}),
+ tokensName: NewResource(client, tokensName, tokensEndpoint, false, Token{}, TokensPagedResponse{}),
+ typesName: NewResource(client, typesName, typesEndpoint, false, LinodeType{}, LinodeTypesPagedResponse{}),
+ usersName: NewResource(client, usersName, usersEndpoint, false, User{}, UsersPagedResponse{}),
+ volumesName: NewResource(client, volumesName, volumesEndpoint, false, Volume{}, VolumesPagedResponse{}),
}
client.resources = resources
- client.SetDebug(envDebug)
- client.Images = resources[imagesName]
- client.StackScripts = resources[stackscriptsName]
- client.Instances = resources[instancesName]
- client.Regions = resources[regionsName]
- client.InstanceDisks = resources[instanceDisksName]
- client.InstanceConfigs = resources[instanceConfigsName]
- client.InstanceSnapshots = resources[instanceSnapshotsName]
- client.InstanceIPs = resources[instanceIPsName]
- client.InstanceVolumes = resources[instanceVolumesName]
+ client.Account = resources[accountName]
+ client.DomainRecords = resources[domainRecordsName]
+ client.Domains = resources[domainsName]
+ client.Events = resources[eventsName]
+ client.Firewalls = resources[firewallsName]
client.IPAddresses = resources[ipaddressesName]
client.IPv6Pools = resources[ipv6poolsName]
client.IPv6Ranges = resources[ipv6rangesName]
- client.Volumes = resources[volumesName]
+ client.Images = resources[imagesName]
+ client.InstanceConfigs = resources[instanceConfigsName]
+ client.InstanceDisks = resources[instanceDisksName]
+ client.InstanceIPs = resources[instanceIPsName]
+ client.InstanceSnapshots = resources[instanceSnapshotsName]
+ client.InstanceStats = resources[instanceStatsName]
+ client.InstanceVolumes = resources[instanceVolumesName]
+ client.Instances = resources[instancesName]
+ client.Invoices = resources[invoicesName]
client.Kernels = resources[kernelsName]
- client.Types = resources[typesName]
- client.Domains = resources[domainsName]
- client.DomainRecords = resources[domainRecordsName]
+ client.LKEClusters = resources[lkeClustersName]
+ client.LKEClusterPools = resources[lkeClusterPoolsName]
+ client.LKEVersions = resources[lkeVersionsName]
client.Longview = resources[longviewName]
client.LongviewSubscriptions = resources[longviewsubscriptionsName]
- client.NodeBalancers = resources[nodebalancersName]
+ client.Managed = resources[managedName]
client.NodeBalancerConfigs = resources[nodebalancerconfigsName]
client.NodeBalancerNodes = resources[nodebalancernodesName]
+ client.NodeBalancerStats = resources[nodebalancerStatsName]
+ client.NodeBalancers = resources[nodebalancersName]
client.Notifications = resources[notificationsName]
+ client.OAuthClients = resources[oauthClientsName]
+ client.ObjectStorageBuckets = resources[objectStorageBucketsName]
+ client.ObjectStorageClusters = resources[objectStorageClustersName]
+ client.ObjectStorageKeys = resources[objectStorageKeysName]
+ client.Payments = resources[paymentsName]
+ client.Profile = resources[profileName]
+ client.Regions = resources[regionsName]
client.SSHKeys = resources[sshkeysName]
+ client.StackScripts = resources[stackscriptsName]
+ client.Tags = resources[tagsName]
client.Tickets = resources[ticketsName]
client.Tokens = resources[tokensName]
- client.Account = resources[accountName]
- client.Events = resources[eventsName]
- client.Invoices = resources[invoicesName]
- client.Profile = resources[profileName]
- client.Managed = resources[managedName]
- client.Tags = resources[tagsName]
+ client.Types = resources[typesName]
client.Users = resources[usersName]
- return
+ client.Volumes = resources[volumesName]
}
func copyBool(bPtr *bool) *bool {
if bPtr == nil {
return nil
}
+
var t = *bPtr
+
return &t
}
@@ -236,7 +364,9 @@ func copyInt(iPtr *int) *int {
if iPtr == nil {
return nil
}
+
var t = *iPtr
+
return &t
}
@@ -244,7 +374,9 @@ func copyString(sPtr *string) *string {
if sPtr == nil {
return nil
}
+
var t = *sPtr
+
return &t
}
@@ -252,6 +384,8 @@ func copyTime(tPtr *time.Time) *time.Time {
if tPtr == nil {
return nil
}
+
var t = *tPtr
+
return &t
}
diff --git a/vendor/github.com/linode/linodego/domain_records.go b/vendor/github.com/linode/linodego/domain_records.go
index 215ac8004..c2ca92514 100644
--- a/vendor/github.com/linode/linodego/domain_records.go
+++ b/vendor/github.com/linode/linodego/domain_records.go
@@ -77,6 +77,7 @@ func (d DomainRecord) GetUpdateOptions() (du DomainRecordUpdateOptions) {
du.Protocol = copyString(d.Protocol)
du.TTLSec = d.TTLSec
du.Tag = copyString(d.Tag)
+
return
}
@@ -92,6 +93,7 @@ func (DomainRecordsPagedResponse) endpointWithID(c *Client, id int) string {
if err != nil {
panic(err)
}
+
return endpoint
}
@@ -104,15 +106,12 @@ func (resp *DomainRecordsPagedResponse) appendData(r *DomainRecordsPagedResponse
func (c *Client) ListDomainRecords(ctx context.Context, domainID int, opts *ListOptions) ([]DomainRecord, error) {
response := DomainRecordsPagedResponse{}
err := c.listHelperWithID(ctx, &response, domainID, opts)
+
if err != nil {
return nil, err
}
- return response.Data, nil
-}
-// fixDates converts JSON timestamps to Go time.Time values
-func (d *DomainRecord) fixDates() *DomainRecord {
- return d
+ return response.Data, nil
}
// GetDomainRecord gets the domainrecord with the provided ID
@@ -121,18 +120,23 @@ func (c *Client) GetDomainRecord(ctx context.Context, domainID int, id int) (*Do
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%d", e, id)
r, err := coupleAPIErrors(c.R(ctx).SetResult(&DomainRecord{}).Get(e))
+
if err != nil {
return nil, err
}
+
return r.Result().(*DomainRecord), nil
}
// CreateDomainRecord creates a DomainRecord
func (c *Client) CreateDomainRecord(ctx context.Context, domainID int, domainrecord DomainRecordCreateOptions) (*DomainRecord, error) {
var body string
+
e, err := c.DomainRecords.endpointWithID(domainID)
+
if err != nil {
return nil, err
}
@@ -143,6 +147,7 @@ func (c *Client) CreateDomainRecord(ctx context.Context, domainID int, domainrec
if err != nil {
return nil, NewError(err)
}
+
body = string(bodyData)
r, err := coupleAPIErrors(req.
@@ -152,16 +157,20 @@ func (c *Client) CreateDomainRecord(ctx context.Context, domainID int, domainrec
if err != nil {
return nil, err
}
- return r.Result().(*DomainRecord).fixDates(), nil
+
+ return r.Result().(*DomainRecord), nil
}
// UpdateDomainRecord updates the DomainRecord with the specified id
func (c *Client) UpdateDomainRecord(ctx context.Context, domainID int, id int, domainrecord DomainRecordUpdateOptions) (*DomainRecord, error) {
var body string
+
e, err := c.DomainRecords.endpointWithID(domainID)
+
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%d", e, id)
req := c.R(ctx).SetResult(&DomainRecord{})
@@ -179,7 +188,8 @@ func (c *Client) UpdateDomainRecord(ctx context.Context, domainID int, id int, d
if err != nil {
return nil, err
}
- return r.Result().(*DomainRecord).fixDates(), nil
+
+ return r.Result().(*DomainRecord), nil
}
// DeleteDomainRecord deletes the DomainRecord with the specified id
@@ -188,8 +198,10 @@ func (c *Client) DeleteDomainRecord(ctx context.Context, domainID int, id int) e
if err != nil {
return err
}
+
e = fmt.Sprintf("%s/%d", e, id)
_, err = coupleAPIErrors(c.R(ctx).Delete(e))
+
return err
}
diff --git a/vendor/github.com/linode/linodego/domains.go b/vendor/github.com/linode/linodego/domains.go
index 43e4a65f5..59bfda246 100644
--- a/vendor/github.com/linode/linodego/domains.go
+++ b/vendor/github.com/linode/linodego/domains.go
@@ -177,6 +177,7 @@ func (d Domain) GetUpdateOptions() (du DomainUpdateOptions) {
du.ExpireSec = d.ExpireSec
du.RefreshSec = d.RefreshSec
du.TTLSec = d.TTLSec
+
return
}
@@ -192,6 +193,7 @@ func (DomainsPagedResponse) endpoint(c *Client) string {
if err != nil {
panic(err)
}
+
return endpoint
}
@@ -204,15 +206,12 @@ func (resp *DomainsPagedResponse) appendData(r *DomainsPagedResponse) {
func (c *Client) ListDomains(ctx context.Context, opts *ListOptions) ([]Domain, error) {
response := DomainsPagedResponse{}
err := c.listHelper(ctx, &response, opts)
+
if err != nil {
return nil, err
}
- return response.Data, nil
-}
-// fixDates converts JSON timestamps to Go time.Time values
-func (d *Domain) fixDates() *Domain {
- return d
+ return response.Data, nil
}
// GetDomain gets the domain with the provided ID
@@ -221,18 +220,23 @@ func (c *Client) GetDomain(ctx context.Context, id int) (*Domain, error) {
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%d", e, id)
r, err := coupleAPIErrors(c.R(ctx).SetResult(&Domain{}).Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*Domain).fixDates(), nil
+
+ return r.Result().(*Domain), nil
}
// CreateDomain creates a Domain
func (c *Client) CreateDomain(ctx context.Context, domain DomainCreateOptions) (*Domain, error) {
var body string
+
e, err := c.Domains.Endpoint()
+
if err != nil {
return nil, err
}
@@ -243,6 +247,7 @@ func (c *Client) CreateDomain(ctx context.Context, domain DomainCreateOptions) (
if err != nil {
return nil, NewError(err)
}
+
body = string(bodyData)
r, err := coupleAPIErrors(req.
@@ -252,16 +257,20 @@ func (c *Client) CreateDomain(ctx context.Context, domain DomainCreateOptions) (
if err != nil {
return nil, err
}
- return r.Result().(*Domain).fixDates(), nil
+
+ return r.Result().(*Domain), nil
}
// UpdateDomain updates the Domain with the specified id
func (c *Client) UpdateDomain(ctx context.Context, id int, domain DomainUpdateOptions) (*Domain, error) {
var body string
+
e, err := c.Domains.Endpoint()
+
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%d", e, id)
req := c.R(ctx).SetResult(&Domain{})
@@ -279,7 +288,8 @@ func (c *Client) UpdateDomain(ctx context.Context, id int, domain DomainUpdateOp
if err != nil {
return nil, err
}
- return r.Result().(*Domain).fixDates(), nil
+
+ return r.Result().(*Domain), nil
}
// DeleteDomain deletes the Domain with the specified id
@@ -288,8 +298,10 @@ func (c *Client) DeleteDomain(ctx context.Context, id int) error {
if err != nil {
return err
}
+
e = fmt.Sprintf("%s/%d", e, id)
_, err = coupleAPIErrors(c.R(ctx).Delete(e))
+
return err
}
diff --git a/vendor/github.com/linode/linodego/errors.go b/vendor/github.com/linode/linodego/errors.go
index 9ceb881a2..d36925bcb 100644
--- a/vendor/github.com/linode/linodego/errors.go
+++ b/vendor/github.com/linode/linodego/errors.go
@@ -6,7 +6,7 @@ import (
"net/http"
"strings"
- "gopkg.in/resty.v1"
+ "github.com/go-resty/resty/v2"
)
const (
@@ -35,6 +35,7 @@ func (r APIErrorReason) Error() string {
if len(r.Field) == 0 {
return r.Reason
}
+
return fmt.Sprintf("[%s] %s", r.Field, r.Reason)
}
@@ -49,10 +50,25 @@ func coupleAPIErrors(r *resty.Response, err error) (*resty.Response, error) {
}
if r.Error() != nil {
+ // Check that response is of the correct content-type before unmarshalling
+ expectedContentType := r.Request.Header.Get("Accept")
+ responseContentType := r.Header().Get("Content-Type")
+
+ if responseContentType != expectedContentType {
+ msg := fmt.Sprintf(
+ "Unexpected Content-Type: Expected: %v, Received: %v",
+ expectedContentType,
+ responseContentType,
+ )
+
+ return nil, NewError(msg)
+ }
+
apiError, ok := r.Error().(*APIError)
if !ok || (ok && len(apiError.Errors) == 0) {
return r, nil
}
+
return nil, NewError(r)
}
@@ -60,10 +76,11 @@ func coupleAPIErrors(r *resty.Response, err error) (*resty.Response, error) {
}
func (e APIError) Error() string {
- var x []string
+ x := []string{}
for _, msg := range e.Errors {
x = append(x, msg.Error())
}
+
return strings.Join(x, "; ")
}
diff --git a/vendor/github.com/linode/linodego/firewall_rules.go b/vendor/github.com/linode/linodego/firewall_rules.go
new file mode 100644
index 000000000..7dfc952ce
--- /dev/null
+++ b/vendor/github.com/linode/linodego/firewall_rules.go
@@ -0,0 +1,30 @@
+package linodego
+
+// NetworkProtocol enum type
+type NetworkProtocol string
+
+// NetworkProtocol enum values
+const (
+ TCP NetworkProtocol = "TCP"
+ UDP NetworkProtocol = "UDP"
+ ICMP NetworkProtocol = "ALL"
+)
+
+// NetworkAddresses are arrays of ipv4 and v6 addresses
+type NetworkAddresses struct {
+ IPv4 []string `json:"ipv4"`
+ IPv6 []string `json:"ipv6"`
+}
+
+// A FirewallRule is a whitelist of ports, protocols, and addresses for which traffic should be allowed.
+type FirewallRule struct {
+ Ports string `json:"ports"`
+ Protocol NetworkProtocol `json:"protocol"`
+ Addresses NetworkAddresses `json:"addresses"`
+}
+
+// FirewallRuleSet is a pair of inbound and outbound rules that specify what network traffic should be allowed.
+type FirewallRuleSet struct {
+ Inbound []FirewallRule `json:"inbound,omitempty"`
+ Outbound []FirewallRule `json:"outbound,omitempty"`
+}
diff --git a/vendor/github.com/linode/linodego/firewalls.go b/vendor/github.com/linode/linodego/firewalls.go
new file mode 100644
index 000000000..21b4e43a9
--- /dev/null
+++ b/vendor/github.com/linode/linodego/firewalls.go
@@ -0,0 +1,138 @@
+package linodego
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "time"
+
+ "github.com/linode/linodego/internal/parseabletime"
+)
+
+// FirewallStatus enum type
+type FirewallStatus string
+
+// FirewallStatus enums start with Firewall
+const (
+ FirewallEnabled FirewallStatus = "enabled"
+ FirewallDisabled FirewallStatus = "disabled"
+ FirewallDeleted FirewallStatus = "deleted"
+)
+
+// A Firewall is a set of networking rules (iptables) applied to Devices with which it is associated
+type Firewall struct {
+ ID int `json:"id"`
+ Label string `json:"label"`
+ Status FirewallStatus `json:"status"`
+ Tags []string `json:"tags,omitempty"`
+ Rules FirewallRuleSet `json:"rules"`
+ Created *time.Time `json:"-"`
+ Updated *time.Time `json:"-"`
+}
+
+// DevicesCreationOptions fields are used when adding devices during the Firewall creation process.
+type DevicesCreationOptions struct {
+ Linodes []string `json:"linodes,omitempty"`
+ NodeBalancers []string `json:"nodebalancers,omitempty"`
+}
+
+// FirewallCreateOptions fields are those accepted by CreateFirewall
+type FirewallCreateOptions struct {
+ Label string `json:"label,omitempty"`
+ Rules FirewallRuleSet `json:"rules"`
+ Tags []string `json:"tags,omitempty"`
+ Devices DevicesCreationOptions `json:"devices,omitempty"`
+}
+
+// UnmarshalJSON for Firewall responses
+func (i *Firewall) UnmarshalJSON(b []byte) error {
+ type Mask Firewall
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Updated = (*time.Time)(p.Updated)
+
+ return nil
+}
+
+// FirewallsPagedResponse represents a Linode API response for listing of Cloud Firewalls
+type FirewallsPagedResponse struct {
+ *PageOptions
+ Data []Firewall `json:"data"`
+}
+
+func (FirewallsPagedResponse) endpoint(c *Client) string {
+ endpoint, err := c.Firewalls.Endpoint()
+ if err != nil {
+ panic(err)
+ }
+ return endpoint
+}
+
+func (resp *FirewallsPagedResponse) appendData(r *FirewallsPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// ListFirewalls returns a paginated list of Cloud Firewalls
+func (c *Client) ListFirewalls(ctx context.Context, opts *ListOptions) ([]Firewall, error) {
+ response := FirewallsPagedResponse{}
+
+ err := c.listHelper(ctx, &response, opts)
+
+ if err != nil {
+ return nil, err
+ }
+
+ return response.Data, nil
+}
+
+// CreateFirewall creates a single Firewall with at least one set of inbound or outbound rules
+func (c *Client) CreateFirewall(ctx context.Context, createOpts FirewallCreateOptions) (*Firewall, error) {
+ var body string
+ e, err := c.Firewalls.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+
+ req := c.R(ctx).SetResult(&Firewall{})
+
+ if bodyData, err := json.Marshal(createOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Post(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*Firewall), nil
+}
+
+// DeleteFirewall deletes a single Firewall with the provided ID
+func (c *Client) DeleteFirewall(ctx context.Context, id int) error {
+ e, err := c.Firewalls.Endpoint()
+ if err != nil {
+ return err
+ }
+
+ req := c.R(ctx)
+
+ e = fmt.Sprintf("%s/%d", e, id)
+ _, err = coupleAPIErrors(req.Delete(e))
+ return err
+}
diff --git a/vendor/github.com/linode/linodego/go.mod b/vendor/github.com/linode/linodego/go.mod
new file mode 100644
index 000000000..15154c9a0
--- /dev/null
+++ b/vendor/github.com/linode/linodego/go.mod
@@ -0,0 +1,15 @@
+module github.com/linode/linodego
+
+require (
+ github.com/dnaeon/go-vcr v1.0.1
+ github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48
+ github.com/golang/protobuf v1.2.0 // indirect
+ github.com/kr/pretty v0.1.0 // indirect
+ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be
+ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f // indirect
+ google.golang.org/appengine v1.1.0 // indirect
+ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
+ gopkg.in/yaml.v2 v2.2.1 // indirect
+)
+
+go 1.13
diff --git a/vendor/github.com/linode/linodego/go.sum b/vendor/github.com/linode/linodego/go.sum
new file mode 100644
index 000000000..2280c87d7
--- /dev/null
+++ b/vendor/github.com/linode/linodego/go.sum
@@ -0,0 +1,29 @@
+github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY=
+github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
+github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48 h1:JVrqSeQfdhYRFk24TvhTZWU0q8lfCojxZQFi3Ou7+uY=
+github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8=
+github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/vendor/github.com/linode/linodego/images.go b/vendor/github.com/linode/linodego/images.go
index 979ce2ed1..10018eff4 100644
--- a/vendor/github.com/linode/linodego/images.go
+++ b/vendor/github.com/linode/linodego/images.go
@@ -5,24 +5,23 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// Image represents a deployable Image object for use with Linode Instances
type Image struct {
- CreatedStr string `json:"created"`
- ExpiryStr string `json:"expiry"`
- ID string `json:"id"`
- CreatedBy string `json:"created_by"`
- Label string `json:"label"`
- Description string `json:"description"`
- Type string `json:"type"`
- Vendor string `json:"vendor"`
- Size int `json:"size"`
- IsPublic bool `json:"is_public"`
- Deprecated bool `json:"deprecated"`
-
- Created *time.Time `json:"-"`
- Expiry *time.Time `json:"-"`
+ ID string `json:"id"`
+ CreatedBy string `json:"created_by"`
+ Label string `json:"label"`
+ Description string `json:"description"`
+ Type string `json:"type"`
+ Vendor string `json:"vendor"`
+ Size int `json:"size"`
+ IsPublic bool `json:"is_public"`
+ Deprecated bool `json:"deprecated"`
+ Created *time.Time `json:"-"`
+ Expiry *time.Time `json:"-"`
}
// ImageCreateOptions fields are those accepted by CreateImage
@@ -38,15 +37,26 @@ type ImageUpdateOptions struct {
Description *string `json:"description,omitempty"`
}
-func (i *Image) fixDates() *Image {
- i.Created, _ = parseDates(i.CreatedStr)
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *Image) UnmarshalJSON(b []byte) error {
+ type Mask Image
- if len(i.ExpiryStr) > 0 {
- i.Expiry, _ = parseDates(i.ExpiryStr)
- } else {
- i.Expiry = nil
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Expiry *parseabletime.ParseableTime `json:"expiry"`
+ }{
+ Mask: (*Mask)(i),
}
- return i
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Expiry = (*time.Time)(p.Expiry)
+
+ return nil
}
// GetUpdateOptions converts an Image to ImageUpdateOptions for use in UpdateImage
@@ -78,14 +88,11 @@ func (resp *ImagesPagedResponse) appendData(r *ImagesPagedResponse) {
func (c *Client) ListImages(ctx context.Context, opts *ListOptions) ([]Image, error) {
response := ImagesPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
-
}
// GetImage gets the Image with the provided ID
@@ -94,18 +101,22 @@ func (c *Client) GetImage(ctx context.Context, id string) (*Image, error) {
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%s", e, id)
r, err := coupleAPIErrors(c.Images.R(ctx).Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*Image).fixDates(), nil
+ return r.Result().(*Image), nil
}
// CreateImage creates a Image
func (c *Client) CreateImage(ctx context.Context, createOpts ImageCreateOptions) (*Image, error) {
var body string
+
e, err := c.Images.Endpoint()
+
if err != nil {
return nil, err
}
@@ -125,16 +136,18 @@ func (c *Client) CreateImage(ctx context.Context, createOpts ImageCreateOptions)
if err != nil {
return nil, err
}
- return r.Result().(*Image).fixDates(), nil
+ return r.Result().(*Image), nil
}
// UpdateImage updates the Image with the specified id
func (c *Client) UpdateImage(ctx context.Context, id string, updateOpts ImageUpdateOptions) (*Image, error) {
var body string
+
e, err := c.Images.Endpoint()
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%s", e, id)
req := c.R(ctx).SetResult(&Image{})
@@ -152,7 +165,7 @@ func (c *Client) UpdateImage(ctx context.Context, id string, updateOpts ImageUpd
if err != nil {
return nil, err
}
- return r.Result().(*Image).fixDates(), nil
+ return r.Result().(*Image), nil
}
// DeleteImage deletes the Image with the specified id
@@ -161,6 +174,7 @@ func (c *Client) DeleteImage(ctx context.Context, id string) error {
if err != nil {
return err
}
+
e = fmt.Sprintf("%s/%s", e, id)
_, err = coupleAPIErrors(c.R(ctx).Delete(e))
diff --git a/vendor/github.com/linode/linodego/instance_configs.go b/vendor/github.com/linode/linodego/instance_configs.go
index 979a27495..df51e5339 100644
--- a/vendor/github.com/linode/linodego/instance_configs.go
+++ b/vendor/github.com/linode/linodego/instance_configs.go
@@ -5,13 +5,12 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// InstanceConfig represents all of the settings that control the boot and run configuration of a Linode Instance
type InstanceConfig struct {
- CreatedStr string `json:"created"`
- UpdatedStr string `json:"updated"`
-
ID int `json:"id"`
Label string `json:"label"`
Comments string `json:"comments"`
@@ -90,6 +89,28 @@ type InstanceConfigUpdateOptions struct {
VirtMode string `json:"virt_mode,omitempty"`
}
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *InstanceConfig) UnmarshalJSON(b []byte) error {
+ type Mask InstanceConfig
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Updated = (*time.Time)(p.Updated)
+
+ return nil
+}
+
// GetCreateOptions converts a InstanceConfig to InstanceConfigCreateOptions for use in CreateInstanceConfig
func (i InstanceConfig) GetCreateOptions() InstanceConfigCreateOptions {
initrd := 0
@@ -144,22 +165,13 @@ func (resp *InstanceConfigsPagedResponse) appendData(r *InstanceConfigsPagedResp
func (c *Client) ListInstanceConfigs(ctx context.Context, linodeID int, opts *ListOptions) ([]InstanceConfig, error) {
response := InstanceConfigsPagedResponse{}
err := c.listHelperWithID(ctx, &response, linodeID, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (i *InstanceConfig) fixDates() *InstanceConfig {
- i.Created, _ = parseDates(i.CreatedStr)
- i.Updated, _ = parseDates(i.UpdatedStr)
- return i
-}
-
// GetInstanceConfig gets the template with the provided ID
func (c *Client) GetInstanceConfig(ctx context.Context, linodeID int, configID int) (*InstanceConfig, error) {
e, err := c.InstanceConfigs.endpointWithID(linodeID)
@@ -168,16 +180,18 @@ func (c *Client) GetInstanceConfig(ctx context.Context, linodeID int, configID i
}
e = fmt.Sprintf("%s/%d", e, configID)
r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceConfig{}).Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*InstanceConfig).fixDates(), nil
+ return r.Result().(*InstanceConfig), nil
}
// CreateInstanceConfig creates a new InstanceConfig for the given Instance
func (c *Client) CreateInstanceConfig(ctx context.Context, linodeID int, createOpts InstanceConfigCreateOptions) (*InstanceConfig, error) {
var body string
e, err := c.InstanceConfigs.endpointWithID(linodeID)
+
if err != nil {
return nil, err
}
@@ -198,13 +212,14 @@ func (c *Client) CreateInstanceConfig(ctx context.Context, linodeID int, createO
return nil, err
}
- return r.Result().(*InstanceConfig).fixDates(), nil
+ return r.Result().(*InstanceConfig), nil
}
// UpdateInstanceConfig update an InstanceConfig for the given Instance
func (c *Client) UpdateInstanceConfig(ctx context.Context, linodeID int, configID int, updateOpts InstanceConfigUpdateOptions) (*InstanceConfig, error) {
var body string
e, err := c.InstanceConfigs.endpointWithID(linodeID)
+
if err != nil {
return nil, err
}
@@ -225,7 +240,7 @@ func (c *Client) UpdateInstanceConfig(ctx context.Context, linodeID int, configI
return nil, err
}
- return r.Result().(*InstanceConfig).fixDates(), nil
+ return r.Result().(*InstanceConfig), nil
}
// RenameInstanceConfig renames an InstanceConfig
diff --git a/vendor/github.com/linode/linodego/instance_disks.go b/vendor/github.com/linode/linodego/instance_disks.go
index 9b43d6b8d..5d8e3cb1c 100644
--- a/vendor/github.com/linode/linodego/instance_disks.go
+++ b/vendor/github.com/linode/linodego/instance_disks.go
@@ -5,13 +5,12 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// InstanceDisk represents an Instance Disk object
type InstanceDisk struct {
- CreatedStr string `json:"created"`
- UpdatedStr string `json:"updated"`
-
ID int `json:"id"`
Label string `json:"label"`
Status DiskStatus `json:"status"`
@@ -90,24 +89,37 @@ func (resp *InstanceDisksPagedResponse) appendData(r *InstanceDisksPagedResponse
func (c *Client) ListInstanceDisks(ctx context.Context, linodeID int, opts *ListOptions) ([]InstanceDisk, error) {
response := InstanceDisksPagedResponse{}
err := c.listHelperWithID(ctx, &response, linodeID, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *InstanceDisk) fixDates() *InstanceDisk {
- if created, err := parseDates(v.CreatedStr); err == nil {
- v.Created = *created
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *InstanceDisk) UnmarshalJSON(b []byte) error {
+ type Mask InstanceDisk
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ }{
+ Mask: (*Mask)(i),
}
- if updated, err := parseDates(v.UpdatedStr); err == nil {
- v.Updated = *updated
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
}
- return v
+
+ if p.Created != nil {
+ i.Created = time.Time(*p.Created)
+ }
+ if p.Updated != nil {
+ i.Updated = time.Time(*p.Updated)
+ }
+
+ return nil
}
// GetInstanceDisk gets the template with the provided ID
@@ -116,18 +128,21 @@ func (c *Client) GetInstanceDisk(ctx context.Context, linodeID int, configID int
if err != nil {
return nil, err
}
+
e = fmt.Sprintf("%s/%d", e, configID)
r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceDisk{}).Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*InstanceDisk).fixDates(), nil
+ return r.Result().(*InstanceDisk), nil
}
// CreateInstanceDisk creates a new InstanceDisk for the given Instance
func (c *Client) CreateInstanceDisk(ctx context.Context, linodeID int, createOpts InstanceDiskCreateOptions) (*InstanceDisk, error) {
var body string
e, err := c.InstanceDisks.endpointWithID(linodeID)
+
if err != nil {
return nil, err
}
@@ -148,18 +163,19 @@ func (c *Client) CreateInstanceDisk(ctx context.Context, linodeID int, createOpt
return nil, err
}
- return r.Result().(*InstanceDisk).fixDates(), nil
+ return r.Result().(*InstanceDisk), nil
}
// UpdateInstanceDisk creates a new InstanceDisk for the given Instance
func (c *Client) UpdateInstanceDisk(ctx context.Context, linodeID int, diskID int, updateOpts InstanceDiskUpdateOptions) (*InstanceDisk, error) {
var body string
e, err := c.InstanceDisks.endpointWithID(linodeID)
+
if err != nil {
return nil, err
}
- e = fmt.Sprintf("%s/%d", e, diskID)
+ e = fmt.Sprintf("%s/%d", e, diskID)
req := c.R(ctx).SetResult(&InstanceDisk{})
if bodyData, err := json.Marshal(updateOpts); err == nil {
@@ -176,7 +192,7 @@ func (c *Client) UpdateInstanceDisk(ctx context.Context, linodeID int, diskID in
return nil, err
}
- return r.Result().(*InstanceDisk).fixDates(), nil
+ return r.Result().(*InstanceDisk), nil
}
// RenameInstanceDisk renames an InstanceDisk
@@ -188,6 +204,7 @@ func (c *Client) RenameInstanceDisk(ctx context.Context, linodeID int, diskID in
func (c *Client) ResizeInstanceDisk(ctx context.Context, linodeID int, diskID int, size int) error {
var body string
e, err := c.InstanceDisks.endpointWithID(linodeID)
+
if err != nil {
return err
}
@@ -215,6 +232,7 @@ func (c *Client) ResizeInstanceDisk(ctx context.Context, linodeID int, diskID in
func (c *Client) PasswordResetInstanceDisk(ctx context.Context, linodeID int, diskID int, password string) error {
var body string
e, err := c.InstanceDisks.endpointWithID(linodeID)
+
if err != nil {
return err
}
diff --git a/vendor/github.com/linode/linodego/instance_ips.go b/vendor/github.com/linode/linodego/instance_ips.go
index a30d04f16..eebc359f9 100644
--- a/vendor/github.com/linode/linodego/instance_ips.go
+++ b/vendor/github.com/linode/linodego/instance_ips.go
@@ -14,22 +14,23 @@ type InstanceIPAddressResponse struct {
// InstanceIPv4Response contains the details of all IPv4 addresses associated with an Instance
type InstanceIPv4Response struct {
- Public []*InstanceIP `json:"public"`
- Private []*InstanceIP `json:"private"`
- Shared []*InstanceIP `json:"shared"`
+ Public []*InstanceIP `json:"public"`
+ Private []*InstanceIP `json:"private"`
+ Shared []*InstanceIP `json:"shared"`
+ Reserved []*InstanceIP `json:"reserved"`
}
// InstanceIP represents an Instance IP with additional DNS and networking details
type InstanceIP struct {
- Address string `json:"address"`
- Gateway string `json:"gateway"`
- SubnetMask string `json:"subnet_mask"`
- Prefix int `json:"prefix"`
- Type string `json:"type"`
- Public bool `json:"public"`
- RDNS string `json:"rdns"`
- LinodeID int `json:"linode_id"`
- Region string `json:"region"`
+ Address string `json:"address"`
+ Gateway string `json:"gateway"`
+ SubnetMask string `json:"subnet_mask"`
+ Prefix int `json:"prefix"`
+ Type InstanceIPType `json:"type"`
+ Public bool `json:"public"`
+ RDNS string `json:"rdns"`
+ LinodeID int `json:"linode_id"`
+ Region string `json:"region"`
}
// InstanceIPv6Response contains the IPv6 addresses and ranges for an Instance
@@ -43,14 +44,27 @@ type InstanceIPv6Response struct {
type IPv6Range struct {
Range string `json:"range"`
Region string `json:"region"`
+ Prefix int `json:"prefix"`
}
+// InstanceIPType constants start with IPType and include Linode Instance IP Types
+type InstanceIPType string
+
+// InstanceIPType constants represent the IP types an Instance IP may be
+const (
+ IPTypeIPv4 InstanceIPType = "ipv4"
+ IPTypeIPv6 InstanceIPType = "ipv6"
+ IPTypeIPv6Pool InstanceIPType = "ipv6/pool"
+ IPTypeIPv6Range InstanceIPType = "ipv6/range"
+)
+
// GetInstanceIPAddresses gets the IPAddresses for a Linode instance
func (c *Client) GetInstanceIPAddresses(ctx context.Context, linodeID int) (*InstanceIPAddressResponse, error) {
e, err := c.InstanceIPs.endpointWithID(linodeID)
if err != nil {
return nil, err
}
+
r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceIPAddressResponse{}).Get(e))
if err != nil {
return nil, err
@@ -66,6 +80,7 @@ func (c *Client) GetInstanceIPAddress(ctx context.Context, linodeID int, ipaddre
}
e = fmt.Sprintf("%s/%s", e, ipaddress)
r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceIP{}).Get(e))
+
if err != nil {
return nil, err
}
@@ -76,6 +91,7 @@ func (c *Client) GetInstanceIPAddress(ctx context.Context, linodeID int, ipaddre
func (c *Client) AddInstanceIPAddress(ctx context.Context, linodeID int, public bool) (*InstanceIP, error) {
var body string
e, err := c.InstanceIPs.endpointWithID(linodeID)
+
if err != nil {
return nil, err
}
@@ -104,3 +120,31 @@ func (c *Client) AddInstanceIPAddress(ctx context.Context, linodeID int, public
return r.Result().(*InstanceIP), nil
}
+
+// UpdateInstanceIPAddress updates the IPAddress with the specified instance id and IP address
+func (c *Client) UpdateInstanceIPAddress(ctx context.Context, linodeID int, ipAddress string, updateOpts IPAddressUpdateOptions) (*InstanceIP, error) {
+ var body string
+ e, err := c.InstanceIPs.endpointWithID(linodeID)
+
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%s", e, ipAddress)
+
+ req := c.R(ctx).SetResult(&InstanceIP{})
+
+ if bodyData, err := json.Marshal(updateOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Put(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*InstanceIP), nil
+}
diff --git a/vendor/github.com/linode/linodego/instance_snapshots.go b/vendor/github.com/linode/linodego/instance_snapshots.go
index 7933507dc..d23f8dbd4 100644
--- a/vendor/github.com/linode/linodego/instance_snapshots.go
+++ b/vendor/github.com/linode/linodego/instance_snapshots.go
@@ -5,6 +5,8 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// InstanceBackupsResponse response struct for backup snapshot
@@ -27,10 +29,6 @@ type RestoreInstanceOptions struct {
// InstanceSnapshot represents a linode backup snapshot
type InstanceSnapshot struct {
- CreatedStr string `json:"created"`
- UpdatedStr string `json:"updated"`
- FinishedStr string `json:"finished"`
-
ID int `json:"id"`
Label string `json:"label"`
Status InstanceSnapshotStatus `json:"status"`
@@ -63,11 +61,28 @@ var (
SnapshotUserAborted InstanceSnapshotStatus = "userAborted"
)
-func (l *InstanceSnapshot) fixDates() *InstanceSnapshot {
- l.Created, _ = parseDates(l.CreatedStr)
- l.Updated, _ = parseDates(l.UpdatedStr)
- l.Finished, _ = parseDates(l.FinishedStr)
- return l
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *InstanceSnapshot) UnmarshalJSON(b []byte) error {
+ type Mask InstanceSnapshot
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ Finished *parseabletime.ParseableTime `json:"finished"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Updated = (*time.Time)(p.Updated)
+ i.Finished = (*time.Time)(p.Finished)
+
+ return nil
}
// GetInstanceSnapshot gets the snapshot with the provided ID
@@ -78,10 +93,11 @@ func (c *Client) GetInstanceSnapshot(ctx context.Context, linodeID int, snapshot
}
e = fmt.Sprintf("%s/%d", e, snapshotID)
r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceSnapshot{}).Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*InstanceSnapshot).fixDates(), nil
+ return r.Result().(*InstanceSnapshot), nil
}
// CreateInstanceSnapshot Creates or Replaces the snapshot Backup of a Linode. If a previous snapshot exists for this Linode, it will be deleted.
@@ -92,6 +108,7 @@ func (c *Client) CreateInstanceSnapshot(ctx context.Context, linodeID int, label
}
body := string(o)
e, err := c.InstanceSnapshots.endpointWithID(linodeID)
+
if err != nil {
return nil, err
}
@@ -105,7 +122,7 @@ func (c *Client) CreateInstanceSnapshot(ctx context.Context, linodeID int, label
return nil, err
}
- return r.Result().(*InstanceSnapshot).fixDates(), nil
+ return r.Result().(*InstanceSnapshot), nil
}
// GetInstanceBackups gets the Instance's available Backups.
@@ -118,10 +135,11 @@ func (c *Client) GetInstanceBackups(ctx context.Context, linodeID int) (*Instanc
r, err := coupleAPIErrors(c.R(ctx).
SetResult(&InstanceBackupsResponse{}).
Get(e))
+
if err != nil {
return nil, err
}
- return r.Result().(*InstanceBackupsResponse).fixDates(), nil
+ return r.Result().(*InstanceBackupsResponse), nil
}
// EnableInstanceBackups Enables backups for the specified Linode.
@@ -164,25 +182,4 @@ func (c *Client) RestoreInstanceBackup(ctx context.Context, linodeID int, backup
_, err = coupleAPIErrors(c.R(ctx).SetBody(body).Post(e))
return err
-
-}
-
-func (l *InstanceBackupSnapshotResponse) fixDates() *InstanceBackupSnapshotResponse {
- if l.Current != nil {
- l.Current.fixDates()
- }
- if l.InProgress != nil {
- l.InProgress.fixDates()
- }
- return l
-}
-
-func (l *InstanceBackupsResponse) fixDates() *InstanceBackupsResponse {
- for i := range l.Automatic {
- l.Automatic[i].fixDates()
- }
- if l.Snapshot != nil {
- l.Snapshot.fixDates()
- }
- return l
}
diff --git a/vendor/github.com/linode/linodego/instance_stats.go b/vendor/github.com/linode/linodego/instance_stats.go
new file mode 100644
index 000000000..609b95183
--- /dev/null
+++ b/vendor/github.com/linode/linodego/instance_stats.go
@@ -0,0 +1,68 @@
+package linodego
+
+import (
+ "context"
+ "fmt"
+)
+
+// StatsNet represents a network stats object
+type StatsNet struct {
+ In [][]float64 `json:"in"`
+ Out [][]float64 `json:"out"`
+ PrivateIn [][]float64 `json:"private_in"`
+ PrivateOut [][]float64 `json:"private_out"`
+}
+
+// StatsIO represents an IO stats object
+type StatsIO struct {
+ IO [][]float64 `json:"io"`
+ Swap [][]float64 `json:"swap"`
+}
+
+// InstanceStatsData represents an instance stats data object
+type InstanceStatsData struct {
+ CPU [][]float64 `json:"cpu"`
+ IO StatsIO `json:"io"`
+ NetV4 StatsNet `json:"netv4"`
+ NetV6 StatsNet `json:"netv6"`
+}
+
+// InstanceStats represents an instance stats object
+type InstanceStats struct {
+ Title string `json:"title"`
+ Data InstanceStatsData `json:"data"`
+}
+
+// endpointWithIDAndDate gets the endpoint URL for InstanceStats of a given Instance and Year/Month
+func endpointWithIDAndDate(c *Client, id int, year int, month int) string {
+ endpoint, err := c.InstanceStats.endpointWithID(id)
+ if err != nil {
+ panic(err)
+ }
+
+ endpoint = fmt.Sprintf("%s/%d/%d", endpoint, year, month)
+ return endpoint
+}
+
+// GetInstanceStats gets the template with the provided ID
+func (c *Client) GetInstanceStats(ctx context.Context, linodeID int) (*InstanceStats, error) {
+ e, err := c.InstanceStats.endpointWithID(linodeID)
+ if err != nil {
+ return nil, err
+ }
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceStats{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*InstanceStats), nil
+}
+
+// GetInstanceStatsByDate gets the template with the provided ID, year, and month
+func (c *Client) GetInstanceStatsByDate(ctx context.Context, linodeID int, year int, month int) (*InstanceStats, error) {
+ e := endpointWithIDAndDate(c, linodeID, year, month)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceStats{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*InstanceStats), nil
+}
diff --git a/vendor/github.com/linode/linodego/instance_volumes.go b/vendor/github.com/linode/linodego/instance_volumes.go
index b6c9a9ae0..7d19d3811 100644
--- a/vendor/github.com/linode/linodego/instance_volumes.go
+++ b/vendor/github.com/linode/linodego/instance_volumes.go
@@ -28,9 +28,7 @@ func (resp *InstanceVolumesPagedResponse) appendData(r *InstanceVolumesPagedResp
func (c *Client) ListInstanceVolumes(ctx context.Context, linodeID int, opts *ListOptions) ([]Volume, error) {
response := InstanceVolumesPagedResponse{}
err := c.listHelperWithID(ctx, &response, linodeID, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/linode/linodego/instances.go b/vendor/github.com/linode/linodego/instances.go
index 85775508a..abb807fb5 100644
--- a/vendor/github.com/linode/linodego/instances.go
+++ b/vendor/github.com/linode/linodego/instances.go
@@ -6,6 +6,8 @@ import (
"fmt"
"net"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
/*
@@ -33,9 +35,6 @@ const (
// Instance represents a linode object
type Instance struct {
- CreatedStr string `json:"created"`
- UpdatedStr string `json:"updated"`
-
ID int `json:"id"`
Created *time.Time `json:"-"`
Updated *time.Time `json:"-"`
@@ -81,6 +80,18 @@ type InstanceBackup struct {
}
}
+// InstanceTransfer pool stats for a Linode Instance during the current billing month
+type InstanceTransfer struct {
+ // Bytes of transfer this instance has consumed
+ Used int `json:"used"`
+
+ // GB of billable transfer this instance has consumed
+ Billable int `json:"billable"`
+
+ // GB of transfer this instance adds to the Transfer pool
+ Quota int `json:"quota"`
+}
+
// InstanceCreateOptions require only Region and Type
type InstanceCreateOptions struct {
Region string `json:"region"`
@@ -113,15 +124,37 @@ type InstanceUpdateOptions struct {
Tags *[]string `json:"tags,omitempty"`
}
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *Instance) UnmarshalJSON(b []byte) error {
+ type Mask Instance
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Updated = (*time.Time)(p.Updated)
+
+ return nil
+}
+
// GetUpdateOptions converts an Instance to InstanceUpdateOptions for use in UpdateInstance
-func (l *Instance) GetUpdateOptions() InstanceUpdateOptions {
+func (i *Instance) GetUpdateOptions() InstanceUpdateOptions {
return InstanceUpdateOptions{
- Label: l.Label,
- Group: l.Group,
- Backups: l.Backups,
- Alerts: l.Alerts,
- WatchdogEnabled: &l.WatchdogEnabled,
- Tags: &l.Tags,
+ Label: i.Label,
+ Group: i.Group,
+ Backups: i.Backups,
+ Alerts: i.Alerts,
+ WatchdogEnabled: &i.WatchdogEnabled,
+ Tags: &i.Tags,
}
}
@@ -139,10 +172,12 @@ type InstanceCloneOptions struct {
Configs []int `json:"configs,omitempty"`
}
-func (l *Instance) fixDates() *Instance {
- l.Created, _ = parseDates(l.CreatedStr)
- l.Updated, _ = parseDates(l.UpdatedStr)
- return l
+// InstanceResizeOptions is an options struct used when resizing an instance
+type InstanceResizeOptions struct {
+ Type string `json:"type"`
+
+ // When enabled, an instance resize will also resize a data disk if the instance has no more than one data disk and one swap disk
+ AllowAutoDiskResize *bool `json:"allow_auto_disk_resize,omitempty"`
}
// InstancesPagedResponse represents a linode API response for listing
@@ -169,9 +204,7 @@ func (resp *InstancesPagedResponse) appendData(r *InstancesPagedResponse) {
func (c *Client) ListInstances(ctx context.Context, opts *ListOptions) ([]Instance, error) {
response := InstancesPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
@@ -191,7 +224,23 @@ func (c *Client) GetInstance(ctx context.Context, linodeID int) (*Instance, erro
if err != nil {
return nil, err
}
- return r.Result().(*Instance).fixDates(), nil
+ return r.Result().(*Instance), nil
+}
+
+// GetInstanceTransfer gets the instance with the provided ID
+func (c *Client) GetInstanceTransfer(ctx context.Context, linodeID int) (*InstanceTransfer, error) {
+ e, err := c.Instances.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d/transfer", e, linodeID)
+ r, err := coupleAPIErrors(c.R(ctx).
+ SetResult(InstanceTransfer{}).
+ Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*InstanceTransfer), nil
}
// CreateInstance creates a Linode instance
@@ -217,7 +266,7 @@ func (c *Client) CreateInstance(ctx context.Context, instance InstanceCreateOpti
if err != nil {
return nil, err
}
- return r.Result().(*Instance).fixDates(), nil
+ return r.Result().(*Instance), nil
}
// UpdateInstance creates a Linode instance
@@ -244,7 +293,7 @@ func (c *Client) UpdateInstance(ctx context.Context, id int, instance InstanceUp
if err != nil {
return nil, err
}
- return r.Result().(*Instance).fixDates(), nil
+ return r.Result().(*Instance), nil
}
// RenameInstance renames an Instance
@@ -316,7 +365,7 @@ func (c *Client) CloneInstance(ctx context.Context, id int, options InstanceClon
return nil, err
}
- return r.Result().(*Instance).fixDates(), nil
+ return r.Result().(*Instance), nil
}
// RebootInstance reboots a Linode instance
@@ -347,20 +396,20 @@ func (c *Client) RebootInstance(ctx context.Context, id int, configID int) error
return err
}
-// RebuildInstanceOptions is a struct representing the options to send to the rebuild linode endpoint
-type RebuildInstanceOptions struct {
- Image string `json:"image"`
- RootPass string `json:"root_pass"`
- AuthorizedKeys []string `json:"authorized_keys"`
- AuthorizedUsers []string `json:"authorized_users"`
- StackscriptID int `json:"stackscript_id"`
- StackscriptData map[string]string `json:"stackscript_data"`
- Booted bool `json:"booted"`
+// InstanceRebuildOptions is a struct representing the options to send to the rebuild linode endpoint
+type InstanceRebuildOptions struct {
+ Image string `json:"image,omitempty"`
+ RootPass string `json:"root_pass,omitempty"`
+ AuthorizedKeys []string `json:"authorized_keys,omitempty"`
+ AuthorizedUsers []string `json:"authorized_users,omitempty"`
+ StackScriptID int `json:"stackscript_id,omitempty"`
+ StackScriptData map[string]string `json:"stackscript_data,omitempty"`
+ Booted *bool `json:"booted,omitempty"`
}
// RebuildInstance Deletes all Disks and Configs on this Linode,
// then deploys a new Image to this Linode with the given attributes.
-func (c *Client) RebuildInstance(ctx context.Context, id int, opts RebuildInstanceOptions) (*Instance, error) {
+func (c *Client) RebuildInstance(ctx context.Context, id int, opts InstanceRebuildOptions) (*Instance, error) {
o, err := json.Marshal(opts)
if err != nil {
return nil, NewError(err)
@@ -378,11 +427,11 @@ func (c *Client) RebuildInstance(ctx context.Context, id int, opts RebuildInstan
if err != nil {
return nil, err
}
- return r.Result().(*Instance).fixDates(), nil
+ return r.Result().(*Instance), nil
}
-// RescueInstanceOptions fields are those accepted by RescueInstance
-type RescueInstanceOptions struct {
+// InstanceRescueOptions fields are those accepted by RescueInstance
+type InstanceRescueOptions struct {
Devices InstanceConfigDeviceMap `json:"devices"`
}
@@ -390,7 +439,7 @@ type RescueInstanceOptions struct {
// Rescue Mode is based on the Finnix recovery distribution, a self-contained and bootable Linux distribution.
// You can also use Rescue Mode for tasks other than disaster recovery, such as formatting disks to use different filesystems,
// copying data between disks, and downloading files from a disk via SSH and SFTP.
-func (c *Client) RescueInstance(ctx context.Context, id int, opts RescueInstanceOptions) error {
+func (c *Client) RescueInstance(ctx context.Context, id int, opts InstanceRescueOptions) error {
o, err := json.Marshal(opts)
if err != nil {
return NewError(err)
@@ -410,9 +459,12 @@ func (c *Client) RescueInstance(ctx context.Context, id int, opts RescueInstance
}
// ResizeInstance resizes an instance to new Linode type
-func (c *Client) ResizeInstance(ctx context.Context, id int, linodeType string) error {
- body := fmt.Sprintf("{\"type\":\"%s\"}", linodeType)
-
+func (c *Client) ResizeInstance(ctx context.Context, id int, opts InstanceResizeOptions) error {
+ o, err := json.Marshal(opts)
+ if err != nil {
+ return NewError(err)
+ }
+ body := string(o)
e, err := c.Instances.Endpoint()
if err != nil {
return err
diff --git a/vendor/github.com/linode/linodego/internal/duration/duration.go b/vendor/github.com/linode/linodego/internal/duration/duration.go
new file mode 100644
index 000000000..b4049b601
--- /dev/null
+++ b/vendor/github.com/linode/linodego/internal/duration/duration.go
@@ -0,0 +1,63 @@
+package duration
+
+import (
+ "encoding/json"
+ "fmt"
+ "log"
+ "strconv"
+ "strings"
+)
+
+func UnmarshalTimeRemaining(m json.RawMessage) *int {
+ jsonBytes, err := m.MarshalJSON()
+ if err != nil {
+ panic(jsonBytes)
+ }
+
+ if len(jsonBytes) == 4 && string(jsonBytes) == "null" {
+ return nil
+ }
+
+ var timeStr string
+ if err := json.Unmarshal(jsonBytes, &timeStr); err == nil && len(timeStr) > 0 {
+ if dur, err := durationToSeconds(timeStr); err != nil {
+ panic(err)
+ } else {
+ return &dur
+ }
+ } else {
+ var intPtr int
+ if err := json.Unmarshal(jsonBytes, &intPtr); err == nil {
+ return &intPtr
+ }
+ }
+
+ log.Println("[WARN] Unexpected unmarshalTimeRemaining value: ", jsonBytes)
+
+ return nil
+}
+
+// durationToSeconds takes a hh:mm:ss string and returns the number of seconds
+func durationToSeconds(s string) (int, error) {
+ multipliers := [3]int{60 * 60, 60, 1}
+ segs := strings.Split(s, ":")
+
+ if len(segs) > len(multipliers) {
+ return 0, fmt.Errorf("too many ':' separators in time duration: %s", s)
+ }
+
+ var d int
+
+ l := len(segs)
+
+ for i := 0; i < l; i++ {
+ m, err := strconv.Atoi(segs[i])
+ if err != nil {
+ return 0, err
+ }
+
+ d += m * multipliers[i+len(multipliers)-l]
+ }
+
+ return d, nil
+}
diff --git a/vendor/github.com/linode/linodego/internal/parseabletime/parseable_time.go b/vendor/github.com/linode/linodego/internal/parseabletime/parseable_time.go
new file mode 100644
index 000000000..c471442db
--- /dev/null
+++ b/vendor/github.com/linode/linodego/internal/parseabletime/parseable_time.go
@@ -0,0 +1,22 @@
+package parseabletime
+
+import (
+ "time"
+)
+
+const (
+ dateLayout = "2006-01-02T15:04:05"
+)
+
+type ParseableTime time.Time
+
+func (p *ParseableTime) UnmarshalJSON(b []byte) error {
+ t, err := time.Parse(`"`+dateLayout+`"`, string(b))
+ if err != nil {
+ return err
+ }
+
+ *p = ParseableTime(t)
+
+ return nil
+}
diff --git a/vendor/github.com/linode/linodego/lke_cluster_pools.go b/vendor/github.com/linode/linodego/lke_cluster_pools.go
new file mode 100644
index 000000000..a9d0e7905
--- /dev/null
+++ b/vendor/github.com/linode/linodego/lke_cluster_pools.go
@@ -0,0 +1,166 @@
+package linodego
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+)
+
+// LKELinodeStatus constants start with LKELinode and include
+// Linode API LKEClusterPool Linode Status values
+type LKELinodeStatus string
+
+// LKEClusterPoolStatus constants reflect the current status of an LKEClusterPool
+const (
+ LKELinodeReady LKELinodeStatus = "ready"
+ LKELinodeNotReady LKELinodeStatus = "not_ready"
+)
+
+// LKEClusterPoolLinode represents a LKEClusterPoolLinode object
+type LKEClusterPoolLinode struct {
+ ID string `json:"id"`
+ Status LKELinodeStatus `json:"status"`
+}
+
+// LKEClusterPool represents a LKEClusterPool object
+type LKEClusterPool struct {
+ ID int `json:"id"`
+ Count int `json:"count"`
+ Type string `json:"type"`
+ Linodes []LKEClusterPoolLinode `json:"nodes"`
+}
+
+// LKEClusterPoolCreateOptions fields are those accepted by CreateLKEClusterPool
+type LKEClusterPoolCreateOptions struct {
+ Count int `json:"count"`
+ Type string `json:"type"`
+}
+
+// LKEClusterPoolUpdateOptions fields are those accepted by UpdateLKEClusterPool
+type LKEClusterPoolUpdateOptions struct {
+ Count int `json:"count"`
+}
+
+// GetCreateOptions converts a LKEClusterPool to LKEClusterPoolCreateOptions for
+// use in CreateLKEClusterPool
+func (l LKEClusterPool) GetCreateOptions() (o LKEClusterPoolCreateOptions) {
+ o.Count = l.Count
+ return
+}
+
+// GetUpdateOptions converts a LKEClusterPool to LKEClusterPoolUpdateOptions for use in UpdateLKEClusterPool
+func (l LKEClusterPool) GetUpdateOptions() (o LKEClusterPoolUpdateOptions) {
+ o.Count = l.Count
+ return
+}
+
+// LKEClusterPoolsPagedResponse represents a paginated LKEClusterPool API response
+type LKEClusterPoolsPagedResponse struct {
+ *PageOptions
+ Data []LKEClusterPool `json:"data"`
+}
+
+// endpointWithID gets the endpoint URL for InstanceConfigs of a given Instance
+func (LKEClusterPoolsPagedResponse) endpointWithID(c *Client, id int) string {
+ endpoint, err := c.LKEClusterPools.endpointWithID(id)
+ if err != nil {
+ panic(err)
+ }
+ return endpoint
+}
+
+// appendData appends LKEClusterPools when processing paginated LKEClusterPool responses
+func (resp *LKEClusterPoolsPagedResponse) appendData(r *LKEClusterPoolsPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// ListLKEClusterPools lists LKEClusterPools
+func (c *Client) ListLKEClusterPools(ctx context.Context, clusterID int, opts *ListOptions) ([]LKEClusterPool, error) {
+ response := LKEClusterPoolsPagedResponse{}
+ err := c.listHelperWithID(ctx, &response, clusterID, opts)
+ if err != nil {
+ return nil, err
+ }
+
+ return response.Data, nil
+}
+
+// GetLKEClusterPool gets the lkeClusterPool with the provided ID
+func (c *Client) GetLKEClusterPool(ctx context.Context, clusterID, id int) (*LKEClusterPool, error) {
+ e, err := c.LKEClusterPools.endpointWithID(clusterID)
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&LKEClusterPool{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKEClusterPool), nil
+}
+
+// CreateLKEClusterPool creates a LKEClusterPool
+func (c *Client) CreateLKEClusterPool(ctx context.Context, clusterID int, createOpts LKEClusterPoolCreateOptions) (*LKEClusterPool, error) {
+ var body string
+ e, err := c.LKEClusterPools.endpointWithID(clusterID)
+ if err != nil {
+ return nil, err
+ }
+
+ req := c.R(ctx).SetResult(&LKEClusterPool{})
+
+ if bodyData, err := json.Marshal(createOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Post(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKEClusterPool), nil
+}
+
+// UpdateLKEClusterPool updates the LKEClusterPool with the specified id
+func (c *Client) UpdateLKEClusterPool(ctx context.Context, clusterID, id int, updateOpts LKEClusterPoolUpdateOptions) (*LKEClusterPool, error) {
+ var body string
+ e, err := c.LKEClusterPools.endpointWithID(clusterID)
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+
+ req := c.R(ctx).SetResult(&LKEClusterPool{})
+
+ if bodyData, err := json.Marshal(updateOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Put(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKEClusterPool), nil
+}
+
+// DeleteLKEClusterPool deletes the LKEClusterPool with the specified id
+func (c *Client) DeleteLKEClusterPool(ctx context.Context,
+ clusterID, id int) error {
+ e, err := c.LKEClusterPools.endpointWithID(clusterID)
+ if err != nil {
+ return err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+
+ _, err = coupleAPIErrors(c.R(ctx).Delete(e))
+ return err
+}
diff --git a/vendor/github.com/linode/linodego/lke_clusters.go b/vendor/github.com/linode/linodego/lke_clusters.go
new file mode 100644
index 000000000..8ca359984
--- /dev/null
+++ b/vendor/github.com/linode/linodego/lke_clusters.go
@@ -0,0 +1,279 @@
+package linodego
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "time"
+
+ "github.com/linode/linodego/internal/parseabletime"
+)
+
+// LKEClusterStatus represents the status of an LKECluster
+type LKEClusterStatus string
+
+// LKEClusterStatus enums start with LKECluster
+const (
+ LKEClusterReady LKEClusterStatus = "ready"
+ LKEClusterNotReady LKEClusterStatus = "not_ready"
+)
+
+// LKECluster represents a LKECluster object
+type LKECluster struct {
+ ID int `json:"id"`
+ Created *time.Time `json:"-"`
+ Updated *time.Time `json:"-"`
+ Label string `json:"label"`
+ Region string `json:"region"`
+ Status LKEClusterStatus `json:"status"`
+ Version string `json:"version"`
+ Tags []string `json:"tags"`
+}
+
+// LKEClusterCreateOptions fields are those accepted by CreateLKECluster
+type LKEClusterCreateOptions struct {
+ NodePools []LKEClusterPoolCreateOptions `json:"node_pools"`
+ Label string `json:"label"`
+ Region string `json:"region"`
+ Version string `json:"version"`
+ Tags []string `json:"tags,omitempty"`
+}
+
+// LKEClusterUpdateOptions fields are those accepted by UpdateLKECluster
+type LKEClusterUpdateOptions struct {
+ Label string `json:"label,omitempty"`
+}
+
+// LKEClusterAPIEndpoint fields are those returned by GetLKEClusterAPIEndpoint
+type LKEClusterAPIEndpoint struct {
+ Endpoints []string `json:"endpoints"`
+}
+
+// LKEClusterKubeconfig fields are those returned by GetLKEClusterKubeconfig
+type LKEClusterKubeconfig struct {
+ KubeConfig string `json:"kubeconfig"`
+}
+
+// LKEVersion fields are those returned by GetLKEVersion
+type LKEVersion struct {
+ ID string `json:"id"`
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *LKECluster) UnmarshalJSON(b []byte) error {
+ type Mask LKECluster
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Updated = (*time.Time)(p.Updated)
+
+ return nil
+}
+
+// GetCreateOptions converts a LKECluster to LKEClusterCreateOptions for use in CreateLKECluster
+func (i LKECluster) GetCreateOptions() (o LKEClusterCreateOptions) {
+ o.Label = i.Label
+ o.Region = i.Region
+ o.Version = i.Version
+ o.Tags = i.Tags
+ // @TODO copy NodePools?
+ return
+}
+
+// GetUpdateOptions converts a LKECluster to LKEClusterUpdateOptions for use in UpdateLKECluster
+func (i LKECluster) GetUpdateOptions() (o LKEClusterUpdateOptions) {
+ o.Label = i.Label
+ return
+}
+
+// LKEClustersPagedResponse represents a paginated LKECluster API response
+type LKEClustersPagedResponse struct {
+ *PageOptions
+ Data []LKECluster `json:"data"`
+}
+
+// LKEVersionsPagedResponse represents a paginated LKEVersion API response
+type LKEVersionsPagedResponse struct {
+ *PageOptions
+ Data []LKEVersion `json:"data"`
+}
+
+// endpoint gets the endpoint URL for LKECluster
+func (LKEClustersPagedResponse) endpoint(c *Client) string {
+ endpoint, err := c.LKEClusters.Endpoint()
+ if err != nil {
+ panic(err)
+ }
+ return endpoint
+}
+
+// appendData appends LKEClusters when processing paginated LKECluster responses
+func (resp *LKEClustersPagedResponse) appendData(r *LKEClustersPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// endpoint gets the endpoint URL for LKEVersion
+func (LKEVersionsPagedResponse) endpoint(c *Client) string {
+ endpoint, err := c.LKEVersions.Endpoint()
+ if err != nil {
+ panic(err)
+ }
+ return endpoint
+}
+
+// appendData appends LKEVersions when processing paginated LKEVersion responses
+func (resp *LKEVersionsPagedResponse) appendData(r *LKEVersionsPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// ListLKEClusters lists LKEClusters
+func (c *Client) ListLKEClusters(ctx context.Context, opts *ListOptions) ([]LKECluster, error) {
+ response := LKEClustersPagedResponse{}
+ err := c.listHelper(ctx, &response, opts)
+ if err != nil {
+ return nil, err
+ }
+ return response.Data, nil
+}
+
+// GetLKECluster gets the lkeCluster with the provided ID
+func (c *Client) GetLKECluster(ctx context.Context, id int) (*LKECluster, error) {
+ e, err := c.LKEClusters.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&LKECluster{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKECluster), nil
+}
+
+// CreateLKECluster creates a LKECluster
+func (c *Client) CreateLKECluster(ctx context.Context, createOpts LKEClusterCreateOptions) (*LKECluster, error) {
+ var body string
+ e, err := c.LKEClusters.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+
+ req := c.R(ctx).SetResult(&LKECluster{})
+
+ if bodyData, err := json.Marshal(createOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Post(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKECluster), nil
+}
+
+// UpdateLKECluster updates the LKECluster with the specified id
+func (c *Client) UpdateLKECluster(ctx context.Context, id int, updateOpts LKEClusterUpdateOptions) (*LKECluster, error) {
+ var body string
+ e, err := c.LKEClusters.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+
+ req := c.R(ctx).SetResult(&LKECluster{})
+
+ if bodyData, err := json.Marshal(updateOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Put(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKECluster), nil
+}
+
+// DeleteLKECluster deletes the LKECluster with the specified id
+func (c *Client) DeleteLKECluster(ctx context.Context, id int) error {
+ e, err := c.LKEClusters.Endpoint()
+ if err != nil {
+ return err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+
+ _, err = coupleAPIErrors(c.R(ctx).Delete(e))
+ return err
+}
+
+// GetLKEClusterAPIEndpoint gets the API Endpoint for the LKE Cluster specified
+func (c *Client) GetLKEClusterAPIEndpoint(ctx context.Context, id int) (*LKEClusterAPIEndpoint, error) {
+ e, err := c.LKEClusters.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d/api-endpoint", e, id)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&LKEClusterAPIEndpoint{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKEClusterAPIEndpoint), nil
+}
+
+// GetLKEClusterKubeconfig gets the Kubeconfig for the LKE Cluster specified
+func (c *Client) GetLKEClusterKubeconfig(ctx context.Context, id int) (*LKEClusterKubeconfig, error) {
+ e, err := c.LKEClusters.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d/kubeconfig", e, id)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&LKEClusterKubeconfig{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKEClusterKubeconfig), nil
+}
+
+// GetLKEVersion gets details about a specific LKE Version
+func (c *Client) GetLKEVersion(ctx context.Context, version string) (*LKEVersion, error) {
+ e, err := c.LKEVersions.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%s", e, version)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&LKEVersion{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*LKEVersion), nil
+}
+
+// ListLKEVersions lists the Kubernetes versions available through LKE
+func (c *Client) ListLKEVersions(ctx context.Context, opts *ListOptions) ([]LKEVersion, error) {
+ response := LKEVersionsPagedResponse{}
+ err := c.listHelper(ctx, &response, opts)
+ if err != nil {
+ return nil, err
+ }
+ return response.Data, nil
+}
diff --git a/vendor/github.com/linode/linodego/longview.go b/vendor/github.com/linode/linodego/longview.go
index 524af6776..3fc1ecdfe 100644
--- a/vendor/github.com/linode/linodego/longview.go
+++ b/vendor/github.com/linode/linodego/longview.go
@@ -36,22 +36,13 @@ func (resp *LongviewClientsPagedResponse) appendData(r *LongviewClientsPagedResp
func (c *Client) ListLongviewClients(ctx context.Context, opts *ListOptions) ([]LongviewClient, error) {
response := LongviewClientsPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *LongviewClient) fixDates() *LongviewClient {
- // v.Created, _ = parseDates(v.CreatedStr)
- // v.Updated, _ = parseDates(v.UpdatedStr)
- return v
-}
-
// GetLongviewClient gets the template with the provided ID
func (c *Client) GetLongviewClient(ctx context.Context, id string) (*LongviewClient, error) {
e, err := c.LongviewClients.Endpoint()
@@ -63,5 +54,5 @@ func (c *Client) GetLongviewClient(ctx context.Context, id string) (*LongviewCli
if err != nil {
return nil, err
}
- return r.Result().(*LongviewClient).fixDates(), nil
+ return r.Result().(*LongviewClient), nil
}
diff --git a/vendor/github.com/linode/linodego/longview_subscriptions.go b/vendor/github.com/linode/linodego/longview_subscriptions.go
index 253316599..a351bddc9 100644
--- a/vendor/github.com/linode/linodego/longview_subscriptions.go
+++ b/vendor/github.com/linode/linodego/longview_subscriptions.go
@@ -39,22 +39,13 @@ func (resp *LongviewSubscriptionsPagedResponse) appendData(r *LongviewSubscripti
func (c *Client) ListLongviewSubscriptions(ctx context.Context, opts *ListOptions) ([]LongviewSubscription, error) {
response := LongviewSubscriptionsPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *LongviewSubscription) fixDates() *LongviewSubscription {
- // v.Created, _ = parseDates(v.CreatedStr)
- // v.Updated, _ = parseDates(v.UpdatedStr)
- return v
-}
-
// GetLongviewSubscription gets the template with the provided ID
func (c *Client) GetLongviewSubscription(ctx context.Context, id string) (*LongviewSubscription, error) {
e, err := c.LongviewSubscriptions.Endpoint()
@@ -66,5 +57,5 @@ func (c *Client) GetLongviewSubscription(ctx context.Context, id string) (*Longv
if err != nil {
return nil, err
}
- return r.Result().(*LongviewSubscription).fixDates(), nil
+ return r.Result().(*LongviewSubscription), nil
}
diff --git a/vendor/github.com/linode/linodego/nodebalancer.go b/vendor/github.com/linode/linodego/nodebalancer.go
index a8d797d24..1e77c7c67 100644
--- a/vendor/github.com/linode/linodego/nodebalancer.go
+++ b/vendor/github.com/linode/linodego/nodebalancer.go
@@ -5,12 +5,12 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// NodeBalancer represents a NodeBalancer object
type NodeBalancer struct {
- CreatedStr string `json:"created"`
- UpdatedStr string `json:"updated"`
// This NodeBalancer's unique ID.
ID int `json:"id"`
// This NodeBalancer's label. These must be unique on your Account.
@@ -61,6 +61,28 @@ type NodeBalancerUpdateOptions struct {
Tags *[]string `json:"tags,omitempty"`
}
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *NodeBalancer) UnmarshalJSON(b []byte) error {
+ type Mask NodeBalancer
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Updated = (*time.Time)(p.Updated)
+
+ return nil
+}
+
// GetCreateOptions converts a NodeBalancer to NodeBalancerCreateOptions for use in CreateNodeBalancer
func (i NodeBalancer) GetCreateOptions() NodeBalancerCreateOptions {
return NodeBalancerCreateOptions{
@@ -108,13 +130,6 @@ func (c *Client) ListNodeBalancers(ctx context.Context, opts *ListOptions) ([]No
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (i *NodeBalancer) fixDates() *NodeBalancer {
- i.Created, _ = parseDates(i.CreatedStr)
- i.Updated, _ = parseDates(i.UpdatedStr)
- return i
-}
-
// GetNodeBalancer gets the NodeBalancer with the provided ID
func (c *Client) GetNodeBalancer(ctx context.Context, id int) (*NodeBalancer, error) {
e, err := c.NodeBalancers.Endpoint()
@@ -128,7 +143,7 @@ func (c *Client) GetNodeBalancer(ctx context.Context, id int) (*NodeBalancer, er
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancer).fixDates(), nil
+ return r.Result().(*NodeBalancer), nil
}
// CreateNodeBalancer creates a NodeBalancer
@@ -155,7 +170,7 @@ func (c *Client) CreateNodeBalancer(ctx context.Context, nodebalancer NodeBalanc
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancer).fixDates(), nil
+ return r.Result().(*NodeBalancer), nil
}
// UpdateNodeBalancer updates the NodeBalancer with the specified id
@@ -182,7 +197,7 @@ func (c *Client) UpdateNodeBalancer(ctx context.Context, id int, updateOpts Node
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancer).fixDates(), nil
+ return r.Result().(*NodeBalancer), nil
}
// DeleteNodeBalancer deletes the NodeBalancer with the specified id
diff --git a/vendor/github.com/linode/linodego/nodebalancer_config_nodes.go b/vendor/github.com/linode/linodego/nodebalancer_config_nodes.go
index e1ca55cb5..e97cc3264 100644
--- a/vendor/github.com/linode/linodego/nodebalancer_config_nodes.go
+++ b/vendor/github.com/linode/linodego/nodebalancer_config_nodes.go
@@ -30,6 +30,9 @@ var (
// ModeDrain is the NodeMode indicating a NodeBalancer Node is not receiving new traffic, but may continue receiving traffic from pinned connections
ModeDrain NodeMode = "drain"
+
+ // ModeBackup is the NodeMode indicating a NodeBalancer Node will only receive traffic if all "accept" Nodes are down
+ ModeBackup NodeMode = "backup"
)
// NodeBalancerNodeCreateOptions fields are those accepted by CreateNodeBalancerNode
@@ -92,20 +95,13 @@ func (resp *NodeBalancerNodesPagedResponse) appendData(r *NodeBalancerNodesPaged
func (c *Client) ListNodeBalancerNodes(ctx context.Context, nodebalancerID int, configID int, opts *ListOptions) ([]NodeBalancerNode, error) {
response := NodeBalancerNodesPagedResponse{}
err := c.listHelperWithTwoIDs(ctx, &response, nodebalancerID, configID, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (i *NodeBalancerNode) fixDates() *NodeBalancerNode {
- return i
-}
-
// GetNodeBalancerNode gets the template with the provided ID
func (c *Client) GetNodeBalancerNode(ctx context.Context, nodebalancerID int, configID int, nodeID int) (*NodeBalancerNode, error) {
e, err := c.NodeBalancerNodes.endpointWithID(nodebalancerID, configID)
@@ -117,7 +113,7 @@ func (c *Client) GetNodeBalancerNode(ctx context.Context, nodebalancerID int, co
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancerNode).fixDates(), nil
+ return r.Result().(*NodeBalancerNode), nil
}
// CreateNodeBalancerNode creates a NodeBalancerNode
@@ -143,7 +139,7 @@ func (c *Client) CreateNodeBalancerNode(ctx context.Context, nodebalancerID int,
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancerNode).fixDates(), nil
+ return r.Result().(*NodeBalancerNode), nil
}
// UpdateNodeBalancerNode updates the NodeBalancerNode with the specified id
@@ -170,7 +166,7 @@ func (c *Client) UpdateNodeBalancerNode(ctx context.Context, nodebalancerID int,
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancerNode).fixDates(), nil
+ return r.Result().(*NodeBalancerNode), nil
}
// DeleteNodeBalancerNode deletes the NodeBalancerNode with the specified id
diff --git a/vendor/github.com/linode/linodego/nodebalancer_configs.go b/vendor/github.com/linode/linodego/nodebalancer_configs.go
index aa87019c5..75954bf87 100644
--- a/vendor/github.com/linode/linodego/nodebalancer_configs.go
+++ b/vendor/github.com/linode/linodego/nodebalancer_configs.go
@@ -211,20 +211,13 @@ func (resp *NodeBalancerConfigsPagedResponse) appendData(r *NodeBalancerConfigsP
func (c *Client) ListNodeBalancerConfigs(ctx context.Context, nodebalancerID int, opts *ListOptions) ([]NodeBalancerConfig, error) {
response := NodeBalancerConfigsPagedResponse{}
err := c.listHelperWithID(ctx, &response, nodebalancerID, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (i *NodeBalancerConfig) fixDates() *NodeBalancerConfig {
- return i
-}
-
// GetNodeBalancerConfig gets the template with the provided ID
func (c *Client) GetNodeBalancerConfig(ctx context.Context, nodebalancerID int, configID int) (*NodeBalancerConfig, error) {
e, err := c.NodeBalancerConfigs.endpointWithID(nodebalancerID)
@@ -236,7 +229,7 @@ func (c *Client) GetNodeBalancerConfig(ctx context.Context, nodebalancerID int,
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancerConfig).fixDates(), nil
+ return r.Result().(*NodeBalancerConfig), nil
}
// CreateNodeBalancerConfig creates a NodeBalancerConfig
@@ -264,7 +257,7 @@ func (c *Client) CreateNodeBalancerConfig(ctx context.Context, nodebalancerID in
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancerConfig).fixDates(), nil
+ return r.Result().(*NodeBalancerConfig), nil
}
// UpdateNodeBalancerConfig updates the NodeBalancerConfig with the specified id
@@ -291,7 +284,7 @@ func (c *Client) UpdateNodeBalancerConfig(ctx context.Context, nodebalancerID in
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancerConfig).fixDates(), nil
+ return r.Result().(*NodeBalancerConfig), nil
}
// DeleteNodeBalancerConfig deletes the NodeBalancerConfig with the specified id
@@ -330,5 +323,5 @@ func (c *Client) RebuildNodeBalancerConfig(ctx context.Context, nodeBalancerID i
if err != nil {
return nil, err
}
- return r.Result().(*NodeBalancerConfig).fixDates(), nil
+ return r.Result().(*NodeBalancerConfig), nil
}
diff --git a/vendor/github.com/linode/linodego/nodebalancer_stats.go b/vendor/github.com/linode/linodego/nodebalancer_stats.go
new file mode 100644
index 000000000..288308109
--- /dev/null
+++ b/vendor/github.com/linode/linodego/nodebalancer_stats.go
@@ -0,0 +1,36 @@
+package linodego
+
+import (
+ "context"
+)
+
+// NodeBalancerStats represents a nodebalancer stats object
+type NodeBalancerStats struct {
+ Title string `json:"title"`
+ Data NodeBalancerStatsData `json:"data"`
+}
+
+// NodeBalancerStatsData represents a nodebalancer stats data object
+type NodeBalancerStatsData struct {
+ Connections [][]float64 `json:"connections"`
+ Traffic StatsTraffic `json:"traffic"`
+}
+
+// StatsTraffic represents a Traffic stats object
+type StatsTraffic struct {
+ In [][]float64 `json:"in"`
+ Out [][]float64 `json:"out"`
+}
+
+// GetNodeBalancerStats gets the template with the provided ID
+func (c *Client) GetNodeBalancerStats(ctx context.Context, linodeID int) (*NodeBalancerStats, error) {
+ e, err := c.NodeBalancerStats.endpointWithID(linodeID)
+ if err != nil {
+ return nil, err
+ }
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&NodeBalancerStats{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*NodeBalancerStats), nil
+}
diff --git a/vendor/github.com/linode/linodego/object_storage_buckets.go b/vendor/github.com/linode/linodego/object_storage_buckets.go
new file mode 100644
index 000000000..505748d2c
--- /dev/null
+++ b/vendor/github.com/linode/linodego/object_storage_buckets.go
@@ -0,0 +1,128 @@
+package linodego
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "time"
+
+ "github.com/linode/linodego/internal/parseabletime"
+)
+
+// ObjectStorageBucket represents a ObjectStorage object
+type ObjectStorageBucket struct {
+ Label string `json:"label"`
+ Cluster string `json:"cluster"`
+
+ Created *time.Time `json:"-"`
+ Hostname string `json:"hostname"`
+}
+
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *ObjectStorageBucket) UnmarshalJSON(b []byte) error {
+ type Mask ObjectStorageBucket
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+
+ return nil
+}
+
+// ObjectStorageBucketCreateOptions fields are those accepted by CreateObjectStorageBucket
+type ObjectStorageBucketCreateOptions struct {
+ Cluster string `json:"cluster"`
+ Label string `json:"label"`
+}
+
+// ObjectStorageBucketsPagedResponse represents a paginated ObjectStorageBucket API response
+type ObjectStorageBucketsPagedResponse struct {
+ *PageOptions
+ Data []ObjectStorageBucket `json:"data"`
+}
+
+// endpoint gets the endpoint URL for ObjectStorageBucket
+func (ObjectStorageBucketsPagedResponse) endpoint(c *Client) string {
+ endpoint, err := c.ObjectStorageBuckets.Endpoint()
+ if err != nil {
+ panic(err)
+ }
+ return endpoint
+}
+
+// appendData appends ObjectStorageBuckets when processing paginated ObjectStorageBucket responses
+func (resp *ObjectStorageBucketsPagedResponse) appendData(r *ObjectStorageBucketsPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// ListObjectStorageBuckets lists ObjectStorageBuckets
+func (c *Client) ListObjectStorageBuckets(ctx context.Context, opts *ListOptions) ([]ObjectStorageBucket, error) {
+ response := ObjectStorageBucketsPagedResponse{}
+ err := c.listHelper(ctx, &response, opts)
+
+ if err != nil {
+ return nil, err
+ }
+ return response.Data, nil
+}
+
+// GetObjectStorageBucket gets the ObjectStorageBucket with the provided label
+func (c *Client) GetObjectStorageBucket(ctx context.Context, clusterID, label string) (*ObjectStorageBucket, error) {
+ e, err := c.ObjectStorageBuckets.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%s/%s", e, clusterID, label)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&ObjectStorageBucket{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*ObjectStorageBucket), nil
+}
+
+// CreateObjectStorageBucket creates an ObjectStorageBucket
+func (c *Client) CreateObjectStorageBucket(ctx context.Context, createOpts ObjectStorageBucketCreateOptions) (*ObjectStorageBucket, error) {
+ var body string
+ e, err := c.ObjectStorageBuckets.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+
+ req := c.R(ctx).SetResult(&ObjectStorageBucket{})
+
+ if bodyData, err := json.Marshal(createOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Post(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*ObjectStorageBucket), nil
+}
+
+// DeleteObjectStorageBucket deletes the ObjectStorageBucket with the specified label
+func (c *Client) DeleteObjectStorageBucket(ctx context.Context, clusterID, label string) error {
+ e, err := c.ObjectStorageBuckets.Endpoint()
+ if err != nil {
+ return err
+ }
+ e = fmt.Sprintf("%s/%s/%s", e, clusterID, label)
+
+ _, err = coupleAPIErrors(c.R(ctx).Delete(e))
+ return err
+}
diff --git a/vendor/github.com/linode/linodego/object_storage_clusters.go b/vendor/github.com/linode/linodego/object_storage_clusters.go
new file mode 100644
index 000000000..efc79acae
--- /dev/null
+++ b/vendor/github.com/linode/linodego/object_storage_clusters.go
@@ -0,0 +1,59 @@
+package linodego
+
+import (
+ "context"
+ "fmt"
+)
+
+// ObjectStorageCluster represents a linode object storage cluster object
+type ObjectStorageCluster struct {
+ ID string `json:"id"`
+ Domain string `json:"domain"`
+ Status string `json:"status"`
+ Region string `json:"region"`
+ StaticSiteDomain string `json:"static_site_domain"`
+}
+
+// ObjectStorageClustersPagedResponse represents a linode API response for listing
+type ObjectStorageClustersPagedResponse struct {
+ *PageOptions
+ Data []ObjectStorageCluster `json:"data"`
+}
+
+// endpoint gets the endpoint URL for ObjectStorageCluster
+func (ObjectStorageClustersPagedResponse) endpoint(c *Client) string {
+ endpoint, err := c.ObjectStorageClusters.Endpoint()
+ if err != nil {
+ panic(err)
+ }
+ return endpoint
+}
+
+// appendData appends ObjectStorageClusters when processing paginated ObjectStorageCluster responses
+func (resp *ObjectStorageClustersPagedResponse) appendData(r *ObjectStorageClustersPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// ListObjectStorageClusters lists ObjectStorageClusters
+func (c *Client) ListObjectStorageClusters(ctx context.Context, opts *ListOptions) ([]ObjectStorageCluster, error) {
+ response := ObjectStorageClustersPagedResponse{}
+ err := c.listHelper(ctx, &response, opts)
+ if err != nil {
+ return nil, err
+ }
+ return response.Data, nil
+}
+
+// GetObjectStorageCluster gets the template with the provided ID
+func (c *Client) GetObjectStorageCluster(ctx context.Context, id string) (*ObjectStorageCluster, error) {
+ e, err := c.ObjectStorageClusters.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%s", e, id)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&ObjectStorageCluster{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*ObjectStorageCluster), nil
+}
diff --git a/vendor/github.com/linode/linodego/object_storage_keys.go b/vendor/github.com/linode/linodego/object_storage_keys.go
new file mode 100644
index 000000000..9402963ff
--- /dev/null
+++ b/vendor/github.com/linode/linodego/object_storage_keys.go
@@ -0,0 +1,134 @@
+package linodego
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+)
+
+// ObjectStorageKey represents a linode object storage key object
+type ObjectStorageKey struct {
+ ID int `json:"id"`
+ Label string `json:"label"`
+ AccessKey string `json:"access_key"`
+ SecretKey string `json:"secret_key"`
+}
+
+// ObjectStorageKeyCreateOptions fields are those accepted by CreateObjectStorageKey
+type ObjectStorageKeyCreateOptions struct {
+ Label string `json:"label"`
+}
+
+// ObjectStorageKeyUpdateOptions fields are those accepted by UpdateObjectStorageKey
+type ObjectStorageKeyUpdateOptions struct {
+ Label string `json:"label"`
+}
+
+// ObjectStorageKeysPagedResponse represents a linode API response for listing
+type ObjectStorageKeysPagedResponse struct {
+ *PageOptions
+ Data []ObjectStorageKey `json:"data"`
+}
+
+// endpoint gets the endpoint URL for Object Storage keys
+func (ObjectStorageKeysPagedResponse) endpoint(c *Client) string {
+ endpoint, err := c.ObjectStorageKeys.Endpoint()
+ if err != nil {
+ panic(err)
+ }
+ return endpoint
+}
+
+// appendData appends ObjectStorageKeys when processing paginated Objkey responses
+func (resp *ObjectStorageKeysPagedResponse) appendData(r *ObjectStorageKeysPagedResponse) {
+ resp.Data = append(resp.Data, r.Data...)
+}
+
+// ListObjectStorageKeys lists ObjectStorageKeys
+func (c *Client) ListObjectStorageKeys(ctx context.Context, opts *ListOptions) ([]ObjectStorageKey, error) {
+ response := ObjectStorageKeysPagedResponse{}
+ err := c.listHelper(ctx, &response, opts)
+ if err != nil {
+ return nil, err
+ }
+ return response.Data, nil
+}
+
+// CreateObjectStorageKey creates a ObjectStorageKey
+func (c *Client) CreateObjectStorageKey(ctx context.Context, createOpts ObjectStorageKeyCreateOptions) (*ObjectStorageKey, error) {
+ var body string
+ e, err := c.ObjectStorageKeys.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+
+ req := c.R(ctx).SetResult(&ObjectStorageKey{})
+
+ if bodyData, err := json.Marshal(createOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Post(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*ObjectStorageKey), nil
+}
+
+// GetObjectStorageKey gets the object storage key with the provided ID
+func (c *Client) GetObjectStorageKey(ctx context.Context, id int) (*ObjectStorageKey, error) {
+ e, err := c.ObjectStorageKeys.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+ r, err := coupleAPIErrors(c.R(ctx).SetResult(&ObjectStorageKey{}).Get(e))
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*ObjectStorageKey), nil
+}
+
+// UpdateObjectStorageKey updates the object storage key with the specified id
+func (c *Client) UpdateObjectStorageKey(ctx context.Context, id int, updateOpts ObjectStorageKeyUpdateOptions) (*ObjectStorageKey, error) {
+ var body string
+ e, err := c.ObjectStorageKeys.Endpoint()
+ if err != nil {
+ return nil, err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+
+ req := c.R(ctx).SetResult(&ObjectStorageKey{})
+
+ if bodyData, err := json.Marshal(updateOpts); err == nil {
+ body = string(bodyData)
+ } else {
+ return nil, NewError(err)
+ }
+
+ r, err := coupleAPIErrors(req.
+ SetBody(body).
+ Put(e))
+
+ if err != nil {
+ return nil, err
+ }
+ return r.Result().(*ObjectStorageKey), nil
+}
+
+// DeleteObjectStorageKey deletes the ObjectStorageKey with the specified id
+func (c *Client) DeleteObjectStorageKey(ctx context.Context, id int) error {
+ e, err := c.ObjectStorageKeys.Endpoint()
+ if err != nil {
+ return err
+ }
+ e = fmt.Sprintf("%s/%d", e, id)
+
+ _, err = coupleAPIErrors(c.R(ctx).Delete(e))
+ return err
+}
diff --git a/vendor/github.com/linode/linodego/pagination.go b/vendor/github.com/linode/linodego/pagination.go
index bfe6de3b7..a07997288 100644
--- a/vendor/github.com/linode/linodego/pagination.go
+++ b/vendor/github.com/linode/linodego/pagination.go
@@ -10,7 +10,7 @@ import (
"log"
"strconv"
- "gopkg.in/resty.v1"
+ "github.com/go-resty/resty/v2"
)
// PageOptions are the pagination parameters for List endpoints
@@ -28,9 +28,8 @@ type ListOptions struct {
// NewListOptions simplified construction of ListOptions using only
// the two writable properties, Page and Filter
-func NewListOptions(Page int, Filter string) *ListOptions {
- return &ListOptions{PageOptions: &PageOptions{Page: Page}, Filter: Filter}
-
+func NewListOptions(page int, filter string) *ListOptions {
+ return &ListOptions{PageOptions: &PageOptions{Page: page}, Filter: filter}
}
// listHelper abstracts fetching and pagination for GET endpoints that
@@ -38,6 +37,7 @@ func NewListOptions(Page int, Filter string) *ListOptions {
// When opts (or opts.Page) is nil, all pages will be fetched and
// returned in a single (endpoint-specific)PagedResponse
// opts.results and opts.pages will be updated from the API response
+// nolint
func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOptions) error {
req := c.R(ctx)
if opts != nil && opts.PageOptions != nil && opts.Page > 0 {
@@ -102,7 +102,7 @@ func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOption
if r, err = coupleAPIErrors(req.SetResult(DomainsPagedResponse{}).Get(v.endpoint(c))); err == nil {
response, ok := r.Result().(*DomainsPagedResponse)
if !ok {
- return fmt.Errorf("Response is not a *DomainsPagedResponse")
+ return fmt.Errorf("response is not a *DomainsPagedResponse")
}
pages = response.Pages
results = response.Results
@@ -114,6 +114,24 @@ func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOption
results = r.Result().(*EventsPagedResponse).Results
v.appendData(r.Result().(*EventsPagedResponse))
}
+ case *FirewallsPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(FirewallsPagedResponse{}).Get(v.endpoint(c))); err == nil {
+ pages = r.Result().(*FirewallsPagedResponse).Pages
+ results = r.Result().(*FirewallsPagedResponse).Results
+ v.appendData(r.Result().(*FirewallsPagedResponse))
+ }
+ case *LKEClustersPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(LKEClustersPagedResponse{}).Get(v.endpoint(c))); err == nil {
+ pages = r.Result().(*LKEClustersPagedResponse).Pages
+ results = r.Result().(*LKEClustersPagedResponse).Results
+ v.appendData(r.Result().(*LKEClustersPagedResponse))
+ }
+ case *LKEVersionsPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(LKEVersionsPagedResponse{}).Get(v.endpoint(c))); err == nil {
+ pages = r.Result().(*LKEVersionsPagedResponse).Pages
+ results = r.Result().(*LKEVersionsPagedResponse).Results
+ v.appendData(r.Result().(*LKEVersionsPagedResponse))
+ }
case *LongviewSubscriptionsPagedResponse:
if r, err = coupleAPIErrors(req.SetResult(LongviewSubscriptionsPagedResponse{}).Get(v.endpoint(c))); err == nil {
pages = r.Result().(*LongviewSubscriptionsPagedResponse).Pages
@@ -149,7 +167,7 @@ func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOption
if r, err = coupleAPIErrors(req.SetResult(SSHKeysPagedResponse{}).Get(v.endpoint(c))); err == nil {
response, ok := r.Result().(*SSHKeysPagedResponse)
if !ok {
- return fmt.Errorf("Response is not a *SSHKeysPagedResponse")
+ return fmt.Errorf("response is not a *SSHKeysPagedResponse")
}
pages = response.Pages
results = response.Results
@@ -173,6 +191,18 @@ func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOption
results = r.Result().(*NotificationsPagedResponse).Results
v.appendData(r.Result().(*NotificationsPagedResponse))
}
+ case *OAuthClientsPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(OAuthClientsPagedResponse{}).Get(v.endpoint(c))); err == nil {
+ pages = r.Result().(*OAuthClientsPagedResponse).Pages
+ results = r.Result().(*OAuthClientsPagedResponse).Results
+ v.appendData(r.Result().(*OAuthClientsPagedResponse))
+ }
+ case *PaymentsPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(PaymentsPagedResponse{}).Get(v.endpoint(c))); err == nil {
+ pages = r.Result().(*PaymentsPagedResponse).Pages
+ results = r.Result().(*PaymentsPagedResponse).Results
+ v.appendData(r.Result().(*PaymentsPagedResponse))
+ }
case *NodeBalancersPagedResponse:
if r, err = coupleAPIErrors(req.SetResult(NodeBalancersPagedResponse{}).Get(v.endpoint(c))); err == nil {
pages = r.Result().(*NodeBalancersPagedResponse).Pages
@@ -197,9 +227,25 @@ func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOption
results = r.Result().(*UsersPagedResponse).Results
v.appendData(r.Result().(*UsersPagedResponse))
}
+ case *ObjectStorageBucketsPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(ObjectStorageBucketsPagedResponse{}).Get(v.endpoint(c))); err == nil {
+ pages = r.Result().(*ObjectStorageBucketsPagedResponse).Pages
+ results = r.Result().(*ObjectStorageBucketsPagedResponse).Results
+ v.appendData(r.Result().(*ObjectStorageBucketsPagedResponse))
+ }
+ case *ObjectStorageClustersPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(ObjectStorageClustersPagedResponse{}).Get(v.endpoint(c))); err == nil {
+ pages = r.Result().(*ObjectStorageClustersPagedResponse).Pages
+ results = r.Result().(*ObjectStorageClustersPagedResponse).Results
+ v.appendData(r.Result().(*ObjectStorageClustersPagedResponse))
+ }
+ case *ObjectStorageKeysPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(ObjectStorageKeysPagedResponse{}).Get(v.endpoint(c))); err == nil {
+ pages = r.Result().(*ObjectStorageKeysPagedResponse).Pages
+ results = r.Result().(*ObjectStorageKeysPagedResponse).Results
+ v.appendData(r.Result().(*ObjectStorageKeysPagedResponse))
+ }
/**
- case AccountOauthClientsPagedResponse:
- case AccountPaymentsPagedResponse:
case ProfileAppsPagedResponse:
case ProfileWhitelistPagedResponse:
case ManagedContactsPagedResponse:
@@ -217,7 +263,7 @@ func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOption
}
if opts == nil {
- for page := 2; page <= pages; page = page + 1 {
+ for page := 2; page <= pages; page++ {
if err := c.listHelper(ctx, i, &ListOptions{PageOptions: &PageOptions{Page: page}}); err != nil {
return err
}
@@ -228,7 +274,7 @@ func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOption
}
if opts.Page == 0 {
- for page := 2; page <= pages; page = page + 1 {
+ for page := 2; page <= pages; page++ {
opts.Page = page
if err := c.listHelper(ctx, i, opts); err != nil {
return err
@@ -247,6 +293,7 @@ func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOption
// When opts (or opts.Page) is nil, all pages will be fetched and
// returned in a single (endpoint-specific)PagedResponse
// opts.results and opts.pages will be updated from the API response
+// nolint
func (c *Client) listHelperWithID(ctx context.Context, i interface{}, idRaw interface{}, opts *ListOptions) error {
req := c.R(ctx)
if opts != nil && opts.Page > 0 {
@@ -267,17 +314,11 @@ func (c *Client) listHelperWithID(ctx context.Context, i interface{}, idRaw inte
}
switch v := i.(type) {
- case *InvoiceItemsPagedResponse:
- if r, err = coupleAPIErrors(req.SetResult(InvoiceItemsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil {
- pages = r.Result().(*InvoiceItemsPagedResponse).Pages
- results = r.Result().(*InvoiceItemsPagedResponse).Results
- v.appendData(r.Result().(*InvoiceItemsPagedResponse))
- }
case *DomainRecordsPagedResponse:
if r, err = coupleAPIErrors(req.SetResult(DomainRecordsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil {
response, ok := r.Result().(*DomainRecordsPagedResponse)
if !ok {
- return fmt.Errorf("Response is not a *DomainRecordsPagedResponse")
+ return fmt.Errorf("response is not a *DomainRecordsPagedResponse")
}
pages = response.Pages
results = response.Results
@@ -295,18 +336,30 @@ func (c *Client) listHelperWithID(ctx context.Context, i interface{}, idRaw inte
results = r.Result().(*InstanceDisksPagedResponse).Results
v.appendData(r.Result().(*InstanceDisksPagedResponse))
}
- case *NodeBalancerConfigsPagedResponse:
- if r, err = coupleAPIErrors(req.SetResult(NodeBalancerConfigsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil {
- pages = r.Result().(*NodeBalancerConfigsPagedResponse).Pages
- results = r.Result().(*NodeBalancerConfigsPagedResponse).Results
- v.appendData(r.Result().(*NodeBalancerConfigsPagedResponse))
- }
case *InstanceVolumesPagedResponse:
if r, err = coupleAPIErrors(req.SetResult(InstanceVolumesPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil {
pages = r.Result().(*InstanceVolumesPagedResponse).Pages
results = r.Result().(*InstanceVolumesPagedResponse).Results
v.appendData(r.Result().(*InstanceVolumesPagedResponse))
}
+ case *InvoiceItemsPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(InvoiceItemsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil {
+ pages = r.Result().(*InvoiceItemsPagedResponse).Pages
+ results = r.Result().(*InvoiceItemsPagedResponse).Results
+ v.appendData(r.Result().(*InvoiceItemsPagedResponse))
+ }
+ case *LKEClusterPoolsPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(LKEClusterPoolsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil {
+ pages = r.Result().(*LKEClusterPoolsPagedResponse).Pages
+ results = r.Result().(*LKEClusterPoolsPagedResponse).Results
+ v.appendData(r.Result().(*LKEClusterPoolsPagedResponse))
+ }
+ case *NodeBalancerConfigsPagedResponse:
+ if r, err = coupleAPIErrors(req.SetResult(NodeBalancerConfigsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil {
+ pages = r.Result().(*NodeBalancerConfigsPagedResponse).Pages
+ results = r.Result().(*NodeBalancerConfigsPagedResponse).Results
+ v.appendData(r.Result().(*NodeBalancerConfigsPagedResponse))
+ }
case *TaggedObjectsPagedResponse:
idStr := idRaw.(string)
@@ -342,7 +395,7 @@ func (c *Client) listHelperWithID(ctx context.Context, i interface{}, idRaw inte
}
if opts == nil {
- for page := 2; page <= pages; page = page + 1 {
+ for page := 2; page <= pages; page++ {
if err := c.listHelperWithID(ctx, i, id, &ListOptions{PageOptions: &PageOptions{Page: page}}); err != nil {
return err
}
@@ -352,7 +405,7 @@ func (c *Client) listHelperWithID(ctx context.Context, i interface{}, idRaw inte
opts.PageOptions = &PageOptions{}
}
if opts.Page == 0 {
- for page := 2; page <= pages; page = page + 1 {
+ for page := 2; page <= pages; page++ {
opts.Page = page
if err := c.listHelperWithID(ctx, i, id, opts); err != nil {
return err
@@ -373,6 +426,7 @@ func (c *Client) listHelperWithID(ctx context.Context, i interface{}, idRaw inte
// opts.results and opts.pages will be updated from the API response
func (c *Client) listHelperWithTwoIDs(ctx context.Context, i interface{}, firstID, secondID int, opts *ListOptions) error {
req := c.R(ctx)
+
if opts != nil && opts.Page > 0 {
req.SetQueryParam("page", strconv.Itoa(opts.Page))
}
@@ -395,7 +449,6 @@ func (c *Client) listHelperWithTwoIDs(ctx context.Context, i interface{}, firstI
results = r.Result().(*NodeBalancerNodesPagedResponse).Results
v.appendData(r.Result().(*NodeBalancerNodesPagedResponse))
}
-
default:
log.Fatalf("Unknown listHelperWithTwoIDs interface{} %T used", i)
}
@@ -405,7 +458,7 @@ func (c *Client) listHelperWithTwoIDs(ctx context.Context, i interface{}, firstI
}
if opts == nil {
- for page := 2; page <= pages; page = page + 1 {
+ for page := 2; page <= pages; page++ {
if err := c.listHelper(ctx, i, &ListOptions{PageOptions: &PageOptions{Page: page}}); err != nil {
return err
}
@@ -415,7 +468,7 @@ func (c *Client) listHelperWithTwoIDs(ctx context.Context, i interface{}, firstI
opts.PageOptions = &PageOptions{}
}
if opts.Page == 0 {
- for page := 2; page <= pages; page = page + 1 {
+ for page := 2; page <= pages; page++ {
opts.Page = page
if err := c.listHelperWithTwoIDs(ctx, i, firstID, secondID, opts); err != nil {
return err
diff --git a/vendor/github.com/linode/linodego/profile.go b/vendor/github.com/linode/linodego/profile.go
index 3d29b2a52..36c50b0e2 100644
--- a/vendor/github.com/linode/linodego/profile.go
+++ b/vendor/github.com/linode/linodego/profile.go
@@ -76,7 +76,7 @@ func (i Profile) GetUpdateOptions() (o ProfileUpdateOptions) {
return
}
-// GetProfile gets the profile with the provided ID
+// GetProfile returns the Profile of the authenticated user
func (c *Client) GetProfile(ctx context.Context) (*Profile, error) {
e, err := c.Profile.Endpoint()
if err != nil {
diff --git a/vendor/github.com/linode/linodego/profile_sshkeys.go b/vendor/github.com/linode/linodego/profile_sshkeys.go
index 2ec4d4f71..cb67ceb3e 100644
--- a/vendor/github.com/linode/linodego/profile_sshkeys.go
+++ b/vendor/github.com/linode/linodego/profile_sshkeys.go
@@ -5,15 +5,16 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// SSHKey represents a SSHKey object
type SSHKey struct {
- ID int `json:"id"`
- Label string `json:"label"`
- SSHKey string `json:"ssh_key"`
- CreatedStr string `json:"created"`
- Created *time.Time `json:"-"`
+ ID int `json:"id"`
+ Label string `json:"label"`
+ SSHKey string `json:"ssh_key"`
+ Created *time.Time `json:"-"`
}
// SSHKeyCreateOptions fields are those accepted by CreateSSHKey
@@ -27,6 +28,26 @@ type SSHKeyUpdateOptions struct {
Label string `json:"label"`
}
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *SSHKey) UnmarshalJSON(b []byte) error {
+ type Mask SSHKey
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+
+ return nil
+}
+
// GetCreateOptions converts a SSHKey to SSHKeyCreateOptions for use in CreateSSHKey
func (i SSHKey) GetCreateOptions() (o SSHKeyCreateOptions) {
o.Label = i.Label
@@ -64,21 +85,13 @@ func (resp *SSHKeysPagedResponse) appendData(r *SSHKeysPagedResponse) {
func (c *Client) ListSSHKeys(ctx context.Context, opts *ListOptions) ([]SSHKey, error) {
response := SSHKeysPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (i *SSHKey) fixDates() *SSHKey {
- i.Created, _ = parseDates(i.CreatedStr)
- return i
-}
-
// GetSSHKey gets the sshkey with the provided ID
func (c *Client) GetSSHKey(ctx context.Context, id int) (*SSHKey, error) {
e, err := c.SSHKeys.Endpoint()
@@ -90,7 +103,7 @@ func (c *Client) GetSSHKey(ctx context.Context, id int) (*SSHKey, error) {
if err != nil {
return nil, err
}
- return r.Result().(*SSHKey).fixDates(), nil
+ return r.Result().(*SSHKey), nil
}
// CreateSSHKey creates a SSHKey
@@ -116,7 +129,7 @@ func (c *Client) CreateSSHKey(ctx context.Context, createOpts SSHKeyCreateOption
if err != nil {
return nil, err
}
- return r.Result().(*SSHKey).fixDates(), nil
+ return r.Result().(*SSHKey), nil
}
// UpdateSSHKey updates the SSHKey with the specified id
@@ -143,7 +156,7 @@ func (c *Client) UpdateSSHKey(ctx context.Context, id int, updateOpts SSHKeyUpda
if err != nil {
return nil, err
}
- return r.Result().(*SSHKey).fixDates(), nil
+ return r.Result().(*SSHKey), nil
}
// DeleteSSHKey deletes the SSHKey with the specified id
@@ -156,5 +169,4 @@ func (c *Client) DeleteSSHKey(ctx context.Context, id int) error {
_, err = coupleAPIErrors(c.R(ctx).Delete(e))
return err
-
}
diff --git a/vendor/github.com/linode/linodego/profile_tokens.go b/vendor/github.com/linode/linodego/profile_tokens.go
index bd95dfe05..2b00b37dc 100644
--- a/vendor/github.com/linode/linodego/profile_tokens.go
+++ b/vendor/github.com/linode/linodego/profile_tokens.go
@@ -5,6 +5,8 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// Token represents a Token object
@@ -13,6 +15,7 @@ type Token struct {
ID int `json:"id"`
// The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure.
+ // Valid values are "*" or a comma separated list of scopes https://developers.linode.com/api/v4/#o-auth
Scopes string `json:"scopes"`
// This token's label. This is for display purposes only, but can be used to more easily track what you're using each token for. (1-100 Characters)
@@ -22,12 +25,10 @@ type Token struct {
Token string `json:"token"`
// The date and time this token was created.
- Created *time.Time `json:"-"`
- CreatedStr string `json:"created"`
+ Created *time.Time `json:"-"`
// When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with "null" as their expiry and will never expire unless revoked.
- Expiry *time.Time `json:"-"`
- ExpiryStr string `json:"expiry"`
+ Expiry *time.Time `json:"-"`
}
// TokenCreateOptions fields are those accepted by CreateToken
@@ -48,6 +49,28 @@ type TokenUpdateOptions struct {
Label string `json:"label"`
}
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *Token) UnmarshalJSON(b []byte) error {
+ type Mask Token
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Expiry *parseabletime.ParseableTime `json:"expiry"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Expiry = (*time.Time)(p.Expiry)
+
+ return nil
+}
+
// GetCreateOptions converts a Token to TokenCreateOptions for use in CreateToken
func (i Token) GetCreateOptions() (o TokenCreateOptions) {
o.Label = i.Label
@@ -86,22 +109,13 @@ func (resp *TokensPagedResponse) appendData(r *TokensPagedResponse) {
func (c *Client) ListTokens(ctx context.Context, opts *ListOptions) ([]Token, error) {
response := TokensPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (i *Token) fixDates() *Token {
- i.Created, _ = parseDates(i.CreatedStr)
- i.Expiry, _ = parseDates(i.ExpiryStr)
- return i
-}
-
// GetToken gets the token with the provided ID
func (c *Client) GetToken(ctx context.Context, id int) (*Token, error) {
e, err := c.Tokens.Endpoint()
@@ -113,7 +127,7 @@ func (c *Client) GetToken(ctx context.Context, id int) (*Token, error) {
if err != nil {
return nil, err
}
- return r.Result().(*Token).fixDates(), nil
+ return r.Result().(*Token), nil
}
// CreateToken creates a Token
@@ -152,7 +166,7 @@ func (c *Client) CreateToken(ctx context.Context, createOpts TokenCreateOptions)
if err != nil {
return nil, err
}
- return r.Result().(*Token).fixDates(), nil
+ return r.Result().(*Token), nil
}
// UpdateToken updates the Token with the specified id
@@ -179,7 +193,7 @@ func (c *Client) UpdateToken(ctx context.Context, id int, updateOpts TokenUpdate
if err != nil {
return nil, err
}
- return r.Result().(*Token).fixDates(), nil
+ return r.Result().(*Token), nil
}
// DeleteToken deletes the Token with the specified id
diff --git a/vendor/github.com/linode/linodego/regions.go b/vendor/github.com/linode/linodego/regions.go
index b13b996ea..ac71cf97c 100644
--- a/vendor/github.com/linode/linodego/regions.go
+++ b/vendor/github.com/linode/linodego/regions.go
@@ -35,20 +35,13 @@ func (resp *RegionsPagedResponse) appendData(r *RegionsPagedResponse) {
func (c *Client) ListRegions(ctx context.Context, opts *ListOptions) ([]Region, error) {
response := RegionsPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *Region) fixDates() *Region {
- return v
-}
-
// GetRegion gets the template with the provided ID
func (c *Client) GetRegion(ctx context.Context, id string) (*Region, error) {
e, err := c.Regions.Endpoint()
@@ -60,5 +53,5 @@ func (c *Client) GetRegion(ctx context.Context, id string) (*Region, error) {
if err != nil {
return nil, err
}
- return r.Result().(*Region).fixDates(), nil
+ return r.Result().(*Region), nil
}
diff --git a/vendor/github.com/linode/linodego/resources.go b/vendor/github.com/linode/linodego/resources.go
index fe0c258cf..ff59ceb86 100644
--- a/vendor/github.com/linode/linodego/resources.go
+++ b/vendor/github.com/linode/linodego/resources.go
@@ -6,86 +6,109 @@ import (
"fmt"
"text/template"
- "gopkg.in/resty.v1"
+ "github.com/go-resty/resty/v2"
)
const (
- stackscriptsName = "stackscripts"
+ accountName = "account"
+ accountSettingsName = "accountsettings"
+ domainRecordsName = "records"
+ domainsName = "domains"
+ eventsName = "events"
+ firewallsName = "firewalls"
imagesName = "images"
- instancesName = "instances"
- instanceDisksName = "disks"
instanceConfigsName = "configs"
+ instanceDisksName = "disks"
instanceIPsName = "ips"
instanceSnapshotsName = "snapshots"
+ instanceStatsName = "instancestats"
instanceVolumesName = "instancevolumes"
+ instancesName = "instances"
+ invoiceItemsName = "invoiceitems"
+ invoicesName = "invoices"
ipaddressesName = "ipaddresses"
ipv6poolsName = "ipv6pools"
ipv6rangesName = "ipv6ranges"
- regionsName = "regions"
- volumesName = "volumes"
kernelsName = "kernels"
- typesName = "types"
- domainsName = "domains"
- domainRecordsName = "records"
+ lkeClustersName = "lkeclusters"
+ lkeClusterPoolsName = "lkeclusterpools"
+ lkeVersionsName = "lkeversions"
longviewName = "longview"
longviewclientsName = "longviewclients"
longviewsubscriptionsName = "longviewsubscriptions"
- nodebalancersName = "nodebalancers"
+ managedName = "managed"
nodebalancerconfigsName = "nodebalancerconfigs"
nodebalancernodesName = "nodebalancernodes"
+ nodebalancerStatsName = "nodebalancerstats"
+ nodebalancersName = "nodebalancers"
notificationsName = "notifications"
+ oauthClientsName = "oauthClients"
+ objectStorageBucketsName = "objectstoragebuckets"
+ objectStorageClustersName = "objectstorageclusters"
+ objectStorageKeysName = "objectstoragekeys"
+ paymentsName = "payments"
+ profileName = "profile"
+ regionsName = "regions"
sshkeysName = "sshkeys"
+ stackscriptsName = "stackscripts"
+ tagsName = "tags"
ticketsName = "tickets"
tokensName = "tokens"
- accountName = "account"
- eventsName = "events"
- invoicesName = "invoices"
- invoiceItemsName = "invoiceitems"
- profileName = "profile"
- managedName = "managed"
- tagsName = "tags"
+ typesName = "types"
usersName = "users"
- // notificationsName = "notifications"
+ volumesName = "volumes"
- stackscriptsEndpoint = "linode/stackscripts"
+ accountEndpoint = "account"
+ accountSettingsEndpoint = "account/settings"
+ domainRecordsEndpoint = "domains/{{ .ID }}/records"
+ domainsEndpoint = "domains"
+ eventsEndpoint = "account/events"
+ firewallsEndpoint = "networking/firewalls"
imagesEndpoint = "images"
- instancesEndpoint = "linode/instances"
instanceConfigsEndpoint = "linode/instances/{{ .ID }}/configs"
instanceDisksEndpoint = "linode/instances/{{ .ID }}/disks"
- instanceSnapshotsEndpoint = "linode/instances/{{ .ID }}/backups"
instanceIPsEndpoint = "linode/instances/{{ .ID }}/ips"
+ instanceSnapshotsEndpoint = "linode/instances/{{ .ID }}/backups"
+ instanceStatsEndpoint = "linode/instances/{{ .ID }}/stats"
instanceVolumesEndpoint = "linode/instances/{{ .ID }}/volumes"
+ instancesEndpoint = "linode/instances"
+ invoiceItemsEndpoint = "account/invoices/{{ .ID }}/items"
+ invoicesEndpoint = "account/invoices"
ipaddressesEndpoint = "networking/ips"
ipv6poolsEndpoint = "networking/ipv6/pools"
ipv6rangesEndpoint = "networking/ipv6/ranges"
- regionsEndpoint = "regions"
- volumesEndpoint = "volumes"
kernelsEndpoint = "linode/kernels"
- typesEndpoint = "linode/types"
- domainsEndpoint = "domains"
- domainRecordsEndpoint = "domains/{{ .ID }}/records"
+ lkeClustersEndpoint = "lke/clusters"
+ lkeClusterPoolsEndpoint = "lke/clusters/{{ .ID }}/pools"
+ lkeVersionsEndpoint = "lke/versions"
longviewEndpoint = "longview"
longviewclientsEndpoint = "longview/clients"
longviewsubscriptionsEndpoint = "longview/subscriptions"
- nodebalancersEndpoint = "nodebalancers"
+ managedEndpoint = "managed"
// @TODO we can't use these nodebalancer endpoints unless we include these templated fields
// The API seems inconsistent about including parent IDs in objects, (compare instance configs to nb configs)
// Parent IDs would be immutable for updates and are ignored in create requests ..
// Should we include these fields in CreateOpts and UpdateOpts?
- nodebalancerconfigsEndpoint = "nodebalancers/{{ .ID }}/configs"
- nodebalancernodesEndpoint = "nodebalancers/{{ .ID }}/configs/{{ .SecondID }}/nodes"
- sshkeysEndpoint = "profile/sshkeys"
- ticketsEndpoint = "support/tickets"
- tokensEndpoint = "profile/tokens"
- accountEndpoint = "account"
- eventsEndpoint = "account/events"
- invoicesEndpoint = "account/invoices"
- invoiceItemsEndpoint = "account/invoices/{{ .ID }}/items"
- profileEndpoint = "profile"
- managedEndpoint = "managed"
- tagsEndpoint = "tags"
- usersEndpoint = "account/users"
- notificationsEndpoint = "account/notifications"
+ nodebalancerconfigsEndpoint = "nodebalancers/{{ .ID }}/configs"
+ nodebalancernodesEndpoint = "nodebalancers/{{ .ID }}/configs/{{ .SecondID }}/nodes"
+ nodebalancerStatsEndpoint = "nodebalancers/{{ .ID }}/stats"
+ nodebalancersEndpoint = "nodebalancers"
+ notificationsEndpoint = "account/notifications"
+ oauthClientsEndpoint = "account/oauth-clients"
+ objectStorageBucketsEndpoint = "object-storage/buckets"
+ objectStorageClustersEndpoint = "object-storage/clusters"
+ objectStorageKeysEndpoint = "object-storage/keys"
+ paymentsEndpoint = "account/payments"
+ profileEndpoint = "profile"
+ regionsEndpoint = "regions"
+ sshkeysEndpoint = "profile/sshkeys"
+ stackscriptsEndpoint = "linode/stackscripts"
+ tagsEndpoint = "tags"
+ ticketsEndpoint = "support/tickets"
+ tokensEndpoint = "profile/tokens"
+ typesEndpoint = "linode/types"
+ usersEndpoint = "account/users"
+ volumesEndpoint = "volumes"
)
// Resource represents a linode API resource
@@ -125,16 +148,19 @@ func (r Resource) render(data ...interface{}) (string, error) {
buf := bytes.NewBufferString(out)
var substitutions interface{}
- if len(data) == 1 {
+
+ switch len(data) {
+ case 1:
substitutions = struct{ ID interface{} }{data[0]}
- } else if len(data) == 2 {
+ case 2:
substitutions = struct {
ID interface{}
SecondID interface{}
}{data[0], data[1]}
- } else {
+ default:
return "", NewError("Too many arguments to render template (expected 1 or 2)")
}
+
if err := r.endpointTemplate.Execute(buf, substitutions); err != nil {
return "", NewError(err)
}
@@ -147,6 +173,7 @@ func (r Resource) endpointWithID(id ...int) (string, error) {
return r.endpoint, nil
}
data := make([]interface{}, len(id))
+
for i, v := range id {
data[i] = v
}
diff --git a/vendor/github.com/linode/linodego/retries.go b/vendor/github.com/linode/linodego/retries.go
new file mode 100644
index 000000000..5ead4ec60
--- /dev/null
+++ b/vendor/github.com/linode/linodego/retries.go
@@ -0,0 +1,65 @@
+package linodego
+
+import (
+ "log"
+ "net/http"
+ "strconv"
+ "time"
+
+ "github.com/go-resty/resty/v2"
+)
+
+// type RetryConditional func(r *resty.Response) (shouldRetry bool)
+type RetryConditional resty.RetryConditionFunc
+
+// Configures resty to
+// lock until enough time has passed to retry the request as determined by the Retry-After response header.
+// If the Retry-After header is not set, we fall back to value of SetPollDelay.
+func configureRetries(c *Client) {
+ c.resty.
+ SetRetryCount(1000).
+ AddRetryCondition(checkRetryConditionals(c)).
+ SetRetryAfter(respectRetryAfter)
+}
+
+func checkRetryConditionals(c *Client) func(*resty.Response, error) bool {
+ return func(r *resty.Response, err error) bool {
+ for _, retryConditional := range c.retryConditionals {
+ retry := retryConditional(r, err)
+ if retry {
+ log.Printf("[INFO] Received error %s - Retrying", r.Error())
+ return true
+ }
+ }
+ return false
+ }
+}
+
+// SetLinodeBusyRetry configures resty to retry specifically on "Linode busy." errors
+// The retry wait time is configured in SetPollDelay
+func linodeBusyRetryCondition(r *resty.Response, _ error) bool {
+ apiError, ok := r.Error().(*APIError)
+ linodeBusy := ok && apiError.Error() == "Linode busy."
+ retry := r.StatusCode() == http.StatusBadRequest && linodeBusy
+ return retry
+}
+
+func tooManyRequestsRetryCondition(r *resty.Response, _ error) bool {
+ return r.StatusCode() == http.StatusTooManyRequests
+}
+
+func respectRetryAfter(client *resty.Client, resp *resty.Response) (time.Duration, error) {
+ retryAfterStr := resp.Header().Get("Retry-After")
+ if retryAfterStr == "" {
+ return 0, nil
+ }
+
+ retryAfter, err := strconv.Atoi(retryAfterStr)
+ if err != nil {
+ return 0, err
+ }
+
+ duration := time.Duration(retryAfter) * time.Second
+ log.Printf("[INFO] Respecting Retry-After Header of %d (%s) (max %s)", retryAfter, duration, client.RetryMaxWaitTime)
+ return duration, nil
+}
diff --git a/vendor/github.com/linode/linodego/stackscripts.go b/vendor/github.com/linode/linodego/stackscripts.go
index daf339b2f..829a2eebd 100644
--- a/vendor/github.com/linode/linodego/stackscripts.go
+++ b/vendor/github.com/linode/linodego/stackscripts.go
@@ -5,17 +5,18 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// Stackscript represents a Linode StackScript
type Stackscript struct {
- CreatedStr string `json:"created"`
- UpdatedStr string `json:"updated"`
-
ID int `json:"id"`
Username string `json:"username"`
Label string `json:"label"`
Description string `json:"description"`
+ Ordinal int `json:"ordinal"`
+ LogoURL string `json:"logo_url"`
Images []string `json:"images"`
DeploymentsTotal int `json:"deployments_total"`
DeploymentsActive int `json:"deployments_active"`
@@ -62,6 +63,28 @@ type StackscriptCreateOptions struct {
// StackscriptUpdateOptions fields are those accepted by UpdateStackscript
type StackscriptUpdateOptions StackscriptCreateOptions
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (i *Stackscript) UnmarshalJSON(b []byte) error {
+ type Mask Stackscript
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ }{
+ Mask: (*Mask)(i),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ i.Created = (*time.Time)(p.Created)
+ i.Updated = (*time.Time)(p.Updated)
+
+ return nil
+}
+
// GetCreateOptions converts a Stackscript to StackscriptCreateOptions for use in CreateStackscript
func (i Stackscript) GetCreateOptions() StackscriptCreateOptions {
return StackscriptCreateOptions{
@@ -110,22 +133,13 @@ func (resp *StackscriptsPagedResponse) appendData(r *StackscriptsPagedResponse)
func (c *Client) ListStackscripts(ctx context.Context, opts *ListOptions) ([]Stackscript, error) {
response := StackscriptsPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (i *Stackscript) fixDates() *Stackscript {
- i.Created, _ = parseDates(i.CreatedStr)
- i.Updated, _ = parseDates(i.UpdatedStr)
- return i
-}
-
// GetStackscript gets the Stackscript with the provided ID
func (c *Client) GetStackscript(ctx context.Context, id int) (*Stackscript, error) {
e, err := c.StackScripts.Endpoint()
@@ -139,7 +153,7 @@ func (c *Client) GetStackscript(ctx context.Context, id int) (*Stackscript, erro
if err != nil {
return nil, err
}
- return r.Result().(*Stackscript).fixDates(), nil
+ return r.Result().(*Stackscript), nil
}
// CreateStackscript creates a StackScript
@@ -165,7 +179,7 @@ func (c *Client) CreateStackscript(ctx context.Context, createOpts StackscriptCr
if err != nil {
return nil, err
}
- return r.Result().(*Stackscript).fixDates(), nil
+ return r.Result().(*Stackscript), nil
}
// UpdateStackscript updates the StackScript with the specified id
@@ -192,7 +206,7 @@ func (c *Client) UpdateStackscript(ctx context.Context, id int, updateOpts Stack
if err != nil {
return nil, err
}
- return r.Result().(*Stackscript).fixDates(), nil
+ return r.Result().(*Stackscript), nil
}
// DeleteStackscript deletes the StackScript with the specified id
diff --git a/vendor/github.com/linode/linodego/tags.go b/vendor/github.com/linode/linodego/tags.go
index 2cb44272b..db641f489 100644
--- a/vendor/github.com/linode/linodego/tags.go
+++ b/vendor/github.com/linode/linodego/tags.go
@@ -22,6 +22,7 @@ type TaggedObject struct {
// SortedObjects currently only includes Instances
type SortedObjects struct {
Instances []Instance
+ LKEClusters []LKECluster
Domains []Domain
Volumes []Volume
NodeBalancers []NodeBalancer
@@ -35,11 +36,13 @@ type TaggedObjectList []TaggedObject
// TagCreateOptions fields are those accepted by CreateTag
type TagCreateOptions struct {
- Label string `json:"label"`
- Linodes []int `json:"linodes,omitempty"`
- Domains []int `json:"domains,omitempty"`
- Volumes []int `json:"volumes,omitempty"`
- NodeBalancers []int `json:"nodebalancers,omitempty"`
+ Label string `json:"label"`
+ Linodes []int `json:"linodes,omitempty"`
+ // @TODO is this implemented?
+ LKEClusters []int `json:"lke_clusters,omitempty"`
+ Domains []int `json:"domains,omitempty"`
+ Volumes []int `json:"volumes,omitempty"`
+ NodeBalancers []int `json:"nodebalancers,omitempty"`
}
// GetCreateOptions converts a Tag to TagCreateOptions for use in CreateTag
@@ -108,6 +111,12 @@ func (i *TaggedObject) fixData() (*TaggedObject, error) {
return nil, err
}
i.Data = obj
+ case "lke_cluster":
+ obj := LKECluster{}
+ if err := json.Unmarshal(i.RawData, &obj); err != nil {
+ return nil, err
+ }
+ i.Data = obj
case "nodebalancer":
obj := NodeBalancer{}
if err := json.Unmarshal(i.RawData, &obj); err != nil {
@@ -135,9 +144,11 @@ func (i *TaggedObject) fixData() (*TaggedObject, error) {
func (c *Client) ListTaggedObjects(ctx context.Context, label string, opts *ListOptions) (TaggedObjectList, error) {
response := TaggedObjectsPagedResponse{}
err := c.listHelperWithID(ctx, &response, label, opts)
+
if err != nil {
return nil, err
}
+
for i := range response.Data {
if _, err := response.Data[i].fixData(); err != nil {
return nil, err
@@ -149,31 +160,38 @@ func (c *Client) ListTaggedObjects(ctx context.Context, label string, opts *List
// SortedObjects converts a list of TaggedObjects into a Sorted Objects struct, for easier access
func (t TaggedObjectList) SortedObjects() (SortedObjects, error) {
so := SortedObjects{}
+
for _, o := range t {
switch o.Type {
case "linode":
if instance, ok := o.Data.(Instance); ok {
so.Instances = append(so.Instances, instance)
} else {
- return so, errors.New("Expected an Instance when Type was \"linode\"")
+ return so, errors.New("expected an Instance when Type was \"linode\"")
+ }
+ case "lke_cluster":
+ if lkeCluster, ok := o.Data.(LKECluster); ok {
+ so.LKEClusters = append(so.LKEClusters, lkeCluster)
+ } else {
+ return so, errors.New("expected an LKECluster when Type was \"lke_cluster\"")
}
case "domain":
if domain, ok := o.Data.(Domain); ok {
so.Domains = append(so.Domains, domain)
} else {
- return so, errors.New("Expected a Domain when Type was \"domain\"")
+ return so, errors.New("expected a Domain when Type was \"domain\"")
}
case "volume":
if volume, ok := o.Data.(Volume); ok {
so.Volumes = append(so.Volumes, volume)
} else {
- return so, errors.New("Expected an Volume when Type was \"volume\"")
+ return so, errors.New("expected an Volume when Type was \"volume\"")
}
case "nodebalancer":
if nodebalancer, ok := o.Data.(NodeBalancer); ok {
so.NodeBalancers = append(so.NodeBalancers, nodebalancer)
} else {
- return so, errors.New("Expected an NodeBalancer when Type was \"nodebalancer\"")
+ return so, errors.New("expected an NodeBalancer when Type was \"nodebalancer\"")
}
}
}
diff --git a/vendor/github.com/linode/linodego/util.go b/vendor/github.com/linode/linodego/util.go
deleted file mode 100644
index a37a304e4..000000000
--- a/vendor/github.com/linode/linodego/util.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package linodego
-
-import "time"
-
-const (
- dateLayout = "2006-01-02T15:04:05"
-)
-
-func parseDates(dateStr string) (*time.Time, error) {
- d, err := time.Parse(dateLayout, dateStr)
- if err != nil {
- return nil, err
- }
- return &d, nil
-}
diff --git a/vendor/github.com/linode/linodego/volumes.go b/vendor/github.com/linode/linodego/volumes.go
index 0a528b545..03a148ba6 100644
--- a/vendor/github.com/linode/linodego/volumes.go
+++ b/vendor/github.com/linode/linodego/volumes.go
@@ -5,6 +5,8 @@ import (
"encoding/json"
"fmt"
"time"
+
+ "github.com/linode/linodego/internal/parseabletime"
)
// VolumeStatus indicates the status of the Volume
@@ -26,9 +28,6 @@ const (
// Volume represents a linode volume object
type Volume struct {
- CreatedStr string `json:"created"`
- UpdatedStr string `json:"updated"`
-
ID int `json:"id"`
Label string `json:"label"`
Status VolumeStatus `json:"status"`
@@ -50,7 +49,8 @@ type VolumeCreateOptions struct {
// The Volume's size, in GiB. Minimum size is 10GiB, maximum size is 10240GiB. A "0" value will result in the default size.
Size int `json:"size,omitempty"`
// An array of tags applied to this object. Tags are for organizational purposes only.
- Tags []string `json:"tags"`
+ Tags []string `json:"tags"`
+ PersistAcrossBoots *bool `json:"persist_across_boots,omitempty"`
}
// VolumeUpdateOptions fields are those accepted by UpdateVolume
@@ -61,8 +61,9 @@ type VolumeUpdateOptions struct {
// VolumeAttachOptions fields are those accepted by AttachVolume
type VolumeAttachOptions struct {
- LinodeID int `json:"linode_id"`
- ConfigID int `json:"config_id,omitempty"`
+ LinodeID int `json:"linode_id"`
+ ConfigID int `json:"config_id,omitempty"`
+ PersistAcrossBoots *bool `json:"persist_across_boots,omitempty"`
}
// VolumesPagedResponse represents a linode API response for listing of volumes
@@ -71,6 +72,28 @@ type VolumesPagedResponse struct {
Data []Volume `json:"data"`
}
+// UnmarshalJSON implements the json.Unmarshaler interface
+func (v *Volume) UnmarshalJSON(b []byte) error {
+ type Mask Volume
+
+ p := struct {
+ *Mask
+ Created *parseabletime.ParseableTime `json:"created"`
+ Updated *parseabletime.ParseableTime `json:"updated"`
+ }{
+ Mask: (*Mask)(v),
+ }
+
+ if err := json.Unmarshal(b, &p); err != nil {
+ return err
+ }
+
+ v.Created = time.Time(*p.Created)
+ v.Updated = time.Time(*p.Updated)
+
+ return nil
+}
+
// GetUpdateOptions converts a Volume to VolumeUpdateOptions for use in UpdateVolume
func (v Volume) GetUpdateOptions() (updateOpts VolumeUpdateOptions) {
updateOpts.Label = v.Label
@@ -108,26 +131,13 @@ func (resp *VolumesPagedResponse) appendData(r *VolumesPagedResponse) {
func (c *Client) ListVolumes(ctx context.Context, opts *ListOptions) ([]Volume, error) {
response := VolumesPagedResponse{}
err := c.listHelper(ctx, &response, opts)
- for i := range response.Data {
- response.Data[i].fixDates()
- }
+
if err != nil {
return nil, err
}
return response.Data, nil
}
-// fixDates converts JSON timestamps to Go time.Time values
-func (v *Volume) fixDates() *Volume {
- if parsed, err := parseDates(v.CreatedStr); err != nil {
- v.Created = *parsed
- }
- if parsed, err := parseDates(v.UpdatedStr); err != nil {
- v.Updated = *parsed
- }
- return v
-}
-
// GetVolume gets the template with the provided ID
func (c *Client) GetVolume(ctx context.Context, id int) (*Volume, error) {
e, err := c.Volumes.Endpoint()
@@ -139,7 +149,7 @@ func (c *Client) GetVolume(ctx context.Context, id int) (*Volume, error) {
if err != nil {
return nil, err
}
- return r.Result().(*Volume).fixDates(), nil
+ return r.Result().(*Volume), nil
}
// AttachVolume attaches a volume to a Linode instance
@@ -166,7 +176,7 @@ func (c *Client) AttachVolume(ctx context.Context, id int, options *VolumeAttach
return nil, err
}
- return resp.Result().(*Volume).fixDates(), nil
+ return resp.Result().(*Volume), nil
}
// CreateVolume creates a Linode Volume
@@ -192,7 +202,7 @@ func (c *Client) CreateVolume(ctx context.Context, createOpts VolumeCreateOption
return nil, err
}
- return resp.Result().(*Volume).fixDates(), nil
+ return resp.Result().(*Volume), nil
}
// RenameVolume renames the label of a Linode volume
@@ -226,7 +236,7 @@ func (c *Client) UpdateVolume(ctx context.Context, id int, volume VolumeUpdateOp
if err != nil {
return nil, err
}
- return r.Result().(*Volume).fixDates(), nil
+ return r.Result().(*Volume), nil
}
// CloneVolume clones a Linode volume
@@ -248,7 +258,7 @@ func (c *Client) CloneVolume(ctx context.Context, id int, label string) (*Volume
return nil, err
}
- return resp.Result().(*Volume).fixDates(), nil
+ return resp.Result().(*Volume), nil
}
// DetachVolume detaches a Linode volume
diff --git a/vendor/github.com/linode/linodego/waitfor.go b/vendor/github.com/linode/linodego/waitfor.go
index 8f29a4150..45dad5922 100644
--- a/vendor/github.com/linode/linodego/waitfor.go
+++ b/vendor/github.com/linode/linodego/waitfor.go
@@ -18,6 +18,7 @@ func (client Client) WaitForInstanceStatus(ctx context.Context, instanceID int,
ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond)
defer ticker.Stop()
+
for {
select {
case <-ticker.C:
@@ -44,6 +45,7 @@ func (client Client) WaitForInstanceDiskStatus(ctx context.Context, instanceID i
ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond)
defer ticker.Stop()
+
for {
select {
case <-ticker.C:
@@ -53,16 +55,18 @@ func (client Client) WaitForInstanceDiskStatus(ctx context.Context, instanceID i
if err != nil {
return nil, err
}
+
for _, disk := range disks {
+ disk := disk
if disk.ID == diskID {
complete := (disk.Status == status)
if complete {
return &disk, nil
}
+
break
}
}
-
case <-ctx.Done():
return nil, fmt.Errorf("Error waiting for Instance %d Disk %d status %s: %s", instanceID, diskID, status, ctx.Err())
}
@@ -77,6 +81,7 @@ func (client Client) WaitForVolumeStatus(ctx context.Context, volumeID int, stat
ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond)
defer ticker.Stop()
+
for {
select {
case <-ticker.C:
@@ -103,6 +108,7 @@ func (client Client) WaitForSnapshotStatus(ctx context.Context, instanceID int,
ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond)
defer ticker.Stop()
+
for {
select {
case <-ticker.C:
@@ -131,6 +137,7 @@ func (client Client) WaitForVolumeLinodeID(ctx context.Context, volumeID int, li
ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond)
defer ticker.Stop()
+
for {
select {
case <-ticker.C:
@@ -139,34 +146,54 @@ func (client Client) WaitForVolumeLinodeID(ctx context.Context, volumeID int, li
return volume, err
}
- if linodeID == nil && volume.LinodeID == nil {
+ switch {
+ case linodeID == nil && volume.LinodeID == nil:
return volume, nil
- } else if linodeID == nil || volume.LinodeID == nil {
+ case linodeID == nil || volume.LinodeID == nil:
// continue waiting
- } else if *volume.LinodeID == *linodeID {
+ case *volume.LinodeID == *linodeID:
return volume, nil
}
-
case <-ctx.Done():
return nil, fmt.Errorf("Error waiting for Volume %d to have Instance %v: %s", volumeID, linodeID, ctx.Err())
}
}
}
+// WaitForLKEClusterStatus waits for the LKECluster to reach the desired state
+// before returning. It will timeout with an error after timeoutSeconds.
+func (client Client) WaitForLKEClusterStatus(ctx context.Context, clusterID int, status LKEClusterStatus, timeoutSeconds int) (*LKECluster, error) {
+ ctx, cancel := context.WithTimeout(ctx, time.Duration(timeoutSeconds)*time.Second)
+ defer cancel()
+
+ ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond)
+ defer ticker.Stop()
+
+ for {
+ select {
+ case <-ticker.C:
+ cluster, err := client.GetLKECluster(ctx, clusterID)
+ if err != nil {
+ return cluster, err
+ }
+ complete := (cluster.Status == status)
+
+ if complete {
+ return cluster, nil
+ }
+ case <-ctx.Done():
+ return nil, fmt.Errorf("Error waiting for Cluster %d status %s: %s", clusterID, status, ctx.Err())
+ }
+ }
+}
+
// WaitForEventFinished waits for an entity action to reach the 'finished' state
// before returning. It will timeout with an error after timeoutSeconds.
// If the event indicates a failure both the failed event and the error will be returned.
+// nolint
func (client Client) WaitForEventFinished(ctx context.Context, id interface{}, entityType EntityType, action EventAction, minStart time.Time, timeoutSeconds int) (*Event, error) {
titledEntityType := strings.Title(string(entityType))
- filter, _ := json.Marshal(map[string]interface{}{
- // Entity is not filtered by the API
- // Perhaps one day they will permit Entity ID/Type filtering.
- // We'll have to verify these values manually, for now.
- //"entity": map[string]interface{}{
- // "id": fmt.Sprintf("%v", id),
- // "type": entityType,
- //},
-
+ filterStruct := map[string]interface{}{
// Nor is action
//"action": action,
@@ -177,16 +204,33 @@ func (client Client) WaitForEventFinished(ctx context.Context, id interface{}, e
//},
// With potentially 1000+ events coming back, we should filter on something
+ // Warning: This optimization has the potential to break if users are clearing
+ // events before we see them.
"seen": false,
// Float the latest events to page 1
"+order_by": "created",
"+order": "desc",
- })
+ }
// Optimistically restrict results to page 1. We should remove this when more
// precise filtering options exist.
- listOptions := NewListOptions(1, string(filter))
+ pages := 1
+
+ // The API has limitted filtering support for Event ID and Event Type
+ // Optimize the list, if possible
+ switch entityType {
+ case EntityDisk, EntityLinode, EntityDomain, EntityNodebalancer:
+ // All of the filter supported types have int ids
+ filterableEntityID, err := strconv.Atoi(fmt.Sprintf("%v", id))
+ if err != nil {
+ return nil, fmt.Errorf("Error parsing Entity ID %q for optimized WaitForEventFinished EventType %q: %s", id, entityType, err)
+ }
+ filterStruct["entity.id"] = filterableEntityID
+ filterStruct["entity.type"] = entityType
+
+ // TODO: are we conformatable with pages = 0 with the event type and id filter?
+ }
ctx, cancel := context.WithTimeout(ctx, time.Duration(timeoutSeconds)*time.Second)
defer cancel()
@@ -197,10 +241,27 @@ func (client Client) WaitForEventFinished(ctx context.Context, id interface{}, e
}
ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond)
+
+ // avoid repeating log messages
+ nextLog := ""
+ lastLog := ""
+ lastEventID := 0
+
defer ticker.Stop()
for {
select {
case <-ticker.C:
+ if lastEventID > 0 {
+ filterStruct["id"] = map[string]interface{}{
+ "+gte": lastEventID,
+ }
+ }
+
+ filter, err := json.Marshal(filterStruct)
+ if err != nil {
+ return nil, err
+ }
+ listOptions := NewListOptions(pages, string(filter))
events, err := client.ListEvents(ctx, listOptions)
if err != nil {
@@ -209,6 +270,8 @@ func (client Client) WaitForEventFinished(ctx context.Context, id interface{}, e
// If there are events for this instance + action, inspect them
for _, event := range events {
+ event := event
+
if event.Action != action {
// log.Println("action mismatch", event.Action, action)
continue
@@ -220,21 +283,21 @@ func (client Client) WaitForEventFinished(ctx context.Context, id interface{}, e
var entID string
- switch event.Entity.ID.(type) {
+ switch id := event.Entity.ID.(type) {
case float64, float32:
- entID = fmt.Sprintf("%.f", event.Entity.ID)
+ entID = fmt.Sprintf("%.f", id)
case int:
- entID = strconv.Itoa(event.Entity.ID.(int))
+ entID = strconv.Itoa(id)
default:
- entID = fmt.Sprintf("%v", event.Entity.ID)
+ entID = fmt.Sprintf("%v", id)
}
var findID string
- switch id.(type) {
+ switch id := id.(type) {
case float64, float32:
findID = fmt.Sprintf("%.f", id)
case int:
- findID = strconv.Itoa(id.(int))
+ findID = strconv.Itoa(id)
default:
findID = fmt.Sprintf("%v", id)
}
@@ -247,24 +310,33 @@ func (client Client) WaitForEventFinished(ctx context.Context, id interface{}, e
// @TODO(displague) This event.Created check shouldn't be needed, but it appears
// that the ListEvents method is not populating it correctly
if event.Created == nil {
- log.Printf("[WARN] event.Created is nil when API returned: %#+v", event.CreatedStr)
+ log.Printf("[WARN] event.Created is nil when API returned: %#+v", event.Created)
} else if *event.Created != minStart && !event.Created.After(minStart) {
// Not the event we were looking for
// log.Println(event.Created, "is not >=", minStart)
continue
-
}
- if event.Status == EventFailed {
+ // This is the event we are looking for. Save our place.
+ if lastEventID == 0 {
+ lastEventID = event.ID
+ }
+
+ switch event.Status {
+ case EventFailed:
return &event, fmt.Errorf("%s %v action %s failed", titledEntityType, id, action)
- } else if event.Status == EventScheduled {
- log.Printf("[INFO] %s %v action %s is scheduled", titledEntityType, id, action)
- } else if event.Status == EventFinished {
+ case EventFinished:
log.Printf("[INFO] %s %v action %s is finished", titledEntityType, id, action)
return &event, nil
}
// TODO(displague) can we bump the ticker to TimeRemaining/2 (>=1) when non-nil?
- log.Printf("[INFO] %s %v action %s is %s", titledEntityType, id, action, event.Status)
+ nextLog = fmt.Sprintf("[INFO] %s %v action %s is %s", titledEntityType, id, action, event.Status)
+ }
+
+ // de-dupe logging statements
+ if nextLog != lastLog {
+ log.Print(nextLog)
+ lastLog = nextLog
}
case <-ctx.Done():
return nil, fmt.Errorf("Error waiting for Event Status '%s' of %s %v action '%s': %s", EventFinished, titledEntityType, id, action, ctx.Err())
diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go
index f4d9b5ece..3a67636fe 100644
--- a/vendor/golang.org/x/net/http2/client_conn_pool.go
+++ b/vendor/golang.org/x/net/http2/client_conn_pool.go
@@ -107,6 +107,7 @@ func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMis
// dialCall is an in-flight Transport dial call to a host.
type dialCall struct {
+ _ incomparable
p *clientConnPool
done chan struct{} // closed when done
res *ClientConn // valid after done is closed
@@ -180,6 +181,7 @@ func (p *clientConnPool) addConnIfNeeded(key string, t *Transport, c *tls.Conn)
}
type addConnCall struct {
+ _ incomparable
p *clientConnPool
done chan struct{} // closed when done
err error
@@ -200,12 +202,6 @@ func (c *addConnCall) run(t *Transport, key string, tc *tls.Conn) {
close(c.done)
}
-func (p *clientConnPool) addConn(key string, cc *ClientConn) {
- p.mu.Lock()
- p.addConnLocked(key, cc)
- p.mu.Unlock()
-}
-
// p.mu must be held
func (p *clientConnPool) addConnLocked(key string, cc *ClientConn) {
for _, v := range p.conns[key] {
diff --git a/vendor/golang.org/x/net/http2/flow.go b/vendor/golang.org/x/net/http2/flow.go
index cea601fcd..b51f0e0cf 100644
--- a/vendor/golang.org/x/net/http2/flow.go
+++ b/vendor/golang.org/x/net/http2/flow.go
@@ -8,6 +8,8 @@ package http2
// flow is the flow control window's size.
type flow struct {
+ _ incomparable
+
// n is the number of DATA bytes we're allowed to send.
// A flow is kept both on a conn and a per-stream.
n int32
diff --git a/vendor/golang.org/x/net/http2/hpack/huffman.go b/vendor/golang.org/x/net/http2/hpack/huffman.go
index b412a96c5..a1ab2f056 100644
--- a/vendor/golang.org/x/net/http2/hpack/huffman.go
+++ b/vendor/golang.org/x/net/http2/hpack/huffman.go
@@ -105,7 +105,14 @@ func huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error {
return nil
}
+// incomparable is a zero-width, non-comparable type. Adding it to a struct
+// makes that struct also non-comparable, and generally doesn't add
+// any size (as long as it's first).
+type incomparable [0]func()
+
type node struct {
+ _ incomparable
+
// children is non-nil for internal nodes
children *[256]*node
diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go
index 27cc893cc..5571ccfd2 100644
--- a/vendor/golang.org/x/net/http2/http2.go
+++ b/vendor/golang.org/x/net/http2/http2.go
@@ -241,6 +241,7 @@ func (cw closeWaiter) Wait() {
// Its buffered writer is lazily allocated as needed, to minimize
// idle memory usage with many connections.
type bufferedWriter struct {
+ _ incomparable
w io.Writer // immutable
bw *bufio.Writer // non-nil when data is buffered
}
@@ -313,6 +314,7 @@ func bodyAllowedForStatus(status int) bool {
}
type httpError struct {
+ _ incomparable
msg string
timeout bool
}
@@ -376,3 +378,8 @@ func (s *sorter) SortStrings(ss []string) {
func validPseudoPath(v string) bool {
return (len(v) > 0 && v[0] == '/') || v == "*"
}
+
+// incomparable is a zero-width, non-comparable type. Adding it to a struct
+// makes that struct also non-comparable, and generally doesn't add
+// any size (as long as it's first).
+type incomparable [0]func()
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go
index bc9e41a1b..345b7cd85 100644
--- a/vendor/golang.org/x/net/http2/server.go
+++ b/vendor/golang.org/x/net/http2/server.go
@@ -761,6 +761,7 @@ func (sc *serverConn) readFrames() {
// frameWriteResult is the message passed from writeFrameAsync to the serve goroutine.
type frameWriteResult struct {
+ _ incomparable
wr FrameWriteRequest // what was written (or attempted)
err error // result of the writeFrame call
}
@@ -771,7 +772,7 @@ type frameWriteResult struct {
// serverConn.
func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) {
err := wr.write.writeFrame(sc)
- sc.wroteFrameCh <- frameWriteResult{wr, err}
+ sc.wroteFrameCh <- frameWriteResult{wr: wr, err: err}
}
func (sc *serverConn) closeAllStreamsOnConnClose() {
@@ -1161,7 +1162,7 @@ func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) {
if wr.write.staysWithinBuffer(sc.bw.Available()) {
sc.writingFrameAsync = false
err := wr.write.writeFrame(sc)
- sc.wroteFrame(frameWriteResult{wr, err})
+ sc.wroteFrame(frameWriteResult{wr: wr, err: err})
} else {
sc.writingFrameAsync = true
go sc.writeFrameAsync(wr)
@@ -2057,7 +2058,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
var trailer http.Header
for _, v := range rp.header["Trailer"] {
for _, key := range strings.Split(v, ",") {
- key = http.CanonicalHeaderKey(strings.TrimSpace(key))
+ key = http.CanonicalHeaderKey(textproto.TrimString(key))
switch key {
case "Transfer-Encoding", "Trailer", "Content-Length":
// Bogus. (copy of http1 rules)
@@ -2275,6 +2276,7 @@ func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {
// requestBody is the Handler's Request.Body type.
// Read and Close may be called concurrently.
type requestBody struct {
+ _ incomparable
stream *stream
conn *serverConn
closed bool // for use by Close only
diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go
index e4fb02530..76a92e0ca 100644
--- a/vendor/golang.org/x/net/http2/transport.go
+++ b/vendor/golang.org/x/net/http2/transport.go
@@ -108,6 +108,19 @@ type Transport struct {
// waiting for their turn.
StrictMaxConcurrentStreams bool
+ // ReadIdleTimeout is the timeout after which a health check using ping
+ // frame will be carried out if no frame is received on the connection.
+ // Note that a ping response will is considered a received frame, so if
+ // there is no other traffic on the connection, the health check will
+ // be performed every ReadIdleTimeout interval.
+ // If zero, no health check is performed.
+ ReadIdleTimeout time.Duration
+
+ // PingTimeout is the timeout after which the connection will be closed
+ // if a response to Ping is not received.
+ // Defaults to 15s.
+ PingTimeout time.Duration
+
// t1, if non-nil, is the standard library Transport using
// this transport. Its settings are used (but not its
// RoundTrip method, etc).
@@ -131,6 +144,14 @@ func (t *Transport) disableCompression() bool {
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
}
+func (t *Transport) pingTimeout() time.Duration {
+ if t.PingTimeout == 0 {
+ return 15 * time.Second
+ }
+ return t.PingTimeout
+
+}
+
// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.
// It returns an error if t1 has already been HTTP/2-enabled.
func ConfigureTransport(t1 *http.Transport) error {
@@ -675,6 +696,20 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
return cc, nil
}
+func (cc *ClientConn) healthCheck() {
+ pingTimeout := cc.t.pingTimeout()
+ // We don't need to periodically ping in the health check, because the readLoop of ClientConn will
+ // trigger the healthCheck again if there is no frame received.
+ ctx, cancel := context.WithTimeout(context.Background(), pingTimeout)
+ defer cancel()
+ err := cc.Ping(ctx)
+ if err != nil {
+ cc.closeForLostPing()
+ cc.t.connPool().MarkDead(cc)
+ return
+ }
+}
+
func (cc *ClientConn) setGoAway(f *GoAwayFrame) {
cc.mu.Lock()
defer cc.mu.Unlock()
@@ -846,14 +881,12 @@ func (cc *ClientConn) sendGoAway() error {
return nil
}
-// Close closes the client connection immediately.
-//
-// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
-func (cc *ClientConn) Close() error {
+// closes the client connection immediately. In-flight requests are interrupted.
+// err is sent to streams.
+func (cc *ClientConn) closeForError(err error) error {
cc.mu.Lock()
defer cc.cond.Broadcast()
defer cc.mu.Unlock()
- err := errors.New("http2: client connection force closed via ClientConn.Close")
for id, cs := range cc.streams {
select {
case cs.resc <- resAndError{err: err}:
@@ -866,6 +899,20 @@ func (cc *ClientConn) Close() error {
return cc.tconn.Close()
}
+// Close closes the client connection immediately.
+//
+// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
+func (cc *ClientConn) Close() error {
+ err := errors.New("http2: client connection force closed via ClientConn.Close")
+ return cc.closeForError(err)
+}
+
+// closes the client connection immediately. In-flight requests are interrupted.
+func (cc *ClientConn) closeForLostPing() error {
+ err := errors.New("http2: client connection lost")
+ return cc.closeForError(err)
+}
+
const maxAllocFrameSize = 512 << 10
// frameBuffer returns a scratch buffer suitable for writing DATA frames.
@@ -916,7 +963,7 @@ func commaSeparatedTrailers(req *http.Request) (string, error) {
k = http.CanonicalHeaderKey(k)
switch k {
case "Transfer-Encoding", "Trailer", "Content-Length":
- return "", &badStringError{"invalid Trailer key", k}
+ return "", fmt.Errorf("invalid Trailer key %q", k)
}
keys = append(keys, k)
}
@@ -1394,13 +1441,6 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error)
}
}
-type badStringError struct {
- what string
- str string
-}
-
-func (e *badStringError) Error() string { return fmt.Sprintf("%s %q", e.what, e.str) }
-
// requires cc.mu be held.
func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) {
cc.hbuf.Reset()
@@ -1616,6 +1656,7 @@ func (cc *ClientConn) writeHeader(name, value string) {
}
type resAndError struct {
+ _ incomparable
res *http.Response
err error
}
@@ -1663,6 +1704,7 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream {
// clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop.
type clientConnReadLoop struct {
+ _ incomparable
cc *ClientConn
closeWhenIdle bool
}
@@ -1742,8 +1784,17 @@ func (rl *clientConnReadLoop) run() error {
rl.closeWhenIdle = cc.t.disableKeepAlives() || cc.singleUse
gotReply := false // ever saw a HEADERS reply
gotSettings := false
+ readIdleTimeout := cc.t.ReadIdleTimeout
+ var t *time.Timer
+ if readIdleTimeout != 0 {
+ t = time.AfterFunc(readIdleTimeout, cc.healthCheck)
+ defer t.Stop()
+ }
for {
f, err := cc.fr.ReadFrame()
+ if t != nil {
+ t.Reset(readIdleTimeout)
+ }
if err != nil {
cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err)
}
@@ -2479,6 +2530,7 @@ func (rt erringRoundTripper) RoundTrip(*http.Request) (*http.Response, error) {
// gzipReader wraps a response body so it can lazily
// call gzip.NewReader on the first call to Read
type gzipReader struct {
+ _ incomparable
body io.ReadCloser // underlying Response.Body
zr *gzip.Reader // lazily-initialized gzip reader
zerr error // sticky error
diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go
index 369e44656..8e1c9d3dd 100644
--- a/vendor/golang.org/x/net/publicsuffix/table.go
+++ b/vendor/golang.org/x/net/publicsuffix/table.go
@@ -2,7 +2,7 @@
package publicsuffix
-const version = "publicsuffix.org's public_suffix_list.dat, git revision 7922d7c20e246552be418e8f72e577899fd30d99 (2020-02-18T23:18:19Z)"
+const version = "publicsuffix.org's public_suffix_list.dat, git revision dbe9da0a8abeab1b6257c57668d1ecb584189951 (2020-05-27T00:50:31Z)"
const (
nodesBitsChildren = 10
@@ -23,488 +23,490 @@ const (
)
// numTLD is the number of top level domains.
-const numTLD = 1528
+const numTLD = 1525
// Text is the combined text of all labels.
const text = "9guacuiababia-goracleaningroks-theatree12hpalermomahachijoinvill" +
- "eksvik12ix4432-balsfjordd-dnsiskinkyotobetsulikes-piedmonticello" +
- "dingen4tatarantours3-ap-south-16-b-dataiji234lima-cityeatselinog" +
- "radult3l3p0rtashkentatamotors3-ap-northeast-2038blackfridayuu2-l" +
- "ocalhostoregontrailroadnparachutingleezebloombergbauernirasakind" +
- "igenaklodzkochikushinonsenergyuzawabloxcms3-website-us-west-1blu" +
- "edagestangemologicallimoliseminebmoattachments3-website-us-west-" +
- "2bms5ybmweddinglitchattanooganordlandrangedalinkyard-cloudyclust" +
- "erbnrwedeploybomloabathsbchernihivgubsakyotanabellunord-aurdalph" +
- "a-myqnapcloudaccesscambridgestoneuesalangenishiazaindustriabondr" +
- "ay-dnsupdaternopilawatchesalondonetskaruizawabonnishigohtawaramo" +
- "toineppueblockbustermezparaglidingliwicebookinghostfoldnavybooml" +
- "air-traffic-controlleyboschaefflerdalivornomutashinaindustrieste" +
- "amfamberkeleybostikarumaifarmsteadrayddnsfreebox-osascoli-piceno" +
- "rdre-landraydnsaltdalombardynaliaskimitsubatamibudejjuegoshikiho" +
- "kumakogenebakkeshibechambagriculturennebugattiffanynysadoes-itve" +
- "destrandrivefsnillfjordrobaknoluoktachikawakembuchikumagayagawak" +
- "kanaibetsubamericanfamilydsclouderackmazerbaijan-mayen-rootaribe" +
- "iraogashimadachicagoboatsaludrudupontariobranconakamuratajirivne" +
- "bostonakijinsekikogentappsselfiparisor-fronishiharabotanicalgard" +
- "enishiizunazukinfinitintuitjomeloyalistoragebotanicgardenishikat" +
- "aketomisatomobellevuelosangelesjabbottjxfinitybotanybouncemerckm" +
- "sdnipropetrovskjervoyageorgeorgiabounty-fullensakerrypropertiesa" +
- "lvadordalibabalestrandabergamo-siemensncfdurbanamexnethnologybou" +
- "tiquebechernivtsiciliabozen-sudtirolomzaporizhzhegurinuyamashina" +
- "tsukigatakasakitaurayasudabozen-suedtirolondrinamsskoganeinvestm" +
- "entsalzburglobalashovhachinohedmarkasaokamiminersamegawabplacedo" +
- "gawarabikomaezakirunorddalorenskogloboavistanbulsan-sudtiroloten" +
- "kawabrandywinevalleybrasiliabrindisibenikimobetsuitainaioiraseba" +
- "stopologyeongnamegawafflecellclaimsamnangerbristoloseyouriparlia" +
- "mentkmaxxjavald-aostarnberglogowegroweibolognagareyamakeupowiath" +
- "letajimabaridagawakuyabukikonaikawachinaganoharamcoachampionship" +
- "hoptobishimadridvagsoyerbritishcolumbialowiezaganishikatsuragit-" +
- "reposampalacebroadcastleclerchernovtsymantechnologybroadwaybroke" +
- "-itksatxn--0trq7p7nnishikawazukamisunagawabrokerbronnoysundurham" +
- "burgloppenzaolbia-tempio-olbiatempioolbialystokkepnogatagajoboji" +
- "nzais-a-candidatebrothermesaverdealstahaugesunderseaportsinfolld" +
- "alottebrowsersafetymarketsamsclubartoweirbrumunddalottokonamegat" +
- "akayamashikokuchuobrunelasticbeanstalkashibatakatoris-a-catererb" +
- "russelsamsunglugmbhartipscbgminakamichiharabruxellesandnessjoeni" +
- "shimerabryansklepparmatta-varjjatmparochernigovernmentoyosatoyok" +
- "awabrynewjerseybuskerudinewmexicoalouvreitoyotaparsandoybuzentsu" +
- "jiiebuzzwellbeingzonebwfarsundweberbzhitomirumalatvuopmicrolight" +
- "ingmodellingmxn--11b4c3dynathomebuiltwithdarkashiharabzzcolumbus" +
- "heycommunecommunity-prochowicecomoarekecomparemarkerryhotelsanta" +
- "mariakecompute-1computerhistoryofscience-fictioncomsecuritytacti" +
- "csantoandreamhostersanukis-a-cubicle-slavellinodearthachiojiyaho" +
- "oguycondoshichinohealth-carereforminamidaitomanchesterconference" +
- "constructionconsuladonnagatorodoyconsultanthropologyconsultingro" +
- "ngausdalukowhalingrossetouchihayaakasakawaharacontactraniandriab" +
- "arlettatraniandriacontagematsubaracontemporaryarteducationalchik" +
- "ugodontexistmein-iservebeercontractorskenconventureshinodebalanc" +
- "ertificationcookingchannelsdvrdnsfor-better-thanawassamukawatari" +
- "ghtathomeftpartycooluroycooperativano-frankivskolegallocus-3cope" +
- "nhagencyclopedichitosetogakushimotoganewyorkshirecifedexhibition" +
- "ishinoomotegocorsicafederationcorvettemp-dnsaobernardocosenzakop" +
- "anecosidnshome-webserverdalutskasuyameinforumzcostumedicinaharim" +
- "alopolskanlandyndns-office-on-the-webhareidsbergentingroundhandl" +
- "ingroznycouchpotatofriesaogoncarriercounciluxurycouponsaotomelda" +
- "luzerncq-acranbrookuwanalyticsapporocrdyndns-picsardegnaroycredi" +
- "tcardyndns-remotewdyndns-serverisigncreditunioncremonashgabadadd" +
- "jaguarqcxn--12c1fe0bradescorporationrendercrewhoswhokksundyndns-" +
- "webhopencraftranoycricketrzyncrimeast-kazakhstanangercrotonecrow" +
- "nipasadenarashinocrsvpassagensardiniacruisesarlvivanovoldacrypto" +
- "nomichigangwoncuisinellajollamericanexpressexyculturalcentertain" +
- "mentransportecuneocupcakecuritibaghdadyndns-wikirkenesarpsborgrp" +
- "assenger-associationcymrussiacyonabaruminamiechizencyouthruherec" +
- "ipescaravantaarpatriaferrerotikagoshimalvikaszubyfetsundyndns1fg" +
- "uidegreefhvalerfidoomdnstracefieldynnsarufutsunomiyawakasaikaita" +
- "koelnfigueresinstaginguitarsauheradynservebbsasayamayfirstockhol" +
- "mestrandyndns-workshopitsitexaskoyabearalvahkijobservableusercon" +
- "tentransurlfilateliafilegear-audnedalnfilegear-deatnulminamiiser" +
- "niafilegear-gbizfilegear-iefilegear-jpmorganfilegear-sgujohanama" +
- "kinoharafilminamiizukamiokameokameyamatotakadafinalfinancefinear" +
- "tsavannahgafinlandynufcfanfinnoyfirebaseapplinzis-a-doctorayfire" +
- "nzefirestonefirmdalegoldpoint2thisamitsukefishingolffansaves-the" +
- "-whalessandria-trani-barletta-andriatranibarlettaandriafitjarvod" +
- "kafjordynv6fitnessettlementravelersinsurancefjalerflesbergulenfl" +
- "ickragerogersavonarusawaflightsaxoflirfloginlinefloraflorenceflo" +
- "ridattorelayfloripaderbornfloristanohatakaharulvikatowicefloroku" +
- "nohealthcareerschoenbrunnflowerschokokekschokoladenfltrdynvpnplu" +
- "s-4flynnhosting-clusterflynnhubarcelonagawalesundgcagliaricoharu" +
- "ovataxihuanflfanfshostrowwlkpmgjerdrumemsettsupportcp4fndyroyrvi" +
- "kingruefor-ourfor-somedizinhistorischescholarshipschoolschulefor" +
- "-theaterforexrothachirogatakamoriokakudamatsueforgotdnschwarzgwa" +
- "ngjuniperforli-cesena-forlicesenaforlikescandyn53forsaleikangerf" +
- "orsandasuologoipaviancargodaddyn-o-saurlandeschweizfortalfortmis" +
- "soulancasterfortworthadanorthwesternmutualfosnesciencecenterscie" +
- "ncehistoryfotaruis-a-financialadvisor-aurdalfoxfordebianfozorafr" +
- "edrikstadtvscientistordalfreeddnsgeekgalaxyfreedesktopocznore-og" +
- "-uvdalfreemasonryfreesitextileirfjordfreetlscjohnsonfreiburgunma" +
- "nxn--12co0c3b4evalleaostavangerfreightrentin-sud-tirolfreseniusc" +
- "ountryestateofdelawareggio-calabriafribourguovdageaidnunusualper" +
- "sonfriuli-v-giuliafriuli-ve-giuliafriuli-vegiuliafriuli-venezia-" +
- "giuliafriuli-veneziagiuliafriuli-vgiuliafriuliv-giuliafriulive-g" +
- "iuliafriulivegiuliafriulivenezia-giuliafriuliveneziagiuliafriuli" +
- "vgiuliafrlfroganscotlandfrognfrolandfrom-akrehamnfrom-alfrom-arf" +
- "rom-azimutheworkpccwiiheyakagefrom-capebretonamicrosoftbankatsus" +
- "hikabeeldengeluidfrom-codyn-vpndnscrapper-sitefrom-ctrentin-sudt" +
- "irolfrom-dchocolatelevisionishinoshimatsushigefrom-dedyn-berlinc" +
- "olnfrom-flanderscrappingushikamifuranorth-kazakhstanfrom-gaulard" +
- "alfrom-hichisochildrensgardenfrom-iafrom-idfrom-ilfrom-in-brbarc" +
- "laycards3-sa-east-1from-kscrysechofunatoriginstitutemasekashiwaz" +
- "akiyosatokamachintaifun-dnsdojolsterfrom-kyowariasahikawawildlif" +
- "edorainfracloudfrontdoorfrom-lanciafrom-mamurogawafrom-mdfrom-me" +
- "eresistancefrom-mifunefrom-mnfrom-modalenfrom-mserveirchonanbuls" +
- "an-suedtirolowiczest-le-patronishiokoppegardyndns-at-homedepoten" +
- "zamamidsundyndns-at-workisboringrimstadyndns-blogdnsangofrom-mtn" +
- "from-nctulangevagrigentomologyeonggiehtavuoatnadexeterfrom-ndfro" +
- "m-nefrom-nh-serveblogsiteleafamilycompanyminamimakis-a-geekatsuy" +
- "amarugame-hostrowiechoseiroumuenchenishitosashimizunaminamibosog" +
- "ndalpusercontentoyotsukaidofrom-njaworznoticiasnesoddenmarkhange" +
- "lskjakdnepropetrovskiervaapsteiermarkaufenfrom-nminamiminowafrom" +
- "-nvalled-aostavernfrom-nyfrom-ohkurafrom-oketogurafrom-orfrom-pa" +
- "dovaksdalfrom-pratohmandalfrom-ris-a-greenfrom-schmidtre-gauldal" +
- "from-sdfrom-tnfrom-txn--1ck2e1barclays3-us-east-2from-utazuerich" +
- "ardlillehammerfeste-ipfizerfrom-val-daostavalleyfrom-vtrentin-su" +
- "ed-tirolfrom-wafrom-wielunnerfrom-wvalledaostaobaomoriguchiharah" +
- "kkeravjuedischesapeakebayernunzenfrom-wyfrosinonefrostalowa-wola" +
- "wafroyahikobeardubaiduckdnserveminecraftrentin-suedtirolfstcgrou" +
- "pgfoggiafujiiderafujikawaguchikonefujiminokamoenairguardiannakad" +
- "omarineat-urlfujinomiyadavvenjargap-northeast-3fujiokayamangonoh" +
- "ejis-a-guruslivinghistoryfujisatoshonairlinebraskauniversitychya" +
- "ttorneyagawakayamagazinedre-eikerfujisawafujishiroishidakabirato" +
- "ridefenseljordfujitsurugashimangyshlakasamatsudovre-eikerfujixer" +
- "oxn--1ctwolominamatargivestbytemarkautokeinotteroyfujiyoshidavve" +
- "siidatsunanjoburgwiddleitungsenfukayabeatservemp3fukuchiyamadaza" +
- "ifudaigojomedio-campidano-mediocampidanomediofukudominichoshibuy" +
- "achiyodatingripefukuis-a-hard-workerservep2pharmacienservepicser" +
- "vequakefukumitsubishigakisarazurecontainerdpolicefukuokazakishiw" +
- "adafukuroishikarikaturindalfukusakisofukushimaniwakuratefukuyama" +
- "gatakahatakaishimogosenfunabashiriuchinadafunagatakamatsukawafun" +
- "ahashikamiamakusatsumasendaisennangooglecodespotrentino-a-adigef" +
- "undaciofuoiskujukuriyamannorfolkebibleirvikazoologyfuosskoczowil" +
- "liamhillfurnitureggio-emilia-romagnakasatsunairportland-4-salern" +
- "oboribetsuckservesarcasmatartanddesignfurubirafurudonostiaafuruk" +
- "awairtelebitballooningxn--1lqs03nfusodegaurafussagamiharafutabay" +
- "amaguchinomigawafutboldlygoingnowhere-for-morenakatombetsumitaka" +
- "giizefuttsurugimperiafuturecmservicesevastopolefuturehostingfutu" +
- "remailingfvgfylkesbiblackbaudcdn77-securebungoonord-odalwaysdata" +
- "baseballangenkainanaejrietisalatinabenonicbcn-north-1fyresdalhan" +
- "goutsystemscloudhannanmokuizumodenakayamapartmentsewinbarefootba" +
- "llfinanzgoraustrheimatunduhrennesoyokozebinagisoccertmgretakaham" +
- "alselvendrellaziobiramusementdllpages3-ap-southeast-2hannosegawa" +
- "hanyuzenhapmirharstadharvestcelebrationhasamarburghasaminami-alp" +
- "sharis-a-lawyerhashbanghasudahasura-appharmacysharphdfcbankddiel" +
- "ddanuorrittogliattireshawaiijimaritimoduminamioguni5hasvikfhappo" +
- "usrcfastly-terrariuminamifuranohatogayaitakanezawahatoyamazakita" +
- "kamiizumisanofidelityhatsukaichikaiseis-a-liberalhattfjelldalhay" +
- "ashimamotobungotakadancehazuminobusells-for-ustkannamilanotogawa" +
- "helsinkitakatakaokalmykiahembygdsforbundhemneshellaspeziahemseda" +
- "lhepforgeherokussldheroyhgtvallee-aosteroyhigashiagatsumagoiania" +
- "higashichichibunkyonanaoshimageandsoundandvisionthewifiatmallorc" +
- "adaqueshimojis-a-libertarianhigashihiroshimanehigashiizumozakita" +
- "kyushuaiahigashikagawahigashikagurasoedahigashikawakitaaikitamih" +
- "amadahigashikurumeetnedalhigashimatsushimarcheapigeelvinckhakass" +
- "iahigashimatsuyamakitaakitadaitoigawahigashimurayamamotorcyclesh" +
- "imokawahigashinarusells-itrentino-alto-adigehigashinehigashiomih" +
- "achimanagementrentino-altoadigehigashiosakasayamanakakogawahigas" +
- "hishirakawamatakarazukaluganskygearapphiladelphiaareadmyblogspot" +
- "rentino-s-tirolhigashisumiyoshikawaminamiaikitamotosumy-gatewayh" +
- "igashitsunoshiroomurahigashiurausukitanakagusukumodernhigashiyam" +
- "atokoriyamanashifteditchyouriphilatelyhigashiyodogawahigashiyosh" +
- "inogaris-a-linux-useranishiaritabashijonawatehiraizumisatohnosho" +
- "ooshikamaishimodatehirakatashinagawahiranairtrafficplexus-1hirar" +
- "ahiratsukagawahirayaizuwakamatsubushikusakadogawahistorichousesh" +
- "imokitayamahitachiomiyagildeskaliszhitachiotagoppdalhitraeumtger" +
- "adelmenhorstalbanshimonitayanagithubusercontentrentino-stirolhja" +
- "rtdalhjelmelandholeckobierzyceholidayhomeiphilipsyno-dshimonosek" +
- "ikawahomelinkitoolsztynsettlershimosuwalkis-a-llamarriottrentino" +
- "-sud-tirolhomelinuxn--1lqs71dhomeofficehomesecuritymacaparecidah" +
- "omesecuritypchoyodobashichikashukujitawaravennagasukehomesenseer" +
- "inghomeunixn--1qqw23ahondahongotembaixadahonjyoitakasagotpantheo" +
- "nsitehornindalhorsellsyourhomegoodshimotsukehorteneis-a-musician" +
- "hospitalhoteleshimotsumahotmailhoyangerhoylandetroitskypehumanit" +
- "ieshinichinanhurdalhurumajis-a-nascarfanhyllestadhyogoris-a-nurs" +
- "embokukitchenhyugawarahyundaiwafuneis-very-sweetpepperis-with-th" +
- "ebandoisleofmanaustdaljewelryjewishartgalleryjfkharkovalleedaost" +
- "ejgorajlljmphotographysiojnjcphonefosshintomikasaharajoyentrenti" +
- "noa-adigejoyokaichibalatinogiftshiojirishirifujiedajpnjprshioyan" +
- "aizujurkoseis-a-personaltrainerkosherbrookegawakoshimizumakizuno" +
- "kunimimatakatsukiyosemitekoshunantankhmelnitskiyamarumorimachida" +
- "kosugekotohiradomainsurehabmerkotourakouhokutamakis-a-photograph" +
- "erokuapphoenixn--2m4a15ekounosupplieshirakofuefukihaboromskogkou" +
- "yamarylhurstjordalshalsenkouzushimasfjordenkozagawakozakis-a-pla" +
- "yerkozowindmillkpnkppspdnshiranukamitsuekrasnikahokutokashikis-a" +
- "-republicancerresearchaeologicaliforniakrasnodarkredstonekristia" +
- "nsandcatshiraois-a-rockstarachowicekristiansundkrodsheradkroksta" +
- "delvaldaostarostwodzislawindowskrakowinnershiraokamogawakryminam" +
- "isanrikubetsurfastpanelblagrarchaeologyeongbuk0emmafann-arboretu" +
- "mbriamallamaceiobbcg120001wwwebredirectmembers3-ap-northeast-133" +
- "7kumatorinokumejimashikis-a-socialistdlibestadkumenantokigawakun" +
- "isakis-a-soxfankunitachiarailwaykunitomigusukumamotoyamashikekun" +
- "neppubtlshiratakahagitlaborkunstsammlungkunstunddesignkuokgroupi" +
- "lotshishikuis-a-studentalkureisenkurgankurobelaudibleasingleshis" +
- "ognekurogiminamiashigarakuroisoftwarendalenugkuromatsunais-a-tea" +
- "cherkassyncloudkurotakikawasakis-a-techietis-a-painteractivegask" +
- "vollkushirogawakustanais-a-therapistoiakusupplykutchanelkutnokuz" +
- "umakis-an-accountantshinjournalismailillesandefjordkvafjordkvals" +
- "undkvamlidlugolekadenagahamaroygardendoftheinternetlifyis-an-act" +
- "orkvanangenkvinesdalkvinnheradkviteseidskogkvitsoykwpspectrumina" +
- "mitanekzmissileluxembourgmisugitokorozawamitourismolanxesshisuif" +
- "uettertdasnetzmitoyoakemiuramiyazurewebsiteshikagamiishibukawami" +
- "yotamanomjondalenmlbfanmonstermontrealestatefarmequipmentrentino" +
- "aadigemonza-brianzapposhitaramamonza-e-della-brianzaptokuyamatsu" +
- "maebashikshacknetrentinoalto-adigemonzabrianzaramonzaebrianzamon" +
- "zaedellabrianzamoonscalevangermordoviamoriyamatsumotofukemoriyos" +
- "himinamiawajikis-an-engineeringmormonmouthaebaruericssongdalenvi" +
- "knakatsugawamoroyamatsunomortgagemoscowioshizukuishimofusaitamat" +
- "sukuris-an-entertainermoseushistorymosjoenmoskeneshizuokanagawam" +
- "osshoppingmosvikhplaystationmoteginowaniihamatamakawajimansionsh" +
- "oujis-bytomaritimekeepingmoviemovimientokyotangovtrentinoaltoadi" +
- "gemozilla-iotrentinos-tirolmtranbymuenstermuginozawaonsenmuikami" +
- "satokaizukamikitayamatsuris-certifieducatorahimeshimamateramobar" +
- "amukodairamulhouseoullensvanguardmunakatanemuncienciamuosattemup" +
- "imientakinouemurmansklabudhabikinokawabarthadselectrentino-aadig" +
- "emurotorcraftrentinostirolmusashimurayamatsusakahoginankokubunji" +
- "s-foundationmusashinoharamuseetrentinosud-tirolmuseumverenigingm" +
- "usicarbonia-iglesias-carboniaiglesiascarboniamutsuzawamy-vigorge" +
- "my-wanggouvichromedicaltanissettairamyactivedirectorymyasustor-e" +
- "lvdalmycdn77-sslattuminamiuonumassa-carrara-massacarraramassabus" +
- "inessebyklecznagasakinderoymydattolocalhistorymyddnskingmydissen" +
- "trentinosudtirolmydobisshikis-gonemydroboehringerikemydshowamyef" +
- "fectrentinosued-tirolmyfirewallonieruchomoscienceandindustrynmyf" +
- "oruminamiyamashirokawanabelembetsukubankhmelnytskyivanylvenicemy" +
- "fritzmyftpaccesshowtimelhusdecorativeartshriramsterdamnserverban" +
- "iamyhome-servermyjinomykolaivaomymailermymediapchungnamdalseidfj" +
- "ordyndns-ipartis-a-chefashionishiwakis-a-conservativegarsheis-a-" +
- "cpadualstackhero-networkinggroupartsannanissandiegomyokohamamats" +
- "udamypepinkmpspbargainstantcloudfunctionswedenvironmentalconserv" +
- "ationionjukudoyamaintenancempresashibetsukuiiyamanouchikuhokuryu" +
- "gasakitashiobarauthordalanddnslivelanddnss3-eu-west-1mypetsienar" +
- "utolgamyphotoshibalena-devicesigdalmypictetrentinosuedtirolmypsx" +
- "n--30rr7ymysecuritycamerakermyshopblocksilknx-serverrankoshigaya" +
- "nagawamytis-a-bloggermytuleapioneermyvnchurcharternidyndns-mailu" +
- "bindalublindesnesannohelplfinancialucaniamywirepaircraftingvollo" +
- "mbardiamondsimple-urlpizzapkolobrzegersundplantsirdalplatformsha" +
- "ngrilapyplazaplcube-serversaillesjcbnpparibaselburgplumbingoplur" +
- "inacionalpodhalewismillerpodlasiellaktyubinskiptveterinaireadthe" +
- "docscappgafannefrankfurtrentinsud-tirolpodzonepohlpoivronpokerpo" +
- "krovskomaganepoliticarrdpolitiendapolkowicepoltavalle-aostathell" +
- "ezajskomakiyosunndalpomorzeszowitdkomatsushimarylandponpesaro-ur" +
- "bino-pesarourbinopesaromasvuotnaritakurashikis-into-animeguroros" +
- "hinkamigotoyohashimototalponypordenonepornporsangerporsangugepor" +
- "sgrunnanyokoshibahikariwanumatakkoebenhavnpoznanpraxis-a-bookkee" +
- "perspectakashimarnardalprdpreservationpresidioprgmrprimelbournep" +
- "rincipeprivatizehealthinsuranceproductionslupskomforbarreauction" +
- "-webhostingjerstadotsuruokakamigaharautomotiveconomiasakuchinots" +
- "uchiurakawalbrzycharitysfjordds3-eu-west-2profesionalprogressive" +
- "nneslaskerrylogisticslzpromombetsurgeonshalloffameiwamasoyproper" +
- "typrotectionprotonetrentinsudtirolprudentialpruszkowithgoogleapi" +
- "sa-hockeynutsiracusakatamayufuelveruminanoprvcyberlevagangaviika" +
- "nonjis-into-carshinshinotsurgeryprzeworskogptplusgardenpulawypup" +
- "ippugliapvhagakhanamigawapvtrentinsued-tirolpwcircustomer-ocimdb" +
- "ananarepublicaseihicampobassociatest-iservecounterstrikehimejibm" +
- "deportevadsobetsumidatlanticasertaipeiheijiitatebayashiibajddarc" +
- "hitecturealtorlandevelopmentattoobservereviewsaintlouis-a-bruins" +
- "fanayorovnoceanographics3-fips-us-gov-west-1pzqhagebostadqldqpon" +
- "iatowadaqslingqualifioappiszquickconnectrentinsuedtirolquicksyte" +
- "stingquipelementsnoasaitoshimattelekommunikationqvcistrondheimmo" +
- "bilienissayokkaichiropractichirurgiens-dentistes-en-francesuzaka" +
- "nazawasuzukaneyamazoesuzukis-leetrentino-sudtirolsvalbardunloppa" +
- "cificitichiryukyuragifuchungbukharaumalborkashiwarasveiosvelviko" +
- "morotsukaminoyamaxunjargasvizzerasvn-reposomnarviikamishihoronob" +
- "eauxartsandcraftsokndalswidnicartoonartdecologiaswidnikkokaminok" +
- "awanishiaizubangeswiebodzin-butterswiftcoverswinoujscienceandhis" +
- "toryswissmarterthanyousynology-diskstationsynology-dsooturystyka" +
- "nmakiwientuscanytushuissier-justicetuvalle-daostaticsor-varanger" +
- "tuxfamilytwmailvestfoldvestnesorfoldvestre-slidreplantationvestr" +
- "e-totennishiawakuravestvagoyvevelstadvibo-valentiavibovalentiavi" +
- "deovillasorocabalsan-sudtirollagdenesnaaseinet-freaksolarssonvin" +
- "nicasacamdvrcampinagrandebuilderschlesischesorreisahayakawakamii" +
- "chikawamisatottoris-into-cartoonshinshirovinnytsiavipsinaappitts" +
- "burghofficialvirginiavirtual-userveftpiwatevirtualservervirtualu" +
- "servegame-servervirtueeldomein-vigorlicevirtuelvisakegawaviterbo" +
- "knowsitallvivolkenkundenvixn--32vp30haibarakitahatakanabeautysva" +
- "rdoesntexisteingeekazunow-dnsevenassisicilyvlaanderenvladikavkaz" +
- "imierz-dolnyvladimirvlogintoyonezawavminiserversicherungvologdan" +
- "skongsbergvolvolkswagentsortlandvolyngdalvoorloperauniterois-los" +
- "trolekamakurazakiwakunigamiharutwentevossevangenvotevotingvotoyo" +
- "nowloclawekongsvingerwmflabsorumincomcastresindevicenzaporizhzhi" +
- "awnextdirectrogstadworldworse-thandawowithyoutuberspacekitagatar" +
- "getmyiphostrodawarawpdevcloudwritesthisblogsytewroclawiwatsukiyo" +
- "notairestaurantroandinosaurepbodynamic-dnsopotrentoyonakagyokuto" +
- "yakokonoewtcminnesotaketakazakis-an-actresshinjukumanowtvallee-d" +
- "-aosteigenwtfastvps-serveronakanotoddenwuozuwzmiuwajimaxn--3oq18" +
- "vl8pn36axn--3pxu8koninjambylxn--42c2d9axn--45br5cylxn--45brj9civ" +
- "ilisationisshinguccircleverappsanokasukabedzin-berlindasdaburxn-" +
- "-45q11civilizationiyodogawaxn--4gbriminingxn--4it168dxn--4it797k" +
- "onskowolayangroupictureshirahamatonbetsurnadalxn--4pvxs4allxn--5" +
- "4b7fta0ccivilwarmiastagets-itozsdeltajimidorissagaeroclubmedecin" +
- "cinnationwidealerxn--55qw42gxn--55qx5dxn--5js045dxn--5rtp49clanb" +
- "ibaidarmeniaxn--5rtq34konsulatrobeepilepsykkylvenetodayxn--5su34" +
- "j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlx" +
- "n--7t0a264cldmailovecollegefantasyleaguernseyxn--80adxhksoundcas" +
- "tronomy-routerxn--80ao21axn--80aqecdr1axn--80asehdbarrell-of-kno" +
- "wledgeiseiyoichippubetsubetsugarugbyglandroverhalla-speziautosca" +
- "nadaeguambulanceobninskaracoldwarszawaukraanghkeymachinewhampshi" +
- "realtydalaskanittedallasalleangaviikaascolipicenodumemergencyach" +
- "ts3-ca-central-1xn--80aswgxn--80augustownproviderxn--8ltr62konyv" +
- "elolipopiemontexn--8pvr4uxn--8y0a063axn--90a3academiamicaaarbort" +
- "eaches-yogasawaracingxn--90aeroportalabamagasakishimabaraogakibi" +
- "chuoxn--90aishobarakawagoexn--90azhytomyravendbarsycenterprisesa" +
- "kikuchikuseikarugamvikarasjokarasuyamarshallstatebankaratemrhclo" +
- "udiscountyombolzano-altoadigeometre-experts-comptables3-us-west-" +
- "1xn--9dbhblg6dietciprianiigataishinomakinkobayashikaoirmitakehar" +
- "axn--9dbq2axn--9et52uxn--9krt00axn--andy-iraxn--aroport-byandexc" +
- "loudxn--asky-iraxn--aurskog-hland-jnbarsyonlinewhollandiscourses" +
- "3-us-west-2xn--avery-yuasakuhokkaidownloadxn--b-5gaxn--b4w605fer" +
- "dxn--balsan-sdtirol-nsbsouthcarolinarvikommunexn--bck1b9a5dre4cl" +
- "ickasumigaurawa-mazowszextraspace-to-rentalstomakomaibaraxn--bdd" +
- "dj-mrabdxn--bearalvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--b" +
- "hccavuotna-k7axn--bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fy" +
- "aotsurreyxn--bjddar-ptarnobrzegyptianxn--blt-elabourxn--bmlo-gra" +
- "ingerxn--bod-2natalxn--bozen-sdtirol-2obanazawaxn--brnny-wuacade" +
- "my-firewall-gatewayxn--brnnysund-m8accident-investigation-aptibl" +
- "eadpagest-mon-blogueurovision-k3southwestfalenxn--brum-voagatrom" +
- "sakakinokiaxn--btsfjord-9zaxn--bulsan-sdtirol-nsbashkiriaveroyke" +
- "ngerdalcesurancechirealmpmnavigationavoizumizakibigawaurskog-hol" +
- "andingdyniaetnabudapest-a-la-masion-riopretobamaceratabuseating-" +
- "organicasadelamonedapliernewspapereportateshinanomachimkentateya" +
- "mabogadobeaemcloud66xn--c1avgxn--c2br7gxn--c3s14misakis-an-anarc" +
- "historicalsocietyxn--cck2b3basicservercelliguriavocatanzarowebsp" +
- "acebinordreisa-geekaragandaustevoll-o-g-i-natuurwetenschappenaum" +
- "burggfarmerseine164-baltimore-og-romsdalipayboltatsunobihirosaki" +
- "kamijimatsuuragrocerybnikeisenbahnaturhistorisches3-ap-southeast" +
- "-1kappchizip6xn--cckwcxetdxn--cesena-forl-mcbremangerxn--cesenaf" +
- "orl-i8axn--cg4bkis-not-certifiedugit-pagespeedmobilizeroticahces" +
- "uoloanshintokushimaxn--ciqpnxn--clchc0ea0b2g2a9gcdxn--comunicaes" +
- "-v6a2oxn--correios-e-telecomunicaes-ghc29axn--czr694basilicatani" +
- "avoues3-eu-west-3utilitiesquare7xn--czrs0tromsojamisonxn--czru2d" +
- "xn--czrw28basketballyngenhktjeldsundiscoveryomitanoceanographiqu" +
- "eu-1xn--d1acj3batochiokinoshimaizuruhrxn--d1alfaromeoxn--d1atrus" +
- "teexn--d5qv7z876clinichitachinakagawashtenawdev-myqnapcloudeitys" +
- "nesandvikcoromantovalle-d-aostatic-accessanfranciscofreakunemuro" +
- "rangehirnrtoyotomiyazakis-a-celticsfanishinomiyashironoxn--davve" +
- "njrga-y4axn--djrs72d6uyxn--djty4kooris-a-patsfanxn--dnna-grajewo" +
- "lterskluwerxn--drbak-wuaxn--dyry-iraxn--e1a4cliniquenoharaxn--ec" +
- "kvdtc9dxn--efvn9sowaxn--efvy88hair-surveillancexn--ehqz56nxn--el" +
- "qq16hakatanortonxn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct42" +
- "9kopervikhersonxn--fhbeiarnxn--finny-yuaxn--fiq228c5hspeedpartne" +
- "rsolognexn--fiq64batsfjordishakotanhlfanhs3-website-ap-northeast" +
- "-1xn--fiqs8spjelkavikomonowruzhgorodeoxn--fiqz9spreadbettingxn--" +
- "fjord-lraxn--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--forl-ce" +
- "sena-fcbsspydebergxn--forlcesena-c8axn--fpcrj9c3dxn--frde-grandr" +
- "apidsrlxn--frna-woaraisaijosoyrovigotsukisosakitagawaxn--frya-hr" +
- "axn--fzc2c9e2clintonoshoesantabarbaraxn--fzys8d69uvgmailxn--g2xx" +
- "48clothingdustdataitogitsuldalucernexn--gckr3f0fauskedsmokorseta" +
- "gayaseralingenoamishirasatogokasells-for-lessasebofageologyxn--g" +
- "ecrj9cn-northwest-1xn--ggaviika-8ya47hakodatexn--gildeskl-g0axn-" +
- "-givuotna-8yasakaiminatoyookaniepcexn--gjvik-wuaxn--gk3at1exn--g" +
- "ls-elacaixaxn--gmq050is-savedunetflixilxn--gmqw5axn--h-2failxn--" +
- "h1aeghakonexn--h2breg3evenesrvaporcloudxn--h2brj9c8cngroks-thisa" +
- "yamanobeokakegawaxn--h3cuzk1digitalxn--hbmer-xqaxn--hcesuolo-7ya" +
- "35bauhausposts-and-telecommunications3-website-ap-southeast-1xn-" +
- "-hery-iraxn--hgebostad-g3axn--hkkinen-5waxn--hmmrfeasta-s4accide" +
- "nt-prevention-rancherkasydneyxn--hnefoss-q1axn--hobl-iraxn--holt" +
- "len-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn" +
- "--i1b6b1a6a2exn--imr513nxn--indery-fyasugivingxn--io0a7is-slickh" +
- "arkivalleeaosteinkjerusalembroideryxn--j1aefbsbxn--12cfi8ixb8lxn" +
- "--j1amhakubahccavuotnagaraholtalenglandxn--j6w193gxn--jlq480n2rg" +
- "xn--jlq61u9w7beneventoeidsvollimanowarudaxaustinnaval-d-aosta-va" +
- "lleyokosukanumazuryokoteastcoastaldefenceatonsbergjemnes3-eu-cen" +
- "tral-1xn--jlster-byasuokanoyakumoldeloittenrikuzentakataiwanairf" +
- "orcebetsuikidsmynasushiobaragusartstorfjordxn--jrpeland-54axn--j" +
- "vr189misasaguris-an-artistgoryxn--k7yn95exn--karmy-yuaxn--kbrq7o" +
- "xn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn" +
- "--kltx9axn--klty5xn--3bst00mintelligencexn--koluokta-7ya57hakuis" +
- "-a-hunterxn--kprw13dxn--kpry57dxn--kpu716fbx-osaskatchewanxn--kp" +
- "ut3is-uberleetrentino-sued-tirolxn--krager-gyatomitamamuraxn--kr" +
- "anghke-b0axn--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49jdfa" +
- "stlylbanzaicloudcontrolledekagaminombresciaustraliajudaicable-mo" +
- "democraciabruzzoologicalvinklein-addrammenuorochesterimo-i-ranaa" +
- "mesjevuemielno-ipifonyc66xn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-" +
- "fyatsukanraxn--kvnangen-k0axn--l-1fairwindstorjdevcloudnshinyosh" +
- "itomiokamitondabayashiogamagoriziaxn--l1accentureklamborghinikol" +
- "aeventstpetersburgxn--laheadju-7yatsushiroxn--langevg-jxaxn--lcv" +
- "r32dxn--ldingen-q1axn--leagaviika-52bentleyonagoyaxn--lesund-hua" +
- "xn--lgbbat1ad8jelenia-goraxn--lgrd-poacctrvareservehalflifestyle" +
- "xn--lhppi-xqaxn--linds-pramericanartrycloudflarezzoxn--lns-qlaqu" +
- "ilanstreamswatch-and-clockerxn--loabt-0qaxn--lrdal-sraxn--lrensk" +
- "og-54axn--lt-liacnpyatigorskodjeffersonxn--lten-granexn--lury-ir" +
- "axn--m3ch0j3axn--mely-iraxn--merker-kuaxn--mgb2ddestudioxn--mgb9" +
- "awbfbxosassaris-a-democratrapaniizaxn--mgba3a3ejtrysiljanxn--mgb" +
- "a3a4f16axn--mgba3a4franamizuholdingstudynamisches-dnsolundbeckom" +
- "munalforbundxn--mgba7c0bbn0axn--mgbaakc7dvfedorapeoplegnicanonoi" +
- "chinomiyakexn--mgbaam7a8hakusanagochijiwadell-ogliastraderxn--mg" +
- "bab2bdxn--mgbah1a3hjkrdxn--mgbai9a5eva00beppublishproxyzgorzelec" +
- "coffeedbackplaneapplicationcloudappspotagerxn--mgbai9azgqp6jeonn" +
- "amerikawauexn--mgbayh7gpaleoxn--mgbbh1a71exn--mgbc0a9azcgxn--mgb" +
- "ca7dzdoxn--mgberp4a5d4a87gxn--mgberp4a5d4arxn--mgbgu82axn--mgbi4" +
- "ecexposedxn--mgbpl2fhskydivingxn--mgbqly7c0a67fbcnsantacruzsanta" +
- "fedjejuifmetlifeinsurancexn--mgbqly7cvafranziskanerimaringatlant" +
- "akahashimamakiryuohdattowebcampinashikiminohostre-totendofintern" +
- "et-dnsaliasiaxn--mgbt3dhdxn--mgbtf8flatangerxn--mgbtx2beskidyn-i" +
- "p24xn--mgbx4cd0abbvieeexn--mix082fedoraprojectravelchannelxn--mi" +
- "x891feiraquarelleaseeklogesaudaxn--mjndalen-64axn--mk0axin-dslgb" +
- "tunesor-odalxn--mk1bu44cntrani-andria-barletta-trani-andriaxn--m" +
- "kru45is-very-badajozxn--mlatvuopmi-s4axn--mli-tlarvikoryokamikaw" +
- "anehonbetsurutaharaxn--mlselv-iuaxn--moreke-juaxn--mori-qsakurag" +
- "awaxn--mosjen-eyawaraxn--mot-tlavagiskexn--mre-og-romsdal-qqbuse" +
- "rveexchangexn--msy-ula0haldenxn--mtta-vrjjat-k7aflakstadaokagaki" +
- "cks-assnasaarlandxn--muost-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngb" +
- "e9e0axn--ngbrxn--3ds443gxn--nit225kosaigawaxn--nmesjevuemie-tcba" +
- "lsan-suedtirolkuszczytnoipirangalsacexn--nnx388axn--nodessakurai" +
- "s-very-evillagexn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--nts" +
- "q17gxn--nttery-byaeservehttpixolinoxn--nvuotna-hwaxn--nyqy26axn-" +
- "-o1acheltenham-radio-openairbusantiquest-a-la-maisondre-landroid" +
- "xn--o3cw4halsaikitahiroshimaoris-a-knightpointtohobby-sitexn--o3" +
- "cyx2axn--od0algxn--od0aq3bestbuyshouses3-website-ap-southeast-2x" +
- "n--ogbpf8flekkefjordxn--oppegrd-ixaxn--ostery-fyawatahamaxn--osy" +
- "ro-wuaxn--otu796dxn--p1acfermochizukirovogradoyxn--p1ais-very-go" +
- "odyearxn--pbt977coguchikuzenxn--pgbs0dhlxn--porsgu-sta26ferrarax" +
- "n--pssu33lxn--pssy2uxn--q9jyb4collectionxn--qcka1pmckinseyxn--qq" +
- "qt11misconfusedxn--qxa6axn--qxamuneustargardxn--rady-iraxn--rdal" +
- "-poaxn--rde-ulavangenxn--rdy-0nabaris-very-nicexn--rennesy-v1axn" +
- "--rhkkervju-01aferraris-a-designerxn--rholt-mragowoodsidemoneyxn" +
- "--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5nativeamericanan" +
- "tiquestuff-4-salexn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rms" +
- "kog-byaxn--rny31hammarfeastafricapetownnews-stagingxn--rovu88bet" +
- "ainaboxfusejnyonagunicommbankaratsuginamikatagamilitaryoriikarel" +
- "ianceu-2xn--rros-granvindafjordxn--rskog-uuaxn--rst-0naturalhist" +
- "orymuseumcenterxn--rsta-francaiseharaxn--rvc1e0am3exn--ryken-vua" +
- "xn--ryrvik-byaxn--s-1faithamurakamigoris-a-landscaperugiaxn--s9b" +
- "rj9colognexus-2xn--sandnessjen-ogbhzcateringebuildingjesdalimite" +
- "diskussionsbereichaseljeepsondriodejaneirockartuzyoshiokanzakiyo" +
- "kawaraxn--sandy-yuaxn--sdtirol-n2axn--seral-lraxn--ses554gxn--sg" +
- "ne-gratangenxn--skierv-utazastufftoread-booksnesolutionsokananii" +
- "mihoboleslawiecitadeliveryggeexn--skjervy-v1axn--skjk-soaxn--skn" +
- "it-yqaxn--sknland-fxaxn--slat-5naturalsciencesnaturellestuttgart" +
- "revisohughesomaxn--slt-elabcieszynxn--smla-hraxn--smna-gratis-a-" +
- "bulls-fanxn--snase-nraxn--sndre-land-0cbieigersundisrechtraining" +
- "jovikariyaltakasugaincheonikonanporocpanamatsuzakindianapolis-a-" +
- "anarchistoireggiocalabriaxn--snes-poaxn--snsa-roaxn--sr-aurdal-l" +
- "8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbielawalmartjm" +
- "axxxboxenapponazure-mobileu-3xn--srfold-byaxn--srreisa-q1axn--sr" +
- "um-grazxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbiellaa" +
- "kesvuemielecceu-4xn--stre-toten-zcbieszczadygeyachimataikikugawa" +
- "ltervistaprinternationalfirearms3-website-eu-west-1xn--t60b56axn" +
- "--tckweatherchannelxn--tiq49xqyjetztrentino-suedtirolxn--tjme-hr" +
- "axn--tn0agrinetbankosakaerodromegallupinbarrel-of-knowledgestack" +
- "arasjohkamikoaniikappuboliviajessheimetacentrumeteorappalmaserat" +
- "in-the-bandain-vpncasinordkappalmspringsakerevistaples3-us-gov-w" +
- "est-1xn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trentin-sd-tirol" +
- "-rzbievat-band-campaniaxn--trentin-sdtirol-7vbifukagawashingtond" +
- "clkarlsoyukindianmarketingladefinimakanegasakiraxn--trentino-sd-" +
- "tirol-c3bigv-infoodnetworkangerxn--trentino-sdtirol-szbihorology" +
- "ukuhashimoichinosekigaharaxn--trentinosd-tirol-rzbikedaejeonbukl" +
- "ugsmileborkdalvdalaheadjudygarlandivtasvuodnakaiwamizawatchandcl" +
- "ockarmoyurihonjournalistjohninohekinannestadivttasvuotnakamagaya" +
- "habahcavuotnagaivuotnagaokakyotambabydgoszczecinemagentositelema" +
- "rkarpaczeladzjampagefrontappanasonicatholicaxiashorokanaievje-og" +
- "-hornnes3-website-sa-east-1xn--trentinosdtirol-7vbilbaokinawashi" +
- "rosatochigiessensiositecnologiaxn--trentinsd-tirol-6vbillustrati" +
- "onredumbrellahppiacenzachpomorskieninomiyakonojorpelandiyusuhara" +
- "xn--trentinsdtirol-nsbioddaxn--trgstad-r1axn--trna-woaxn--troms-" +
- "zuaxn--tysvr-vraxn--uc0atvarggatritonxn--uc0ay4axn--uist22handso" +
- "nyoursidellogliastradingxn--uisz3gxn--unjrga-rtarumizusawaxn--un" +
- "up4yxn--uuwu58axn--vads-jraxn--valle-aoste-ebbtunkomvuxn--2scrj9" +
- "christmasakindlefrakkestadyndns-homednsanjotoyouraxn--valle-d-ao" +
- "ste-ehbodollsusakis-into-gamessinazawaxn--valleaoste-e7axn--vall" +
- "edaoste-ebbvacationsusonoxn--vard-jraxn--vegrshei-c0axn--vermgen" +
- "sberater-ctbirdartcenterprisecloudcontrolapplebtimnetzlglassassi" +
- "nationalheritagexn--vermgensberatung-pwbirkenesoddtangenovaranza" +
- "nquanpachigasakievennodesabaerobatickets3-website-us-east-1xn--v" +
- "estvgy-ixa6oxn--vg-yiabkhaziaxn--vgan-qoaxn--vgsy-qoa0jevnakersh" +
- "uscultureggioemiliaromagnamsosnowiechristiansburgriwataraidyndns" +
- "-freeboxosloftranakaniikawatanaguraxn--vgu402colonialwilliamsbur" +
- "grondarxn--vhquvaroyxn--vler-qoaxn--vre-eiker-k8axn--vrggt-xqadx" +
- "n--vry-yla5gxn--vuq861birthplacexn--w4r85el8fhu5dnraxn--w4rs40lx" +
- "n--wcvs22dxn--wgbh1coloradoplateaudioxn--wgbl6axn--xhq521bjarkoy" +
- "usuisservehumourxn--xkc2al3hye2axn--xkc2dl3a5ee0hangglidingxn--y" +
- "9a3aquariumishimasudaxn--yer-znaturbruksgymnxn--yfro4i67oxn--yga" +
- "rden-p1axn--ygbi2ammxn--3e0b707exn--ystre-slidre-ujbjerkreimbamb" +
- "lebesbyeniwaizumiotsukumiyamazonawsmpplanetariumemorialillyolasi" +
- "tebizenakanojoetsuwanouchikujogaszkolancashirecreationavuotnaple" +
- "s3-external-1xn--zbx025dxn--zf0ao64axn--zf0avxn--3hcrj9civilavia" +
- "tionissedaluccapitalonewportlligatoystre-slidrettozawaxn--zfr164" +
- "bjugnieznord-frontierxnbayxz"
+ "eksvikaracoldwarszawabogadobeaemcloud66bjarkoyusuharabjerkreimdb" +
+ "altimore-og-romsdalipayokozebizenakanotoddenavuotnarashinobninsk" +
+ "aragandaustevoll-o-g-i-naval-d-aosta-valleyboltateshinanomachimk" +
+ "entateyamagrocerybnikeisenbahn4tatarantours3-ap-northeast-2ix443" +
+ "2-balsan-suedtirolkuszczytnoipirangamvik12bjugnieznord-frontierb" +
+ "lackfridayusuisservehumourbloombergbauernishiazaindielddanuorrin" +
+ "digenamsosnowiechernihivgubs3-website-sa-east-1bloxcms3-website-" +
+ "us-east-1bluedaemoneyuu2-localhostoregontrailroadrayddnsfreebox-" +
+ "osascoli-picenordre-landraydns3-website-us-west-1bmoattachments3" +
+ "-website-us-west-2bms5yuzawabmwedeploybnrwegroweibolognagasakind" +
+ "eroybomloabathsbchernivtsiciliabondrivefsnillfjordrobaknoluoktac" +
+ "hikawakuyabukievennodesadoes-itvedestrandrudupontariobranconakan" +
+ "iikawatanagurabonnishigoddabookinghostfoldnavyboomlair-traffic-c" +
+ "ontrolleyboschaefflerdalivornohtawaramotoineppueblockbustermezja" +
+ "mpagefrontapparachutinglobalashovhachinohedmarkarpaczeladzlglobo" +
+ "avistanbulsan-sudtirolombardynaliaskimitsubatamibugattiffanycher" +
+ "novtsymantechnologybostikaruizawabostonakijinsekikogentappsselfi" +
+ "paraglidinglogoweirbotanicalgardenishiharabotanicgardenishiizuna" +
+ "zukindustriabotanynysagaeroclubmedecincinnationwidealerbouncemer" +
+ "ckmsdnipropetrovskjervoyageometre-experts-comptablesakyotanabell" +
+ "unord-aurdalpha-myqnapcloudaccesscambridgeiseiyoichippubetsubets" +
+ "ugarugbydgoszczecinemagentositecnologiabounty-fullensakerryprope" +
+ "rtiesalangenishikatakinoueboutiquebechirurgiens-dentistes-en-fra" +
+ "ncebozen-sudtirolomzaporizhzhegurindustriesteamfamberkeleybozen-" +
+ "suedtirolondrinapleskarumaifarmsteadurbanamexhibitionishikatsura" +
+ "git-reposalondonetskasaokamiminersaltdalorenskogloppenzaolbia-te" +
+ "mpio-olbiatempioolbialystokkepnogatagajobojinfinitintelligencebp" +
+ "lacedogawarabikomaezakirunorddalotenkawabrandywinevalleybrasilia" +
+ "brindisibenikindlebtimnetzparisor-fronishikawazukamisunagawabris" +
+ "toloseyouriparliamentjomeloyalistoragebritishcolumbialowiezagani" +
+ "shimerabroadcastleclerchiryukyuragifuchungbukharavennagatorodoyb" +
+ "roadwaybroke-itjxfinitybrokerbronnoysundurhamburglugmbhartipscbg" +
+ "minakamichiharabrothermesaverdealstahaugesunderseaportsinfolldal" +
+ "ottebrowsersafetymarketsaludweberbrumunddalottokonamegatakazakin" +
+ "ternationalfirearmsalvadordalibabalena-devicesalzburgmodellingmx" +
+ "javald-aostarnbergretakanabeautysvardoesntexisteingeekashibataka" +
+ "tsukiyosatokamachintaifun-dnsdojolsterbrunelastxn--0trq7p7nnishi" +
+ "nomiyashironomutashinaintuitkmaxxn--11b4c3dynathomebuiltwithdark" +
+ "ashiharabrusselsamegawabruxellesamnangerbryansklepparmattelekomm" +
+ "unikationishinoomotegobrynewhollandyndns-at-homedepotenzamamidsu" +
+ "ndyndns-at-workisboringrimstadyndns-blogdnsampalacebuskerudinewj" +
+ "erseybuzentsujiiebuzzwellbeingzonebwfarsundyndns-freeboxosloftra" +
+ "nakanojoetsuwanouchikujogaszkolancashirecreationishinoshimatsuur" +
+ "abzhitomirumalatvuopmicrolightingripebzzcommunexus-2community-pr" +
+ "ochowicecomoarekecomparemarkerryhotelsantacruzsantafedjejuifmetl" +
+ "ifeinsurancecompute-1computerhistoryofscience-fictioncomsecurity" +
+ "tacticsantamariakecondoshichinohealth-carereformitakeharaconfere" +
+ "nceconstructionconsuladonnaharimalopolskanlandyndns-remotewdyndn" +
+ "s-serverisignconsultanthropologyconsultingrpartycontactozsdeltaj" +
+ "irittogliattis-a-caterercontagematsubaracontemporaryarteducation" +
+ "alchikugodontexistmein-iservebeercontractorskenconventureshinode" +
+ "arthruherecipescaravantaacookingchannelsdvrdnsfor-better-thanawa" +
+ "tchandclockasukabedzin-berlindasdaburcooluroycooperativano-frank" +
+ "ivskolefrakkestadyndns-webhopencraftrani-andria-barletta-trani-a" +
+ "ndriacopenhagencyclopedichofunatoriginstitutemasekashiwaracoprod" +
+ "uctionsantoandreamhostersanukis-a-celticsfancorsicagliaricoharuo" +
+ "vatraniandriabarlettatraniandriacorvettemp-dnsaobernardocosenzak" +
+ "opanecosidnshome-webserverdalutskasumigaurawa-mazowszexnetnedalu" +
+ "xurycostumedicinakaiwamizawatchesaogoncartoonartdecologiacouchpo" +
+ "tatofriesaotomeldaluzerncouklugsmilegallocus-3councilvivanovolda" +
+ "couponsapporocq-acranbrookuwanalyticsardegnarusawacrdyndns-wikir" +
+ "kenesardiniacreditcardyndns-workshopitsitexaskoyabearalvahkikuch" +
+ "ikuseikarugalsacecreditunioncremonashgabadaddjaguarqcxn--12cfi8i" +
+ "xb8lcrewildlifedorainfracloudfrontdoorcricketrzyncrimeast-kazakh" +
+ "stanangercrotonecrownipasadenaritakurashikis-a-chefashioncrsvpas" +
+ "sagensarlcruisesarpsborgruecryptonomichigangwoncuisinellajollame" +
+ "ricanexpressexyculturalcentertainmentranoycuneocupcakecuritiback" +
+ "yardsarufutsunomiyawakasaikaitakofuefukihaboromskoguidegreecurva" +
+ "lled-aostaverncymrussiacyonabaruminamidaitomanchestercyouthachio" +
+ "jiyahooguyfetsundynnsasayamafgujohanamakinoharafhvalerfidoomdnst" +
+ "racefieldynservebbsasebofagemologicallyngenfigueresinstagingulen" +
+ "filateliafilegear-audnedalnfilegear-deatnulvikatowicefilegear-gb" +
+ "izfilegear-iefilegear-jpmorganfilegear-sgunmanxn--1ck2e1bananare" +
+ "publicasertairaumalborkarasjohkamikoaniikappuboliviajessheimemor" +
+ "ialaziobserverevistaples3-external-1filminamifuranofinalfinancef" +
+ "ineartsavonarutomobellevuelosangelesjabbottransurlfinlandynufcfa" +
+ "nfinnoyfirebaseappatriafirenzefirestonefirmdalegoldpoint2thisami" +
+ "tsukefishingolffansaxofitjarvodkafjordynv6fitnessettlementrapani" +
+ "izafjalerflesberguovdageaidnunusualpersonflickragerogerschoenbru" +
+ "nnflightschokokekschokoladenflirfloginlinefloraflorencefloridats" +
+ "unanjoburgushikamifuranorth-kazakhstanfloripaderbornfloristanoha" +
+ "takaharunzenflorokunohealthcareerscholarshipschoolschulezajskats" +
+ "ushikabeeldengeluidynvpnplus-4flowerschulserverfltravelchannelfl" +
+ "ynnhosting-clusterfndyroyrvikinguitarsaskatchewanfor-ourfor-some" +
+ "dizinhistorischeschwarzgwangjuniperfor-theaterforexrothachirogat" +
+ "akanezawaforgotdnschweizforli-cesena-forlicesenaforlillehammerfe" +
+ "ste-ipaviancarrdforsaleikangerforsandasuologoipfizerfortalfortmi" +
+ "ssoulancasterfortworthadanorthwesternmutualfosnesciencecentersci" +
+ "encehistoryfotaruis-a-cubicle-slavellinodeobjectscientistordalfo" +
+ "xfordebianfozorafredrikstadtvscjohnsonfreeddnsgeekgalaxyfreedesk" +
+ "topocznore-og-uvdalfreemasonryfreesitextileirfjordfreetlscotland" +
+ "freiburgwiddleitungsenfreseniuscountryestateofdelawareggio-calab" +
+ "riafribourgxn--1ctwolominamatarnobrzegyptianfriuli-v-giuliafriul" +
+ "i-ve-giuliafriuli-vegiuliafriuli-venezia-giuliafriuli-veneziagiu" +
+ "liafriuli-vgiuliafriuliv-giuliafriulive-giuliafriulivegiuliafriu" +
+ "livenezia-giuliafriuliveneziagiuliafriulivgiuliafrlfroganscrappe" +
+ "r-sitefrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azfrom-capetow" +
+ "nnews-stagingfrom-coffeedbackplaneapplinzis-a-democratravelersin" +
+ "surancefrom-ctrdfrom-dchonanbulsan-suedtirolowiczest-le-patronis" +
+ "hitosashimizunaminamibosogndalpusercontentoyotapartsandnessjoeni" +
+ "shiwakinvestmentsandoyfrom-dedyn-berlincolnfrom-flanderscrapping" +
+ "from-gaulardalfrom-hichisochildrensgardenfrom-iafrom-idfrom-ilfr" +
+ "om-in-brbanzaicloudcontrolledekagaminombresciaustraliamusementdl" +
+ "lpages3-ap-south-1kappchizip6116-b-dataiji234lima-cityeatselinog" +
+ "radult3l3p0rtatamotors3-ap-northeast-1337from-kscrysechoseiroumu" +
+ "enchenissandiegofrom-kyowariasahikawafrom-lanciafrom-mamurogawaf" +
+ "rom-mdfrom-meeresistancefrom-mifunefrom-mnfrom-modalenfrom-mserv" +
+ "eirchoshibuyachiyodapliernewspaperfrom-mtnfrom-nctulangevagrigen" +
+ "tomologyeonggiehtavuoatnagahamaroyerfrom-ndfrom-nefrom-nh-serveb" +
+ "logsiteleafamilycompanyanagawafflecellclaimserveminecraftrentin-" +
+ "sud-tirolfrom-njaworznoticiasnesoddenmarkhangelskjakdnepropetrov" +
+ "skiervaapsteiermarkatsuyamarugame-hostrowiechoyodobashichikashuk" +
+ "ujitawarafrom-nminamiiserniafrom-nvalledaostargetmyiphostrodawar" +
+ "afrom-nyfrom-ohkurafrom-oketogurafrom-orfrom-padovaksdalfrom-pra" +
+ "tohmandalfrom-ris-a-designerfrom-schmidtre-gauldalfrom-sdfrom-tn" +
+ "from-txn--1lqs03nfrom-utsiracusaikisarazurecontainerdpolicefrom-" +
+ "val-daostavalleyfrom-vtrentin-sudtirolfrom-wafrom-wielunnerfrom-" +
+ "wvallee-aosteroyfrom-wyfrosinonefrostalowa-wolawafroyahikobierzy" +
+ "cefstcgroupgfoggiafujiiderafujikawaguchikonefujiminokamoenairlin" +
+ "edre-eikerfujinomiyadattowebcampinashikiminohostre-totendofinter" +
+ "net-dnsaliasiafujiokayamangonohejis-a-doctorayfujisatoshonairpor" +
+ "tland-4-salernoboribetsuckservemp3fujisawafujishiroishidakabirat" +
+ "oridefenseljordfujitsurugashimangyshlakasamatsudovre-eikerfujixe" +
+ "roxn--1lqs71dfujiyoshidavvenjargap-northeast-3fukayabeatservep2p" +
+ "harmacienservepicservequakefukuchiyamadavvesiidappnodebalancerti" +
+ "ficationfukudominichristiansburgrondarfukuis-a-financialadvisor-" +
+ "aurdalfukumitsubishigakishiwadazaifudaigojomedio-campidano-medio" +
+ "campidanomediofukuokazakisofukushimaniwakuratefukuroishikarikatu" +
+ "rindalfukusakisosakitagawafukuyamagatakahatakaishimoichinosekiga" +
+ "harafunabashiriuchinadafunagatakamatsukawafunahashikamiamakusats" +
+ "umasendaisennangooglecodespotrentin-sued-tirolfundaciofuoiskujuk" +
+ "uriyamannorfolkebibleirvikaufenfuosskoczowilliamhillfurnitureggi" +
+ "o-emilia-romagnakatombetsumitakagiizefurubirafurudonostiaafuruka" +
+ "wairtelebitbridgestonekobayashikshacknetcimbarcelonagawalmartatt" +
+ "oolforgehimejiitatebayashijonawatempresashibetsukuiiyamanouchiku" +
+ "hokuryugasakitaurayasudaustrheimatunduhrennesoyokosukanumazuryok" +
+ "oteastcoastaldefenceatonsbergjerdrumemergencyachts3-ca-central-1" +
+ "fusodegaurafussaintlouis-a-anarchistoireggiocalabriafutabayamagu" +
+ "chinomigawafutboldlygoingnowhere-for-morenakatsugawafuttsurugimp" +
+ "eriafuturecmservesarcasmatartanddesignfuturehostingfuturemailing" +
+ "fvgfylkesbiblackbaudcdn77-securebungoonord-odalfyresdalhangoutsy" +
+ "stemscloudhannanmokuizumodenaklodzkochikushinonsenergyhannosegaw" +
+ "ahanyuzenhapmircloudharstadharvestcelebrationhasamarburghasamina" +
+ "mi-alpsharis-a-hunterhashbanghasudahasura-appharmacysharphdfcban" +
+ "kazoologyhasvikazunow-dnshawaiijimaritimoduminamimakis-a-knightp" +
+ "ointtohobby-sitehatogayaitakaokalmykiahatoyamazakitakamiizumisan" +
+ "ofidelityhatsukaichikaiseiheijis-a-landscaperugiahattfjelldalhay" +
+ "ashimamotobungotakadagestangeorgeorgiahazuminobusells-for-usrcfa" +
+ "stlylbamblebesbyglandroverhalla-speziaustinnavigationavoizumizak" +
+ "ibigawajudaicable-modemocraciabruzzoologicalvinklein-addrammenuo" +
+ "rochesterimo-i-ranaamesjevuemielno-ipifonyaaarborteaches-yogasaw" +
+ "aracingdyniaetnabudapest-a-la-masion-riopretobamaceratabuseating" +
+ "-organic66helsinkitakatakarazukaluganskygearapphiladelphiaareadm" +
+ "yblogspotrentino-a-adigehembygdsforbundhemneshellaspeziahemsedal" +
+ "hepforgeherokussldheroyhgtvallee-d-aosteigenhidorahigashiagatsum" +
+ "agoianiahigashichichibunkyonanaoshimageandsoundandvisionthewifia" +
+ "tmallorcadaqueshimokawahigashihiroshimanehigashiizumozakitakyush" +
+ "uaiahigashikagawahigashikagurasoedahigashikawakitaaikitamihamada" +
+ "higashikurumeetrentino-aadigehigashimatsushimarcheapigeelvinckdd" +
+ "iethnologyhigashimatsuyamakitaakitadaitoigawahigashimurayamamoto" +
+ "rcycleshimokitayamahigashinarusells-itrentino-alto-adigehigashin" +
+ "ehigashiomihachimanagementrentino-altoadigehigashiosakasayamanak" +
+ "akogawahigashishirakawamatakasagoppdalhigashisumiyoshikawaminami" +
+ "aikitamotosumy-gatewayhigashitsunoshiroomurahigashiurausukitanak" +
+ "agusukumodernhigashiyamatokoriyamanashiibahccavuotnagareyamainte" +
+ "nancehigashiyodogawahigashiyoshinogaris-a-lawyerhiraizumisatohno" +
+ "shoooshikamaishimofusartshimonitayanagithubusercontentrentino-s-" +
+ "tirolhirakatashinagawahiranairtrafficplexus-1hirarahiratsukagawa" +
+ "hirayaizuwakamatsubushikusakadogawahistorichouseshimonosekikawah" +
+ "itachiomiyagildeskaliszhitachiotagotembaixadahitraeumtgeradelmen" +
+ "horstalbanshimosuwalkis-a-liberalhjartdalhjelmelandholeckodairah" +
+ "olidayhomeiphilatelyhomelinkitoolsztynsettlershimotsukehomelinux" +
+ "n--1qqw23ahomeofficehomesecuritymacaparecidahomesecuritypchristm" +
+ "aseratiresandvikcoromantovalle-d-aostatic-accessanfranciscofreak" +
+ "unemurorangehirnrtoyotomiyazakinzais-a-candidatehomesenseeringho" +
+ "meunixn--2m4a15ehondahongotpantheonsitehonjyoitakasakitashiobara" +
+ "hornindalhorsellsyourhomegoodshimotsumahorteneis-a-libertarianho" +
+ "spitalhoteleshinichinanhotmailhoyangerhoylandetroitskypehumaniti" +
+ "eshinjournalismailillesandefjordhurdalhurumajis-a-linux-useranis" +
+ "hiaritabashikaoirminamiminowahyllestadhyogoris-a-llamarriottrent" +
+ "ino-stirolhyugawarahyundaiwafuneis-very-badajozis-very-evillagei" +
+ "s-very-goodyearis-very-niceis-very-sweetpepperis-with-thebandois" +
+ "leofmanaustdaljevnakershuscultureggioemiliaromagnamsskoganeis-a-" +
+ "nascarfanjewelryjewishartgalleryjfkharkivalleedaostejgorajlljls-" +
+ "sto1jmphotographysiojnjcphonefosshintomikasaharajoyentrentino-su" +
+ "edtiroljoyokaichibajddarchitecturealtorlandjpnjprshiojirishirifu" +
+ "jiedajurkosherbrookegawakoshimizumakizunokunimimatakayamarylandk" +
+ "oshunantankhersonkosugekotohiradomainsurehabmerkotourakouhokutam" +
+ "akis-a-patsfankounosupplieshirakokaminokawanishiaizubangekouyama" +
+ "shikekouzushimashikis-a-personaltrainerkozagawakozakis-a-photogr" +
+ "apherokuapphilipsyno-dshinjukumanowtvalleeaosteinkjerusalembroid" +
+ "erykozowindmillkpnkppspdnshiranukamitsuekrasnikahokutokashikis-a" +
+ "-playershifteditchyouriphoenixn--2scrj9chromedicaltanissettaishi" +
+ "nomakinkobeardubaiduckdnsangokrasnodarkredstonekristiansandcatsh" +
+ "iraois-a-republicancerresearchaeologicaliforniakristiansundkrods" +
+ "heradkrokstadelvaldaostarostwodzislawindowskrakowinnershiraokamo" +
+ "gawakryminamioguni5kumatorinokumejimasoykumenantokigawakunisakis" +
+ "-a-rockstarachowicekunitachiarailwaykunitomigusukumamotoyamashik" +
+ "okuchuokunneppubtlshiratakahagitlaborkunstsammlungkunstunddesign" +
+ "kuokgroupilotshishikuis-a-socialistdlibestadkureisenkurgankurobe" +
+ "laudibleasingleshisognekurogiminamiashigarakuroisoftwarezzokurom" +
+ "atsunais-a-soxfankurotakikawasakis-a-studentalkushirogawakustana" +
+ "is-a-teacherkassyncloudkusupplykutchanelkutnokuzumakis-a-techiet" +
+ "is-a-musiciankvafjordkvalsundkvamlidlugolekadenagaivuotnagaokaky" +
+ "otambabyenebakkeshibechambagriculturennebudejjuedischesapeakebay" +
+ "ernukvanangenkvinesdalkvinnheradkviteseidatingkvitsoykwpspectrum" +
+ "inamisanrikubetsurfastvps-serveronakasatsunairguardiannakadomari" +
+ "nebraskauniversitychyattorneyagawakembuchikumagayagawakkanaibets" +
+ "ubamericanfamilydsclouderackmazerbaijan-mayen-rootaribeiraogashi" +
+ "madachicagoboatsassaris-a-conservativegarsheis-a-cpadualstackher" +
+ "o-networkinggroupassenger-associationkzmissileluxembourgmisugito" +
+ "kuyamatsumotofukemitourismolanxesshitaramamitoyoakemiuramiyazure" +
+ "websiteshikagamiishibukawamiyotamanomjondalenmlbfanmontrealestat" +
+ "efarmequipmentrentinoa-adigemonza-brianzapposhizukuishimogosenmo" +
+ "nza-e-della-brianzaptokyotangotsukitahatakamoriokakegawamonzabri" +
+ "anzaramonzaebrianzamonzaedellabrianzamoonscaleforcemordoviamoriy" +
+ "amatsunomoriyoshiminamiawajikis-an-actormormonstermoroyamatsusak" +
+ "ahoginankokubunjis-an-actresshinshinotsurgerymortgagemoscowioshi" +
+ "zuokanagawamoseushistorymosjoenmoskeneshoppingmosshopwarendalenu" +
+ "gmosvikhmelnytskyivaomoteginowaniihamatamakawajimansionshoujis-a" +
+ "n-anarchistoricalsocietymoviemovimientolgamozilla-iotrentinoaadi" +
+ "gemtranbymuenstermuginozawaonsenmuikamisatokaizukamikitayamatsur" +
+ "is-an-artistgorymukoebenhavnmulhouseoullensvanguardmunakatanemun" +
+ "cienciamuosattemupimientakkoelnmurmanskhplaystation-cloudmurotor" +
+ "craftrentinoalto-adigemusashimurayamatsushigemusashinoharamuseet" +
+ "rentinoaltoadigemuseumverenigingmusicargodaddyn-vpndnshowamutsuz" +
+ "awamy-vigorgemy-wanggouvichungnamdalseidfjordyndns-mailubindalub" +
+ "lindesnesanjotoyotsukaidomyactivedirectorymyasustor-elvdalmycdn7" +
+ "7-sslattuminamitanemydattolocalhistorymyddnskingmydissentrentino" +
+ "s-tirolmydobisshikis-an-engineeringmydroboehringerikemydshowtime" +
+ "lhusdecorativeartshriramsterdamnserverbaniamyeffectrentinostirol" +
+ "myfastly-terrariuminamiuonumasudamyfirewallonieruchomoscienceand" +
+ "industrynmyforuminamiyamashirokawanabelembetsukubankhmelnitskiya" +
+ "marumorimachidamyfritzmyftpaccesshwitdklabudhabikinokawabarthads" +
+ "electrentin-suedtirolmyhome-servermyjinomykolaivaporcloudmymaile" +
+ "rmymediapchurcharternidyndns-office-on-the-webhareidsbergentingr" +
+ "ongausdalucaniamyokohamamatsudamypepinkmpspbarclays3-sa-east-1my" +
+ "petsienarviikamishihoronobeauxartsandcraftsigdalmyphotoshibalati" +
+ "nogiftsilknx-serversailleshioyandexcloudmypictetrentinosud-tirol" +
+ "mypsxn--32vp30haebaruericssongdalenviknakayamaoris-a-geekautokei" +
+ "notteroymysecuritycamerakermyshopblocksimple-urlmytis-a-bookkeep" +
+ "erspectakasugais-an-entertainermytuleaprendemasakikonaikawachina" +
+ "ganoharamcoachampionshiphoptobishimadridvagsoygardendoftheintern" +
+ "etlifyis-bytomaritimekeepingmyvncircustomer-ociprianiigataitogit" +
+ "suldaluccarbonia-iglesias-carboniaiglesiascarboniamywirepbodynam" +
+ "ic-dnsirdalplatformshangrilapyplatter-appioneerplatterpippugliap" +
+ "lazaplcube-serversicherungplumbingoplurinacionalpodhalevangerpod" +
+ "lasiellaktyubinskiptveterinaireadthedocscappgafannefrankfurtrent" +
+ "inosudtirolpodzonepohlpoivronpokerpokrovskomakiyosunndalpolitica" +
+ "rrierpolitiendapolkowicepoltavalle-aostathellewismillerpomorzesz" +
+ "owithgoogleapiszponpesaro-urbino-pesarourbinopesaromasvuotnaroyp" +
+ "onypordenonepornporsangerporsangugeporsgrunnanyokoshibahikariwan" +
+ "umatamayufuelveruminanopoznanpraxis-a-bruinsfanprdpreservationpr" +
+ "esidioprgmrprimelbourneprincipeprivatizehealthinsuranceprofesion" +
+ "alprogressivenneslaskerrylogisticslupskomatsushimarylhurstjordal" +
+ "shalsenpromombetsurgeonshalloffameiwamassa-carrara-massacarraram" +
+ "assabusinessebyklecznagasukepropertyprotectionprotonetrentinosue" +
+ "d-tirolprudentialpruszkowithyoutuberspacekitagatargivestbytemark" +
+ "omforbarefootballooningjerstadotsuruokakamigaharauthordalandds3-" +
+ "eu-central-1prvcyberlevagangaviikanonjis-certifieducatorahimeshi" +
+ "mamateramobaraprzeworskogptplusgardenpulawypupittsburghofficialp" +
+ "vhagakhanamigawapvtrentinosuedtirolpwcistrondheimmobilienissayok" +
+ "kaichiropractichitachinakagawassamukawatarightathomeftparocherni" +
+ "governmentksatxn--12c1fe0bradescorporationrenderpzqhagebostadqld" +
+ "qponiatowadaqslingqualifioappiwatequickconnectrentinsud-tirolqui" +
+ "cksytestingquipelementslzqvcitadeliveryggeesusonosuzakanazawasuz" +
+ "ukaneyamazoesuzukis-into-animegurownprovidersvalbardunloppacific" +
+ "ivilaviationissedalucernesveiosvelvikomorotsukaminoyamaxunjargas" +
+ "vizzerasvn-reposologneswidnicasacamdvrcampinagrandebuilderschles" +
+ "ischesolundbeckommunalforbundswidnikkokonoeswiebodzin-butterswif" +
+ "tcoverswinoujscienceandhistoryswissmarterthanyousynology-disksta" +
+ "tionsynology-dsolutionsnoasakakinokiaturystykanmakiwientuscanytu" +
+ "shuissier-justicetuvalle-daostaticsootuxfamilytwmailvestnesopotr" +
+ "entinsudtirolvestre-slidreviewsaitoshimayfirstockholmestrandvest" +
+ "re-totennishiawakuravestvagoyvevelstadvibo-valentiavibovalentiav" +
+ "ideovillasor-odalvinnicasadelamonedancevinnytsiavipsinaappixolin" +
+ "ovirginiavirtual-userveftpizzavirtualservervirtualuservegame-ser" +
+ "vervirtueeldomein-vigorlicevirtuelvisakegawaviterboknowsitallviv" +
+ "olkenkundenvixn--3bst00miniservervlaanderenvladikavkazimierz-dol" +
+ "nyvladimirvlogintoyonezawavminnesotaketaketomisatokorozawavologd" +
+ "anskongsbergvolvolkswagentsor-varangervolyngdalvoorloperaunitero" +
+ "is-into-carshinshirovossevangenvotevotingvotoyonowmflabsorfoldwn" +
+ "extdirectroandinosaureplantationworldworse-thandawowiwatsukiyono" +
+ "tairestaurantritonwpdevcloudwritesthisblogsytewroclawloclawekong" +
+ "svingerwtcminterepaircraftingvollombardiamondshisuifuettertdasne" +
+ "tzwtfauskedsmokorsetagayaseralingenoamishirasatogokasells-for-le" +
+ "ssaudawuozuwzmiuwajimaxn--42c2d9axn--45br5cylxn--45brj9civilizat" +
+ "ionxn--45q11civilwarmiastagets-itoyouraxn--4gbriminingxn--4it168" +
+ "dxn--4it797konskowolayangroupictureshirahamatonbetsurnadalxn--4p" +
+ "vxs4allxn--54b7fta0cclanbibaidarmeniaxn--55qw42gxn--55qx5dxn--5j" +
+ "s045dxn--5rtp49cldmailovecollegefantasyleaguernseyxn--5rtq34kons" +
+ "ulatrobeepilepsykkylvenetodayxn--5su34j936bgsgxn--5tzm5gxn--6btw" +
+ "5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn--7t0a264clic20001wwwhosw" +
+ "hokksundyndns-picsannohelplfinancialukowiiheyakagexn--80adxhksor" +
+ "ocabalestrandabergamo-siemensncfdxn--80ao21axn--80aqecdr1axn--80" +
+ "asehdbarreauction-webhostingjesdalillyolasitemrxn--80aswgxn--80a" +
+ "ugustowmcloudxn--8ltr62konyvelolipopiemontexn--8pvr4uxn--8y0a063" +
+ "axn--90a3academiamicaarpkomaganexn--90aeroportalabamagasakishima" +
+ "baraogakibichuoxn--90aishobarakawagoexn--90azhytomyravendbarrel-" +
+ "of-knowledgeapplicationcloudappspotagerxn--9dbhblg6digitalxn--9d" +
+ "bq2axn--9et52uxn--9krt00axn--andy-iraxn--aroport-byaotsurreyxn--" +
+ "asky-iraxn--aurskog-hland-jnbarrell-of-knowledgestackarasjokaras" +
+ "uyamarshallstatebankarateu-1xn--avery-yuasakuhokkaidownloadxn--b" +
+ "-5gaxn--b4w605ferdxn--balsan-sdtirol-nsbsorreisahayakawakamiichi" +
+ "kawamisatottoris-foundationxn--bck1b9a5dre4clickashiwazakiyosemi" +
+ "texn--bdddj-mrabdxn--bearalvhki-y4axn--berlevg-jxaxn--bhcavuotna" +
+ "-s4axn--bhccavuotna-k7axn--bidr-5nachikatsuuraxn--bievt-0qa2xn--" +
+ "bjarky-fyasakaiminatoyookaniepcexn--bjddar-ptarumizusawaxn--blt-" +
+ "elabourxn--bmlo-graingerxn--bod-2nativeamericanantiquesortlandxn" +
+ "--bozen-sdtirol-2obanazawaxn--brnny-wuacademy-firewall-gatewayxn" +
+ "--brnnysund-m8accident-investigation-aptibleadpagest-mon-blogueu" +
+ "rovision-k3sorumincomcastresindevicenzaporizhzhiaxn--brum-voagat" +
+ "rogstadxn--btsfjord-9zaxn--bulsan-sdtirol-nsbarsycenterprisesaki" +
+ "kugawaltervistaikimobetsuitainaioirasebastopologyeongnamegawakay" +
+ "amagazineat-urlimanowarudautomotiveconomiasakuchinotsuchiurakawa" +
+ "lesundeportevadsobetsumidatlanticaseihicampobassociatest-iservec" +
+ "ounterstrikebinagisoccertmgrazimutheworkpccwebredirectmembers3-e" +
+ "u-west-1xn--c1avgxn--c2br7gxn--c3s14misakis-a-therapistoiaxn--cc" +
+ "k2b3barsyonlinewhampshirealtysnes3-us-gov-west-1xn--cckwcxetdxn-" +
+ "-cesena-forl-mcbremangerxn--cesenaforl-i8axn--cg4bkis-into-carto" +
+ "onshintokushimaxn--ciqpnxn--clchc0ea0b2g2a9gcdxn--comunicaes-v6a" +
+ "2oxn--correios-e-telecomunicaes-ghc29axn--czr694bashkiriautoscan" +
+ "adaeguambulanceobihirosakikamijimatsuzakibmdevelopmentatsunobira" +
+ "ukraanghkeymachineustargardd-dnsiskinkyotobetsulikes-piedmontice" +
+ "llodingenatuurwetenschappenaumburggfarmerseine164-balsfjorddnsli" +
+ "velanddnss3-ap-southeast-1xn--czrs0tromsakataobaomoriguchiharahk" +
+ "keravjuegoshikijobservableusercontentrentinsuedtirolxn--czru2dxn" +
+ "--czrw28basicservercelliguriaveroykenglandgcahcesuoloans3-eu-wes" +
+ "t-2xn--d1acj3basilicataniavocatanzarowebspacebinordreisa-hockeyn" +
+ "utazuerichardlikescandyn53utilitiesquare7xn--d1alfaromeoxn--d1at" +
+ "romsojamisonxn--d5qv7z876clinichocolatelevisionishiokoppegardynd" +
+ "ns-ipartinuyamashinatsukigatakashimarnardalouvreitoyosatoyokawax" +
+ "n--davvenjrga-y4axn--djrs72d6uyxn--djty4kooris-a-nursembokukitch" +
+ "enxn--dnna-grajewolterskluwerxn--drbak-wuaxn--dyry-iraxn--e1a4cl" +
+ "iniquenoharaxn--eckvdtc9dxn--efvn9soundcastronomy-routerxn--efvy" +
+ "88haibarakitahiroshimapartmentservicesevastopolexn--ehqz56nxn--e" +
+ "lqq16hair-surveillancexn--eveni-0qa01gaxn--f6qx53axn--fct429kope" +
+ "rvikharkovanylvenicexn--fhbeiarnxn--finny-yuaxn--fiq228c5hsouthc" +
+ "arolinatalxn--fiq64basketballfinanzgoravoues3-eu-west-3xn--fiqs8" +
+ "southwestfalenxn--fiqz9sowaxn--fjord-lraxn--fjq720axn--fl-ziaxn-" +
+ "-flor-jraxn--flw351exn--forl-cesena-fcbsspeedpartnersokananiimih" +
+ "oboleslawiecitichitosetogakushimotoganewportlligatmparsamsclubar" +
+ "towhalingriwataraidyndns-homednsamsungroks-thisayamanobeokakudam" +
+ "atsuexn--forlcesena-c8axn--fpcrj9c3dxn--frde-grandrapidspjelkavi" +
+ "komonowruzhgorodeoxn--frna-woaraisaijosoyrorospreadbettingxn--fr" +
+ "ya-hraxn--fzc2c9e2clintonoshoesanokasserverrankoshigayameinforum" +
+ "zxn--fzys8d69uvgmailxn--g2xx48clothingdustdataiwanairforcebetsui" +
+ "kidsmynasushiobaragusabaejrietisalatinabenonicbcn-north-1xn--gck" +
+ "r3f0fbsbxn--12co0c3b4evalleaostavangerxn--gecrj9cn-northwest-1xn" +
+ "--ggaviika-8ya47hakatanortonxn--gildeskl-g0axn--givuotna-8yasugi" +
+ "vingxn--gjvik-wuaxn--gk3at1exn--gls-elacaixaxn--gmq050is-into-ga" +
+ "messinazawaxn--gmqw5axn--h-2failxn--h1aeghakodatexn--h2breg3even" +
+ "espydebergxn--h2brj9c8cngrossetouchihayaakasakawaharaxn--h3cuzk1" +
+ "discountyxn--hbmer-xqaxn--hcesuolo-7ya35batochiokinoshimakeupowi" +
+ "at-band-campaniaxaurskog-holandingjemnes3-ap-southeast-2xn--hery" +
+ "-iraxn--hgebostad-g3axn--hkkinen-5waxn--hmmrfeasta-s4accident-pr" +
+ "evention-rancherkasydneyxn--hnefoss-q1axn--hobl-iraxn--holtlen-h" +
+ "xaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b" +
+ "6b1a6a2exn--imr513nxn--indery-fyasuokanoyakumoldeloittenrikuzent" +
+ "akatajimidorissagamiharaxn--io0a7is-leetrentino-sud-tirolxn--j1a" +
+ "efbx-osauheradyndns1xn--j1amhakonexn--j6w193gxn--jlq480n2rgxn--j" +
+ "lq61u9w7batsfjordiscoveryombolzano-altoadigeologyomitanoceanogra" +
+ "phics3-us-west-1xn--jlster-byatomitamamuraxn--jrpeland-54axn--jv" +
+ "r189misasaguris-an-accountantshinkamigotoyohashimototalxn--k7yn9" +
+ "5exn--karmy-yuaxn--kbrq7oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-w" +
+ "oaxn--klt787dxn--kltp7dxn--kltx9axn--klty5xn--3ds443gxn--koluokt" +
+ "a-7ya57hakubahcavuotnagaraholtaleniwaizumiotsukumiyamazonawsmppl" +
+ "anetariuminamiizukamiokameokameyamatotakadaxn--kprw13dxn--kpry57" +
+ "dxn--kpu716fbxosavannahgaxn--kput3is-lostrolekamakurazakiwakunig" +
+ "amiharustkannamilanotogawaxn--krager-gyatsukanraxn--kranghke-b0a" +
+ "xn--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49jdfastpanelbla" +
+ "grarchaeologyeongbuk0emmafann-arboretumbriamallamaceiobbcg12038x" +
+ "n--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyatsushiroxn--kvnangen-k0" +
+ "axn--l-1fairwindsrlxn--l1accentureklamborghinikolaeventsrvareser" +
+ "vehalflifestylexn--laheadju-7yawaraxn--langevg-jxaxn--lcvr32dxn-" +
+ "-ldingen-q1axn--leagaviika-52bauhausposts-and-telecommunications" +
+ "3-us-west-2xn--lesund-huaxn--lgbbat1ad8jelasticbeanstalkhakassia" +
+ "xn--lgrd-poacctrusteexn--lhppi-xqaxn--linds-pramericanartrvargga" +
+ "trentoyonakagyokutoyakolobrzegersundxn--lns-qlaquilanstorfjordxn" +
+ "--loabt-0qaxn--lrdal-sraxn--lrenskog-54axn--lt-liacnpyatigorskod" +
+ "jeffersonxn--lten-granexn--lury-iraxn--m3ch0j3axn--mely-iraxn--m" +
+ "erker-kuaxn--mgb2ddestorjdevcloudnshinyoshitomiokamitondabayashi" +
+ "ogamagoriziaxn--mgb9awbfedorapeoplegnicapebretonamicrosoftbankas" +
+ "uyanaizulminamiechizenxn--mgba3a3ejtrycloudflareportrevisohughes" +
+ "omaxn--mgba3a4f16axn--mgba3a4franamizuholdingstpetersburgxn--mgb" +
+ "a7c0bbn0axn--mgbaakc7dvfedoraprojectransportexn--mgbaam7a8hakuis" +
+ "-a-greenxn--mgbab2bdxn--mgbah1a3hjkrdxn--mgbai9a5eva00beneventoe" +
+ "idskoguchikuzenayorovigovtaxihuanflfanfshostrowwlkpmgjovikaratsu" +
+ "ginamikatagamilitaryonagoyaxn--mgbai9azgqp6jelenia-goraxn--mgbay" +
+ "h7gpaleoxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn--mgberp4a5" +
+ "d4a87gxn--mgberp4a5d4arxn--mgbgu82axn--mgbi4ecexposedxn--mgbpl2f" +
+ "hskydivingxn--mgbqly7c0a67fbcnsantabarbaraxn--mgbqly7cvafranzisk" +
+ "anerimaringatlantakahashimamakiryuohdattorelayxn--mgbt3dhdxn--mg" +
+ "btf8flatangerxn--mgbtx2bentleyonagunicommbankarelianceu-2xn--mgb" +
+ "x4cd0abbvieeexn--mix082feiraquarelleaseeklogesaves-the-whalessan" +
+ "dria-trani-barletta-andriatranibarlettaandriaxn--mix891fermochiz" +
+ "ukirovogradoyxn--mjndalen-64axn--mk0axin-dslgbtrysiljanxn--mk1bu" +
+ "44cntoystre-slidrettozawaxn--mkru45is-not-certifiedugit-pagespee" +
+ "dmobilizeroticanonoichinomiyakexn--mlatvuopmi-s4axn--mli-tlarvik" +
+ "oryokamikawanehonbetsurutaharaxn--mlselv-iuaxn--moreke-juaxn--mo" +
+ "ri-qsakuragawaxn--mosjen-eyawatahamaxn--mot-tlavagiskexn--mre-og" +
+ "-romsdal-qqbuserveexchangexn--msy-ula0hakusanagochijiwadell-ogli" +
+ "astraderxn--mtta-vrjjat-k7aflakstadaokagakicks-assnasaarlandxn--" +
+ "muost-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--3e0b" +
+ "707exn--nit225kosaigawaxn--nmesjevuemie-tcbalsan-sudtirollagdene" +
+ "snaaseinet-freakstreamswatch-and-clockerxn--nnx388axn--nodessaku" +
+ "rais-savedunetflixilxn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn" +
+ "--ntsq17gxn--nttery-byaeservehttplantsjcbnpparibaselburgxn--nvuo" +
+ "tna-hwaxn--nyqy26axn--o1acheltenham-radio-openairbusantiquest-a-" +
+ "la-maisondre-landroidxn--o3cw4haldenxn--o3cyx2axn--od0algxn--od0" +
+ "aq3beppublishproxyzgorzeleccogladefinimakanegasakiraxn--ogbpf8fl" +
+ "ekkefjordxn--oppegrd-ixaxn--ostery-fyaxn--osyro-wuaxn--otu796dxn" +
+ "--p1acferraraxn--p1ais-slickfhappoutwentexn--pbt977collectionxn-" +
+ "-pgbs0dhlxn--porsgu-sta26ferrarivnexn--pssu33lxn--pssy2uxn--q9jy" +
+ "b4colognewyorkshirecifedexeterxn--qcka1pmckinseyxn--qqqt11miscon" +
+ "fusedxn--qxa6axn--qxamuneuestudioxn--rady-iraxn--rdal-poaxn--rde" +
+ "-ulavangenxn--rdy-0nabaris-uberleetrentino-sudtirolxn--rennesy-v" +
+ "1axn--rhkkervju-01aferrerotikagoshimalvikaszubyxn--rholt-mragowo" +
+ "odsidemonmouthalsaitamatsukuris-a-guruslivinghistoryxn--rhqv96gx" +
+ "n--rht27zxn--rht3dxn--rht61exn--risa-5naturalhistorymuseumcenter" +
+ "xn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byaxn--rny31h" +
+ "ammarfeastafricapitalonewmexicodyn-o-saurlandesevenassisicilyxn-" +
+ "-rovu88beskidyn-ip24xn--rros-granvindafjordxn--rskog-uuaxn--rst-" +
+ "0naturalsciencesnaturellestudynamisches-dnsokndalxn--rsta-franca" +
+ "iseharaxn--rvc1e0am3exn--ryken-vuaxn--ryrvik-byaxn--s-1faithamur" +
+ "akamigoris-a-hard-workersewinbarclaycards3-fips-us-gov-west-1xn-" +
+ "-s9brj9colonialwilliamsburgroundhandlingroznyxn--sandnessjen-ogb" +
+ "estbuyshouses3-website-ap-northeast-1xn--sandy-yuaxn--sdtirol-n2" +
+ "axn--seral-lraxn--ses554gxn--sgne-graphoxn--3hcrj9civilisationis" +
+ "shinguccircleverappsannaniyodogawaxn--skierv-utazastuff-4-salexn" +
+ "--skjervy-v1axn--skjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat-5n" +
+ "aturbruksgymnxn--slt-elabcieszynxn--smla-hraxn--smna-gratangentl" +
+ "entapisa-geekosakaerodromegallupinbargainstantcloudfunctionswede" +
+ "nvironmentalconservationfabricafederationionjukudoyamaizuruhrhcl" +
+ "oudiscourses3-us-east-2xn--snase-nraxn--sndre-land-0cbetainaboxf" +
+ "usejnymemsettsupportcp4xn--snes-poaxn--snsa-roaxn--sr-aurdal-l8a" +
+ "xn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbhzcasinordkappa" +
+ "lmasfjordenhktjeldsundishakotanhlfanhs3-website-ap-southeast-1xn" +
+ "--srfold-byaxn--srreisa-q1axn--srum-gratis-a-bulls-fanxn--stfold" +
+ "-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbieidsvollimitediskussio" +
+ "nsbereichaseljeepsondriodejaneirockartuzyoriikariyaltakatorin-th" +
+ "e-bandain-vpncateringebuildinglassassinationalheritageu-3xn--str" +
+ "e-toten-zcbielawashingtondclkarlsoyoshiokanzakiyokawaraxn--t60b5" +
+ "6axn--tckweatherchannelxn--tiq49xqyjeonnamerikawauexn--tjme-hrax" +
+ "n--tn0agrinetbankoseis-a-painteractivegaskvollxn--tnsberg-q1axn-" +
+ "-tor131oxn--trany-yuaxn--trentin-sd-tirol-rzbiellaakesvuemielecc" +
+ "eu-4xn--trentin-sdtirol-7vbrplsbxn--3oq18vl8pn36axn--trentino-sd" +
+ "-tirol-c3bieszczadygeyachimataipeigersundisrechtrainingleezevje-" +
+ "og-hornnes3-website-ap-southeast-2xn--trentino-sdtirol-szbievath" +
+ "letajimabaridagawalbrzycharitydalcesurancechirealmpmnikonanporov" +
+ "noceanographiquextraspace-to-rentalstomakomaibaraxn--trentinosd-" +
+ "tirol-rzbifukagawashtenawdev-myqnapcloudeitysfjordivtasvuodnakam" +
+ "agayahabaghdadivttasvuotnakamuratakahamalselvendrellimoliseminex" +
+ "n--trentinosdtirol-7vbigv-infoodnetworkangerxn--trentinsd-tirol-" +
+ "6vbihorologyukincheoninohekinannestadiyukuhashimojindianapolis-a" +
+ "-bloggerxn--trentinsdtirol-nsbikedaejeonbukcoalvdalaheadjudygarl" +
+ "andnpalmspringsakerxn--trgstad-r1axn--trna-woaxn--troms-zuaxn--t" +
+ "ysvr-vraxn--uc0atvaroyxn--uc0ay4axn--uist22handsonyoursidellogli" +
+ "astradingxn--uisz3gxn--unjrga-rtashkentunesomnarvikommunexn--unu" +
+ "p4yxn--uuwu58axn--vads-jraxn--valle-aoste-ebbtunkomvuxn--30rr7yx" +
+ "n--valle-d-aoste-ehbodollstufftoread-booksnesolarssonxn--valleao" +
+ "ste-e7axn--valledaoste-ebbvacationstuttgartrentinsued-tirolxn--v" +
+ "ard-jraxn--vegrshei-c0axn--vermgensberater-ctbilbaokinawashirosa" +
+ "tochigiessensiositelemarkarmoyurihonjournalistjohninomiyakonojor" +
+ "pelandrangedalinkyard-cloudyclusterxn--vermgensberatung-pwbillus" +
+ "trationredumbrellahppiacenzachpomorskienirasakindianmarketinglit" +
+ "chattanooganordlandray-dnsupdaternopilawaweddingliwicexn--vestvg" +
+ "y-ixa6oxn--vg-yiabkhaziaxn--vgan-qoaxn--vgsy-qoa0jetztrentino-su" +
+ "ed-tirolxn--vgu402coloradoplateaudioxn--vhquvestfoldxn--vler-qoa" +
+ "xn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861biocpanama" +
+ "tta-varjjatjmaxxxboxenapponazure-mobilexn--w4r85el8fhu5dnraxn--w" +
+ "4rs40lxn--wcvs22dxn--wgbh1columbusheyxn--wgbl6axn--xhq521birdart" +
+ "centerprisecloudcontrolappleborkdalwaysdatabaseballangenkainanae" +
+ "robatickets3-website-eu-west-1xn--xkc2al3hye2axn--xkc2dl3a5ee0ha" +
+ "ngglidingxn--y9a3aquariumishimatsumaebashimodatexn--yer-znaturhi" +
+ "storischesusakis-gonexn--yfro4i67oxn--ygarden-p1axn--ygbi2ammxn-" +
+ "-3pxu8koninjambylxn--ystre-slidre-ujbirkenesoddtangenovaranzanqu" +
+ "anpachigasakihokumakogengerdalaskanittedallasalleangaviikaascoli" +
+ "picenodumetacentrumeteorappanasonicatholicaxiashorokanaiexn--zbx" +
+ "025dxn--zf0ao64axn--zf0avxlxn--zfr164birthplacexnbayxz"
// nodes is the list of nodes. Each node is represented as a uint32, which
// encodes the node's children, wildcard bit and node type (as an index into
@@ -524,1809 +526,1818 @@ const text = "9guacuiababia-goracleaningroks-theatree12hpalermomahachijoinvill"
// [15 bits] text index
// [ 6 bits] text length
var nodes = [...]uint32{
- 0x32ce03,
- 0x243304,
- 0x2d7946,
- 0x215803,
- 0x215806,
- 0x38b3c6,
- 0x3ae643,
- 0x246d44,
- 0x341047,
- 0x2d7588,
+ 0x297a83,
+ 0x32a504,
+ 0x2eadc6,
+ 0x24c943,
+ 0x24c946,
+ 0x38b146,
+ 0x3b05c3,
+ 0x214bc4,
+ 0x201507,
+ 0x2eaa08,
0x1a000c2,
- 0x1f3aec7,
- 0x377a09,
- 0x2c628a,
- 0x2c628b,
- 0x231b43,
- 0x233805,
- 0x2203042,
- 0x212284,
- 0x2d7ac3,
- 0x203045,
- 0x260c6c2,
- 0x3290c3,
- 0x2b22c44,
- 0x33f285,
- 0x2e0c182,
- 0x26d6ce,
- 0x24e5c3,
- 0x3a36c6,
- 0x3206082,
- 0x2fd2c7,
- 0x236086,
- 0x3602982,
- 0x27f103,
- 0x27f104,
- 0x397646,
- 0x36bf08,
- 0x288086,
- 0x270104,
+ 0x1f36987,
+ 0x376649,
+ 0x36c4ca,
+ 0x36c4cb,
+ 0x201203,
+ 0x233985,
+ 0x2201602,
+ 0x2d2044,
+ 0x2eaf43,
+ 0x269045,
+ 0x2601742,
+ 0x343083,
+ 0x2a135c4,
+ 0x2982c5,
+ 0x2e0de42,
+ 0x26e24e,
+ 0x250b83,
+ 0x3a6286,
+ 0x3203082,
+ 0x306087,
+ 0x2372c6,
+ 0x3606bc2,
+ 0x27f943,
+ 0x27f944,
+ 0x399b86,
+ 0x35bc88,
+ 0x286046,
+ 0x26fc84,
0x3a00ac2,
- 0x34cb09,
- 0x2171c7,
- 0x344986,
- 0x28dfc9,
- 0x32fa48,
- 0x34b444,
- 0x3947c6,
- 0x336a46,
- 0x3e03582,
- 0x3da686,
- 0x24070f,
- 0x2112ce,
- 0x217bc4,
- 0x20d005,
- 0x32cd05,
- 0x2e1b49,
- 0x23b549,
- 0x397e47,
- 0x3cffc6,
- 0x28e143,
- 0x4212082,
- 0x2232c3,
- 0x28da0a,
- 0x4613583,
- 0x3cea45,
- 0x299082,
- 0x38c209,
- 0x4e02282,
- 0x213c04,
- 0x21fb46,
- 0x2fff45,
- 0x36db84,
- 0x5643344,
- 0x225843,
- 0x232b84,
- 0x5a03342,
- 0x31fd84,
- 0x5f8a244,
- 0x2fe64a,
+ 0x34abc9,
+ 0x2236c7,
+ 0x202446,
+ 0x353689,
+ 0x32f208,
+ 0x2478c4,
+ 0x23f2c6,
+ 0x3c3846,
+ 0x3e041c2,
+ 0x36fcc6,
+ 0x242f4f,
+ 0x2d108e,
+ 0x219a44,
+ 0x218b45,
+ 0x32a405,
+ 0x2e7589,
+ 0x23d709,
+ 0x39a387,
+ 0x3ddf06,
+ 0x267243,
+ 0x42037c2,
+ 0x21adc3,
+ 0x35054a,
+ 0x460f283,
+ 0x3d95c5,
+ 0x29d282,
+ 0x38b6c9,
+ 0x4e01182,
+ 0x201c84,
+ 0x2f3146,
+ 0x28a745,
+ 0x36d1c4,
+ 0x560fbc4,
+ 0x220dc3,
+ 0x232d04,
+ 0x5a02d02,
+ 0x235784,
+ 0x5e79284,
+ 0x33cb4a,
0x6200882,
- 0x21ef47,
- 0x27afc8,
- 0x7204c82,
- 0x2f6e47,
- 0x2c2b84,
- 0x2c2b87,
- 0x3d6805,
- 0x362187,
- 0x2e73c6,
- 0x27d8c4,
- 0x328e45,
- 0x256407,
- 0x8a05802,
- 0x3da803,
- 0x21e182,
- 0x369a03,
- 0x8e09bc2,
- 0x281705,
- 0x9200202,
- 0x3c2844,
- 0x277445,
- 0x217b07,
- 0x2fdfce,
- 0x2b1044,
- 0x261dc4,
- 0x20e5c3,
- 0x251789,
- 0x265f0b,
- 0x273788,
- 0x28dd88,
- 0x2e53c8,
- 0x28c008,
- 0x34b28a,
- 0x362087,
- 0x276586,
- 0x9615842,
- 0x2be403,
- 0x3cab03,
- 0x3cd244,
- 0x2be443,
- 0x28ca83,
- 0x1736f42,
- 0x9a019c2,
- 0x27e945,
- 0x313dc6,
- 0x2335c4,
- 0x379907,
- 0x263e46,
- 0x2bfa04,
- 0x399647,
- 0x2019c3,
- 0x9ecb4c2,
- 0xa227682,
- 0xa627442,
- 0x227446,
- 0xaa00282,
- 0x285845,
- 0x338483,
- 0x3bfc44,
- 0x2eddc4,
- 0x2eddc5,
- 0x3c7543,
- 0xae48343,
- 0xb338dc2,
- 0x203c05,
- 0x203c0b,
- 0x20b24b,
- 0x26bb44,
- 0x204a09,
- 0x205f44,
- 0xb606802,
- 0x207043,
- 0x207183,
- 0xba08082,
- 0x2ed8ca,
- 0xbe08342,
- 0x212505,
- 0x2de9ca,
- 0x35cc04,
- 0x208343,
- 0x209ec4,
- 0x20ba03,
- 0x20ba04,
- 0x20ba07,
- 0x20c585,
- 0x20d346,
- 0x213006,
- 0x213cc3,
- 0x217f48,
- 0x20db43,
- 0xc209582,
- 0x23d4c8,
- 0x20958b,
- 0x221cc8,
- 0x222a86,
- 0x224447,
- 0x226fc8,
- 0xd205b82,
- 0xd6c1142,
- 0x33f3c8,
- 0x20f9c7,
- 0x30f645,
- 0x30f648,
- 0xdadcf48,
- 0x27ff43,
- 0x22a104,
- 0x38b442,
- 0xde2a542,
- 0xe243bc2,
- 0xea2a8c2,
- 0x22a8c3,
- 0xee04042,
- 0x30e303,
- 0x237484,
- 0x204043,
- 0x206444,
- 0x37454b,
- 0x2094c3,
- 0x2e94c6,
- 0x27f404,
- 0x2ba20e,
- 0x381e45,
- 0x3a37c8,
- 0x3dd347,
- 0x3dd34a,
- 0x22f603,
- 0x243107,
- 0x2660c5,
- 0x22f604,
- 0x250206,
- 0x250207,
- 0x2fc304,
- 0xf30f084,
- 0x2fe304,
- 0x2fe306,
- 0x3db9c4,
- 0x3ba486,
- 0x226e03,
- 0x3a8908,
- 0x3c38c8,
- 0x291d83,
- 0x2ed883,
- 0x346ac4,
- 0x358183,
- 0xfa09382,
- 0xfe8b742,
- 0x20b983,
- 0x240d86,
- 0x329383,
- 0x35b7c4,
- 0x102179c2,
- 0x24a583,
- 0x2179c3,
- 0x214c82,
- 0x10600d42,
- 0x2c5c86,
- 0x2344c7,
- 0x2f8407,
- 0x3a9405,
- 0x207484,
- 0x29bac5,
- 0x267347,
- 0x3cb009,
- 0x2db306,
- 0x2ea9c6,
- 0x10a02c82,
- 0x331448,
- 0x31f486,
- 0x34ebc5,
- 0x3ac387,
- 0x306104,
- 0x306105,
- 0x10e02c84,
- 0x202c88,
- 0x11203cc2,
- 0x11600482,
- 0x21d746,
- 0x200488,
- 0x335f85,
- 0x34d406,
- 0x351b08,
- 0x35b088,
- 0x11a07d45,
- 0x11e25744,
- 0x322d47,
- 0x122059c2,
- 0x1268cac2,
- 0x13a0c302,
- 0x21fc45,
- 0x284a05,
- 0x384006,
- 0x326507,
- 0x3a80c7,
- 0x1422c0c3,
- 0x318887,
- 0x3a4548,
- 0x1f22c289,
- 0x26d887,
- 0x22c9c7,
- 0x22d408,
- 0x22dc06,
- 0x22f106,
- 0x23000c,
- 0x230d0a,
- 0x231b87,
- 0x2336cb,
- 0x234307,
- 0x23430e,
- 0x1f635404,
- 0x235604,
- 0x237347,
- 0x25bfc7,
- 0x23ac06,
- 0x23ac07,
- 0x333e47,
- 0x2e4003,
- 0x1fa2ae02,
- 0x23bec6,
- 0x23beca,
- 0x23c90b,
- 0x23e487,
- 0x23ef05,
- 0x23f443,
- 0x23f946,
- 0x23f947,
- 0x2ef083,
- 0x1fe00102,
- 0x24038a,
- 0x20378f82,
- 0x20661482,
- 0x20a3d1c2,
- 0x20e36182,
- 0x242505,
- 0x242cc4,
- 0x21659dc2,
- 0x31fe05,
- 0x23cf03,
- 0x2954c5,
- 0x2028c4,
- 0x20a204,
- 0x280186,
- 0x27e0c6,
- 0x203e03,
- 0x3bcfc4,
- 0x2f8703,
- 0x226081c2,
- 0x2247c4,
- 0x3232c6,
- 0x2247c5,
- 0x244086,
- 0x3ac488,
- 0x22b144,
- 0x36b888,
- 0x322805,
- 0x37f488,
- 0x2c24c6,
- 0x3049c7,
- 0x287804,
- 0x23a87806,
- 0x23ee85c3,
- 0x39c943,
- 0x2ec108,
- 0x331344,
- 0x24361707,
- 0x24abe846,
- 0x2dbb09,
- 0x330048,
- 0x34b8c8,
- 0x355644,
- 0x3c6d83,
- 0x23cfc2,
- 0x24e4cfc2,
- 0x25201d42,
- 0x204583,
- 0x2560a782,
- 0x2ef004,
- 0x24ad06,
- 0x21af83,
- 0x2b6387,
- 0x2f7443,
- 0x334888,
- 0x2101c5,
- 0x259203,
- 0x2773c5,
- 0x277504,
- 0x305e06,
- 0x2127c6,
- 0x217a46,
- 0x2203c4,
- 0x2346c3,
- 0x25a05202,
- 0x25e2ec05,
- 0x200843,
- 0x2660f4c2,
- 0x22c243,
- 0x373605,
- 0x26a32c43,
- 0x27232c49,
- 0x27600942,
- 0x27e04282,
- 0x28b045,
- 0x215e46,
- 0x205606,
- 0x2cf508,
- 0x2cf50b,
- 0x32ed0b,
- 0x3a9605,
- 0x2cbc09,
- 0x1600b42,
- 0x2cfc08,
- 0x204d04,
- 0x28601bc2,
- 0x34a603,
- 0x28e5c186,
- 0x33e208,
- 0x29201a02,
- 0x28c608,
- 0x29609802,
- 0x33c4ca,
- 0x29a46e03,
- 0x2a378046,
- 0x3910c8,
- 0x330906,
- 0x387087,
- 0x240907,
- 0x3365ca,
- 0x35cc84,
- 0x35fe04,
- 0x376889,
- 0x2a7a7545,
+ 0x3c1f47,
+ 0x2d0548,
+ 0x76031c2,
+ 0x328287,
+ 0x2c9044,
+ 0x2c9047,
+ 0x3d57c5,
+ 0x378847,
+ 0x303c06,
+ 0x2f0e44,
+ 0x342e05,
+ 0x257187,
+ 0x8e01482,
+ 0x36fe43,
+ 0x9226782,
+ 0x3633c3,
+ 0x9606b42,
+ 0x274985,
+ 0x9a00202,
+ 0x2cd104,
+ 0x2c23c5,
+ 0x219987,
+ 0x249e0e,
+ 0x2b6e44,
+ 0x290f44,
+ 0x210603,
+ 0x286ac9,
+ 0x3aa74b,
+ 0x2edac8,
+ 0x303148,
+ 0x3b1888,
+ 0x3d9ac8,
+ 0x3534ca,
+ 0x378747,
+ 0x2cdf46,
+ 0x9e47402,
+ 0x374d83,
+ 0x3ccac3,
+ 0x3ce604,
+ 0x374dc3,
+ 0x35cb83,
+ 0x1732182,
+ 0xa2016c2,
+ 0x27cd05,
+ 0x224686,
+ 0x233744,
+ 0x38a5c7,
+ 0x2355c6,
+ 0x2c8984,
+ 0x3abfc7,
+ 0x215dc3,
+ 0xa6d5bc2,
+ 0xaa20f82,
+ 0xae20d42,
+ 0x220d46,
+ 0xb200282,
+ 0x284405,
+ 0x3336c3,
+ 0x3c8744,
+ 0x2f7784,
+ 0x2f7785,
+ 0x3d6d83,
+ 0xb602703,
+ 0xba019c2,
+ 0x205fc5,
+ 0x205fcb,
+ 0x20ec0b,
+ 0x229904,
+ 0x206689,
+ 0x208244,
+ 0xbe09c42,
+ 0x20a483,
+ 0x20a703,
+ 0xc202e82,
+ 0x398a0a,
+ 0xc601542,
+ 0x2d22c5,
+ 0x2e6a0a,
+ 0x247584,
+ 0x20b103,
+ 0x20b7c4,
+ 0x20d6c3,
+ 0x20d6c4,
+ 0x20d6c7,
+ 0x20e245,
0x2114c6,
- 0x20fbc3,
- 0x24bd04,
- 0x2aa0d644,
- 0x344147,
- 0x2aee3587,
- 0x293104,
- 0x236cc5,
- 0x3840c8,
- 0x3a03c7,
- 0x243547,
- 0x2b20c202,
- 0x298d44,
- 0x294348,
- 0x2443c4,
- 0x249204,
- 0x249b85,
- 0x249cc7,
- 0x2b658549,
- 0x24a804,
- 0x24b0c9,
- 0x24b308,
- 0x24ba84,
- 0x24ba87,
- 0x2ba4cdc3,
- 0x24d2c7,
- 0x2be014c2,
- 0x16b1b82,
- 0x24df86,
- 0x24e607,
- 0x24e884,
- 0x24f687,
- 0x250647,
- 0x2510c3,
- 0x2b12c2,
- 0x20bcc2,
- 0x28de83,
- 0x3be3c4,
- 0x3be3cb,
- 0x2c28de88,
- 0x258bc4,
- 0x254205,
- 0x255c47,
- 0x238a05,
- 0x2d908a,
- 0x258b03,
- 0x2c603d42,
- 0x20da44,
- 0x25bd89,
- 0x2601c3,
- 0x260287,
- 0x2683c9,
- 0x3de348,
- 0x23e2c3,
- 0x27c387,
- 0x27ce49,
- 0x266883,
- 0x284fc4,
- 0x286209,
- 0x289406,
- 0x2c7d43,
- 0x2076c2,
- 0x235c83,
- 0x2b1987,
- 0x235c85,
- 0x3b8806,
- 0x26e144,
- 0x3cc645,
- 0x279803,
- 0x213f06,
- 0x210dc3,
- 0x204c02,
- 0x248304,
- 0x2ca6bc02,
- 0x2ce6bc03,
- 0x2d2020c2,
- 0x247603,
- 0x213484,
- 0x239bc7,
- 0x216586,
- 0x278042,
- 0x2d65c582,
- 0x3ac684,
- 0x2da0bb82,
- 0x2de063c2,
- 0x2b36c4,
- 0x2b36c5,
- 0x27d545,
- 0x366a06,
- 0x2e204882,
- 0x3bd645,
- 0x3cedc5,
- 0x204883,
- 0x21a286,
- 0x21b845,
- 0x2273c2,
- 0x35acc5,
- 0x2273c4,
- 0x22b083,
- 0x22b2c3,
- 0x2e61d302,
- 0x256607,
- 0x24b504,
- 0x24b509,
- 0x24bc04,
- 0x284883,
- 0x39bf88,
- 0x2ea84884,
- 0x284886,
- 0x2a6b43,
- 0x254c43,
- 0x228b03,
- 0x2eeedc82,
- 0x302342,
- 0x2f200642,
- 0x339f48,
- 0x301408,
- 0x3aedc6,
- 0x272945,
- 0x2802c5,
- 0x345387,
- 0x2f677f05,
- 0x220482,
- 0x2fa97642,
- 0x2fe00042,
- 0x278cc8,
- 0x31f3c5,
- 0x2f3e44,
- 0x243fc5,
- 0x245547,
- 0x27a1c4,
- 0x240282,
- 0x30205702,
- 0x352784,
- 0x222f47,
- 0x28cf47,
- 0x362144,
- 0x3cc143,
- 0x291cc4,
- 0x291cc8,
- 0x22f446,
- 0x25008a,
- 0x2eb544,
- 0x296008,
- 0x242ec4,
- 0x224546,
- 0x297604,
- 0x21ff46,
- 0x24b7c9,
- 0x2a62c7,
- 0x2087c3,
- 0x306033c2,
- 0x34b643,
- 0x206a02,
- 0x30a17d82,
- 0x2fb0c6,
- 0x380708,
- 0x2a8787,
- 0x26ad49,
- 0x2ad689,
- 0x2aa9c5,
- 0x2abd49,
- 0x2ac545,
- 0x2ad385,
- 0x2ae008,
- 0x30e04104,
- 0x31251207,
- 0x22cd83,
- 0x2ae207,
- 0x22cd86,
- 0x2ae607,
- 0x2a5e45,
- 0x22c603,
- 0x31630ac2,
- 0x208584,
- 0x31a0adc2,
- 0x31e04742,
- 0x3ae186,
- 0x27af45,
- 0x2b0587,
- 0x2fef43,
- 0x28ca04,
- 0x201e83,
- 0x20f703,
- 0x32203dc2,
- 0x32a01cc2,
- 0x38b4c4,
- 0x3881c3,
- 0x2fbf45,
- 0x32e00f42,
- 0x33602b82,
- 0x2d5c86,
- 0x2fdf04,
- 0x303f04,
- 0x303f0a,
- 0x33e005c2,
- 0x263f43,
- 0x20cd0a,
- 0x214388,
- 0x34224e44,
- 0x2005c3,
- 0x34601803,
- 0x266ac9,
- 0x24d8c9,
- 0x2b6486,
- 0x34a14543,
- 0x36f705,
- 0x3b62cd,
- 0x214546,
- 0x219e4b,
- 0x34e129c2,
- 0x394608,
- 0x38218042,
- 0x38604dc2,
- 0x2b3905,
- 0x38a01742,
- 0x2c67c7,
- 0x214903,
- 0x21ba08,
- 0x38e02cc2,
- 0x219384,
- 0x20ff03,
- 0x2f7ac5,
+ 0x211846,
+ 0x2124c3,
+ 0x217688,
+ 0x208f03,
+ 0xca0cd42,
+ 0x308648,
+ 0x2862cb,
+ 0x21ffc8,
+ 0x2205c6,
+ 0x2213c7,
+ 0x227208,
+ 0xda07682,
+ 0xde1d482,
+ 0x298408,
+ 0x210c07,
+ 0x30dcc5,
+ 0x30dcc8,
+ 0xe301108,
+ 0x26c243,
+ 0x22a444,
+ 0x38b1c2,
+ 0xe62a882,
+ 0xea16182,
+ 0xf22c042,
+ 0x22c043,
+ 0xf6086c2,
+ 0x296303,
+ 0x3b2744,
+ 0x2086c3,
+ 0x247884,
+ 0x296a4b,
+ 0x215843,
+ 0x2f1486,
+ 0x278704,
+ 0x2c340e,
+ 0x38f345,
+ 0x261e48,
+ 0x3a6387,
+ 0x3a638a,
+ 0x22f983,
+ 0x2343c7,
+ 0x3aa905,
+ 0x22f984,
+ 0x2526c6,
+ 0x2526c7,
+ 0x31a204,
+ 0xfb0d704,
+ 0x24a144,
+ 0x33c806,
+ 0x22b844,
+ 0x3b5cc6,
+ 0x232443,
+ 0x3ba348,
+ 0x3df888,
+ 0x290f03,
+ 0x3989c3,
+ 0x340384,
+ 0x355943,
+ 0x10215702,
+ 0x1068d502,
+ 0x218043,
+ 0x2435c6,
+ 0x343343,
+ 0x30c504,
+ 0x10a3fec2,
+ 0x24cf43,
+ 0x327783,
+ 0x212c02,
+ 0x10e00d42,
+ 0x2cb886,
+ 0x234807,
+ 0x3c25c7,
+ 0x3b91c5,
+ 0x3d3004,
+ 0x29fbc5,
+ 0x2253c7,
+ 0x2ade49,
+ 0x2c19c6,
+ 0x2ec246,
+ 0x1120b682,
+ 0x2f4b48,
+ 0x3ae1c6,
+ 0x2aed85,
+ 0x30a6c7,
+ 0x3562c4,
+ 0x3562c5,
+ 0x11668c84,
+ 0x268c88,
+ 0x11a06082,
+ 0x11e00482,
+ 0x26e986,
+ 0x200488,
+ 0x331ac5,
+ 0x34b646,
+ 0x34ef88,
+ 0x35b788,
+ 0x12201805,
+ 0x126136c4,
+ 0x2136c7,
+ 0x12a07cc2,
+ 0x12e167c2,
+ 0x14201242,
+ 0x2f3245,
+ 0x14a83545,
+ 0x262486,
+ 0x323647,
+ 0x39f087,
+ 0x14e14a83,
+ 0x338487,
+ 0x38a948,
+ 0x2022cd09,
+ 0x26e407,
+ 0x22d447,
+ 0x22e548,
+ 0x22ed46,
+ 0x22f486,
+ 0x2300cc,
+ 0x23180a,
+ 0x231c07,
+ 0x23384b,
+ 0x234647,
+ 0x23464e,
+ 0x20635944,
+ 0x235b44,
+ 0x238b07,
+ 0x25c7c7,
0x23d006,
- 0x21e244,
- 0x2ed843,
- 0x2b26c3,
- 0x392163c2,
- 0x3a9584,
- 0x3b77c5,
- 0x2b1587,
- 0x279c43,
- 0x2b2183,
- 0x16b2242,
- 0x2b2243,
- 0x2b2643,
- 0x39600e02,
- 0x246b84,
- 0x27e2c6,
- 0x3cba43,
- 0x2b2d43,
- 0x39a48902,
- 0x248908,
- 0x2b3d84,
- 0x20ed06,
- 0x255087,
- 0x270906,
- 0x291e84,
- 0x47e01b82,
- 0x22cc4b,
- 0x2f91ce,
- 0x216c0f,
- 0x292e43,
- 0x48659902,
- 0x163ea82,
- 0x48a017c2,
- 0x296583,
- 0x20e883,
- 0x2dd4c6,
- 0x3cb286,
- 0x2b0187,
- 0x30b0c4,
- 0x48e11902,
- 0x492106c2,
- 0x245005,
- 0x2f1887,
- 0x2b47c6,
- 0x496526c2,
- 0x2526c4,
- 0x2b93c3,
- 0x49a4e082,
- 0x49f72383,
- 0x2bac04,
- 0x2c1d89,
- 0x4a2c8c82,
- 0x4a601882,
- 0x201885,
- 0x4aac9182,
- 0x4ae03c42,
- 0x35f107,
- 0x377c8b,
- 0x2406c5,
- 0x2570c9,
- 0x268746,
- 0x4b207844,
- 0x328949,
- 0x2c9cc7,
- 0x32a547,
- 0x22abc3,
- 0x2b3546,
- 0x3246c7,
- 0x20a443,
- 0x291246,
- 0x4ba23342,
- 0x4be1d702,
- 0x34b783,
- 0x38c3c5,
- 0x221587,
- 0x3cb386,
- 0x235c05,
- 0x24b484,
- 0x2a4d05,
- 0x38cf44,
- 0x4c201b02,
- 0x2c71c4,
- 0x267f44,
- 0x38830d,
- 0x37adc9,
- 0x22aec8,
- 0x201b04,
- 0x3dad85,
- 0x3a8e87,
- 0x206504,
- 0x263f07,
- 0x2eb205,
- 0x4c607b04,
- 0x2a8b45,
- 0x25ee84,
- 0x27a306,
- 0x35f885,
- 0x4ca26902,
- 0x21d6c3,
- 0x28f783,
- 0x348084,
- 0x348085,
- 0x37c586,
- 0x235d45,
- 0x3d3284,
- 0x32c043,
- 0x4ce0a6c6,
- 0x225045,
- 0x225c85,
- 0x326404,
- 0x2eb5c3,
- 0x2eb5cc,
- 0x4d204482,
- 0x4d601442,
- 0x4da03102,
- 0x20e403,
- 0x20e404,
- 0x4de05f82,
- 0x380d88,
- 0x3b88c5,
- 0x2c93c4,
- 0x23aa86,
- 0x4e217002,
- 0x4e6115c2,
- 0x4ea00c42,
- 0x291a85,
- 0x220286,
- 0x20d584,
- 0x397b86,
- 0x21ed06,
- 0x221983,
- 0x4ee9e10a,
- 0x279e05,
- 0x28d9c3,
- 0x2254c6,
- 0x3bd449,
- 0x2254c7,
- 0x2a9c48,
- 0x32f909,
- 0x3b9e48,
- 0x303706,
- 0x20e583,
- 0x4f21fc02,
- 0x39dc88,
- 0x4f644502,
- 0x4fa06a42,
- 0x238cc3,
- 0x2e2a45,
- 0x29b404,
- 0x2f5d89,
- 0x32acc4,
- 0x3dabc8,
- 0x50206a43,
- 0x507749c4,
- 0x215e88,
- 0x388247,
- 0x50a52742,
- 0x22e302,
- 0x32cc85,
- 0x261b89,
- 0x211543,
- 0x27fcc4,
- 0x36f6c4,
- 0x20e903,
- 0x2812ca,
- 0x50f40d82,
- 0x512083c2,
- 0x2cb443,
- 0x38f5c3,
- 0x162c142,
- 0x2bdc03,
- 0x5161d902,
- 0x51a00bc2,
- 0x51f03f84,
- 0x3b3506,
- 0x269884,
- 0x278b03,
- 0x3bf203,
- 0x52200bc3,
- 0x23cc86,
- 0x3a0e45,
- 0x2cb5c7,
- 0x2cf7c6,
- 0x2d0648,
- 0x2d0846,
- 0x2035c4,
- 0x29cd0b,
- 0x2d3643,
- 0x2d3645,
- 0x21fdc2,
- 0x35f402,
- 0x52642582,
- 0x52a05a02,
- 0x215fc3,
- 0x52e6bf42,
- 0x26bf43,
- 0x2d46c3,
- 0x5360cac2,
- 0x53ad9bc6,
- 0x257906,
- 0x53ed9d02,
- 0x542071c2,
- 0x5462b302,
- 0x54a09082,
- 0x54e18942,
- 0x552050c2,
- 0x208b03,
- 0x26cb45,
- 0x379b06,
- 0x55617b84,
- 0x3230ca,
- 0x3a5d46,
- 0x20bdc4,
- 0x28dd43,
- 0x56212b02,
- 0x205642,
- 0x22c203,
- 0x5660a803,
- 0x3b8307,
- 0x35f787,
- 0x58ae4447,
- 0x39e847,
- 0x229183,
- 0x333b4a,
- 0x340644,
- 0x319084,
- 0x31908a,
- 0x3a8205,
- 0x58e11482,
- 0x24df43,
- 0x59200602,
- 0x24bbc3,
- 0x34b603,
- 0x59a00582,
- 0x3a44c4,
- 0x345584,
- 0x3b0645,
- 0x31e4c5,
- 0x2e4a06,
- 0x304146,
- 0x59e39242,
- 0x5a202f42,
- 0x33d185,
- 0x257612,
- 0x353286,
- 0x270e03,
- 0x356606,
- 0x31cd05,
- 0x16045c2,
- 0x626080c2,
- 0x376203,
- 0x2080c3,
- 0x396203,
- 0x62a18d42,
- 0x23a183,
- 0x63223242,
- 0x220103,
- 0x300808,
- 0x239503,
- 0x239506,
- 0x3c4d87,
- 0x321186,
- 0x32118b,
- 0x20bd07,
- 0x2ebf04,
- 0x63a00c02,
- 0x3b8745,
- 0x63e09783,
- 0x21d283,
- 0x2e60c5,
- 0x333a43,
- 0x64733a46,
- 0x3c8fca,
- 0x2a3fc3,
- 0x235f44,
- 0x2003c6,
- 0x34efc6,
- 0x64a16603,
- 0x340007,
- 0x2669c7,
- 0x29e985,
- 0x26f486,
- 0x2158c3,
- 0x6761a4c3,
- 0x67a00a82,
- 0x67e8f804,
- 0x3c36c9,
- 0x2137c5,
- 0x229bc4,
- 0x354e88,
- 0x2e47c5,
- 0x682352c5,
- 0x23f549,
- 0x344a43,
- 0x261404,
- 0x686161c2,
- 0x2161c3,
- 0x68a74542,
- 0x274546,
- 0x1678002,
- 0x68e08f82,
- 0x291988,
- 0x291c83,
- 0x2a8a87,
- 0x2b2745,
- 0x2b22c5,
- 0x2b22cb,
- 0x2e8206,
- 0x2b24c6,
- 0x23bb44,
- 0x2e8946,
- 0x69321408,
- 0x27f4c3,
- 0x264503,
- 0x264504,
- 0x2e51c4,
- 0x2ea707,
- 0x2ec545,
- 0x696ec682,
- 0x69a08242,
- 0x6a21ae45,
- 0x2b8f44,
- 0x2d244b,
- 0x2edcc8,
- 0x250f44,
- 0x6a62ad42,
- 0x6aa23c42,
- 0x3ba403,
- 0x2efb84,
- 0x2efe45,
- 0x2f0607,
- 0x2f3984,
- 0x362244,
- 0x6ae16102,
- 0x37b5c9,
- 0x2f4c05,
- 0x240985,
- 0x2f5cc5,
- 0x6b216103,
- 0x2f67c4,
- 0x2f67cb,
- 0x2f8a84,
- 0x2f8d4b,
- 0x2f95c5,
- 0x216d4a,
- 0x2f9e88,
- 0x2fa08a,
- 0x2fa883,
- 0x2fa88a,
- 0x6ba13602,
- 0x6be20082,
- 0x6c2ba0c3,
- 0x6c6fdb02,
- 0x2fdb03,
- 0x6caed182,
- 0x6cf38c02,
- 0x301f04,
- 0x218086,
- 0x3978c5,
- 0x303c03,
- 0x32d3c6,
- 0x3973c5,
- 0x3d2dc4,
- 0x6d200902,
- 0x29fc84,
- 0x2cb88a,
- 0x3001c7,
- 0x32a006,
- 0x242f47,
- 0x23bf03,
- 0x2bac48,
- 0x3c608b,
- 0x2b6585,
- 0x2c26c5,
- 0x2c26c6,
- 0x229984,
- 0x3a4f48,
- 0x20f883,
- 0x25b984,
- 0x336947,
- 0x2ebb46,
- 0x340846,
- 0x2ba04a,
- 0x24b144,
- 0x31b14a,
- 0x6d7009c6,
- 0x3009c7,
- 0x254287,
- 0x273f04,
- 0x273f09,
- 0x251e05,
- 0x234f8b,
- 0x2ed083,
- 0x212983,
- 0x6da1de03,
- 0x331d84,
- 0x6de00682,
- 0x228906,
- 0x6e2bb4c5,
- 0x356845,
- 0x24e1c6,
- 0x2a1384,
- 0x6e602442,
- 0x23f484,
- 0x6ea0a982,
- 0x3287c5,
- 0x34c884,
- 0x6f61b443,
- 0x6fa08102,
- 0x208103,
- 0x3062c6,
- 0x6fe04e82,
- 0x392248,
- 0x225344,
- 0x225346,
- 0x38fe46,
- 0x70255d04,
- 0x20a645,
- 0x225648,
- 0x227187,
- 0x34e087,
- 0x34e08f,
- 0x294246,
- 0x23b743,
- 0x23fac4,
- 0x20dc83,
- 0x224684,
- 0x24e784,
- 0x706085c2,
- 0x28b443,
- 0x335543,
- 0x70a09482,
- 0x209483,
- 0x227603,
- 0x20c60a,
- 0x272bc7,
- 0x25398c,
- 0x70e53c46,
- 0x253dc6,
- 0x254d87,
- 0x7122d847,
- 0x25aac9,
- 0x23d604,
- 0x71660404,
- 0x71a16002,
- 0x71e02e42,
- 0x2ba406,
- 0x33fe04,
- 0x28b8c6,
- 0x22dcc8,
- 0x38c484,
- 0x2d7b46,
- 0x2055c5,
- 0x7228a748,
+ 0x23d007,
+ 0x3b3147,
+ 0x2d2c43,
+ 0x20a2ba02,
+ 0x23e306,
+ 0x23e30a,
+ 0x23f44b,
+ 0x240987,
+ 0x241405,
+ 0x241e43,
+ 0x242246,
+ 0x242247,
+ 0x2f8983,
+ 0x20e00102,
+ 0x242bca,
+ 0x21377dc2,
+ 0x2173da82,
+ 0x21a3fd02,
+ 0x21e373c2,
+ 0x245385,
+ 0x245d44,
+ 0x22a05582,
+ 0x235805,
0x23fa43,
- 0x314705,
- 0x28dc43,
- 0x240a83,
- 0x240a84,
- 0x20da03,
- 0x72648d42,
- 0x72a03382,
- 0x2ecf49,
- 0x291b85,
- 0x292544,
- 0x296b45,
- 0x209b04,
- 0x2cd147,
- 0x35a545,
- 0x72e46484,
- 0x2d2088,
- 0x2d2f86,
- 0x2dedc4,
- 0x2e13c8,
- 0x2e1a07,
- 0x73201702,
- 0x2e99c4,
- 0x310d44,
- 0x2c2d87,
- 0x73605bc4,
- 0x215782,
- 0x73a01782,
- 0x201783,
- 0x201784,
- 0x29f703,
- 0x2aed05,
- 0x73e2e942,
- 0x302245,
- 0x287582,
- 0x30a205,
- 0x3c0085,
- 0x74210342,
- 0x217944,
- 0x74602602,
- 0x28eb86,
- 0x2bf706,
- 0x261cc8,
- 0x2c3748,
- 0x3ae104,
- 0x30ed05,
- 0x3abbc9,
- 0x2cfd44,
- 0x3c8f84,
- 0x2204c3,
- 0x319c83,
- 0x74b19c85,
- 0x2411c5,
- 0x284b04,
- 0x356bcd,
- 0x293042,
- 0x359103,
- 0x74e09442,
- 0x75203a42,
- 0x391d05,
- 0x3babc7,
- 0x21e484,
- 0x32fb09,
- 0x2cb9c9,
- 0x277e43,
- 0x277e48,
- 0x245e09,
- 0x214947,
- 0x204185,
- 0x37c106,
- 0x37ec86,
- 0x3808c5,
- 0x37aec5,
- 0x75601a82,
- 0x287205,
- 0x2b7748,
- 0x2c5a46,
- 0x75a52b07,
- 0x2bd2c4,
- 0x2fc647,
- 0x305546,
- 0x75e01082,
- 0x37c286,
- 0x30988a,
- 0x30a105,
- 0x762e8f82,
- 0x76621902,
- 0x3645c6,
- 0x221908,
- 0x76a8d107,
- 0x76e43b02,
- 0x288ec3,
- 0x2ff806,
- 0x226884,
- 0x275b06,
- 0x319f46,
- 0x2034ca,
- 0x2021c5,
- 0x3006c6,
- 0x2520c3,
- 0x2520c4,
- 0x207442,
- 0x331403,
- 0x7720e442,
- 0x2f1803,
- 0x7760cf84,
- 0x221a44,
- 0x77a21a4a,
- 0x22ce03,
- 0x266c87,
- 0x30d106,
- 0x2ff144,
- 0x20bc82,
- 0x2a6f02,
- 0x77e007c2,
- 0x22b9c3,
- 0x254047,
+ 0x314885,
+ 0x2688c4,
+ 0x2afb04,
+ 0x2cea06,
+ 0x250f06,
+ 0x2061c3,
+ 0x3bb644,
+ 0x303ec3,
+ 0x23a02a42,
+ 0x213c44,
+ 0x213c46,
+ 0x221745,
+ 0x244d46,
+ 0x30a7c8,
+ 0x223dc4,
+ 0x367bc8,
+ 0x231e85,
+ 0x262b88,
+ 0x2caa06,
+ 0x217c07,
+ 0x273504,
+ 0x24e73506,
+ 0x252239c3,
+ 0x39e183,
+ 0x31d988,
+ 0x29ffc4,
+ 0x2572ccc7,
+ 0x25ee4846,
+ 0x2e4849,
+ 0x362008,
+ 0x36a408,
+ 0x3b6544,
+ 0x3c7903,
+ 0x22dd42,
+ 0x2624e782,
+ 0x2660fa82,
+ 0x3c9083,
+ 0x26a01642,
+ 0x2f8904,
+ 0x279986,
+ 0x21c103,
+ 0x2bc7c7,
+ 0x303743,
+ 0x32fcc8,
+ 0x20b885,
+ 0x25a683,
+ 0x2c2345,
+ 0x2c2484,
+ 0x30bcc6,
+ 0x20cac6,
+ 0x2198c6,
+ 0x2f39c4,
+ 0x234a03,
+ 0x26e0fe02,
+ 0x27233fc5,
+ 0x200843,
+ 0x27a07382,
+ 0x22d1c3,
+ 0x2676c5,
+ 0x27e32dc3,
+ 0x28632dc9,
+ 0x28a00942,
+ 0x29208902,
+ 0x28ce05,
+ 0x213f06,
+ 0x28ec06,
+ 0x2e6608,
+ 0x2e660b,
+ 0x339c8b,
+ 0x3b93c5,
+ 0x2d6149,
+ 0x1600b42,
+ 0x2f0548,
+ 0x206984,
+ 0x29a03c42,
+ 0x34a843,
+ 0x2a25c986,
+ 0x3c2888,
+ 0x2a6142c2,
+ 0x35c708,
+ 0x2aaaac82,
+ 0x337f8a,
+ 0x2aedb383,
+ 0x2b776c86,
+ 0x392488,
+ 0x214886,
+ 0x387b87,
+ 0x243147,
+ 0x3c33ca,
+ 0x247604,
+ 0x360704,
+ 0x376209,
+ 0x2bba9dc5,
+ 0x26e286,
+ 0x210e03,
+ 0x24e3c4,
+ 0x2be196c4,
+ 0x3458c7,
+ 0x2c241c87,
+ 0x294f84,
+ 0x39f545,
+ 0x262548,
+ 0x39e647,
+ 0x3a24c7,
+ 0x2c60dec2,
+ 0x29cf44,
+ 0x293048,
+ 0x246d84,
+ 0x24b904,
+ 0x24bcc5,
+ 0x24be07,
+ 0x2ca7ebc9,
+ 0x2232c4,
+ 0x24d789,
+ 0x24d9c8,
+ 0x24e144,
+ 0x24e147,
+ 0x2ce4e583,
+ 0x24ea87,
+ 0x2d20bb42,
+ 0x16b8842,
+ 0x24fa46,
+ 0x250087,
+ 0x250704,
+ 0x251d07,
+ 0x253787,
+ 0x253f83,
+ 0x22dec2,
+ 0x20d982,
+ 0x303243,
+ 0x3c6704,
+ 0x3c670b,
+ 0x2d703248,
+ 0x25a044,
+ 0x255b85,
+ 0x257407,
+ 0x2e92c5,
+ 0x33144a,
+ 0x259f83,
+ 0x2da05dc2,
+ 0x208e04,
+ 0x25c589,
+ 0x260c03,
+ 0x260cc7,
+ 0x240749,
+ 0x205dc8,
+ 0x22af03,
+ 0x27b3c7,
+ 0x27be89,
+ 0x225583,
+ 0x283b84,
+ 0x284d09,
+ 0x28b2c6,
+ 0x2f4103,
+ 0x2015c2,
+ 0x23c903,
+ 0x2b8647,
+ 0x23c905,
+ 0x3b1686,
+ 0x270744,
+ 0x35ff85,
+ 0x27c7c3,
+ 0x212706,
+ 0x292503,
+ 0x206882,
+ 0x248f84,
+ 0x2de299c2,
+ 0x2e2299c3,
+ 0x2e607082,
+ 0x248343,
+ 0x211cc4,
+ 0x2ece07,
+ 0x2946c6,
+ 0x262302,
+ 0x2ea5cd82,
+ 0x30a9c4,
+ 0x2f20d842,
+ 0x2f616902,
+ 0x2ef084,
+ 0x2ef085,
+ 0x302c85,
+ 0x35ef86,
+ 0x2fa0f582,
+ 0x39b745,
+ 0x3ba745,
+ 0x283483,
+ 0x20f586,
+ 0x20fec5,
+ 0x220cc2,
+ 0x35b3c5,
+ 0x220cc4,
+ 0x223d03,
+ 0x223f43,
+ 0x2fe05b42,
+ 0x2e29c7,
+ 0x24dbc4,
+ 0x24dbc9,
+ 0x24e2c4,
+ 0x2833c3,
+ 0x2b61c8,
+ 0x302833c4,
+ 0x2833c6,
+ 0x2a37c3,
+ 0x256303,
+ 0x308003,
+ 0x306f7642,
+ 0x309442,
+ 0x30a00642,
+ 0x335408,
+ 0x36af48,
+ 0x3b7906,
+ 0x3830c5,
+ 0x22c805,
+ 0x204287,
+ 0x30e77185,
+ 0x23c782,
+ 0x3129b602,
+ 0x31600042,
+ 0x2cfb88,
+ 0x3ae105,
+ 0x2fc7c4,
+ 0x244c85,
+ 0x2547c7,
+ 0x3a3884,
+ 0x242ac2,
+ 0x31a11442,
+ 0x351144,
+ 0x220a87,
+ 0x28ddc7,
+ 0x378804,
+ 0x3cd483,
+ 0x290e44,
+ 0x290e48,
+ 0x22f7c6,
+ 0x25254a,
+ 0x326584,
+ 0x299288,
+ 0x234184,
+ 0x2214c6,
+ 0x29b5c4,
+ 0x2f3546,
+ 0x24de89,
+ 0x2a9fc7,
+ 0x207543,
+ 0x31e3ee42,
+ 0x3b62c3,
+ 0x209e42,
+ 0x32204702,
+ 0x349e46,
+ 0x381988,
+ 0x2abfc7,
+ 0x228b09,
+ 0x2b1549,
+ 0x2ad505,
+ 0x2afc09,
+ 0x2b0405,
+ 0x2b1245,
+ 0x2b1f88,
+ 0x32608784,
+ 0x32a540c7,
+ 0x22d803,
+ 0x2b2187,
+ 0x22d806,
+ 0x2b25c7,
+ 0x2a9ac5,
+ 0x22d083,
+ 0x32e315c2,
+ 0x20b344,
+ 0x3320e782,
+ 0x33606502,
+ 0x380e86,
+ 0x2d04c5,
+ 0x2b54c7,
+ 0x343a03,
+ 0x35cb04,
+ 0x209283,
+ 0x2cd743,
+ 0x33a06182,
+ 0x34205bc2,
+ 0x38b244,
+ 0x22de83,
+ 0x3047c5,
+ 0x34600f42,
+ 0x34e01f02,
+ 0x304fc6,
+ 0x201f04,
+ 0x306bc4,
+ 0x306bca,
+ 0x356005c2,
+ 0x213903,
+ 0x21884a,
+ 0x21bac8,
+ 0x35a21dc4,
+ 0x2005c3,
+ 0x35e96b43,
+ 0x237909,
+ 0x22e0c9,
+ 0x2bc8c6,
+ 0x3621bc83,
+ 0x21bc85,
+ 0x222f8d,
+ 0x226586,
+ 0x26518b,
+ 0x3660ccc2,
+ 0x205708,
+ 0x3a217782,
+ 0x3a605382,
+ 0x2bad85,
+ 0x3aa04582,
+ 0x2b3307,
+ 0x210083,
+ 0x210088,
+ 0x3ae07882,
+ 0x288304,
+ 0x20c743,
+ 0x33b805,
+ 0x23fb46,
+ 0x224004,
+ 0x398983,
+ 0x2b9583,
+ 0x3b201d82,
+ 0x3b9344,
+ 0x3d4c45,
+ 0x2b8247,
+ 0x279403,
+ 0x2b8e43,
+ 0x16b9102,
+ 0x2b9103,
+ 0x2b9503,
+ 0x3b600e02,
+ 0x3473c4,
+ 0x251106,
+ 0x2e42c3,
+ 0x2b9c03,
+ 0x3ba49582,
+ 0x249588,
+ 0x2bab84,
+ 0x347146,
+ 0x255707,
+ 0x284646,
+ 0x29ff44,
+ 0x49e03fc2,
+ 0x22d6cb,
+ 0x2ff50e,
+ 0x216d8f,
+ 0x39d6c3,
+ 0x4a65ac42,
+ 0x161fb02,
+ 0x4aa0af02,
+ 0x2928c3,
+ 0x2108c3,
+ 0x20af06,
+ 0x21d306,
+ 0x34dec7,
+ 0x310c44,
+ 0x4ae14042,
+ 0x4b20bd82,
+ 0x2e0685,
+ 0x2ff987,
+ 0x2bb206,
+ 0x4b662702,
+ 0x384c44,
+ 0x2c03c3,
+ 0x4ba01e42,
+ 0x4bf73103,
+ 0x2c2984,
+ 0x2c8009,
+ 0x4c2ced42,
+ 0x4c614d42,
+ 0x344945,
+ 0x4cad3942,
+ 0x4ce06002,
+ 0x35f947,
+ 0x3768cb,
+ 0x242f05,
+ 0x258109,
+ 0x26aa86,
+ 0x4d209504,
+ 0x295449,
+ 0x2d46c7,
+ 0x3dea87,
+ 0x22c343,
+ 0x2eef06,
+ 0x324047,
+ 0x25cc03,
+ 0x2a6a86,
+ 0x4da1ae42,
+ 0x4de33042,
+ 0x3b6403,
+ 0x38b885,
+ 0x21f407,
+ 0x236146,
+ 0x23c885,
+ 0x24db44,
+ 0x2a8985,
+ 0x38dac4,
+ 0x4e202482,
+ 0x2cc844,
+ 0x22dfc4,
+ 0x22dfcd,
+ 0x377189,
+ 0x22c648,
+ 0x344bc4,
+ 0x328845,
+ 0x3b8c47,
+ 0x3c5cc4,
+ 0x265907,
+ 0x2e4005,
+ 0x4e6ac604,
+ 0x2bf345,
+ 0x25f8c4,
+ 0x3a39c6,
+ 0x3973c5,
+ 0x4ea05442,
+ 0x26e903,
+ 0x267fc3,
+ 0x348cc4,
+ 0x348cc5,
+ 0x396886,
+ 0x23c9c5,
+ 0x22ae84,
+ 0x329743,
+ 0x4ee1a286,
+ 0x221fc5,
+ 0x222a85,
+ 0x323544,
+ 0x2f6283,
+ 0x32660c,
+ 0x4f208b02,
+ 0x4f605102,
+ 0x4fa02042,
+ 0x21a8c3,
+ 0x21a8c4,
+ 0x4fe08282,
+ 0x30e1c8,
+ 0x3b1745,
+ 0x2d3b84,
+ 0x23af86,
+ 0x50223502,
+ 0x5061b542,
+ 0x50a00c42,
+ 0x290c05,
+ 0x2f3886,
+ 0x219604,
+ 0x39a0c6,
+ 0x362dc6,
+ 0x211183,
+ 0x50ea240a,
+ 0x2795c5,
+ 0x350503,
+ 0x222446,
+ 0x3d2d09,
+ 0x222447,
+ 0x2b4d08,
+ 0x32f0c9,
+ 0x2adfc8,
+ 0x227d46,
+ 0x2105c3,
+ 0x512017c2,
+ 0x39fa08,
+ 0x51601f42,
+ 0x51a09e82,
+ 0x2137c3,
+ 0x2ec0c5,
+ 0x29f2c4,
+ 0x2fe389,
+ 0x2898c4,
+ 0x24aec8,
+ 0x52209e83,
+ 0x52696ec4,
+ 0x213f48,
+ 0x22df07,
+ 0x52b3d642,
+ 0x238442,
+ 0x32a385,
+ 0x37fc49,
+ 0x23c803,
+ 0x27e384,
+ 0x31d284,
+ 0x210943,
+ 0x27f28a,
+ 0x52e03f82,
+ 0x5320b182,
+ 0x2d5b43,
+ 0x390883,
+ 0x1627f82,
+ 0x374583,
+ 0x5361d542,
+ 0x53a00bc2,
+ 0x53f06c44,
+ 0x3d7846,
+ 0x26bbc4,
+ 0x277d83,
+ 0x281c83,
+ 0x54200bc3,
+ 0x23f7c6,
+ 0x208405,
+ 0x2d9ac7,
+ 0x2d9a06,
+ 0x2dab48,
+ 0x2dad46,
+ 0x20e944,
+ 0x2a0f0b,
+ 0x2dd603,
+ 0x2dd605,
+ 0x20f002,
+ 0x35fc42,
+ 0x54645402,
+ 0x54a02382,
+ 0x202383,
+ 0x54e6c9c2,
+ 0x26c9c3,
+ 0x2de083,
+ 0x55622902,
+ 0x55ae2406,
+ 0x258946,
+ 0x55e05902,
+ 0x5620a742,
+ 0x56623f82,
+ 0x56a15402,
+ 0x56e18482,
+ 0x57202802,
+ 0x214e83,
+ 0x385546,
+ 0x57619a04,
+ 0x213a4a,
+ 0x3a4986,
+ 0x20da84,
+ 0x204643,
+ 0x5820ce02,
+ 0x208482,
+ 0x23a0c3,
+ 0x5861a3c3,
+ 0x3bd287,
+ 0x3972c7,
+ 0x5aed3087,
+ 0x344407,
+ 0x228643,
+ 0x22864a,
+ 0x262044,
+ 0x31afc4,
+ 0x31afca,
+ 0x22cb45,
+ 0x5b21bb02,
+ 0x24fa03,
+ 0x5b600602,
+ 0x24e283,
+ 0x3b6283,
+ 0x5be00582,
+ 0x38a8c4,
+ 0x204484,
+ 0x3c2d05,
+ 0x3dd205,
+ 0x26a146,
+ 0x306e06,
+ 0x5c230a42,
+ 0x5c602902,
+ 0x310805,
+ 0x258652,
+ 0x35e586,
+ 0x207283,
+ 0x359106,
+ 0x2bf805,
+ 0x16535c2,
+ 0x64a0a9c2,
+ 0x372b43,
+ 0x20a9c3,
+ 0x292083,
+ 0x64e06e42,
+ 0x210e83,
+ 0x6521ad42,
+ 0x276e43,
+ 0x24b188,
+ 0x2624c3,
+ 0x2ad386,
+ 0x3cfc87,
+ 0x321486,
+ 0x32148b,
+ 0x20d9c7,
+ 0x31d784,
+ 0x65a00c02,
+ 0x3b15c5,
+ 0x65e08443,
+ 0x26d243,
+ 0x3b29c5,
+ 0x33f243,
+ 0x6673f246,
+ 0x3cac0a,
+ 0x2a7083,
+ 0x2366c4,
+ 0x2003c6,
+ 0x2af186,
+ 0x66a42543,
+ 0x299047,
+ 0x237807,
+ 0x2a2c85,
+ 0x2e4406,
+ 0x222003,
+ 0x6960f7c3,
+ 0x69a00a82,
+ 0x69e0f044,
+ 0x3df689,
+ 0x21d685,
+ 0x356cc4,
+ 0x355b48,
+ 0x264bc5,
+ 0x6a231ac5,
+ 0x241f49,
+ 0x202503,
+ 0x33da04,
+ 0x6a614282,
+ 0x214283,
+ 0x6aa57b82,
+ 0x257b86,
+ 0x1677282,
+ 0x6ae15302,
+ 0x290b08,
+ 0x290e03,
+ 0x2bf287,
+ 0x2b9605,
+ 0x2b9185,
+ 0x2b918b,
+ 0x2eec86,
+ 0x2b9386,
+ 0x27d384,
+ 0x2efa86,
+ 0x6b321708,
+ 0x27fd03,
+ 0x265f03,
+ 0x265f04,
+ 0x2ed8c4,
+ 0x2f6a07,
+ 0x315645,
+ 0x6b72a5c2,
+ 0x6ba0a882,
+ 0x6c21bfc5,
+ 0x2c1044,
+ 0x2e0a0b,
+ 0x2f7688,
+ 0x253604,
+ 0x6c62c4c2,
+ 0x6ca1b742,
+ 0x3ba2c3,
+ 0x2f9484,
+ 0x2f9745,
+ 0x2fa147,
+ 0x6cefc304,
+ 0x378904,
+ 0x6d2141c2,
+ 0x37ab09,
+ 0x2fd745,
+ 0x2431c5,
+ 0x2fe2c5,
+ 0x6d6141c3,
+ 0x237f04,
+ 0x237f0b,
+ 0x2fedc4,
+ 0x2ff08b,
+ 0x3001c5,
+ 0x216eca,
+ 0x301708,
+ 0x30190a,
+ 0x3021c3,
+ 0x3021ca,
+ 0x6de11e42,
+ 0x6e214b42,
+ 0x6e615d43,
+ 0x6eadbd02,
+ 0x3068c3,
+ 0x6eef6702,
+ 0x6f333e42,
+ 0x309004,
+ 0x2177c6,
+ 0x399e05,
+ 0x30a643,
+ 0x298046,
+ 0x399905,
+ 0x3573c4,
+ 0x6f600902,
+ 0x299ec4,
+ 0x2d5dca,
+ 0x2ba807,
+ 0x33f5c6,
+ 0x234207,
+ 0x23e343,
+ 0x2c29c8,
+ 0x3d21cb,
+ 0x2bc9c5,
+ 0x2c8b85,
+ 0x2c8b86,
+ 0x34cb84,
+ 0x38ab88,
+ 0x21aa43,
+ 0x26ee44,
+ 0x3c3747,
+ 0x31d3c6,
+ 0x380b86,
+ 0x2c324a,
+ 0x24d804,
+ 0x31c0ca,
+ 0x6fb12606,
+ 0x312607,
+ 0x255c07,
+ 0x2a9a04,
+ 0x34a189,
+ 0x238dc5,
+ 0x307a4b,
+ 0x2f6603,
+ 0x20cc83,
+ 0x6fe1e243,
+ 0x22fb84,
+ 0x70200682,
+ 0x307e06,
+ 0x706c60c5,
+ 0x359345,
+ 0x24fc86,
+ 0x2a4944,
+ 0x70a013c2,
+ 0x241e84,
+ 0x70e0ca42,
+ 0x2160c5,
+ 0x3b2e44,
+ 0x71a1c5c3,
+ 0x71e0aa02,
+ 0x20aa03,
+ 0x21f646,
+ 0x72205142,
+ 0x393d08,
+ 0x2222c4,
+ 0x2222c6,
+ 0x391106,
+ 0x726574c4,
+ 0x21a205,
+ 0x356d88,
+ 0x3577c7,
+ 0x2ae247,
+ 0x2ae24f,
+ 0x292f46,
+ 0x23d183,
+ 0x242144,
+ 0x209043,
+ 0x221604,
+ 0x24e484,
+ 0x72a0b382,
+ 0x28d203,
+ 0x330983,
+ 0x72e090c2,
+ 0x215803,
+ 0x220f03,
+ 0x20e2ca,
+ 0x273847,
+ 0x25284c,
+ 0x73252b06,
+ 0x252c86,
+ 0x255407,
+ 0x7362e987,
+ 0x25a749,
+ 0x308784,
+ 0x73a5be04,
+ 0x73e023c2,
+ 0x742045c2,
+ 0x2c3606,
+ 0x298e44,
+ 0x28d686,
+ 0x22ee08,
+ 0x38b944,
+ 0x2eafc6,
+ 0x28ebc5,
+ 0x74750788,
+ 0x242343,
+ 0x3a6b85,
+ 0x3aa603,
+ 0x2432c3,
+ 0x2432c4,
+ 0x208dc3,
+ 0x74a499c2,
+ 0x74e02d42,
+ 0x2f64c9,
+ 0x290d05,
+ 0x291604,
+ 0x29ab05,
+ 0x206a84,
+ 0x286707,
+ 0x35a685,
+ 0x7523e804,
+ 0x2db988,
+ 0x2dcdc6,
+ 0x2e2d44,
+ 0x2e6e08,
+ 0x2e7447,
+ 0x75607842,
+ 0x2ef184,
+ 0x314cc4,
+ 0x2c9247,
+ 0x75a07844,
+ 0x24a682,
+ 0x75e02f82,
+ 0x210883,
+ 0x2e5ac4,
+ 0x299943,
+ 0x2b2cc5,
+ 0x7622ae42,
+ 0x309345,
+ 0x23c7c2,
+ 0x30f885,
+ 0x23c7c5,
+ 0x76607242,
+ 0x327704,
+ 0x76a071c2,
+ 0x33d486,
+ 0x2c8686,
+ 0x37fd88,
+ 0x2c9c08,
+ 0x380e04,
+ 0x3cdb05,
+ 0x310389,
+ 0x2f0684,
+ 0x3cabc4,
+ 0x288b03,
+ 0x26c703,
+ 0x76f02905,
+ 0x3829c5,
+ 0x283644,
+ 0x359b4d,
+ 0x294ec2,
+ 0x376403,
+ 0x77206382,
+ 0x77603242,
+ 0x3937c5,
+ 0x24b447,
+ 0x224244,
+ 0x32f2c9,
+ 0x2d5f09,
+ 0x2770c3,
+ 0x2770c8,
+ 0x312b09,
+ 0x21e7c7,
+ 0x77a08805,
+ 0x396406,
+ 0x3a06c6,
+ 0x3a8645,
+ 0x377285,
+ 0x77e01bc2,
+ 0x27a585,
+ 0x2bd4c8,
+ 0x2cb646,
+ 0x783b4347,
+ 0x2cf3c4,
+ 0x2da987,
+ 0x30b306,
+ 0x78601082,
+ 0x396586,
+ 0x30ef0a,
+ 0x30f785,
+ 0x78af00c2,
+ 0x78e11102,
+ 0x365486,
+ 0x211108,
+ 0x7928df87,
+ 0x79601402,
+ 0x214b83,
+ 0x3c0706,
+ 0x2caac4,
+ 0x346ac6,
+ 0x271ac6,
+ 0x26930a,
+ 0x2047c5,
+ 0x286f06,
+ 0x384643,
+ 0x384644,
+ 0x79a35002,
+ 0x2869c3,
+ 0x79e1a902,
+ 0x2ea903,
+ 0x7a218ac4,
+ 0x211244,
+ 0x7a61124a,
+ 0x21bd03,
+ 0x237ac7,
+ 0x313146,
+ 0x33c284,
+ 0x20d942,
+ 0x2aad42,
+ 0x7aa007c2,
+ 0x226e83,
+ 0x2559c7,
0x2007c7,
- 0x287dc4,
- 0x3d0847,
- 0x2f0706,
- 0x20fb07,
- 0x227544,
- 0x292445,
- 0x2187c5,
- 0x78214682,
- 0x3b2f46,
- 0x215943,
- 0x21e0c2,
- 0x21e0c6,
- 0x78621542,
- 0x78a19f82,
- 0x298e05,
- 0x78e47c82,
- 0x79201942,
- 0x324c85,
- 0x2d3985,
- 0x2a9385,
- 0x79a1d043,
- 0x24adc5,
- 0x2e82c7,
- 0x2f3505,
- 0x202385,
- 0x32b944,
- 0x229a46,
- 0x3dd844,
- 0x79e008c2,
- 0x7ab82d05,
- 0x3c9447,
- 0x3afe08,
- 0x24d686,
- 0x38bb4d,
- 0x24d689,
- 0x24d692,
- 0x34cf05,
- 0x37aa03,
- 0x7ae06902,
- 0x319b44,
- 0x2145c3,
- 0x38d005,
- 0x30b405,
- 0x7b20ff42,
- 0x259243,
- 0x7b62b902,
- 0x7beca302,
- 0x7c200082,
- 0x2e08c5,
- 0x2088c3,
- 0x7c60fa02,
- 0x7ca14302,
- 0x3a4486,
- 0x27ac8a,
- 0x208c83,
- 0x256203,
- 0x2f6ac3,
- 0x7de05402,
- 0x8c218d82,
- 0x8ca05782,
- 0x217042,
- 0x3cd2c9,
- 0x2c80c4,
- 0x2d6648,
- 0x8cefbb02,
- 0x8d60ff82,
- 0x2c4e85,
- 0x233b08,
- 0x23c708,
- 0x315b0c,
- 0x237843,
- 0x8da08842,
- 0x8de00f02,
- 0x3b9686,
- 0x30df85,
- 0x2dae43,
- 0x252f86,
- 0x30e0c6,
- 0x27a383,
- 0x310c83,
- 0x311346,
- 0x312bc4,
- 0x263546,
- 0x3b610a,
- 0x23fbc4,
- 0x313284,
- 0x314aca,
- 0x8e212f42,
- 0x24cf45,
- 0x31634a,
- 0x316285,
- 0x317c04,
- 0x317d06,
- 0x317e84,
- 0x216486,
- 0x8e615482,
- 0x215486,
- 0x251a45,
- 0x3b2dc7,
- 0x3b5f86,
- 0x254f84,
- 0x2db0c7,
- 0x20a4c5,
- 0x20a4c7,
- 0x3b7147,
- 0x3b714e,
- 0x389606,
- 0x22a785,
- 0x205b07,
- 0x207203,
- 0x207207,
- 0x21e905,
- 0x225944,
- 0x22a582,
- 0x23db47,
- 0x30b144,
- 0x241b04,
- 0x285f4b,
- 0x21c283,
- 0x2bc607,
- 0x21c284,
- 0x2bc907,
- 0x229683,
- 0x350f8d,
- 0x3a0c48,
- 0x8ea46384,
- 0x246385,
- 0x3194c5,
- 0x319903,
- 0x8ee25242,
- 0x31c243,
- 0x31d283,
- 0x3b30c4,
- 0x27cf45,
- 0x2159c7,
- 0x252146,
- 0x38cdc3,
- 0x22b34b,
- 0x27350b,
- 0x2ac28b,
- 0x3cad8b,
- 0x2e8fca,
- 0x36f44b,
- 0x39334b,
- 0x3d950c,
- 0x3dcb4b,
- 0x31ddd1,
- 0x31e20a,
- 0x31e70b,
- 0x31e9cc,
- 0x31eccb,
- 0x31ff4a,
- 0x3206ca,
- 0x321ece,
- 0x32344b,
- 0x32370a,
- 0x324dd1,
- 0x32520a,
- 0x32570b,
- 0x325c4e,
- 0x326b4c,
- 0x32738b,
- 0x32764e,
- 0x3279cc,
- 0x32b40a,
- 0x32c64c,
- 0x8f32c94a,
- 0x32d548,
- 0x32e109,
- 0x33204a,
- 0x3322ca,
- 0x33254b,
- 0x334cce,
- 0x335b91,
- 0x341509,
- 0x34174a,
- 0x34244b,
- 0x34634d,
- 0x3471ca,
- 0x348716,
- 0x349a8b,
- 0x34a80a,
- 0x34ad8a,
- 0x34c10b,
- 0x34c989,
- 0x351909,
- 0x351e8d,
- 0x35250b,
- 0x35340b,
- 0x353dcb,
- 0x3543c9,
- 0x354a0e,
- 0x35520a,
- 0x35608a,
- 0x35698a,
- 0x35724b,
- 0x357a8b,
- 0x35890d,
- 0x35a04d,
- 0x35a950,
- 0x35ae0b,
- 0x35b90c,
- 0x35cecb,
- 0x35ec0b,
- 0x3602ce,
- 0x3609cb,
- 0x3609cd,
- 0x36550b,
- 0x365f8f,
- 0x36634b,
- 0x366b8a,
- 0x3678c9,
- 0x367f89,
- 0x8f7689cb,
- 0x368c8e,
- 0x36900e,
- 0x36cecb,
- 0x36e00f,
- 0x37024b,
- 0x37050b,
- 0x3707cb,
- 0x370e8a,
- 0x377889,
- 0x37a00f,
- 0x37e9cc,
- 0x37ee0c,
- 0x37f8ce,
- 0x37fe4f,
- 0x38020e,
- 0x381310,
- 0x38170f,
- 0x3822ce,
- 0x382e8c,
- 0x383191,
- 0x3835d2,
- 0x384ad1,
- 0x3852ce,
- 0x38570b,
- 0x38570e,
- 0x385a8f,
- 0x385e4e,
- 0x3861d3,
- 0x386691,
- 0x386acc,
- 0x386dce,
- 0x38724c,
- 0x387793,
- 0x388650,
- 0x38a34c,
- 0x38a64c,
- 0x38ab0b,
- 0x38b0ce,
- 0x38b5cb,
- 0x38be8b,
- 0x38d30c,
- 0x39278a,
- 0x392b4c,
- 0x392e4c,
- 0x393149,
- 0x39494b,
- 0x394c08,
- 0x3953c9,
- 0x3953cf,
- 0x396c8b,
- 0x8fb9800a,
- 0x399fcc,
- 0x39b18b,
- 0x39b449,
- 0x39bbc8,
- 0x39c18b,
- 0x39c70b,
- 0x39d28a,
- 0x39d50b,
- 0x39da0c,
- 0x39e3c9,
- 0x39e608,
- 0x3a0f8b,
- 0x3a3ccb,
- 0x3a694e,
- 0x3a7e4b,
- 0x3aabcb,
- 0x3b6ccb,
- 0x3b6f89,
- 0x3b74cd,
- 0x3c9e8a,
- 0x3cdd57,
- 0x3cf418,
- 0x3d41c9,
- 0x3d530b,
- 0x3d5814,
- 0x3d5d0b,
- 0x3d628a,
- 0x3d694a,
- 0x3d6bcb,
- 0x3d7410,
- 0x3d7811,
- 0x3d7eca,
- 0x3d8b0d,
- 0x3d920d,
- 0x3ddd8b,
- 0x3b3043,
- 0x8ff83d43,
- 0x32af06,
- 0x22ef05,
- 0x307347,
- 0x332e46,
- 0x1602d42,
- 0x2ab3c9,
- 0x32d1c4,
- 0x2e4d08,
- 0x21dd43,
- 0x319a87,
- 0x22de82,
- 0x2b05c3,
- 0x902057c2,
- 0x2cc446,
- 0x2cdb04,
- 0x347d04,
- 0x346243,
- 0x90ac91c2,
- 0x90e2a444,
- 0x273e47,
- 0x9122a1c2,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x111148,
- 0x20ca43,
+ 0x285d84,
+ 0x3da107,
+ 0x2fa246,
+ 0x210d47,
+ 0x220e44,
+ 0x2ae145,
+ 0x205345,
+ 0x7ae1e502,
+ 0x3d7286,
+ 0x220383,
+ 0x2266c2,
+ 0x2266c6,
+ 0x7b21f3c2,
+ 0x7b633442,
+ 0x29d005,
+ 0x7ba02c02,
+ 0x7be02982,
+ 0x324605,
+ 0x2d7505,
+ 0x2ac745,
+ 0x7c65b003,
+ 0x279a45,
+ 0x2eed47,
+ 0x36cc85,
+ 0x204985,
+ 0x261f44,
+ 0x264a46,
+ 0x38e104,
+ 0x7ca008c2,
+ 0x7d793085,
+ 0x3cb087,
+ 0x3c0bc8,
+ 0x253c46,
+ 0x253c4d,
+ 0x262d49,
+ 0x262d52,
+ 0x37a385,
+ 0x37ae03,
+ 0x7da09d42,
+ 0x3027c4,
+ 0x226603,
+ 0x3cb985,
+ 0x310f85,
+ 0x7de0c782,
+ 0x25a6c3,
+ 0x7e226dc2,
+ 0x7ea1d602,
+ 0x7ee00082,
+ 0x2e9bc5,
+ 0x207643,
+ 0x7f205b02,
+ 0x7f60c2c2,
+ 0x38a886,
+ 0x2d020a,
+ 0x215003,
+ 0x2579c3,
+ 0x2ff8c3,
+ 0x80e01b82,
+ 0x8f20c1c2,
+ 0x8fa0a5c2,
+ 0x203642,
+ 0x3ce689,
+ 0x2ce144,
+ 0x2dfac8,
+ 0x8ff04382,
+ 0x90606482,
+ 0x3bd905,
+ 0x233c88,
+ 0x231148,
+ 0x2f738c,
+ 0x2398c3,
+ 0x90a075c2,
+ 0x90e00f02,
+ 0x24ac46,
+ 0x313fc5,
+ 0x295b43,
+ 0x254686,
+ 0x314106,
+ 0x296b03,
+ 0x314c03,
+ 0x315046,
+ 0x316884,
+ 0x29cc86,
+ 0x23cd44,
+ 0x316f44,
+ 0x31784a,
+ 0x912b7402,
+ 0x24e705,
+ 0x3193ca,
+ 0x319305,
+ 0x31a7c4,
+ 0x31a8c6,
+ 0x31aa44,
+ 0x214546,
+ 0x91602b42,
+ 0x24c5c6,
+ 0x33bf85,
+ 0x286d87,
+ 0x33a106,
+ 0x255604,
+ 0x2e3407,
+ 0x234f85,
+ 0x23b687,
+ 0x3bc247,
+ 0x3bc24e,
+ 0x278646,
+ 0x222705,
+ 0x207787,
+ 0x20a783,
+ 0x3d3a47,
+ 0x20ab85,
+ 0x2123c4,
+ 0x22a8c2,
+ 0x325ec7,
+ 0x310cc4,
+ 0x23dec4,
+ 0x284a4b,
+ 0x21cb83,
+ 0x2c4907,
+ 0x21cb84,
+ 0x2c4c07,
+ 0x3a6603,
+ 0x34e40d,
+ 0x3a2f88,
+ 0x91a292c4,
+ 0x23e705,
+ 0x31b805,
+ 0x31bc43,
+ 0x91e221c2,
+ 0x31d1c3,
+ 0x31e083,
+ 0x3d7404,
+ 0x27bf85,
+ 0x220407,
+ 0x3846c6,
+ 0x38d943,
+ 0x22680b,
+ 0x249b8b,
+ 0x2acfcb,
+ 0x2c174b,
+ 0x3ccd4a,
+ 0x31734b,
+ 0x36ea8b,
+ 0x394e0c,
+ 0x3ada0b,
+ 0x3bf811,
+ 0x3dcf4a,
+ 0x31f58b,
+ 0x31f84c,
+ 0x31fb4b,
+ 0x3200ca,
+ 0x3209ca,
+ 0x3221ce,
+ 0x32294b,
+ 0x322c0a,
+ 0x324751,
+ 0x324b8a,
+ 0x32508b,
+ 0x3255ce,
+ 0x326c8c,
+ 0x32784b,
+ 0x327b0e,
+ 0x327e8c,
+ 0x328bca,
+ 0x329d4c,
+ 0x9232a04a,
+ 0x32a808,
+ 0x32b3c9,
+ 0x32ce8a,
+ 0x32d10a,
+ 0x32d38b,
+ 0x33010e,
+ 0x3316d1,
+ 0x33e209,
+ 0x33e44a,
+ 0x33ee8b,
+ 0x33fc0d,
+ 0x340a8a,
+ 0x341616,
+ 0x34298b,
+ 0x34668a,
+ 0x347d0a,
+ 0x3490cb,
+ 0x34aa49,
+ 0x34ed89,
+ 0x34f30d,
+ 0x34fe0b,
+ 0x351c8b,
+ 0x352509,
+ 0x352b4e,
+ 0x35328a,
+ 0x353dca,
+ 0x35438a,
+ 0x354a0b,
+ 0x35524b,
+ 0x3585cd,
+ 0x35a18d,
+ 0x35b050,
+ 0x35b50b,
+ 0x35ce4c,
+ 0x35d98b,
+ 0x35f44b,
+ 0x360c4e,
+ 0x36128b,
+ 0x36128d,
+ 0x3663cb,
+ 0x366e4f,
+ 0x36720b,
+ 0x36860a,
+ 0x368e49,
+ 0x369509,
+ 0x9276988b,
+ 0x369b4e,
+ 0x369ece,
+ 0x36be8b,
+ 0x36d64f,
+ 0x370acb,
+ 0x370d8b,
+ 0x37104b,
+ 0x37164a,
+ 0x3764c9,
+ 0x37964f,
+ 0x37e24c,
+ 0x37f30c,
+ 0x38058e,
+ 0x3810cf,
+ 0x38148e,
+ 0x381e50,
+ 0x38224f,
+ 0x382b4e,
+ 0x38320c,
+ 0x383511,
+ 0x383952,
+ 0x3856d1,
+ 0x385dce,
+ 0x38620b,
+ 0x38620e,
+ 0x38658f,
+ 0x38694e,
+ 0x386cd3,
+ 0x387191,
+ 0x3875cc,
+ 0x3878ce,
+ 0x387d4c,
+ 0x388293,
+ 0x388a90,
+ 0x389b8c,
+ 0x389e8c,
+ 0x38a34b,
+ 0x38ae4e,
+ 0x38b34b,
+ 0x38cb4b,
+ 0x38ddcc,
+ 0x39424a,
+ 0x39460c,
+ 0x39490c,
+ 0x394c09,
+ 0x396a0b,
+ 0x396cc8,
+ 0x397509,
+ 0x39750f,
+ 0x3991cb,
+ 0x92b9a54a,
+ 0x39bd0c,
+ 0x39cccb,
+ 0x39cf89,
+ 0x39d348,
+ 0x39da4b,
+ 0x39df4b,
+ 0x39eb8a,
+ 0x39ee0b,
+ 0x39f78c,
+ 0x3a0149,
+ 0x3a0388,
+ 0x3a3d0b,
+ 0x3a6f4b,
+ 0x3a91ce,
+ 0x3aaf4b,
+ 0x3ad38b,
+ 0x3bbdcb,
+ 0x3bc089,
+ 0x3bc5cd,
+ 0x3cbe4a,
+ 0x3cf5d7,
+ 0x3d18d8,
+ 0x3d5909,
+ 0x3d6b0b,
+ 0x3d79d4,
+ 0x3d7ecb,
+ 0x3d844a,
+ 0x3d894a,
+ 0x3d8bcb,
+ 0x3da790,
+ 0x3dab91,
+ 0x3db24a,
+ 0x3dc54d,
+ 0x3dcc4d,
+ 0x3e06cb,
+ 0x3d7383,
+ 0x92f9b403,
+ 0x289b06,
+ 0x246085,
+ 0x30ccc7,
+ 0x2ef746,
+ 0x165c942,
+ 0x270b89,
+ 0x297e44,
+ 0x2ed408,
+ 0x21e183,
+ 0x302707,
+ 0x205602,
+ 0x2b5503,
+ 0x93201442,
+ 0x2d69c6,
+ 0x2d8084,
+ 0x38f1c4,
+ 0x268643,
+ 0x93ad3982,
+ 0x93e2a784,
+ 0x34a0c7,
+ 0x9422a502,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x105dc8,
+ 0x203dc3,
0x2000c2,
- 0x9fe08,
- 0x20c302,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x20c603,
- 0x33b8d6,
- 0x363e93,
- 0x3d06c9,
- 0x322c48,
- 0x3b85c9,
- 0x3164c6,
- 0x3527d0,
- 0x20c013,
- 0x2ebc08,
- 0x27a947,
- 0x286b07,
- 0x2a4a4a,
- 0x3291c9,
- 0x28f509,
- 0x24224b,
- 0x2e73c6,
- 0x28830a,
- 0x222a86,
- 0x32cdc3,
- 0x256545,
- 0x3a8908,
- 0x233fcd,
- 0x21fd0c,
- 0x2eaac7,
- 0x3dcdcd,
- 0x225744,
- 0x22fd8a,
- 0x23084a,
- 0x230d0a,
- 0x20c307,
- 0x23a907,
- 0x23da84,
- 0x287806,
- 0x251c04,
- 0x2d58c8,
- 0x32ad09,
- 0x2cf506,
- 0x2cf508,
- 0x240dcd,
- 0x2cbc09,
- 0x3910c8,
- 0x240907,
- 0x23750a,
- 0x24e606,
- 0x25b7c7,
- 0x2fb704,
- 0x20b6c7,
- 0x228b0a,
- 0x239d4e,
- 0x277f05,
- 0x3d7c0b,
- 0x22b709,
- 0x24d8c9,
- 0x2c6607,
- 0x3c138a,
- 0x2c2cc7,
- 0x2f9309,
- 0x27b408,
- 0x2e640b,
- 0x2e2a45,
- 0x22ad8a,
- 0x22b0c9,
- 0x33e68a,
- 0x20460b,
- 0x20b5cb,
- 0x241fd5,
- 0x2c1f85,
- 0x240985,
- 0x2f67ca,
- 0x3dbb0a,
- 0x31b687,
- 0x233c43,
- 0x2ba388,
- 0x2d80ca,
- 0x225346,
- 0x2592c9,
- 0x28a748,
- 0x2dedc4,
- 0x387549,
- 0x2c3748,
- 0x2c2407,
- 0x382d06,
- 0x3c9447,
- 0x2b4607,
- 0x23ca85,
- 0x2e450c,
- 0x246385,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x20c302,
- 0x22c0c3,
- 0x20a803,
- 0x20ca43,
- 0x216603,
- 0x22c0c3,
- 0x20a803,
- 0xca43,
- 0x239503,
- 0x216603,
- 0x1ca243,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x9fe08,
- 0x20c302,
- 0x22c0c3,
- 0x22c0c7,
- 0x20a803,
- 0x216603,
- 0x20c302,
- 0x201d02,
- 0x2ebe82,
- 0x202cc2,
- 0x202f82,
- 0x2e5382,
- 0x91746,
- 0x4e9c9,
- 0x481b443,
- 0x88147,
- 0x5b03,
- 0x119045,
+ 0x9a048,
+ 0x201242,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x20e2c3,
+ 0x337396,
+ 0x364d53,
+ 0x3d9f89,
+ 0x2135c8,
+ 0x3b1449,
+ 0x319546,
+ 0x351190,
+ 0x20dcd3,
+ 0x31d488,
+ 0x277e87,
+ 0x279e87,
+ 0x2a86ca,
+ 0x343189,
+ 0x267d49,
+ 0x2d368b,
+ 0x303c06,
+ 0x30334a,
+ 0x2205c6,
+ 0x32a4c3,
+ 0x2e2905,
+ 0x3ba348,
+ 0x27decd,
+ 0x2f330c,
+ 0x2ec347,
+ 0x30bfcd,
+ 0x2136c4,
+ 0x22fe4a,
+ 0x23134a,
+ 0x23180a,
+ 0x20dfc7,
+ 0x23cb87,
+ 0x240104,
+ 0x273506,
+ 0x348a44,
+ 0x304c08,
+ 0x289909,
+ 0x2e6606,
+ 0x2e6608,
+ 0x24360d,
+ 0x2d6149,
+ 0x392488,
+ 0x243147,
+ 0x3b27ca,
+ 0x250086,
+ 0x2fd244,
+ 0x212107,
+ 0x30800a,
+ 0x3ab68e,
+ 0x277185,
+ 0x3daf8b,
+ 0x226bc9,
+ 0x22e0c9,
+ 0x2b3147,
+ 0x3d090a,
+ 0x2c9187,
+ 0x2ff649,
+ 0x33b048,
+ 0x2a5e8b,
+ 0x2ec0c5,
+ 0x22c50a,
+ 0x223d49,
+ 0x295aca,
+ 0x20f30b,
+ 0x21200b,
+ 0x2d3415,
+ 0x2c8205,
+ 0x2431c5,
+ 0x237f0a,
+ 0x22b98a,
+ 0x2f5d87,
+ 0x233dc3,
+ 0x2c3588,
+ 0x2e0eca,
+ 0x2222c6,
+ 0x259c09,
+ 0x350788,
+ 0x2e2d44,
+ 0x388049,
+ 0x2c9c08,
+ 0x2ca947,
+ 0x393086,
+ 0x3cb087,
+ 0x2be807,
+ 0x23f5c5,
+ 0x2d314c,
+ 0x23e705,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x201242,
+ 0x214a83,
+ 0x21a3c3,
+ 0x203dc3,
+ 0x242543,
+ 0x214a83,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x2624c3,
+ 0x242543,
+ 0x1cc203,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x9a048,
+ 0x201242,
+ 0x214a83,
+ 0x22ca07,
+ 0x86504,
+ 0x21a3c3,
+ 0x97a04,
+ 0x242543,
+ 0x201242,
+ 0x2052c2,
+ 0x3192c2,
+ 0x207882,
+ 0x201582,
+ 0x2eda82,
+ 0x908c6,
+ 0x50849,
+ 0xf3fc7,
+ 0x481c5c3,
+ 0x86107,
+ 0x148406,
+ 0x7783,
+ 0x11af85,
0xc1,
- 0x522c0c3,
- 0x232c43,
- 0x212483,
- 0x228b03,
- 0x214543,
- 0x211543,
- 0x2d9fc6,
- 0x20a803,
- 0x216603,
- 0x20f803,
- 0x9fe08,
- 0x3443c4,
- 0x374787,
- 0x346283,
- 0x2b3904,
- 0x218c83,
- 0x286243,
- 0x228b03,
- 0x176c87,
+ 0x5214a83,
+ 0x232dc3,
+ 0x228503,
+ 0x308003,
+ 0x21bc83,
+ 0x23c803,
+ 0x2e2806,
+ 0x21a3c3,
+ 0x242543,
+ 0x233d43,
+ 0x9a048,
+ 0x345b44,
+ 0x296c87,
+ 0x268683,
+ 0x2bad84,
+ 0x2187c3,
+ 0x284d43,
+ 0x308003,
+ 0x17e707,
0x9c4,
- 0x11c3,
- 0x2b05,
- 0x2000c2,
- 0x48343,
- 0x660c302,
- 0x688a549,
- 0x8abcd,
- 0x8af0d,
- 0x2ebe82,
- 0x24e44,
- 0x2b49,
+ 0x4e83,
+ 0x68b05,
+ 0x66000c2,
+ 0x2703,
+ 0x6a01242,
+ 0x6c8c109,
+ 0x8c98d,
+ 0x8cccd,
+ 0x3192c2,
+ 0x21dc4,
+ 0x68b49,
0x2003c2,
- 0x6e24d48,
- 0xf61c4,
- 0x9fe08,
- 0x1417c42,
+ 0x7221cc8,
+ 0xfe7c4,
+ 0x31c843,
+ 0x9a048,
+ 0x1414882,
0x14005c2,
- 0x1417c42,
- 0x1513486,
- 0x22df03,
- 0x26fb43,
- 0x762c0c3,
- 0x22fd84,
- 0x7a32c43,
- 0x8628b03,
- 0x203dc2,
- 0x224e44,
- 0x20a803,
- 0x2e59c3,
- 0x201e02,
- 0x216603,
- 0x2185c2,
- 0x301e43,
- 0x204e82,
- 0x203303,
- 0x28a803,
- 0x205842,
- 0x9fe08,
- 0x22df03,
- 0x3c38c8,
- 0x7ee59c3,
- 0x201e02,
- 0x301e43,
- 0x204e82,
- 0x8203303,
- 0x28a803,
- 0x205842,
- 0x253c47,
- 0x232c49,
- 0x301e43,
- 0x204e82,
- 0x203303,
- 0x28a803,
- 0x205842,
- 0x22c0c3,
- 0x248343,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x214543,
- 0x211543,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x20b142,
- 0x216103,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x248343,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x20a803,
- 0x216603,
- 0x204185,
- 0x20ff42,
+ 0x1414882,
+ 0x1517146,
+ 0x22f043,
+ 0x26f6c3,
+ 0x7a14a83,
+ 0x22fe44,
+ 0x7e32dc3,
+ 0x8b08003,
+ 0x206182,
+ 0x221dc4,
+ 0x21a3c3,
+ 0x3b1e83,
+ 0x204042,
+ 0x242543,
+ 0x202642,
+ 0x308f43,
+ 0x205142,
+ 0x2263c3,
+ 0x223a43,
+ 0x201342,
+ 0x9a048,
+ 0x22f043,
+ 0x3df888,
+ 0x83b1e83,
+ 0x204042,
+ 0x308f43,
+ 0x205142,
+ 0x86263c3,
+ 0x223a43,
+ 0x201342,
+ 0x252b07,
+ 0x232dc9,
+ 0x308f43,
+ 0x205142,
+ 0x2263c3,
+ 0x223a43,
+ 0x201342,
+ 0x214a83,
+ 0x16c2,
+ 0x32443,
+ 0x3c42,
+ 0xaac82,
+ 0x5cd82,
+ 0x17c2,
+ 0x1b82,
+ 0x43342,
+ 0x202703,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x21bc83,
+ 0x23c803,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x20eb02,
+ 0x2141c3,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x202703,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x21a3c3,
+ 0x242543,
+ 0x208805,
+ 0x20c782,
0x2000c2,
- 0x9fe08,
- 0x14470c8,
- 0xf704a,
- 0x228b03,
- 0x203281,
+ 0x9a048,
+ 0x144ca88,
+ 0x12848a,
+ 0x308003,
+ 0x225cc1,
0x2009c1,
0x200a01,
- 0x201301,
- 0x201281,
- 0x207101,
- 0x2027c1,
- 0x2223c1,
- 0x203bc1,
+ 0x204ac1,
+ 0x204781,
+ 0x20a541,
+ 0x201941,
+ 0x225dc1,
+ 0x23ff81,
0x200001,
0x2000c1,
0x200201,
- 0x12eb85,
- 0x9fe08,
+ 0x139b05,
+ 0x9a048,
0x200101,
- 0x2015c1,
+ 0x201301,
0x200501,
- 0x2014c1,
+ 0x205dc1,
0x200041,
0x200801,
0x200181,
@@ -2337,7112 +2348,7193 @@ var nodes = [...]uint32{
0x200581,
0x2003c1,
0x200a81,
- 0x209101,
+ 0x215481,
0x200401,
0x200741,
0x2007c1,
0x200081,
0x200f01,
- 0x205841,
- 0x201241,
- 0x2018c1,
- 0x204981,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
+ 0x201341,
+ 0x204f01,
+ 0x201b41,
+ 0x201441,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
0x2003c2,
- 0x216603,
- 0x1ae03,
- 0x176c87,
- 0x11647,
- 0x39346,
- 0x3484a,
- 0x89988,
- 0x53388,
- 0x53f47,
- 0xbdc06,
- 0xe1145,
- 0x175305,
- 0x125b03,
- 0x13686,
- 0x3e006,
- 0x242244,
- 0x2f6d07,
- 0x9fe08,
- 0x2db1c4,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0xc302,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x32cb48,
- 0x345344,
- 0x232b84,
- 0x26bb44,
- 0x3b9587,
- 0x2d6b87,
- 0x22c0c3,
- 0x23560b,
- 0x37400a,
- 0x2ff007,
- 0x308a08,
- 0x2f7b48,
- 0x232c43,
- 0x2e6687,
- 0x212483,
- 0x204f48,
- 0x209c89,
- 0x224e44,
- 0x214543,
- 0x238cc8,
- 0x211543,
- 0x2d378a,
- 0x2d9fc6,
- 0x3a5d47,
- 0x20a803,
- 0x373846,
- 0x26f9c8,
- 0x216603,
- 0x2433c6,
- 0x2edf0d,
- 0x2f0348,
- 0x2f8a8b,
- 0x20b186,
- 0x3baac7,
- 0x212605,
- 0x3c554a,
- 0x222085,
- 0x2410ca,
- 0x20ff42,
- 0x205b03,
- 0x241b04,
- 0x200006,
- 0x3ae643,
- 0x29fd03,
- 0x258783,
- 0x20f643,
- 0x373c83,
- 0x203582,
- 0x3abe85,
- 0x2aad89,
- 0x23d103,
- 0x225843,
- 0x215203,
- 0x200201,
- 0x2cfb07,
- 0x2e0605,
- 0x3a8843,
- 0x3c7543,
- 0x26bb44,
- 0x2fef83,
- 0x21b908,
- 0x367b03,
- 0x30f30d,
- 0x3896c8,
- 0x3c3a86,
- 0x2fdec3,
- 0x360cc3,
- 0x38d5c3,
- 0xc62c0c3,
- 0x232488,
- 0x235604,
- 0x23e483,
- 0x200106,
- 0x241648,
- 0x27c083,
- 0x3c5583,
- 0x22c243,
- 0x232c43,
- 0x2234c3,
- 0x2420c3,
- 0x284ac3,
- 0x3313c3,
- 0x28c603,
- 0x20d643,
- 0x38c105,
- 0x24e984,
- 0x24f307,
- 0x2b12c2,
- 0x252d83,
- 0x256cc6,
- 0x258283,
- 0x258e03,
- 0x277e03,
- 0x2be4c3,
- 0x3440c3,
- 0x297e47,
- 0xca28b03,
- 0x2530c3,
- 0x3d9e83,
- 0x204f43,
- 0x214383,
- 0x2157c3,
- 0x3c3345,
- 0x372f03,
- 0x200e09,
- 0x201503,
- 0x30b703,
- 0xce35c03,
- 0x2c9343,
- 0x219a08,
- 0x2aacc6,
- 0x2be286,
- 0x2b1306,
- 0x388d07,
+ 0x242543,
+ 0x1bf83,
+ 0x17e707,
+ 0xd1407,
+ 0x28886,
+ 0x34b8a,
+ 0x8b848,
+ 0x54e08,
+ 0x558c7,
+ 0x174586,
+ 0xea585,
+ 0x97805,
+ 0x125483,
+ 0x11ec6,
+ 0x365c6,
+ 0x2d3684,
+ 0x328147,
+ 0x9a048,
+ 0x2e3504,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x1242,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x32a248,
+ 0x204244,
+ 0x232d04,
+ 0x229904,
+ 0x24ab47,
+ 0x2e0007,
+ 0x214a83,
+ 0x235b4b,
+ 0x29650a,
+ 0x33c147,
+ 0x23bc48,
+ 0x33b888,
+ 0x232dc3,
+ 0x287847,
0x228503,
- 0x238cc3,
- 0x211543,
- 0x289a86,
- 0x21fdc2,
- 0x28f543,
- 0x33a385,
- 0x20a803,
- 0x316d07,
- 0x160ca43,
- 0x26f9c3,
- 0x204343,
- 0x230743,
- 0x21d283,
- 0x216603,
- 0x20dc46,
- 0x3b9d86,
- 0x37a8c3,
- 0x2ef183,
- 0x216103,
- 0x2275c3,
- 0x310d03,
- 0x2fd203,
- 0x302203,
- 0x3973c5,
- 0x236bc3,
- 0x236bc6,
- 0x211f08,
- 0x212983,
- 0x212989,
- 0x33f908,
- 0x216f88,
- 0x221105,
- 0x22ceca,
- 0x22e04a,
- 0x237acb,
- 0x23a5c8,
- 0x2ed803,
- 0x38cf03,
- 0x2f9503,
- 0x30e208,
- 0x3606c3,
- 0x2520c4,
- 0x207442,
- 0x25c283,
+ 0x206f88,
+ 0x2130c9,
+ 0x221dc4,
+ 0x21bc83,
+ 0x23b248,
+ 0x23c803,
+ 0x2dd74a,
+ 0x2e2806,
+ 0x3a4987,
+ 0x21a3c3,
+ 0x267906,
+ 0x26f548,
+ 0x242543,
+ 0x24d446,
+ 0x2f78cd,
+ 0x2f9e08,
+ 0x2fedcb,
+ 0x20eb46,
+ 0x24b347,
+ 0x2225c5,
+ 0x21674a,
+ 0x308245,
+ 0x3828ca,
+ 0x20c782,
+ 0x207783,
+ 0x23dec4,
+ 0x200006,
+ 0x3b05c3,
+ 0x299f43,
+ 0x27ee03,
+ 0x204243,
+ 0x296183,
+ 0x2041c2,
+ 0x355dc5,
+ 0x2ad8c9,
+ 0x23fc43,
+ 0x220dc3,
+ 0x21fdc3,
+ 0x200201,
+ 0x2f0447,
+ 0x2e9905,
+ 0x3b5c03,
+ 0x3d6d83,
+ 0x229904,
+ 0x343a43,
+ 0x20ff88,
+ 0x35d143,
+ 0x30d98d,
+ 0x278708,
+ 0x3dfa46,
+ 0x286a03,
+ 0x361583,
+ 0x38e083,
+ 0xce14a83,
+ 0x232608,
+ 0x235b44,
+ 0x240983,
+ 0x200106,
+ 0x243d88,
+ 0x27b0c3,
+ 0x216783,
+ 0x22d1c3,
+ 0x232dc3,
+ 0x21afc3,
+ 0x2532c3,
+ 0x283603,
+ 0x286983,
+ 0x2cbf83,
+ 0x2196c3,
+ 0x38b5c5,
+ 0x250804,
+ 0x251987,
+ 0x22dec2,
+ 0x254483,
+ 0x257d06,
+ 0x2592c3,
+ 0x25a283,
+ 0x277083,
+ 0x374e43,
+ 0x345843,
+ 0x29c047,
+ 0xd308003,
+ 0x2425c3,
+ 0x286a43,
+ 0x206c03,
+ 0x21bac3,
+ 0x24c903,
+ 0x20ef85,
+ 0x373c83,
+ 0x200e09,
+ 0x20bb83,
+ 0x311283,
+ 0xd63c883,
+ 0x2d3b03,
+ 0x219208,
+ 0x2ad806,
+ 0x374c06,
+ 0x2b7106,
+ 0x389147,
+ 0x227d43,
+ 0x2137c3,
+ 0x23c803,
+ 0x28b946,
+ 0x20f002,
+ 0x267d83,
+ 0x353145,
+ 0x21a3c3,
+ 0x319e87,
+ 0x1603dc3,
+ 0x202903,
+ 0x2089c3,
+ 0x21fec3,
+ 0x26d243,
+ 0x242543,
+ 0x209006,
+ 0x3b5f86,
+ 0x37a243,
+ 0x2f8a83,
+ 0x2141c3,
+ 0x220ec3,
+ 0x314c83,
+ 0x305fc3,
+ 0x309303,
+ 0x399905,
+ 0x22b983,
+ 0x39f446,
+ 0x2d1cc8,
+ 0x20cc83,
+ 0x20cc89,
+ 0x298948,
+ 0x223488,
+ 0x229a85,
+ 0x22f18a,
+ 0x23818a,
+ 0x239b4b,
+ 0x23b808,
+ 0x398943,
+ 0x38da83,
+ 0x30a583,
+ 0x326f48,
+ 0x376dc3,
+ 0x384644,
+ 0x235002,
+ 0x25ca83,
0x2007c3,
- 0x228803,
- 0x250d43,
- 0x20f803,
- 0x20ff42,
- 0x229543,
- 0x237843,
- 0x313603,
- 0x315504,
- 0x241b04,
- 0x3ced43,
- 0x9fe08,
+ 0x356c43,
+ 0x263343,
+ 0x233d43,
+ 0x20c782,
+ 0x229e43,
+ 0x2398c3,
+ 0x3172c3,
+ 0x318284,
+ 0x23dec4,
+ 0x20fe43,
+ 0x9a048,
0x2000c2,
0x200ac2,
- 0x203582,
- 0x202542,
+ 0x2041c2,
+ 0x204b42,
0x200202,
- 0x201ec2,
- 0x25a902,
- 0x201bc2,
+ 0x204342,
+ 0x240702,
+ 0x203c42,
0x200382,
0x200c42,
- 0x252742,
- 0x205a02,
- 0x26bf42,
+ 0x33d642,
+ 0x202382,
+ 0x26c9c2,
0x200a82,
- 0x2e5382,
- 0x2161c2,
- 0x201c82,
- 0x216102,
- 0x228702,
- 0x204d42,
+ 0x2eda82,
+ 0x214282,
+ 0x205742,
+ 0x2141c2,
+ 0x2c1902,
+ 0x2069c2,
0x200682,
- 0x216c82,
- 0x202442,
- 0x209482,
- 0x202e42,
- 0x2411c2,
- 0x201942,
+ 0x206f02,
+ 0x2013c2,
+ 0x2090c2,
+ 0x2045c2,
+ 0x26c702,
+ 0x202982,
0xc2,
0xac2,
- 0x3582,
- 0x2542,
+ 0x41c2,
+ 0x4b42,
0x202,
- 0x1ec2,
- 0x5a902,
- 0x1bc2,
+ 0x4342,
+ 0x40702,
+ 0x3c42,
0x382,
0xc42,
- 0x52742,
- 0x5a02,
- 0x6bf42,
+ 0x13d642,
+ 0x2382,
+ 0x6c9c2,
0xa82,
- 0xe5382,
- 0x161c2,
- 0x1c82,
- 0x16102,
- 0x28702,
- 0x4d42,
+ 0xeda82,
+ 0x14282,
+ 0x5742,
+ 0x141c2,
+ 0xc1902,
+ 0x69c2,
0x682,
- 0x16c82,
- 0x2442,
- 0x9482,
- 0x2e42,
- 0x411c2,
- 0x1942,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x5b02,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0xc302,
- 0x20c302,
- 0x216603,
- 0xe62c0c3,
- 0x228b03,
- 0x211543,
- 0x6d9c3,
- 0x22d7c2,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x57c2,
+ 0x6f02,
+ 0x13c2,
+ 0x90c2,
+ 0x45c2,
+ 0x6c702,
+ 0x2982,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x7782,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x1242,
+ 0x201242,
+ 0x242543,
+ 0xee14a83,
+ 0x308003,
+ 0x23c803,
+ 0x1b4103,
+ 0x22aec2,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x1b4103,
+ 0x242543,
+ 0x1442,
0x2001c2,
- 0x154da85,
- 0x12eb85,
- 0x208602,
- 0x9fe08,
- 0xc302,
- 0x234482,
- 0x204b02,
+ 0x15c45c5,
+ 0x139b05,
+ 0x20b3c2,
+ 0x9a048,
+ 0x1242,
+ 0x2347c2,
+ 0x206782,
+ 0x204642,
0x21bb02,
- 0x211482,
- 0x239242,
- 0x175305,
- 0x2016c2,
- 0x201e02,
- 0x218d42,
- 0x201dc2,
- 0x2161c2,
- 0x23d182,
- 0x201782,
- 0x296542,
- 0xf73f344,
+ 0x230a42,
+ 0x97805,
+ 0x202f42,
+ 0x204042,
+ 0x206e42,
+ 0x205e42,
+ 0x214282,
+ 0x23fcc2,
+ 0x202f82,
+ 0x292882,
+ 0xfe98384,
0x142,
- 0x176c87,
- 0x1266cd,
- 0xe11c9,
- 0x11214b,
- 0xe8188,
- 0x643c9,
- 0x10c246,
- 0x228b03,
- 0x9fe08,
+ 0x17e707,
+ 0x12380d,
+ 0xea609,
+ 0x115e0b,
+ 0xeec08,
+ 0x65dc9,
+ 0x111b86,
+ 0x308003,
+ 0x9a048,
0x9c4,
- 0x11c3,
- 0x2b05,
- 0x9fe08,
- 0xddc47,
- 0x54c46,
- 0x2b49,
- 0x7b0e,
- 0x14a647,
+ 0x4e83,
+ 0x68b05,
+ 0x9a048,
+ 0xe5a47,
+ 0x56306,
+ 0x68b49,
+ 0x1d134e,
+ 0x14a887,
0x2000c2,
- 0x242244,
- 0x20c302,
- 0x22c0c3,
- 0x201d02,
- 0x232c43,
- 0x14403,
+ 0x2d3684,
+ 0x201242,
+ 0x214a83,
+ 0x2052c2,
+ 0x232dc3,
+ 0x1bb43,
0x200382,
- 0x2db1c4,
- 0x214543,
- 0x244502,
- 0x20a803,
+ 0x2e3504,
+ 0x21bc83,
+ 0x201f42,
+ 0x21a3c3,
+ 0x30a42,
0x2003c2,
- 0x216603,
- 0x240986,
- 0x332b0f,
+ 0x242543,
+ 0x2431c6,
+ 0x32d94f,
0x602,
- 0x6be683,
- 0x9fe08,
- 0x20c302,
- 0x212483,
- 0x228b03,
- 0x211543,
- 0xca43,
- 0x7b08,
- 0x15c2c4b,
- 0x15642ca,
- 0xf5009,
- 0x15c534a,
- 0x150bb87,
- 0xa4b0b,
- 0x160745,
- 0x116a49,
- 0x12eb85,
- 0x176c87,
- 0xf3644,
- 0x20c302,
- 0x22c0c3,
- 0x228b03,
- 0x20a803,
+ 0x725e43,
+ 0x2f294a,
+ 0x9a048,
+ 0x201242,
+ 0x228503,
+ 0x308003,
+ 0x23c803,
+ 0x3dc3,
+ 0x1467206,
+ 0x1d1348,
+ 0x141650b,
+ 0x156518a,
+ 0xf1fc9,
+ 0x15d024a,
+ 0x1511707,
+ 0xa878b,
+ 0x10b7c5,
+ 0xebbc5,
+ 0x119bc9,
+ 0x139b05,
+ 0x17e707,
+ 0xfbfc4,
+ 0x201242,
+ 0x214a83,
+ 0x308003,
+ 0x21a3c3,
0x2000c2,
0x200c82,
- 0x338dc2,
- 0x12a2c0c3,
- 0x23b182,
- 0x232c43,
- 0x2014c2,
- 0x26bc02,
- 0x228b03,
- 0x220482,
- 0x288542,
- 0x22a402,
+ 0x2019c2,
+ 0x13214a83,
+ 0x23d342,
+ 0x232dc3,
+ 0x20bb42,
+ 0x2299c2,
+ 0x308003,
+ 0x23c782,
+ 0x25d282,
+ 0x22a742,
0x200cc2,
- 0x291482,
+ 0x290602,
0x200802,
0x200d82,
- 0x2033c2,
- 0x21efc2,
- 0x217d82,
- 0xe550c,
- 0x2b2182,
- 0x2f10c2,
- 0x215982,
- 0x2450c2,
- 0x211543,
+ 0x23ee42,
+ 0x27b8c2,
+ 0x204702,
+ 0x1b19cc,
+ 0x2b8e42,
+ 0x252e82,
+ 0x2203c2,
+ 0x248642,
+ 0x23c803,
0x200bc2,
- 0x20a803,
- 0x228c42,
- 0x25b002,
- 0x216603,
- 0x301b82,
- 0x209482,
- 0x216002,
- 0x203382,
- 0x210342,
- 0x2e8f82,
- 0x214682,
- 0x22b902,
- 0x21e202,
- 0x32370a,
- 0x366b8a,
- 0x39914a,
- 0x3de682,
- 0x20e6c2,
- 0x3c3302,
- 0x12fda689,
- 0x1328caca,
- 0x142d1c7,
- 0x136049c2,
- 0x14bd543,
- 0x2482,
- 0x8caca,
- 0x15d14e,
- 0x249f84,
- 0xf04c5,
- 0x13e2c0c3,
- 0x3b903,
- 0x232c43,
- 0x24b304,
- 0x228b03,
- 0x224e44,
- 0x214543,
- 0x13bfc9,
- 0x8f7c6,
- 0x211543,
- 0xe88c4,
- 0x2143,
- 0x20a803,
- 0x12abc5,
- 0x20ca43,
- 0x216603,
- 0x1429b04,
- 0x236bc3,
- 0x10cbc4,
- 0x205b03,
- 0x9fe08,
- 0xbe5c6,
- 0x14bdb84,
- 0x146045,
- 0x14a40a,
- 0x12c5c2,
- 0x1454114d,
- 0x1a36c6,
- 0x8f11,
- 0x14bda689,
- 0x1460c8,
- 0x4aa08,
- 0x1b584807,
- 0x2282,
- 0x1da807,
- 0xe840e,
- 0x12eb8b,
- 0x13390b,
- 0x1a3f4a,
- 0x8824a,
- 0x6bb47,
- 0x9fe08,
- 0x11a9c8,
- 0x58c7,
- 0x1b81684b,
- 0x1ae07,
- 0x9582,
- 0x2b80d,
- 0x13e387,
- 0x14ebca,
- 0x1ce74f,
- 0x1732cf,
- 0x8cac2,
- 0xc302,
- 0x84a08,
- 0x1bcfdc4c,
- 0xe1cca,
- 0xdd74a,
- 0x4f08a,
- 0x1894c8,
- 0xd948,
- 0x59748,
- 0xddc08,
- 0xe7688,
- 0x81c2,
- 0x14db0f,
- 0xa24cb,
- 0x18a0c8,
- 0x67607,
- 0x168a,
- 0x11404b,
- 0x330c9,
- 0x44447,
- 0xd848,
- 0x2e20c,
- 0x16c307,
- 0x5674a,
- 0xe688,
- 0x6aace,
- 0x6b28e,
- 0x6b98b,
- 0x1d2e8b,
- 0x1cb64b,
- 0xe3089,
- 0xead0b,
- 0x3934d,
- 0x3b98b,
- 0x3c10d,
- 0x3c48d,
- 0x3de4a,
- 0x4194b,
- 0x461cb,
- 0x44845,
- 0x1c026590,
- 0x19794f,
- 0x13f50f,
- 0x6a44d,
- 0x13c190,
- 0x9802,
- 0x1c7d0408,
- 0x114c8,
- 0x93110,
- 0x11d30e,
- 0x1cb67ac5,
- 0x4a80b,
- 0x13b0d0,
- 0x515c8,
- 0xda4a,
- 0x1d3049,
- 0x60907,
- 0x60c47,
- 0x60e07,
- 0x61787,
- 0x62b87,
- 0x63107,
- 0x63b87,
- 0x640c7,
- 0x64d07,
- 0x65087,
- 0x65747,
- 0x65907,
- 0x65ac7,
- 0x65c87,
- 0x664c7,
- 0x67907,
- 0x688c7,
- 0x68c87,
- 0x692c7,
- 0x69587,
- 0x69747,
- 0x69a47,
- 0x6be07,
- 0x6c007,
- 0x6cd87,
- 0x6cf47,
- 0x6d107,
- 0x6f6c7,
- 0x70a87,
- 0x70f07,
- 0x71647,
- 0x71907,
- 0x71c87,
- 0x71e47,
- 0x72247,
- 0x72687,
- 0x72a87,
- 0x73007,
- 0x731c7,
- 0x73387,
- 0x73c47,
- 0x746c7,
- 0x74c07,
- 0x75207,
- 0x753c7,
- 0x75747,
- 0x76847,
- 0x4c02,
- 0x5984a,
- 0x13488,
- 0x11a007,
- 0x8a005,
- 0xa7791,
- 0x4886,
- 0xfadca,
- 0x8488a,
- 0x54c46,
- 0xacd8b,
- 0x642,
- 0x2f451,
- 0xb6fc9,
- 0x97249,
- 0x33c2,
- 0x198c0a,
- 0xaa289,
- 0xaa9cf,
- 0xaafce,
- 0xac0c8,
- 0x4742,
- 0xbe0c9,
- 0x1b0ece,
- 0xea24c,
- 0xf4d0f,
- 0x1aeece,
- 0x26ccc,
- 0xe3389,
- 0xe3911,
- 0xe3ec8,
- 0x2e612,
- 0x17f34d,
- 0x1a054d,
- 0x4abcb,
- 0x58415,
- 0x6dc89,
- 0x7280a,
- 0x7a089,
- 0x80510,
- 0x16ff8b,
- 0x1a798f,
- 0x9110b,
- 0x9494c,
- 0x99310,
- 0xa9a4a,
- 0xadccd,
- 0xaf68e,
- 0xafdca,
- 0xc4a8c,
- 0xb42d4,
- 0xb6c51,
- 0xb8e0b,
- 0xb9f0f,
- 0xbb38d,
- 0xbf5ce,
- 0xc22cc,
- 0xc3e0c,
- 0xc478b,
- 0xc558e,
- 0xc6110,
- 0xc7dcb,
- 0x11c78d,
- 0x141d4f,
- 0x16d38c,
- 0xcf38e,
- 0xd1151,
- 0xd564c,
- 0xde6c7,
- 0xf2b0d,
- 0xfc10c,
- 0x110450,
- 0x1cc44d,
- 0x105687,
- 0x147410,
- 0x166dc8,
- 0x1710cb,
- 0xb0d8f,
- 0x1432c8,
- 0xfafcd,
- 0x10a190,
- 0x176b89,
- 0x1ceb2d46,
- 0xb3cc3,
- 0xb90c5,
- 0x4e082,
- 0x1b09,
- 0x5590a,
- 0x1d22eac6,
- 0x1d73e584,
- 0x56286,
- 0x1dc4a,
- 0x6f0cd,
- 0x1d9b9b89,
- 0x17c03,
- 0x11594a,
- 0xdb911,
- 0xdbd49,
- 0xdd6c7,
- 0xde408,
- 0xde887,
- 0x11a0c8,
- 0x908b,
- 0x12e989,
- 0xe9250,
- 0xe970c,
- 0xea548,
- 0xea8c5,
- 0x79148,
- 0x10eaca,
- 0xc7c07,
- 0x523c7,
- 0x2f42,
- 0x1de46bd5,
- 0x13bdca,
- 0x3d888,
- 0x98b89,
- 0x2efc5,
- 0x116b8a,
- 0x8d04f,
- 0x12b98b,
- 0x1c340c,
- 0x147952,
- 0x78005,
- 0x1966c8,
- 0x4b60a,
- 0x1e2f5b85,
- 0x183acc,
- 0x138c03,
- 0x190ec6,
- 0x3d182,
- 0x10238b,
- 0x102dca,
- 0x150314c,
- 0x11848,
- 0x3c2c8,
- 0x1e63d906,
- 0x12fec7,
- 0xa982,
- 0x4e82,
- 0x4bdd0,
- 0x66647,
- 0x2dccf,
- 0x13686,
- 0x15c7ce,
- 0x9588b,
- 0x45948,
- 0x33489,
- 0xfe992,
- 0x190f8d,
- 0x111788,
- 0x112009,
- 0x17ab8d,
- 0x1964c9,
- 0x1d714b,
- 0x69bc8,
- 0x7ea48,
- 0x80908,
- 0x80d49,
- 0x80f4a,
- 0x8730c,
- 0x4648a,
- 0xec2ca,
- 0x110d47,
- 0x9f70a,
- 0x13670d,
- 0xe41d1,
- 0x1eabf8c6,
- 0x1ab70b,
- 0x12cfcc,
- 0x37908,
- 0x61249,
- 0x15b14d,
- 0x1a38d0,
- 0x17b8cd,
- 0x14302,
- 0x5cd8d,
- 0x5402,
- 0x18d82,
- 0x110c8a,
- 0x1d4ca,
- 0xfacca,
- 0x11998b,
- 0x6b50c,
- 0x11a4ca,
- 0x11a74e,
- 0x1b318d,
- 0x1edde545,
- 0x1dae88,
- 0x57c2,
- 0x14e85c3,
- 0x14ebec0e,
- 0x156037ce,
- 0x15e0254a,
- 0x16745d0e,
- 0x16e8f9ce,
- 0x1772b10c,
- 0x142d1c7,
- 0x142d1c9,
- 0x14bd543,
- 0x17f6ae8c,
- 0x186e7b09,
- 0x18ef8849,
- 0x1974a209,
- 0x2482,
- 0xbeb51,
- 0x3711,
- 0x248d,
- 0x145c51,
- 0x8f911,
- 0x12b04f,
- 0x16adcf,
- 0xe7a4c,
- 0xf878c,
- 0x14a14c,
- 0x1dc00d,
- 0x1015d5,
- 0x661cc,
- 0x7394c,
- 0x1bad50,
- 0x130d4c,
- 0x133fcc,
- 0x155a59,
- 0x162919,
- 0x199999,
- 0x1b67d4,
- 0x1c41d4,
- 0x1d09d4,
- 0x5a54,
- 0x6b54,
- 0x19e66289,
- 0x1a5d0c89,
- 0x1ae73a09,
- 0x152e40c9,
- 0x2482,
- 0x15ae40c9,
- 0x2482,
- 0x5a4a,
- 0x2482,
- 0x162e40c9,
- 0x2482,
- 0x5a4a,
- 0x2482,
- 0x16ae40c9,
- 0x2482,
- 0x172e40c9,
- 0x2482,
- 0x17ae40c9,
- 0x2482,
- 0x5a4a,
- 0x2482,
- 0x182e40c9,
- 0x2482,
- 0x5a4a,
- 0x2482,
- 0x18ae40c9,
- 0x2482,
- 0x192e40c9,
- 0x2482,
- 0x5a4a,
- 0x2482,
- 0x19ae40c9,
- 0x2482,
- 0x5a4a,
- 0x2482,
- 0x1a2e40c9,
- 0x2482,
- 0x1aae40c9,
- 0x2482,
- 0x1b2e40c9,
- 0x2482,
- 0x5a4a,
- 0x2482,
- 0x1400401,
- 0x8f05,
- 0x1a3f44,
- 0x1442303,
- 0x15b08c3,
- 0x14ef043,
- 0xbec0e,
- 0x37ce,
- 0x7984e,
- 0x254a,
- 0x145d0e,
- 0x8f9ce,
- 0x12b10c,
- 0x16ae8c,
- 0xe7b09,
- 0xf8849,
- 0x14a209,
- 0x66289,
- 0x1d0c89,
- 0x73a09,
- 0x1017cd,
- 0x5d09,
- 0x6e09,
- 0x14c004,
- 0x1a5104,
- 0x1b3644,
- 0x1b5344,
- 0xa4dc4,
- 0x1a82c4,
- 0x35e04,
- 0x50fc4,
- 0x13584,
- 0x1587c03,
- 0xbe9c7,
- 0x33d8c,
- 0x13583,
- 0x9802,
- 0x10bb86,
- 0x1b3183,
- 0x13583,
- 0x9bb83,
- 0x3f02,
- 0x3f08,
- 0xdff47,
- 0x12ea07,
- 0x81c2,
- 0x2000c2,
- 0x20c302,
- 0x201d02,
- 0x20c202,
- 0x200382,
- 0x2003c2,
- 0x204e82,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x214383,
- 0x20a803,
- 0x216603,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x20a803,
- 0x216603,
- 0x8503,
- 0x228b03,
- 0x24e44,
- 0x2000c2,
- 0x248343,
- 0x2122c0c3,
- 0x38c507,
- 0x228b03,
- 0x20e403,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x21de8a,
- 0x240985,
- 0x216103,
- 0x219f82,
- 0x9fe08,
- 0x9fe08,
- 0xc302,
- 0x135f02,
- 0x21bb990b,
- 0x21e2c344,
- 0x13e4c5,
- 0x7d45,
- 0xfdc46,
- 0x22207d45,
- 0x50cc3,
- 0x93003,
- 0x9c4,
- 0x11c3,
- 0x2b05,
- 0x12eb85,
- 0x9fe08,
- 0x1ae07,
- 0x2c0c3,
- 0x2c28d,
- 0x22a380c7,
- 0x15c6,
- 0x22ce7945,
- 0x1a9012,
- 0x381c7,
- 0xa0ca,
- 0x9f88,
- 0xe207,
- 0x63d4a,
- 0x18aec8,
- 0x62607,
- 0x18098f,
- 0x43dc7,
- 0x50dc6,
- 0x13b0d0,
- 0xc9fcf,
- 0x20f09,
- 0x56304,
- 0x2303828e,
- 0x11fb09,
- 0x65dc6,
- 0x109649,
- 0x18ce06,
- 0x1ba306,
- 0x189e8c,
- 0x11424a,
- 0x33247,
- 0x129b8a,
- 0x143889,
- 0xed38c,
- 0x1ceb0a,
- 0x7e54a,
- 0x2b49,
- 0x56286,
- 0x3330a,
- 0x11268a,
- 0xa0d4a,
- 0x127149,
- 0xdad88,
- 0xdb006,
- 0xe208d,
- 0xb9545,
- 0x23754d4c,
- 0x14a647,
- 0x107849,
- 0xa8c07,
- 0x10a594,
- 0x10aa8b,
- 0x6744a,
- 0xfe80a,
- 0xa6d8d,
- 0x1519b89,
- 0x11154c,
- 0x111e0b,
- 0xe683,
- 0xe683,
- 0x39346,
- 0xe683,
- 0xfdc48,
- 0x1581c3,
- 0x33445,
- 0x141d703,
- 0x4e9c9,
- 0x156d603,
- 0x1439887,
- 0x80787,
- 0x245846c9,
- 0xa6c6,
- 0xbd389,
- 0x48343,
- 0x9fe08,
- 0xc302,
- 0x4b304,
- 0x4243,
- 0x4185,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x225843,
- 0x22c0c3,
- 0x232c43,
- 0x212483,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x297403,
- 0x205b03,
- 0x225843,
- 0x242244,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x21d0c3,
- 0x261847c5,
- 0x142bd43,
- 0x22c0c3,
- 0x232c43,
- 0x214403,
- 0x212483,
- 0x228b03,
- 0x224e44,
- 0x201143,
- 0x238cc3,
- 0x211543,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x216103,
- 0x26e20643,
- 0x147849,
- 0xc302,
- 0x2ff843,
- 0x27a2c0c3,
- 0x232c43,
- 0x244743,
- 0x228b03,
- 0x217203,
- 0x238cc3,
- 0x216603,
- 0x2f5cc3,
- 0x3a4e04,
- 0x9fe08,
- 0x2822c0c3,
- 0x232c43,
- 0x2ac183,
- 0x228b03,
- 0x211543,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x22d843,
- 0x9fe08,
- 0x28a2c0c3,
- 0x232c43,
- 0x212483,
- 0x20ca43,
- 0x216603,
- 0x9fe08,
- 0x142d1c7,
- 0x248343,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x12eb85,
- 0x176c87,
- 0x10a7cb,
- 0xdc144,
- 0xb9545,
- 0x14470c8,
- 0x2a20d,
- 0x29e352c5,
- 0x46e44,
- 0xc302,
- 0x8303,
- 0x176a85,
- 0x2d7c2,
- 0x1dc2,
- 0x2e7585,
- 0x9fe08,
- 0x7e42,
- 0xeec3,
- 0x16368f,
- 0xc302,
- 0xfcac6,
- 0x2000c2,
- 0x248343,
- 0x22c0c3,
- 0x228b03,
- 0x224e44,
- 0x211543,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x216103,
- 0x2d7c2,
- 0x32d6c8,
- 0x242244,
- 0x342bc6,
- 0x34a006,
- 0x9fe08,
- 0x31f443,
- 0x20f509,
- 0x3046d5,
- 0x1046df,
- 0x22c0c3,
- 0x11d07,
- 0x330912,
- 0x170a46,
- 0x17f0c5,
- 0xda4a,
- 0x1d3049,
- 0x3306cf,
- 0x2db1c4,
- 0x28ed85,
- 0x30b4d0,
- 0x322e47,
- 0x20ca43,
- 0x31b008,
- 0xf6f86,
- 0x280aca,
- 0x224d04,
- 0x2f55c3,
- 0x219f82,
- 0x2eec0b,
- 0xca43,
- 0x17d404,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x2fd643,
- 0x20c302,
- 0x12aec3,
- 0x12a8c4,
- 0x20a803,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20e403,
- 0x22b0c3,
- 0x216603,
- 0x48343,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x2000c2,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x7d45,
- 0x242244,
- 0x22c0c3,
- 0x232c43,
- 0x303f84,
- 0x20a803,
- 0x216603,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x133d89,
- 0x22c0c3,
- 0x232c43,
- 0x212483,
- 0x204f43,
- 0x211543,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x329144,
- 0x224e44,
- 0x20a803,
- 0x216603,
- 0x205b03,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x220383,
- 0x63f43,
- 0xe403,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x32370a,
- 0x3484c9,
- 0x35f2cb,
- 0x35f9ca,
- 0x366b8a,
- 0x378e4b,
- 0x38cbca,
- 0x39278a,
- 0x39914a,
- 0x3993cb,
- 0x3b8049,
- 0x3c840a,
- 0x3c894b,
- 0x3d5fcb,
- 0x3dc90a,
- 0x22c0c3,
- 0x232c43,
- 0x212483,
- 0x211543,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x920b,
- 0x5a448,
- 0x17acc4,
- 0x91c6,
- 0x3e109,
- 0x9fe08,
- 0x22c0c3,
- 0xda44,
- 0x260904,
- 0x20aa02,
- 0x217b84,
- 0x203045,
- 0x225843,
- 0x242244,
- 0x22c0c3,
- 0x235604,
- 0x232c43,
- 0x24b304,
- 0x2db1c4,
- 0x224e44,
- 0x238cc3,
- 0x20a803,
- 0x216603,
- 0x25cf45,
- 0x21d0c3,
- 0x216103,
- 0x24f1c3,
- 0x246484,
- 0x2be544,
- 0x2bd645,
- 0x9fe08,
- 0x344b04,
- 0x3ba486,
- 0x202c84,
- 0x20c302,
- 0x347d47,
- 0x243647,
- 0x249204,
- 0x238a05,
- 0x3cc645,
- 0x22cd85,
- 0x224e44,
- 0x388dc8,
- 0x3db706,
- 0x32bec8,
- 0x27c8c5,
- 0x2e2a45,
- 0x340644,
- 0x216603,
- 0x2f61c4,
- 0x377bc6,
- 0x240a83,
- 0x246484,
- 0x2411c5,
- 0x201a84,
- 0x336544,
- 0x219f82,
- 0x322706,
- 0x3ab5c6,
- 0x30df85,
- 0x2000c2,
- 0x248343,
- 0x3260c302,
- 0x3d0584,
- 0x200382,
- 0x211543,
- 0x209082,
- 0x20a803,
- 0x2003c2,
- 0x2f1d06,
- 0x20c603,
- 0x205b03,
- 0x9fe08,
- 0x9fe08,
- 0x228b03,
- 0x6d9c3,
- 0x2000c2,
- 0x3320c302,
- 0x228b03,
- 0x2623c3,
- 0x201143,
- 0x22c344,
- 0x20a803,
- 0x216603,
- 0x9fe08,
- 0x2000c2,
- 0x33a0c302,
- 0x22c0c3,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x682,
- 0x206902,
- 0x20ff42,
- 0x20e403,
- 0x2ed343,
- 0x2000c2,
- 0x12eb85,
- 0x9fe08,
- 0x176c87,
- 0x20c302,
- 0x232c43,
- 0x24b304,
- 0x2020c3,
- 0x228b03,
- 0x204f43,
- 0x211543,
- 0x20a803,
- 0x213dc3,
- 0x216603,
- 0x233c43,
- 0x1b8a13,
- 0x127c94,
- 0x12eb85,
- 0x176c87,
- 0x10f246,
- 0x11b7cb,
- 0x39346,
- 0x531c7,
- 0x38a06,
- 0x649,
- 0x160d4a,
- 0x8984d,
- 0x1263cc,
- 0x11300a,
- 0x45c88,
- 0x175305,
- 0xa108,
- 0x13686,
- 0x1be2c6,
- 0x3e006,
- 0x602,
- 0x209802,
- 0x3b04,
- 0x9bb86,
- 0x184410,
- 0x8170e,
- 0x2846,
- 0x1841cc,
- 0x3537314b,
- 0x12eb85,
- 0x1426cb,
- 0x357be204,
- 0x1a4107,
- 0x25191,
- 0x11f54a,
- 0x22c0c3,
- 0x63cc5,
- 0x1bd708,
- 0x12704,
- 0x55b05,
- 0x3588c906,
- 0xa7786,
- 0xc14c6,
- 0x9174a,
- 0x1a8883,
- 0x35e0bfc4,
- 0x4e9c9,
- 0x12c047,
- 0x1770a,
- 0x14ce3c9,
- 0x605,
- 0xeac83,
- 0x3622eb47,
- 0x12abc5,
- 0x153c6c6,
- 0x153f846,
- 0xace4c,
- 0xfa308,
- 0x3643d183,
- 0xeee4b,
- 0x118a4b,
- 0x36a4528c,
- 0x14070c3,
- 0xbb048,
- 0xef0c5,
- 0xa2349,
- 0x119c88,
- 0x141db86,
- 0x88147,
- 0x36f5b149,
- 0x117787,
- 0x16074a,
- 0x111acd,
- 0x8148,
- 0x13583,
- 0xbdb03,
- 0xfdc48,
- 0x13584,
- 0x1224c5,
- 0x148d103,
- 0xe85c7,
- 0x372e85c3,
- 0x377afc46,
- 0x37af67c4,
- 0x37f02f87,
- 0xfdc44,
- 0xfdc44,
- 0xfdc44,
- 0xfdc44,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x2000c2,
- 0x20c302,
- 0x228b03,
- 0x203dc2,
- 0x20a803,
- 0x216603,
- 0x20c603,
- 0x37fe4f,
- 0x38020e,
- 0x9fe08,
- 0x22c0c3,
- 0x41487,
- 0x232c43,
- 0x228b03,
- 0x214543,
- 0x20a803,
- 0x216603,
- 0x2784,
- 0x1304,
- 0x144444,
- 0x21c0c3,
- 0x374247,
- 0x206082,
- 0x26c3c9,
- 0x200ac2,
- 0x24c0cb,
- 0x29d88a,
- 0x29e589,
- 0x200542,
- 0x212ac6,
- 0x38d7d5,
- 0x24c215,
- 0x231e53,
- 0x24c793,
- 0x212082,
- 0x21e405,
- 0x369e0c,
- 0x27494b,
- 0x297885,
- 0x202542,
- 0x299082,
- 0x37bf46,
- 0x202282,
- 0x37bb46,
- 0x20dccd,
- 0x32a94c,
- 0x226604,
- 0x200882,
- 0x20be02,
- 0x22e9c8,
- 0x200202,
- 0x30e386,
- 0x30e38f,
- 0x393f90,
- 0x21f204,
- 0x38d995,
- 0x231fd3,
- 0x21cf83,
- 0x349d0a,
- 0x208b87,
- 0x369349,
- 0x2175c7,
- 0x227682,
- 0x200282,
- 0x3b4e46,
- 0x203c02,
- 0x9fe08,
- 0x208082,
- 0x208342,
- 0x21e9c7,
- 0x330307,
- 0x330311,
- 0x218585,
- 0x21858e,
- 0x21968f,
- 0x209582,
- 0x373907,
- 0x21c708,
- 0x205b82,
- 0x2c1142,
- 0x21bb46,
- 0x21bb4f,
- 0x269f10,
- 0x22a8c2,
- 0x204042,
- 0x251c88,
- 0x204043,
- 0x25c6c8,
- 0x2db50d,
- 0x2094c3,
- 0x3bc3c8,
- 0x27f40f,
- 0x27f7ce,
- 0x2fe4ca,
- 0x2da0d1,
- 0x2da550,
- 0x2dc90d,
- 0x2dcc4c,
- 0x2ff6c7,
- 0x349e87,
- 0x342c89,
- 0x226702,
- 0x201ec2,
- 0x2553cc,
- 0x2556cb,
- 0x200d42,
- 0x2c4946,
- 0x202c82,
- 0x200482,
- 0x28cac2,
- 0x20c302,
- 0x22c784,
- 0x237d87,
- 0x22ae02,
- 0x23cbc7,
- 0x23ed47,
- 0x22e002,
- 0x22dac2,
- 0x241345,
- 0x259dc2,
- 0x382a4e,
- 0x3c91cd,
- 0x232c43,
- 0x28658e,
- 0x3d234d,
- 0x32fe43,
- 0x202102,
- 0x284744,
- 0x24a542,
- 0x2253c2,
- 0x39b645,
- 0x39ce07,
- 0x243f82,
- 0x20c202,
- 0x24af07,
- 0x24ed48,
- 0x2b12c2,
- 0x278086,
- 0x25524c,
- 0x25558b,
- 0x203d42,
- 0x25d0cf,
- 0x25d490,
- 0x25d88f,
- 0x25dc55,
- 0x25e194,
- 0x25e68e,
- 0x25ea0e,
- 0x25ed8f,
- 0x25f14e,
- 0x25f4d4,
- 0x25f9d3,
- 0x25fe8d,
- 0x276a09,
- 0x28b243,
- 0x2020c2,
- 0x35c2c5,
- 0x3cfd46,
- 0x200382,
- 0x3776c7,
- 0x228b03,
- 0x200642,
- 0x231448,
- 0x2da311,
- 0x2da750,
- 0x202b82,
- 0x28a387,
- 0x201742,
- 0x247f07,
- 0x24e082,
- 0x328c49,
- 0x37bf07,
- 0x296c48,
- 0x28c746,
- 0x28f303,
- 0x28f305,
- 0x21d702,
- 0x2004c2,
- 0x3b5245,
- 0x383f45,
- 0x201b02,
- 0x22aec3,
- 0x342a47,
- 0x20c907,
- 0x201f82,
- 0x201f84,
- 0x20e503,
- 0x2ebf89,
- 0x20e508,
- 0x203102,
- 0x205f82,
- 0x2eb887,
- 0x3dd285,
- 0x33fb88,
- 0x34e347,
- 0x21a7c3,
- 0x29ba06,
- 0x2dc78d,
- 0x2dcb0c,
- 0x2d5d46,
- 0x204b02,
- 0x21fc02,
- 0x206a42,
- 0x27f28f,
- 0x27f68e,
- 0x3cc6c7,
- 0x206702,
- 0x295d05,
- 0x295d06,
- 0x21d902,
- 0x200bc2,
- 0x28d746,
- 0x2062c3,
- 0x206586,
- 0x2cc185,
- 0x2cc18d,
- 0x2cc7d5,
- 0x2cd88c,
- 0x2cdc0d,
- 0x2cdf52,
- 0x205a02,
- 0x26bf42,
- 0x2050c2,
- 0x3dbec6,
- 0x3b0d86,
- 0x202f42,
- 0x3cfdc6,
- 0x218d42,
- 0x374a45,
- 0x202f82,
- 0x382b89,
- 0x22330c,
- 0x22364b,
- 0x2003c2,
- 0x24f708,
- 0x201902,
- 0x200a82,
- 0x271f86,
- 0x2e4045,
- 0x200a87,
- 0x228445,
- 0x2563c5,
- 0x2091c2,
- 0x20a1c2,
- 0x2161c2,
- 0x3a7c87,
- 0x2f1dcd,
- 0x2f214c,
- 0x243047,
- 0x278002,
- 0x201c82,
- 0x3c63c8,
- 0x201c88,
- 0x32c1c8,
- 0x2faf84,
- 0x2c5807,
- 0x33e603,
- 0x223c42,
- 0x212842,
- 0x2f3749,
- 0x26aec7,
- 0x216102,
- 0x272385,
- 0x220082,
- 0x20b182,
- 0x2fd083,
- 0x2fd086,
- 0x2fd202,
- 0x301b02,
- 0x200402,
- 0x36c686,
- 0x2aba07,
- 0x215f02,
- 0x200902,
- 0x25c50f,
- 0x2863cd,
- 0x3b12ce,
- 0x3d21cc,
- 0x204bc2,
- 0x203d82,
- 0x28c585,
- 0x320886,
- 0x200b82,
- 0x204d42,
- 0x200682,
- 0x286744,
- 0x2db384,
- 0x359786,
- 0x204e82,
- 0x286e87,
- 0x23bc03,
- 0x23bc08,
- 0x23f748,
- 0x37f1c7,
- 0x24e306,
- 0x201702,
- 0x2183c3,
- 0x2183c7,
- 0x314946,
- 0x2e7e85,
- 0x2fb308,
- 0x202602,
- 0x3a9687,
- 0x2411c2,
- 0x293042,
- 0x209442,
- 0x219809,
- 0x201082,
- 0xc41c8,
- 0x2021c2,
- 0x2432c3,
- 0x202247,
- 0x205c42,
- 0x22348c,
- 0x22378b,
- 0x2d5dc6,
- 0x2eabc5,
- 0x247c82,
- 0x201942,
- 0x2bf146,
- 0x236483,
- 0x328ec7,
- 0x235282,
- 0x2008c2,
- 0x38d655,
- 0x24c3d5,
- 0x231d13,
- 0x24c913,
- 0x37f647,
- 0x25b951,
- 0x262d10,
- 0x274d92,
- 0x2779d1,
- 0x284bc8,
- 0x284bd0,
- 0x2d7c8f,
- 0x29d653,
- 0x29e352,
- 0x29ffd0,
- 0x2a7b8f,
- 0x2a9e12,
- 0x305811,
- 0x371353,
- 0x3b78d2,
- 0x2b2e8f,
- 0x2cbe0e,
- 0x2cd412,
- 0x2d3c51,
- 0x2d430f,
- 0x2d830e,
- 0x2d9791,
- 0x2de010,
- 0x2df0d2,
- 0x2e8a91,
- 0x2ef5d0,
- 0x2fa4cf,
- 0x2fd6d1,
- 0x3029d0,
- 0x31bb46,
- 0x3adfc7,
- 0x20ce47,
- 0x201a42,
- 0x2824c5,
- 0x30b247,
- 0x20ff42,
- 0x207e02,
- 0x229545,
- 0x220883,
- 0x2bdfc6,
- 0x2f1f8d,
- 0x2f22cc,
- 0x217042,
- 0x369c8b,
- 0x27480a,
- 0x21e2ca,
- 0x2bc0c9,
- 0x2f0c0b,
- 0x34e48d,
- 0x30b94c,
- 0x25b3ca,
- 0x27108c,
- 0x2758cb,
- 0x2976cc,
- 0x31ce0e,
- 0x36710b,
- 0x2b1d4c,
- 0x2e2703,
- 0x37aa86,
- 0x3bcb02,
- 0x2fbb02,
- 0x25a083,
- 0x20ff82,
- 0x233b03,
- 0x324b86,
- 0x25de07,
- 0x2e0e06,
- 0x2e1e88,
- 0x3428c8,
- 0x31d5c6,
- 0x200f02,
- 0x30d94d,
- 0x30dc8c,
- 0x318c07,
- 0x312e47,
- 0x229942,
- 0x216302,
- 0x218342,
- 0x279642,
- 0x335056,
- 0x33a4d5,
- 0x33d6d6,
- 0x346693,
- 0x346d52,
- 0x357d53,
- 0x358492,
- 0x3aa4cf,
- 0x3bbb18,
- 0x3bc5d7,
- 0x3bdc19,
- 0x3be7d8,
- 0x3bf698,
- 0x3c46d7,
- 0x3c57d7,
- 0x3c7016,
- 0x3ca6d3,
- 0x3cbc95,
- 0x3cc992,
- 0x3cce13,
- 0x20c302,
- 0x20a803,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x20c603,
- 0x2000c2,
- 0x203042,
- 0x39e946c5,
- 0x3a219305,
- 0x3a675c06,
- 0x9fe08,
- 0x3aab3405,
- 0x20c302,
- 0x201d02,
- 0x3aefedc5,
- 0x3b280405,
- 0x3b681c47,
- 0x3ba82949,
- 0x3bf064c4,
- 0x200382,
- 0x200642,
- 0x3c25aec5,
- 0x3c6998c9,
- 0x3cb34708,
- 0x3ceafc45,
- 0x3d313987,
- 0x3d622508,
- 0x3db11985,
- 0x3de9a406,
- 0x3e243789,
- 0x3e6d1dc8,
- 0x3eac45c8,
- 0x3ee99f0a,
- 0x3f277244,
- 0x3f605285,
- 0x3fac0b08,
- 0x3fe01885,
- 0x213ec2,
- 0x40242a83,
- 0x406a64c6,
- 0x40b4f408,
- 0x40e1f986,
- 0x412dd348,
- 0x41779b06,
- 0x41a3f204,
- 0x41e05642,
- 0x427315c7,
- 0x42aacb84,
- 0x42e79cc7,
- 0x433c4d87,
- 0x2003c2,
- 0x4369e985,
- 0x43a88bc4,
- 0x43ed0e07,
- 0x4423b747,
- 0x44684586,
- 0x44a81485,
- 0x44e999c7,
- 0x452d1c48,
- 0x457c5107,
- 0x45b48289,
- 0x45ed3985,
- 0x463102c7,
- 0x46693d06,
- 0x46e4b,
- 0x46a7b288,
- 0x2221cd,
- 0x27d049,
- 0x28858b,
- 0x2aa48b,
- 0x2b734b,
- 0x31368b,
- 0x320a8b,
- 0x320d4b,
- 0x321b89,
- 0x32398b,
- 0x323c4b,
- 0x32430b,
- 0x32548a,
- 0x3259ca,
- 0x325fcc,
- 0x32bc4b,
- 0x32c3ca,
- 0x3419ca,
- 0x34d0ce,
- 0x35024e,
- 0x3505ca,
- 0x3521ca,
- 0x352bcb,
- 0x352e8b,
- 0x353b0b,
- 0x36d78b,
- 0x36dd8a,
- 0x36ea4b,
- 0x36ed0a,
- 0x36ef8a,
- 0x36f20a,
- 0x38decb,
- 0x39360b,
- 0x395ace,
- 0x395e4b,
- 0x39cfcb,
- 0x39de8b,
- 0x3a124a,
- 0x3a14c9,
- 0x3a170a,
- 0x3a31ca,
- 0x3bb50b,
- 0x3c8c0b,
- 0x3c960a,
- 0x3ca10b,
- 0x3d38cb,
- 0x3dc34b,
- 0x46e82f08,
- 0x47288fc9,
- 0x476a21c9,
- 0x47ae4d08,
- 0x359505,
- 0x218e03,
- 0x27e244,
- 0x2abc05,
- 0x306206,
- 0x34d545,
- 0x288844,
- 0x3775c8,
- 0x3197c5,
- 0x295604,
- 0x3c17c7,
- 0x2a154a,
- 0x381fca,
- 0x3cc7c7,
- 0x218d07,
- 0x2de547,
- 0x282bc7,
- 0x35e6c5,
- 0x3b0106,
- 0x3b0347,
- 0x3bdb04,
- 0x2f1246,
- 0x2f1146,
- 0x3b06c5,
- 0x355784,
- 0x29af46,
- 0x2a0607,
- 0x26a746,
- 0x31f207,
- 0x27e303,
- 0x39c446,
- 0x251ec5,
- 0x281d47,
- 0x267aca,
- 0x231544,
- 0x220c88,
- 0x310809,
- 0x2cc587,
- 0x38f346,
- 0x28ee48,
- 0x2200c9,
- 0x369504,
- 0x35c644,
- 0x2d5085,
- 0x225d48,
- 0x2ca407,
- 0x2f3249,
- 0x228ec8,
- 0x315686,
- 0x229a46,
- 0x29b888,
- 0x371b06,
- 0x219305,
- 0x284646,
- 0x27a648,
- 0x27f186,
- 0x25440b,
- 0x292ec6,
- 0x29d1cd,
- 0x3c12c5,
- 0x2aca46,
- 0x210985,
- 0x3b91c9,
- 0x249507,
- 0x3a4a48,
- 0x314486,
- 0x29c489,
- 0x3b8486,
- 0x267a45,
- 0x215146,
- 0x2c9006,
- 0x2cee49,
- 0x2b9b06,
- 0x2a1247,
- 0x2a4385,
- 0x207683,
- 0x223cc5,
- 0x2affc7,
- 0x36a486,
- 0x3c11c9,
- 0x275c06,
- 0x279ec6,
- 0x21a549,
- 0x284049,
- 0x2a4907,
- 0x344e08,
- 0x2a75c9,
- 0x282148,
- 0x3929c6,
- 0x2dab45,
- 0x278eca,
- 0x279f46,
- 0x21ce06,
- 0x2d28c5,
- 0x24ff08,
- 0x2eb407,
- 0x22f24a,
- 0x24bb06,
- 0x2f4745,
- 0x302086,
- 0x328687,
- 0x38f207,
- 0x21b145,
- 0x267c05,
- 0x269d86,
- 0x26e4c6,
- 0x27fdc6,
- 0x226384,
- 0x2835c9,
- 0x28a146,
- 0x2fd3ca,
- 0x2278c8,
- 0x30ffc8,
- 0x381fca,
- 0x223fc5,
- 0x2a0545,
- 0x3c1e08,
- 0x2bcc08,
- 0x266e07,
- 0x226b86,
- 0x338748,
- 0x20e887,
- 0x2815c8,
- 0x2b8cc6,
- 0x285308,
- 0x298406,
- 0x27ca47,
- 0x3229c6,
- 0x29af46,
- 0x26ed4a,
- 0x2d5ec6,
- 0x2dab49,
- 0x368506,
- 0x21eb0a,
- 0x23f209,
- 0x2f2786,
- 0x2baac4,
- 0x35c38d,
- 0x289247,
- 0x2e6186,
- 0x2c4485,
- 0x3b8505,
- 0x38fe46,
- 0x2d0c49,
- 0x2b7907,
- 0x27bb46,
- 0x2c9e46,
- 0x2888c9,
- 0x359a44,
- 0x244f84,
- 0x340e88,
- 0x236846,
- 0x2a3e08,
- 0x2150c8,
- 0x219447,
- 0x3b5b89,
- 0x27ffc7,
- 0x2b32ca,
- 0x2f420f,
- 0x26f44a,
- 0x28c385,
- 0x27a885,
- 0x214f05,
- 0x21f147,
- 0x267083,
- 0x345008,
- 0x20ef06,
- 0x20f009,
- 0x3cb186,
- 0x2d0487,
- 0x29c249,
- 0x3a4948,
- 0x2d2987,
- 0x31da43,
- 0x359585,
- 0x3281c5,
- 0x2261cb,
- 0x201944,
- 0x308804,
- 0x278686,
- 0x31dc07,
+ 0x21a3c3,
+ 0x243802,
+ 0x249b42,
+ 0x242543,
+ 0x308c82,
+ 0x2090c2,
+ 0x2023c2,
+ 0x202d42,
+ 0x207242,
+ 0x2f00c2,
+ 0x21e502,
+ 0x226dc2,
+ 0x223fc2,
+ 0x322c0a,
+ 0x36860a,
0x39abca,
- 0x242b07,
- 0x2ff907,
- 0x280405,
- 0x3bfc85,
- 0x26de89,
- 0x29af46,
- 0x24298d,
- 0x33fac5,
- 0x2b6243,
- 0x23ffc3,
- 0x3d0605,
- 0x35e345,
- 0x28ee48,
- 0x27c487,
- 0x244d06,
- 0x2a1e46,
- 0x229e05,
- 0x232f07,
- 0x2e6d07,
- 0x3db5c7,
- 0x20530a,
- 0x39c508,
- 0x226384,
- 0x27ef07,
- 0x27ec47,
- 0x353106,
- 0x297a87,
- 0x2e0388,
- 0x360f08,
- 0x249406,
- 0x218f48,
- 0x2b9b84,
- 0x3b0346,
- 0x238786,
- 0x3aa006,
- 0x345606,
- 0x219cc4,
- 0x282c86,
- 0x2c3106,
- 0x29b306,
- 0x22f846,
- 0x3c6986,
- 0x2e01c6,
- 0x244c08,
- 0x2b4d08,
- 0x2d6848,
- 0x34d748,
- 0x3c1d86,
- 0x209a85,
- 0x223c86,
- 0x2afcc5,
- 0x391e47,
- 0x228f85,
- 0x20ba83,
- 0x20ca85,
- 0x230fc4,
- 0x3c6ac5,
- 0x201903,
- 0x393907,
- 0x36d1c8,
- 0x31f2c6,
- 0x376e0d,
- 0x27a846,
- 0x29a8c5,
- 0x219803,
- 0x2c04c9,
- 0x359bc6,
- 0x296206,
- 0x398b84,
- 0x26f3c7,
- 0x36c186,
- 0x2b7bc5,
- 0x242943,
- 0x3d7004,
- 0x27ee06,
- 0x238884,
- 0x2e9f88,
- 0x3befc9,
- 0x309209,
- 0x2a3c0a,
- 0x2a54cd,
- 0x2318c7,
- 0x3ba1c6,
- 0x20a204,
- 0x282949,
- 0x287b88,
- 0x288e46,
- 0x234b46,
- 0x297a87,
- 0x2c1246,
- 0x34fc46,
- 0x2ffa86,
- 0x3c4e0a,
- 0x222508,
- 0x2e3805,
- 0x33e9c9,
- 0x2cab8a,
- 0x305288,
- 0x29f1c8,
- 0x296188,
- 0x2e710c,
- 0x350805,
- 0x2a20c8,
- 0x2b5006,
- 0x317646,
- 0x3d8287,
- 0x242a05,
- 0x2847c5,
- 0x3090c9,
- 0x20ac07,
- 0x20efc5,
- 0x237187,
- 0x23ffc3,
- 0x2cb045,
- 0x21ac08,
- 0x283347,
- 0x29f089,
- 0x2dedc5,
- 0x3ae2c4,
- 0x2a5188,
- 0x331707,
- 0x2d2b48,
- 0x3d36c8,
- 0x2adbc5,
- 0x21f506,
- 0x249886,
- 0x2d5449,
- 0x2b3f47,
- 0x2b0386,
- 0x3d00c7,
- 0x205083,
- 0x3064c4,
- 0x2d8c85,
- 0x233044,
- 0x248d84,
- 0x3890c7,
- 0x2651c7,
- 0x27bd04,
- 0x29eed0,
- 0x33ebc7,
- 0x3bfc85,
- 0x2f764c,
- 0x32a2c4,
- 0x2b2b48,
- 0x27c949,
- 0x385146,
- 0x319dc8,
- 0x270d84,
- 0x278988,
- 0x331dc6,
- 0x26ebc8,
- 0x2a0bc6,
- 0x2d004b,
- 0x32de45,
- 0x2d8b08,
- 0x213304,
- 0x3bf40a,
- 0x29f089,
- 0x3228c6,
- 0x225fc8,
- 0x258305,
- 0x2bfd44,
- 0x2b2a46,
- 0x3db488,
- 0x282f08,
- 0x338fc6,
- 0x301104,
- 0x278e46,
- 0x280047,
- 0x279bc7,
- 0x297a8f,
- 0x32eec7,
- 0x2f2847,
- 0x295bc5,
- 0x376185,
- 0x2a45c9,
- 0x2d7886,
- 0x389305,
- 0x284347,
- 0x2cd008,
- 0x2f9c05,
- 0x3229c6,
- 0x227708,
- 0x21f98a,
- 0x3db188,
- 0x28d4c7,
- 0x2f4646,
- 0x33e986,
- 0x2003c3,
- 0x208a43,
- 0x2cad49,
- 0x2a7449,
- 0x2b2946,
- 0x2dedc5,
- 0x2191c8,
- 0x225fc8,
- 0x371c88,
- 0x2ffb0b,
- 0x377047,
- 0x31ae49,
- 0x297d08,
- 0x351c84,
- 0x3a9c48,
- 0x290cc9,
- 0x2b0685,
- 0x21f047,
- 0x306545,
- 0x282e08,
- 0x29454b,
- 0x299710,
- 0x2ac685,
- 0x21324c,
- 0x244ec5,
- 0x280483,
- 0x31cc06,
- 0x2c2644,
- 0x288cc6,
- 0x2a0607,
- 0x212bc4,
- 0x23ffc8,
- 0x344ecd,
- 0x31c485,
- 0x231904,
- 0x2a3484,
- 0x2a3489,
- 0x2af088,
- 0x32e307,
- 0x331e48,
- 0x283688,
- 0x27be45,
- 0x2110c7,
- 0x27bdc7,
- 0x20f2c7,
- 0x267c09,
- 0x2e6809,
- 0x3c3b86,
- 0x2dce46,
- 0x284406,
- 0x323fc5,
- 0x3af9c4,
- 0x3bcb46,
- 0x3bed86,
- 0x27be88,
- 0x32834b,
- 0x2363c7,
- 0x20a204,
- 0x36c0c6,
- 0x2e06c7,
- 0x3da1c5,
- 0x374cc5,
- 0x227c84,
- 0x2e6786,
- 0x3bcbc8,
- 0x282949,
- 0x264806,
- 0x287988,
- 0x2b7c86,
- 0x35d948,
- 0x32170c,
- 0x27bd06,
- 0x29a58d,
- 0x29aa0b,
- 0x2a1305,
- 0x2e6e47,
- 0x2b9c06,
- 0x38f0c8,
- 0x3c3c09,
- 0x307e48,
- 0x3bfc85,
- 0x3bd847,
- 0x282248,
- 0x3c0bc9,
- 0x36be06,
- 0x26470a,
- 0x38ee48,
- 0x307c8b,
- 0x22278c,
- 0x278a88,
- 0x27e846,
- 0x210ac8,
- 0x21f607,
- 0x21ca09,
- 0x3983cd,
- 0x29ae46,
- 0x267048,
- 0x2b4bc9,
- 0x2c0f48,
- 0x285408,
- 0x2c3b4c,
- 0x2c5107,
- 0x2c5bc7,
- 0x267a45,
- 0x2c0d87,
- 0x2ccec8,
- 0x2b2ac6,
- 0x2934cc,
- 0x2f9688,
- 0x2d1588,
- 0x234d86,
- 0x34ef07,
- 0x3c3d84,
- 0x34d748,
- 0x28688c,
- 0x289b8c,
- 0x28c405,
- 0x3b0747,
- 0x301086,
- 0x34ee86,
- 0x3b9388,
- 0x21c984,
- 0x26a74b,
- 0x286fcb,
- 0x2f4646,
- 0x344d47,
- 0x28f405,
- 0x271a45,
- 0x26a886,
- 0x2582c5,
- 0x201905,
- 0x2cec87,
- 0x20afc9,
- 0x26e684,
- 0x258e45,
- 0x2fcfc5,
- 0x2e9d08,
- 0x28b9c5,
- 0x2bd109,
- 0x2b3947,
- 0x2b394b,
- 0x2f24c6,
- 0x244949,
- 0x3556c8,
- 0x291005,
- 0x20f3c8,
- 0x2e6848,
- 0x261fc7,
- 0x331bc7,
- 0x389149,
- 0x26eb07,
- 0x29cf89,
- 0x2fc3cc,
- 0x348188,
- 0x2b9649,
- 0x2bb207,
- 0x283749,
- 0x2ff287,
- 0x222888,
- 0x3b5d45,
- 0x3b02c6,
- 0x2c44c8,
- 0x2d7148,
- 0x2caa49,
- 0x201947,
- 0x272445,
- 0x336b09,
- 0x2d3206,
- 0x293d04,
- 0x31bf86,
- 0x34f288,
- 0x3cbac7,
- 0x328548,
- 0x219009,
- 0x2f8107,
- 0x2a1706,
- 0x2e6f04,
- 0x20cb09,
- 0x210f48,
- 0x234c47,
- 0x36b6c6,
- 0x328286,
- 0x21cd84,
- 0x2f5206,
- 0x20f0c3,
- 0x32d9c9,
- 0x32de06,
- 0x2accc5,
- 0x2a1e46,
- 0x2cf205,
- 0x2826c8,
- 0x20edc7,
- 0x238ec6,
- 0x2fee06,
- 0x30ffc8,
- 0x2a4747,
- 0x29ae85,
- 0x29ecc8,
- 0x3a77c8,
- 0x38ee48,
- 0x244d85,
- 0x3b0346,
- 0x308fc9,
- 0x2d52c4,
- 0x2cf08b,
- 0x34f94b,
- 0x2e3709,
- 0x23ffc3,
- 0x256085,
- 0x2e48c6,
- 0x245b08,
- 0x304204,
- 0x31f2c6,
- 0x205449,
- 0x2c2f05,
- 0x2cebc6,
- 0x331706,
- 0x2191c4,
- 0x29f34a,
- 0x2acc08,
- 0x2d7146,
- 0x3c2785,
- 0x344bc7,
- 0x35e587,
- 0x21f504,
- 0x34fb87,
- 0x228f44,
- 0x228f46,
- 0x20eb03,
- 0x267c05,
- 0x2b1045,
- 0x32f108,
- 0x27f0c5,
- 0x27ba49,
- 0x2a62c7,
- 0x34d58b,
- 0x2a62cc,
- 0x2a68ca,
- 0x313987,
- 0x20cc43,
- 0x3897c8,
- 0x244f45,
- 0x2f9c85,
- 0x359644,
- 0x222786,
- 0x27c946,
- 0x2f5247,
- 0x33608b,
- 0x219cc4,
- 0x3ac004,
- 0x2c9a44,
- 0x2ce986,
- 0x212bc4,
- 0x225e48,
- 0x359445,
- 0x21afc5,
- 0x371bc7,
- 0x2e6f49,
- 0x35e345,
- 0x38fe4a,
- 0x2a4289,
- 0x2ae38a,
- 0x3c4f49,
- 0x352404,
- 0x2c9f05,
- 0x2c1348,
- 0x2d0ecb,
- 0x2d5085,
- 0x215246,
- 0x209744,
- 0x27bf86,
- 0x2f7f89,
- 0x2e07c7,
- 0x275dc8,
- 0x2a5846,
- 0x27ffc7,
- 0x282f08,
- 0x3903c6,
- 0x3bd204,
- 0x380547,
- 0x36fe85,
- 0x382607,
- 0x29a404,
- 0x2b9b86,
- 0x304f88,
- 0x29abc8,
- 0x2f1887,
- 0x31d6c8,
- 0x2984c5,
- 0x240004,
- 0x381ec8,
- 0x295e04,
- 0x214e85,
- 0x305184,
- 0x20e987,
- 0x28a207,
- 0x283888,
- 0x2d2cc6,
- 0x27f045,
- 0x27b848,
- 0x248e88,
- 0x2a3b49,
- 0x34fc46,
- 0x22f2c8,
- 0x3bf28a,
- 0x3da248,
- 0x311985,
- 0x223e86,
- 0x2a4148,
- 0x3bd90a,
- 0x20d487,
- 0x287fc5,
- 0x293f08,
- 0x2ab804,
- 0x24ff86,
- 0x2c5f48,
- 0x3c6986,
- 0x3c9c88,
- 0x254747,
- 0x3c16c6,
- 0x2baac4,
- 0x266847,
- 0x2b5684,
- 0x2f7f47,
- 0x36bacd,
- 0x266e85,
- 0x2d0a4b,
- 0x289e06,
- 0x24f808,
- 0x23ff84,
- 0x3c1f86,
- 0x27ee06,
- 0x210e07,
- 0x29a24d,
- 0x2fbf87,
- 0x2b6188,
- 0x285585,
- 0x26e048,
- 0x2ca386,
- 0x298548,
- 0x22e4c6,
- 0x2f73c7,
- 0x283c09,
- 0x35a447,
- 0x289108,
- 0x273d85,
- 0x229e88,
- 0x34edc5,
- 0x26b045,
- 0x34c4c5,
- 0x215183,
- 0x2846c4,
- 0x294105,
- 0x243789,
- 0x36b5c6,
- 0x2e0488,
- 0x331985,
- 0x2b7f47,
- 0x3171ca,
- 0x2ceb09,
- 0x2c8f0a,
- 0x2d68c8,
- 0x236fcc,
- 0x2843cd,
- 0x30ad03,
- 0x3c9b88,
- 0x3d6fc5,
- 0x21f746,
- 0x3a47c6,
- 0x35c045,
- 0x3d01c9,
- 0x28e9c5,
- 0x27b848,
- 0x257506,
- 0x360146,
- 0x2a5049,
- 0x3a6787,
- 0x294806,
- 0x317148,
- 0x3a9f08,
- 0x2e4f07,
- 0x2c328e,
- 0x2ca5c5,
- 0x3c0ac5,
- 0x3c6888,
- 0x31a307,
- 0x200e42,
- 0x2c36c4,
- 0x288bca,
- 0x234d08,
- 0x2e6986,
- 0x29c388,
- 0x249886,
- 0x36a0c8,
- 0x2b0388,
- 0x26b004,
- 0x2b8705,
- 0x602c84,
- 0x602c84,
- 0x602c84,
- 0x204ec3,
- 0x328106,
- 0x27bd06,
- 0x2a0fcc,
- 0x202f03,
- 0x2cab86,
- 0x21a9c4,
- 0x359b48,
- 0x205285,
- 0x288cc6,
- 0x2c0c08,
- 0x2d8046,
- 0x238e46,
- 0x212bc8,
- 0x2d8d07,
- 0x26e8c9,
- 0x32044a,
- 0x2052c4,
- 0x228f85,
- 0x2f3205,
- 0x3598c6,
- 0x231906,
- 0x2a1b06,
- 0x3cc306,
- 0x26ea04,
- 0x26ea0b,
- 0x228d44,
- 0x244ac5,
- 0x2af585,
- 0x219506,
- 0x3c6e08,
- 0x284287,
- 0x32dd84,
- 0x25a2c3,
- 0x2ab305,
- 0x31be47,
- 0x28418b,
- 0x32f007,
- 0x2c0b08,
- 0x2bf447,
- 0x269406,
- 0x27d308,
- 0x292a0b,
- 0x2abb46,
- 0x213a89,
- 0x292b85,
- 0x31da43,
- 0x2cebc6,
- 0x254648,
- 0x214303,
- 0x27d903,
- 0x27b386,
- 0x249886,
- 0x37880a,
- 0x27e885,
- 0x27ec4b,
- 0x2a1d8b,
- 0x244043,
- 0x206743,
- 0x2b3244,
- 0x249647,
- 0x2546c4,
- 0x219344,
- 0x2b4e84,
- 0x3da548,
- 0x3c26c8,
- 0x2089c9,
- 0x2d3a08,
- 0x34c747,
- 0x22f846,
- 0x2e00cf,
- 0x2ca706,
- 0x2d6044,
- 0x3c250a,
- 0x31bd47,
- 0x2b5786,
- 0x293d49,
- 0x208945,
- 0x32f245,
- 0x208a86,
- 0x229fc3,
- 0x2ab849,
- 0x222686,
- 0x218dc9,
- 0x39abc6,
- 0x267c05,
- 0x28c805,
- 0x206643,
- 0x249788,
- 0x32e4c7,
- 0x20ef04,
- 0x3599c8,
- 0x3173c4,
- 0x356506,
- 0x31cc06,
- 0x23b486,
- 0x2d89c9,
- 0x2f9c05,
- 0x29af46,
- 0x247d89,
- 0x2c9646,
- 0x2e01c6,
- 0x39f786,
- 0x212185,
- 0x305186,
- 0x2f73c4,
- 0x3b5d45,
- 0x2c44c4,
- 0x2b6b06,
- 0x33fa84,
- 0x201a43,
- 0x287c45,
- 0x233c08,
- 0x3d2cc7,
- 0x304289,
- 0x287ec8,
- 0x29b651,
- 0x33178a,
- 0x2f4587,
- 0x254886,
- 0x21a9c4,
- 0x2c45c8,
- 0x2b5c48,
- 0x29b80a,
- 0x2bcecd,
- 0x215146,
- 0x212cc6,
- 0x266906,
- 0x21afc7,
- 0x2b6245,
- 0x251907,
- 0x344ec5,
- 0x2b3a84,
- 0x206686,
- 0x2269c7,
- 0x2ab54d,
- 0x2a4087,
- 0x3774c8,
- 0x27bb49,
- 0x223d86,
- 0x36bd85,
- 0x23ae44,
- 0x34f386,
- 0x21f406,
- 0x234e86,
- 0x29cc08,
- 0x223283,
- 0x210e03,
- 0x343085,
- 0x35c6c6,
- 0x2b0345,
- 0x2a5a48,
- 0x2a07ca,
- 0x246b04,
- 0x359b48,
- 0x296188,
- 0x219347,
- 0x331a49,
- 0x2c0808,
- 0x2829c7,
- 0x2b5106,
- 0x3c698a,
- 0x34f408,
- 0x307009,
- 0x2af148,
- 0x227f89,
- 0x361107,
- 0x303505,
- 0x2ffd06,
- 0x2b2948,
- 0x24f988,
- 0x313c48,
- 0x31c5c8,
- 0x244ac5,
- 0x200d04,
- 0x232588,
- 0x23eb84,
- 0x3c4d44,
- 0x267c05,
- 0x295647,
- 0x2e6d09,
- 0x210c07,
- 0x21a5c5,
- 0x278886,
- 0x368186,
- 0x213bc4,
- 0x2a5386,
- 0x27e044,
- 0x292686,
- 0x2e6ac6,
- 0x214146,
- 0x3bfc85,
- 0x2a5907,
- 0x20cc43,
- 0x20a909,
- 0x30fdc8,
- 0x282844,
- 0x28284d,
- 0x29acc8,
- 0x2f0148,
- 0x306f86,
- 0x283d09,
- 0x2ceb09,
- 0x2f7c85,
- 0x2a08ca,
- 0x26da4a,
- 0x270c0c,
- 0x270d86,
- 0x2794c6,
- 0x2caf86,
- 0x39b709,
- 0x21f986,
- 0x222906,
- 0x28ea86,
- 0x34d748,
- 0x31d6c6,
- 0x2d4b8b,
- 0x2957c5,
- 0x21afc5,
- 0x279cc5,
- 0x340c06,
- 0x215103,
- 0x23b406,
- 0x2a4007,
- 0x2c4485,
- 0x211e45,
- 0x3b8505,
- 0x33d006,
- 0x2f7d44,
- 0x334606,
- 0x2a9789,
- 0x340a8c,
- 0x2b37c8,
- 0x2a98c4,
- 0x304e86,
- 0x289f06,
- 0x254648,
- 0x225fc8,
- 0x340989,
- 0x344bc7,
- 0x236589,
- 0x271b06,
- 0x2150c4,
- 0x205fc4,
- 0x281fc4,
- 0x282f08,
- 0x2e6b4a,
- 0x35e2c6,
- 0x36b487,
- 0x382887,
- 0x244a45,
- 0x2f31c4,
- 0x290c86,
- 0x2b6286,
- 0x20eec3,
- 0x30fc07,
- 0x3d35c8,
- 0x2f7dca,
- 0x345188,
- 0x2dd348,
- 0x33fac5,
- 0x2a1405,
- 0x2364c5,
- 0x244e06,
- 0x35cb06,
- 0x2fe385,
- 0x32dc09,
- 0x2f2fcc,
- 0x35b4c7,
- 0x29b888,
- 0x276705,
- 0x602c84,
- 0x229cc4,
- 0x283484,
- 0x218bc6,
- 0x2a2d4e,
- 0x32f2c7,
- 0x21b1c5,
- 0x2d524c,
- 0x30af87,
- 0x226947,
- 0x22bb09,
- 0x220d49,
- 0x287fc5,
- 0x30fdc8,
- 0x308fc9,
- 0x38ed05,
- 0x2c43c8,
- 0x2b9886,
- 0x382146,
- 0x23f204,
- 0x28fe08,
- 0x223f43,
- 0x209284,
- 0x2ab385,
- 0x394e47,
- 0x26bcc5,
- 0x3bf149,
- 0x2a5f8d,
- 0x2c6506,
- 0x3c37c4,
- 0x226b08,
- 0x20ae0a,
- 0x21bf47,
- 0x36ba05,
- 0x2092c3,
- 0x2a1f4e,
- 0x24988c,
- 0x305387,
- 0x2a2f07,
- 0x4230e9c7,
- 0x14f0c6,
- 0x46e44,
- 0x210d83,
- 0x21f9c5,
- 0x283485,
- 0x29c748,
- 0x299d49,
- 0x3db306,
- 0x2546c4,
- 0x2f44c6,
- 0x266e0b,
- 0x2dc50c,
- 0x24b8c7,
- 0x2d4e45,
- 0x3a76c8,
- 0x2e4cc5,
- 0x3c2507,
- 0x3315c7,
- 0x22ee45,
- 0x215103,
- 0x20fd44,
- 0x3cb985,
- 0x26e585,
- 0x26e586,
- 0x2a8f48,
- 0x2269c7,
- 0x3a4ac6,
- 0x21cc86,
- 0x34c406,
- 0x2671c9,
- 0x2111c7,
- 0x27e146,
- 0x2dc686,
- 0x277146,
- 0x2acb45,
- 0x205746,
- 0x383a05,
- 0x28ba48,
- 0x29528b,
- 0x2909c6,
- 0x3828c4,
- 0x2d5b09,
- 0x2a62c4,
- 0x2b9808,
- 0x31c087,
- 0x285304,
- 0x2bff48,
- 0x2c59c4,
- 0x2acb84,
- 0x398305,
- 0x31c4c6,
- 0x3da487,
- 0x24e4c3,
- 0x2a17c5,
- 0x2fb684,
- 0x3c0b06,
- 0x2f7d08,
- 0x3db085,
- 0x294f49,
- 0x313985,
- 0x3736c8,
- 0x21a887,
- 0x32df08,
- 0x2bfb87,
- 0x2f2909,
- 0x282b06,
- 0x341c06,
- 0x28ea84,
- 0x3abf45,
- 0x30d1cc,
- 0x279cc7,
- 0x27a747,
- 0x231548,
- 0x2c6506,
- 0x2a3f44,
- 0x34ab44,
- 0x388fc9,
- 0x2cb086,
- 0x26df07,
- 0x210a44,
- 0x261606,
- 0x3a4405,
- 0x2d2807,
- 0x2d4b06,
- 0x2645c9,
- 0x2cfa47,
- 0x297a87,
- 0x2a4ec6,
- 0x261545,
- 0x281448,
- 0x222508,
- 0x22fa46,
- 0x3db0c5,
- 0x2c7406,
- 0x2017c3,
- 0x29c5c9,
- 0x2a188e,
- 0x2bf2c8,
- 0x3174c8,
- 0x22f84b,
- 0x295186,
- 0x379b04,
- 0x238e44,
- 0x2a198a,
- 0x213147,
- 0x27e205,
- 0x213a89,
- 0x2c31c5,
- 0x3c4d87,
- 0x230504,
- 0x299187,
- 0x214fc8,
- 0x2cc646,
- 0x2b9d09,
- 0x2c090a,
- 0x2130c6,
- 0x29a806,
- 0x2af505,
- 0x396405,
- 0x34bac7,
- 0x242788,
- 0x3a4348,
- 0x26b006,
- 0x28c885,
- 0x23168e,
- 0x226384,
- 0x22f9c5,
- 0x278209,
- 0x2d7688,
- 0x28d406,
- 0x29e7cc,
- 0x2a03d0,
- 0x2a298f,
- 0x2a44c8,
- 0x313987,
- 0x3bfc85,
- 0x294105,
- 0x3da309,
- 0x294109,
- 0x278f46,
- 0x2d5107,
- 0x3abe45,
- 0x306a89,
- 0x353186,
- 0x21f7cd,
- 0x281e89,
- 0x219344,
- 0x2bf048,
- 0x232649,
- 0x35e486,
- 0x3899c5,
- 0x341c06,
- 0x275c89,
- 0x27b108,
- 0x209a85,
- 0x28fe04,
- 0x29e98b,
- 0x35e345,
- 0x245b86,
- 0x284706,
- 0x252a06,
- 0x2a388b,
- 0x295049,
- 0x21cbc5,
- 0x391d47,
- 0x331706,
- 0x212dc6,
- 0x283208,
- 0x2b5209,
- 0x37728c,
- 0x31bc48,
- 0x317f06,
- 0x338fc3,
- 0x22d046,
- 0x2a36c5,
- 0x27fb48,
- 0x28c286,
- 0x2d2a48,
- 0x242b85,
- 0x292745,
- 0x21a9c8,
- 0x3a9dc7,
- 0x3a4707,
- 0x2f5247,
- 0x319dc8,
- 0x313ac8,
- 0x2b5b46,
- 0x2b6947,
- 0x306387,
- 0x2a358a,
- 0x206383,
- 0x340c06,
- 0x231605,
- 0x288bc4,
- 0x27bb49,
- 0x2f2884,
- 0x202244,
- 0x2a0c44,
- 0x2a2f0b,
- 0x32e407,
- 0x2318c5,
- 0x2981c8,
- 0x278886,
- 0x278888,
- 0x27e7c6,
- 0x28fd45,
- 0x290005,
- 0x2915c6,
- 0x2937c8,
- 0x293c88,
- 0x27bd06,
- 0x29800f,
- 0x29c090,
- 0x3c12c5,
- 0x20cc43,
- 0x22aa85,
- 0x31ad88,
- 0x294009,
- 0x38ee48,
- 0x2d4f08,
- 0x31f888,
- 0x32e4c7,
- 0x278549,
- 0x2d2c48,
- 0x285a84,
- 0x2a0ac8,
- 0x2e9dc9,
- 0x2b7607,
- 0x2b0104,
- 0x210cc8,
- 0x2a56ca,
- 0x2fb906,
- 0x215146,
- 0x34fb09,
- 0x2a0607,
- 0x2d0308,
- 0x230588,
- 0x21d348,
- 0x37f785,
- 0x207685,
- 0x21afc5,
- 0x283445,
- 0x2b4a07,
- 0x244bc5,
- 0x2c4485,
- 0x3cfec6,
- 0x38ed87,
- 0x2d0e07,
- 0x2a59c6,
- 0x2d6e05,
- 0x245b86,
- 0x20ee45,
- 0x2bca88,
- 0x3abdc4,
- 0x2c96c6,
- 0x324c84,
- 0x2bfd48,
- 0x2c97ca,
- 0x27c48c,
- 0x336285,
- 0x21b086,
- 0x377446,
- 0x28e886,
- 0x317f84,
- 0x3a4d85,
- 0x27dd87,
- 0x2a0689,
- 0x2cef47,
- 0x602c84,
- 0x602c84,
- 0x32e285,
- 0x217684,
- 0x29dd4a,
- 0x278706,
- 0x308dc4,
- 0x3b06c5,
- 0x2b41c5,
- 0x2b6184,
- 0x284347,
- 0x336c87,
- 0x2ce988,
- 0x2c7508,
- 0x209a89,
- 0x295e08,
- 0x29df0b,
- 0x26f484,
- 0x2921c5,
- 0x389385,
- 0x2f51c9,
- 0x2b5209,
- 0x2d5a08,
- 0x228d48,
- 0x219504,
- 0x289f45,
- 0x218e03,
- 0x359885,
- 0x29afc6,
- 0x299b8c,
- 0x210946,
- 0x3898c6,
- 0x28d685,
- 0x33d088,
- 0x3d83c6,
- 0x254a06,
- 0x215146,
- 0x26368c,
- 0x389444,
- 0x34c54a,
- 0x28d5c8,
- 0x2999c7,
- 0x2fb586,
- 0x3db3c7,
- 0x2f40c5,
- 0x36b6c6,
- 0x366906,
- 0x376047,
- 0x2c0604,
- 0x20ea85,
- 0x278204,
- 0x2b3b07,
- 0x278448,
- 0x27934a,
- 0x2820c7,
- 0x2ac747,
- 0x313907,
- 0x2e4e09,
- 0x299b8a,
- 0x229a03,
- 0x3d2c85,
- 0x214183,
- 0x2b4ec9,
- 0x361248,
- 0x295bc7,
- 0x38ef49,
- 0x222606,
- 0x3b5e08,
- 0x393885,
- 0x248f8a,
- 0x3b0a49,
- 0x2492c9,
- 0x3d8287,
- 0x2b5d49,
- 0x214048,
- 0x36a2c6,
- 0x21b248,
- 0x212187,
- 0x26eb07,
- 0x2a4287,
- 0x2d1c48,
- 0x3cd4c6,
- 0x2a5485,
- 0x27dd87,
- 0x29a308,
- 0x34c384,
- 0x2fd284,
- 0x294707,
- 0x2b0707,
- 0x308e4a,
- 0x36a246,
- 0x32f70a,
- 0x2c3607,
- 0x226147,
- 0x20eb44,
- 0x29d044,
- 0x2d2706,
- 0x36c404,
- 0x36c40c,
- 0x308d05,
- 0x214e09,
- 0x2b3644,
- 0x2b6245,
- 0x20ad88,
- 0x293d45,
- 0x38fe46,
- 0x294244,
- 0x2ad88a,
- 0x2b3e46,
- 0x293a0a,
- 0x3c5107,
- 0x2d0145,
- 0x229fc5,
- 0x244a8a,
- 0x293945,
- 0x2a3c06,
- 0x23eb84,
- 0x2b33c6,
- 0x34bb85,
- 0x28c346,
- 0x2f188c,
- 0x26390a,
- 0x26db44,
- 0x22f846,
- 0x2a0607,
- 0x2d4a84,
- 0x34d748,
- 0x2e7f46,
- 0x382709,
- 0x2c20c9,
- 0x348289,
- 0x2cf246,
- 0x212286,
- 0x21b387,
- 0x32db48,
- 0x212089,
- 0x32e407,
- 0x298346,
- 0x280047,
- 0x2667c5,
- 0x226384,
- 0x21af47,
- 0x306545,
- 0x288b05,
- 0x200cc7,
- 0x22ed08,
- 0x3a7646,
- 0x29b14d,
- 0x29c94f,
- 0x2a1d8d,
- 0x205484,
- 0x233d06,
- 0x2d9448,
- 0x28ea45,
- 0x2a3748,
- 0x261e8a,
- 0x219344,
- 0x2b53c6,
- 0x2d60c7,
- 0x219cc7,
- 0x2d8dc9,
- 0x21b205,
- 0x2b6184,
- 0x2b864a,
- 0x2c03c9,
- 0x2b5e47,
- 0x2f2dc6,
- 0x35e486,
- 0x289e86,
- 0x380606,
- 0x2d868f,
- 0x2d9309,
- 0x31d6c6,
- 0x388c06,
- 0x32d209,
- 0x2b6a47,
- 0x214703,
- 0x243846,
- 0x208a43,
- 0x35bf08,
- 0x27fe87,
- 0x2a46c9,
- 0x31ca88,
- 0x3a4848,
- 0x2ff3c6,
- 0x210889,
- 0x35b405,
- 0x22cf84,
- 0x3035c7,
- 0x39b785,
- 0x205484,
- 0x231988,
- 0x20f104,
- 0x2b6787,
- 0x36d146,
- 0x269e45,
- 0x2af148,
- 0x35e34b,
- 0x3102c7,
- 0x244d06,
- 0x2ca784,
- 0x379a86,
- 0x267c05,
- 0x306545,
- 0x2811c9,
- 0x283f49,
- 0x26eb44,
- 0x26eb85,
- 0x22f885,
- 0x248e06,
- 0x30fec8,
- 0x2c29c6,
- 0x3d340b,
- 0x384fca,
- 0x2bfc85,
- 0x290086,
- 0x246805,
- 0x2db7c5,
- 0x296307,
- 0x340e88,
- 0x236584,
- 0x261a86,
- 0x293d06,
- 0x214207,
- 0x31da04,
- 0x27ee06,
- 0x21f245,
- 0x21f249,
- 0x212484,
- 0x2f3349,
- 0x27bd06,
- 0x2c51c8,
- 0x22f885,
- 0x382985,
- 0x28c346,
- 0x377189,
- 0x220d49,
- 0x389946,
- 0x2d7788,
- 0x2a60c8,
- 0x2467c4,
- 0x2b8ac4,
- 0x2b8ac8,
- 0x2e6288,
- 0x236689,
- 0x29af46,
- 0x215146,
- 0x33860d,
- 0x31f2c6,
- 0x3215c9,
- 0x202945,
- 0x208a86,
- 0x27b288,
- 0x334545,
- 0x3063c4,
- 0x267c05,
- 0x283a88,
- 0x29db09,
- 0x2782c4,
- 0x2b9b86,
- 0x3071ca,
- 0x305288,
- 0x308fc9,
- 0x268a0a,
- 0x38eec6,
- 0x29cb08,
- 0x3c22c5,
- 0x28d848,
- 0x2f4145,
- 0x2224c9,
- 0x33a989,
- 0x20fe02,
- 0x292b85,
- 0x271786,
- 0x27bc47,
- 0x322b85,
- 0x2fb486,
- 0x312c48,
- 0x2c6506,
- 0x2c1209,
- 0x27a846,
- 0x283088,
- 0x389d05,
- 0x3ddc06,
- 0x2f74c8,
- 0x282f08,
- 0x361008,
- 0x315708,
- 0x205744,
- 0x21f543,
- 0x2c1444,
- 0x2822c6,
- 0x266804,
- 0x317407,
- 0x254909,
- 0x2c9a45,
- 0x230586,
- 0x243846,
- 0x2a8d8b,
- 0x2b56c6,
- 0x33fd06,
- 0x2ccd48,
- 0x229a46,
- 0x2bd1c3,
- 0x203e83,
- 0x226384,
- 0x22f1c5,
- 0x2b7ac7,
- 0x278448,
- 0x27844f,
- 0x27dc8b,
- 0x30fcc8,
- 0x2b9c06,
- 0x30ffce,
- 0x244ec3,
- 0x2b7a44,
- 0x2b5645,
- 0x2b6006,
- 0x290d8b,
- 0x295706,
- 0x227789,
- 0x269e45,
- 0x24e408,
- 0x204d88,
- 0x220c0c,
- 0x2a2f46,
- 0x3598c6,
- 0x2dedc5,
- 0x288ec8,
- 0x27c485,
- 0x351c88,
- 0x29eb4a,
- 0x2a21c9,
- 0x602c84,
+ 0x3e0d02,
+ 0x210702,
+ 0x20ef42,
+ 0x1376fcc9,
+ 0x13b5cbca,
+ 0x142e307,
+ 0x13e026c2,
+ 0x14fe3c3,
+ 0x4a82,
+ 0x15cbca,
+ 0x15dc0e,
+ 0x24c0c4,
+ 0x572c5,
+ 0x14614a83,
+ 0x3dc83,
+ 0x232dc3,
+ 0x24d9c4,
+ 0x308003,
+ 0x221dc4,
+ 0x21bc83,
+ 0x137a89,
+ 0x68006,
+ 0x23c803,
+ 0xefa04,
+ 0x4743,
+ 0x21a3c3,
+ 0x1df105,
+ 0x203dc3,
+ 0x242543,
+ 0x1464b04,
+ 0x22b983,
+ 0x11b504,
+ 0x207783,
+ 0x9a048,
+ 0x1521403,
+ 0x125d86,
+ 0x1574504,
+ 0x68445,
+ 0x14a64a,
+ 0x129cc2,
+ 0x1500160d,
+ 0x1a6286,
+ 0x15291,
+ 0x1576fcc9,
+ 0x684c8,
+ 0x62888,
+ 0x1c12c707,
+ 0x1182,
+ 0x16fe47,
+ 0x2380e,
+ 0x139b0b,
+ 0x13f10b,
+ 0x1b3d4a,
+ 0x29907,
+ 0x9a048,
+ 0x11c988,
+ 0x7bc7,
+ 0x1c4169cb,
+ 0x1bf87,
+ 0xcd42,
+ 0x26ccd,
+ 0x1c2a07,
+ 0xaed8a,
+ 0x1d92cf,
+ 0x6738f,
+ 0x167c2,
+ 0x1242,
+ 0x83548,
+ 0x1c8f48cc,
+ 0xe770a,
+ 0xe554a,
+ 0x18990a,
+ 0x78508,
+ 0x8d08,
+ 0x5aa88,
+ 0xe5a08,
+ 0x145e88,
+ 0x2a42,
+ 0x1c464f,
+ 0xc134b,
+ 0x79108,
+ 0x25687,
+ 0x14474a,
+ 0x2490b,
+ 0x33249,
+ 0x46e07,
+ 0x8c08,
+ 0x3834c,
+ 0x15c087,
+ 0x1a67ca,
+ 0x106c8,
+ 0x2888e,
+ 0x2904e,
+ 0x2974b,
+ 0x2aa8b,
+ 0x15748b,
+ 0x14bf09,
+ 0xe3b0b,
+ 0xec58d,
+ 0x1261cb,
+ 0x30b4d,
+ 0x30ecd,
+ 0x3640a,
+ 0x3dd0b,
+ 0x3e54b,
+ 0x46405,
+ 0x1cd79a10,
+ 0x199e8f,
+ 0x9854f,
+ 0x63c4d,
+ 0x137c50,
+ 0xaac82,
+ 0x1d20c388,
+ 0xd1288,
+ 0xe8090,
+ 0xcf48e,
+ 0x1d75d105,
+ 0x4d1cb,
+ 0x136b90,
+ 0x8e0a,
+ 0x2ac49,
+ 0x61487,
+ 0x617c7,
+ 0x61987,
+ 0x61d07,
+ 0x631c7,
+ 0x63407,
+ 0x65587,
+ 0x65ac7,
+ 0x66007,
+ 0x66387,
+ 0x66a47,
+ 0x66c07,
+ 0x66dc7,
+ 0x66f87,
+ 0x69a47,
+ 0x6a407,
+ 0x6ac07,
+ 0x6afc7,
+ 0x6b607,
+ 0x6b8c7,
+ 0x6ba87,
+ 0x6bd87,
+ 0x6c887,
+ 0x6ca87,
+ 0x6d907,
+ 0x6dac7,
+ 0x6dc87,
+ 0x6f247,
+ 0x71247,
+ 0x71707,
+ 0x72207,
+ 0x724c7,
+ 0x72847,
+ 0x72a07,
+ 0x72e07,
+ 0x73247,
+ 0x73707,
+ 0x73c87,
+ 0x73e47,
+ 0x74007,
+ 0x74447,
+ 0x74ec7,
+ 0x75407,
+ 0x75987,
+ 0x75b47,
+ 0x75ec7,
+ 0x76407,
+ 0x6882,
+ 0x5ab8a,
+ 0x11cc8,
+ 0x1b0ecc,
+ 0x71b87,
+ 0x85805,
+ 0xa7951,
+ 0x1c0d86,
+ 0xfb14a,
+ 0x833ca,
+ 0x56306,
+ 0xb060b,
+ 0x642,
+ 0x2f7d1,
+ 0xbf089,
+ 0x9b209,
+ 0x9bb06,
+ 0x3ee42,
+ 0x9218a,
+ 0xacdc9,
+ 0xad50f,
+ 0xadb0e,
+ 0xaff88,
+ 0x6502,
+ 0x174a49,
+ 0x8a58e,
+ 0x1c7f0c,
+ 0xf1ccf,
+ 0x1b7a0e,
+ 0x3230c,
+ 0x41a89,
+ 0xd2551,
+ 0xd2b08,
+ 0x59452,
+ 0x62a4d,
+ 0x733cd,
+ 0x7984b,
+ 0x7ea95,
+ 0xf0c09,
+ 0x182f8a,
+ 0x1a3749,
+ 0x1aa210,
+ 0x9028b,
+ 0x9378f,
+ 0xa694b,
+ 0xab54c,
+ 0xb1b90,
+ 0xb4b0a,
+ 0xcc00d,
+ 0xb7ece,
+ 0x14db0a,
+ 0x1bd50c,
+ 0xbe4d4,
+ 0xbed11,
+ 0xc0f0b,
+ 0xc310f,
+ 0xc5f8d,
+ 0xc854e,
+ 0xca80c,
+ 0xcb00c,
+ 0xcbd0b,
+ 0x13ea4e,
+ 0x16c350,
+ 0xd974b,
+ 0xda40d,
+ 0xdcf0f,
+ 0xdf00c,
+ 0xe648e,
+ 0xf2391,
+ 0x10498c,
+ 0x1dc387,
+ 0x10b44d,
+ 0x11a00c,
+ 0x140cd0,
+ 0x15fd8d,
+ 0x168847,
+ 0x18e8d0,
+ 0x19d508,
+ 0x1a160b,
+ 0xb6b8f,
+ 0x1b1148,
+ 0x149d4d,
+ 0x10f810,
+ 0x17e609,
+ 0x1db799c8,
+ 0x1deb9c06,
+ 0xbaac3,
+ 0x15a889,
+ 0xc00c5,
+ 0x1e42,
+ 0x144bc9,
+ 0x14a34a,
+ 0x1e259906,
+ 0x145990d,
+ 0x1e7c2c04,
+ 0x57a46,
+ 0x1e08a,
+ 0x6474d,
+ 0x1e9df489,
+ 0x19a83,
+ 0x1175ca,
+ 0xe4651,
+ 0xe4a89,
+ 0xe54c7,
+ 0xe61c8,
+ 0xe68c7,
+ 0x71c48,
+ 0x1540b,
+ 0x12bc49,
+ 0xf1210,
+ 0xf16cc,
+ 0xf27c8,
+ 0xf4705,
+ 0x13b1c8,
+ 0x1961ca,
+ 0x184947,
+ 0x2902,
+ 0x1ef47415,
+ 0x13788a,
+ 0x1b2589,
+ 0x108a08,
+ 0x9cd89,
+ 0x46145,
+ 0x119d0a,
+ 0x8decf,
+ 0x10b84b,
+ 0xf04c,
+ 0x18ee12,
+ 0x77285,
+ 0x114e48,
+ 0xf678b,
+ 0xe0a11,
+ 0x4dcca,
+ 0x1f2fe185,
+ 0x19b18c,
+ 0x133e43,
+ 0x192286,
+ 0x3fcc2,
+ 0x10948b,
+ 0x109f4a,
+ 0x150a2cc,
+ 0xd1608,
+ 0x30d08,
+ 0x1f708a86,
+ 0x1b2f07,
+ 0xca42,
+ 0x5142,
+ 0x18bb50,
+ 0x69bc7,
+ 0x2ee0f,
+ 0x11ec6,
+ 0x11ed0e,
+ 0x94c0b,
+ 0x472c8,
+ 0x33609,
+ 0x13ce92,
+ 0x19234d,
+ 0x115488,
+ 0x115cc9,
+ 0x176f4d,
+ 0x198609,
+ 0x63cb,
+ 0x6bf08,
+ 0x7a688,
+ 0x7ce08,
+ 0x7d249,
+ 0x7d44a,
+ 0x8c30c,
+ 0x3e80a,
+ 0xf198a,
+ 0x114cc7,
+ 0x9994a,
+ 0x1c350d,
+ 0xd2e11,
+ 0x1fac8846,
+ 0x1cd64b,
+ 0x97c4c,
+ 0x39988,
+ 0x13d849,
+ 0x15b84d,
+ 0x61f50,
+ 0x1808cd,
+ 0xc2c2,
+ 0x4f70d,
+ 0x1b82,
+ 0xc1c2,
+ 0x114c0a,
+ 0x6e70a,
+ 0xfb04a,
+ 0x10260b,
+ 0x292cc,
+ 0x11c48a,
+ 0x11c70e,
+ 0x1d74cd,
+ 0x1fde0bc5,
+ 0x128948,
+ 0x1442,
+ 0x14239c3,
+ 0x15a6960e,
+ 0x16204b4e,
+ 0x16a6820a,
+ 0x1734630e,
+ 0x17b63a8e,
+ 0x18289d0c,
+ 0x142e307,
+ 0x142e309,
+ 0x14fe3c3,
+ 0x18b0400c,
+ 0x1933dfc9,
+ 0x19b48e89,
+ 0x1a353b89,
+ 0x4a82,
+ 0x69551,
+ 0x4a91,
+ 0x6814d,
+ 0x146251,
+ 0x1639d1,
+ 0x89c4f,
+ 0x103f4f,
+ 0x13df0c,
+ 0x148dcc,
+ 0x153acc,
+ 0x4b5cd,
+ 0x1aaa15,
+ 0xedc8c,
+ 0x1b32cc,
+ 0x13f810,
+ 0x16b10c,
+ 0x178fcc,
+ 0x1ac319,
+ 0x1b6959,
+ 0x1c1259,
+ 0x1da294,
+ 0x76d4,
+ 0x7d54,
+ 0x9754,
+ 0x9f94,
+ 0x1aa07989,
+ 0x1b008009,
+ 0x1bbb3389,
+ 0x15ed2d09,
+ 0x4a82,
+ 0x166d2d09,
+ 0x4a82,
+ 0x76ca,
+ 0x4a82,
+ 0x16ed2d09,
+ 0x4a82,
+ 0x76ca,
+ 0x4a82,
+ 0x176d2d09,
+ 0x4a82,
+ 0x17ed2d09,
+ 0x4a82,
+ 0x186d2d09,
+ 0x4a82,
+ 0x76ca,
+ 0x4a82,
+ 0x18ed2d09,
+ 0x4a82,
+ 0x76ca,
+ 0x4a82,
+ 0x196d2d09,
+ 0x4a82,
+ 0x19ed2d09,
+ 0x4a82,
+ 0x76ca,
+ 0x4a82,
+ 0x1a6d2d09,
+ 0x4a82,
+ 0x76ca,
+ 0x4a82,
+ 0x1aed2d09,
+ 0x4a82,
+ 0x1b6d2d09,
+ 0x4a82,
+ 0x1bed2d09,
+ 0x4a82,
+ 0x76ca,
+ 0x4a82,
+ 0x1400401,
+ 0x15285,
+ 0x1b3d44,
+ 0x14c86c3,
+ 0x15d6e03,
+ 0x14f8943,
+ 0x6960e,
+ 0x4b4e,
+ 0x7c80e,
+ 0x6820a,
+ 0x14630e,
+ 0x163a8e,
+ 0x89d0c,
+ 0x10400c,
+ 0x13dfc9,
+ 0x148e89,
+ 0x153b89,
+ 0x7989,
+ 0x8009,
+ 0x1b3389,
+ 0x13f8cd,
+ 0x9a09,
+ 0xa249,
+ 0x12f604,
+ 0x18ad44,
+ 0x1bad44,
+ 0x1bf004,
+ 0xa8a44,
+ 0x2cc04,
+ 0x3ca84,
+ 0x53684,
+ 0x11dc4,
+ 0x62b84,
+ 0x1588703,
+ 0x13dd87,
+ 0x147dc8c,
+ 0xf283,
+ 0xaac82,
+ 0xae8c6,
+ 0x1d74c3,
+ 0xf283,
+ 0x9fc83,
+ 0x8582,
+ 0x8588,
+ 0xe9247,
+ 0x12bcc7,
+ 0x2a42,
0x2000c2,
- 0x4820c302,
+ 0x201242,
+ 0x2052c2,
+ 0x20dec2,
0x200382,
- 0x224e44,
- 0x206a42,
- 0x303f84,
- 0x205642,
- 0xca43,
0x2003c2,
- 0x209482,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x248343,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x20a803,
- 0x216603,
- 0x234c83,
- 0x242244,
- 0x22c0c3,
- 0x235604,
- 0x232c43,
- 0x2db1c4,
- 0x228b03,
- 0x322e47,
- 0x211543,
- 0x20ca43,
- 0x31b008,
- 0x216603,
- 0x280acb,
- 0x2f55c3,
- 0x240986,
- 0x219f82,
- 0x2eec0b,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x216603,
- 0x221003,
- 0x204383,
+ 0x205142,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21bac3,
+ 0x21a3c3,
+ 0x242543,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x21a3c3,
+ 0x242543,
+ 0xb2c3,
+ 0x308003,
+ 0x21dc4,
0x2000c2,
- 0x9fe08,
- 0x397705,
- 0x3065c8,
- 0x2e2bc8,
- 0x20c302,
- 0x329085,
- 0x3bfd47,
- 0x201bc2,
- 0x2401c7,
- 0x200382,
- 0x254f47,
- 0x2bd949,
- 0x26c708,
- 0x21d1c9,
- 0x208582,
- 0x3b04c7,
- 0x3880c4,
- 0x3bfe07,
- 0x384ec7,
- 0x259902,
- 0x211543,
- 0x205a02,
- 0x205642,
- 0x2003c2,
- 0x2161c2,
- 0x200902,
- 0x209482,
- 0x2d6405,
- 0x21bb85,
- 0xc302,
- 0x32c43,
- 0x22c0c3,
- 0x232c43,
- 0x210b03,
- 0x228b03,
- 0x204f43,
- 0x20a803,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x8083,
- 0x101,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x214543,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x216e03,
- 0x4b50bb86,
- 0xe85c3,
- 0xca9c5,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x82c2,
- 0x9fe08,
- 0x12cdc3,
- 0xca43,
- 0x6d9c3,
- 0x42744,
- 0x142a744,
- 0xe50c5,
- 0x2000c2,
- 0x392104,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x241f43,
- 0x22cd85,
- 0x214543,
- 0x20e403,
- 0x20a803,
- 0x24bbc3,
- 0x216603,
- 0x20c603,
- 0x2422c3,
- 0x205b03,
- 0x5c2,
- 0x2d7c2,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x2000c2,
- 0x248343,
- 0x20c302,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x20a803,
- 0x216603,
- 0x209482,
- 0x9fe08,
- 0x228b03,
- 0x6d9c3,
- 0x9fe08,
- 0x6d9c3,
- 0x26fb43,
- 0x22c0c3,
- 0x22fd84,
- 0x232c43,
- 0x228b03,
- 0x203dc2,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x203dc2,
- 0x238cc3,
- 0x20a803,
- 0x216603,
- 0x2ed343,
- 0x20c603,
- 0x2000c2,
- 0x20c302,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x240985,
- 0x127206,
- 0x242244,
- 0x219f82,
- 0x9fe08,
- 0x2000c2,
- 0x12eb85,
- 0x1c508,
- 0x175583,
- 0x20c302,
- 0x4fd40486,
- 0xd944,
- 0x10a7cb,
- 0x34786,
- 0x11647,
- 0x1b8dc9,
- 0x232c43,
- 0x47508,
- 0x4750b,
- 0x4798b,
- 0x480cb,
- 0x4840b,
- 0x486cb,
- 0x48b0b,
- 0x7386,
- 0x228b03,
- 0x20005,
- 0x2a44,
- 0x20e943,
- 0x115547,
- 0xded04,
- 0x6c144,
- 0x20a803,
- 0x189a46,
- 0x194584,
- 0x6d9c3,
- 0x216603,
- 0x2f61c4,
- 0x12ea07,
- 0x126e09,
- 0x10a588,
- 0x52c84,
- 0x3e006,
- 0x8148,
- 0x130245,
- 0x3fc9,
- 0x2f783,
- 0x12eb85,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20ca43,
- 0x216603,
- 0x2f55c3,
- 0x219f82,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x214383,
- 0x217b84,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x2db1c4,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x240986,
- 0x232c43,
- 0x228b03,
- 0x3a183,
- 0x6d9c3,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x12eb85,
- 0x11647,
- 0x7883,
- 0x2f783,
- 0x9fe08,
- 0x228b03,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x5c743,
- 0x20a803,
- 0x216603,
- 0x5322c0c3,
- 0x232c43,
- 0x20a803,
- 0x216603,
- 0x9fe08,
- 0x2000c2,
- 0x20c302,
- 0x22c0c3,
- 0x228b03,
- 0x20a803,
- 0x2003c2,
- 0x216603,
- 0x33aec7,
- 0x20f64b,
- 0x20c003,
- 0x278c08,
- 0x32d8c7,
- 0x32a1c6,
- 0x20d0c5,
- 0x3291c9,
- 0x2112c8,
- 0x37b649,
- 0x3a1d90,
- 0x37b64b,
- 0x2e1b49,
- 0x207883,
- 0x2ef2c9,
- 0x230a06,
- 0x230a0c,
- 0x3977c8,
- 0x3d80c8,
- 0x2bde09,
- 0x2ba48e,
- 0x2bd70b,
- 0x2fff4c,
- 0x225843,
- 0x28768c,
- 0x3ce3c9,
- 0x308907,
- 0x232b8c,
- 0x2b18ca,
- 0x249f84,
- 0x30810d,
- 0x287548,
- 0x3cee4d,
- 0x314846,
- 0x24224b,
- 0x326f89,
- 0x388e87,
- 0x369a86,
- 0x373a89,
- 0x2f790a,
- 0x3dcf08,
- 0x2f4c84,
- 0x38e347,
- 0x2417c7,
- 0x345784,
- 0x217304,
- 0x344509,
- 0x251789,
- 0x28c008,
- 0x2eda85,
- 0x2084c5,
- 0x204c46,
- 0x307fc9,
- 0x26210d,
- 0x215348,
- 0x204b47,
- 0x20d148,
- 0x263e46,
- 0x237b84,
- 0x285845,
- 0x3c4c46,
- 0x3c5d44,
- 0x3ce2c7,
- 0x3d558a,
- 0x20ab44,
- 0x213006,
- 0x213cc9,
- 0x213ccf,
- 0x214b0d,
- 0x215b86,
- 0x21c110,
- 0x21c506,
- 0x21dac7,
- 0x220607,
- 0x22060f,
- 0x221349,
- 0x226486,
- 0x226fc7,
- 0x226fc8,
- 0x227ac9,
- 0x3a8b48,
- 0x311007,
- 0x20b383,
- 0x22bf46,
- 0x298fc8,
- 0x2ba74a,
- 0x2094c9,
- 0x211403,
- 0x328f86,
- 0x2618ca,
- 0x23a747,
- 0x30874a,
- 0x34018e,
- 0x221486,
- 0x318947,
- 0x34f706,
- 0x240d86,
- 0x20748b,
- 0x39710a,
- 0x27630d,
- 0x212347,
- 0x265388,
- 0x265389,
- 0x26538f,
- 0x30440c,
- 0x263289,
- 0x3d28ce,
- 0x322f4a,
- 0x3c2b46,
- 0x2fdb86,
- 0x31ef4c,
- 0x32018c,
- 0x322208,
- 0x35a347,
- 0x37c545,
- 0x2297c4,
- 0x36a6ce,
- 0x262584,
- 0x329687,
- 0x39d78a,
- 0x3d3b54,
- 0x3d64cf,
- 0x2207c8,
- 0x22be08,
- 0x3625cd,
- 0x3625ce,
- 0x22c289,
- 0x22d408,
- 0x22d40f,
- 0x23288c,
- 0x23288f,
- 0x233a47,
- 0x235f0a,
- 0x23d64b,
- 0x237788,
- 0x238b87,
- 0x25bfcd,
- 0x330106,
- 0x3082c6,
- 0x23b289,
- 0x3dbb88,
- 0x240b88,
- 0x240b8e,
- 0x20f747,
- 0x2fbb45,
- 0x242505,
- 0x207a84,
- 0x32a486,
- 0x28bf08,
- 0x374883,
- 0x2e16ce,
- 0x25c388,
- 0x2a704b,
- 0x26fd07,
- 0x26ae45,
- 0x287806,
- 0x2aeb47,
- 0x31b4c8,
- 0x34b8c9,
- 0x3cc205,
- 0x287c88,
- 0x222e86,
- 0x3a35ca,
- 0x36a5c9,
- 0x232c49,
- 0x232c4b,
- 0x339748,
- 0x345649,
- 0x2edb46,
- 0x28f0ca,
- 0x36764a,
- 0x23610c,
- 0x368807,
- 0x26c50a,
- 0x2e5b0b,
- 0x2e5b19,
- 0x324888,
- 0x240a05,
- 0x25c186,
- 0x217d09,
- 0x26cc06,
- 0x236d8a,
- 0x2114c6,
- 0x20d644,
- 0x2cbb0d,
- 0x344147,
- 0x20d649,
- 0x244745,
- 0x245148,
- 0x2472c9,
- 0x249204,
- 0x249e87,
- 0x249e88,
- 0x24a2c7,
- 0x264208,
- 0x24ef47,
- 0x36bfc5,
- 0x256e4c,
- 0x257309,
- 0x2d908a,
- 0x3a6609,
- 0x2ef3c9,
- 0x3889cc,
- 0x25a18b,
- 0x25ad08,
- 0x25c8c8,
- 0x260284,
- 0x284fc8,
- 0x286209,
- 0x2b1987,
- 0x213f06,
- 0x2a0e07,
- 0x29bc49,
- 0x20624b,
- 0x35cd07,
- 0x216687,
- 0x3c5247,
- 0x3cedc4,
- 0x3cedc5,
- 0x2daec5,
- 0x358e8b,
- 0x3b40c4,
- 0x326948,
- 0x2f9a0a,
- 0x222f47,
- 0x3c8e87,
- 0x290552,
- 0x292586,
- 0x22f446,
- 0x28e40e,
- 0x296b86,
- 0x296008,
- 0x29664f,
- 0x3cf208,
- 0x3b1148,
- 0x34200a,
- 0x342011,
- 0x2a5c4e,
- 0x2536ca,
- 0x2536cc,
- 0x22d607,
- 0x22d610,
- 0x3bee08,
- 0x2a5e45,
- 0x2aee4a,
- 0x3c5d8c,
- 0x29868d,
- 0x3b0c46,
- 0x3b0c47,
- 0x3b0c4c,
- 0x3bd2cc,
- 0x36f70c,
- 0x2c4c4b,
- 0x38c184,
- 0x2e5bc4,
- 0x2b1189,
- 0x34abc7,
- 0x37d789,
- 0x367489,
- 0x2b1587,
- 0x2b1746,
- 0x2b1749,
- 0x2b1b43,
- 0x2c660a,
- 0x373cc7,
- 0x3c05cb,
- 0x27618a,
- 0x388144,
- 0x32fd06,
- 0x282349,
- 0x36c284,
- 0x2f480a,
- 0x245005,
- 0x2c16c5,
- 0x2c16cd,
- 0x2c1a0e,
- 0x2c1585,
- 0x339b86,
- 0x240587,
- 0x3db90a,
- 0x2569c6,
- 0x37c044,
- 0x30ed87,
- 0x2ee38b,
- 0x263f07,
- 0x24aac4,
- 0x27a306,
- 0x27a30d,
- 0x2dd88c,
- 0x20a6c6,
- 0x21554a,
- 0x229886,
- 0x2147c8,
- 0x35b747,
- 0x2c93ca,
- 0x23b006,
- 0x212243,
- 0x220286,
- 0x298e48,
- 0x22fb0a,
- 0x2d2dc7,
- 0x2d2dc8,
- 0x25af84,
- 0x290ac7,
- 0x2d3288,
- 0x292788,
- 0x2f1b08,
- 0x2b808a,
- 0x2e2a45,
- 0x2db407,
- 0x253513,
- 0x268f86,
- 0x3dabc8,
- 0x224609,
- 0x240088,
- 0x2ff44b,
- 0x3a4bc8,
- 0x2b92c4,
- 0x21aac6,
- 0x320906,
- 0x31c309,
- 0x2c9207,
- 0x256f48,
- 0x2a1c06,
- 0x200bc4,
- 0x3a0e45,
- 0x2cf888,
- 0x201d8a,
- 0x2cb788,
- 0x2d0846,
- 0x29cd0a,
- 0x26e708,
- 0x2d4888,
- 0x2d6288,
- 0x2d6ac6,
- 0x2d9646,
- 0x3a60cc,
- 0x2d9bd0,
- 0x2ade05,
- 0x3b6408,
- 0x3b6410,
- 0x3cf010,
- 0x3a1c0e,
- 0x3a5d4e,
- 0x3a5d54,
- 0x3ad7cf,
- 0x3adb86,
- 0x345851,
- 0x343a93,
- 0x343f08,
- 0x369c05,
- 0x27aa88,
- 0x2097c5,
- 0x329d8c,
- 0x229189,
- 0x229609,
- 0x3dd547,
- 0x340649,
- 0x236947,
- 0x35e746,
- 0x285647,
- 0x203885,
- 0x2080c3,
- 0x23a183,
- 0x20fc44,
- 0x30128d,
- 0x34bc8f,
- 0x200c05,
- 0x333a46,
- 0x212887,
- 0x397547,
- 0x204206,
- 0x20420b,
- 0x2a6a85,
- 0x258b46,
- 0x305f87,
- 0x24f449,
- 0x2211c6,
- 0x3855c5,
- 0x3ba74b,
- 0x3b0946,
- 0x2137c5,
- 0x23f088,
- 0x291988,
- 0x29f94c,
- 0x29f950,
- 0x2a2749,
- 0x2b71c7,
- 0x2b22cb,
- 0x2c1f86,
- 0x310eca,
- 0x3da94b,
- 0x30cc4a,
- 0x2eca86,
- 0x2ed205,
- 0x32d7c6,
- 0x286bc8,
- 0x3dd60a,
- 0x36225c,
- 0x2f568c,
- 0x2f5988,
- 0x240985,
+ 0x202703,
+ 0x22214a83,
0x38b9c7,
- 0x2ba0c6,
- 0x3b9505,
- 0x218086,
- 0x2043c8,
- 0x2c0647,
- 0x2ba388,
- 0x26904a,
- 0x3a978c,
- 0x374b09,
- 0x3a9a07,
- 0x286744,
- 0x2425c6,
- 0x300b4a,
- 0x367585,
- 0x216f8c,
- 0x21a0c8,
- 0x2e4ac8,
- 0x34ea0c,
- 0x35a64c,
- 0x387c89,
- 0x387ec7,
- 0x370b8c,
- 0x222104,
- 0x24a04a,
- 0x30f80c,
- 0x25038b,
- 0x250a0b,
- 0x253c46,
- 0x256b07,
- 0x22d847,
- 0x22d84f,
- 0x309cd1,
- 0x2dfa92,
- 0x257bcd,
- 0x257bce,
- 0x257f0e,
- 0x3ad988,
- 0x3ad992,
- 0x260408,
- 0x224c47,
- 0x24d44a,
- 0x2a95c8,
- 0x296b45,
- 0x2b484a,
- 0x21c887,
- 0x2e99c4,
- 0x201783,
- 0x235b45,
- 0x342287,
- 0x355047,
- 0x29888e,
- 0x3355cd,
- 0x33c809,
- 0x319c85,
- 0x358243,
- 0x34a646,
- 0x259145,
- 0x2a7288,
- 0x21e489,
- 0x25c1c5,
- 0x25c1cf,
- 0x2d2547,
- 0x20cf45,
- 0x2706ca,
- 0x3c1586,
- 0x245e09,
- 0x37818c,
- 0x3addc9,
- 0x3d7046,
- 0x2f980c,
- 0x3390c6,
- 0x307648,
- 0x2e5a06,
- 0x3645c6,
- 0x2b5844,
- 0x31c283,
- 0x221a4a,
- 0x3037d1,
- 0x26344a,
- 0x246685,
- 0x25a5c7,
- 0x254047,
- 0x2d3384,
- 0x2d338b,
- 0x21d048,
- 0x2bf146,
- 0x2315c5,
- 0x32b944,
- 0x2410c9,
- 0x2008c4,
- 0x20c3c7,
- 0x34cf05,
- 0x34cf07,
- 0x28e645,
- 0x247d03,
- 0x224b08,
- 0x27ac8a,
- 0x24e4c3,
- 0x39774a,
- 0x36c746,
- 0x25bf4f,
- 0x3d2009,
- 0x2e1650,
- 0x2fcbc8,
- 0x2d1689,
- 0x29a087,
- 0x27a28f,
- 0x38f304,
- 0x2db244,
- 0x21c386,
- 0x243206,
- 0x2ed5ca,
- 0x252f86,
- 0x395207,
- 0x311348,
- 0x311547,
- 0x312a07,
- 0x314aca,
- 0x31330b,
- 0x251a45,
- 0x2df6c8,
- 0x20ae83,
- 0x3bcd4c,
- 0x37c2cf,
- 0x3c0d8d,
- 0x257747,
- 0x33c949,
- 0x2312c7,
- 0x267e48,
- 0x3d3d4c,
- 0x2b91c8,
- 0x246388,
- 0x33104e,
- 0x348c94,
- 0x3491a4,
- 0x35ff0a,
- 0x37bccb,
- 0x236a04,
- 0x236a09,
- 0x2b5448,
- 0x242d05,
- 0x37438a,
- 0x285b07,
- 0x322c44,
- 0x248343,
- 0x22c0c3,
- 0x235604,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x214543,
- 0x211543,
- 0x2d9bc6,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x216103,
+ 0x308003,
+ 0x21a8c3,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x21e2ca,
+ 0x2431c5,
+ 0x2141c3,
+ 0x233442,
+ 0x9a048,
+ 0x226d8a4a,
+ 0xe01,
+ 0x9a048,
+ 0x1242,
+ 0x131a42,
+ 0x22fdf20b,
+ 0x23227fc4,
+ 0x1c2b45,
+ 0x1805,
+ 0xf48c6,
+ 0x23601805,
+ 0x53bc3,
+ 0x94e83,
+ 0x9c4,
+ 0x4e83,
+ 0x68b05,
+ 0x139b05,
+ 0x9a048,
+ 0x1bf87,
+ 0x14a83,
+ 0x2cd0d,
+ 0x23e3a147,
+ 0x144686,
+ 0x24146145,
+ 0x1b8dd2,
+ 0x3a247,
+ 0x1d35ca,
+ 0x1d3488,
+ 0x95c7,
+ 0x6574a,
+ 0x1a7308,
+ 0xe2b07,
+ 0x1a870f,
+ 0x169347,
+ 0x53486,
+ 0x136b90,
+ 0x11dccf,
+ 0x1a009,
+ 0x57ac4,
+ 0x2443a30e,
+ 0x35509,
+ 0x670c6,
+ 0x10ecc9,
+ 0x18d986,
+ 0x1ba1c6,
+ 0x78ecc,
+ 0x24b0a,
+ 0x333c7,
+ 0x14420a,
+ 0x33c9,
+ 0xf714c,
+ 0x1d40a,
+ 0x5c30a,
+ 0x68b49,
+ 0x57a46,
+ 0x3348a,
+ 0x11634a,
+ 0xa430a,
+ 0x14fbc9,
+ 0xe30c8,
+ 0xe3346,
+ 0xeb54d,
+ 0x5390b,
+ 0xc0545,
+ 0x24b55a0c,
+ 0x14a887,
+ 0x10d1c9,
+ 0xbf407,
+ 0x10fc14,
+ 0x11010b,
+ 0x254ca,
+ 0x13cd0a,
+ 0xaabcd,
+ 0x1502809,
+ 0x11524c,
+ 0x115acb,
+ 0x106c3,
+ 0x106c3,
+ 0x28886,
+ 0x106c3,
+ 0xf48c8,
+ 0x155983,
+ 0x44ec4,
+ 0x53f83,
+ 0x335c5,
+ 0x146e943,
+ 0x50849,
+ 0xf678b,
+ 0x14df283,
+ 0x148406,
+ 0x14ecac7,
+ 0x1aa487,
+ 0x2592c5c9,
+ 0x1a286,
+ 0x173d09,
+ 0x2703,
+ 0x9a048,
+ 0x1242,
+ 0x4d9c4,
+ 0x88c3,
+ 0x8805,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x220dc3,
+ 0x214a83,
+ 0x232dc3,
+ 0x228503,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x29b3c3,
+ 0x207783,
+ 0x220dc3,
+ 0x2d3684,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x2308c3,
+ 0x2752c6c5,
+ 0x142c943,
+ 0x214a83,
+ 0x232dc3,
+ 0x21bb43,
+ 0x228503,
+ 0x308003,
+ 0x221dc4,
+ 0x2059c3,
+ 0x2137c3,
+ 0x23c803,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x2141c3,
+ 0x2821e9c3,
+ 0x18ed09,
+ 0x1242,
+ 0x3c0743,
+ 0x28e14a83,
+ 0x232dc3,
+ 0x247103,
+ 0x308003,
+ 0x223703,
+ 0x2137c3,
+ 0x242543,
+ 0x2f4bc3,
+ 0x3b9a84,
+ 0x9a048,
+ 0x29614a83,
+ 0x232dc3,
+ 0x2b0043,
+ 0x308003,
+ 0x23c803,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x22e983,
+ 0x9a048,
+ 0x29e14a83,
+ 0x232dc3,
+ 0x228503,
+ 0x203dc3,
+ 0x242543,
+ 0x9a048,
+ 0x142e307,
+ 0x202703,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x139b05,
+ 0x17e707,
+ 0x10fe4b,
+ 0xe4e84,
+ 0xc0545,
+ 0x144ca88,
+ 0x2a54d,
+ 0x2b231ac5,
+ 0x647c4,
+ 0x1242,
+ 0x3a83,
+ 0x17e505,
+ 0x2aec2,
+ 0x5e42,
+ 0x303dc5,
+ 0x9a048,
+ 0x106c2,
+ 0x1d2c3,
+ 0x16454f,
+ 0x1242,
+ 0x105646,
0x2000c2,
- 0x248343,
- 0x20c302,
- 0x22c0c3,
- 0x235604,
- 0x232c43,
- 0x228b03,
- 0x214543,
- 0x2d9bc6,
- 0x20a803,
- 0x216603,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x212483,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x217b84,
- 0x20a803,
- 0x216603,
+ 0x202703,
+ 0x214a83,
+ 0x308003,
+ 0x221dc4,
+ 0x23c803,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x2141c3,
+ 0x2aec2,
+ 0x32a988,
+ 0x2d3684,
+ 0x349646,
+ 0x353986,
+ 0x9a048,
+ 0x3373c3,
+ 0x2cd549,
+ 0x217915,
+ 0x1791f,
+ 0x214a83,
+ 0xd1ac7,
+ 0x214892,
+ 0x169046,
+ 0x1712c5,
+ 0x8e0a,
+ 0x2ac49,
+ 0x21464f,
+ 0x2e3504,
+ 0x224445,
+ 0x311050,
+ 0x2137c7,
+ 0x203dc3,
+ 0x31bf88,
+ 0x1283c6,
+ 0x27cfca,
+ 0x221c84,
+ 0x2fdbc3,
+ 0x233442,
+ 0x2f850b,
+ 0x3dc3,
+ 0x17cc84,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x306403,
+ 0x201242,
+ 0x89ac3,
+ 0x1dee04,
+ 0x21a3c3,
+ 0x242543,
+ 0x2ed73e05,
+ 0x8346,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a8c3,
+ 0x223d43,
+ 0x242543,
+ 0x2703,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x267c2,
0x2000c2,
- 0x258783,
- 0x20c302,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x204042,
- 0x209382,
- 0x20c302,
- 0x22c0c3,
- 0x207902,
- 0x2005c2,
- 0x224e44,
- 0x303f84,
- 0x22b302,
- 0x217b84,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x1805,
+ 0xf283,
+ 0x2d3684,
+ 0x214a83,
+ 0x232dc3,
+ 0x306c44,
+ 0x21a3c3,
+ 0x242543,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x1b3089,
+ 0x29904,
+ 0x214a83,
+ 0x2a42,
+ 0x232dc3,
+ 0x228503,
+ 0x206c03,
+ 0x23c803,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x2982,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x343104,
+ 0x221dc4,
+ 0x21a3c3,
+ 0x242543,
+ 0x207783,
+ 0x16c2,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x2f3983,
+ 0x13903,
+ 0x1a8c3,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x322c0a,
+ 0x3413c9,
+ 0x35fb0b,
+ 0x3602ca,
+ 0x36860a,
+ 0x377c8b,
+ 0x38d74a,
+ 0x39424a,
+ 0x39abca,
+ 0x39ae4b,
+ 0x3bcfc9,
+ 0x3ca20a,
+ 0x3ca58b,
+ 0x3d818b,
+ 0x3e040a,
+ 0x15702,
+ 0x214a83,
+ 0x232dc3,
+ 0x228503,
+ 0x23c803,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x1558b,
+ 0xcf487,
+ 0x5b788,
+ 0x177084,
+ 0x8f308,
+ 0xe8006,
+ 0x15546,
+ 0x366c9,
+ 0x9a048,
+ 0x214a83,
+ 0x8e04,
+ 0x261484,
+ 0x202742,
+ 0x219a04,
+ 0x269045,
+ 0x220dc3,
+ 0x2d3684,
+ 0x214a83,
+ 0x235b44,
+ 0x232dc3,
+ 0x24d9c4,
+ 0x2e3504,
+ 0x221dc4,
+ 0x2137c3,
+ 0x21a3c3,
+ 0x242543,
+ 0x24f8c5,
+ 0x2308c3,
+ 0x2141c3,
+ 0x32bf03,
+ 0x23e804,
+ 0x325d04,
+ 0x373fc5,
+ 0x9a048,
+ 0x203ac4,
+ 0x3b5cc6,
+ 0x268c84,
+ 0x201242,
+ 0x38f207,
+ 0x3a25c7,
+ 0x24b904,
+ 0x2e92c5,
+ 0x35ff85,
+ 0x22d805,
+ 0x221dc4,
+ 0x389208,
+ 0x22b586,
+ 0x3295c8,
+ 0x27b905,
+ 0x2ec0c5,
+ 0x262044,
+ 0x242543,
+ 0x2fe7c4,
+ 0x376806,
+ 0x2432c3,
+ 0x23e804,
+ 0x3829c5,
+ 0x344b44,
+ 0x23acc4,
+ 0x233442,
+ 0x231d86,
+ 0x3aeb46,
+ 0x313fc5,
+ 0x2000c2,
+ 0x202703,
+ 0x33e01242,
+ 0x20c504,
+ 0x200382,
+ 0x23c803,
+ 0x215402,
+ 0x21a3c3,
0x2003c2,
- 0x216603,
- 0x216103,
- 0x253c46,
- 0x20ff42,
- 0x205402,
- 0x225242,
- 0x55a08683,
- 0x55e2d603,
- 0x54b86,
- 0x54b86,
- 0x242244,
- 0x20ca43,
- 0x14114d,
- 0x8bd8a,
- 0x1bc1cc,
- 0x1b338c,
- 0xca7cd,
- 0x12eb85,
- 0x8b50c,
- 0x6bb47,
- 0xbec6,
- 0x15d08,
- 0x1ae07,
- 0x21ec8,
- 0x19974a,
- 0x10f087,
- 0x56a8b745,
- 0xdc1c9,
- 0x56c344cb,
- 0x920b,
- 0x1846c8,
- 0x14dd89,
- 0x6828a,
- 0xe56ce,
- 0x7d4d,
- 0x2c28d,
- 0x143fe8b,
- 0xdd74a,
- 0xd944,
- 0x58c86,
- 0x1bd708,
- 0x18a0c8,
- 0x67607,
- 0xa0c5,
- 0xfdc7,
- 0x330c9,
- 0x16c307,
- 0xe688,
- 0x2b5c9,
- 0x4a444,
- 0x4d185,
- 0x13fe4e,
- 0x189d4d,
- 0x114c8,
- 0x57293106,
- 0x57d72f88,
- 0x74388,
- 0x13b0d0,
- 0x510cc,
- 0x60fc7,
- 0x62447,
- 0x68607,
- 0x71487,
- 0x4c02,
- 0x122587,
- 0x1972cc,
- 0xfe445,
- 0x35147,
- 0xa8946,
- 0xaa289,
- 0xac0c8,
- 0x4742,
+ 0x2fb406,
+ 0x20e2c3,
+ 0x207783,
+ 0x9a048,
+ 0x9a048,
+ 0x308003,
+ 0x1b4103,
+ 0x2000c2,
+ 0x34a01242,
+ 0x308003,
+ 0x266d43,
+ 0x2059c3,
+ 0x227fc4,
+ 0x21a3c3,
+ 0x242543,
+ 0x9a048,
+ 0x2000c2,
+ 0x35201242,
+ 0x214a83,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x682,
+ 0x209d42,
+ 0x20c782,
+ 0x21a8c3,
+ 0x2f7103,
+ 0x2000c2,
+ 0x139b05,
+ 0x9a048,
+ 0x17e707,
+ 0x201242,
+ 0x232dc3,
+ 0x24d9c4,
+ 0x207083,
+ 0x308003,
+ 0x206c03,
+ 0x23c803,
+ 0x21a3c3,
+ 0x2125c3,
+ 0x242543,
+ 0x233dc3,
+ 0x12be53,
+ 0x12e714,
+ 0x139b05,
+ 0x17e707,
+ 0x1d35c9,
+ 0x10d8c6,
+ 0xf5ecb,
+ 0x28886,
+ 0x54c47,
+ 0x15aec6,
+ 0x649,
+ 0x15794a,
+ 0x8b70d,
+ 0x12350c,
+ 0x116cca,
+ 0x112988,
+ 0x97805,
+ 0x1d3608,
+ 0x11ec6,
+ 0x1c6606,
+ 0x365c6,
+ 0x602,
+ 0x2aac82,
+ 0x174ec4,
+ 0x9fc86,
+ 0x12c310,
+ 0x147498e,
+ 0x68846,
+ 0x6264c,
+ 0x36a6720b,
+ 0x139b05,
+ 0x14820b,
+ 0x36fc6544,
+ 0x1b3f07,
+ 0x22111,
+ 0x1ae28a,
+ 0x214a83,
+ 0x3727db88,
+ 0x656c5,
+ 0x19b808,
+ 0xca04,
+ 0x14a545,
+ 0x3755ca06,
+ 0xa7946,
+ 0xc7746,
+ 0x908ca,
+ 0x1b5c43,
+ 0x37a0dc84,
+ 0x50849,
+ 0x129747,
+ 0x1274ca,
+ 0x14d8949,
+ 0x605,
+ 0xec503,
+ 0x37e33f07,
+ 0x1df105,
+ 0x1538186,
+ 0x1498886,
+ 0xb06cc,
+ 0x101b88,
+ 0x3803fcc3,
+ 0xf874b,
+ 0x13864b,
+ 0x38647c0c,
+ 0x140a503,
+ 0xc2dc8,
+ 0xf89c5,
+ 0xc11c9,
+ 0xea803,
+ 0x102908,
+ 0x141dfc6,
+ 0x86107,
+ 0x38b5b849,
+ 0x19d887,
+ 0xebbca,
+ 0x39fbf648,
+ 0x11578d,
+ 0xa788,
+ 0xf283,
+ 0x1443f09,
+ 0x174483,
+ 0x28886,
+ 0xf48c8,
+ 0x11dc4,
+ 0x1205c5,
+ 0x148df83,
+ 0x239c7,
+ 0x38e239c3,
+ 0x393c0a06,
+ 0x39637f04,
+ 0x39b0a107,
+ 0xf48c4,
+ 0xf48c4,
+ 0xf48c4,
+ 0xf48c4,
+ 0x41,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x2000c2,
+ 0x201242,
+ 0x308003,
+ 0x206182,
+ 0x21a3c3,
+ 0x242543,
+ 0x20e2c3,
+ 0x3810cf,
+ 0x38148e,
+ 0x9a048,
+ 0x214a83,
+ 0x43bc7,
+ 0x232dc3,
+ 0x308003,
+ 0x21bc83,
+ 0x21a3c3,
+ 0x242543,
+ 0x68784,
+ 0x4fc4,
+ 0x145bc4,
+ 0x21c9c3,
+ 0x296747,
+ 0x203082,
+ 0x26ce49,
+ 0x200ac2,
+ 0x38be4b,
+ 0x2a1b8a,
+ 0x2a2889,
+ 0x200542,
+ 0x20cdc6,
+ 0x236a55,
+ 0x38bf95,
+ 0x2391d3,
+ 0x38c513,
+ 0x2037c2,
+ 0x2037c5,
+ 0x2037cc,
+ 0x27514b,
+ 0x276205,
+ 0x204b42,
+ 0x29d282,
+ 0x37bb86,
+ 0x201182,
+ 0x2c9d46,
+ 0x20908d,
+ 0x3dee8c,
+ 0x379a84,
+ 0x200882,
+ 0x202b02,
+ 0x259808,
+ 0x200202,
+ 0x205086,
+ 0x395a8f,
+ 0x205090,
+ 0x3a1544,
+ 0x236c15,
+ 0x239353,
+ 0x24d2c3,
+ 0x34934a,
+ 0x214f07,
+ 0x383d89,
+ 0x327387,
+ 0x220f82,
+ 0x200282,
+ 0x3beb06,
+ 0x205fc2,
+ 0x9a048,
+ 0x202e82,
+ 0x201542,
+ 0x20ac47,
+ 0x36a6c7,
+ 0x36a6d1,
+ 0x2180c5,
+ 0x2180ce,
+ 0x218e8f,
+ 0x20cd42,
+ 0x2679c7,
+ 0x21d008,
+ 0x207682,
+ 0x21d482,
+ 0x2101c6,
+ 0x2101cf,
+ 0x263710,
+ 0x22c042,
+ 0x2086c2,
+ 0x238c48,
+ 0x2086c3,
+ 0x25cec8,
+ 0x2c1bcd,
+ 0x215843,
+ 0x363208,
+ 0x27fc4f,
+ 0x28000e,
+ 0x33c9ca,
+ 0x2f5211,
+ 0x2f5690,
+ 0x300acd,
+ 0x300e0c,
+ 0x24a147,
+ 0x3494c7,
+ 0x349709,
+ 0x220f42,
+ 0x204342,
+ 0x25678c,
+ 0x256a8b,
+ 0x200d42,
+ 0x2cbec6,
+ 0x20b682,
+ 0x200482,
+ 0x2167c2,
+ 0x201242,
+ 0x22d204,
+ 0x239e07,
+ 0x22ba02,
+ 0x23f707,
+ 0x241247,
+ 0x22f142,
+ 0x22ec02,
+ 0x243a85,
+ 0x205582,
+ 0x392dce,
+ 0x3cae0d,
+ 0x232dc3,
+ 0x28508e,
+ 0x2b794d,
+ 0x328b03,
+ 0x2027c2,
+ 0x21fc84,
+ 0x24cf02,
+ 0x222342,
+ 0x38cdc5,
+ 0x39d187,
+ 0x246702,
+ 0x20dec2,
+ 0x24d5c7,
+ 0x250bc8,
+ 0x22dec2,
+ 0x277306,
+ 0x25660c,
+ 0x25694b,
+ 0x205dc2,
+ 0x25db0f,
+ 0x25ded0,
+ 0x25e2cf,
+ 0x25e695,
+ 0x25ebd4,
+ 0x25f0ce,
+ 0x25f44e,
+ 0x25f7cf,
+ 0x25fb8e,
+ 0x25ff14,
+ 0x260413,
+ 0x2608cd,
+ 0x2765c9,
+ 0x28d003,
+ 0x207082,
+ 0x31e805,
+ 0x3ddc86,
+ 0x200382,
+ 0x37f147,
+ 0x308003,
+ 0x200642,
+ 0x361608,
+ 0x2f5451,
+ 0x2f5890,
+ 0x201f02,
+ 0x28bf47,
+ 0x204582,
+ 0x271547,
+ 0x201e42,
+ 0x295749,
+ 0x37bb47,
+ 0x29ac08,
+ 0x35c846,
+ 0x24b083,
+ 0x24b085,
+ 0x233042,
+ 0x2004c2,
+ 0x3bef05,
+ 0x39b605,
+ 0x202482,
+ 0x21bdc3,
+ 0x348587,
+ 0x20e5c7,
+ 0x201842,
+ 0x345044,
+ 0x210543,
+ 0x31d809,
+ 0x210548,
+ 0x202042,
+ 0x208282,
+ 0x2ed207,
+ 0x2f5145,
+ 0x298bc8,
+ 0x2ae507,
+ 0x20fac3,
+ 0x29fb06,
+ 0x30094d,
+ 0x300ccc,
+ 0x305086,
+ 0x206782,
+ 0x2017c2,
+ 0x209e82,
+ 0x27facf,
+ 0x27fece,
+ 0x360007,
+ 0x210942,
+ 0x372385,
+ 0x372386,
+ 0x21d542,
+ 0x200bc2,
+ 0x28e5c6,
+ 0x247703,
+ 0x3c5d46,
+ 0x2d6705,
+ 0x2d670d,
+ 0x2d6f95,
+ 0x2d7e0c,
+ 0x2d818d,
+ 0x2d84d2,
+ 0x202382,
+ 0x26c9c2,
+ 0x202802,
+ 0x219386,
+ 0x3c7dc6,
+ 0x202902,
+ 0x3ddd06,
+ 0x206e42,
+ 0x296f45,
+ 0x201582,
+ 0x392f09,
+ 0x21ae0c,
+ 0x21b14b,
+ 0x2003c2,
+ 0x251d88,
+ 0x202942,
+ 0x200a82,
+ 0x272b46,
+ 0x2d2c85,
+ 0x200a87,
+ 0x227c85,
+ 0x257145,
+ 0x215542,
+ 0x2a3882,
+ 0x214282,
+ 0x293a87,
+ 0x2fb4cd,
+ 0x2fb84c,
+ 0x234307,
+ 0x277282,
+ 0x205742,
+ 0x3d2508,
+ 0x344d48,
+ 0x3298c8,
+ 0x3b1104,
+ 0x33ecc7,
+ 0x3c2c83,
+ 0x21b742,
+ 0x20cb42,
+ 0x2fc0c9,
+ 0x228c87,
+ 0x2141c2,
+ 0x272f45,
+ 0x214b42,
+ 0x20eb42,
+ 0x2f6e43,
+ 0x2f6e46,
+ 0x305fc2,
+ 0x308c02,
+ 0x200402,
+ 0x35c406,
+ 0x21fbc7,
+ 0x213fc2,
+ 0x200902,
+ 0x25cd0f,
+ 0x284ecd,
+ 0x28a98e,
+ 0x2b77cc,
+ 0x206842,
+ 0x206142,
+ 0x35c685,
+ 0x320b86,
+ 0x200b82,
+ 0x2069c2,
+ 0x200682,
+ 0x285244,
+ 0x2c1a44,
+ 0x384486,
+ 0x205142,
+ 0x27a207,
+ 0x23d903,
+ 0x23d908,
+ 0x23e108,
+ 0x2d23c7,
+ 0x24c186,
+ 0x207842,
+ 0x20b603,
+ 0x20b607,
+ 0x3a6dc6,
+ 0x2ee0c5,
+ 0x274608,
+ 0x2071c2,
+ 0x3b9447,
+ 0x26c702,
+ 0x294ec2,
+ 0x206382,
+ 0x205249,
+ 0x201082,
+ 0xcb3c8,
+ 0x203882,
+ 0x234583,
+ 0x204847,
+ 0x203282,
+ 0x21af8c,
+ 0x21b28b,
+ 0x305106,
+ 0x2ec445,
+ 0x202c02,
+ 0x202982,
+ 0x2c55c6,
+ 0x216643,
+ 0x342e87,
+ 0x291f82,
+ 0x2008c2,
+ 0x2368d5,
+ 0x38c155,
+ 0x239093,
+ 0x38c693,
+ 0x24ee47,
+ 0x26ee11,
+ 0x275590,
+ 0x283712,
+ 0x2eb111,
+ 0x29a208,
+ 0x29a210,
+ 0x29f38f,
+ 0x2a1953,
+ 0x2a2652,
+ 0x2a7d50,
+ 0x2b4ecf,
+ 0x3689d2,
+ 0x3a1891,
+ 0x3d4d53,
+ 0x2b9d52,
+ 0x2d634f,
+ 0x2ddd0e,
+ 0x2e1112,
+ 0x2e1fd1,
+ 0x2e5e0f,
+ 0x2e7c8e,
+ 0x2efbd1,
+ 0x2f8ed0,
+ 0x301d52,
+ 0x306491,
+ 0x309b50,
+ 0x311f8f,
+ 0x3cea91,
+ 0x347910,
+ 0x37b006,
+ 0x380cc7,
+ 0x218987,
+ 0x209f42,
+ 0x280f85,
+ 0x310dc7,
+ 0x20c782,
+ 0x2018c2,
+ 0x229e45,
+ 0x21ec03,
+ 0x374946,
+ 0x2fb68d,
+ 0x2fb9cc,
+ 0x203642,
+ 0x20364b,
+ 0x27500a,
+ 0x22408a,
+ 0x2c43c9,
+ 0x2fa74b,
+ 0x2ae64d,
+ 0x3114cc,
+ 0x35d58a,
+ 0x244f8c,
+ 0x27188b,
+ 0x27604c,
+ 0x29b68e,
+ 0x2bf90b,
+ 0x2b8a0c,
+ 0x2dc483,
+ 0x376e46,
+ 0x3bf642,
+ 0x304382,
+ 0x24f4c3,
+ 0x206482,
+ 0x20c3c3,
+ 0x324506,
+ 0x25e847,
+ 0x352386,
+ 0x2e78c8,
+ 0x348408,
+ 0x2cf746,
+ 0x200f02,
+ 0x31398d,
+ 0x313ccc,
+ 0x338807,
+ 0x316b07,
+ 0x234a42,
+ 0x2143c2,
+ 0x20b582,
+ 0x27c602,
+ 0x330496,
+ 0x335f95,
+ 0x3395d6,
+ 0x33ff53,
+ 0x340612,
+ 0x355513,
+ 0x358152,
+ 0x3acc8f,
+ 0x3be558,
+ 0x3bf117,
+ 0x3bfc59,
+ 0x3c1898,
+ 0x3c3c58,
+ 0x3c5fd7,
+ 0x3c6b17,
+ 0x3c8216,
+ 0x3cc693,
+ 0x3ccfd5,
+ 0x3cdd52,
+ 0x3ce1d3,
+ 0x201242,
+ 0x21a3c3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x20e2c3,
+ 0x2000c2,
+ 0x201602,
+ 0x3be933c5,
+ 0x3c281445,
+ 0x3c746bc6,
+ 0x9a048,
+ 0x3caba385,
+ 0x201242,
+ 0x2052c2,
+ 0x3ce871c5,
+ 0x3d27e985,
+ 0x3d680387,
+ 0x3da806c9,
+ 0x3de1f844,
+ 0x200382,
+ 0x200642,
+ 0x3e249a05,
+ 0x3e69d789,
+ 0x3eb2fb48,
+ 0x3eeb4985,
+ 0x3f350107,
+ 0x3f61d988,
+ 0x3fb09745,
+ 0x3fe9e2c6,
+ 0x403a2709,
+ 0x406db0c8,
+ 0x40aca648,
+ 0x40e9ddca,
+ 0x412c21c4,
+ 0x4168e885,
+ 0x41ac6c08,
+ 0x41f44945,
+ 0x20fe82,
+ 0x42297703,
+ 0x426aa1c6,
+ 0x42aaf5c8,
+ 0x42ef2f86,
+ 0x4320ad88,
+ 0x43785546,
+ 0x43a02c44,
+ 0x43e08482,
+ 0x446f4cc7,
+ 0x44ab0b04,
+ 0x44e79487,
+ 0x453cfc87,
+ 0x2003c2,
+ 0x456a2c85,
+ 0x45a13504,
+ 0x45fa3407,
+ 0x4623d187,
+ 0x466830c6,
+ 0x46a7f445,
+ 0x46e9d887,
+ 0x472daf48,
+ 0x477d0007,
+ 0x47b41189,
+ 0x47ed7505,
+ 0x48331207,
+ 0x48692a06,
+ 0x647cb,
+ 0x48b3aec8,
+ 0x225bcd,
+ 0x25d2c9,
+ 0x27418b,
+ 0x27c08b,
+ 0x2b014b,
+ 0x2f010b,
+ 0x320d8b,
+ 0x32104b,
+ 0x321e89,
+ 0x322e8b,
+ 0x32314b,
+ 0x323c8b,
+ 0x324e0a,
+ 0x32534a,
+ 0x32594c,
+ 0x32934b,
+ 0x329aca,
+ 0x33e6ca,
+ 0x34b30e,
+ 0x34d44e,
+ 0x34d7ca,
+ 0x34f64a,
+ 0x350c0b,
+ 0x350ecb,
+ 0x3519cb,
+ 0x36cdcb,
+ 0x36d3ca,
+ 0x36e08b,
+ 0x36e34a,
+ 0x36e5ca,
+ 0x36e84a,
+ 0x38e64b,
+ 0x39510b,
+ 0x397c0e,
+ 0x397f8b,
+ 0x39e8cb,
+ 0x39fc0b,
+ 0x3a3fca,
+ 0x3a4249,
+ 0x3a448a,
+ 0x3a5d8a,
+ 0x3bdf4b,
+ 0x3ca84b,
+ 0x3cb24a,
+ 0x3cc0cb,
+ 0x3d520b,
+ 0x3dfe4b,
+ 0x48e81788,
+ 0x4928ae89,
+ 0x496a5789,
+ 0x49aed408,
+ 0x3597c5,
+ 0x2041c3,
+ 0x251084,
+ 0x3015c5,
+ 0x21f586,
+ 0x307385,
+ 0x28a004,
+ 0x37f048,
+ 0x31bb05,
+ 0x294984,
+ 0x3c7607,
+ 0x2a4b0a,
+ 0x38f4ca,
+ 0x360107,
+ 0x34c207,
+ 0x2e6307,
+ 0x280947,
+ 0x334605,
+ 0x3b9b46,
+ 0x2f2207,
+ 0x39bc04,
+ 0x2f9b46,
+ 0x2f9a46,
+ 0x3c2d85,
+ 0x3b6684,
+ 0x29ee06,
+ 0x2a3bc7,
+ 0x34bb86,
+ 0x3adf47,
+ 0x251143,
+ 0x384106,
+ 0x238e85,
+ 0x280487,
+ 0x26a5ca,
+ 0x356504,
+ 0x219d88,
+ 0x31a2c9,
+ 0x2d4847,
+ 0x390606,
+ 0x3c5808,
+ 0x2f36c9,
+ 0x383f44,
+ 0x31eb84,
+ 0x2dea45,
+ 0x222b48,
+ 0x2d4b07,
+ 0x36c9c9,
+ 0x34cdc8,
+ 0x318406,
+ 0x264a46,
+ 0x29f988,
+ 0x36b706,
+ 0x281445,
+ 0x283186,
+ 0x279b88,
+ 0x27f9c6,
+ 0x255d8b,
+ 0x39d746,
+ 0x2a14cd,
+ 0x3d0845,
+ 0x2b09c6,
+ 0x20c045,
+ 0x24a789,
+ 0x370447,
+ 0x385188,
+ 0x291386,
+ 0x2a0689,
+ 0x3b1306,
+ 0x26a545,
+ 0x2a6dc6,
+ 0x2e5346,
+ 0x2d9209,
+ 0x2c0b06,
+ 0x2a4807,
+ 0x360b05,
+ 0x201583,
+ 0x21b7c5,
+ 0x34dd07,
+ 0x288f46,
+ 0x3d0749,
+ 0x346bc6,
+ 0x279686,
+ 0x20f849,
+ 0x282b89,
+ 0x2a8587,
+ 0x343488,
+ 0x2a7789,
+ 0x280c08,
+ 0x394486,
+ 0x2e2e85,
+ 0x2cfd8a,
+ 0x279706,
+ 0x33a806,
+ 0x2dc705,
+ 0x2523c8,
+ 0x326447,
+ 0x22f5ca,
+ 0x24e1c6,
+ 0x2e05c5,
+ 0x309186,
+ 0x215f87,
+ 0x3904c7,
+ 0x21c2c5,
+ 0x26a705,
+ 0x263586,
+ 0x269d46,
+ 0x26c0c6,
+ 0x2c70c4,
+ 0x282109,
+ 0x28bd06,
+ 0x30618a,
+ 0x2211c8,
+ 0x330f08,
+ 0x38f4ca,
+ 0x2af785,
+ 0x2a3b05,
+ 0x3c4f48,
+ 0x2c4f08,
+ 0x237c47,
+ 0x3b9d86,
+ 0x333988,
+ 0x2108c7,
+ 0x274848,
+ 0x2bebc6,
+ 0x283ec8,
+ 0x29c606,
+ 0x27ba87,
+ 0x3681c6,
+ 0x29ee06,
+ 0x2643ca,
+ 0x305206,
+ 0x2e2e89,
+ 0x36f506,
+ 0x2a5c8a,
+ 0x202c49,
+ 0x241706,
+ 0x2c2844,
+ 0x31e8cd,
+ 0x28b107,
+ 0x3b2a86,
+ 0x2ca505,
+ 0x3b1385,
+ 0x391106,
+ 0x2a7349,
+ 0x2bd687,
+ 0x27ab86,
+ 0x31db46,
+ 0x28a089,
+ 0x281384,
+ 0x244744,
+ 0x204088,
+ 0x356846,
+ 0x2a6ec8,
+ 0x318a88,
+ 0x2883c7,
+ 0x3c0549,
+ 0x26c2c7,
+ 0x2ba24a,
+ 0x2fcb8f,
+ 0x2e43ca,
+ 0x3d9e45,
+ 0x279dc5,
+ 0x2173c5,
+ 0x3c2147,
+ 0x215b43,
+ 0x343688,
+ 0x3de2c6,
+ 0x3de3c9,
+ 0x2f2b06,
+ 0x2d9047,
+ 0x2a0449,
+ 0x385088,
+ 0x2dc7c7,
+ 0x31f203,
+ 0x359845,
+ 0x215ac5,
+ 0x2c6f0b,
+ 0x344a04,
+ 0x23ba44,
+ 0x277906,
+ 0x31f3c7,
+ 0x39168a,
+ 0x3803c7,
+ 0x293607,
+ 0x27e985,
+ 0x3c8785,
+ 0x270489,
+ 0x29ee06,
+ 0x38024d,
+ 0x298b05,
+ 0x2bc683,
+ 0x226283,
+ 0x35c505,
+ 0x334285,
+ 0x3c5808,
+ 0x27b4c7,
+ 0x2444c6,
+ 0x2a5406,
+ 0x22a145,
+ 0x233087,
+ 0x287ec7,
+ 0x22b447,
+ 0x28e90a,
+ 0x3841c8,
+ 0x2c70c4,
+ 0x27f747,
+ 0x27d6c7,
+ 0x35e406,
+ 0x29bc87,
+ 0x2e9688,
+ 0x357b08,
+ 0x370346,
+ 0x34c448,
+ 0x2c0b84,
+ 0x2f2206,
+ 0x37ff46,
+ 0x3bbc46,
+ 0x204506,
+ 0x2a3044,
+ 0x280a06,
+ 0x2c95c6,
+ 0x29f1c6,
+ 0x245806,
+ 0x3d0d46,
+ 0x2e94c6,
+ 0x2443c8,
+ 0x2bb748,
+ 0x2dfcc8,
+ 0x307588,
+ 0x3c4ec6,
+ 0x206a05,
+ 0x21b786,
+ 0x2b4a05,
+ 0x393907,
+ 0x29d485,
+ 0x20d743,
+ 0x226305,
+ 0x2ed004,
+ 0x3d0e85,
+ 0x202943,
+ 0x395407,
+ 0x36c188,
+ 0x3ae006,
+ 0x37e88d,
+ 0x279d86,
+ 0x29e785,
+ 0x205243,
+ 0x2c65c9,
+ 0x281506,
+ 0x299486,
+ 0x292104,
+ 0x2e4347,
+ 0x35bf06,
+ 0x244945,
+ 0x23a8c3,
+ 0x206284,
+ 0x27d886,
+ 0x35ad44,
+ 0x26e588,
+ 0x3c7989,
+ 0x2bdc09,
+ 0x2a6cca,
+ 0x2a914d,
+ 0x361a87,
+ 0x3ba086,
+ 0x2afb04,
+ 0x2806c9,
+ 0x285b48,
+ 0x28ad06,
+ 0x234e86,
+ 0x29bc87,
+ 0x2c74c6,
+ 0x2261c6,
+ 0x287346,
+ 0x3cfd0a,
+ 0x21d988,
+ 0x265085,
+ 0x295e09,
+ 0x2d528a,
+ 0x30b048,
+ 0x2a34c8,
+ 0x299408,
+ 0x2b0d0c,
+ 0x34da05,
+ 0x2a5688,
+ 0x2bba46,
+ 0x372046,
+ 0x3db607,
+ 0x3802c5,
+ 0x283305,
+ 0x2bdac9,
+ 0x20d447,
+ 0x3de385,
+ 0x2283c7,
+ 0x226283,
+ 0x2d5745,
+ 0x2273c8,
+ 0x2d6d07,
+ 0x2a3389,
+ 0x2e2d45,
+ 0x380fc4,
+ 0x2a8e08,
+ 0x2c1e87,
+ 0x2dc988,
+ 0x20d188,
+ 0x2b1a85,
+ 0x20c206,
+ 0x2a5506,
+ 0x2dee09,
+ 0x380047,
+ 0x2b52c6,
+ 0x3de007,
+ 0x2027c3,
+ 0x21f844,
+ 0x2da0c5,
+ 0x2331c4,
+ 0x246744,
+ 0x389507,
+ 0x2664c7,
+ 0x27ad44,
+ 0x2a31d0,
+ 0x296007,
+ 0x3c8785,
+ 0x30394c,
+ 0x20cf44,
+ 0x2b9a08,
+ 0x27b989,
+ 0x3bcb46,
+ 0x302a48,
+ 0x267884,
+ 0x277c08,
+ 0x22fbc6,
+ 0x264248,
+ 0x2a4186,
+ 0x28ba4b,
+ 0x32b105,
+ 0x2d9f48,
+ 0x211b44,
+ 0x281e8a,
+ 0x2a3389,
+ 0x3680c6,
+ 0x2bbc48,
+ 0x259345,
+ 0x2c5bc4,
+ 0x2b9906,
+ 0x22b308,
+ 0x281788,
+ 0x32dc86,
+ 0x384404,
+ 0x2cfd06,
+ 0x26c347,
+ 0x279387,
+ 0x29bc8f,
+ 0x339e47,
+ 0x2417c7,
+ 0x372245,
+ 0x372ac5,
+ 0x2a8249,
+ 0x2ead06,
+ 0x389745,
+ 0x282e87,
+ 0x3db888,
+ 0x300805,
+ 0x3681c6,
+ 0x221008,
+ 0x2f2f8a,
+ 0x22b008,
+ 0x28e347,
+ 0x2fcfc6,
+ 0x295dc6,
+ 0x2003c3,
+ 0x212503,
+ 0x2d5449,
+ 0x2a7609,
+ 0x2b9806,
+ 0x2e2d45,
+ 0x2b0b88,
+ 0x2bbc48,
+ 0x36b888,
+ 0x2873cb,
+ 0x37eac7,
+ 0x31bdc9,
+ 0x29bf08,
+ 0x34f104,
+ 0x3bb888,
+ 0x28fe49,
+ 0x2b55c5,
+ 0x3c2047,
+ 0x21f8c5,
+ 0x281688,
+ 0x29324b,
+ 0x29d5d0,
+ 0x2b0545,
+ 0x211a8c,
+ 0x244685,
+ 0x27ea03,
+ 0x2bf706,
+ 0x2c8b04,
+ 0x368486,
+ 0x2a3bc7,
+ 0x202804,
+ 0x242808,
+ 0x34354d,
+ 0x318845,
+ 0x2a2cc4,
+ 0x2ae044,
+ 0x2b3e49,
+ 0x2b2308,
+ 0x32b5c7,
+ 0x22fc48,
+ 0x2821c8,
+ 0x27ae85,
+ 0x2d0e87,
+ 0x27ae07,
+ 0x2cd307,
+ 0x26a709,
+ 0x2879c9,
+ 0x3dfb46,
+ 0x301006,
+ 0x282f46,
+ 0x322605,
+ 0x3b8a04,
+ 0x3c4206,
+ 0x3c7086,
+ 0x27aec8,
+ 0x215c4b,
+ 0x3563c7,
+ 0x2afb04,
+ 0x35be46,
+ 0x2e99c7,
+ 0x36f805,
+ 0x2971c5,
+ 0x2ae204,
+ 0x287946,
+ 0x3c4288,
+ 0x2806c9,
+ 0x24bb46,
+ 0x285948,
+ 0x244a06,
+ 0x360a48,
+ 0x321a0c,
+ 0x27ad46,
+ 0x29e44d,
+ 0x29e8cb,
+ 0x2a48c5,
+ 0x288007,
+ 0x2c0c06,
+ 0x390388,
+ 0x3dfbc9,
+ 0x2ee4c8,
+ 0x3c8785,
+ 0x39b947,
+ 0x280d08,
+ 0x23b4c9,
+ 0x35bb86,
+ 0x25138a,
+ 0x390108,
+ 0x2ee30b,
+ 0x21dc0c,
+ 0x277d08,
+ 0x27cc06,
+ 0x2d0888,
+ 0x2f2c07,
+ 0x33a409,
+ 0x35024d,
+ 0x29ed06,
+ 0x2250c8,
+ 0x2bb609,
+ 0x2c71c8,
+ 0x283fc8,
+ 0x2c9ecc,
+ 0x2cab87,
+ 0x2cb7c7,
+ 0x26a545,
+ 0x2bdf87,
+ 0x3db748,
+ 0x2b9986,
+ 0x24b9cc,
+ 0x300288,
+ 0x2db2c8,
+ 0x307846,
+ 0x2af0c7,
+ 0x3dfd44,
+ 0x307588,
+ 0x2cf84c,
+ 0x28538c,
+ 0x3d9ec5,
+ 0x3c2e07,
+ 0x384386,
+ 0x2af046,
+ 0x24a948,
+ 0x21d284,
+ 0x34bb8b,
+ 0x27a34b,
+ 0x2fcfc6,
+ 0x3433c7,
+ 0x343ec5,
+ 0x272605,
+ 0x34bcc6,
+ 0x259305,
+ 0x3449c5,
+ 0x2d4287,
+ 0x20e989,
+ 0x269f04,
+ 0x25a2c5,
+ 0x2f6d85,
+ 0x35aac8,
+ 0x28d785,
+ 0x2cf209,
+ 0x2badc7,
+ 0x2badcb,
+ 0x2fbbc6,
+ 0x244109,
+ 0x3b65c8,
+ 0x290185,
+ 0x2cd408,
+ 0x287a08,
+ 0x253047,
+ 0x2b4247,
+ 0x389589,
+ 0x264187,
+ 0x29d389,
+ 0x2da70c,
+ 0x341088,
+ 0x2c0649,
+ 0x2c2f87,
+ 0x282289,
+ 0x33c3c7,
+ 0x21dd08,
+ 0x33a345,
+ 0x2f2186,
+ 0x2ca548,
+ 0x217488,
+ 0x2d5149,
+ 0x344a07,
+ 0x273005,
+ 0x3c3909,
+ 0x2f42c6,
+ 0x292a04,
+ 0x37b446,
+ 0x2af448,
+ 0x320807,
+ 0x215e48,
+ 0x34c509,
+ 0x33be47,
+ 0x2a4cc6,
+ 0x2880c4,
+ 0x226389,
+ 0x2d0d08,
+ 0x307707,
+ 0x367a06,
+ 0x215b86,
+ 0x33a784,
+ 0x34c706,
+ 0x239f83,
+ 0x32ac89,
+ 0x32b0c6,
+ 0x2a3705,
+ 0x2a5406,
+ 0x2d95c5,
+ 0x281188,
+ 0x347207,
+ 0x2306c6,
+ 0x287206,
+ 0x330f08,
+ 0x2a83c7,
+ 0x29ed45,
+ 0x2a2fc8,
+ 0x3aa048,
+ 0x390108,
+ 0x244545,
+ 0x2f2206,
+ 0x2bd9c9,
+ 0x2dec84,
+ 0x2d944b,
+ 0x225ecb,
+ 0x264f89,
+ 0x226283,
+ 0x257845,
+ 0x3ae4c6,
+ 0x246508,
+ 0x306ec4,
+ 0x3ae006,
+ 0x28ea49,
+ 0x2c93c5,
+ 0x2d41c6,
+ 0x2c1e86,
+ 0x222dc4,
+ 0x29958a,
+ 0x2a3648,
+ 0x217486,
+ 0x2cd045,
+ 0x343d47,
+ 0x3344c7,
+ 0x20c204,
+ 0x226107,
+ 0x2ba244,
+ 0x34ce46,
+ 0x210b43,
+ 0x26a705,
+ 0x2b6e45,
+ 0x23ef88,
+ 0x27f905,
+ 0x27aa89,
+ 0x2a9fc7,
+ 0x3073cb,
+ 0x2a9fcc,
+ 0x2aa5ca,
+ 0x350107,
+ 0x203d03,
+ 0x278808,
+ 0x244705,
+ 0x300885,
+ 0x359904,
+ 0x21dc06,
+ 0x27b986,
+ 0x34c747,
+ 0x23a80b,
+ 0x2a3044,
+ 0x355f44,
+ 0x2d4444,
+ 0x2d8ec6,
+ 0x202804,
+ 0x222c48,
+ 0x359705,
+ 0x21c145,
+ 0x36b7c7,
+ 0x288109,
+ 0x334285,
+ 0x39110a,
+ 0x3db9c9,
+ 0x2b174a,
+ 0x3cfe49,
+ 0x3545c4,
+ 0x31dc05,
+ 0x2c75c8,
+ 0x3a34cb,
+ 0x2dea45,
+ 0x24c386,
+ 0x241304,
+ 0x27afc6,
+ 0x33bcc9,
+ 0x2e9ac7,
+ 0x346d88,
+ 0x2a94c6,
+ 0x26c2c7,
+ 0x281788,
+ 0x377746,
+ 0x3c72c4,
+ 0x3817c7,
+ 0x382e85,
+ 0x392987,
+ 0x267784,
+ 0x2c0b86,
+ 0x30ad48,
+ 0x29ea88,
+ 0x2ff987,
+ 0x202808,
+ 0x29c6c5,
+ 0x226004,
+ 0x38f3c8,
+ 0x202904,
+ 0x217345,
+ 0x30af44,
+ 0x2109c7,
+ 0x28bdc7,
+ 0x2823c8,
+ 0x2dcb06,
+ 0x27f885,
+ 0x27a888,
+ 0x246848,
+ 0x2a6c09,
+ 0x2261c6,
+ 0x22f648,
+ 0x281d0a,
+ 0x36f888,
+ 0x309745,
+ 0x21b986,
+ 0x2a7208,
+ 0x39ba0a,
+ 0x219507,
+ 0x285f85,
+ 0x292c08,
+ 0x270fc4,
+ 0x252446,
+ 0x2cbb48,
+ 0x3d0d46,
+ 0x334c08,
+ 0x2d7ac7,
+ 0x3c7506,
+ 0x2c2844,
+ 0x237687,
+ 0x2bc004,
+ 0x33bc87,
+ 0x367e0d,
+ 0x237cc5,
+ 0x2d6b0b,
+ 0x285606,
+ 0x251e88,
+ 0x2427c4,
+ 0x3c50c6,
+ 0x27d886,
+ 0x2d0bc7,
+ 0x29e10d,
+ 0x304807,
+ 0x2bc5c8,
+ 0x284145,
+ 0x270648,
+ 0x2d4a86,
+ 0x29c748,
+ 0x238606,
+ 0x3036c7,
+ 0x282749,
+ 0x35a587,
+ 0x28afc8,
+ 0x34a005,
+ 0x22a1c8,
+ 0x2aef85,
+ 0x228e05,
+ 0x362b45,
+ 0x24dec3,
+ 0x204584,
+ 0x292e05,
+ 0x3a2709,
+ 0x367906,
+ 0x2e9788,
+ 0x2c2105,
+ 0x2bde47,
+ 0x371bca,
+ 0x2d4109,
+ 0x2e524a,
+ 0x2dfd48,
+ 0x22820c,
+ 0x282f0d,
+ 0x311883,
+ 0x334b08,
+ 0x206245,
+ 0x2f2d46,
+ 0x384f06,
+ 0x31e585,
+ 0x3de109,
+ 0x33d2c5,
+ 0x27a888,
+ 0x258546,
+ 0x369706,
+ 0x2a8cc9,
+ 0x3a9007,
+ 0x293506,
+ 0x371b48,
+ 0x3bbb48,
+ 0x2ed607,
+ 0x2c974e,
+ 0x2d4cc5,
+ 0x23b3c5,
+ 0x3d0c48,
+ 0x271e87,
+ 0x200e42,
+ 0x2c9b84,
+ 0x36838a,
+ 0x3077c8,
+ 0x287b46,
+ 0x2a0588,
+ 0x2a5506,
+ 0x288b88,
+ 0x2b52c8,
+ 0x228dc4,
+ 0x2be205,
+ 0x668c84,
+ 0x668c84,
+ 0x668c84,
+ 0x20aec3,
+ 0x215a06,
+ 0x27ad46,
+ 0x2a458c,
+ 0x202dc3,
+ 0x267786,
+ 0x21a604,
+ 0x281488,
+ 0x28e885,
+ 0x368486,
+ 0x2c6d08,
+ 0x2e0e46,
+ 0x230646,
+ 0x3c5608,
+ 0x2da147,
+ 0x263f49,
+ 0x3ae60a,
+ 0x266644,
+ 0x29d485,
+ 0x2e4305,
+ 0x2d7746,
+ 0x361ac6,
+ 0x2a50c6,
+ 0x3dc246,
+ 0x264084,
+ 0x26408b,
+ 0x264a44,
+ 0x244285,
+ 0x2b3a45,
+ 0x288486,
+ 0x201b48,
+ 0x282dc7,
+ 0x32b044,
+ 0x25b603,
+ 0x270ac5,
+ 0x37b307,
+ 0x282ccb,
+ 0x23ee87,
+ 0x2c6c08,
+ 0x2be347,
+ 0x26b746,
+ 0x25d588,
+ 0x2c51cb,
+ 0x301506,
+ 0x212849,
+ 0x2c5345,
+ 0x31f203,
+ 0x2d41c6,
+ 0x2d79c8,
+ 0x20c2c3,
+ 0x24c343,
+ 0x281786,
+ 0x2a5506,
+ 0x3759ca,
+ 0x27cc45,
+ 0x27d6cb,
+ 0x2a534b,
+ 0x213c03,
+ 0x20ea43,
+ 0x2ba1c4,
+ 0x370587,
+ 0x277d04,
+ 0x281484,
+ 0x2bb8c4,
+ 0x36fb88,
+ 0x2ccf88,
+ 0x214d49,
+ 0x2d7588,
+ 0x3b2d07,
+ 0x245806,
+ 0x2e93cf,
+ 0x2d4e06,
+ 0x2df404,
+ 0x2ccdca,
+ 0x37b207,
+ 0x2bc106,
+ 0x292a49,
+ 0x214cc5,
+ 0x23f0c5,
+ 0x214e06,
+ 0x22a303,
+ 0x271009,
+ 0x21db06,
+ 0x34c2c9,
+ 0x391686,
+ 0x26a705,
+ 0x35c905,
+ 0x204583,
+ 0x3706c8,
+ 0x32b787,
+ 0x3de2c4,
+ 0x281308,
+ 0x371dc4,
+ 0x359006,
+ 0x2bf706,
+ 0x23d646,
+ 0x2d9e09,
+ 0x300805,
+ 0x29ee06,
+ 0x2713c9,
+ 0x2d3e06,
+ 0x2e94c6,
+ 0x3a14c6,
+ 0x22bd85,
+ 0x30af46,
+ 0x3036c4,
+ 0x33a345,
+ 0x217484,
+ 0x2bcf46,
+ 0x298ac4,
+ 0x2109c3,
+ 0x285c05,
+ 0x233d88,
+ 0x3572c7,
+ 0x306f49,
+ 0x285e88,
+ 0x29f751,
+ 0x2c1f0a,
+ 0x2fcf07,
+ 0x357e46,
+ 0x21a604,
+ 0x2ca648,
+ 0x2ea008,
+ 0x29f90a,
+ 0x2cefcd,
+ 0x2a6dc6,
+ 0x3c5706,
+ 0x237746,
+ 0x21c147,
+ 0x2bc685,
+ 0x286c47,
+ 0x2813c5,
+ 0x2baf04,
+ 0x3c5e46,
+ 0x224dc7,
+ 0x270d0d,
+ 0x2a7147,
+ 0x37ef48,
+ 0x27ab89,
+ 0x21b886,
+ 0x35bb05,
+ 0x23c2c4,
+ 0x2af546,
+ 0x20c106,
+ 0x307946,
+ 0x2a0e08,
+ 0x21ad83,
+ 0x2465c3,
+ 0x349b05,
+ 0x31ec06,
+ 0x2b5285,
+ 0x2a96c8,
+ 0x2a3d8a,
+ 0x347344,
+ 0x281488,
+ 0x299408,
+ 0x2882c7,
+ 0x286589,
+ 0x2c6908,
+ 0x280747,
+ 0x2bbb46,
+ 0x3d0d4a,
+ 0x2af5c8,
+ 0x30c989,
+ 0x2b23c8,
+ 0x21ef89,
+ 0x357d07,
+ 0x312785,
+ 0x2a5906,
+ 0x2b9808,
+ 0x252008,
+ 0x224508,
+ 0x222dc8,
+ 0x244285,
+ 0x200d04,
+ 0x232708,
+ 0x241084,
+ 0x3cfc44,
+ 0x26a705,
+ 0x2949c7,
+ 0x287ec9,
+ 0x2d09c7,
+ 0x20f8c5,
+ 0x277b06,
+ 0x36f1c6,
+ 0x201c44,
+ 0x2a9006,
+ 0x27db04,
+ 0x291746,
+ 0x287c86,
+ 0x212e86,
+ 0x3c8785,
+ 0x2a9587,
+ 0x203d03,
+ 0x211609,
+ 0x330d08,
+ 0x2805c4,
+ 0x2805cd,
+ 0x29eb88,
+ 0x32a608,
+ 0x30c906,
+ 0x282849,
+ 0x2d4109,
+ 0x33b9c5,
+ 0x2a3e8a,
+ 0x291aca,
+ 0x2b444c,
+ 0x2b45c6,
+ 0x278406,
+ 0x2d5686,
+ 0x38ce89,
+ 0x2f2f86,
+ 0x21dd86,
+ 0x33d386,
+ 0x307588,
+ 0x202806,
+ 0x2de54b,
+ 0x294b45,
+ 0x21c145,
+ 0x279485,
+ 0x203e06,
+ 0x226043,
+ 0x23d5c6,
+ 0x2a70c7,
+ 0x2ca505,
+ 0x2d1c05,
+ 0x3b1385,
+ 0x310686,
+ 0x32fa44,
+ 0x32fa46,
+ 0x2ab289,
+ 0x203c8c,
+ 0x2bac48,
+ 0x22b284,
+ 0x30ac46,
+ 0x285706,
+ 0x2d79c8,
+ 0x2bbc48,
+ 0x203b89,
+ 0x343d47,
+ 0x356589,
+ 0x2726c6,
+ 0x22c144,
+ 0x2082c4,
+ 0x27f6c4,
+ 0x281788,
+ 0x287d0a,
+ 0x334206,
+ 0x3677c7,
+ 0x392c07,
+ 0x244205,
+ 0x36c944,
+ 0x28fe06,
+ 0x2bc6c6,
+ 0x21d2c3,
+ 0x330b47,
+ 0x20d088,
+ 0x33bb0a,
+ 0x22be48,
+ 0x20ad88,
+ 0x298b05,
+ 0x2a49c5,
+ 0x3564c5,
+ 0x2445c6,
+ 0x247486,
+ 0x33c885,
+ 0x32aec9,
+ 0x36c74c,
+ 0x2f4ec7,
+ 0x29f988,
+ 0x2521c5,
+ 0x668c84,
+ 0x265444,
+ 0x2d6e44,
+ 0x218706,
+ 0x2a650e,
+ 0x23f147,
+ 0x21c345,
+ 0x2dec0c,
+ 0x310b07,
+ 0x224d47,
+ 0x226fc9,
+ 0x219e49,
+ 0x285f85,
+ 0x330d08,
+ 0x2bd9c9,
+ 0x38ffc5,
+ 0x2ca448,
+ 0x2c0886,
+ 0x38f646,
+ 0x202c44,
+ 0x28ee48,
+ 0x21ba43,
+ 0x215604,
+ 0x270b45,
+ 0x396f07,
+ 0x2c2605,
+ 0x281bc9,
+ 0x2a118d,
+ 0x2b3046,
+ 0x3df784,
+ 0x3b9d08,
+ 0x20e7ca,
+ 0x21c847,
+ 0x367d45,
+ 0x215643,
+ 0x2a550e,
+ 0x3707cc,
+ 0x30b147,
+ 0x2a66c7,
+ 0x443960c7,
+ 0xaf286,
+ 0x647c4,
+ 0x203083,
+ 0x2f2fc5,
+ 0x2d6e45,
+ 0x2a0948,
+ 0x29dc09,
+ 0x22b186,
+ 0x277d04,
+ 0x2fce46,
+ 0x331bcb,
+ 0x2e844c,
+ 0x24df87,
+ 0x2de805,
+ 0x3a9f48,
+ 0x2ed3c5,
+ 0x2ccdc7,
+ 0x2f4cc7,
+ 0x245fc5,
+ 0x226043,
+ 0x20c584,
+ 0x2e4205,
+ 0x269e05,
+ 0x269e06,
+ 0x2a9dc8,
+ 0x224dc7,
+ 0x385206,
+ 0x33a686,
+ 0x362a86,
+ 0x225249,
+ 0x2d0f87,
+ 0x250f86,
+ 0x2e85c6,
+ 0x276d06,
+ 0x2b0ac5,
+ 0x20a586,
+ 0x39b0c5,
+ 0x28d808,
+ 0x29428b,
+ 0x28fb46,
+ 0x392c44,
+ 0x304e49,
+ 0x2a9fc4,
+ 0x2c0808,
+ 0x30e907,
+ 0x283ec4,
+ 0x2c5dc8,
+ 0x2cb5c4,
+ 0x2b0b04,
+ 0x274785,
+ 0x318886,
+ 0x36fac7,
+ 0x23db43,
+ 0x2a4d85,
+ 0x2fd1c4,
+ 0x23b406,
+ 0x33ba48,
+ 0x202705,
+ 0x293f49,
+ 0x350105,
+ 0x267788,
+ 0x21a4c7,
+ 0x32b1c8,
+ 0x2c5a07,
+ 0x241889,
+ 0x280886,
+ 0x33e906,
+ 0x2a78c4,
+ 0x355e85,
+ 0x31320c,
+ 0x279487,
+ 0x279c87,
+ 0x361708,
+ 0x2b3046,
+ 0x2a7004,
+ 0x34b0c4,
+ 0x389409,
+ 0x2d5786,
+ 0x270507,
+ 0x2d0804,
+ 0x326b06,
+ 0x38a805,
+ 0x2dc647,
+ 0x2de4c6,
+ 0x251249,
+ 0x2f0387,
+ 0x29bc87,
+ 0x2a8b46,
+ 0x326a45,
+ 0x27f408,
+ 0x21d988,
+ 0x245a06,
+ 0x202745,
+ 0x2cca86,
+ 0x20af03,
+ 0x2a07c9,
+ 0x2a4e4e,
+ 0x2c5748,
+ 0x371ec8,
+ 0x24580b,
+ 0x294186,
+ 0x385544,
+ 0x230644,
+ 0x2a4f4a,
+ 0x211987,
+ 0x251045,
+ 0x212849,
+ 0x2c9685,
+ 0x3cfc87,
+ 0x2305c4,
+ 0x3c7b07,
+ 0x318988,
+ 0x2d4906,
+ 0x2c0d09,
+ 0x2c6a0a,
+ 0x211906,
+ 0x29e6c6,
+ 0x2b39c5,
+ 0x398545,
+ 0x36ac07,
+ 0x245608,
+ 0x38a748,
+ 0x228dc6,
+ 0x35c985,
+ 0x36184e,
+ 0x2c70c4,
+ 0x245985,
+ 0x277489,
+ 0x2eab08,
+ 0x28e286,
+ 0x2a2acc,
+ 0x2a3990,
+ 0x2a614f,
+ 0x2a8148,
+ 0x350107,
+ 0x3c8785,
+ 0x292e05,
+ 0x36f949,
+ 0x292e09,
+ 0x2cfe06,
+ 0x2deac7,
+ 0x355d85,
+ 0x237c49,
+ 0x35e486,
+ 0x2f2dcd,
+ 0x27f589,
+ 0x281484,
+ 0x2c54c8,
+ 0x2327c9,
+ 0x3343c6,
+ 0x278a05,
+ 0x33e906,
+ 0x346c49,
+ 0x2d0688,
+ 0x206a05,
+ 0x281e04,
+ 0x2a2c8b,
+ 0x334285,
+ 0x246586,
+ 0x283246,
+ 0x3b4246,
+ 0x2875cb,
+ 0x294049,
+ 0x33a5c5,
+ 0x393807,
+ 0x2c1e86,
+ 0x231f46,
+ 0x281a88,
+ 0x224f09,
+ 0x37ed0c,
+ 0x37b108,
+ 0x31aac6,
+ 0x32dc83,
+ 0x22f306,
+ 0x241745,
+ 0x27e208,
+ 0x3d9d46,
+ 0x2dc888,
+ 0x380445,
+ 0x291805,
+ 0x21a608,
+ 0x3bba07,
+ 0x384e47,
+ 0x34c747,
+ 0x302a48,
+ 0x2d7848,
+ 0x2e9f06,
+ 0x2bcd87,
+ 0x21f707,
+ 0x2b3f4a,
+ 0x2168c3,
+ 0x203e06,
+ 0x22b3c5,
+ 0x213504,
+ 0x27ab89,
+ 0x241804,
+ 0x204844,
+ 0x2a4204,
+ 0x2a66cb,
+ 0x32b6c7,
+ 0x310645,
+ 0x29c3c8,
+ 0x277b06,
+ 0x277b08,
+ 0x27cb86,
+ 0x28ed85,
+ 0x28f045,
+ 0x290746,
+ 0x292408,
+ 0x292988,
+ 0x27ad46,
+ 0x29c20f,
+ 0x2a0290,
+ 0x3d0845,
+ 0x203d03,
+ 0x22c205,
+ 0x31bd08,
+ 0x292d09,
+ 0x390108,
+ 0x2de8c8,
+ 0x235288,
+ 0x32b787,
+ 0x2777c9,
+ 0x2dca88,
+ 0x291004,
+ 0x2a4088,
+ 0x35ab89,
+ 0x2bd387,
+ 0x34de44,
+ 0x2d0a88,
+ 0x2a934a,
+ 0x2fd446,
+ 0x2a6dc6,
+ 0x226089,
+ 0x2a3bc7,
+ 0x2d9c88,
+ 0x21fd08,
+ 0x33ad48,
+ 0x24ef85,
+ 0x3d3205,
+ 0x21c145,
+ 0x2d6e05,
+ 0x2bb447,
+ 0x226045,
+ 0x2ca505,
+ 0x3dde06,
+ 0x390047,
+ 0x3a3407,
+ 0x2a9646,
+ 0x2e0285,
+ 0x246586,
+ 0x241985,
+ 0x2c4d88,
+ 0x355d04,
+ 0x2d3e86,
+ 0x324604,
+ 0x2c5bc8,
+ 0x318c0a,
+ 0x27b4cc,
+ 0x23aa05,
+ 0x21c206,
+ 0x37eec6,
+ 0x202586,
+ 0x31ab44,
+ 0x3b9a05,
+ 0x27c447,
+ 0x2a3c49,
+ 0x2d9307,
+ 0x668c84,
+ 0x668c84,
+ 0x32b545,
+ 0x2dda04,
+ 0x2a204a,
+ 0x277986,
+ 0x2bd7c4,
+ 0x3c2d85,
+ 0x3bd405,
+ 0x2bc5c4,
+ 0x282e87,
+ 0x3c3a87,
+ 0x2d8ec8,
+ 0x26d5c8,
+ 0x206a09,
+ 0x372488,
+ 0x2a220b,
+ 0x2acc44,
+ 0x232045,
+ 0x3897c5,
+ 0x34c6c9,
+ 0x224f09,
+ 0x304d48,
+ 0x34cc48,
+ 0x288484,
+ 0x285745,
+ 0x2041c3,
+ 0x2d7705,
+ 0x29ee86,
+ 0x29da4c,
+ 0x20c006,
+ 0x278906,
+ 0x28e505,
+ 0x310708,
+ 0x2e86c6,
+ 0x357fc6,
+ 0x2a6dc6,
+ 0x22bbcc,
+ 0x389884,
+ 0x362bca,
+ 0x28e448,
+ 0x29d887,
+ 0x2fd0c6,
+ 0x22b247,
+ 0x2fca45,
+ 0x367a06,
+ 0x35ee86,
+ 0x372987,
+ 0x2c6704,
+ 0x210ac5,
+ 0x277484,
+ 0x2baf87,
+ 0x2776c8,
+ 0x27828a,
+ 0x280b87,
+ 0x2aa847,
+ 0x350087,
+ 0x2ed509,
+ 0x29da4a,
+ 0x22c103,
+ 0x357285,
+ 0x212ec3,
+ 0x2bb909,
+ 0x2d7c08,
+ 0x372247,
+ 0x390209,
+ 0x21da86,
+ 0x339f88,
+ 0x395385,
+ 0x24694a,
+ 0x343809,
+ 0x370209,
+ 0x3db607,
+ 0x2ea109,
+ 0x212d88,
+ 0x288d86,
+ 0x21c3c8,
+ 0x2d1f47,
+ 0x264187,
+ 0x3db9c7,
+ 0x2daf48,
+ 0x30aac6,
+ 0x2a9105,
+ 0x27c447,
+ 0x29e1c8,
+ 0x362a04,
+ 0x306044,
+ 0x293407,
+ 0x2b5647,
+ 0x2bd84a,
+ 0x288d06,
+ 0x32eeca,
+ 0x2c9ac7,
+ 0x2c6e87,
+ 0x210b84,
+ 0x29d444,
+ 0x2dc546,
+ 0x35c184,
+ 0x35c18c,
+ 0x30e845,
+ 0x2172c9,
+ 0x2ef004,
+ 0x2bc685,
+ 0x20e748,
+ 0x292a45,
+ 0x391106,
+ 0x292f44,
+ 0x2acb4a,
+ 0x2ef646,
+ 0x255fca,
+ 0x3d0007,
+ 0x215f85,
+ 0x22a305,
+ 0x24424a,
+ 0x292585,
+ 0x2a6cc6,
+ 0x241084,
+ 0x2ba346,
+ 0x36acc5,
+ 0x3d9e06,
+ 0x2ff98c,
+ 0x2e18ca,
+ 0x291bc4,
+ 0x245806,
+ 0x2a3bc7,
+ 0x2de444,
+ 0x307588,
+ 0x24c286,
+ 0x392a89,
+ 0x2c8349,
+ 0x341189,
+ 0x2d9606,
+ 0x2d2046,
+ 0x21c507,
+ 0x32ae08,
+ 0x2d1e49,
+ 0x32b6c7,
+ 0x29c546,
+ 0x26c347,
+ 0x237605,
+ 0x2c70c4,
+ 0x21c0c7,
+ 0x21f8c5,
+ 0x28a2c5,
+ 0x200cc7,
+ 0x245e88,
+ 0x3a9ec6,
+ 0x29f00d,
+ 0x2a0b4f,
+ 0x2a534d,
+ 0x202d84,
+ 0x233e86,
+ 0x2e1c88,
+ 0x33d345,
+ 0x2b4108,
+ 0x252f0a,
+ 0x281484,
+ 0x331e06,
+ 0x2abe07,
+ 0x2b7d47,
+ 0x2da209,
+ 0x21c385,
+ 0x2bc5c4,
+ 0x2be14a,
+ 0x2c64c9,
+ 0x2ea207,
+ 0x30b706,
+ 0x3343c6,
+ 0x285686,
+ 0x381886,
+ 0x2e158f,
+ 0x2e1b49,
+ 0x202806,
+ 0x389046,
+ 0x297e89,
+ 0x2bce87,
+ 0x2146c3,
+ 0x22bd46,
+ 0x212503,
+ 0x31e448,
+ 0x26c187,
+ 0x2a8349,
+ 0x2bf588,
+ 0x384f88,
+ 0x33c506,
+ 0x20bf49,
+ 0x2f4e05,
+ 0x22f244,
+ 0x312847,
+ 0x38cf05,
+ 0x202d84,
+ 0x361b48,
+ 0x211c44,
+ 0x2bcbc7,
+ 0x36c106,
+ 0x263645,
+ 0x2b23c8,
+ 0x33428b,
+ 0x331207,
+ 0x2444c6,
+ 0x2d4e84,
+ 0x3854c6,
+ 0x26a705,
+ 0x21f8c5,
+ 0x27f189,
+ 0x282a89,
+ 0x2641c4,
+ 0x264205,
+ 0x245845,
+ 0x2467c6,
+ 0x330e08,
+ 0x2c8e86,
+ 0x20cecb,
+ 0x3bc9ca,
+ 0x2c5b05,
+ 0x28f0c6,
+ 0x23eb85,
+ 0x24a285,
+ 0x292647,
+ 0x204088,
+ 0x292484,
+ 0x37fb46,
+ 0x292a06,
+ 0x212f47,
+ 0x31f1c4,
+ 0x27d886,
+ 0x3c2245,
+ 0x3c2249,
+ 0x2d2244,
+ 0x36cac9,
+ 0x27ad46,
+ 0x2cac48,
+ 0x245845,
+ 0x392d05,
+ 0x3d9e06,
+ 0x37ec09,
+ 0x219e49,
+ 0x278986,
+ 0x2eac08,
+ 0x2a12c8,
+ 0x23eb44,
+ 0x2be9c4,
+ 0x2be9c8,
+ 0x3b2b88,
+ 0x356689,
+ 0x29ee06,
+ 0x2a6dc6,
+ 0x33384d,
+ 0x3ae006,
+ 0x3218c9,
+ 0x268945,
+ 0x214e06,
+ 0x33aec8,
+ 0x32f985,
+ 0x21f744,
+ 0x26a705,
+ 0x2825c8,
+ 0x2a1e09,
+ 0x277544,
+ 0x2c0b86,
+ 0x30cb4a,
+ 0x30b048,
+ 0x2bd9c9,
+ 0x26ad4a,
+ 0x390186,
+ 0x2a0d08,
+ 0x2ccb85,
+ 0x2f0988,
+ 0x2fcac5,
+ 0x21d949,
+ 0x336449,
+ 0x20c642,
+ 0x2c5345,
+ 0x272346,
+ 0x27ac87,
+ 0x213505,
+ 0x3469c6,
+ 0x316908,
+ 0x2b3046,
+ 0x2c7489,
+ 0x279d86,
+ 0x281908,
+ 0x278d45,
+ 0x38e4c6,
+ 0x3037c8,
+ 0x281788,
+ 0x357c08,
+ 0x318488,
+ 0x20a584,
+ 0x20c243,
+ 0x2c76c4,
+ 0x280d86,
+ 0x237644,
+ 0x371e07,
+ 0x357ec9,
+ 0x2d4445,
+ 0x21fd06,
+ 0x22bd46,
+ 0x2a9c0b,
+ 0x2bc046,
+ 0x298d46,
+ 0x2d3f88,
+ 0x264a46,
+ 0x215d83,
+ 0x208503,
+ 0x2c70c4,
+ 0x22f545,
+ 0x244847,
+ 0x2776c8,
+ 0x2776cf,
+ 0x27c34b,
+ 0x330c08,
+ 0x2c0c06,
+ 0x330f0e,
+ 0x23b443,
+ 0x2447c4,
+ 0x2bbfc5,
+ 0x2bc446,
+ 0x28ff0b,
+ 0x294a86,
+ 0x221089,
+ 0x263645,
+ 0x23da88,
+ 0x3d29c8,
+ 0x219d0c,
+ 0x2a6706,
+ 0x2d7746,
+ 0x2e2d45,
+ 0x28ad88,
+ 0x27b4c5,
+ 0x34f108,
+ 0x2a2e4a,
+ 0x2a5789,
+ 0x668c84,
+ 0x2000c2,
+ 0x4a201242,
+ 0x200382,
+ 0x221dc4,
+ 0x209e82,
+ 0x306c44,
+ 0x208482,
+ 0x3dc3,
+ 0x2003c2,
+ 0x2090c2,
+ 0x9a048,
+ 0x29904,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0xccc2,
+ 0x49582,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0xc782,
+ 0xc2c2,
+ 0x1b82,
+ 0x202703,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x21a3c3,
+ 0x242543,
+ 0x241f83,
+ 0x2d3684,
+ 0x214a83,
+ 0x235b44,
+ 0x232dc3,
+ 0x2e3504,
+ 0x308003,
+ 0x2137c7,
+ 0x23c803,
+ 0x203dc3,
+ 0x31bf88,
+ 0x242543,
+ 0x27cfcb,
+ 0x2fdbc3,
+ 0x2431c6,
+ 0x233442,
+ 0x2f850b,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x242543,
+ 0x21a103,
+ 0x208a03,
+ 0x2000c2,
+ 0x9a048,
+ 0x399c45,
+ 0x21f948,
+ 0x2e3648,
+ 0x201242,
+ 0x343045,
+ 0x3c8847,
+ 0x203c42,
+ 0x242a07,
+ 0x200382,
+ 0x2555c7,
+ 0x3742c9,
+ 0x26d188,
+ 0x33abc9,
+ 0x20b342,
+ 0x3c7387,
+ 0x22dd84,
+ 0x3c8907,
+ 0x3bc8c7,
+ 0x25ac42,
+ 0x23c803,
+ 0x202382,
+ 0x208482,
+ 0x2003c2,
+ 0x214282,
+ 0x200902,
+ 0x2090c2,
+ 0x2df885,
+ 0x210205,
+ 0x1242,
+ 0x32dc3,
+ 0x214a83,
+ 0x232dc3,
+ 0x29a643,
+ 0x308003,
+ 0x206c03,
+ 0x21a3c3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0xa983,
+ 0x101,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x21bc83,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x214903,
+ 0x4d4ae8c6,
+ 0x239c3,
+ 0xd50c5,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x1b02,
+ 0x9a048,
+ 0x12a4c3,
+ 0x3dc3,
+ 0x1b4103,
+ 0x455c4,
+ 0x14226c4,
+ 0xed7c5,
+ 0x2000c2,
+ 0x393bc4,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x231a43,
+ 0x22d805,
+ 0x21bc83,
+ 0x21a8c3,
+ 0x21a3c3,
+ 0x24e283,
+ 0x242543,
+ 0x20e2c3,
+ 0x266603,
+ 0x207783,
0x5c2,
- 0x18ce06,
- 0x1ba00b,
- 0x1ba306,
- 0xbe384,
- 0x1753c7,
- 0xe3389,
- 0x6dc89,
- 0x1432c8,
- 0x48902,
- 0x191f89,
- 0xbac8,
- 0xe9a8a,
- 0x38909,
- 0x52946,
- 0xce3c9,
- 0xdd6c7,
- 0xdde09,
- 0xdef08,
- 0xe0f87,
- 0xe29c9,
- 0xe8ec5,
- 0xe9250,
- 0x155886,
- 0x175305,
- 0x114587,
- 0x3950d,
- 0x3ef85,
- 0xef1c6,
- 0xef9c7,
- 0xf61d8,
- 0x11848,
- 0xbe7ca,
- 0xa982,
- 0x507ca,
- 0x6284d,
- 0x2e42,
- 0x13686,
- 0x9d488,
- 0xabe4a,
- 0x45948,
- 0x6d309,
- 0x111788,
- 0x7768e,
- 0x6d548,
- 0x14a647,
- 0x58293044,
- 0x14e70d,
- 0x102f05,
- 0x3148,
- 0x42dc8,
- 0x10c246,
- 0x14302,
- 0x92c04,
- 0x62706,
- 0x3e006,
- 0x58532e4b,
- 0x57c2,
+ 0x2aec2,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x2000c2,
+ 0x202703,
+ 0x201242,
+ 0x2a42,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x21a3c3,
+ 0x242543,
+ 0x2090c2,
+ 0x9a048,
+ 0x308003,
+ 0x1b4103,
+ 0x9a048,
+ 0x1b4103,
+ 0x26f6c3,
+ 0x214a83,
+ 0x22fe44,
+ 0x232dc3,
+ 0x308003,
+ 0x206182,
+ 0x23c803,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x206182,
+ 0x2137c3,
+ 0x21a3c3,
+ 0x242543,
+ 0x2f7103,
+ 0x20e2c3,
+ 0x2000c2,
+ 0x201242,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x2431c5,
+ 0x14fc86,
+ 0x2d3684,
+ 0x233442,
+ 0x882,
+ 0x9a048,
+ 0x2a42,
+ 0x49582,
+ 0x2982,
+ 0x2000c2,
+ 0x139b05,
+ 0x1ce08,
+ 0x991c3,
+ 0x201242,
+ 0x3c604,
+ 0x51c6c486,
+ 0x8d04,
+ 0x10fe4b,
+ 0x34ac6,
+ 0xd1407,
+ 0x12eb09,
+ 0x232dc3,
+ 0x48248,
+ 0x4824b,
+ 0x486cb,
+ 0x48d4b,
+ 0x4908b,
+ 0x4934b,
+ 0x4978b,
+ 0x1d2f06,
+ 0x308003,
+ 0xf3605,
+ 0x68a44,
+ 0x210983,
+ 0x1182c7,
+ 0xe6d44,
+ 0x6cbc4,
+ 0x21a3c3,
+ 0x78a86,
+ 0x5684,
+ 0x1b4103,
+ 0x242543,
+ 0x2fe7c4,
+ 0x12bcc7,
+ 0x14f889,
+ 0x10fc08,
+ 0x1b44c4,
+ 0x1c8a44,
+ 0x365c6,
+ 0xa788,
+ 0x16a605,
+ 0x8649,
+ 0x2fb03,
+ 0x139b05,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x203dc3,
+ 0x242543,
+ 0x2fdbc3,
+ 0x233442,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21bac3,
+ 0x219a04,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x2e3504,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x2431c6,
+ 0x232dc3,
+ 0x308003,
+ 0x10e83,
+ 0x1b4103,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x139b05,
+ 0xd1407,
+ 0x3103,
+ 0x2fb03,
+ 0x9a048,
+ 0x308003,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x5cf43,
+ 0x21a3c3,
+ 0x242543,
+ 0x55214a83,
+ 0x232dc3,
+ 0x21a3c3,
+ 0x242543,
+ 0x9a048,
+ 0x2000c2,
+ 0x201242,
+ 0x214a83,
+ 0x308003,
+ 0x21a3c3,
+ 0x2003c2,
+ 0x242543,
+ 0x336987,
+ 0x2cd68b,
+ 0x20dcc3,
+ 0x2cfac8,
+ 0x32ab87,
+ 0x3de706,
+ 0x218c05,
+ 0x343189,
+ 0x242f48,
+ 0x3359c9,
+ 0x3359d0,
+ 0x37ab8b,
+ 0x2e7589,
+ 0x203103,
+ 0x2f8bc9,
+ 0x231506,
+ 0x23150c,
+ 0x335bc8,
+ 0x3db448,
+ 0x374789,
+ 0x2c368e,
+ 0x37408b,
+ 0x2ba58c,
+ 0x220dc3,
+ 0x28c68c,
+ 0x3d8f49,
+ 0x23bb47,
+ 0x232d0c,
+ 0x2b858a,
+ 0x24c0c4,
+ 0x2ee78d,
+ 0x28c548,
+ 0x3ba7cd,
+ 0x3a6cc6,
+ 0x2d368b,
+ 0x34fa09,
+ 0x3892c7,
+ 0x295946,
+ 0x267b49,
+ 0x33b64a,
+ 0x30c108,
+ 0x2fd7c4,
+ 0x2b5a07,
+ 0x3c51c7,
+ 0x204684,
+ 0x223804,
+ 0x201fc9,
+ 0x286ac9,
+ 0x3d9ac8,
+ 0x398bc5,
+ 0x20b285,
+ 0x2068c6,
+ 0x2ee649,
+ 0x25318d,
+ 0x24c488,
+ 0x2067c7,
+ 0x218c88,
+ 0x2355c6,
+ 0x239c04,
+ 0x284405,
+ 0x3cfb46,
+ 0x3d1e84,
+ 0x3d8e47,
+ 0x3e094a,
+ 0x20d384,
+ 0x211846,
+ 0x2124c9,
+ 0x2124cf,
+ 0x212a8d,
+ 0x213306,
+ 0x21ca10,
+ 0x21ce06,
+ 0x21df07,
+ 0x21e987,
+ 0x21e98f,
+ 0x21f1c9,
+ 0x225986,
+ 0x227207,
+ 0x227208,
+ 0x2275c9,
+ 0x3ba588,
+ 0x305c87,
+ 0x20ed43,
+ 0x3d87c6,
+ 0x29d1c8,
+ 0x2c394a,
+ 0x215849,
+ 0x243083,
+ 0x342f46,
+ 0x37f98a,
+ 0x2f9f87,
+ 0x23b98a,
+ 0x31458e,
+ 0x21f306,
+ 0x338547,
+ 0x238886,
+ 0x2435c6,
+ 0x3d300b,
+ 0x39964a,
+ 0x2cdccd,
+ 0x2d2107,
+ 0x266688,
+ 0x266689,
+ 0x26668f,
+ 0x3070cc,
+ 0x34b789,
+ 0x27e48e,
+ 0x2138ca,
+ 0x216406,
+ 0x2f4806,
+ 0x3adc8c,
+ 0x31fdcc,
+ 0x320308,
+ 0x35a487,
+ 0x235185,
+ 0x3c8ac4,
+ 0x28918e,
+ 0x3a6744,
+ 0x201247,
+ 0x39dcca,
+ 0x3ab1d4,
+ 0x3d548f,
+ 0x21eb48,
+ 0x3d8688,
+ 0x378c8d,
+ 0x378c8e,
+ 0x22cd09,
+ 0x22e548,
+ 0x22e54f,
+ 0x232a0c,
+ 0x232a0f,
+ 0x233bc7,
+ 0x23714a,
+ 0x3087cb,
+ 0x239808,
+ 0x23b107,
+ 0x25c7cd,
+ 0x3620c6,
+ 0x2ee946,
+ 0x23d449,
+ 0x22ba08,
+ 0x2433c8,
+ 0x2433ce,
+ 0x2b7687,
+ 0x3043c5,
+ 0x245385,
+ 0x202404,
+ 0x3de9c6,
+ 0x3d99c8,
+ 0x296d83,
+ 0x2e710e,
+ 0x25cb88,
+ 0x2aae8b,
+ 0x26f887,
+ 0x228c05,
+ 0x273506,
+ 0x2b2b07,
+ 0x31b348,
+ 0x36a409,
+ 0x3cd545,
+ 0x285c48,
+ 0x2209c6,
+ 0x3a618a,
+ 0x289089,
+ 0x232dc9,
+ 0x232dcb,
+ 0x25d908,
+ 0x204549,
+ 0x398c86,
+ 0x3c5a8a,
+ 0x2bfe4a,
+ 0x23734c,
+ 0x3488c7,
+ 0x26cf8a,
+ 0x3b1fcb,
+ 0x3b1fd9,
+ 0x324208,
+ 0x243245,
+ 0x25c986,
+ 0x2a0049,
+ 0x39f606,
+ 0x219aca,
+ 0x26e286,
+ 0x2196c4,
+ 0x2d604d,
+ 0x3458c7,
+ 0x2196c9,
+ 0x247105,
+ 0x247ac8,
+ 0x248009,
+ 0x24b904,
+ 0x24bfc7,
+ 0x24bfc8,
+ 0x24cc87,
+ 0x265c08,
+ 0x250dc7,
+ 0x2d8b85,
+ 0x257e8c,
+ 0x258349,
+ 0x33144a,
+ 0x3a8e89,
+ 0x2f8cc9,
+ 0x388e0c,
+ 0x25b4cb,
+ 0x25c008,
+ 0x25d0c8,
+ 0x260cc4,
+ 0x283b88,
+ 0x284d09,
+ 0x2b8647,
+ 0x212706,
+ 0x2a43c7,
+ 0x29fd49,
+ 0x24768b,
+ 0x36aa87,
+ 0x2947c7,
+ 0x3d0147,
+ 0x3ba744,
+ 0x3ba745,
+ 0x2e3205,
+ 0x358b4b,
+ 0x33d684,
+ 0x323a88,
+ 0x30060a,
+ 0x220a87,
+ 0x3caac7,
+ 0x28f6d2,
+ 0x291646,
+ 0x22f7c6,
+ 0x28870e,
+ 0x29ab46,
+ 0x299288,
+ 0x29a60f,
+ 0x3bab88,
+ 0x28a808,
+ 0x2dd1ca,
+ 0x2dd1d1,
+ 0x2a98ce,
+ 0x25514a,
+ 0x25514c,
+ 0x22e747,
+ 0x22e750,
+ 0x3c7108,
+ 0x2a9ac5,
+ 0x2b2e0a,
+ 0x3d1ecc,
+ 0x29c88d,
+ 0x3c7c86,
+ 0x3c7c87,
+ 0x3c7c8c,
+ 0x3d2b8c,
+ 0x21bc8c,
+ 0x3bd6cb,
+ 0x38b644,
+ 0x226204,
+ 0x2b6f89,
+ 0x34b147,
+ 0x37d009,
+ 0x2bfc89,
+ 0x2b8247,
+ 0x2b8406,
+ 0x2b8409,
+ 0x2b8803,
+ 0x2b314a,
+ 0x2961c7,
+ 0x3c8e0b,
+ 0x2cdb4a,
+ 0x22de04,
+ 0x32f4c6,
+ 0x280e09,
+ 0x35c004,
+ 0x2df48a,
+ 0x2e0685,
+ 0x2c7945,
+ 0x2c794d,
+ 0x2c7c8e,
+ 0x2c7805,
+ 0x335046,
+ 0x242dc7,
+ 0x22b78a,
+ 0x3a6a46,
+ 0x37bc84,
+ 0x3cdb87,
+ 0x2fab0b,
+ 0x265907,
+ 0x262944,
+ 0x3a39c6,
+ 0x3a39cd,
+ 0x2e568c,
+ 0x21a286,
+ 0x24c68a,
+ 0x34ca86,
+ 0x21e648,
+ 0x30c487,
+ 0x2d3b8a,
+ 0x23c486,
+ 0x27d903,
+ 0x2f3886,
+ 0x29d048,
+ 0x245aca,
+ 0x2dcc07,
+ 0x2dcc08,
+ 0x249ac4,
+ 0x28fc47,
+ 0x2f4348,
+ 0x291848,
+ 0x2bbdc8,
+ 0x2ffc0a,
+ 0x2ec0c5,
+ 0x2c1ac7,
+ 0x254f93,
+ 0x26b2c6,
+ 0x24aec8,
+ 0x221589,
+ 0x2428c8,
+ 0x33c58b,
+ 0x385308,
+ 0x2c02c4,
+ 0x21a706,
+ 0x320c06,
+ 0x3186c9,
+ 0x2d39c7,
+ 0x257f88,
+ 0x2a51c6,
+ 0x200bc4,
+ 0x208405,
+ 0x3a3188,
+ 0x344e4a,
+ 0x2d5cc8,
+ 0x2dad46,
+ 0x2a0f0a,
+ 0x269f88,
+ 0x2de248,
+ 0x2df708,
+ 0x2dff46,
+ 0x2e1e86,
+ 0x3a4d0c,
+ 0x2e2410,
+ 0x2cc145,
+ 0x2230c8,
+ 0x2230d0,
+ 0x3ba990,
+ 0x33584e,
+ 0x3a498e,
+ 0x3a4994,
+ 0x3a804f,
+ 0x3a8406,
+ 0x3dbe51,
+ 0x345213,
+ 0x345688,
+ 0x2035c5,
+ 0x2d0008,
+ 0x3a05c5,
+ 0x33f34c,
+ 0x229f09,
+ 0x3a6589,
+ 0x356947,
+ 0x26c649,
+ 0x39f1c7,
+ 0x334686,
+ 0x284207,
+ 0x204c05,
+ 0x20a9c3,
+ 0x210e83,
+ 0x213404,
+ 0x36adcd,
+ 0x3c304f,
+ 0x200c05,
+ 0x33f246,
+ 0x20cb87,
+ 0x399a87,
+ 0x208886,
+ 0x20888b,
+ 0x2aa785,
+ 0x259fc6,
+ 0x30be47,
+ 0x251ac9,
+ 0x229b46,
+ 0x3860c5,
+ 0x3c910b,
+ 0x3d6e86,
+ 0x21d685,
+ 0x241588,
+ 0x290b08,
+ 0x299b8c,
+ 0x299b90,
+ 0x2ac2c9,
+ 0x2c15c7,
+ 0x2b918b,
+ 0x2c8206,
+ 0x305b4a,
+ 0x36ff8b,
+ 0x31b58a,
+ 0x398806,
+ 0x2f6fc5,
+ 0x32aa86,
+ 0x279f48,
+ 0x356a0a,
+ 0x37891c,
+ 0x2fdc8c,
+ 0x2fdf88,
+ 0x2431c5,
+ 0x382747,
+ 0x24a006,
+ 0x24aac5,
+ 0x2177c6,
+ 0x208a48,
+ 0x2c6747,
+ 0x2c3588,
+ 0x26b38a,
+ 0x3b954c,
+ 0x297009,
+ 0x3b97c7,
+ 0x285244,
+ 0x245446,
+ 0x28a38a,
+ 0x2bfd85,
+ 0x22348c,
+ 0x223b48,
+ 0x26a208,
+ 0x2aebcc,
+ 0x38878c,
+ 0x22d949,
+ 0x22db87,
+ 0x25494c,
+ 0x3082c4,
+ 0x3713ca,
+ 0x30de8c,
+ 0x24fdcb,
+ 0x25044b,
+ 0x252b06,
+ 0x256447,
+ 0x22e987,
+ 0x22e98f,
+ 0x30f351,
+ 0x2e8d92,
+ 0x258c0d,
+ 0x258c0e,
+ 0x258f4e,
+ 0x3a8208,
+ 0x3a8212,
+ 0x25be08,
+ 0x221bc7,
+ 0x24ec0a,
+ 0x2ac988,
+ 0x29ab05,
+ 0x2bb28a,
+ 0x21d187,
+ 0x2ef184,
+ 0x210883,
+ 0x236085,
+ 0x2dd447,
+ 0x30d3c7,
+ 0x29ca8e,
+ 0x352e8d,
+ 0x354009,
+ 0x302905,
+ 0x361043,
+ 0x34a886,
+ 0x25a5c5,
+ 0x2ab0c8,
+ 0x224249,
+ 0x25c9c5,
+ 0x25c9cf,
+ 0x2e0b07,
+ 0x218a85,
+ 0x27024a,
+ 0x3d0b06,
+ 0x312b09,
+ 0x381b4c,
+ 0x3ce889,
+ 0x2062c6,
+ 0x30040c,
+ 0x32dd86,
+ 0x30cfc8,
+ 0x3b1ec6,
+ 0x365486,
+ 0x2bc1c4,
+ 0x31d203,
+ 0x21124a,
+ 0x227e11,
+ 0x34b94a,
+ 0x23ea05,
+ 0x25b907,
+ 0x2559c7,
+ 0x2e6f04,
+ 0x2f444b,
+ 0x33aa48,
+ 0x2c55c6,
+ 0x361785,
+ 0x261f44,
+ 0x3828c9,
+ 0x2008c4,
+ 0x20e087,
+ 0x37a385,
+ 0x37a387,
+ 0x288945,
+ 0x3801c3,
+ 0x221a88,
+ 0x2d020a,
+ 0x23db43,
+ 0x399c8a,
+ 0x2a74c6,
+ 0x25c74f,
+ 0x2b7609,
+ 0x2e7090,
+ 0x305748,
+ 0x2db3c9,
+ 0x29df47,
+ 0x3a394f,
+ 0x3905c4,
+ 0x2e3584,
+ 0x203946,
+ 0x2344c6,
+ 0x2ef40a,
+ 0x254686,
+ 0x2b5e07,
+ 0x315048,
+ 0x315247,
+ 0x3166c7,
+ 0x31784a,
+ 0x316fcb,
+ 0x33bf85,
+ 0x2e89c8,
+ 0x201343,
+ 0x3bb3cc,
+ 0x3965cf,
+ 0x234f8d,
+ 0x258787,
+ 0x354149,
+ 0x357087,
+ 0x2401c8,
+ 0x3ab3cc,
+ 0x2c01c8,
+ 0x23e708,
+ 0x32c9ce,
+ 0x341b94,
+ 0x3420a4,
+ 0x36080a,
+ 0x37b90b,
+ 0x39f284,
+ 0x39f289,
+ 0x331e88,
+ 0x245d85,
+ 0x29688a,
+ 0x291087,
+ 0x2135c4,
+ 0x202703,
+ 0x214a83,
+ 0x235b44,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x21bc83,
+ 0x23c803,
+ 0x2e2406,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x2141c3,
+ 0x2000c2,
+ 0x202703,
+ 0x201242,
+ 0x214a83,
+ 0x235b44,
+ 0x232dc3,
+ 0x308003,
+ 0x21bc83,
+ 0x2e2406,
+ 0x21a3c3,
+ 0x242543,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x228503,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x2000c2,
+ 0x27ee03,
+ 0x201242,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x2086c2,
+ 0x215702,
+ 0x201242,
+ 0x214a83,
+ 0x208c02,
+ 0x2005c2,
+ 0x221dc4,
+ 0x306c44,
+ 0x223f82,
+ 0x219a04,
+ 0x2003c2,
+ 0x242543,
+ 0x2141c3,
+ 0x252b06,
+ 0x20c782,
+ 0x201b82,
+ 0x2221c2,
+ 0x57a07403,
+ 0x57e2e743,
+ 0x56246,
+ 0x56246,
+ 0x2d3684,
+ 0x203dc3,
+ 0x160d,
+ 0x1d984a,
+ 0x16300c,
+ 0x1d76cc,
+ 0xd4ecd,
+ 0x139b05,
+ 0x86209,
+ 0x8d2cc,
+ 0x29907,
+ 0xdb86,
+ 0x13dc8,
+ 0x1bf87,
+ 0x201c8,
+ 0x1ac0ca,
+ 0x10d707,
+ 0x58a8d505,
+ 0xe4f09,
+ 0x58c3480b,
+ 0x125c08,
+ 0x1558b,
+ 0x12c5c8,
+ 0x1c48c9,
+ 0x4060a,
+ 0x1b1b8e,
+ 0x1d158d,
+ 0x2cd0d,
+ 0x14426cb,
+ 0xe554a,
+ 0x8d04,
+ 0x5a106,
+ 0x19b808,
+ 0x79108,
+ 0x25687,
+ 0x1d35c5,
+ 0xc607,
+ 0x33249,
+ 0x15c087,
+ 0x106c8,
+ 0x26a89,
+ 0x4ce04,
+ 0x4e945,
+ 0x98e8e,
+ 0x12c207,
+ 0x59225a86,
+ 0x78d8d,
+ 0xd1288,
+ 0x59694f86,
+ 0x5a094f88,
+ 0x56f88,
+ 0x136b90,
+ 0x53f8c,
+ 0x61b47,
+ 0x62347,
+ 0x6a947,
+ 0x72047,
+ 0x6882,
+ 0x120687,
+ 0x19980c,
+ 0x13c945,
+ 0x107c07,
+ 0xac186,
+ 0xacdc9,
+ 0xaff88,
+ 0x6502,
+ 0x5c2,
+ 0x18d986,
+ 0x1b9ecb,
+ 0x1ba1c6,
+ 0x174d04,
+ 0x978c7,
+ 0x41a89,
+ 0xf0c09,
+ 0x1b1148,
+ 0x49582,
+ 0x193a49,
+ 0xd788,
+ 0xef24a,
+ 0x15adc9,
+ 0x1b4186,
+ 0xd8949,
+ 0xe54c7,
+ 0xe5c09,
+ 0xe7ac8,
+ 0xea3c7,
+ 0xec049,
+ 0xf0005,
+ 0xf1210,
+ 0x1b6786,
+ 0x97805,
+ 0x91487,
+ 0xec74d,
+ 0x41485,
+ 0xf8ac6,
+ 0xf92c7,
+ 0xfe7d8,
+ 0xd1608,
+ 0x13db8a,
+ 0xca42,
+ 0x5020a,
+ 0x60e4d,
+ 0x45c2,
+ 0xce946,
+ 0x11ec6,
+ 0xa1788,
+ 0xafd0a,
+ 0x472c8,
+ 0x6de89,
+ 0x115488,
+ 0x6eace,
+ 0x6e0c8,
+ 0x14a887,
+ 0x5a694ec4,
+ 0xae8cd,
+ 0x10a085,
+ 0x69148,
+ 0x34088,
+ 0x111b86,
+ 0xc2c2,
+ 0xc53c4,
+ 0xe2c06,
+ 0x365c6,
+ 0x5a8ef74b,
+ 0x1442,
0x401,
0x81,
- 0x5a947,
- 0x8d9c3,
- 0x576f67c4,
- 0x57a973c3,
+ 0xb8f08,
+ 0x5bc87,
+ 0x150503,
+ 0x59a37f04,
+ 0x59e9b383,
0xc1,
- 0x1a286,
+ 0xf586,
0xc1,
0x201,
- 0x1a286,
- 0x8d9c3,
- 0x422c3,
- 0x46e44,
- 0x14947,
- 0x5b07,
- 0x153e145,
- 0x4cec4,
- 0x61107,
- 0xc302,
- 0x249f84,
- 0x22c0c3,
- 0x24b304,
- 0x224e44,
- 0x20a803,
- 0x2244c5,
- 0x216e03,
- 0x236bc3,
- 0x204185,
- 0x205b03,
- 0xdd43,
- 0x5962c0c3,
- 0x232c43,
- 0x4b304,
- 0x20c3,
- 0x228b03,
+ 0xf586,
+ 0x150503,
+ 0x66603,
+ 0x647c4,
+ 0x1e7c7,
+ 0x7787,
+ 0x15c27c5,
+ 0x4e684,
+ 0x13d707,
+ 0x1242,
+ 0x24c0c4,
+ 0x214a83,
+ 0x24d9c4,
+ 0x221dc4,
+ 0x21a3c3,
+ 0x221445,
+ 0x214903,
+ 0x22b983,
+ 0x208805,
+ 0x207783,
+ 0x1243,
+ 0x5ba14a83,
+ 0x232dc3,
+ 0x4d9c4,
+ 0x7083,
+ 0x308003,
0x200181,
- 0xe403,
- 0x211543,
- 0x303f84,
- 0x217b84,
- 0x20a803,
- 0x4bbc3,
- 0x216603,
- 0x20c603,
- 0x9fe08,
+ 0x1a8c3,
+ 0x23c803,
+ 0x306c44,
+ 0x219a04,
+ 0x21a3c3,
+ 0x4e283,
+ 0x242543,
+ 0x20e2c3,
+ 0x9a048,
0x2000c2,
- 0x248343,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x212483,
+ 0x202703,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x228503,
0x2005c2,
- 0x224e44,
- 0x214543,
- 0x211543,
- 0x20a803,
- 0x20ca43,
- 0x216603,
- 0x205b03,
- 0x17c204,
- 0x9fe08,
- 0x103c87,
- 0xc302,
- 0x1a0dc5,
- 0x5120f,
- 0xd23c6,
- 0x14470c8,
- 0x11240e,
- 0x5a631802,
- 0x32ce48,
- 0x28c4c6,
- 0x24d046,
- 0x30e787,
- 0x5aa00c82,
- 0x5afd1e88,
- 0x21068a,
- 0x260a48,
+ 0x221dc4,
+ 0x21bc83,
+ 0x23c803,
+ 0x21a3c3,
+ 0x203dc3,
+ 0x242543,
+ 0x207783,
+ 0x196504,
+ 0x9a048,
+ 0x106947,
+ 0x1242,
+ 0x1a3105,
+ 0x540cf,
+ 0xe0986,
+ 0x144ca88,
+ 0x1160ce,
+ 0x5ca345c2,
+ 0x297ac8,
+ 0x35c5c6,
+ 0x24e806,
+ 0x395e87,
+ 0x5ce00c82,
+ 0x5d2b7488,
+ 0x20bd4a,
+ 0x2615c8,
0x200ac2,
- 0x3c0409,
- 0x251a87,
- 0x213e86,
- 0x224849,
- 0x2db544,
- 0x3c0306,
- 0x2c7144,
- 0x203584,
- 0x2560c9,
- 0x30f546,
- 0x229cc5,
- 0x264f45,
- 0x22cac7,
- 0x2c3887,
- 0x2f53c4,
- 0x35c0c6,
- 0x2f9145,
- 0x20e805,
- 0x246745,
- 0x2c4f47,
- 0x26fb45,
- 0x247749,
- 0x329945,
- 0x31b604,
- 0x256907,
- 0x33ed4e,
- 0x343689,
- 0x28e2c9,
- 0x33de06,
- 0x23ce88,
- 0x3c208b,
- 0x36828c,
- 0x324046,
- 0x2ffe07,
- 0x2b34c5,
- 0x21730a,
- 0x28c109,
- 0x2013c9,
- 0x3d9f06,
- 0x305d45,
- 0x242885,
- 0x355449,
- 0x2468cb,
- 0x2772c6,
- 0x354546,
- 0x204b44,
- 0x239b06,
- 0x2fbbc8,
- 0x3bc0c6,
- 0x2eb006,
- 0x3cf9c8,
- 0x3d6e47,
- 0x3d9cc9,
- 0x3de005,
- 0x9fe08,
- 0x3cc184,
- 0x312f84,
- 0x208345,
- 0x346b09,
- 0x222c07,
- 0x222c0b,
- 0x225a4a,
- 0x2290c5,
- 0x5b20b382,
- 0x20ebc7,
- 0x5b6293c8,
- 0x328887,
- 0x2dd185,
- 0x347e8a,
- 0xc302,
- 0x2795cb,
- 0x27deca,
- 0x247bc6,
- 0x2081c3,
- 0x291f0d,
- 0x3c084c,
- 0x3c1acd,
- 0x2304c5,
- 0x27cb85,
- 0x3748c7,
- 0x207909,
- 0x210586,
- 0x252e05,
- 0x2ec888,
- 0x239a03,
- 0x2e2ec8,
- 0x239a08,
- 0x2c8907,
- 0x369588,
- 0x3afa49,
- 0x2fb787,
- 0x20f1c7,
- 0x33dfc8,
- 0x29b484,
- 0x29b487,
- 0x314748,
- 0x360586,
- 0x3c3e4f,
- 0x22a5c7,
- 0x35bbc6,
- 0x388005,
- 0x2253c3,
- 0x243c47,
- 0x3874c3,
- 0x24a686,
- 0x24cdc6,
- 0x24db06,
- 0x294d45,
- 0x264203,
- 0x391c08,
- 0x38a8c9,
- 0x39a24b,
- 0x24dc88,
- 0x24ec05,
- 0x24fe45,
- 0x5bab12c2,
- 0x285709,
- 0x224ec7,
- 0x258bc5,
- 0x255fc7,
- 0x257a86,
- 0x3804c5,
- 0x258f8b,
- 0x25ad04,
- 0x260605,
- 0x260747,
- 0x276c46,
- 0x277085,
- 0x2851c7,
- 0x285cc7,
- 0x2d0d84,
- 0x28b30a,
- 0x28cd48,
- 0x3c2349,
- 0x394785,
- 0x32f406,
- 0x2fbd8a,
- 0x264e46,
- 0x231047,
- 0x26c88d,
- 0x2a65c9,
- 0x390885,
- 0x36ac47,
- 0x252788,
- 0x2f7288,
- 0x3a8d07,
- 0x3affc6,
- 0x2230c7,
- 0x24b503,
- 0x30f4c4,
- 0x37dc05,
- 0x3a5447,
- 0x3ab0c9,
- 0x26b7c8,
- 0x230f45,
- 0x2530c4,
- 0x24de45,
- 0x25ca8d,
+ 0x3c8c49,
+ 0x33bfc7,
+ 0x212686,
+ 0x2217c9,
+ 0x2c1c04,
+ 0x3c8b46,
+ 0x2cc7c4,
+ 0x20e904,
+ 0x257889,
+ 0x30dbc6,
+ 0x265445,
+ 0x266245,
+ 0x22d547,
+ 0x2dbd87,
+ 0x34c8c4,
+ 0x31e606,
+ 0x2ff485,
+ 0x210845,
+ 0x23eac5,
+ 0x3bd9c7,
+ 0x26f6c5,
+ 0x248489,
+ 0x343fc5,
+ 0x31b484,
+ 0x3a6987,
+ 0x36344e,
+ 0x2031c9,
+ 0x2885c9,
+ 0x348706,
+ 0x23f9c8,
+ 0x36f2cb,
+ 0x2a5a0c,
+ 0x322686,
+ 0x2ba447,
+ 0x2eee85,
+ 0x3270ca,
+ 0x3d9bc9,
+ 0x345c89,
+ 0x295146,
+ 0x30bc05,
+ 0x245705,
+ 0x36a209,
+ 0x23ec4b,
+ 0x2c2246,
+ 0x352686,
+ 0x2067c4,
+ 0x2ecd46,
+ 0x304448,
+ 0x3c1e46,
+ 0x2e3e06,
+ 0x3dd908,
+ 0x2019c7,
+ 0x201d49,
+ 0x205a85,
+ 0x9a048,
+ 0x3cd4c4,
+ 0x316c44,
+ 0x20b105,
+ 0x3403c9,
+ 0x220747,
+ 0x22074b,
+ 0x22284a,
+ 0x228585,
+ 0x5d60c282,
+ 0x2cda07,
+ 0x5da29cc8,
+ 0x295387,
+ 0x301345,
+ 0x348aca,
+ 0x1242,
+ 0x27c58b,
+ 0x27d98a,
+ 0x248906,
+ 0x20a803,
+ 0x206c8d,
+ 0x3c4c4c,
+ 0x3c534d,
+ 0x230585,
+ 0x27bbc5,
+ 0x296dc7,
+ 0x3d1149,
+ 0x20bc46,
+ 0x254505,
+ 0x37b708,
+ 0x2ce983,
+ 0x2e3948,
+ 0x2ecc48,
+ 0x383fc7,
+ 0x3b8a88,
+ 0x3c0809,
+ 0x2fd2c7,
+ 0x2cd207,
+ 0x3de588,
+ 0x23ae04,
+ 0x23ae07,
+ 0x3a6bc8,
+ 0x360f06,
+ 0x3c0ecf,
+ 0x22a907,
+ 0x31e106,
+ 0x22dcc5,
+ 0x222343,
+ 0x246287,
+ 0x387fc3,
+ 0x24d046,
+ 0x24e586,
+ 0x24f0c6,
+ 0x293d45,
+ 0x265c03,
+ 0x3936c8,
+ 0x38a109,
+ 0x39bf8b,
+ 0x24f248,
+ 0x250a85,
+ 0x252305,
+ 0x5de2dec2,
+ 0x2842c9,
+ 0x221e47,
+ 0x25a045,
+ 0x257787,
+ 0x258ac6,
+ 0x381745,
+ 0x25a40b,
+ 0x25c004,
+ 0x261185,
+ 0x2612c7,
+ 0x276806,
+ 0x276c45,
+ 0x283d87,
+ 0x2847c7,
+ 0x2a7484,
+ 0x28d0ca,
+ 0x28dbc8,
+ 0x2ccc09,
+ 0x23f285,
+ 0x205886,
+ 0x30460a,
+ 0x266146,
+ 0x2ed087,
+ 0x26d30d,
+ 0x2aa2c9,
+ 0x391c45,
+ 0x363847,
+ 0x289708,
+ 0x303588,
+ 0x3286c7,
+ 0x384d06,
+ 0x21abc7,
+ 0x24dbc3,
+ 0x30db44,
+ 0x37d485,
+ 0x3a7747,
+ 0x3b0d49,
+ 0x229588,
+ 0x2ecf85,
+ 0x2425c4,
+ 0x247ec5,
+ 0x24f40d,
0x200cc2,
- 0x2b6606,
- 0x2d7a86,
- 0x301bca,
- 0x3915c6,
- 0x398245,
- 0x2c7605,
- 0x2c7607,
- 0x3a340c,
- 0x27420a,
- 0x290206,
- 0x21fb05,
- 0x239946,
- 0x290387,
- 0x292d06,
- 0x294c4c,
- 0x224989,
- 0x5be1a707,
- 0x296a05,
- 0x296a06,
- 0x296e48,
- 0x245785,
- 0x2a6d05,
- 0x2a7f48,
- 0x2a814a,
- 0x5c21efc2,
- 0x5c606a02,
- 0x3ac085,
- 0x266803,
- 0x23dc88,
- 0x245f43,
- 0x2a83c4,
- 0x245f4b,
- 0x368688,
+ 0x2bca46,
+ 0x2eaf06,
+ 0x308cca,
+ 0x39a786,
+ 0x3a3345,
+ 0x26d6c5,
+ 0x26d6c7,
+ 0x3a5fcc,
+ 0x256e0a,
+ 0x28f246,
+ 0x2e1d85,
+ 0x2ecb86,
+ 0x28f507,
+ 0x291246,
+ 0x293c4c,
+ 0x221909,
+ 0x5e20fa07,
+ 0x29a9c5,
+ 0x29a9c6,
+ 0x29ae08,
+ 0x2c4005,
+ 0x2aab45,
+ 0x2ab848,
+ 0x2aba4a,
+ 0x5e67b8c2,
+ 0x5ea09e42,
+ 0x355fc5,
+ 0x237643,
+ 0x326008,
+ 0x228703,
+ 0x2abcc4,
+ 0x312c4b,
+ 0x36f688,
+ 0x2b9648,
+ 0x5ef03cc9,
+ 0x2b1009,
+ 0x2b19c6,
0x2b2788,
- 0x5cae7489,
- 0x2ad149,
- 0x2adb06,
- 0x2ae7c8,
- 0x2ae9c9,
- 0x2af346,
- 0x2af4c5,
- 0x244246,
- 0x2afa09,
- 0x2bf9c7,
- 0x3ddac6,
- 0x2dd507,
- 0x2e77c7,
- 0x208804,
- 0x5ce11b49,
- 0x3b9748,
- 0x3d1d88,
- 0x267747,
- 0x2cb246,
- 0x3c6b89,
- 0x24d007,
- 0x3b8fca,
- 0x32f548,
- 0x3bd087,
- 0x3c1086,
- 0x27d88a,
- 0x241b88,
- 0x2d7505,
- 0x228345,
- 0x3359c7,
- 0x316049,
- 0x31828b,
- 0x354048,
- 0x3299c9,
- 0x24e087,
- 0x2bae4c,
- 0x2bb8cc,
- 0x2bbbca,
- 0x2bbe4c,
- 0x2c6cc8,
- 0x2c6ec8,
- 0x2c70c4,
- 0x2c8089,
- 0x2c82c9,
- 0x2c850a,
- 0x2c8789,
- 0x2c8ac7,
- 0x3b4f4c,
- 0x3c62c6,
- 0x26c248,
- 0x264f06,
- 0x38ebc6,
- 0x390787,
- 0x39f348,
- 0x32a68b,
- 0x3da007,
- 0x255d89,
- 0x25a709,
- 0x285907,
- 0x2c7384,
+ 0x2b2989,
+ 0x2b3806,
+ 0x2b3985,
+ 0x246c06,
+ 0x2b4749,
+ 0x2c8947,
+ 0x38e386,
+ 0x20af47,
+ 0x345fc7,
+ 0x207584,
+ 0x5f2d1909,
+ 0x24ad08,
+ 0x2b7388,
+ 0x2257c7,
+ 0x2d5946,
+ 0x3d0f49,
+ 0x24e7c7,
+ 0x24a58a,
+ 0x32ed08,
+ 0x3bb707,
+ 0x3d0606,
+ 0x2f0e0a,
+ 0x23df48,
+ 0x2ea985,
+ 0x227b85,
+ 0x3cbc87,
+ 0x3190c9,
+ 0x31cf0b,
+ 0x351f08,
+ 0x344049,
+ 0x24fb47,
+ 0x2c2bcc,
+ 0x2c3bcc,
+ 0x2c3eca,
+ 0x2c414c,
+ 0x2cc348,
+ 0x2cc548,
+ 0x2cc744,
+ 0x2ce109,
+ 0x2ce349,
+ 0x2ce58a,
+ 0x2ce809,
+ 0x2ceb87,
+ 0x3bec0c,
+ 0x3d2406,
+ 0x26ccc8,
+ 0x266206,
+ 0x38fe86,
+ 0x391b47,
+ 0x3a1088,
+ 0x3debcb,
+ 0x295247,
+ 0x257549,
+ 0x25ba49,
+ 0x2844c7,
+ 0x2cca04,
0x200fc7,
- 0x2cfec6,
- 0x20c7c6,
- 0x215705,
- 0x2ce588,
- 0x340544,
- 0x340546,
- 0x2740cb,
- 0x2c6909,
- 0x31fc86,
- 0x2eb209,
- 0x208406,
- 0x201f88,
- 0x20e503,
- 0x305ec5,
- 0x21b649,
- 0x21bec5,
- 0x380d84,
- 0x2755c6,
- 0x2354c5,
- 0x207f06,
- 0x316887,
- 0x34b4c6,
- 0x22ab4b,
- 0x28efc7,
- 0x243946,
- 0x272506,
- 0x22cb86,
- 0x2f5389,
- 0x2b884a,
- 0x2f9d45,
- 0x22850d,
- 0x2a8246,
- 0x23aec6,
- 0x2e1546,
- 0x214745,
- 0x2e9547,
- 0x26b107,
- 0x272c8e,
- 0x211543,
- 0x2cb209,
- 0x374d89,
- 0x22c807,
- 0x269887,
- 0x292905,
- 0x36b7c5,
- 0x5d34464f,
- 0x2d18c7,
- 0x2d1a88,
- 0x2d1fc4,
- 0x2d2286,
- 0x5d642582,
- 0x2d6d46,
- 0x2d9bc6,
- 0x374f4e,
- 0x2e2d0a,
- 0x3d2606,
- 0x219b8a,
- 0x3c18c9,
- 0x23bd85,
- 0x307b08,
- 0x335886,
- 0x2b1388,
- 0x3dbd48,
- 0x27b58b,
- 0x30e885,
- 0x26fbc8,
- 0x3cfb0c,
- 0x2dd047,
- 0x24d386,
- 0x3dd0c8,
- 0x32a348,
- 0x5da39242,
- 0x208ccb,
- 0x3de209,
- 0x28bbc9,
- 0x21b4c7,
- 0x3ba588,
- 0x5de07748,
- 0x20df8b,
- 0x343149,
- 0x259e4d,
- 0x31d7c8,
- 0x27da88,
- 0x5e201e02,
- 0x3c75c4,
- 0x5e62d7c2,
- 0x3aba86,
- 0x5ea06302,
- 0x2f258a,
- 0x2a6b86,
- 0x26a908,
- 0x3be5c8,
- 0x3c0206,
- 0x300306,
- 0x2fc946,
- 0x2a7205,
- 0x237dc4,
- 0x5efd3204,
- 0x359686,
- 0x2978c7,
- 0x5f20bc07,
- 0x389b0b,
- 0x328a89,
- 0x27cbca,
- 0x220504,
- 0x2c7748,
- 0x3dd88d,
- 0x2f3a89,
- 0x2f3cc8,
- 0x2f3f49,
- 0x2f61c4,
- 0x23d504,
- 0x39ba85,
- 0x275f4b,
- 0x368606,
- 0x3594c5,
- 0x3cb449,
- 0x35c188,
- 0x2a4984,
- 0x217489,
- 0x306845,
- 0x2c38c8,
- 0x20f887,
- 0x28e6c8,
- 0x282546,
- 0x3a8a07,
- 0x2deac9,
- 0x3ba8c9,
- 0x213845,
- 0x322ac5,
- 0x5f61df02,
- 0x31b3c4,
- 0x230705,
- 0x30e686,
- 0x33cf45,
- 0x2b7d87,
- 0x2f2ec5,
- 0x276c84,
- 0x33dec6,
- 0x252e87,
- 0x251f86,
- 0x3ac605,
- 0x2098c8,
- 0x28c6c5,
- 0x20e387,
- 0x21d889,
- 0x2c6a4a,
- 0x227cc7,
- 0x227ccc,
- 0x229c86,
- 0x241d49,
- 0x38c685,
- 0x2456c8,
- 0x202e43,
- 0x2edb05,
- 0x3a94c5,
- 0x27c1c7,
- 0x5fa01482,
- 0x2ee787,
- 0x2e8746,
- 0x37fcc6,
- 0x2ecbc6,
- 0x32a286,
- 0x239188,
- 0x27abc5,
- 0x35bc87,
- 0x35bc8d,
- 0x201783,
- 0x3c6785,
- 0x270487,
- 0x2eeac8,
- 0x270045,
- 0x216348,
- 0x37d686,
- 0x2dc387,
- 0x2c9c05,
- 0x30e906,
- 0x392185,
- 0x21034a,
- 0x303406,
- 0x26ef47,
- 0x2c2fc5,
- 0x308407,
- 0x30ed04,
- 0x380d06,
- 0x307a45,
- 0x397c4b,
- 0x2cfd49,
- 0x25888a,
- 0x2138c8,
- 0x38d108,
- 0x30bd0c,
- 0x30c747,
- 0x30fac8,
- 0x316608,
- 0x3186c5,
- 0x3562ca,
- 0x358249,
- 0x5fe03a42,
- 0x206146,
- 0x25c1c4,
- 0x2f0e09,
- 0x25b589,
- 0x2712c7,
- 0x31d0c7,
- 0x367309,
- 0x2b8288,
- 0x2b828f,
- 0x223ac6,
- 0x2dbe8b,
- 0x259485,
- 0x259487,
- 0x36c889,
- 0x210086,
- 0x217407,
- 0x2dfe05,
- 0x2303c4,
- 0x35b606,
- 0x222dc4,
- 0x2f1347,
- 0x321988,
- 0x60305c48,
- 0x306cc5,
- 0x306e07,
- 0x324a09,
- 0x208a84,
- 0x23eb48,
- 0x607c2e88,
- 0x2d3384,
- 0x2ebdc8,
- 0x369b44,
- 0x34b6c9,
- 0x214685,
- 0x60a19f82,
- 0x223b05,
- 0x2e8045,
- 0x36aa88,
- 0x233887,
- 0x60e008c2,
- 0x3d3345,
- 0x2d4706,
- 0x23e306,
- 0x31b388,
- 0x3192c8,
- 0x33cf06,
- 0x34aa46,
- 0x303d49,
- 0x37fc06,
- 0x20ff4b,
- 0x32a105,
- 0x2a9506,
- 0x2f8548,
- 0x34df46,
- 0x313ec6,
- 0x216a4a,
- 0x2d64ca,
- 0x24fb45,
- 0x307487,
- 0x2fb286,
- 0x61217042,
- 0x2705c7,
- 0x2ff1c5,
- 0x2fbd04,
- 0x2fbd05,
- 0x220406,
- 0x272087,
- 0x21c385,
- 0x25b644,
- 0x2e0cc8,
- 0x313f85,
- 0x3c8647,
- 0x3d43c5,
- 0x210285,
- 0x2c4e84,
- 0x2e3cc9,
- 0x2f8f88,
- 0x238546,
- 0x2e9c46,
- 0x27d5c6,
- 0x6170c3c8,
- 0x30c5c7,
- 0x30c90d,
- 0x30cecc,
- 0x30d4c9,
- 0x30d709,
- 0x61b75ac2,
- 0x3d1b43,
+ 0x2f0806,
+ 0x20e486,
+ 0x24c845,
+ 0x2f7d48,
+ 0x26c544,
+ 0x26c546,
+ 0x256ccb,
+ 0x2b3449,
+ 0x235686,
+ 0x2e4009,
+ 0x20b1c6,
+ 0x345048,
+ 0x210543,
+ 0x30bd85,
+ 0x21a9c9,
+ 0x21c7c5,
+ 0x30e1c4,
+ 0x275d46,
+ 0x235a05,
+ 0x254306,
+ 0x319a07,
+ 0x247946,
+ 0x22c2cb,
+ 0x3c5987,
+ 0x3a28c6,
+ 0x2730c6,
+ 0x22d606,
+ 0x34c889,
+ 0x3b604a,
+ 0x2c58c5,
+ 0x3d6f8d,
+ 0x2abb46,
+ 0x23c346,
+ 0x2e6f86,
+ 0x21e5c5,
+ 0x2f1507,
+ 0x228ec7,
+ 0x27390e,
+ 0x23c803,
+ 0x2d5909,
+ 0x297289,
+ 0x22d287,
+ 0x26bbc7,
+ 0x2919c5,
+ 0x367b05,
+ 0x5f60210f,
+ 0x2db607,
+ 0x2db7c8,
+ 0x2dbb84,
+ 0x2dc046,
+ 0x5fa45402,
+ 0x2e01c6,
+ 0x2e2406,
+ 0x29744e,
+ 0x2e378a,
+ 0x207106,
+ 0x2b7c0a,
+ 0x3c7709,
+ 0x2fbe85,
+ 0x2ee188,
+ 0x3cbb46,
+ 0x2b7188,
+ 0x202ac8,
+ 0x277fcb,
+ 0x395f85,
+ 0x26f748,
+ 0x3dda4c,
+ 0x301207,
+ 0x24eb46,
+ 0x30c2c8,
+ 0x3de888,
+ 0x5fe30a42,
+ 0x21504b,
+ 0x205c89,
+ 0x28d989,
+ 0x21c647,
+ 0x3b5dc8,
+ 0x603d32c8,
+ 0x20934b,
+ 0x349bc9,
+ 0x25b18d,
+ 0x202908,
+ 0x2f1008,
+ 0x60604042,
+ 0x20d5c4,
+ 0x60a2aec2,
+ 0x3cd9c6,
+ 0x60e01282,
+ 0x2fbc8a,
+ 0x2a3806,
+ 0x34bd48,
+ 0x3c6908,
+ 0x3d9746,
+ 0x2ba946,
+ 0x3054c6,
+ 0x2ab045,
+ 0x239e44,
+ 0x6122ae04,
+ 0x359946,
+ 0x276247,
+ 0x6160d8c7,
+ 0x278b4b,
+ 0x295589,
+ 0x27bc0a,
+ 0x26d804,
+ 0x2f3b08,
+ 0x38e14d,
+ 0x2fc409,
+ 0x2fc648,
+ 0x2fc8c9,
+ 0x2fe7c4,
+ 0x2aae04,
+ 0x38d205,
+ 0x346f0b,
+ 0x36f606,
+ 0x359785,
+ 0x236209,
+ 0x31e6c8,
+ 0x22af84,
+ 0x327249,
+ 0x24a345,
+ 0x2dbdc8,
+ 0x2cd8c7,
+ 0x2889c8,
+ 0x281006,
+ 0x3ba447,
+ 0x2e6b09,
+ 0x3c9289,
+ 0x21d705,
+ 0x3682c5,
+ 0x61a1e342,
+ 0x31b244,
+ 0x21fe85,
+ 0x395d86,
+ 0x346905,
+ 0x244b07,
+ 0x359a45,
+ 0x276844,
+ 0x3487c6,
+ 0x254587,
+ 0x238f46,
+ 0x30a945,
+ 0x217108,
+ 0x35c7c5,
+ 0x21a847,
+ 0x2277c9,
+ 0x2b358a,
+ 0x264cc7,
+ 0x264ccc,
+ 0x265406,
+ 0x2423c9,
+ 0x31f045,
+ 0x369188,
+ 0x211ec3,
+ 0x398c45,
+ 0x3b9285,
+ 0x27b207,
+ 0x61e08dc2,
+ 0x2f8087,
+ 0x2eea86,
+ 0x38dc46,
+ 0x2f6146,
+ 0x3de7c6,
+ 0x230988,
+ 0x2d0145,
+ 0x31e1c7,
+ 0x31e1cd,
+ 0x210883,
+ 0x3d28c5,
+ 0x270007,
+ 0x2f83c8,
+ 0x26fbc5,
+ 0x214408,
+ 0x37cf06,
+ 0x2e50c7,
+ 0x2d4605,
+ 0x396006,
+ 0x393c45,
+ 0x20ba0a,
+ 0x310586,
+ 0x2645c7,
+ 0x2c9485,
+ 0x3a8a87,
+ 0x3cdb04,
+ 0x30e146,
+ 0x3cba85,
+ 0x39a18b,
+ 0x2f0689,
+ 0x27ef0a,
+ 0x21d788,
+ 0x314248,
+ 0x31968c,
+ 0x31adc7,
+ 0x330a08,
+ 0x335d88,
+ 0x3382c5,
+ 0x358dca,
+ 0x361049,
+ 0x62203242,
+ 0x2945c6,
+ 0x25c9c4,
+ 0x2fa949,
+ 0x35d749,
+ 0x2451c7,
+ 0x29b947,
+ 0x2bfb09,
+ 0x2ffe08,
+ 0x2ffe0f,
+ 0x21b5c6,
+ 0x2e4bcb,
+ 0x259dc5,
+ 0x259dc7,
+ 0x37bd49,
+ 0x20c8c6,
+ 0x3271c7,
+ 0x2e9105,
+ 0x230484,
+ 0x2f5006,
+ 0x220904,
+ 0x2f9c47,
+ 0x321c88,
+ 0x6270bb08,
+ 0x30c645,
+ 0x30c787,
+ 0x324389,
+ 0x20d184,
+ 0x241048,
+ 0x62bd0448,
+ 0x2e6f04,
+ 0x31d648,
+ 0x295a04,
+ 0x3b6349,
+ 0x21e505,
+ 0x62e33442,
+ 0x21b605,
+ 0x2dd945,
+ 0x289548,
+ 0x233a07,
+ 0x632008c2,
+ 0x22af45,
+ 0x2de0c6,
+ 0x243906,
+ 0x31b208,
+ 0x338fc8,
+ 0x3468c6,
+ 0x34afc6,
+ 0x306a09,
+ 0x38db86,
+ 0x20c78b,
+ 0x3c2705,
+ 0x2ac8c6,
+ 0x3c4a88,
+ 0x33f6c6,
+ 0x224786,
+ 0x216bca,
+ 0x2df94a,
+ 0x248a45,
+ 0x30ce07,
+ 0x274586,
+ 0x63603642,
+ 0x270147,
+ 0x33c305,
+ 0x304584,
+ 0x304585,
+ 0x2f3a06,
+ 0x272c47,
+ 0x203945,
+ 0x2dfac4,
+ 0x352248,
+ 0x224845,
+ 0x37ae87,
+ 0x3ca445,
+ 0x20b945,
+ 0x2d2904,
+ 0x2d2909,
+ 0x2ff2c8,
+ 0x23a5c6,
+ 0x35aa06,
+ 0x302d06,
+ 0x63bd5b08,
+ 0x311d07,
+ 0x31234d,
+ 0x312f0c,
+ 0x313509,
+ 0x313749,
+ 0x63f75442,
+ 0x3d4a03,
0x2010c3,
- 0x2cff85,
- 0x3a554a,
- 0x33cdc6,
- 0x23fd45,
- 0x317944,
- 0x31794b,
- 0x33280c,
- 0x33310c,
- 0x333415,
- 0x3342cd,
- 0x336e4f,
- 0x337212,
- 0x33768f,
- 0x337a52,
- 0x337ed3,
- 0x33838d,
- 0x33894d,
- 0x338cce,
- 0x33924e,
- 0x33994c,
- 0x339d0c,
- 0x33a14b,
- 0x33abce,
- 0x33b4d2,
- 0x33cb8c,
- 0x33d2d0,
- 0x34fdd2,
- 0x350c0c,
- 0x3512cd,
- 0x35160c,
- 0x3536d1,
+ 0x2f08c5,
+ 0x3a784a,
+ 0x338e86,
+ 0x23cec5,
+ 0x31a504,
+ 0x31a50b,
+ 0x32d64c,
+ 0x32df0c,
+ 0x32e215,
+ 0x32f70d,
+ 0x33208f,
+ 0x332452,
+ 0x3328cf,
+ 0x332c92,
+ 0x333113,
+ 0x3335cd,
+ 0x333b8d,
+ 0x333f0e,
+ 0x33480e,
+ 0x334e0c,
+ 0x3351cc,
+ 0x33560b,
+ 0x33668e,
+ 0x336f92,
+ 0x338c4c,
+ 0x3391d0,
+ 0x34cfd2,
+ 0x34e08c,
+ 0x34e74d,
+ 0x34ea8c,
+ 0x351591,
+ 0x35280d,
0x3546cd,
- 0x356f0d,
- 0x35750a,
- 0x35778c,
- 0x358c4c,
- 0x3591cc,
- 0x359d4c,
- 0x35d4d3,
- 0x35db50,
- 0x35df50,
- 0x35e8cd,
- 0x35eecc,
- 0x35fc49,
- 0x3618cd,
- 0x361c13,
- 0x363251,
- 0x363a53,
- 0x36474f,
- 0x364b0c,
- 0x364e0f,
- 0x3651cd,
- 0x3657cf,
- 0x365b90,
- 0x36660e,
- 0x36b18e,
- 0x36cad0,
- 0x36da4d,
- 0x36e3ce,
- 0x36e74c,
- 0x36fa13,
- 0x37180e,
- 0x371e90,
- 0x372291,
- 0x3726cf,
- 0x372a93,
- 0x37564d,
- 0x37598f,
- 0x375d4e,
- 0x3762d0,
- 0x3766c9,
- 0x378490,
- 0x378a8f,
- 0x37910f,
- 0x3794d2,
- 0x379c8e,
- 0x37a68d,
- 0x37b00d,
- 0x37b34d,
- 0x37c70d,
- 0x37ca4d,
- 0x37cd90,
- 0x37d18b,
- 0x37d9cc,
- 0x37dd4c,
- 0x37e34c,
- 0x37e64e,
- 0x38c7d0,
- 0x38e512,
- 0x38e98b,
- 0x38f4ce,
- 0x38f84e,
- 0x3900ce,
- 0x39054b,
- 0x61f909d6,
- 0x3912cd,
- 0x391754,
- 0x39244d,
- 0x393ad5,
- 0x39578d,
- 0x39610f,
- 0x3968cf,
- 0x39a50f,
- 0x39a8ce,
- 0x39ae4d,
- 0x39ca11,
- 0x39eb0c,
- 0x39ee0c,
- 0x39f10b,
- 0x39f54c,
- 0x39fbcf,
- 0x39ff92,
- 0x3a088d,
- 0x3a198c,
- 0x3a244c,
- 0x3a274d,
- 0x3a2a8f,
- 0x3a2e4e,
- 0x3a520c,
- 0x3a57cd,
- 0x3a5b0b,
- 0x3a63cc,
- 0x3a6ccd,
- 0x3a700e,
- 0x3a7389,
- 0x3a83d3,
- 0x3aa18d,
- 0x3aa88d,
- 0x3aae8c,
- 0x3ab30e,
- 0x3ac78f,
- 0x3acb4c,
- 0x3ace4d,
- 0x3ad18f,
- 0x3ad54c,
- 0x3ae3cc,
- 0x3ae88c,
- 0x3aeb8c,
- 0x3af24d,
- 0x3af592,
- 0x3b164c,
- 0x3b194c,
- 0x3b1c51,
- 0x3b208f,
- 0x3b244f,
- 0x3b2813,
- 0x3b374e,
- 0x3b3acf,
- 0x3b3e8c,
- 0x623b41ce,
- 0x3b454f,
- 0x3b4916,
- 0x3b5452,
- 0x3b7d4c,
- 0x3bb14f,
- 0x3bb7cd,
- 0x3c76cf,
- 0x3c7a8c,
- 0x3c7d8d,
- 0x3c80cd,
- 0x3c988e,
- 0x3ca3cc,
- 0x3cd64c,
- 0x3cd950,
- 0x3d0ed1,
- 0x3d130b,
- 0x3d174c,
- 0x3d1a4e,
- 0x3d4811,
- 0x3d4c4e,
- 0x3d4fcd,
- 0x3d854b,
- 0x3d8e4f,
- 0x3d9814,
- 0x220482,
- 0x220482,
- 0x227dc3,
- 0x220482,
- 0x227dc3,
- 0x220482,
- 0x204142,
- 0x244285,
- 0x3d450c,
- 0x220482,
- 0x220482,
- 0x204142,
- 0x220482,
- 0x2974c5,
- 0x2c6a45,
- 0x220482,
- 0x220482,
- 0x208342,
- 0x2974c5,
- 0x334a89,
- 0x362f4c,
- 0x220482,
- 0x220482,
- 0x220482,
- 0x220482,
- 0x244285,
- 0x220482,
- 0x220482,
- 0x220482,
- 0x220482,
- 0x208342,
- 0x334a89,
- 0x220482,
- 0x220482,
- 0x220482,
- 0x2c6a45,
- 0x220482,
- 0x2c6a45,
- 0x362f4c,
- 0x3d450c,
- 0x248343,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x20a803,
- 0x216603,
- 0x62f0f647,
- 0x1ce4cf,
- 0x144208,
- 0x6704,
- 0xca43,
- 0xcd248,
- 0x5bc4,
+ 0x354cca,
+ 0x354f4c,
+ 0x35890c,
+ 0x35948c,
+ 0x359e8c,
+ 0x35df93,
+ 0x35e710,
+ 0x35eb10,
+ 0x35f10d,
+ 0x35f70c,
+ 0x360549,
+ 0x36224d,
+ 0x362593,
+ 0x364111,
+ 0x364913,
+ 0x36560f,
+ 0x3659cc,
+ 0x365ccf,
+ 0x36608d,
+ 0x36668f,
+ 0x366a50,
+ 0x3674ce,
+ 0x36b40e,
+ 0x36ba90,
+ 0x36d08d,
+ 0x36da0e,
+ 0x36dd8c,
+ 0x36ed53,
+ 0x37268e,
+ 0x372c10,
+ 0x373011,
+ 0x37344f,
+ 0x373813,
+ 0x374fcd,
+ 0x37530f,
+ 0x3756ce,
+ 0x375c50,
+ 0x376049,
+ 0x3773d0,
+ 0x3778cf,
+ 0x377f4f,
+ 0x378312,
+ 0x3792ce,
+ 0x37a00d,
+ 0x37a54d,
+ 0x37a88d,
+ 0x37bf8d,
+ 0x37c2cd,
+ 0x37c610,
+ 0x37ca0b,
+ 0x37d24c,
+ 0x37d5cc,
+ 0x37dbcc,
+ 0x37dece,
+ 0x38d350,
+ 0x38f7d2,
+ 0x38fc4b,
+ 0x39078e,
+ 0x390b0e,
+ 0x39138e,
+ 0x39190b,
+ 0x64391d96,
+ 0x39268d,
+ 0x393214,
+ 0x393f0d,
+ 0x3955d5,
+ 0x3978cd,
+ 0x39824f,
+ 0x398e0f,
+ 0x39c24f,
+ 0x39c60e,
+ 0x39c98d,
+ 0x39e251,
+ 0x3a084c,
+ 0x3a0b4c,
+ 0x3a0e4b,
+ 0x3a128c,
+ 0x3a1ccf,
+ 0x3a2092,
+ 0x3a2bcd,
+ 0x3a470c,
+ 0x3a500c,
+ 0x3a530d,
+ 0x3a564f,
+ 0x3a5a0e,
+ 0x3a750c,
+ 0x3a7acd,
+ 0x3a7e0b,
+ 0x3a8c4c,
+ 0x3a954d,
+ 0x3a988e,
+ 0x3a9c09,
+ 0x3abb53,
+ 0x3ac94d,
+ 0x3ad04d,
+ 0x3ad64c,
+ 0x3ae88e,
+ 0x3aef8f,
+ 0x3af34c,
+ 0x3af64d,
+ 0x3af98f,
+ 0x3afd4c,
+ 0x3b034c,
+ 0x3b080c,
+ 0x3b0b0c,
+ 0x3b35cd,
+ 0x3b3912,
+ 0x3b45cc,
+ 0x3b48cc,
+ 0x3b4bd1,
+ 0x3b500f,
+ 0x3b53cf,
+ 0x3b5793,
+ 0x3b6f8e,
+ 0x3b730f,
+ 0x3b76cc,
+ 0x647b7d8e,
+ 0x3b810f,
+ 0x3b84d6,
+ 0x3bae52,
+ 0x3bcccc,
+ 0x3bdb8f,
+ 0x3be20d,
+ 0x3c94cf,
+ 0x3c988c,
+ 0x3c9b8d,
+ 0x3c9ecd,
+ 0x3cb4ce,
+ 0x3cc38c,
+ 0x3ceecc,
+ 0x3cf1d0,
+ 0x3d3d91,
+ 0x3d41cb,
+ 0x3d460c,
+ 0x3d490e,
+ 0x3d6011,
+ 0x3d644e,
+ 0x3d67cd,
+ 0x3dbc0b,
+ 0x3dc88f,
+ 0x3dd454,
+ 0x23c782,
+ 0x23c782,
+ 0x23e083,
+ 0x23c782,
+ 0x23e083,
+ 0x23c782,
+ 0x203802,
+ 0x246c45,
+ 0x3d5d0c,
+ 0x23c782,
+ 0x23c782,
+ 0x203802,
+ 0x23c782,
+ 0x29b485,
+ 0x2b3585,
+ 0x23c782,
+ 0x23c782,
+ 0x201542,
+ 0x29b485,
+ 0x32fec9,
+ 0x363e0c,
+ 0x23c782,
+ 0x23c782,
+ 0x23c782,
+ 0x23c782,
+ 0x246c45,
+ 0x23c782,
+ 0x23c782,
+ 0x23c782,
+ 0x23c782,
+ 0x201542,
+ 0x32fec9,
+ 0x23c782,
+ 0x23c782,
+ 0x23c782,
+ 0x2b3585,
+ 0x23c782,
+ 0x2b3585,
+ 0x363e0c,
+ 0x3d5d0c,
+ 0x202703,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x21a3c3,
+ 0x242543,
+ 0x1d904f,
+ 0x145988,
+ 0x1a704,
+ 0x3dc3,
+ 0x86808,
+ 0x1cc203,
0x2000c2,
- 0x6360c302,
- 0x23e483,
- 0x259844,
- 0x2020c3,
- 0x2d3b84,
- 0x22f446,
- 0x20b8c3,
- 0x30b0c4,
- 0x398685,
- 0x211543,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x21de8a,
- 0x253c46,
- 0x38fbcc,
- 0x9fe08,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x238cc3,
- 0x2d9bc6,
- 0x20a803,
- 0x216603,
- 0x216103,
- 0x2f783,
- 0xa9148,
- 0x641c6005,
- 0x453c7,
- 0x12eb85,
- 0x9349,
- 0xc6c2,
- 0x1b5fca,
- 0x64f9e785,
- 0x12eb85,
- 0x6bb47,
- 0x6d448,
- 0x680e,
- 0x894d2,
- 0x173e0b,
- 0x10f186,
- 0x6528b745,
- 0x6568b74c,
- 0x8ec47,
- 0x176c87,
- 0x12650a,
- 0x3a210,
- 0xe7945,
- 0x10a7cb,
- 0x18a0c8,
- 0x67607,
- 0x11404b,
- 0x330c9,
- 0x44447,
- 0x16c307,
- 0x77507,
- 0x346c6,
- 0xe688,
- 0x65c39346,
- 0x45887,
- 0x147786,
- 0x189d4d,
- 0xc78d0,
- 0x66009802,
- 0x114c8,
- 0x67fd0,
- 0x181a8c,
- 0x6678b84d,
- 0x59648,
- 0x59acb,
- 0x68e47,
- 0x6e149,
- 0x54c46,
- 0x97048,
- 0x33c2,
- 0x198c0a,
- 0x1cb807,
- 0x35147,
- 0xaa289,
- 0xac0c8,
- 0x20005,
- 0x18ce06,
- 0x1ba306,
- 0x100d4e,
- 0x240ce,
- 0x14f5cf,
- 0xe3389,
- 0x6dc89,
- 0x19878b,
- 0xa318f,
- 0x15090c,
- 0xc010b,
- 0xd8fc8,
- 0x116e87,
- 0x15f548,
- 0x18e14b,
- 0x194fcc,
- 0x19bd8c,
- 0x19f8cc,
- 0xb08cd,
- 0x1432c8,
- 0xf10c2,
- 0x191f89,
- 0x45c88,
- 0x19e10b,
- 0xcb446,
- 0xd408b,
- 0x13b00b,
- 0xdf54a,
- 0xe1145,
- 0xe9250,
- 0xeba46,
- 0x52286,
- 0x175305,
- 0x114587,
- 0xd6fc8,
- 0xef9c7,
- 0xefc87,
- 0x184907,
- 0xc10c6,
- 0x1ab8ca,
- 0x9fc8a,
- 0x13686,
- 0xad44d,
- 0x45948,
- 0x111788,
- 0x112009,
- 0xb9545,
- 0x1a214c,
- 0xb0acb,
- 0x1cab84,
- 0x10c009,
- 0x10c246,
- 0x4a506,
- 0x1bff46,
- 0x5402,
- 0x3e006,
- 0xbe70b,
- 0x118547,
- 0x57c2,
- 0xccc85,
- 0x63444,
+ 0x65601242,
+ 0x240983,
+ 0x224c84,
+ 0x207083,
+ 0x384584,
+ 0x22f7c6,
+ 0x310c83,
+ 0x310c44,
+ 0x2f0b05,
+ 0x23c803,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x21e2ca,
+ 0x252b06,
+ 0x390e8c,
+ 0x9a048,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x2137c3,
+ 0x2e2406,
+ 0x21a3c3,
+ 0x242543,
+ 0x2141c3,
+ 0x2fb03,
+ 0xac508,
+ 0x661d2145,
+ 0x47d47,
+ 0x139b05,
+ 0x156c9,
+ 0x1742,
+ 0x13a14a,
+ 0x66fa0505,
+ 0x139b05,
+ 0x29907,
+ 0x6dfc8,
+ 0x9c4e,
+ 0x8b392,
+ 0x9630b,
+ 0x10d806,
+ 0x6728d505,
+ 0x6768d50c,
+ 0x13d547,
+ 0x17e707,
+ 0x12364a,
+ 0x3be50,
+ 0x146145,
+ 0x10fe4b,
+ 0x79108,
+ 0x25687,
+ 0x2490b,
+ 0x33249,
+ 0x46e07,
+ 0x15c087,
+ 0xc2487,
+ 0x34a06,
+ 0x106c8,
+ 0x67c28886,
+ 0x47207,
+ 0x18ec46,
+ 0x78d8d,
+ 0xf3c90,
+ 0x680aac82,
+ 0xd1288,
+ 0x40350,
+ 0x17f5cc,
+ 0x687825cd,
+ 0x5a988,
+ 0x5ae0b,
+ 0x6b187,
+ 0x70749,
+ 0x56306,
+ 0x9b008,
+ 0x3ee42,
+ 0x9218a,
+ 0x157647,
+ 0x107c07,
+ 0xacdc9,
+ 0xaff88,
+ 0xf3605,
+ 0x18d986,
+ 0x1ba1c6,
+ 0xfd84e,
+ 0xaf88e,
+ 0x3874f,
+ 0x41a89,
+ 0xf0c09,
+ 0x91d0b,
+ 0xb3b4f,
+ 0xbd08c,
+ 0xca18b,
+ 0x131388,
+ 0x171887,
+ 0x197088,
+ 0xb580b,
+ 0xb5bcc,
+ 0xb5fcc,
+ 0xb63cc,
+ 0xb66cd,
+ 0x1b1148,
+ 0x52e82,
+ 0x193a49,
+ 0x112988,
+ 0x19fe8b,
+ 0xd5b46,
+ 0xdda8b,
+ 0x136acb,
+ 0xe884a,
+ 0xea585,
+ 0xf1210,
+ 0xf5c86,
+ 0x184806,
+ 0x97805,
+ 0x91487,
+ 0xe0448,
+ 0xf92c7,
+ 0xf9587,
+ 0x12c807,
+ 0xc7346,
+ 0x1cd80a,
+ 0x99eca,
+ 0x11ec6,
+ 0xb130d,
+ 0x472c8,
+ 0x115488,
+ 0x115cc9,
+ 0xc0545,
+ 0x1aec8c,
+ 0xb68cb,
+ 0x86fc9,
+ 0x1ccb44,
+ 0x111949,
+ 0x111b86,
+ 0x4cec6,
+ 0x3c686,
+ 0x1b82,
+ 0x365c6,
+ 0x13dacb,
+ 0x129187,
+ 0x11ac47,
+ 0x1442,
+ 0xd7445,
+ 0x27e04,
0x101,
- 0x50343,
- 0x65a669c6,
- 0x973c3,
+ 0x4fd83,
+ 0x67a37806,
+ 0x9b383,
0x382,
- 0x2b704,
+ 0x26bc4,
0xac2,
- 0x42244,
+ 0xd3684,
0x882,
- 0x4c82,
- 0x19c2,
- 0x27682,
- 0x4042,
- 0x8b742,
+ 0x31c2,
+ 0x16c2,
+ 0x20f82,
+ 0x86c2,
+ 0x8d502,
0xd42,
- 0x8cac2,
- 0x36182,
- 0x59dc2,
- 0x81c2,
- 0x4cfc2,
- 0x32c43,
+ 0x167c2,
+ 0x373c2,
+ 0x5582,
+ 0x2a42,
+ 0x4e782,
+ 0x32dc3,
0x942,
- 0x1bc2,
- 0xc202,
- 0x3d42,
+ 0x3c42,
+ 0xdec2,
+ 0x5dc2,
0x642,
- 0x30ac2,
- 0x4742,
- 0x1cc2,
+ 0x315c2,
+ 0x6502,
+ 0x5bc2,
0xf42,
0x5c2,
- 0x14543,
- 0x1742,
- 0x2cc2,
- 0x48902,
- 0x4e082,
- 0x3102,
- 0x5f82,
- 0x17002,
- 0x1fc02,
- 0x6a42,
- 0x140d82,
- 0x6bf42,
- 0x9082,
- 0xa803,
+ 0x1bc83,
+ 0x4582,
+ 0x7882,
+ 0x49582,
+ 0x1e42,
+ 0x2042,
+ 0x8282,
+ 0x23502,
+ 0x17c2,
+ 0x9e82,
+ 0x3f82,
+ 0x6c9c2,
+ 0x15402,
+ 0x1a3c3,
0x602,
- 0x39242,
- 0x2f42,
- 0x23242,
- 0x137c5,
- 0x8242,
- 0x20082,
- 0x3b1c3,
+ 0x30a42,
+ 0x2902,
+ 0x1ad42,
+ 0x1d685,
+ 0xa882,
+ 0x14b42,
+ 0x3d383,
0x682,
- 0xa982,
- 0x2e42,
- 0x1702,
- 0x1782,
+ 0xca42,
+ 0x45c2,
+ 0x7842,
+ 0x2f82,
0x8c2,
- 0x14302,
- 0x5402,
- 0x7d45,
- 0x66a04142,
- 0x66f6d603,
- 0x13583,
- 0x67204142,
- 0x13583,
- 0x819c7,
- 0x209e83,
+ 0xc2c2,
+ 0x1b82,
+ 0x1805,
+ 0x68a03802,
+ 0x68edf283,
+ 0xf283,
+ 0x69203802,
+ 0xf283,
+ 0x74c47,
+ 0x201503,
0x2000c2,
- 0x22c0c3,
- 0x232c43,
- 0x212483,
+ 0x214a83,
+ 0x232dc3,
+ 0x228503,
0x2005c3,
- 0x238cc3,
- 0x20a803,
- 0x20ca43,
- 0x216603,
- 0x297403,
- 0xfba85,
- 0x8303,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x212483,
- 0x211543,
- 0x20a803,
- 0x20ca43,
- 0x6d9c3,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
+ 0x2137c3,
+ 0x21a3c3,
+ 0x203dc3,
+ 0x242543,
+ 0x29b3c3,
+ 0xc0584,
+ 0x19405,
+ 0x104305,
+ 0x3a83,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x228503,
+ 0x23c803,
+ 0x21a3c3,
+ 0x203dc3,
+ 0x1b4103,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
0x200181,
- 0x211543,
- 0x20a803,
- 0x24bbc3,
- 0x216603,
- 0xbef44,
- 0x248343,
- 0x22c0c3,
- 0x232c43,
- 0x20d083,
- 0x212483,
- 0x35c6c3,
- 0x2042c3,
- 0x2a6b43,
- 0x20edc3,
- 0x228b03,
- 0x224e44,
- 0x20a803,
- 0x216603,
- 0x205b03,
- 0x345344,
- 0x25cc83,
- 0x25843,
- 0x2287c3,
- 0x32b808,
- 0x27d8c4,
+ 0x23c803,
+ 0x21a3c3,
+ 0x24e283,
+ 0x242543,
+ 0x69944,
+ 0x202703,
+ 0x214a83,
+ 0x232dc3,
+ 0x218bc3,
+ 0x228503,
+ 0x2c26c3,
+ 0x208943,
+ 0x2a37c3,
+ 0x216243,
+ 0x308003,
+ 0x221dc4,
+ 0x21a3c3,
+ 0x242543,
+ 0x207783,
+ 0x204244,
+ 0x24f603,
+ 0x20dc3,
+ 0x29cfc3,
+ 0x328fc8,
+ 0x2f0e44,
0x20020a,
- 0x31fa06,
- 0x124804,
- 0x38ad87,
- 0x22090a,
- 0x223989,
- 0x3b2c87,
- 0x3b588a,
- 0x248343,
- 0x3ac10b,
- 0x3c28c9,
- 0x2d3185,
- 0x3ae6c7,
- 0xc302,
- 0x22c0c3,
- 0x3c3187,
- 0x26a3c5,
- 0x2c7249,
- 0x232c43,
- 0x2bd546,
- 0x2c5d83,
- 0xcfe03,
- 0x115f06,
- 0x13f146,
- 0xb847,
- 0x21e686,
- 0x2276c5,
- 0x3de0c7,
- 0x312847,
- 0x69e28b03,
- 0x350e47,
- 0x3c0043,
- 0x20a405,
- 0x224e44,
- 0x26f848,
- 0x37a38c,
- 0x2b2045,
- 0x2a6746,
- 0x3c3047,
- 0x3a9ac7,
- 0x243a87,
- 0x24fc48,
- 0x314f4f,
- 0x223bc5,
- 0x23e587,
- 0x205147,
- 0x2a850a,
- 0x2ec6c9,
- 0x31e445,
- 0x320fca,
- 0xbc7c6,
- 0xb9a07,
- 0x2c5e05,
- 0x2ed104,
- 0x3c0146,
- 0xdd246,
- 0x381d07,
- 0x2f0fc7,
- 0x369748,
- 0x2188c5,
- 0x26a2c6,
- 0x25788,
- 0x2eaf85,
- 0xeb146,
- 0x2311c5,
- 0x28b084,
- 0x306907,
- 0x238fca,
- 0x336408,
- 0x36a346,
- 0x38cc3,
- 0x2e2a45,
- 0x322406,
- 0x3b5186,
- 0x375206,
- 0x211543,
- 0x3a0b07,
- 0x2050c5,
- 0x20a803,
- 0x2df80d,
- 0x20ca43,
- 0x369848,
- 0x20fcc4,
- 0x276f45,
- 0x2a8406,
- 0x394306,
- 0x2a9407,
- 0x259d07,
- 0x28aa85,
- 0x216603,
- 0x31a207,
- 0x316f89,
- 0x26e2c9,
- 0x2524ca,
- 0x2091c2,
- 0x20a3c4,
- 0x302604,
- 0x2ee247,
- 0x2ee648,
- 0x2f0889,
- 0x3c6649,
- 0x2f1507,
- 0x101f49,
- 0x21ee46,
- 0xf4a86,
- 0x2f61c4,
- 0x22c50a,
- 0x2fab08,
- 0x2fc809,
- 0x2fcdc6,
- 0x2b6305,
- 0x3362c8,
- 0x2cb88a,
- 0x24f1c3,
- 0x3454c6,
- 0x2f1607,
- 0x31f785,
- 0x3a4245,
- 0x240a83,
- 0x246484,
- 0x228305,
- 0x285dc7,
- 0x2f90c5,
- 0x2f6a46,
- 0x11ba45,
- 0x359a43,
- 0x3d26c9,
- 0x276d0c,
- 0x2bb5cc,
- 0x39e908,
- 0x2a98c7,
- 0x3085c8,
- 0x108c07,
- 0x30944a,
- 0x309b0b,
- 0x3c2a08,
- 0x394408,
- 0x3db806,
- 0x27d485,
- 0x33954a,
- 0x36d645,
- 0x219f82,
- 0x2c9ac7,
- 0x24d686,
- 0x377b45,
- 0x30adc9,
- 0x27ae85,
- 0x295b05,
- 0x2f8249,
- 0x322346,
- 0x329788,
- 0x267dc3,
- 0x21e7c6,
- 0x275506,
- 0x318085,
- 0x318089,
- 0x2bc409,
- 0x27d207,
- 0x11abc4,
- 0x31abc7,
- 0x3c6549,
- 0x220b05,
- 0x37ec8,
- 0x342dc5,
- 0x28e1c5,
- 0x383dc9,
- 0x202542,
- 0x3d2c04,
- 0x201e82,
- 0x201742,
- 0x2e5285,
- 0x324588,
- 0x2b9485,
- 0x2c8c83,
- 0x2c8c85,
- 0x2d6f43,
- 0x2071c2,
- 0x331d04,
- 0x26e683,
+ 0x235406,
+ 0x124184,
+ 0x3a71c7,
+ 0x21ec8a,
+ 0x21b489,
+ 0x3bb287,
+ 0x3c024a,
+ 0x202703,
+ 0x35604b,
+ 0x216189,
+ 0x2f4245,
+ 0x3b0647,
+ 0x1242,
+ 0x214a83,
+ 0x20fcc7,
+ 0x263bc5,
+ 0x2cc8c9,
+ 0x232dc3,
+ 0x373ec6,
+ 0x2cb983,
+ 0xeeb03,
+ 0x118f86,
+ 0x98186,
+ 0x1d3bc7,
+ 0x212286,
+ 0x220fc5,
+ 0x205b47,
+ 0x316507,
+ 0x6bf08003,
+ 0x34e2c7,
+ 0x23c783,
+ 0x3d3905,
+ 0x221dc4,
+ 0x26f3c8,
+ 0x385acc,
+ 0x2b8d05,
+ 0x2aa446,
+ 0x20fb87,
+ 0x3b9887,
+ 0x3a2a07,
+ 0x248b48,
+ 0x317ccf,
+ 0x21b6c5,
+ 0x240a87,
+ 0x28e747,
+ 0x276e0a,
+ 0x37b549,
+ 0x3dd185,
+ 0x3212ca,
+ 0xc4ac6,
+ 0xc0a07,
+ 0x2cba05,
+ 0x2f6684,
+ 0x3d9686,
+ 0x101406,
+ 0x37f847,
+ 0x252d87,
+ 0x33b388,
+ 0x218405,
+ 0x263ac6,
+ 0x156ec8,
+ 0x2e3d85,
+ 0xe3f46,
+ 0x3268c5,
+ 0x28ce44,
+ 0x24a407,
+ 0x2307ca,
+ 0x23ab88,
+ 0x288e06,
+ 0x137c3,
+ 0x2ec0c5,
+ 0x320506,
+ 0x3bee46,
+ 0x297706,
+ 0x23c803,
+ 0x3a2e47,
+ 0x28e6c5,
+ 0x21a3c3,
+ 0x2e8b0d,
+ 0x203dc3,
+ 0x33b488,
+ 0x213484,
+ 0x276b05,
+ 0x2abd06,
+ 0x205406,
+ 0x2ac7c7,
+ 0x25b047,
+ 0x350ac5,
+ 0x242543,
+ 0x271d87,
+ 0x371989,
+ 0x2708c9,
+ 0x384a4a,
+ 0x215542,
+ 0x3d38c4,
+ 0x2fb304,
+ 0x2f7c07,
+ 0x2f7f48,
+ 0x2fa3c9,
+ 0x3d2789,
+ 0x2fadc7,
+ 0x109049,
+ 0x362f06,
+ 0xfd5c6,
+ 0x2fe7c4,
+ 0x22cf8a,
+ 0x302448,
+ 0x305389,
+ 0x305946,
+ 0x2bc745,
+ 0x23aa48,
+ 0x2d5dca,
+ 0x32bf03,
+ 0x2043c6,
+ 0x2faec7,
+ 0x35a785,
+ 0x3b4045,
+ 0x2432c3,
+ 0x23e804,
+ 0x227b45,
+ 0x2848c7,
+ 0x2ff405,
+ 0x2ff846,
+ 0x111e85,
+ 0x2071c3,
+ 0x2071c9,
+ 0x2768cc,
+ 0x2c61cc,
+ 0x3444c8,
+ 0x2ab3c7,
+ 0x30d588,
+ 0x10e747,
+ 0x30eaca,
+ 0x30f18b,
+ 0x2162c8,
+ 0x205508,
+ 0x22b686,
+ 0x302bc5,
+ 0x25d70a,
+ 0x2df2c5,
+ 0x233442,
+ 0x2d44c7,
+ 0x253c46,
+ 0x376785,
+ 0x310949,
+ 0x2d0405,
+ 0x372185,
+ 0x3c2409,
+ 0x320446,
+ 0x201348,
+ 0x3d39c3,
+ 0x20aa46,
+ 0x275c86,
+ 0x31cd05,
+ 0x31cd09,
+ 0x2c4709,
+ 0x25d487,
+ 0x11cb84,
+ 0x31cb87,
+ 0x3d2689,
+ 0x21ee85,
+ 0x39f48,
+ 0x349845,
+ 0x353885,
+ 0x39b489,
+ 0x204b42,
+ 0x357204,
+ 0x209282,
+ 0x204582,
+ 0x2ed985,
+ 0x323f08,
+ 0x2c0485,
+ 0x2ced43,
+ 0x2ced45,
+ 0x2e03c3,
+ 0x20a742,
+ 0x2b4384,
+ 0x269f03,
0x200a82,
- 0x3b8944,
- 0x311943,
- 0x212842,
- 0x2b9503,
- 0x213604,
- 0x2fcf43,
- 0x254ec4,
- 0x204e82,
- 0x216003,
- 0x219c83,
- 0x202602,
- 0x293042,
- 0x2bc249,
- 0x20fa02,
- 0x28a304,
- 0x20d542,
- 0x336144,
- 0x21ee04,
- 0x252b44,
- 0x205402,
- 0x23b4c2,
- 0x387e43,
- 0x298cc3,
- 0x2614c4,
- 0x28dcc4,
- 0x2d0984,
- 0x2f1784,
- 0x31ad43,
- 0x300b03,
- 0x2bc744,
- 0x31d9c4,
- 0x31db06,
- 0x20b582,
- 0xc302,
- 0x3ef83,
- 0x20c302,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
+ 0x3b17c4,
+ 0x309703,
+ 0x20cb42,
+ 0x2c0503,
+ 0x211e44,
+ 0x305ac3,
+ 0x255544,
+ 0x205142,
+ 0x2140c3,
+ 0x21ab03,
+ 0x2071c2,
+ 0x294ec2,
+ 0x2c4549,
+ 0x205b02,
+ 0x28bec4,
+ 0x206542,
+ 0x23a8c4,
+ 0x362ec4,
+ 0x3b4384,
+ 0x201b82,
+ 0x22b2c2,
+ 0x22db03,
+ 0x29cec3,
+ 0x3269c4,
+ 0x3aa684,
+ 0x2dae84,
+ 0x2ea884,
+ 0x31bcc3,
+ 0x312743,
+ 0x2c4a44,
+ 0x31f184,
+ 0x31f2c6,
+ 0x21d642,
+ 0x1242,
+ 0x41483,
+ 0x201242,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x6c05,
0x2000c2,
- 0x248343,
- 0x22c0c3,
- 0x232c43,
- 0x205e03,
- 0x228b03,
- 0x224e44,
- 0x2bc504,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x216103,
- 0x2f8a84,
- 0x32ce03,
- 0x2aad03,
- 0x37a944,
- 0x342bc6,
- 0x20e5c3,
- 0x12eb85,
- 0x176c87,
- 0x2e4003,
- 0x6b644548,
- 0x2420c3,
- 0x2b4103,
- 0x20a443,
- 0x238cc3,
- 0x3afd05,
- 0x1ae683,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x208243,
- 0x22dcc3,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x214543,
- 0x20a803,
- 0x27f984,
- 0x6d9c3,
- 0x216603,
- 0x2ba0c4,
- 0x12eb85,
- 0x2c2ac5,
- 0x176c87,
- 0x20c302,
- 0x201d02,
+ 0x202703,
+ 0x214a83,
+ 0x232dc3,
+ 0x209b03,
+ 0x308003,
+ 0x221dc4,
+ 0x2c4804,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x2141c3,
+ 0x2fedc4,
+ 0x297a83,
+ 0x2ad843,
+ 0x37a2c4,
+ 0x349646,
+ 0x210603,
+ 0x139b05,
+ 0x17e707,
+ 0x2d2c43,
+ 0x6da46f08,
+ 0x2532c3,
+ 0x2bb143,
+ 0x25cc03,
+ 0x2137c3,
+ 0x3c0ac5,
+ 0x1b0603,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x20a883,
+ 0x22ee03,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21bc83,
+ 0x21a3c3,
+ 0x2801c4,
+ 0x1b4103,
+ 0x242543,
+ 0x24a004,
+ 0x139b05,
+ 0x2c8f85,
+ 0x17e707,
+ 0x201242,
+ 0x2052c2,
0x200382,
- 0x205642,
- 0xca43,
+ 0x208482,
+ 0x3dc3,
0x2003c2,
- 0x1244,
- 0x22c0c3,
- 0x235604,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x217b84,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x20c603,
- 0x242244,
- 0x9fe08,
- 0x22c0c3,
- 0x20ca43,
- 0x8303,
- 0x123ec4,
- 0x249f84,
- 0x9fe08,
- 0x22c0c3,
- 0x24b304,
- 0x224e44,
- 0x20ca43,
- 0x201e02,
- 0x6d9c3,
- 0x216603,
- 0x236bc3,
- 0x46484,
- 0x204185,
- 0x219f82,
- 0x2be683,
- 0x2b49,
- 0xddb86,
- 0x142ec8,
+ 0x4f04,
+ 0x214a83,
+ 0x235b44,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x219a04,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x20e2c3,
+ 0x2d3684,
+ 0x9a048,
+ 0x214a83,
+ 0x203dc3,
+ 0x3a83,
+ 0x122504,
+ 0x24c0c4,
+ 0x9a048,
+ 0x214a83,
+ 0x24d9c4,
+ 0x221dc4,
+ 0x203dc3,
+ 0x204042,
+ 0x1b4103,
+ 0x242543,
+ 0x22b983,
+ 0x3e804,
+ 0x208805,
+ 0x233442,
+ 0x325e43,
+ 0x68b49,
+ 0xe5986,
+ 0x149948,
0x2000c2,
- 0x9fe08,
- 0x20c302,
- 0x232c43,
- 0x228b03,
+ 0x9a048,
+ 0x201242,
+ 0x232dc3,
+ 0x308003,
0x2005c2,
- 0xca43,
- 0x216603,
- 0x5942,
+ 0x3dc3,
+ 0x242543,
+ 0x7c42,
0x82,
0xc2,
- 0x1b5a47,
- 0x13dc09,
- 0x7be83,
- 0x9fe08,
- 0x27643,
- 0x6ef26287,
- 0x2c0c3,
- 0x6048,
- 0x32c43,
- 0x28b03,
- 0x3a086,
- 0x14543,
- 0x96448,
- 0xc53c8,
- 0x79046,
- 0x11543,
- 0xce788,
- 0xb7e03,
- 0x6f0e23c6,
- 0xea185,
- 0x32e47,
- 0xa803,
- 0x21803,
- 0x16603,
- 0xb142,
- 0x17d48a,
- 0x4e03,
- 0xe5343,
- 0xfe804,
- 0x114d4b,
- 0x115308,
- 0x91482,
- 0x1451207,
- 0x153efc7,
- 0x14c8d48,
- 0x151d403,
- 0x10044b,
- 0x8582,
- 0x12ea07,
- 0x10cbc4,
+ 0x1c0407,
+ 0x142c09,
+ 0x7aec3,
+ 0x9a048,
+ 0x20f43,
+ 0x713233c7,
+ 0x14a83,
+ 0x944c8,
+ 0x32dc3,
+ 0x108003,
+ 0x1ab9c6,
+ 0x1bc83,
+ 0x92788,
+ 0xcae48,
+ 0xcff06,
+ 0x3c803,
+ 0xd8cc8,
+ 0x44b83,
+ 0x714eb886,
+ 0xf1c05,
+ 0x32fc7,
+ 0x1a3c3,
+ 0x11003,
+ 0x42543,
+ 0xeb02,
+ 0x17cd0a,
+ 0x2cc3,
+ 0xeda43,
+ 0x10a104,
+ 0x117acb,
+ 0x118088,
+ 0x90602,
+ 0x14540c7,
+ 0x15636c7,
+ 0x14cee08,
+ 0x14cf583,
+ 0x143acb,
+ 0xb342,
+ 0x12bcc7,
+ 0x11b504,
0x2000c2,
- 0x20c302,
- 0x235604,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x238cc3,
- 0x20a803,
- 0x216603,
- 0x2ba0c3,
- 0x20c603,
- 0x2f783,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
+ 0x201242,
+ 0x235b44,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x2137c3,
+ 0x21a3c3,
+ 0x242543,
+ 0x215d43,
+ 0x20e2c3,
+ 0x2fb03,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
0x602,
- 0x8303,
- 0x28b03,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x238cc3,
- 0x20a803,
- 0x216603,
- 0x20ff42,
+ 0x3a83,
+ 0x108003,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x2137c3,
+ 0x21a3c3,
+ 0x242543,
+ 0x20c782,
0x2000c1,
0x2000c2,
0x200201,
- 0x336f42,
- 0x9fe08,
- 0x21c105,
+ 0x332182,
+ 0x9a048,
+ 0x21ca05,
0x200101,
- 0x2c0c3,
- 0x2fd84,
- 0x2015c1,
+ 0x14a83,
+ 0x2fe44,
+ 0x201301,
0x200501,
- 0x2014c1,
- 0x244202,
- 0x3874c4,
- 0x244203,
+ 0x205dc1,
+ 0x246bc2,
+ 0x387fc4,
+ 0x246bc3,
0x200041,
0x200801,
0x200181,
0x200701,
- 0x2f6b87,
- 0x380f4f,
- 0x3cac46,
+ 0x302fc7,
+ 0x30e38f,
+ 0x3ccc06,
0x2004c1,
- 0x323f06,
+ 0x322546,
0x200bc1,
0x200581,
- 0x3d878e,
+ 0x3affce,
0x2003c1,
- 0x216603,
+ 0x242543,
0x200a81,
- 0x2e3285,
- 0x20b142,
- 0x240985,
+ 0x34c105,
+ 0x20eb02,
+ 0x2431c5,
0x200401,
0x200741,
0x2007c1,
- 0x219f82,
+ 0x233442,
0x200081,
- 0x205841,
- 0x201241,
- 0x2018c1,
- 0x204981,
- 0x4e9c9,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x216e03,
- 0x22c0c3,
- 0x228b03,
- 0x913c8,
- 0x211543,
- 0x20a803,
- 0x70e03,
- 0x216603,
- 0x14ecd48,
- 0x8148,
- 0x12eb85,
- 0x9fe08,
- 0xca43,
- 0x12eb85,
- 0x1da144,
- 0x116c8,
- 0x42744,
- 0xc9345,
- 0x4e9c9,
- 0x14ecd4a,
- 0x9fe08,
- 0x6d9c3,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x225843,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x2db1c4,
- 0x216603,
- 0x25cf45,
- 0x27ac84,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x206a42,
- 0x20a803,
- 0x216603,
- 0xc603,
- 0xa924a,
- 0x119b84,
- 0x121d46,
- 0x248343,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x20a803,
- 0x216603,
- 0x20c302,
- 0x22c0c3,
- 0x230309,
- 0x232c43,
- 0x2ac809,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x189a44,
- 0xca43,
- 0x216603,
- 0x2f5fc8,
- 0x23ad87,
- 0x204185,
- 0x1d1548,
- 0x1b5a47,
- 0xee8ca,
- 0x6fe0b,
- 0x124147,
- 0x3cd48,
- 0x1198a,
- 0x1a348,
- 0x13dc09,
- 0x281c7,
- 0x106707,
- 0x140cc8,
- 0x6048,
- 0x3e84f,
- 0x17c45,
- 0x16687,
- 0x3a086,
- 0x3fc07,
- 0x11e586,
- 0x96448,
- 0x9f546,
- 0x129587,
- 0x143489,
- 0x1a4ec7,
- 0x9be49,
- 0xba9c9,
- 0xc2846,
- 0xc53c8,
- 0xc3a05,
- 0x7c70a,
- 0xce788,
- 0xb7e03,
- 0xd7348,
- 0x32e47,
- 0x13e8c5,
- 0x64910,
- 0x21803,
- 0x6d9c3,
- 0x129407,
- 0x231c5,
- 0xeff88,
- 0x65305,
- 0xe5343,
- 0x3308,
- 0xb446,
- 0x92289,
- 0xaebc7,
- 0x2e0b,
- 0x6c1c4,
- 0x10b8c4,
- 0x114d4b,
- 0x115308,
- 0x115e07,
- 0x12eb85,
- 0x22c0c3,
- 0x232c43,
- 0x212483,
- 0x216603,
- 0x23bf03,
- 0x228b03,
- 0x6d9c3,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x1988cb,
+ 0x201341,
+ 0x204f01,
+ 0x201b41,
+ 0x201441,
+ 0x50849,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x214903,
+ 0x214a83,
+ 0x308003,
+ 0x90548,
+ 0x23c803,
+ 0x21a3c3,
+ 0x7283,
+ 0x242543,
+ 0x14f62c8,
+ 0x1e0603,
+ 0xa788,
+ 0x139b05,
+ 0x9a048,
+ 0x3dc3,
+ 0x139b05,
+ 0xcd184,
+ 0xd1488,
+ 0x455c4,
+ 0xcf487,
+ 0xd3b05,
+ 0x50849,
+ 0x11d287,
+ 0x14f62ca,
+ 0x9a048,
+ 0x1b4103,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x220dc3,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x2e3504,
+ 0x242543,
+ 0x24f8c5,
+ 0x2d0204,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x209e82,
+ 0x21a3c3,
+ 0x242543,
+ 0xe2c3,
+ 0xac60a,
+ 0xe8006,
+ 0x102804,
+ 0x122046,
+ 0x202703,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x21a3c3,
+ 0x242543,
+ 0x201242,
+ 0x214a83,
+ 0x2303c9,
+ 0x232dc3,
+ 0x2aa909,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x78a84,
+ 0x3dc3,
+ 0x242543,
+ 0x2fe5c8,
+ 0x23c207,
+ 0x208805,
+ 0xdbc48,
+ 0x1d4408,
+ 0x1c0407,
+ 0xf81ca,
+ 0x6f98b,
+ 0x122787,
+ 0x3f888,
+ 0xd174a,
+ 0xf648,
+ 0x142c09,
+ 0x27a07,
+ 0x1fa87,
+ 0x3ec8,
+ 0x944c8,
+ 0x40d4f,
+ 0x3ad45,
+ 0x947c7,
+ 0x1ab9c6,
+ 0x3cd87,
+ 0x1dd2c6,
+ 0x92788,
+ 0x99786,
+ 0x1147,
+ 0x2fc9,
+ 0x18ab07,
+ 0x179dc9,
+ 0xc2749,
+ 0xc8d06,
+ 0xcae48,
+ 0xdbf05,
+ 0x7b74a,
+ 0xd8cc8,
+ 0x44b83,
+ 0xe07c8,
+ 0x32fc7,
+ 0x95d05,
+ 0x51590,
+ 0x11003,
+ 0x1b4103,
+ 0x2e47,
+ 0x1acc5,
+ 0xf9888,
+ 0x66605,
+ 0xeda43,
+ 0x1cb7c8,
+ 0xee06,
+ 0x32109,
+ 0xb2b87,
+ 0x68e0b,
+ 0x6cc44,
+ 0x111444,
+ 0x117acb,
+ 0x118088,
+ 0x118e87,
+ 0x139b05,
+ 0x214a83,
+ 0x232dc3,
+ 0x228503,
+ 0x242543,
+ 0x23e343,
+ 0x308003,
+ 0x1b4103,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x91e4b,
0x2000c2,
- 0x20c302,
- 0x216603,
- 0x9fe08,
- 0x133d89,
- 0xc302,
+ 0x201242,
+ 0x242543,
+ 0xd42,
+ 0x9e82,
+ 0x7782,
+ 0x9a048,
+ 0x1b3089,
+ 0x1242,
0x2000c2,
- 0x20c302,
+ 0x201242,
0x200382,
0x2005c2,
- 0x206702,
- 0x20a803,
- 0x133a46,
+ 0x210942,
+ 0x21a3c3,
+ 0x13f246,
0x2003c2,
- 0x46484,
+ 0x3e804,
0x2000c2,
- 0x248343,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
+ 0x202703,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
0x200382,
- 0x228b03,
- 0x214543,
- 0x211543,
- 0x217b84,
- 0x20a803,
- 0x213dc3,
- 0xca43,
- 0x216603,
- 0x2fe804,
- 0x205b03,
- 0x228b03,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x20ca43,
- 0x216603,
- 0x3b8207,
- 0x22c0c3,
- 0x27c087,
- 0x35f6c6,
- 0x216b03,
- 0x214403,
- 0x228b03,
- 0x204f43,
- 0x224e44,
- 0x300bc4,
- 0x3187c6,
- 0x218f83,
- 0x20a803,
- 0x216603,
- 0x25cf45,
- 0x34f1c4,
- 0x326a03,
- 0x276683,
- 0x2c9ac7,
- 0x20f805,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x14803,
- 0x7970270c,
- 0x50e87,
- 0xbe846,
- 0x114587,
- 0x8f6c5,
- 0x20be02,
- 0x245a83,
- 0x208b83,
- 0x248343,
- 0x7a22c0c3,
- 0x207902,
- 0x232c43,
- 0x2020c3,
- 0x228b03,
- 0x224e44,
- 0x201143,
- 0x223bc3,
- 0x211543,
- 0x217b84,
- 0x7a612b02,
- 0x20a803,
- 0x216603,
- 0x21d0c3,
- 0x22ce03,
- 0x20a883,
- 0x20ff42,
- 0x205b03,
- 0x9fe08,
- 0x228b03,
- 0x8303,
- 0x322c44,
- 0x248343,
- 0x20c302,
- 0x22c0c3,
- 0x235604,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x214543,
- 0x246b84,
- 0x303f84,
- 0x2d9bc6,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x216103,
- 0x24d686,
- 0x3494b,
- 0x39346,
- 0x396ca,
- 0x11960a,
- 0x9fe08,
- 0x225744,
- 0x7ba2c0c3,
- 0x3db044,
- 0x232c43,
- 0x26e144,
- 0x228b03,
- 0x220383,
- 0x211543,
- 0x20a803,
- 0x6d9c3,
- 0x216603,
- 0x47203,
- 0x34b00b,
- 0x3c840a,
- 0x3dc60c,
- 0xe27c8,
- 0x2000c2,
- 0x20c302,
- 0x200382,
- 0x22cd85,
- 0x224e44,
- 0x206a42,
- 0x211543,
- 0x303f84,
- 0x205642,
- 0x2003c2,
- 0x209482,
- 0x20ff42,
- 0x48343,
- 0x9382,
- 0x2c4009,
- 0x364448,
- 0x228989,
- 0x208649,
- 0x2181ca,
- 0x22170a,
- 0x203cc2,
- 0x28cac2,
- 0xc302,
- 0x22c0c3,
- 0x22ae02,
- 0x23e746,
- 0x378f82,
- 0x201682,
- 0x27018e,
- 0x21604e,
- 0x27fc47,
- 0x20a787,
- 0x24b5c2,
- 0x232c43,
- 0x228b03,
- 0x20d602,
- 0x2005c2,
- 0x14383,
- 0x23580f,
- 0x23ea82,
- 0x366f87,
- 0x2b1bc7,
- 0x354207,
- 0x2b590c,
- 0x2e09cc,
- 0x3d0384,
- 0x39b8ca,
- 0x211902,
- 0x24e082,
- 0x2bce04,
- 0x200702,
- 0x2c4fc2,
- 0x2e0c04,
- 0x213ec2,
- 0x203102,
- 0xe403,
- 0x29f5c7,
- 0x238685,
- 0x217002,
- 0x23fb84,
- 0x340d82,
- 0x2e2548,
- 0x20a803,
- 0x377ec8,
- 0x201fc2,
- 0x3d0545,
- 0x394d46,
- 0x216603,
- 0x208242,
- 0x2f0ac7,
- 0xb142,
- 0x212ec5,
- 0x301185,
- 0x216442,
- 0x2085c2,
- 0x21cf0a,
- 0x28a90a,
- 0x287582,
- 0x2a0cc4,
- 0x205c42,
- 0x20a288,
- 0x205782,
- 0x356708,
- 0xf01,
- 0x30ef47,
- 0x310a49,
- 0x212f42,
- 0x316805,
- 0x3b0205,
- 0x21898b,
- 0x318d4c,
- 0x22a908,
- 0x32e848,
- 0x20b582,
- 0x2a94c2,
- 0x2000c2,
- 0x9fe08,
- 0x20c302,
- 0x22c0c3,
- 0x200382,
- 0x205642,
- 0xca43,
- 0x2003c2,
- 0x216603,
- 0x209482,
- 0x2000c2,
- 0x12eb85,
- 0x7ce0c302,
- 0x7d628b03,
- 0x20e403,
- 0x206a42,
- 0x20a803,
- 0x3559c3,
- 0x7da16603,
- 0x2ed343,
- 0x281ac6,
- 0x160c603,
- 0x12eb85,
- 0x13390b,
- 0x9fe08,
- 0x7d27d6c8,
- 0x7e407,
- 0x6d247,
- 0x175305,
- 0x2a20d,
- 0x39e82,
- 0x115902,
- 0xaa74a,
- 0x8a747,
- 0x27304,
- 0x27343,
- 0x1bffc4,
- 0x7e204ec2,
- 0x7e600ac2,
- 0x7ea02282,
- 0x7ee03342,
- 0x7f209bc2,
- 0x7f604042,
- 0x176c87,
- 0x7fa0c302,
- 0x7fe2dac2,
- 0x80221442,
- 0x806081c2,
- 0x216043,
- 0x12704,
- 0x236cc3,
- 0x80a0c782,
- 0x59648,
- 0x80e076c2,
- 0x4bc07,
- 0x81200042,
- 0x81600d82,
- 0x81a00182,
- 0x81e03dc2,
- 0x82200f42,
- 0x826005c2,
- 0xd30c5,
- 0x215183,
- 0x36c284,
- 0x82a00702,
- 0x82e01882,
- 0x83203c42,
- 0x86ccb,
- 0x83600c42,
- 0x83e44502,
- 0x84206a42,
- 0x84606702,
- 0x84a1d902,
- 0x84e00bc2,
- 0x85205a02,
- 0x8566bf42,
- 0x85a12b02,
- 0x85e04f82,
- 0x86205642,
- 0x86636002,
- 0x86a6f802,
- 0x86e28c42,
- 0x194584,
- 0x217903,
- 0x87200ec2,
- 0x8760fc42,
- 0x87a0ad82,
- 0x87e006c2,
- 0x882003c2,
- 0x88600a82,
- 0x198a47,
- 0x88a16102,
- 0x88e03d82,
- 0x89209482,
- 0x89616002,
- 0x1a214c,
- 0x89a47c82,
- 0x89e22182,
- 0x8a202682,
- 0x8a617042,
- 0x8aa00f02,
- 0x8ae18342,
- 0x8b205842,
- 0x8b60b902,
- 0x8ba75882,
- 0x8be369c2,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x17203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x83a01143,
- 0x217203,
- 0x3afd84,
- 0x228886,
- 0x2fd643,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x2bdd09,
- 0x209382,
- 0x39c403,
- 0x2bacc3,
- 0x36aa05,
- 0x2020c3,
- 0x201143,
- 0x217203,
- 0x28f543,
- 0x221a43,
- 0x34d8c9,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x209382,
- 0x209382,
- 0x201143,
- 0x217203,
- 0x8c62c0c3,
- 0x232c43,
- 0x208883,
- 0x211543,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x9fe08,
- 0x20c302,
- 0x22c0c3,
- 0x20a803,
- 0x216603,
- 0xbdb82,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x8d0ebe82,
- 0x211543,
- 0x20a803,
- 0xca43,
- 0x216603,
- 0x15c1,
- 0x249f84,
- 0x20c302,
- 0x22c0c3,
- 0x200983,
- 0x232c43,
- 0x24b304,
- 0x212483,
- 0x228b03,
- 0x224e44,
- 0x214543,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x236bc3,
- 0x204185,
- 0x221a43,
- 0x205b03,
- 0xca43,
- 0x20c302,
- 0x22c0c3,
- 0x201143,
- 0x20a803,
- 0x216603,
- 0x2000c2,
- 0x248343,
- 0x9fe08,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x22f446,
- 0x224e44,
- 0x214543,
- 0x217b84,
- 0x20a803,
- 0x216603,
- 0x216103,
- 0x22c0c3,
- 0x232c43,
- 0x20a803,
- 0x216603,
- 0x2d7c2,
- 0x1942,
- 0x1458787,
- 0x141347,
- 0x22c0c3,
- 0x39346,
- 0x232c43,
- 0x228b03,
- 0xe7d46,
- 0x20a803,
- 0x216603,
- 0x32b688,
- 0x32e689,
- 0x341509,
- 0x34cd48,
- 0x396f48,
- 0x396f49,
- 0x32370a,
- 0x35f9ca,
- 0x39278a,
- 0x39914a,
- 0x3c840a,
- 0x3d5fcb,
- 0x23d20d,
- 0x367bcf,
- 0x25b050,
- 0x36144d,
- 0x37e04c,
- 0x398e8b,
- 0x6d448,
- 0xebcc8,
- 0x92e85,
- 0x1488147,
- 0xccc85,
- 0x2000c2,
- 0x20f645,
- 0x20e3c3,
- 0x9060c302,
- 0x232c43,
- 0x228b03,
- 0x3d4007,
- 0x20a443,
- 0x211543,
- 0x20a803,
- 0x24bbc3,
- 0x213dc3,
- 0x209a83,
- 0x20ca43,
- 0x216603,
+ 0x308003,
+ 0x21bc83,
+ 0x23c803,
+ 0x219a04,
+ 0x21a3c3,
+ 0x2125c3,
+ 0x3dc3,
+ 0x242543,
+ 0x30a104,
+ 0x207783,
+ 0x308003,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x203dc3,
+ 0x242543,
+ 0x3bd187,
+ 0x214a83,
+ 0x27b0c7,
+ 0x397206,
+ 0x216c83,
+ 0x21bb43,
+ 0x308003,
+ 0x206c03,
+ 0x221dc4,
+ 0x28a404,
+ 0x3383c6,
+ 0x213a43,
+ 0x21a3c3,
+ 0x242543,
+ 0x24f8c5,
+ 0x2af384,
+ 0x323b43,
+ 0x2ce043,
+ 0x2d44c7,
+ 0x2cd845,
+ 0x68703,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x23c803,
+ 0x21a3c3,
+ 0x6e544,
+ 0x242543,
+ 0x14583,
+ 0x7c30988c,
+ 0x53547,
+ 0xe4846,
+ 0x91487,
+ 0x67f05,
+ 0x202b02,
+ 0x247403,
+ 0x214f03,
+ 0x202703,
+ 0x7ce14a83,
+ 0x208c02,
+ 0x232dc3,
+ 0x207083,
+ 0x308003,
+ 0x221dc4,
+ 0x2059c3,
+ 0x21b6c3,
+ 0x23c803,
+ 0x219a04,
+ 0x7d20ce02,
+ 0x21a3c3,
+ 0x242543,
+ 0x2308c3,
+ 0x21bd03,
+ 0x21a443,
+ 0x20c782,
+ 0x207783,
+ 0x9a048,
+ 0x308003,
+ 0x3a83,
+ 0x2135c4,
+ 0x202703,
+ 0x201242,
+ 0x214a83,
+ 0x235b44,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x21bc83,
+ 0x3473c4,
+ 0x306c44,
+ 0x2e2406,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x2141c3,
0x253c46,
- 0x219f82,
- 0x205b03,
- 0x9fe08,
+ 0x34c8b,
+ 0x28886,
+ 0xec90a,
+ 0x11b94a,
+ 0x9a048,
+ 0x2136c4,
+ 0x7e614a83,
+ 0x2026c4,
+ 0x232dc3,
+ 0x270744,
+ 0x308003,
+ 0x2f3983,
+ 0x23c803,
+ 0x21a3c3,
+ 0x1b4103,
+ 0x242543,
+ 0x4cbc3,
+ 0x347f8b,
+ 0x3ca20a,
+ 0x3e010c,
+ 0xebe48,
0x2000c2,
- 0x248343,
- 0x20c302,
- 0x22c0c3,
- 0x232c43,
- 0x228b03,
- 0x224e44,
- 0x211543,
- 0x20a803,
- 0x216603,
- 0x20c603,
- 0x141347,
- 0x8582,
- 0x2b44,
- 0x15c87c6,
+ 0x201242,
+ 0x200382,
+ 0x22d805,
+ 0x221dc4,
+ 0x209e82,
+ 0x23c803,
+ 0x306c44,
+ 0x208482,
+ 0x2003c2,
+ 0x2090c2,
+ 0x20c782,
+ 0x2703,
+ 0x15702,
+ 0x2cb209,
+ 0x365308,
+ 0x307e89,
+ 0x2073c9,
+ 0x20b40a,
+ 0x210f0a,
+ 0x206082,
+ 0x2167c2,
+ 0x1242,
+ 0x214a83,
+ 0x22ba02,
+ 0x240c46,
+ 0x377dc2,
+ 0x208d42,
+ 0x26fd0e,
+ 0x21410e,
+ 0x27e307,
+ 0x21a347,
+ 0x24dc82,
+ 0x232dc3,
+ 0x308003,
+ 0x210d82,
+ 0x2005c2,
+ 0x1bac3,
+ 0x235d4f,
+ 0x21fb02,
+ 0x2b8887,
+ 0x3520c7,
+ 0x2bc287,
+ 0x2e9ccc,
+ 0x2dc18c,
+ 0x20c304,
+ 0x38d04a,
+ 0x214042,
+ 0x201e42,
+ 0x2c5104,
+ 0x200702,
+ 0x2cc342,
+ 0x2dc3c4,
+ 0x20fe82,
+ 0x202042,
+ 0x1a8c3,
+ 0x299807,
+ 0x23a705,
+ 0x223502,
+ 0x23cd04,
+ 0x203f82,
+ 0x2eba08,
+ 0x21a3c3,
+ 0x376b08,
+ 0x2029c2,
+ 0x20c4c5,
+ 0x396e06,
+ 0x242543,
+ 0x20a882,
+ 0x2fa607,
+ 0xeb02,
+ 0x39e785,
+ 0x3c2f45,
+ 0x206442,
+ 0x20b382,
+ 0x33a90a,
+ 0x35094a,
+ 0x23c7c2,
+ 0x2a4284,
+ 0x203282,
+ 0x3d3788,
+ 0x20a5c2,
+ 0x359208,
+ 0xf01,
+ 0x314447,
+ 0x3149c9,
+ 0x2b7402,
+ 0x319985,
+ 0x3b9c45,
+ 0x2184cb,
+ 0x33894c,
+ 0x22c088,
+ 0x32bb08,
+ 0x21d642,
+ 0x2ac882,
0x2000c2,
- 0x20c302,
- 0x228b03,
- 0x211543,
- 0x216603,
+ 0x9a048,
+ 0x201242,
+ 0x214a83,
+ 0x200382,
+ 0x208482,
+ 0x3dc3,
+ 0x2003c2,
+ 0x242543,
+ 0x2090c2,
+ 0x2000c2,
+ 0x139b05,
+ 0x7fa01242,
+ 0x1099c4,
+ 0x37e85,
+ 0x80708003,
+ 0x21a8c3,
+ 0x209e82,
+ 0x21a3c3,
+ 0x3b68c3,
+ 0x80a42543,
+ 0x2f7103,
+ 0x274d46,
+ 0x160e2c3,
+ 0x139b05,
+ 0x13f10b,
+ 0x9a048,
+ 0x7ff02e08,
+ 0x5c1c7,
+ 0x802c108a,
+ 0x6ddc7,
+ 0x97805,
+ 0x2a54d,
+ 0x8e242,
+ 0x118682,
+ 0xe01,
+ 0xad28a,
+ 0x150787,
+ 0x20c04,
+ 0x20c43,
+ 0x3c704,
+ 0x81202842,
+ 0x81600ac2,
+ 0x81a01182,
+ 0x81e02d02,
+ 0x82206b42,
+ 0x826086c2,
+ 0x17e707,
+ 0x82a01242,
+ 0x82e2ec02,
+ 0x8321f2c2,
+ 0x83602a42,
+ 0x214103,
+ 0xca04,
+ 0x22dcc3,
+ 0x83a0e442,
+ 0x5a988,
+ 0x83e015c2,
+ 0x4e2c7,
+ 0x1ad887,
+ 0x84200042,
+ 0x84600d82,
+ 0x84a00182,
+ 0x84e06182,
+ 0x85200f42,
+ 0x856005c2,
+ 0xf4185,
+ 0x24dec3,
+ 0x35c004,
+ 0x85a00702,
+ 0x85e14d42,
+ 0x86206002,
+ 0x7a04b,
+ 0x86600c42,
+ 0x86e01f42,
+ 0x87209e82,
+ 0x87610942,
+ 0x87a1d542,
+ 0x87e00bc2,
+ 0x88202382,
+ 0x8866c9c2,
+ 0x88a0ce02,
+ 0x88e03142,
+ 0x89208482,
+ 0x89637242,
+ 0x89a510c2,
+ 0x89e43802,
+ 0x5684,
+ 0x310543,
+ 0x8a200ec2,
+ 0x8a610e82,
+ 0x8aa0e742,
+ 0x8ae006c2,
+ 0x8b2003c2,
+ 0x8b600a82,
+ 0xf6bc8,
+ 0x91fc7,
+ 0x8ba141c2,
+ 0x8be06142,
+ 0x8c2090c2,
+ 0x8c6023c2,
+ 0x1aec8c,
+ 0x8ca02c02,
+ 0x8ce25b82,
+ 0x8d20f482,
+ 0x8d603642,
+ 0x8da00f02,
+ 0x8de0b582,
+ 0x8e201342,
+ 0x8e607302,
+ 0x8ea76002,
+ 0x8ee76542,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x23703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x86a059c3,
+ 0x223703,
+ 0x3c0b44,
+ 0x307d86,
+ 0x306403,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x374689,
+ 0x215702,
+ 0x39b6c3,
+ 0x2c2a43,
+ 0x2894c5,
+ 0x207083,
+ 0x2059c3,
+ 0x223703,
+ 0x267d83,
+ 0x211243,
+ 0x3c4409,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x215702,
+ 0x215702,
+ 0x2059c3,
+ 0x223703,
+ 0x8f614a83,
+ 0x232dc3,
+ 0x207603,
+ 0x23c803,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x9a048,
+ 0x201242,
+ 0x214a83,
+ 0x21a3c3,
+ 0x242543,
+ 0x141842,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x901192c2,
+ 0x23c803,
+ 0x21a3c3,
+ 0x3dc3,
+ 0x242543,
+ 0x1301,
+ 0x24c0c4,
+ 0x201242,
+ 0x214a83,
+ 0x200983,
+ 0x232dc3,
+ 0x24d9c4,
+ 0x228503,
+ 0x308003,
+ 0x221dc4,
+ 0x21bc83,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x22b983,
+ 0x208805,
+ 0x211243,
+ 0x207783,
+ 0x882,
+ 0x3dc3,
+ 0x201242,
+ 0x214a83,
+ 0x2059c3,
+ 0x21a3c3,
+ 0x242543,
+ 0x2000c2,
+ 0x202703,
+ 0x9a048,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x22f7c6,
+ 0x221dc4,
+ 0x21bc83,
+ 0x219a04,
+ 0x21a3c3,
+ 0x242543,
+ 0x2141c3,
+ 0x29904,
+ 0x214a83,
+ 0x239c3,
+ 0x232dc3,
+ 0x9e82,
+ 0x21a3c3,
+ 0x242543,
+ 0x2aec2,
+ 0x2982,
+ 0x147ee07,
+ 0x1807,
+ 0x214a83,
+ 0x28886,
+ 0x232dc3,
+ 0x308003,
+ 0xedf86,
+ 0x21a3c3,
+ 0x242543,
+ 0x328e48,
+ 0x32b949,
+ 0x33e209,
+ 0x34ae08,
+ 0x399488,
+ 0x399489,
+ 0x322c0a,
+ 0x3602ca,
+ 0x39424a,
+ 0x39abca,
+ 0x3ca20a,
+ 0x3d818b,
+ 0x30838d,
+ 0x23fd4f,
+ 0x35d210,
+ 0x361d4d,
+ 0x37d8cc,
+ 0x39a90b,
+ 0x6dfc8,
+ 0x11d548,
+ 0x19d705,
+ 0x1486107,
+ 0xd7445,
+ 0x2000c2,
+ 0x2cd685,
+ 0x202003,
+ 0x93601242,
+ 0x232dc3,
+ 0x308003,
+ 0x27e7c7,
+ 0x25cc03,
+ 0x23c803,
+ 0x21a3c3,
+ 0x24e283,
+ 0x2125c3,
+ 0x206a03,
+ 0x203dc3,
+ 0x242543,
+ 0x252b06,
+ 0x233442,
+ 0x207783,
+ 0x9a048,
+ 0x2000c2,
+ 0x202703,
+ 0x201242,
+ 0x214a83,
+ 0x232dc3,
+ 0x308003,
+ 0x221dc4,
+ 0x23c803,
+ 0x21a3c3,
+ 0x242543,
+ 0x20e2c3,
+ 0x1807,
+ 0xb342,
+ 0x68b44,
+ 0x151c306,
+ 0x2000c2,
+ 0x201242,
+ 0x308003,
+ 0x23c803,
+ 0x242543,
}
// children is the list of nodes' children, the parent's wildcard bit and the
@@ -9462,18 +9554,18 @@ var children = [...]uint32{
0x40000000,
0x50000000,
0x60000000,
- 0x17f85f8,
- 0x17fc5fe,
- 0x18005ff,
- 0x1824600,
- 0x1980609,
- 0x1998660,
- 0x19ac666,
- 0x19c466b,
- 0x19e4671,
- 0x19fc679,
- 0x1a1467f,
- 0x1a2c685,
+ 0x17ec5f5,
+ 0x17f05fb,
+ 0x17f45fc,
+ 0x18185fd,
+ 0x1970606,
+ 0x198865c,
+ 0x199c662,
+ 0x19b4667,
+ 0x19d466d,
+ 0x19f4675,
+ 0x1a0c67d,
+ 0x1a2c683,
0x1a3068b,
0x1a5868c,
0x1a5c696,
@@ -9482,516 +9574,501 @@ var children = [...]uint32{
0x1a7c69e,
0x1ab869f,
0x1abc6ae,
- 0x61ac46af,
- 0x21acc6b1,
- 0x1b146b3,
- 0x1b186c5,
- 0x1b3c6c6,
- 0x1b406cf,
+ 0x1ac06af,
+ 0x61ac86b0,
+ 0x21ad06b2,
+ 0x1b186b4,
+ 0x1b1c6c6,
+ 0x1b406c7,
0x1b446d0,
- 0x1b586d1,
- 0x1b5c6d6,
- 0x1b8c6d7,
- 0x1ba86e3,
- 0x1bd06ea,
- 0x1be06f4,
- 0x1be46f8,
- 0x1c7c6f9,
- 0x1c9071f,
- 0x1ca4724,
- 0x1cdc729,
- 0x1cec737,
- 0x1d0073b,
- 0x1d18740,
- 0x1dbc746,
- 0x1fc076f,
- 0x1fc47f0,
- 0x20307f1,
- 0x209c80c,
- 0x20b4827,
- 0x20c882d,
- 0x20cc832,
- 0x20d4833,
- 0x20e8835,
- 0x20ec83a,
- 0x210883b,
- 0x2158842,
- 0x215c856,
- 0x22160857,
- 0x217c858,
- 0x218085f,
+ 0x1b486d1,
+ 0x1b5c6d2,
+ 0x1b606d7,
+ 0x1b806d8,
+ 0x1bb06e0,
+ 0x1bcc6ec,
+ 0x1bf46f3,
+ 0x1c046fd,
+ 0x1c08701,
+ 0x1ca0702,
+ 0x1cb4728,
+ 0x1cc872d,
+ 0x1d00732,
+ 0x1d10740,
+ 0x1d24744,
+ 0x1d3c749,
+ 0x1de074f,
+ 0x1fe4778,
+ 0x1fe87f9,
+ 0x20547fa,
+ 0x20c0815,
+ 0x20d8830,
+ 0x20ec836,
+ 0x20f083b,
+ 0x20f883c,
+ 0x210c83e,
+ 0x2110843,
+ 0x2130844,
+ 0x218084c,
0x2184860,
- 0x21a8861,
- 0x21e886a,
- 0x21ec87a,
- 0x621f087b,
- 0x220887c,
- 0x222c882,
- 0x223888b,
- 0x224888e,
- 0x22fc892,
- 0x23008bf,
- 0x223108c0,
- 0x223148c4,
- 0x2231c8c5,
- 0x23748c7,
- 0x23788dd,
- 0x288c8de,
- 0x2890a23,
- 0x22938a24,
- 0x2293ca4e,
- 0x22940a4f,
- 0x2294ca50,
- 0x22950a53,
- 0x2295ca54,
- 0x22960a57,
- 0x22964a58,
- 0x22968a59,
- 0x2296ca5a,
- 0x22970a5b,
- 0x2297ca5c,
- 0x22980a5f,
- 0x2298ca60,
+ 0x22188861,
+ 0x21a4862,
+ 0x21a8869,
+ 0x21ac86a,
+ 0x21d086b,
+ 0x2214874,
+ 0x2218885,
+ 0x6221c886,
+ 0x2238887,
+ 0x226488e,
+ 0x2270899,
+ 0x228089c,
+ 0x23348a0,
+ 0x23388cd,
+ 0x223488ce,
+ 0x2234c8d2,
+ 0x223548d3,
+ 0x23ac8d5,
+ 0x23b08eb,
+ 0x23b48ec,
+ 0x28dc8ed,
+ 0x28e0a37,
+ 0x22988a38,
+ 0x2298ca62,
0x22990a63,
- 0x22994a64,
- 0x22998a65,
- 0x229a4a66,
- 0x229a8a69,
- 0x229b4a6a,
+ 0x2299ca64,
+ 0x229a0a67,
+ 0x229aca68,
+ 0x229b0a6b,
+ 0x229b4a6c,
0x229b8a6d,
0x229bca6e,
0x229c0a6f,
- 0x29c4a70,
- 0x229c8a71,
- 0x229d4a72,
- 0x229d8a75,
- 0x29dca76,
- 0x29e4a77,
- 0x629f0a79,
- 0x2a34a7c,
- 0x22a54a8d,
- 0x22a58a95,
- 0x22a5ca96,
- 0x22a64a97,
- 0x22a68a99,
- 0x2a6ca9a,
- 0x22a70a9b,
- 0x22a74a9c,
- 0x22a78a9d,
- 0x22a7ca9e,
- 0x2a84a9f,
- 0x2a8caa1,
- 0x2a90aa3,
- 0x2aacaa4,
- 0x2ac4aab,
- 0x2ac8ab1,
- 0x2ad8ab2,
- 0x2ae4ab6,
- 0x2b18ab9,
+ 0x229cca70,
+ 0x229d0a73,
+ 0x229dca74,
+ 0x229e0a77,
+ 0x229e4a78,
+ 0x229e8a79,
+ 0x229f4a7a,
+ 0x229f8a7d,
+ 0x22a04a7e,
+ 0x22a08a81,
+ 0x22a0ca82,
+ 0x22a10a83,
+ 0x2a14a84,
+ 0x22a18a85,
+ 0x22a24a86,
+ 0x22a28a89,
+ 0x2a2ca8a,
+ 0x2a34a8b,
+ 0x62a40a8d,
+ 0x2a84a90,
+ 0x22aa4aa1,
+ 0x22aa8aa9,
+ 0x22aacaaa,
+ 0x22ab0aab,
+ 0x22ab8aac,
+ 0x22abcaae,
+ 0x2ac0aaf,
+ 0x22ac4ab0,
+ 0x22ac8ab1,
+ 0x22accab2,
+ 0x22ad0ab3,
+ 0x2ad8ab4,
+ 0x2ae0ab6,
+ 0x2ae4ab8,
+ 0x2b00ab9,
+ 0x2b18ac0,
0x2b1cac6,
- 0x2b34ac7,
- 0x22b3cacd,
- 0x22b40acf,
- 0x22b48ad0,
- 0x2c40ad2,
- 0x22c44b10,
- 0x2c4cb11,
- 0x2c50b13,
- 0x22c54b14,
- 0x2c58b15,
- 0x2c70b16,
- 0x2c74b1c,
- 0x2c78b1d,
- 0x2c7cb1e,
- 0x2c94b1f,
- 0x2ca8b25,
- 0x2cd0b2a,
- 0x2cf0b34,
- 0x2cf4b3c,
- 0x62cf8b3d,
- 0x2d2cb3e,
- 0x2d30b4b,
- 0x22d34b4c,
- 0x2d38b4d,
- 0x2d60b4e,
+ 0x2b2cac7,
+ 0x2b38acb,
+ 0x2b6cace,
+ 0x2b74adb,
+ 0x22b78add,
+ 0x2b90ade,
+ 0x22b98ae4,
+ 0x22b9cae6,
+ 0x22ba4ae7,
+ 0x2ca0ae9,
+ 0x22ca4b28,
+ 0x2cacb29,
+ 0x2cb0b2b,
+ 0x22cb4b2c,
+ 0x2cb8b2d,
+ 0x2ce0b2e,
+ 0x2ce4b38,
+ 0x2ce8b39,
+ 0x2cecb3a,
+ 0x2d04b3b,
+ 0x2d18b41,
+ 0x2d40b46,
+ 0x2d60b50,
0x2d64b58,
- 0x2d88b59,
- 0x2d8cb62,
- 0x2da0b63,
- 0x2da4b68,
+ 0x62d68b59,
+ 0x2d9cb5a,
+ 0x2da0b67,
+ 0x22da4b68,
0x2da8b69,
- 0x2dc8b6a,
- 0x2de4b72,
- 0x2de8b79,
- 0x22decb7a,
- 0x2df0b7b,
- 0x2df4b7c,
- 0x2df8b7d,
- 0x2e00b7e,
- 0x2e14b80,
+ 0x2dd0b6a,
+ 0x2dd4b74,
+ 0x2df8b75,
+ 0x2dfcb7e,
+ 0x2e10b7f,
+ 0x2e14b84,
0x2e18b85,
- 0x2e1cb86,
- 0x2e44b87,
- 0x2e48b91,
- 0x2ebcb92,
- 0x2ec0baf,
- 0x2ec4bb0,
- 0x2ee4bb1,
- 0x2ef8bb9,
- 0x2f0cbbe,
- 0x2f24bc3,
- 0x2f40bc9,
- 0x2f58bd0,
- 0x2f5cbd6,
- 0x2f74bd7,
- 0x2f90bdd,
- 0x2f94be4,
- 0x2fb4be5,
- 0x2fd4bed,
- 0x2ff0bf5,
- 0x3054bfc,
- 0x3070c15,
- 0x3080c1c,
- 0x3084c20,
- 0x309cc21,
- 0x30e0c27,
- 0x3160c38,
- 0x3190c58,
- 0x3194c64,
- 0x31a0c65,
- 0x31c0c68,
- 0x31c4c70,
- 0x31e8c71,
- 0x31f0c7a,
- 0x322cc7c,
- 0x327cc8b,
- 0x3280c9f,
- 0x3284ca0,
- 0x3354ca1,
- 0x23358cd5,
- 0x2335ccd6,
- 0x3360cd7,
- 0x23364cd8,
- 0x23368cd9,
- 0x336ccda,
- 0x23370cdb,
- 0x23380cdc,
- 0x23384ce0,
- 0x23388ce1,
- 0x2338cce2,
- 0x23390ce3,
- 0x33a8ce4,
- 0x33cccea,
- 0x33eccf3,
- 0x3a58cfb,
- 0x3a64e96,
- 0x3a84e99,
- 0x3c44ea1,
- 0x3d14f11,
- 0x3d84f45,
- 0x3ddcf61,
- 0x3ec4f77,
- 0x3f1cfb1,
- 0x3f58fc7,
- 0x4054fd6,
- 0x4121015,
- 0x41b9048,
- 0x424906e,
- 0x42ad092,
- 0x44e50ab,
- 0x459d139,
- 0x4669167,
- 0x46b519a,
- 0x473d1ad,
- 0x47791cf,
- 0x47c91de,
- 0x48411f2,
- 0x64845210,
- 0x64849211,
- 0x6484d212,
- 0x48c9213,
- 0x4925232,
- 0x49a1249,
- 0x4a19268,
- 0x4a99286,
- 0x4b052a6,
- 0x4c312c1,
- 0x4c8930c,
- 0x64c8d322,
- 0x4d25323,
- 0x4d2d349,
- 0x24d3134b,
- 0x4db934c,
- 0x4e0536e,
- 0x4e6d381,
- 0x4f1539b,
- 0x4fdd3c5,
- 0x50453f7,
- 0x5159411,
- 0x6515d456,
- 0x65161457,
- 0x51bd458,
- 0x521946f,
- 0x52a9486,
- 0x53254aa,
- 0x53694c9,
- 0x544d4da,
- 0x5481513,
- 0x54e1520,
- 0x5555538,
- 0x55dd555,
- 0x561d577,
- 0x568d587,
- 0x656915a3,
- 0x56b95a4,
- 0x56bd5ae,
- 0x56d55af,
- 0x56f15b5,
- 0x57355bc,
- 0x57455cd,
- 0x575d5d1,
- 0x57d55d7,
- 0x57dd5f5,
- 0x57f95f7,
- 0x580d5fe,
- 0x5829603,
- 0x585560a,
- 0x5859615,
- 0x5861616,
- 0x5875618,
- 0x589561d,
- 0x58a5625,
- 0x58b1629,
- 0x58ed62c,
- 0x58f563b,
- 0x590963d,
- 0x592d642,
- 0x593964b,
- 0x594164e,
- 0x5965650,
- 0x5989659,
- 0x59a1662,
- 0x59a5668,
- 0x59ad669,
- 0x59b166b,
- 0x5a5166c,
- 0x5a55694,
- 0x5a59695,
- 0x5a5d696,
- 0x5a81697,
- 0x5aa56a0,
- 0x5ac16a9,
- 0x5ad56b0,
- 0x5ae96b5,
- 0x5af16ba,
- 0x5af96bc,
- 0x5b016be,
- 0x5b196c0,
- 0x5b296c6,
- 0x5b2d6ca,
- 0x5b496cb,
- 0x63d16d2,
- 0x64098f4,
- 0x6435902,
- 0x645190d,
- 0x6471914,
- 0x649191c,
- 0x64d5924,
- 0x64dd935,
- 0x264e1937,
- 0x264e5938,
- 0x64ed939,
- 0x66c593b,
- 0x266c99b1,
- 0x66cd9b2,
- 0x266dd9b3,
- 0x266e59b7,
- 0x266f19b9,
- 0x66f59bc,
- 0x266fd9bd,
- 0x67059bf,
- 0x67159c1,
- 0x673d9c5,
- 0x67799cf,
- 0x677d9de,
- 0x67b59df,
- 0x67d99ed,
- 0x73319f6,
- 0x7335ccc,
- 0x7339ccd,
- 0x2733dcce,
- 0x7341ccf,
- 0x27345cd0,
- 0x7349cd1,
- 0x27355cd2,
- 0x7359cd5,
- 0x735dcd6,
- 0x27361cd7,
- 0x7365cd8,
- 0x2736dcd9,
- 0x7371cdb,
- 0x7375cdc,
- 0x27385cdd,
- 0x7389ce1,
- 0x738dce2,
- 0x7391ce3,
- 0x7395ce4,
- 0x27399ce5,
- 0x739dce6,
- 0x73a1ce7,
- 0x73a5ce8,
- 0x73a9ce9,
- 0x273b1cea,
- 0x73b5cec,
- 0x73b9ced,
- 0x73bdcee,
- 0x273c1cef,
- 0x73c5cf0,
- 0x273cdcf1,
- 0x273d1cf3,
- 0x73edcf4,
- 0x7405cfb,
- 0x27409d01,
- 0x744dd02,
- 0x7451d13,
- 0x7475d14,
- 0x7481d1d,
- 0x7485d20,
- 0x7489d21,
- 0x7645d22,
- 0x27649d91,
- 0x27651d92,
- 0x27655d94,
- 0x27659d95,
- 0x7661d96,
- 0x773dd98,
- 0x27749dcf,
- 0x2774ddd2,
- 0x27751dd3,
- 0x27755dd4,
- 0x7759dd5,
- 0x7785dd6,
- 0x7789de1,
- 0x778dde2,
- 0x77b1de3,
- 0x77bddec,
- 0x77dddef,
- 0x77e1df7,
- 0x7819df8,
- 0x7ac9e06,
- 0x7b85eb2,
- 0x7b89ee1,
- 0x7b8dee2,
- 0x7ba1ee3,
- 0x7bd5ee8,
- 0x7c0def5,
- 0x27c11f03,
- 0x7c2df04,
- 0x7c55f0b,
- 0x7c59f15,
- 0x7c7df16,
- 0x7c99f1f,
- 0x7cc1f26,
- 0x7cd1f30,
- 0x7cd5f34,
- 0x7cd9f35,
- 0x7d11f36,
- 0x7d1df44,
- 0x7d45f47,
- 0x7dc5f51,
- 0x27dc9f71,
- 0x7dd9f72,
- 0x7de9f76,
- 0x7e05f7a,
- 0x7e25f81,
- 0x7e29f89,
- 0x7e3df8a,
- 0x7e51f8f,
- 0x7e55f94,
- 0x7e59f95,
- 0x7e5df96,
- 0x7e7df97,
- 0x7f25f9f,
- 0x7f29fc9,
- 0x7f45fca,
- 0x7f69fd1,
- 0x7f6dfda,
- 0x7f75fdb,
- 0x7f91fdd,
- 0x7f99fe4,
- 0x7fadfe6,
- 0x7fcdfeb,
- 0x7fe9ff3,
- 0x7ff5ffa,
- 0x800dffd,
- 0x8046003,
- 0x811a011,
- 0x811e046,
- 0x8132047,
- 0x813a04c,
- 0x815204e,
- 0x8156054,
- 0x8162055,
- 0x8166058,
- 0x816a059,
- 0x816e05a,
- 0x819205b,
- 0x81d2064,
- 0x81d6074,
- 0x81f6075,
- 0x824607d,
- 0x826a091,
- 0x2826e09a,
- 0x827609b,
- 0x82ce09d,
- 0x82d20b3,
- 0x82d60b4,
- 0x82da0b5,
- 0x831e0b6,
- 0x832e0c7,
- 0x836e0cb,
- 0x83720db,
- 0x83a20dc,
- 0x84ee0e8,
- 0x851613b,
- 0x8546145,
- 0x8566151,
- 0x2856e159,
- 0x857615b,
- 0x858215d,
- 0x8696160,
- 0x86a21a5,
- 0x86ae1a8,
- 0x86ba1ab,
- 0x86c61ae,
- 0x86d21b1,
- 0x86de1b4,
- 0x86ea1b7,
- 0x86f61ba,
- 0x87021bd,
- 0x870e1c0,
- 0x871a1c3,
- 0x87261c6,
- 0x87321c9,
- 0x873a1cc,
- 0x87461ce,
- 0x87521d1,
- 0x875e1d4,
- 0x876a1d7,
- 0x87761da,
- 0x87821dd,
- 0x878e1e0,
- 0x879a1e3,
- 0x87a61e6,
- 0x87b21e9,
- 0x87be1ec,
- 0x87ea1ef,
- 0x87f61fa,
- 0x88021fd,
- 0x880e200,
- 0x881a203,
- 0x8826206,
- 0x882e209,
+ 0x2e38b86,
+ 0x2e54b8e,
+ 0x2e58b95,
+ 0x22e5cb96,
+ 0x2e60b97,
+ 0x2e64b98,
+ 0x2e68b99,
+ 0x2e70b9a,
+ 0x2e84b9c,
+ 0x2e88ba1,
+ 0x2e8cba2,
+ 0x2eb4ba3,
+ 0x2eb8bad,
+ 0x2f2cbae,
+ 0x2f30bcb,
+ 0x2f34bcc,
+ 0x2f54bcd,
+ 0x2f6cbd5,
+ 0x2f70bdb,
+ 0x2f84bdc,
+ 0x2f9cbe1,
+ 0x2fbcbe7,
+ 0x2fd4bef,
+ 0x2fd8bf5,
+ 0x2ff4bf6,
+ 0x3010bfd,
+ 0x3014c04,
+ 0x3040c05,
+ 0x3060c10,
+ 0x3080c18,
+ 0x30e4c20,
+ 0x3104c39,
+ 0x3120c41,
+ 0x3124c48,
+ 0x313cc49,
+ 0x3180c4f,
+ 0x3200c60,
+ 0x3230c80,
+ 0x3234c8c,
+ 0x3240c8d,
+ 0x3260c90,
+ 0x3264c98,
+ 0x3288c99,
+ 0x3290ca2,
+ 0x32ccca4,
+ 0x3320cb3,
+ 0x3324cc8,
+ 0x3328cc9,
+ 0x3404cca,
+ 0x2340cd01,
+ 0x23410d03,
+ 0x23414d04,
+ 0x3418d05,
+ 0x2341cd06,
+ 0x23420d07,
+ 0x3424d08,
+ 0x23428d09,
+ 0x23438d0a,
+ 0x2343cd0e,
+ 0x23440d0f,
+ 0x23444d10,
+ 0x23448d11,
+ 0x2344cd12,
+ 0x3464d13,
+ 0x3488d19,
+ 0x34a8d22,
+ 0x3b14d2a,
+ 0x3b20ec5,
+ 0x3b40ec8,
+ 0x3d00ed0,
+ 0x3dd0f40,
+ 0x3e40f74,
+ 0x3e98f90,
+ 0x3f80fa6,
+ 0x3fd8fe0,
+ 0x4014ff6,
+ 0x4111005,
+ 0x41dd044,
+ 0x4275077,
+ 0x430509d,
+ 0x43690c1,
+ 0x45a10da,
+ 0x4659168,
+ 0x4725196,
+ 0x47711c9,
+ 0x47f91dc,
+ 0x48351fe,
+ 0x488520d,
+ 0x48fd221,
+ 0x6490123f,
+ 0x64905240,
+ 0x64909241,
+ 0x4985242,
+ 0x49e1261,
+ 0x4a5d278,
+ 0x4ad5297,
+ 0x4b552b5,
+ 0x4bc12d5,
+ 0x4ced2f0,
+ 0x4d4533b,
+ 0x64d49351,
+ 0x4de1352,
+ 0x4de9378,
+ 0x24ded37a,
+ 0x4e7537b,
+ 0x4ec139d,
+ 0x4f293b0,
+ 0x4fd13ca,
+ 0x50993f4,
+ 0x5101426,
+ 0x5215440,
+ 0x65219485,
+ 0x6521d486,
+ 0x5279487,
+ 0x52d549e,
+ 0x53654b5,
+ 0x53e14d9,
+ 0x54254f8,
+ 0x5509509,
+ 0x553d542,
+ 0x559d54f,
+ 0x5611567,
+ 0x5699584,
+ 0x56d95a6,
+ 0x57495b6,
+ 0x6574d5d2,
+ 0x57755d3,
+ 0x57795dd,
+ 0x57a95de,
+ 0x57c55ea,
+ 0x58095f1,
+ 0x5819602,
+ 0x5831606,
+ 0x58a960c,
+ 0x58b162a,
+ 0x58cd62c,
+ 0x58e1633,
+ 0x58fd638,
+ 0x592963f,
+ 0x592d64a,
+ 0x593564b,
+ 0x594964d,
+ 0x5969652,
+ 0x597965a,
+ 0x598565e,
+ 0x59c1661,
+ 0x59c9670,
+ 0x59dd672,
+ 0x5a05677,
+ 0x5a11681,
+ 0x5a19684,
+ 0x5a41686,
+ 0x5a65690,
+ 0x5a7d699,
+ 0x5a8169f,
+ 0x5a896a0,
+ 0x5a9d6a2,
+ 0x5b456a7,
+ 0x5b496d1,
+ 0x5b4d6d2,
+ 0x5b516d3,
+ 0x5b756d4,
+ 0x5b996dd,
+ 0x5bb56e6,
+ 0x5bc96ed,
+ 0x5bdd6f2,
+ 0x5be56f7,
+ 0x5bed6f9,
+ 0x5bf56fb,
+ 0x5c0d6fd,
+ 0x5c1d703,
+ 0x5c21707,
+ 0x5c3d708,
+ 0x64c570f,
+ 0x64fd931,
+ 0x652993f,
+ 0x654594a,
+ 0x6565951,
+ 0x6585959,
+ 0x65c9961,
+ 0x65d1972,
+ 0x265d5974,
+ 0x265d9975,
+ 0x65e1976,
+ 0x67cd978,
+ 0x267d19f3,
+ 0x67d59f4,
+ 0x267d99f5,
+ 0x267e99f6,
+ 0x267f19fa,
+ 0x267fd9fc,
+ 0x68019ff,
+ 0x26809a00,
+ 0x6811a02,
+ 0x6821a04,
+ 0x6849a08,
+ 0x6885a12,
+ 0x6889a21,
+ 0x68c1a22,
+ 0x68e5a30,
+ 0x743da39,
+ 0x7441d0f,
+ 0x7445d10,
+ 0x27449d11,
+ 0x744dd12,
+ 0x27451d13,
+ 0x7455d14,
+ 0x27461d15,
+ 0x7465d18,
+ 0x7469d19,
+ 0x2746dd1a,
+ 0x7471d1b,
+ 0x27479d1c,
+ 0x747dd1e,
+ 0x7481d1f,
+ 0x27491d20,
+ 0x7495d24,
+ 0x7499d25,
+ 0x749dd26,
+ 0x74a1d27,
+ 0x274a5d28,
+ 0x74a9d29,
+ 0x74add2a,
+ 0x74b1d2b,
+ 0x74b5d2c,
+ 0x274bdd2d,
+ 0x74c1d2f,
+ 0x74c5d30,
+ 0x74c9d31,
+ 0x274cdd32,
+ 0x74d1d33,
+ 0x274d9d34,
+ 0x274ddd36,
+ 0x74f9d37,
+ 0x7511d3e,
+ 0x7555d44,
+ 0x7559d55,
+ 0x757dd56,
+ 0x7589d5f,
+ 0x758dd62,
+ 0x7591d63,
+ 0x7755d64,
+ 0x27759dd5,
+ 0x27761dd6,
+ 0x27765dd8,
+ 0x27769dd9,
+ 0x7771dda,
+ 0x784dddc,
+ 0x27859e13,
+ 0x2785de16,
+ 0x27861e17,
+ 0x27865e18,
+ 0x7869e19,
+ 0x7895e1a,
+ 0x78a1e25,
+ 0x78a5e28,
+ 0x78c9e29,
+ 0x78d5e32,
+ 0x78f5e35,
+ 0x78f9e3d,
+ 0x7931e3e,
+ 0x7be1e4c,
+ 0x7c9def8,
+ 0x7ca1f27,
+ 0x7ca5f28,
+ 0x7cb9f29,
+ 0x7cbdf2e,
+ 0x7cf1f2f,
+ 0x7d29f3c,
+ 0x27d2df4a,
+ 0x7d49f4b,
+ 0x7d71f52,
+ 0x7d75f5c,
+ 0x7d99f5d,
+ 0x7db5f66,
+ 0x7dddf6d,
+ 0x7dedf77,
+ 0x7df1f7b,
+ 0x7df5f7c,
+ 0x7e2df7d,
+ 0x7e39f8b,
+ 0x7e61f8e,
+ 0x7ee1f98,
+ 0x27ee5fb8,
+ 0x7ef5fb9,
+ 0x7f05fbd,
+ 0x7f21fc1,
+ 0x7f41fc8,
+ 0x7f45fd0,
+ 0x7f59fd1,
+ 0x7f6dfd6,
+ 0x7f71fdb,
+ 0x7f75fdc,
+ 0x7f79fdd,
+ 0x7f99fde,
+ 0x8041fe6,
+ 0x8046010,
+ 0x8062011,
+ 0x808a018,
+ 0x808e022,
+ 0x8096023,
+ 0x80ba025,
+ 0x80c202e,
+ 0x80d6030,
+ 0x80f6035,
+ 0x811203d,
+ 0x8122044,
+ 0x813a048,
+ 0x817204e,
+ 0x817605c,
+ 0x824a05d,
+ 0x824e092,
+ 0x8262093,
+ 0x826a098,
+ 0x828209a,
+ 0x82860a0,
+ 0x82920a1,
+ 0x829e0a4,
+ 0x82a20a7,
+ 0x82a60a8,
+ 0x82aa0a9,
+ 0x82ce0aa,
+ 0x830e0b3,
+ 0x83120c3,
+ 0x83320c4,
+ 0x83820cc,
+ 0x83ae0e0,
+ 0x283b20eb,
+ 0x83ba0ec,
+ 0x84120ee,
+ 0x8416104,
+ 0x841a105,
+ 0x841e106,
+ 0x8462107,
+ 0x8472118,
+ 0x84b211c,
+ 0x84b612c,
+ 0x84e612d,
+ 0x8632139,
+ 0x865a18c,
+ 0x8692196,
+ 0x86b61a4,
+ 0x286be1ad,
+ 0x286c21af,
+ 0x86ca1b0,
+ 0x86d61b2,
+ 0x87f21b5,
+ 0x87fe1fc,
+ 0x880a1ff,
+ 0x8816202,
+ 0x8822205,
+ 0x882e208,
0x883a20b,
0x884620e,
0x8852211,
@@ -10000,47 +10077,74 @@ var children = [...]uint32{
0x887621a,
0x888221d,
0x888e220,
- 0x889a223,
- 0x88a6226,
- 0x88b2229,
- 0x88be22c,
- 0x88ca22f,
- 0x88d2232,
+ 0x8896223,
+ 0x88a2225,
+ 0x88ae228,
+ 0x88ba22b,
+ 0x88c622e,
+ 0x88d2231,
0x88de234,
0x88ea237,
0x88f623a,
0x890223d,
0x890e240,
0x891a243,
- 0x8926246,
- 0x8932249,
- 0x893624c,
- 0x894224d,
- 0x895e250,
- 0x8962257,
- 0x8972258,
- 0x899625c,
- 0x899a265,
- 0x89de266,
- 0x89e2277,
- 0x89f6278,
- 0x8a2a27d,
- 0x8a3a28a,
- 0x8a4228e,
- 0x8a66290,
- 0x8a7e299,
- 0x8a9629f,
- 0x8aae2a5,
- 0x8ac22ab,
- 0x28b0a2b0,
- 0x8b0e2c2,
- 0x8b3a2c3,
- 0x8b4a2ce,
- 0x8b5e2d2,
+ 0x8946246,
+ 0x8952251,
+ 0x895e254,
+ 0x896a257,
+ 0x897625a,
+ 0x898225d,
+ 0x898a260,
+ 0x8996262,
+ 0x89a2265,
+ 0x89ae268,
+ 0x89ba26b,
+ 0x89c626e,
+ 0x89d2271,
+ 0x89de274,
+ 0x89ea277,
+ 0x89f627a,
+ 0x8a0227d,
+ 0x8a0e280,
+ 0x8a16283,
+ 0x8a22285,
+ 0x8a2a288,
+ 0x8a3628a,
+ 0x8a4228d,
+ 0x8a4e290,
+ 0x8a5a293,
+ 0x8a66296,
+ 0x8a72299,
+ 0x8a7e29c,
+ 0x8a8a29f,
+ 0x8a8e2a2,
+ 0x8a9a2a3,
+ 0x8ab62a6,
+ 0x8aba2ad,
+ 0x8aca2ae,
+ 0x8aee2b2,
+ 0x8af22bb,
+ 0x8b362bc,
+ 0x8b3e2cd,
+ 0x8b522cf,
+ 0x8b862d4,
+ 0x8ba22e1,
+ 0x8baa2e8,
+ 0x8bce2ea,
+ 0x8be62f3,
+ 0x8bfe2f9,
+ 0x8c162ff,
+ 0x8c2a305,
+ 0x28c7230a,
+ 0x8c7631c,
+ 0x8ca231d,
+ 0x8cb2328,
+ 0x8cc632c,
}
-// max children 580 (capacity 1023)
-// max text offset 30618 (capacity 32767)
+// max children 592 (capacity 1023)
+// max text offset 30772 (capacity 32767)
// max text length 36 (capacity 63)
-// max hi 8919 (capacity 16383)
-// max lo 8914 (capacity 16383)
+// max hi 9009 (capacity 16383)
+// max lo 9004 (capacity 16383)
diff --git a/vendor/gopkg.in/resty.v1/default.go b/vendor/gopkg.in/resty.v1/default.go
deleted file mode 100644
index cc6ae478c..000000000
--- a/vendor/gopkg.in/resty.v1/default.go
+++ /dev/null
@@ -1,327 +0,0 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
-// resty source code and usage is governed by a MIT style
-// license that can be found in the LICENSE file.
-
-package resty
-
-import (
- "crypto/tls"
- "encoding/json"
- "io"
- "math"
- "net/http"
- "net/http/cookiejar"
- "net/url"
- "os"
- "time"
-
- "golang.org/x/net/publicsuffix"
-)
-
-// DefaultClient of resty
-var DefaultClient *Client
-
-// New method creates a new go-resty client.
-func New() *Client {
- cookieJar, _ := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
- return createClient(&http.Client{Jar: cookieJar})
-}
-
-// NewWithClient method create a new go-resty client with given `http.Client`.
-func NewWithClient(hc *http.Client) *Client {
- return createClient(hc)
-}
-
-// R creates a new resty request object, it is used form a HTTP/RESTful request
-// such as GET, POST, PUT, DELETE, HEAD, PATCH and OPTIONS.
-func R() *Request {
- return DefaultClient.R()
-}
-
-// NewRequest is an alias for R(). Creates a new resty request object, it is used form a HTTP/RESTful request
-// such as GET, POST, PUT, DELETE, HEAD, PATCH and OPTIONS.
-func NewRequest() *Request {
- return R()
-}
-
-// SetHostURL sets Host URL. See `Client.SetHostURL for more information.
-func SetHostURL(url string) *Client {
- return DefaultClient.SetHostURL(url)
-}
-
-// SetHeader sets single header. See `Client.SetHeader` for more information.
-func SetHeader(header, value string) *Client {
- return DefaultClient.SetHeader(header, value)
-}
-
-// SetHeaders sets multiple headers. See `Client.SetHeaders` for more information.
-func SetHeaders(headers map[string]string) *Client {
- return DefaultClient.SetHeaders(headers)
-}
-
-// SetCookieJar sets custom http.CookieJar. See `Client.SetCookieJar` for more information.
-func SetCookieJar(jar http.CookieJar) *Client {
- return DefaultClient.SetCookieJar(jar)
-}
-
-// SetCookie sets single cookie object. See `Client.SetCookie` for more information.
-func SetCookie(hc *http.Cookie) *Client {
- return DefaultClient.SetCookie(hc)
-}
-
-// SetCookies sets multiple cookie object. See `Client.SetCookies` for more information.
-func SetCookies(cs []*http.Cookie) *Client {
- return DefaultClient.SetCookies(cs)
-}
-
-// SetQueryParam method sets single parameter and its value. See `Client.SetQueryParam` for more information.
-func SetQueryParam(param, value string) *Client {
- return DefaultClient.SetQueryParam(param, value)
-}
-
-// SetQueryParams method sets multiple parameters and its value. See `Client.SetQueryParams` for more information.
-func SetQueryParams(params map[string]string) *Client {
- return DefaultClient.SetQueryParams(params)
-}
-
-// SetFormData method sets Form parameters and its values. See `Client.SetFormData` for more information.
-func SetFormData(data map[string]string) *Client {
- return DefaultClient.SetFormData(data)
-}
-
-// SetBasicAuth method sets the basic authentication header. See `Client.SetBasicAuth` for more information.
-func SetBasicAuth(username, password string) *Client {
- return DefaultClient.SetBasicAuth(username, password)
-}
-
-// SetAuthToken method sets bearer auth token header. See `Client.SetAuthToken` for more information.
-func SetAuthToken(token string) *Client {
- return DefaultClient.SetAuthToken(token)
-}
-
-// OnBeforeRequest method sets request middleware. See `Client.OnBeforeRequest` for more information.
-func OnBeforeRequest(m func(*Client, *Request) error) *Client {
- return DefaultClient.OnBeforeRequest(m)
-}
-
-// OnAfterResponse method sets response middleware. See `Client.OnAfterResponse` for more information.
-func OnAfterResponse(m func(*Client, *Response) error) *Client {
- return DefaultClient.OnAfterResponse(m)
-}
-
-// SetPreRequestHook method sets the pre-request hook. See `Client.SetPreRequestHook` for more information.
-func SetPreRequestHook(h func(*Client, *Request) error) *Client {
- return DefaultClient.SetPreRequestHook(h)
-}
-
-// SetDebug method enables the debug mode. See `Client.SetDebug` for more information.
-func SetDebug(d bool) *Client {
- return DefaultClient.SetDebug(d)
-}
-
-// SetDebugBodyLimit method sets the response body limit for debug mode. See `Client.SetDebugBodyLimit` for more information.
-func SetDebugBodyLimit(sl int64) *Client {
- return DefaultClient.SetDebugBodyLimit(sl)
-}
-
-// SetAllowGetMethodPayload method allows the GET method with payload. See `Client.SetAllowGetMethodPayload` for more information.
-func SetAllowGetMethodPayload(a bool) *Client {
- return DefaultClient.SetAllowGetMethodPayload(a)
-}
-
-// SetRetryCount method sets the retry count. See `Client.SetRetryCount` for more information.
-func SetRetryCount(count int) *Client {
- return DefaultClient.SetRetryCount(count)
-}
-
-// SetRetryWaitTime method sets the retry wait time. See `Client.SetRetryWaitTime` for more information.
-func SetRetryWaitTime(waitTime time.Duration) *Client {
- return DefaultClient.SetRetryWaitTime(waitTime)
-}
-
-// SetRetryMaxWaitTime method sets the retry max wait time. See `Client.SetRetryMaxWaitTime` for more information.
-func SetRetryMaxWaitTime(maxWaitTime time.Duration) *Client {
- return DefaultClient.SetRetryMaxWaitTime(maxWaitTime)
-}
-
-// AddRetryCondition method appends check function for retry. See `Client.AddRetryCondition` for more information.
-func AddRetryCondition(condition RetryConditionFunc) *Client {
- return DefaultClient.AddRetryCondition(condition)
-}
-
-// SetDisableWarn method disables warning comes from `go-resty` client. See `Client.SetDisableWarn` for more information.
-func SetDisableWarn(d bool) *Client {
- return DefaultClient.SetDisableWarn(d)
-}
-
-// SetLogger method sets given writer for logging. See `Client.SetLogger` for more information.
-func SetLogger(w io.Writer) *Client {
- return DefaultClient.SetLogger(w)
-}
-
-// SetContentLength method enables `Content-Length` value. See `Client.SetContentLength` for more information.
-func SetContentLength(l bool) *Client {
- return DefaultClient.SetContentLength(l)
-}
-
-// SetError method is to register the global or client common `Error` object. See `Client.SetError` for more information.
-func SetError(err interface{}) *Client {
- return DefaultClient.SetError(err)
-}
-
-// SetRedirectPolicy method sets the client redirect poilicy. See `Client.SetRedirectPolicy` for more information.
-func SetRedirectPolicy(policies ...interface{}) *Client {
- return DefaultClient.SetRedirectPolicy(policies...)
-}
-
-// SetHTTPMode method sets go-resty mode into HTTP. See `Client.SetMode` for more information.
-func SetHTTPMode() *Client {
- return DefaultClient.SetHTTPMode()
-}
-
-// SetRESTMode method sets go-resty mode into RESTful. See `Client.SetMode` for more information.
-func SetRESTMode() *Client {
- return DefaultClient.SetRESTMode()
-}
-
-// Mode method returns the current client mode. See `Client.Mode` for more information.
-func Mode() string {
- return DefaultClient.Mode()
-}
-
-// SetTLSClientConfig method sets TLSClientConfig for underling client Transport. See `Client.SetTLSClientConfig` for more information.
-func SetTLSClientConfig(config *tls.Config) *Client {
- return DefaultClient.SetTLSClientConfig(config)
-}
-
-// SetTimeout method sets timeout for request. See `Client.SetTimeout` for more information.
-func SetTimeout(timeout time.Duration) *Client {
- return DefaultClient.SetTimeout(timeout)
-}
-
-// SetProxy method sets Proxy for request. See `Client.SetProxy` for more information.
-func SetProxy(proxyURL string) *Client {
- return DefaultClient.SetProxy(proxyURL)
-}
-
-// RemoveProxy method removes the proxy configuration. See `Client.RemoveProxy` for more information.
-func RemoveProxy() *Client {
- return DefaultClient.RemoveProxy()
-}
-
-// SetCertificates method helps to set client certificates into resty conveniently.
-// See `Client.SetCertificates` for more information and example.
-func SetCertificates(certs ...tls.Certificate) *Client {
- return DefaultClient.SetCertificates(certs...)
-}
-
-// SetRootCertificate method helps to add one or more root certificates into resty client.
-// See `Client.SetRootCertificate` for more information.
-func SetRootCertificate(pemFilePath string) *Client {
- return DefaultClient.SetRootCertificate(pemFilePath)
-}
-
-// SetOutputDirectory method sets output directory. See `Client.SetOutputDirectory` for more information.
-func SetOutputDirectory(dirPath string) *Client {
- return DefaultClient.SetOutputDirectory(dirPath)
-}
-
-// SetTransport method sets custom `*http.Transport` or any `http.RoundTripper`
-// compatible interface implementation in the resty client.
-// See `Client.SetTransport` for more information.
-func SetTransport(transport http.RoundTripper) *Client {
- return DefaultClient.SetTransport(transport)
-}
-
-// SetScheme method sets custom scheme in the resty client.
-// See `Client.SetScheme` for more information.
-func SetScheme(scheme string) *Client {
- return DefaultClient.SetScheme(scheme)
-}
-
-// SetCloseConnection method sets close connection value in the resty client.
-// See `Client.SetCloseConnection` for more information.
-func SetCloseConnection(close bool) *Client {
- return DefaultClient.SetCloseConnection(close)
-}
-
-// SetDoNotParseResponse method instructs `Resty` not to parse the response body automatically.
-// See `Client.SetDoNotParseResponse` for more information.
-func SetDoNotParseResponse(parse bool) *Client {
- return DefaultClient.SetDoNotParseResponse(parse)
-}
-
-// SetPathParams method sets the Request path parameter key-value pairs. See
-// `Client.SetPathParams` for more information.
-func SetPathParams(params map[string]string) *Client {
- return DefaultClient.SetPathParams(params)
-}
-
-// IsProxySet method returns the true if proxy is set on client otherwise false.
-// See `Client.IsProxySet` for more information.
-func IsProxySet() bool {
- return DefaultClient.IsProxySet()
-}
-
-// GetClient method returns the current `http.Client` used by the default resty client.
-func GetClient() *http.Client {
- return DefaultClient.httpClient
-}
-
-//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
-// Unexported methods
-//___________________________________
-
-func createClient(hc *http.Client) *Client {
- c := &Client{
- HostURL: "",
- QueryParam: url.Values{},
- FormData: url.Values{},
- Header: http.Header{},
- UserInfo: nil,
- Token: "",
- Cookies: make([]*http.Cookie, 0),
- Debug: false,
- Log: getLogger(os.Stderr),
- RetryCount: 0,
- RetryWaitTime: defaultWaitTime,
- RetryMaxWaitTime: defaultMaxWaitTime,
- JSONMarshal: json.Marshal,
- JSONUnmarshal: json.Unmarshal,
- jsonEscapeHTML: true,
- httpClient: hc,
- debugBodySizeLimit: math.MaxInt32,
- pathParams: make(map[string]string),
- }
-
- // Log Prefix
- c.SetLogPrefix("RESTY ")
-
- // Default redirect policy
- c.SetRedirectPolicy(NoRedirectPolicy())
-
- // default before request middlewares
- c.beforeRequest = []func(*Client, *Request) error{
- parseRequestURL,
- parseRequestHeader,
- parseRequestBody,
- createHTTPRequest,
- addCredentials,
- }
-
- // user defined request middlewares
- c.udBeforeRequest = []func(*Client, *Request) error{}
-
- // default after response middlewares
- c.afterResponse = []func(*Client, *Response) error{
- responseLogger,
- parseResponseBody,
- saveResponseIntoFile,
- }
-
- return c
-}
-
-func init() {
- DefaultClient = New()
-}
diff --git a/vendor/gopkg.in/resty.v1/go.mod b/vendor/gopkg.in/resty.v1/go.mod
deleted file mode 100644
index 61341be87..000000000
--- a/vendor/gopkg.in/resty.v1/go.mod
+++ /dev/null
@@ -1,3 +0,0 @@
-module gopkg.in/resty.v1
-
-require golang.org/x/net v0.0.0-20181220203305-927f97764cc3
diff --git a/vendor/gopkg.in/resty.v1/request16.go b/vendor/gopkg.in/resty.v1/request16.go
deleted file mode 100644
index 079ecfca7..000000000
--- a/vendor/gopkg.in/resty.v1/request16.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// +build !go1.7
-
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com)
-// 2016 Andrew Grigorev (https://github.com/ei-grad)
-// All rights reserved.
-// resty source code and usage is governed by a MIT style
-// license that can be found in the LICENSE file.
-
-package resty
-
-import (
- "bytes"
- "encoding/json"
- "net/http"
- "net/url"
- "time"
-)
-
-// Request type is used to compose and send individual request from client
-// go-resty is provide option override client level settings such as
-// Auth Token, Basic Auth credentials, Header, Query Param, Form Data, Error object
-// and also you can add more options for that particular request
-type Request struct {
- URL string
- Method string
- Token string
- QueryParam url.Values
- FormData url.Values
- Header http.Header
- Time time.Time
- Body interface{}
- Result interface{}
- Error interface{}
- RawRequest *http.Request
- SRV *SRVRecord
- UserInfo *User
-
- isMultiPart bool
- isFormData bool
- setContentLength bool
- isSaveResponse bool
- notParseResponse bool
- jsonEscapeHTML bool
- outputFile string
- fallbackContentType string
- pathParams map[string]string
- client *Client
- bodyBuf *bytes.Buffer
- multipartFiles []*File
- multipartFields []*MultipartField
-}
-
-func (r *Request) addContextIfAvailable() {
- // nothing to do for golang<1.7
-}
-
-func (r *Request) isContextCancelledIfAvailable() bool {
- // just always return false golang<1.7
- return false
-}
-
-// for !go1.7
-var noescapeJSONMarshal = json.Marshal
diff --git a/vendor/gopkg.in/resty.v1/request17.go b/vendor/gopkg.in/resty.v1/request17.go
deleted file mode 100644
index 0629a114c..000000000
--- a/vendor/gopkg.in/resty.v1/request17.go
+++ /dev/null
@@ -1,96 +0,0 @@
-// +build go1.7 go1.8
-
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com)
-// 2016 Andrew Grigorev (https://github.com/ei-grad)
-// All rights reserved.
-// resty source code and usage is governed by a MIT style
-// license that can be found in the LICENSE file.
-
-package resty
-
-import (
- "bytes"
- "context"
- "encoding/json"
- "net/http"
- "net/url"
- "time"
-)
-
-// Request type is used to compose and send individual request from client
-// go-resty is provide option override client level settings such as
-// Auth Token, Basic Auth credentials, Header, Query Param, Form Data, Error object
-// and also you can add more options for that particular request
-type Request struct {
- URL string
- Method string
- Token string
- QueryParam url.Values
- FormData url.Values
- Header http.Header
- Time time.Time
- Body interface{}
- Result interface{}
- Error interface{}
- RawRequest *http.Request
- SRV *SRVRecord
- UserInfo *User
-
- isMultiPart bool
- isFormData bool
- setContentLength bool
- isSaveResponse bool
- notParseResponse bool
- jsonEscapeHTML bool
- outputFile string
- fallbackContentType string
- ctx context.Context
- pathParams map[string]string
- client *Client
- bodyBuf *bytes.Buffer
- multipartFiles []*File
- multipartFields []*MultipartField
-}
-
-// Context method returns the Context if its already set in request
-// otherwise it creates new one using `context.Background()`.
-func (r *Request) Context() context.Context {
- if r.ctx == nil {
- return context.Background()
- }
- return r.ctx
-}
-
-// SetContext method sets the context.Context for current Request. It allows
-// to interrupt the request execution if ctx.Done() channel is closed.
-// See https://blog.golang.org/context article and the "context" package
-// documentation.
-func (r *Request) SetContext(ctx context.Context) *Request {
- r.ctx = ctx
- return r
-}
-
-func (r *Request) addContextIfAvailable() {
- if r.ctx != nil {
- r.RawRequest = r.RawRequest.WithContext(r.ctx)
- }
-}
-
-func (r *Request) isContextCancelledIfAvailable() bool {
- if r.ctx != nil {
- if r.ctx.Err() != nil {
- return true
- }
- }
- return false
-}
-
-// for go1.7+
-var noescapeJSONMarshal = func(v interface{}) ([]byte, error) {
- buf := acquireBuffer()
- defer releaseBuffer(buf)
- encoder := json.NewEncoder(buf)
- encoder.SetEscapeHTML(false)
- err := encoder.Encode(v)
- return buf.Bytes(), err
-}
diff --git a/vendor/gopkg.in/resty.v1/resty.go b/vendor/gopkg.in/resty.v1/resty.go
deleted file mode 100644
index 9a32463d7..000000000
--- a/vendor/gopkg.in/resty.v1/resty.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
-// resty source code and usage is governed by a MIT style
-// license that can be found in the LICENSE file.
-
-// Package resty provides Simple HTTP and REST client library for Go.
-package resty
-
-// Version # of resty
-const Version = "1.12.0"
diff --git a/vendor/gopkg.in/resty.v1/retry.go b/vendor/gopkg.in/resty.v1/retry.go
deleted file mode 100644
index 4ed9b6d60..000000000
--- a/vendor/gopkg.in/resty.v1/retry.go
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved.
-// resty source code and usage is governed by a MIT style
-// license that can be found in the LICENSE file.
-
-package resty
-
-import (
- "math"
- "math/rand"
- "time"
-)
-
-const (
- defaultMaxRetries = 3
- defaultWaitTime = time.Duration(100) * time.Millisecond
- defaultMaxWaitTime = time.Duration(2000) * time.Millisecond
-)
-
-type (
- // Option is to create convenient retry options like wait time, max retries, etc.
- Option func(*Options)
-
- // RetryConditionFunc type is for retry condition function
- RetryConditionFunc func(*Response) (bool, error)
-
- // Options to hold go-resty retry values
- Options struct {
- maxRetries int
- waitTime time.Duration
- maxWaitTime time.Duration
- retryConditions []RetryConditionFunc
- }
-)
-
-// Retries sets the max number of retries
-func Retries(value int) Option {
- return func(o *Options) {
- o.maxRetries = value
- }
-}
-
-// WaitTime sets the default wait time to sleep between requests
-func WaitTime(value time.Duration) Option {
- return func(o *Options) {
- o.waitTime = value
- }
-}
-
-// MaxWaitTime sets the max wait time to sleep between requests
-func MaxWaitTime(value time.Duration) Option {
- return func(o *Options) {
- o.maxWaitTime = value
- }
-}
-
-// RetryConditions sets the conditions that will be checked for retry.
-func RetryConditions(conditions []RetryConditionFunc) Option {
- return func(o *Options) {
- o.retryConditions = conditions
- }
-}
-
-// Backoff retries with increasing timeout duration up until X amount of retries
-// (Default is 3 attempts, Override with option Retries(n))
-func Backoff(operation func() (*Response, error), options ...Option) error {
- // Defaults
- opts := Options{
- maxRetries: defaultMaxRetries,
- waitTime: defaultWaitTime,
- maxWaitTime: defaultMaxWaitTime,
- retryConditions: []RetryConditionFunc{},
- }
-
- for _, o := range options {
- o(&opts)
- }
-
- var (
- resp *Response
- err error
- )
- base := float64(opts.waitTime) // Time to wait between each attempt
- capLevel := float64(opts.maxWaitTime) // Maximum amount of wait time for the retry
- for attempt := 0; attempt < opts.maxRetries; attempt++ {
- resp, err = operation()
-
- var needsRetry bool
- var conditionErr error
- for _, condition := range opts.retryConditions {
- needsRetry, conditionErr = condition(resp)
- if needsRetry || conditionErr != nil {
- break
- }
- }
-
- // If the operation returned no error, there was no condition satisfied and
- // there was no error caused by the conditional functions.
- if err == nil && !needsRetry && conditionErr == nil {
- return nil
- }
- // Adding capped exponential backup with jitter
- // See the following article...
- // http://www.awsarchitectureblog.com/2015/03/backoff.html
- temp := math.Min(capLevel, base*math.Exp2(float64(attempt)))
- ri := int(temp / 2)
- if ri <= 0 {
- ri = 1<<31 - 1 // max int for arch 386
- }
- sleepDuration := time.Duration(math.Abs(float64(ri + rand.Intn(ri))))
-
- if sleepDuration < opts.waitTime {
- sleepDuration = opts.waitTime
- }
- time.Sleep(sleepDuration)
- }
-
- return err
-}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 96f498450..1d5e99115 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -222,6 +222,8 @@ github.com/go-ini/ini
# github.com/go-ole/go-ole v1.2.4
github.com/go-ole/go-ole
github.com/go-ole/go-ole/oleutil
+# github.com/go-resty/resty/v2 v2.3.0
+github.com/go-resty/resty/v2
# github.com/gobwas/glob v0.2.3
github.com/gobwas/glob
github.com/gobwas/glob/compiler
@@ -435,8 +437,10 @@ github.com/klauspost/pgzip
github.com/konsorten/go-windows-terminal-sequences
# github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169
github.com/kr/fs
-# github.com/linode/linodego v0.7.1
+# github.com/linode/linodego v0.14.0
github.com/linode/linodego
+github.com/linode/linodego/internal/duration
+github.com/linode/linodego/internal/parseabletime
# github.com/masterzen/azure-sdk-for-go v0.0.0-20161014135628-ee4f0065d00c
github.com/masterzen/azure-sdk-for-go/core/http
github.com/masterzen/azure-sdk-for-go/core/tls
@@ -702,7 +706,7 @@ golang.org/x/mobile/event/key
# golang.org/x/mod v0.2.0
golang.org/x/mod/module
golang.org/x/mod/semver
-# golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
+# golang.org/x/net v0.0.0-20200602114024-627f9648deb9
golang.org/x/net/context
golang.org/x/net/context/ctxhttp
golang.org/x/net/html
@@ -851,8 +855,6 @@ google.golang.org/grpc/status
google.golang.org/grpc/tap
# gopkg.in/ini.v1 v1.42.0
gopkg.in/ini.v1
-# gopkg.in/resty.v1 v1.12.0
-gopkg.in/resty.v1
# gopkg.in/square/go-jose.v2 v2.3.1
gopkg.in/square/go-jose.v2
gopkg.in/square/go-jose.v2/cipher