Kaynağa Gözat

vendor: cloud.google.com/go v0.92.0, google.golang.org/api v0.54.0

this removes a `tools.go` from the dependency, which caused various test
dependencies to be ending up in the dependency-tree, and are now gone.

- cloud.google.com/go v0.92.0: https://github.com/googleapis/google-cloud-go/compare/v0.81.0...v0.92.0
- google.golang.org/api v0.54.0: https://github.com/googleapis/google-api-go-client/compare/v0.46.0...v0.54.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 3 yıl önce
ebeveyn
işleme
7df7357e08
89 değiştirilmiş dosya ile 373 ekleme ve 32567 silme
  1. 2 6
      vendor.mod
  2. 36 6
      vendor.sum
  3. 226 0
      vendor/cloud.google.com/go/CHANGES.md
  4. 27 3
      vendor/cloud.google.com/go/CONTRIBUTING.md
  5. 4 2
      vendor/cloud.google.com/go/README.md
  6. 7 0
      vendor/cloud.google.com/go/SECURITY.md
  7. 0 31
      vendor/cloud.google.com/go/tools.go
  8. 0 398
      vendor/github.com/golang/protobuf/internal/gengogrpc/grpc.go
  9. 0 74
      vendor/github.com/golang/protobuf/protoc-gen-go/main.go
  10. 0 1
      vendor/github.com/jstemmer/go-junit-report/.gitignore
  11. 0 16
      vendor/github.com/jstemmer/go-junit-report/.travis.yml
  12. 0 20
      vendor/github.com/jstemmer/go-junit-report/LICENSE
  13. 0 49
      vendor/github.com/jstemmer/go-junit-report/README.md
  14. 0 182
      vendor/github.com/jstemmer/go-junit-report/formatter/formatter.go
  15. 0 45
      vendor/github.com/jstemmer/go-junit-report/go-junit-report.go
  16. 0 319
      vendor/github.com/jstemmer/go-junit-report/parser/parser.go
  17. 0 19
      vendor/golang.org/x/lint/.travis.yml
  18. 0 15
      vendor/golang.org/x/lint/CONTRIBUTING.md
  19. 0 27
      vendor/golang.org/x/lint/LICENSE
  20. 0 93
      vendor/golang.org/x/lint/README.md
  21. 0 159
      vendor/golang.org/x/lint/golint/golint.go
  22. 0 309
      vendor/golang.org/x/lint/golint/import.go
  23. 0 13
      vendor/golang.org/x/lint/golint/importcomment.go
  24. 0 1615
      vendor/golang.org/x/lint/lint.go
  25. 0 27
      vendor/golang.org/x/mod/LICENSE
  26. 0 22
      vendor/golang.org/x/mod/PATENTS
  27. 0 822
      vendor/golang.org/x/mod/module/module.go
  28. 0 391
      vendor/golang.org/x/mod/semver/semver.go
  29. 0 3
      vendor/golang.org/x/tools/AUTHORS
  30. 0 3
      vendor/golang.org/x/tools/CONTRIBUTORS
  31. 0 27
      vendor/golang.org/x/tools/LICENSE
  32. 0 22
      vendor/golang.org/x/tools/PATENTS
  33. 0 47
      vendor/golang.org/x/tools/cmd/goimports/doc.go
  34. 0 380
      vendor/golang.org/x/tools/cmd/goimports/goimports.go
  35. 0 27
      vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go
  36. 0 12
      vendor/golang.org/x/tools/cmd/goimports/goimports_not_gc.go
  37. 0 627
      vendor/golang.org/x/tools/go/ast/astutil/enclosing.go
  38. 0 482
      vendor/golang.org/x/tools/go/ast/astutil/imports.go
  39. 0 483
      vendor/golang.org/x/tools/go/ast/astutil/rewrite.go
  40. 0 18
      vendor/golang.org/x/tools/go/ast/astutil/util.go
  41. 0 133
      vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go
  42. 0 73
      vendor/golang.org/x/tools/go/gcexportdata/importer.go
  43. 0 852
      vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go
  44. 0 1039
      vendor/golang.org/x/tools/go/internal/gcimporter/bimport.go
  45. 0 93
      vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go
  46. 0 1078
      vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go
  47. 0 781
      vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go
  48. 0 676
      vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go
  49. 0 22
      vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go
  50. 0 14
      vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go
  51. 0 85
      vendor/golang.org/x/tools/internal/event/core/event.go
  52. 0 70
      vendor/golang.org/x/tools/internal/event/core/export.go
  53. 0 77
      vendor/golang.org/x/tools/internal/event/core/fast.go
  54. 0 7
      vendor/golang.org/x/tools/internal/event/doc.go
  55. 0 127
      vendor/golang.org/x/tools/internal/event/event.go
  56. 0 564
      vendor/golang.org/x/tools/internal/event/keys/keys.go
  57. 0 22
      vendor/golang.org/x/tools/internal/event/keys/standard.go
  58. 0 215
      vendor/golang.org/x/tools/internal/event/label/label.go
  59. 0 196
      vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go
  60. 0 14
      vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go
  61. 0 15
      vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go
  62. 0 14
      vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go
  63. 0 29
      vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go
  64. 0 38
      vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go
  65. 0 153
      vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go
  66. 0 273
      vendor/golang.org/x/tools/internal/gocommand/invoke.go
  67. 0 107
      vendor/golang.org/x/tools/internal/gocommand/vendor.go
  68. 0 51
      vendor/golang.org/x/tools/internal/gocommand/version.go
  69. 0 264
      vendor/golang.org/x/tools/internal/gopathwalk/walk.go
  70. 0 1730
      vendor/golang.org/x/tools/internal/imports/fix.go
  71. 0 346
      vendor/golang.org/x/tools/internal/imports/imports.go
  72. 0 695
      vendor/golang.org/x/tools/internal/imports/mod.go
  73. 0 236
      vendor/golang.org/x/tools/internal/imports/mod_cache.go
  74. 0 280
      vendor/golang.org/x/tools/internal/imports/sortimports.go
  75. 0 10733
      vendor/golang.org/x/tools/internal/imports/zstdlib.go
  76. 0 11
      vendor/golang.org/x/tools/internal/typeparams/doc.go
  77. 0 90
      vendor/golang.org/x/tools/internal/typeparams/notypeparams.go
  78. 0 105
      vendor/golang.org/x/tools/internal/typeparams/typeparams.go
  79. 43 30
      vendor/google.golang.org/api/internal/creds.go
  80. 14 0
      vendor/google.golang.org/api/internal/settings.go
  81. 12 0
      vendor/google.golang.org/api/option/internaloption/internaloption.go
  82. 0 2
      vendor/google.golang.org/api/transport/internal/dca/dca.go
  83. 0 168
      vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init.go
  84. 0 884
      vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/main.go
  85. 0 351
      vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/reflect.go
  86. 0 1080
      vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go
  87. 0 1261
      vendor/google.golang.org/protobuf/compiler/protogen/protogen.go
  88. 0 653
      vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go
  89. 2 35
      vendor/modules.txt

+ 2 - 6
vendor.mod

@@ -7,7 +7,7 @@ module github.com/docker/docker
 go 1.17
 
 require (
-	cloud.google.com/go v0.81.0
+	cloud.google.com/go v0.92.0
 	cloud.google.com/go/logging v1.4.2
 	github.com/Graylog2/go-gelf v0.0.0-20191017102106-1550ee647df0
 	github.com/Microsoft/go-winio v0.5.1
@@ -119,7 +119,6 @@ require (
 	github.com/hashicorp/golang-lru v0.5.3 // indirect
 	github.com/inconshreveable/mousetrap v1.0.0 // indirect
 	github.com/jmespath/go-jmespath v0.3.0 // indirect
-	github.com/jstemmer/go-junit-report v0.9.1 // indirect
 	github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
 	github.com/mitchellh/hashstructure v1.0.0 // indirect
 	github.com/opentracing-contrib/go-stdlib v1.0.0 // indirect
@@ -143,13 +142,10 @@ require (
 	go.uber.org/multierr v1.6.0 // indirect
 	go.uber.org/zap v1.17.0 // indirect
 	golang.org/x/crypto v0.0.0-20211202192323-5770296d904e // indirect
-	golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
-	golang.org/x/mod v0.4.2 // indirect
 	golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f // indirect
 	golang.org/x/text v0.3.7 // indirect
-	golang.org/x/tools v0.1.5 // indirect
 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
-	google.golang.org/api v0.46.0 // indirect
+	google.golang.org/api v0.54.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/protobuf v1.27.1 // indirect
 	labix.org/v2/mgo v0.0.0-20140701140051-000000000287 // indirect

+ 36 - 6
vendor.sum

@@ -19,8 +19,13 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP
 cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
 cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
 cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
-cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8=
 cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
+cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY=
+cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM=
+cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=
+cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=
+cloud.google.com/go v0.92.0 h1:gx+SLyeAiq8Et/uxOrHPuLgu3ZQ2TguaO1OE9P05QsQ=
+cloud.google.com/go v0.92.0/go.mod h1:cMc7asehN84LBi1JGTHo4n8wuaGuNAZ7lR7b1YNJBrE=
 cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
 cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
 cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@@ -516,6 +521,7 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
@@ -527,6 +533,10 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe
 github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20210804190019-f964ff605595/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
@@ -627,7 +637,6 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/
 github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=
 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
@@ -1053,7 +1062,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
 golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
 golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
 golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
 golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
@@ -1065,7 +1073,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1135,6 +1142,8 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ
 golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw=
 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1237,9 +1246,12 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1339,7 +1351,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
 golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=
+golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1368,8 +1381,13 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q
 google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
 google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
 google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
-google.golang.org/api v0.46.0 h1:jkDWHOBIoNSD0OQpq4rtBVu+Rh325MPjXG1rakAp8JU=
 google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I=
+google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo=
+google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4=
+google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw=
+google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU=
+google.golang.org/api v0.54.0 h1:ECJUVngj71QI6XEm7b1sAf8BljU5inEhMbKPR8Lxhhk=
+google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1426,8 +1444,17 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D
 google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
 google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
+google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
 google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
+google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=
+google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=
+google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
+google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
+google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w=
 google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
 google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0=
 google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
@@ -1457,10 +1484,13 @@ google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
 google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
 google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
 google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
+google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
 google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
 google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM=
 google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
+google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=

+ 226 - 0
vendor/cloud.google.com/go/CHANGES.md

@@ -1,5 +1,231 @@
 # Changes
 
+## [0.92.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.91.0...v0.92.0) (2021-08-16)
+
+
+### Features
+
+* **all:** remove testing deps ([#4580](https://www.github.com/googleapis/google-cloud-go/issues/4580)) ([15c1eb9](https://www.github.com/googleapis/google-cloud-go/commit/15c1eb9730f0b514edb911161f9c59e8d790a5ec)), refs [#4061](https://www.github.com/googleapis/google-cloud-go/issues/4061)
+* **internal/detect:** add helper to detect projectID from env ([#4582](https://www.github.com/googleapis/google-cloud-go/issues/4582)) ([cc65d94](https://www.github.com/googleapis/google-cloud-go/commit/cc65d945688ac446602bce6ef86a935714dfe2f8)), refs [#1294](https://www.github.com/googleapis/google-cloud-go/issues/1294)
+* **spannertest:** Add validation of duplicated column names ([#4611](https://www.github.com/googleapis/google-cloud-go/issues/4611)) ([84f86a6](https://www.github.com/googleapis/google-cloud-go/commit/84f86a605c809ab36dd3cb4b3ab1df15a5302083))
+
+## [0.91.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.90.0...v0.91.0) (2021-08-11)
+
+
+### Features
+
+* **.github:** support dynamic submodule detection ([#4537](https://www.github.com/googleapis/google-cloud-go/issues/4537)) ([4374b90](https://www.github.com/googleapis/google-cloud-go/commit/4374b907e9f166da6bd23a8ef94399872b00afd6))
+* **dialogflow/cx:** add advanced settings for agent level feat: add rollout config, state and failure reason for experiment feat: add insights export settings for security setting feat: add language code for streaming recognition result and flow versions for query parameters docs: deprecate legacy logging settings ([ed73554](https://www.github.com/googleapis/google-cloud-go/commit/ed735541dc57d0681d84b46853393eac5f7ccec3))
+* **dialogflow/cx:** add advanced settings for agent level feat: add rollout config, state and failure reason for experiment feat: add insights export settings for security setting feat: add language code for streaming recognition result and flow versions for query parameters docs: deprecate legacy logging settings ([ed73554](https://www.github.com/googleapis/google-cloud-go/commit/ed735541dc57d0681d84b46853393eac5f7ccec3))
+* **dialogflow/cx:** added support for DLP templates; expose `Locations` service to get/list avaliable locations of Dialogflow products ([5996846](https://www.github.com/googleapis/google-cloud-go/commit/59968462a3870c6289166fa1161f9b6d9c10e093))
+* **dialogflow/cx:** added support for DLP templates; expose `Locations` service to get/list avaliable locations of Dialogflow products docs: reorder some fields ([5996846](https://www.github.com/googleapis/google-cloud-go/commit/59968462a3870c6289166fa1161f9b6d9c10e093))
+* **dialogflow:** expose `Locations` service to get/list avaliable locations of Dialogflow products; fixed some API annotations ([5996846](https://www.github.com/googleapis/google-cloud-go/commit/59968462a3870c6289166fa1161f9b6d9c10e093))
+* **kms:** add support for HMAC, Variable Key Destruction, and GenerateRandom ([5996846](https://www.github.com/googleapis/google-cloud-go/commit/59968462a3870c6289166fa1161f9b6d9c10e093))
+* **speech:** add total_billed_time response field ([5996846](https://www.github.com/googleapis/google-cloud-go/commit/59968462a3870c6289166fa1161f9b6d9c10e093))
+* **video/transcoder:** Add video cropping feature feat: Add video padding feature feat: Add ttl_after_completion_days field to Job docs: Update proto documentation docs: Indicate v1beta1 deprecation ([5996846](https://www.github.com/googleapis/google-cloud-go/commit/59968462a3870c6289166fa1161f9b6d9c10e093))
+
+
+### Bug Fixes
+
+* **functions:** Updating behavior of source_upload_url during Get/List function calls ([381a494](https://www.github.com/googleapis/google-cloud-go/commit/381a494c29da388977b0bdda2177058328cc4afe))
+
+## [0.90.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.89.0...v0.90.0) (2021-08-03)
+
+
+### ⚠ BREAKING CHANGES
+
+* **compute:** add pagination and an Operation wrapper (#4542)
+
+### Features
+
+* **compute:** add pagination and an Operation wrapper ([#4542](https://www.github.com/googleapis/google-cloud-go/issues/4542)) ([36f4649](https://www.github.com/googleapis/google-cloud-go/commit/36f46494111f6d16d103fb208d49616576dbf91e))
+* **internal/godocfx:** add status to packages and TOCs ([#4547](https://www.github.com/googleapis/google-cloud-go/issues/4547)) ([c6de69c](https://www.github.com/googleapis/google-cloud-go/commit/c6de69c710561bb2a40eff05417df4b9798c258a))
+* **internal/godocfx:** mark status of deprecated items ([#4525](https://www.github.com/googleapis/google-cloud-go/issues/4525)) ([d571c6f](https://www.github.com/googleapis/google-cloud-go/commit/d571c6f4337ec9c4807c230cd77f53b6e7db6437))
+
+
+### Bug Fixes
+
+* **internal/carver:** don't tag commits ([#4518](https://www.github.com/googleapis/google-cloud-go/issues/4518)) ([c355eb8](https://www.github.com/googleapis/google-cloud-go/commit/c355eb8ecb0bb1af0ccf55e6262ca8c0d5c7e352))
+
+## [0.89.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.88.0...v0.89.0) (2021-07-29)
+
+
+### Features
+
+* **assuredworkloads:** Add EU Regions And Support compliance regime ([a52baa4](https://www.github.com/googleapis/google-cloud-go/commit/a52baa456ed8513ec492c4b573c191eb61468758))
+* **datacatalog:** Added support for BigQuery connections entries feat: Added support for BigQuery routines entries feat: Added usage_signal field feat: Added labels field feat: Added ReplaceTaxonomy in Policy Tag Manager Serialization API feat: Added support for public tag templates feat: Added support for rich text tags docs: Documentation improvements ([a52baa4](https://www.github.com/googleapis/google-cloud-go/commit/a52baa456ed8513ec492c4b573c191eb61468758))
+* **datafusion:** start generating apiv1 ([e55a016](https://www.github.com/googleapis/google-cloud-go/commit/e55a01667afaf36ff70807d061ecafb61827ba97))
+* **iap:** start generating apiv1 ([e55a016](https://www.github.com/googleapis/google-cloud-go/commit/e55a01667afaf36ff70807d061ecafb61827ba97))
+* **internal/carver:** add tooling to help carve out sub-modules ([#4417](https://www.github.com/googleapis/google-cloud-go/issues/4417)) ([a7e28f2](https://www.github.com/googleapis/google-cloud-go/commit/a7e28f2557469562ae57e5174b41bdf8fce62b63))
+* **networkconnectivity:** Add files for Network Connectivity v1 API. ([a52baa4](https://www.github.com/googleapis/google-cloud-go/commit/a52baa456ed8513ec492c4b573c191eb61468758))
+* **retail:** Add restricted Retail Search features for Retail API v2. ([a52baa4](https://www.github.com/googleapis/google-cloud-go/commit/a52baa456ed8513ec492c4b573c191eb61468758))
+* **secretmanager:** In Secret Manager, users can now use filter to customize the output of ListSecrets/ListSecretVersions calls ([a52baa4](https://www.github.com/googleapis/google-cloud-go/commit/a52baa456ed8513ec492c4b573c191eb61468758))
+* **securitycenter:** add finding_class and indicator fields in Finding ([a52baa4](https://www.github.com/googleapis/google-cloud-go/commit/a52baa456ed8513ec492c4b573c191eb61468758))
+* **speech:** add total_billed_time response field. fix!: phrase_set_id is required field in CreatePhraseSetRequest. fix!: custom_class_id is required field in CreateCustomClassRequest. ([a52baa4](https://www.github.com/googleapis/google-cloud-go/commit/a52baa456ed8513ec492c4b573c191eb61468758))
+* **storagetransfer:** start generating apiv1 ([#4505](https://www.github.com/googleapis/google-cloud-go/issues/4505)) ([f2d531d](https://www.github.com/googleapis/google-cloud-go/commit/f2d531d2b519efa58e0f23a178bbebe675c203c3))
+
+
+### Bug Fixes
+
+* **internal/gapicgen:** exec Stdout already set ([#4509](https://www.github.com/googleapis/google-cloud-go/issues/4509)) ([41246e9](https://www.github.com/googleapis/google-cloud-go/commit/41246e900aaaea92a9f956e92956c40c86f4cb3a))
+* **internal/gapicgen:** tidy all after dep bump  ([#4515](https://www.github.com/googleapis/google-cloud-go/issues/4515)) ([9401be5](https://www.github.com/googleapis/google-cloud-go/commit/9401be509c570c3c55694375065c84139e961857)), refs [#4434](https://www.github.com/googleapis/google-cloud-go/issues/4434)
+
+## [0.88.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.87.0...v0.88.0) (2021-07-22)
+
+
+### ⚠ BREAKING CHANGES
+
+* **cloudbuild/apiv1:** Proto had a prior definitions of WorkerPool resources which were never supported. This change replaces those resources with definitions that are currently supported.
+
+### Features
+
+* **cloudbuild/apiv1:** add a WorkerPools API ([19ea3f8](https://www.github.com/googleapis/google-cloud-go/commit/19ea3f830212582bfee21d9e09f0034f9ce76547))
+* **cloudbuild/apiv1:** Implementation of Build Failure Info: - Added message FailureInfo field ([19ea3f8](https://www.github.com/googleapis/google-cloud-go/commit/19ea3f830212582bfee21d9e09f0034f9ce76547))
+* **osconfig/agentendpoint:** OSConfig AgentEndpoint: add basic os info to RegisterAgentRequest, add WindowsApplication type to Inventory ([8936bc3](https://www.github.com/googleapis/google-cloud-go/commit/8936bc3f2d0fb2f6514f6e019fa247b8f41bd43c))
+* **resourcesettings:** Publish Cloud ResourceSettings v1 API ([43ad3cb](https://www.github.com/googleapis/google-cloud-go/commit/43ad3cb7be981fff9dc5dcf4510f1cd7bea99957))
+
+
+### Bug Fixes
+
+* **internal/godocfx:** set exit code, print cmd output, no go get ... ([#4445](https://www.github.com/googleapis/google-cloud-go/issues/4445)) ([cc70f77](https://www.github.com/googleapis/google-cloud-go/commit/cc70f77ac279a62e24e1b07f6e53fd126b7286b0))
+* **internal:** detect module for properly generating docs URLs ([#4460](https://www.github.com/googleapis/google-cloud-go/issues/4460)) ([1eaba8b](https://www.github.com/googleapis/google-cloud-go/commit/1eaba8bd694f7552a8e3e09b4f164de8b6ca23f0)), refs [#4447](https://www.github.com/googleapis/google-cloud-go/issues/4447)
+* **kms:** Updating WORKSPACE files to use the newest version of the Typescript generator. ([8936bc3](https://www.github.com/googleapis/google-cloud-go/commit/8936bc3f2d0fb2f6514f6e019fa247b8f41bd43c))
+
+## [0.87.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.86.0...v0.87.0) (2021-07-13)
+
+
+### Features
+
+* **container:** allow updating security group on existing clusters ([528ffc9](https://www.github.com/googleapis/google-cloud-go/commit/528ffc9bd63090129a8b1355cd31273f8c23e34c))
+* **monitoring/dashboard:** added validation only mode when writing dashboards feat: added alert chart widget ([652d7c2](https://www.github.com/googleapis/google-cloud-go/commit/652d7c277da2f6774729064ab65d557875c81567))
+* **networkmanagment:** start generating apiv1 ([907592c](https://www.github.com/googleapis/google-cloud-go/commit/907592c576abfc65c01bbcd30c1a6094916cdc06))
+* **secretmanager:** Tune Secret Manager auto retry parameters ([528ffc9](https://www.github.com/googleapis/google-cloud-go/commit/528ffc9bd63090129a8b1355cd31273f8c23e34c))
+* **video/transcoder:** start generating apiv1 ([907592c](https://www.github.com/googleapis/google-cloud-go/commit/907592c576abfc65c01bbcd30c1a6094916cdc06))
+
+
+### Bug Fixes
+
+* **compute:** properly generate PUT requests ([#4426](https://www.github.com/googleapis/google-cloud-go/issues/4426)) ([a7491a5](https://www.github.com/googleapis/google-cloud-go/commit/a7491a533e4ad75eb6d5f89718d4dafb0c5b4167))
+* **internal:** fix relative pathing for generator ([#4397](https://www.github.com/googleapis/google-cloud-go/issues/4397)) ([25e0eae](https://www.github.com/googleapis/google-cloud-go/commit/25e0eaecf9feb1caa97988c5398ac58f6ca17391))
+
+
+### Miscellaneous Chores
+
+* **all:** fix release version ([#4427](https://www.github.com/googleapis/google-cloud-go/issues/4427)) ([2c0d267](https://www.github.com/googleapis/google-cloud-go/commit/2c0d2673ccab7281b6432215ee8279f9efd04a15))
+
+## [0.86.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.85.0...v0.86.0) (2021-07-01)
+
+
+### Features
+
+* **bigquery managedwriter:** schema conversion support ([#4357](https://www.github.com/googleapis/google-cloud-go/issues/4357)) ([f2b20f4](https://www.github.com/googleapis/google-cloud-go/commit/f2b20f493e2ed5a883ce42fa65695c03c574feb5))
+
+## [0.85.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.84.0...v0.85.0) (2021-06-30)
+
+
+### Features
+
+* **dataflow:** start generating apiv1beta3 ([cfee361](https://www.github.com/googleapis/google-cloud-go/commit/cfee36161d41e3a0f769e51ab96c25d0967af273))
+* **datastream:** start generating apiv1alpha1 ([cfee361](https://www.github.com/googleapis/google-cloud-go/commit/cfee36161d41e3a0f769e51ab96c25d0967af273))
+* **dialogflow:** added Automated agent reply type and allow cancellation flag for partial response feature. ([5a9c6ce](https://www.github.com/googleapis/google-cloud-go/commit/5a9c6ce781fb6a338e29d3dee72367998d834af0))
+* **documentai:** update document.proto, add the processor management methods. ([5a9c6ce](https://www.github.com/googleapis/google-cloud-go/commit/5a9c6ce781fb6a338e29d3dee72367998d834af0))
+* **eventarc:** start generating apiv1 ([cfee361](https://www.github.com/googleapis/google-cloud-go/commit/cfee36161d41e3a0f769e51ab96c25d0967af273))
+* **gkehub:** added v1alpha messages and client for gkehub ([8fb4649](https://www.github.com/googleapis/google-cloud-go/commit/8fb464956f0ca51d30e8e14dc625ff9fa150c437))
+* **internal/godocfx:** add support for other modules ([#4290](https://www.github.com/googleapis/google-cloud-go/issues/4290)) ([d52bae6](https://www.github.com/googleapis/google-cloud-go/commit/d52bae6cd77474174192c46236d309bf967dfa00))
+* **internal/godocfx:** different metadata for different modules ([#4297](https://www.github.com/googleapis/google-cloud-go/issues/4297)) ([598f5b9](https://www.github.com/googleapis/google-cloud-go/commit/598f5b93778b2e2e75265ae54484dd54477433f5))
+* **internal:** add force option for regen ([#4310](https://www.github.com/googleapis/google-cloud-go/issues/4310)) ([de654eb](https://www.github.com/googleapis/google-cloud-go/commit/de654ebfcf23a53b4d1fee0aa48c73999a55c1a6))
+* **servicecontrol:** Added the gRPC service config for the Service Controller v1 API docs: Updated some comments. ([8fb4649](https://www.github.com/googleapis/google-cloud-go/commit/8fb464956f0ca51d30e8e14dc625ff9fa150c437))
+* **workflows/executions:** start generating apiv1 ([cfee361](https://www.github.com/googleapis/google-cloud-go/commit/cfee36161d41e3a0f769e51ab96c25d0967af273))
+
+
+### Bug Fixes
+
+* **internal:** add autogenerated header to snippets ([#4261](https://www.github.com/googleapis/google-cloud-go/issues/4261)) ([2220787](https://www.github.com/googleapis/google-cloud-go/commit/222078722c37c3fdadec7bbbe0bcf81edd105f1a)), refs [#4260](https://www.github.com/googleapis/google-cloud-go/issues/4260)
+* **internal:** fix googleapis-disco regen ([#4354](https://www.github.com/googleapis/google-cloud-go/issues/4354)) ([aeea1ce](https://www.github.com/googleapis/google-cloud-go/commit/aeea1ce1e5dff3acdfe208932327b52c49851b41))
+* **kms:** replace IAMPolicy mixin in service config. ([5a9c6ce](https://www.github.com/googleapis/google-cloud-go/commit/5a9c6ce781fb6a338e29d3dee72367998d834af0))
+* **security/privateca:** Fixed casing of the Ruby namespace ([5a9c6ce](https://www.github.com/googleapis/google-cloud-go/commit/5a9c6ce781fb6a338e29d3dee72367998d834af0))
+
+## [0.84.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.83.0...v0.84.0) (2021-06-09)
+
+
+### Features
+
+* **aiplatform:** start generating apiv1 ([be1d729](https://www.github.com/googleapis/google-cloud-go/commit/be1d729fdaa18eb1c782f3b09a6bb8fd6b3a144c))
+* **apigeeconnect:** start generating abiv1 ([be1d729](https://www.github.com/googleapis/google-cloud-go/commit/be1d729fdaa18eb1c782f3b09a6bb8fd6b3a144c))
+* **dialogflow/cx:** support sentiment analysis in bot testing ([7a57aac](https://www.github.com/googleapis/google-cloud-go/commit/7a57aac996f2bae20ee6ddbd02ad9e56e380099b))
+* **dialogflow/cx:** support sentiment analysis in bot testing ([6ad2306](https://www.github.com/googleapis/google-cloud-go/commit/6ad2306f64710ce16059b464342dbc6a98d2d9c2))
+* **documentai:** Move CommonOperationMetadata into a separate proto file for potential reuse. ([9e80ea0](https://www.github.com/googleapis/google-cloud-go/commit/9e80ea0d053b06876418194f65a478045dc4fe6c))
+* **documentai:** Move CommonOperationMetadata into a separate proto file for potential reuse. ([18375e5](https://www.github.com/googleapis/google-cloud-go/commit/18375e50e8f16e63506129b8927a7b62f85e407b))
+* **gkeconnect/gateway:** start generating apiv1beta1 ([#4235](https://www.github.com/googleapis/google-cloud-go/issues/4235)) ([1c3e968](https://www.github.com/googleapis/google-cloud-go/commit/1c3e9689d78670a231a3660db00fd4fd8f5c6345))
+* **lifesciences:** strat generating apiv2beta ([be1d729](https://www.github.com/googleapis/google-cloud-go/commit/be1d729fdaa18eb1c782f3b09a6bb8fd6b3a144c))
+* **tpu:** start generating apiv1 ([#4199](https://www.github.com/googleapis/google-cloud-go/issues/4199)) ([cac48ea](https://www.github.com/googleapis/google-cloud-go/commit/cac48eab960cd34cc20732f6a1aeb93c540a036b))
+
+
+### Bug Fixes
+
+* **bttest:** fix race condition in SampleRowKeys ([#4207](https://www.github.com/googleapis/google-cloud-go/issues/4207)) ([5711fb1](https://www.github.com/googleapis/google-cloud-go/commit/5711fb10d25c458807598d736a232bb2210a047a))
+* **documentai:** Fix Ruby gem title of documentai v1 (package not currently published) ([9e80ea0](https://www.github.com/googleapis/google-cloud-go/commit/9e80ea0d053b06876418194f65a478045dc4fe6c))
+
+## [0.83.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.82.0...v0.83.0) (2021-06-02)
+
+
+### Features
+
+* **dialogflow:** added a field in the query result to indicate whether slot filling is cancelled. ([f9cda8f](https://www.github.com/googleapis/google-cloud-go/commit/f9cda8fb6c3d76a062affebe6649f0a43aeb96f3))
+* **essentialcontacts:** start generating apiv1 ([#4118](https://www.github.com/googleapis/google-cloud-go/issues/4118)) ([fe14afc](https://www.github.com/googleapis/google-cloud-go/commit/fe14afcf74e09089b22c4f5221cbe37046570fda))
+* **gsuiteaddons:** start generating apiv1 ([#4082](https://www.github.com/googleapis/google-cloud-go/issues/4082)) ([6de5c99](https://www.github.com/googleapis/google-cloud-go/commit/6de5c99173c4eeaf777af18c47522ca15637d232))
+* **osconfig:** OSConfig: add ExecResourceOutput and per step error message. ([f9cda8f](https://www.github.com/googleapis/google-cloud-go/commit/f9cda8fb6c3d76a062affebe6649f0a43aeb96f3))
+* **osconfig:** start generating apiv1alpha ([#4119](https://www.github.com/googleapis/google-cloud-go/issues/4119)) ([8ad471f](https://www.github.com/googleapis/google-cloud-go/commit/8ad471f26087ec076460df6dcf27769ffe1b8834))
+* **privatecatalog:** start generating apiv1beta1 ([500c1a6](https://www.github.com/googleapis/google-cloud-go/commit/500c1a6101f624cb6032f0ea16147645a02e7076))
+* **serviceusage:** start generating apiv1 ([#4120](https://www.github.com/googleapis/google-cloud-go/issues/4120)) ([e4531f9](https://www.github.com/googleapis/google-cloud-go/commit/e4531f93cfeb6388280bb253ef6eb231aba37098))
+* **shell:** start generating apiv1 ([500c1a6](https://www.github.com/googleapis/google-cloud-go/commit/500c1a6101f624cb6032f0ea16147645a02e7076))
+* **vpcaccess:** start generating apiv1 ([500c1a6](https://www.github.com/googleapis/google-cloud-go/commit/500c1a6101f624cb6032f0ea16147645a02e7076))
+
+## [0.82.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.81.0...v0.82.0) (2021-05-17)
+
+
+### Features
+
+* **billing/budgets:** Added support for configurable budget time period. fix: Updated some documentation links. ([83b1b3b](https://www.github.com/googleapis/google-cloud-go/commit/83b1b3b648c6d9225f07f00e8c0cdabc3d1fc1ab))
+* **billing/budgets:** Added support for configurable budget time period. fix: Updated some documentation links. ([83b1b3b](https://www.github.com/googleapis/google-cloud-go/commit/83b1b3b648c6d9225f07f00e8c0cdabc3d1fc1ab))
+* **cloudbuild/apiv1:** Add fields for Pub/Sub triggers ([8b4adbf](https://www.github.com/googleapis/google-cloud-go/commit/8b4adbf9815e1ec229dfbcfb9189d3ea63112e1b))
+* **cloudbuild/apiv1:** Implementation of Source Manifests: - Added message StorageSourceManifest as an option for the Source message - Added StorageSourceManifest field to the SourceProvenance message ([7fd2ccd](https://www.github.com/googleapis/google-cloud-go/commit/7fd2ccd26adec1468e15fe84bf75210255a9dfea))
+* **clouddms:** start generating apiv1 ([#4081](https://www.github.com/googleapis/google-cloud-go/issues/4081)) ([29df85c](https://www.github.com/googleapis/google-cloud-go/commit/29df85c40ab64d59e389a980c9ce550077839763))
+* **dataproc:** update the Dataproc V1 API client library ([9a459d5](https://www.github.com/googleapis/google-cloud-go/commit/9a459d5d149b9c3b02a35d4245d164b899ff09b3))
+* **dialogflow/cx:** add support for service directory webhooks ([7fd2ccd](https://www.github.com/googleapis/google-cloud-go/commit/7fd2ccd26adec1468e15fe84bf75210255a9dfea))
+* **dialogflow/cx:** add support for service directory webhooks ([7fd2ccd](https://www.github.com/googleapis/google-cloud-go/commit/7fd2ccd26adec1468e15fe84bf75210255a9dfea))
+* **dialogflow/cx:** support setting current_page to resume sessions; expose transition_route_groups in flows and language_code in webhook ([9a459d5](https://www.github.com/googleapis/google-cloud-go/commit/9a459d5d149b9c3b02a35d4245d164b899ff09b3))
+* **dialogflow/cx:** support setting current_page to resume sessions; expose transition_route_groups in flows and language_code in webhook ([9a459d5](https://www.github.com/googleapis/google-cloud-go/commit/9a459d5d149b9c3b02a35d4245d164b899ff09b3))
+* **dialogflow:** added more Environment RPCs feat: added Versions service feat: added Fulfillment service feat: added TextToSpeechSettings. feat: added location in some resource patterns. ([4f73dc1](https://www.github.com/googleapis/google-cloud-go/commit/4f73dc19c2e05ad6133a8eac3d62ddb522314540))
+* **documentai:** add confidence field to the PageAnchor.PageRef in document.proto. ([d089dda](https://www.github.com/googleapis/google-cloud-go/commit/d089dda0089acb9aaef9b3da40b219476af9fc06))
+* **documentai:** add confidence field to the PageAnchor.PageRef in document.proto. ([07fdcd1](https://www.github.com/googleapis/google-cloud-go/commit/07fdcd12499eac26f9b5fae01d6c1282c3e02b7c))
+* **internal/gapicgen:** only update relevant gapic files ([#4066](https://www.github.com/googleapis/google-cloud-go/issues/4066)) ([5948bee](https://www.github.com/googleapis/google-cloud-go/commit/5948beedbadd491601bdee6a006cf685e94a85f4))
+* **internal/gensnippets:** add license header and region tags ([#3924](https://www.github.com/googleapis/google-cloud-go/issues/3924)) ([e9ff7a0](https://www.github.com/googleapis/google-cloud-go/commit/e9ff7a0f9bb1cc67f5d0de47934811960429e72c))
+* **internal/gensnippets:** initial commit ([#3922](https://www.github.com/googleapis/google-cloud-go/issues/3922)) ([3fabef0](https://www.github.com/googleapis/google-cloud-go/commit/3fabef032388713f732ab4dbfc51624cdca0f481))
+* **internal:** auto-generate snippets ([#3949](https://www.github.com/googleapis/google-cloud-go/issues/3949)) ([b70e0fc](https://www.github.com/googleapis/google-cloud-go/commit/b70e0fccdc86813e0d97ff63b585822d4deafb38))
+* **internal:** generate region tags for snippets ([#3962](https://www.github.com/googleapis/google-cloud-go/issues/3962)) ([ef2b90e](https://www.github.com/googleapis/google-cloud-go/commit/ef2b90ea6d47e27744c98a1a9ae0c487c5051808))
+* **metastore:** start generateing apiv1 ([#4083](https://www.github.com/googleapis/google-cloud-go/issues/4083)) ([661610a](https://www.github.com/googleapis/google-cloud-go/commit/661610afa6a9113534884cafb138109536724310))
+* **security/privateca:** start generating apiv1 ([#4023](https://www.github.com/googleapis/google-cloud-go/issues/4023)) ([08aa83a](https://www.github.com/googleapis/google-cloud-go/commit/08aa83a5371bb6485bc3b19b3ed5300f807ce69f))
+* **securitycenter:** add canonical_name and folder fields ([5c5ca08](https://www.github.com/googleapis/google-cloud-go/commit/5c5ca08c637a23cfa3e3a051fea576e1feb324fd))
+* **securitycenter:** add canonical_name and folder fields ([5c5ca08](https://www.github.com/googleapis/google-cloud-go/commit/5c5ca08c637a23cfa3e3a051fea576e1feb324fd))
+* **speech:** add webm opus support. ([d089dda](https://www.github.com/googleapis/google-cloud-go/commit/d089dda0089acb9aaef9b3da40b219476af9fc06))
+* **speech:** Support for spoken punctuation and spoken emojis. ([9a459d5](https://www.github.com/googleapis/google-cloud-go/commit/9a459d5d149b9c3b02a35d4245d164b899ff09b3))
+
+
+### Bug Fixes
+
+* **binaryauthorization:** add Java options to Binaryauthorization protos ([9a459d5](https://www.github.com/googleapis/google-cloud-go/commit/9a459d5d149b9c3b02a35d4245d164b899ff09b3))
+* **internal/gapicgen:** filter out internal directory changes ([#4085](https://www.github.com/googleapis/google-cloud-go/issues/4085)) ([01473f6](https://www.github.com/googleapis/google-cloud-go/commit/01473f6d8db26c6e18969ace7f9e87c66e94ad9e))
+* **internal/gapicgen:** use correct region tags for gensnippets ([#4022](https://www.github.com/googleapis/google-cloud-go/issues/4022)) ([8ccd689](https://www.github.com/googleapis/google-cloud-go/commit/8ccd689cab08f016008ca06a939a4828817d4a25))
+* **internal/gensnippets:** run goimports ([#3931](https://www.github.com/googleapis/google-cloud-go/issues/3931)) ([10050f0](https://www.github.com/googleapis/google-cloud-go/commit/10050f05c20c226547d87c08168fa4bc551395c5))
+* **internal:** append a new line to comply with go fmt ([#4028](https://www.github.com/googleapis/google-cloud-go/issues/4028)) ([a297278](https://www.github.com/googleapis/google-cloud-go/commit/a2972783c4af806199d1c67c9f63ad9677f20f34))
+* **internal:** make sure formatting is run on snippets ([#4039](https://www.github.com/googleapis/google-cloud-go/issues/4039)) ([130dfc5](https://www.github.com/googleapis/google-cloud-go/commit/130dfc535396e98fc009585b0457e3bc48ead941)), refs [#4037](https://www.github.com/googleapis/google-cloud-go/issues/4037)
+* **metastore:** increase metastore lro polling timeouts ([83b1b3b](https://www.github.com/googleapis/google-cloud-go/commit/83b1b3b648c6d9225f07f00e8c0cdabc3d1fc1ab))
+
+
+### Miscellaneous Chores
+
+* **all:** fix release version ([#4040](https://www.github.com/googleapis/google-cloud-go/issues/4040)) ([4c991a9](https://www.github.com/googleapis/google-cloud-go/commit/4c991a928665d9be93691decce0c653f430688b7))
 
 ## [0.81.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.80.0...v0.81.0) (2021-04-02)
 

+ 27 - 3
vendor/cloud.google.com/go/CONTRIBUTING.md

@@ -69,7 +69,7 @@ these projects as "general project" and "Firestore project".
 
 After creating each project, you must [create a service account](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount)
 for each project. Ensure the project-level **Owner**
-[IAM role](console.cloud.google.com/iam-admin/iam/project) role is added to
+[IAM role](https://console.cloud.google.com/iam-admin/iam/project) role is added to
 each service account. During the creation of the service account, you should
 download the JSON credential file for use later.
 
@@ -136,6 +136,9 @@ As part of the setup that follows, the following variables will be configured:
 - `GCLOUD_TESTS_GOLANG_KEYRING`: The full name of the keyring for the tests,
 in the form
 "projects/P/locations/L/keyRings/R". The creation of this is described below.
+- `GCLOUD_TESTS_BIGTABLE_KEYRING`: The full name of the keyring for the bigtable tests,
+in the form
+"projects/P/locations/L/keyRings/R". The creation of this is described below. Expected to be single region.
 - `GCLOUD_TESTS_GOLANG_ZONE`: Compute Engine zone.
 
 Install the [gcloud command-line tool][gcloudcli] to your machine and use it to
@@ -172,6 +175,7 @@ $ gcloud beta spanner instances create go-integration-test --config regional-us-
 
 $ export MY_KEYRING=some-keyring-name
 $ export MY_LOCATION=global
+$ export MY_SINGLE_LOCATION=us-central1
 # Creates a KMS keyring, in the same location as the default location for your
 # project's buckets.
 $ gcloud kms keyrings create $MY_KEYRING --location $MY_LOCATION
@@ -182,6 +186,26 @@ $ gcloud kms keys create key2 --keyring $MY_KEYRING --location $MY_LOCATION --pu
 $ export GCLOUD_TESTS_GOLANG_KEYRING=projects/$GCLOUD_TESTS_GOLANG_PROJECT_ID/locations/$MY_LOCATION/keyRings/$MY_KEYRING
 # Authorizes Google Cloud Storage to encrypt and decrypt using key1.
 $ gsutil kms authorize -p $GCLOUD_TESTS_GOLANG_PROJECT_ID -k $GCLOUD_TESTS_GOLANG_KEYRING/cryptoKeys/key1
+
+# Create KMS Key in one region for Bigtable
+$ gcloud kms keyrings create $MY_KEYRING --location $MY_SINGLE_LOCATION
+$ gcloud kms keys create key1 --keyring $MY_KEYRING --location $MY_SINGLE_LOCATION --purpose encryption
+# Sets the GCLOUD_TESTS_BIGTABLE_KEYRING environment variable.
+$ export GCLOUD_TESTS_BIGTABLE_KEYRING=projects/$GCLOUD_TESTS_GOLANG_PROJECT_ID/locations/$MY_SINGLE_LOCATION/keyRings/$MY_KEYRING
+# Create a service agent, https://cloud.google.com/bigtable/docs/use-cmek#gcloud:
+$ gcloud beta services identity create \
+    --service=bigtableadmin.googleapis.com \
+    --project $GCLOUD_TESTS_GOLANG_PROJECT_ID
+# Note the service agent email for the agent created.
+$ export SERVICE_AGENT_EMAIL=<service agent email, from last step>
+
+# Authorizes Google Cloud Bigtable to encrypt and decrypt using key1
+$ gcloud kms keys add-iam-policy-binding key1 \
+    --keyring $MY_KEYRING \
+    --location $MY_SINGLE_LOCATION \
+    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
+    --member "serviceAccount:$SERVICE_AGENT_EMAIL" \
+    --project $GCLOUD_TESTS_GOLANG_PROJECT_ID
 ```
 
 It may be useful to add exports to your shell initialization for future use.
@@ -295,8 +319,8 @@ Instances of abusive, harassing, or otherwise unacceptable behavior
 may be reported by opening an issue
 or contacting one or more of the project maintainers.
 
-This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,
-available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
+This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org), version 1.2.0,
+available at [https://contributor-covenant.org/version/1/2/0/](https://contributor-covenant.org/version/1/2/0/)
 
 [gcloudcli]: https://developers.google.com/cloud/sdk/gcloud/
 [indvcla]: https://developers.google.com/open-source/cla/individual

+ 4 - 2
vendor/cloud.google.com/go/README.md

@@ -12,7 +12,7 @@ To install the packages on your system, *do not clone the repo*. Instead:
 
 1. Change to your project directory:
 
-   ```
+   ```bash
    cd /my/cloud/project
    ```
 1. Get the package you want to use. Some products have their own module, so it's
@@ -35,6 +35,7 @@ make backwards-incompatible changes.
 | [Bigtable][cloud-bigtable]                      | stable | [`cloud.google.com/go/bigtable`](https://pkg.go.dev/cloud.google.com/go/bigtable)                                             |
 | [Cloudbuild][cloud-build]                       | stable | [`cloud.google.com/go/cloudbuild/apiv1`](https://pkg.go.dev/cloud.google.com/go/cloudbuild/apiv1)                             |
 | [Cloudtasks][cloud-tasks]                       | stable | [`cloud.google.com/go/cloudtasks/apiv2`](https://pkg.go.dev/cloud.google.com/go/cloudtasks/apiv2)                             |
+| [Compute Engine][cloud-compute]                 | alpha  | [`cloud.google.com/go/compute/apiv1`](https://pkg.go.dev/cloud.google.com/go/compute/apiv1)                                   |
 | [Container][cloud-container]                    | stable | [`cloud.google.com/go/container/apiv1`](https://pkg.go.dev/cloud.google.com/go/container/apiv1)                               |
 | [ContainerAnalysis][cloud-containeranalysis]    | beta   | [`cloud.google.com/go/containeranalysis/apiv1`](https://pkg.go.dev/cloud.google.com/go/containeranalysis/apiv1)               |
 | [Dataproc][cloud-dataproc]                      | stable | [`cloud.google.com/go/dataproc/apiv1`](https://pkg.go.dev/cloud.google.com/go/dataproc/apiv1)                                 |
@@ -54,7 +55,7 @@ make backwards-incompatible changes.
 | [Monitoring][cloud-monitoring]                  | stable | [`cloud.google.com/go/monitoring/apiv3`](https://pkg.go.dev/cloud.google.com/go/monitoring/apiv3)                             |
 | [OS Login][cloud-oslogin]                       | stable | [`cloud.google.com/go/oslogin/apiv1`](https://pkg.go.dev/cloud.google.com/go/oslogin/apiv1)                                   |
 | [Pub/Sub][cloud-pubsub]                         | stable | [`cloud.google.com/go/pubsub`](https://pkg.go.dev/cloud.google.com/go/pubsub)                                                 |
-| [Pub/Sub Lite][cloud-pubsublite]                | beta   | [`cloud.google.com/go/pubsublite`](https://pkg.go.dev/cloud.google.com/go/pubsublite)                                                 |
+| [Pub/Sub Lite][cloud-pubsublite]                | stable | [`cloud.google.com/go/pubsublite`](https://pkg.go.dev/cloud.google.com/go/pubsublite)                                         |
 | [Phishing Protection][cloud-phishingprotection] | alpha  | [`cloud.google.com/go/phishingprotection/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/phishingprotection/apiv1beta1)   |
 | [reCAPTCHA Enterprise][cloud-recaptcha]         | alpha  | [`cloud.google.com/go/recaptchaenterprise/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/recaptchaenterprise/apiv1beta1) |
 | [Recommender][cloud-recommender]                | beta   | [`cloud.google.com/go/recommender/apiv1beta1`](https://pkg.go.dev/cloud.google.com/go/recommender/apiv1beta1)                 |
@@ -137,6 +138,7 @@ for more information.
 [cloud-build]: https://cloud.google.com/cloud-build/
 [cloud-bigquery]: https://cloud.google.com/bigquery/
 [cloud-bigtable]: https://cloud.google.com/bigtable/
+[cloud-compute]: https://cloud.google.com/compute
 [cloud-container]: https://cloud.google.com/containers/
 [cloud-containeranalysis]: https://cloud.google.com/container-registry/docs/container-analysis
 [cloud-dataproc]: https://cloud.google.com/dataproc/

+ 7 - 0
vendor/cloud.google.com/go/SECURITY.md

@@ -0,0 +1,7 @@
+# Security Policy
+
+To report a security issue, please use [g.co/vulnz](https://g.co/vulnz).
+
+The Google Security Team will respond within 5 working days of your report on g.co/vulnz.
+
+We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.

+ 0 - 31
vendor/cloud.google.com/go/tools.go

@@ -1,31 +0,0 @@
-// +build tools
-
-// Copyright 2018 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// This package exists to cause `go mod` and `go get` to believe these tools
-// are dependencies, even though they are not runtime dependencies of any
-// package (these are tools used by our CI builds). This means they will appear
-// in our `go.mod` file, but will not be a part of the build. Also, since the
-// build target is something non-existent, these should not be included in any
-// binaries.
-
-package cloud
-
-import (
-	_ "github.com/golang/protobuf/protoc-gen-go"
-	_ "github.com/jstemmer/go-junit-report"
-	_ "golang.org/x/lint/golint"
-	_ "golang.org/x/tools/cmd/goimports"
-)

+ 0 - 398
vendor/github.com/golang/protobuf/internal/gengogrpc/grpc.go

@@ -1,398 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package gengogrpc contains the gRPC code generator.
-package gengogrpc
-
-import (
-	"fmt"
-	"strconv"
-	"strings"
-
-	"google.golang.org/protobuf/compiler/protogen"
-
-	"google.golang.org/protobuf/types/descriptorpb"
-)
-
-const (
-	contextPackage = protogen.GoImportPath("context")
-	grpcPackage    = protogen.GoImportPath("google.golang.org/grpc")
-	codesPackage   = protogen.GoImportPath("google.golang.org/grpc/codes")
-	statusPackage  = protogen.GoImportPath("google.golang.org/grpc/status")
-)
-
-// GenerateFile generates a _grpc.pb.go file containing gRPC service definitions.
-func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.GeneratedFile {
-	if len(file.Services) == 0 {
-		return nil
-	}
-	filename := file.GeneratedFilenamePrefix + "_grpc.pb.go"
-	g := gen.NewGeneratedFile(filename, file.GoImportPath)
-	g.P("// Code generated by protoc-gen-go-grpc. DO NOT EDIT.")
-	g.P()
-	g.P("package ", file.GoPackageName)
-	g.P()
-	GenerateFileContent(gen, file, g)
-	return g
-}
-
-// GenerateFileContent generates the gRPC service definitions, excluding the package statement.
-func GenerateFileContent(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile) {
-	if len(file.Services) == 0 {
-		return
-	}
-
-	// TODO: Remove this. We don't need to include these references any more.
-	g.P("// Reference imports to suppress errors if they are not otherwise used.")
-	g.P("var _ ", contextPackage.Ident("Context"))
-	g.P("var _ ", grpcPackage.Ident("ClientConnInterface"))
-	g.P()
-
-	g.P("// This is a compile-time assertion to ensure that this generated file")
-	g.P("// is compatible with the grpc package it is being compiled against.")
-	g.P("const _ = ", grpcPackage.Ident("SupportPackageIsVersion6"))
-	g.P()
-	for _, service := range file.Services {
-		genService(gen, file, g, service)
-	}
-}
-
-func genService(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, service *protogen.Service) {
-	clientName := service.GoName + "Client"
-
-	g.P("// ", clientName, " is the client API for ", service.GoName, " service.")
-	g.P("//")
-	g.P("// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.")
-
-	// Client interface.
-	if service.Desc.Options().(*descriptorpb.ServiceOptions).GetDeprecated() {
-		g.P("//")
-		g.P(deprecationComment)
-	}
-	g.Annotate(clientName, service.Location)
-	g.P("type ", clientName, " interface {")
-	for _, method := range service.Methods {
-		g.Annotate(clientName+"."+method.GoName, method.Location)
-		if method.Desc.Options().(*descriptorpb.MethodOptions).GetDeprecated() {
-			g.P(deprecationComment)
-		}
-		g.P(method.Comments.Leading,
-			clientSignature(g, method))
-	}
-	g.P("}")
-	g.P()
-
-	// Client structure.
-	g.P("type ", unexport(clientName), " struct {")
-	g.P("cc ", grpcPackage.Ident("ClientConnInterface"))
-	g.P("}")
-	g.P()
-
-	// NewClient factory.
-	if service.Desc.Options().(*descriptorpb.ServiceOptions).GetDeprecated() {
-		g.P(deprecationComment)
-	}
-	g.P("func New", clientName, " (cc ", grpcPackage.Ident("ClientConnInterface"), ") ", clientName, " {")
-	g.P("return &", unexport(clientName), "{cc}")
-	g.P("}")
-	g.P()
-
-	var methodIndex, streamIndex int
-	// Client method implementations.
-	for _, method := range service.Methods {
-		if !method.Desc.IsStreamingServer() && !method.Desc.IsStreamingClient() {
-			// Unary RPC method
-			genClientMethod(gen, file, g, method, methodIndex)
-			methodIndex++
-		} else {
-			// Streaming RPC method
-			genClientMethod(gen, file, g, method, streamIndex)
-			streamIndex++
-		}
-	}
-
-	// Server interface.
-	serverType := service.GoName + "Server"
-	g.P("// ", serverType, " is the server API for ", service.GoName, " service.")
-	if service.Desc.Options().(*descriptorpb.ServiceOptions).GetDeprecated() {
-		g.P("//")
-		g.P(deprecationComment)
-	}
-	g.Annotate(serverType, service.Location)
-	g.P("type ", serverType, " interface {")
-	for _, method := range service.Methods {
-		g.Annotate(serverType+"."+method.GoName, method.Location)
-		if method.Desc.Options().(*descriptorpb.MethodOptions).GetDeprecated() {
-			g.P(deprecationComment)
-		}
-		g.P(method.Comments.Leading,
-			serverSignature(g, method))
-	}
-	g.P("}")
-	g.P()
-
-	// Server Unimplemented struct for forward compatibility.
-	g.P("// Unimplemented", serverType, " can be embedded to have forward compatible implementations.")
-	g.P("type Unimplemented", serverType, " struct {")
-	g.P("}")
-	g.P()
-	for _, method := range service.Methods {
-		nilArg := ""
-		if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
-			nilArg = "nil,"
-		}
-		g.P("func (*Unimplemented", serverType, ") ", serverSignature(g, method), "{")
-		g.P("return ", nilArg, statusPackage.Ident("Errorf"), "(", codesPackage.Ident("Unimplemented"), `, "method `, method.GoName, ` not implemented")`)
-		g.P("}")
-	}
-	g.P()
-
-	// Server registration.
-	if service.Desc.Options().(*descriptorpb.ServiceOptions).GetDeprecated() {
-		g.P(deprecationComment)
-	}
-	serviceDescVar := "_" + service.GoName + "_serviceDesc"
-	g.P("func Register", service.GoName, "Server(s *", grpcPackage.Ident("Server"), ", srv ", serverType, ") {")
-	g.P("s.RegisterService(&", serviceDescVar, `, srv)`)
-	g.P("}")
-	g.P()
-
-	// Server handler implementations.
-	var handlerNames []string
-	for _, method := range service.Methods {
-		hname := genServerMethod(gen, file, g, method)
-		handlerNames = append(handlerNames, hname)
-	}
-
-	// Service descriptor.
-	g.P("var ", serviceDescVar, " = ", grpcPackage.Ident("ServiceDesc"), " {")
-	g.P("ServiceName: ", strconv.Quote(string(service.Desc.FullName())), ",")
-	g.P("HandlerType: (*", serverType, ")(nil),")
-	g.P("Methods: []", grpcPackage.Ident("MethodDesc"), "{")
-	for i, method := range service.Methods {
-		if method.Desc.IsStreamingClient() || method.Desc.IsStreamingServer() {
-			continue
-		}
-		g.P("{")
-		g.P("MethodName: ", strconv.Quote(string(method.Desc.Name())), ",")
-		g.P("Handler: ", handlerNames[i], ",")
-		g.P("},")
-	}
-	g.P("},")
-	g.P("Streams: []", grpcPackage.Ident("StreamDesc"), "{")
-	for i, method := range service.Methods {
-		if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
-			continue
-		}
-		g.P("{")
-		g.P("StreamName: ", strconv.Quote(string(method.Desc.Name())), ",")
-		g.P("Handler: ", handlerNames[i], ",")
-		if method.Desc.IsStreamingServer() {
-			g.P("ServerStreams: true,")
-		}
-		if method.Desc.IsStreamingClient() {
-			g.P("ClientStreams: true,")
-		}
-		g.P("},")
-	}
-	g.P("},")
-	g.P("Metadata: \"", file.Desc.Path(), "\",")
-	g.P("}")
-	g.P()
-}
-
-func clientSignature(g *protogen.GeneratedFile, method *protogen.Method) string {
-	s := method.GoName + "(ctx " + g.QualifiedGoIdent(contextPackage.Ident("Context"))
-	if !method.Desc.IsStreamingClient() {
-		s += ", in *" + g.QualifiedGoIdent(method.Input.GoIdent)
-	}
-	s += ", opts ..." + g.QualifiedGoIdent(grpcPackage.Ident("CallOption")) + ") ("
-	if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
-		s += "*" + g.QualifiedGoIdent(method.Output.GoIdent)
-	} else {
-		s += method.Parent.GoName + "_" + method.GoName + "Client"
-	}
-	s += ", error)"
-	return s
-}
-
-func genClientMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, index int) {
-	service := method.Parent
-	sname := fmt.Sprintf("/%s/%s", service.Desc.FullName(), method.Desc.Name())
-
-	if method.Desc.Options().(*descriptorpb.MethodOptions).GetDeprecated() {
-		g.P(deprecationComment)
-	}
-	g.P("func (c *", unexport(service.GoName), "Client) ", clientSignature(g, method), "{")
-	if !method.Desc.IsStreamingServer() && !method.Desc.IsStreamingClient() {
-		g.P("out := new(", method.Output.GoIdent, ")")
-		g.P(`err := c.cc.Invoke(ctx, "`, sname, `", in, out, opts...)`)
-		g.P("if err != nil { return nil, err }")
-		g.P("return out, nil")
-		g.P("}")
-		g.P()
-		return
-	}
-	streamType := unexport(service.GoName) + method.GoName + "Client"
-	serviceDescVar := "_" + service.GoName + "_serviceDesc"
-	g.P("stream, err := c.cc.NewStream(ctx, &", serviceDescVar, ".Streams[", index, `], "`, sname, `", opts...)`)
-	g.P("if err != nil { return nil, err }")
-	g.P("x := &", streamType, "{stream}")
-	if !method.Desc.IsStreamingClient() {
-		g.P("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }")
-		g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
-	}
-	g.P("return x, nil")
-	g.P("}")
-	g.P()
-
-	genSend := method.Desc.IsStreamingClient()
-	genRecv := method.Desc.IsStreamingServer()
-	genCloseAndRecv := !method.Desc.IsStreamingServer()
-
-	// Stream auxiliary types and methods.
-	g.P("type ", service.GoName, "_", method.GoName, "Client interface {")
-	if genSend {
-		g.P("Send(*", method.Input.GoIdent, ") error")
-	}
-	if genRecv {
-		g.P("Recv() (*", method.Output.GoIdent, ", error)")
-	}
-	if genCloseAndRecv {
-		g.P("CloseAndRecv() (*", method.Output.GoIdent, ", error)")
-	}
-	g.P(grpcPackage.Ident("ClientStream"))
-	g.P("}")
-	g.P()
-
-	g.P("type ", streamType, " struct {")
-	g.P(grpcPackage.Ident("ClientStream"))
-	g.P("}")
-	g.P()
-
-	if genSend {
-		g.P("func (x *", streamType, ") Send(m *", method.Input.GoIdent, ") error {")
-		g.P("return x.ClientStream.SendMsg(m)")
-		g.P("}")
-		g.P()
-	}
-	if genRecv {
-		g.P("func (x *", streamType, ") Recv() (*", method.Output.GoIdent, ", error) {")
-		g.P("m := new(", method.Output.GoIdent, ")")
-		g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
-		g.P("return m, nil")
-		g.P("}")
-		g.P()
-	}
-	if genCloseAndRecv {
-		g.P("func (x *", streamType, ") CloseAndRecv() (*", method.Output.GoIdent, ", error) {")
-		g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
-		g.P("m := new(", method.Output.GoIdent, ")")
-		g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
-		g.P("return m, nil")
-		g.P("}")
-		g.P()
-	}
-}
-
-func serverSignature(g *protogen.GeneratedFile, method *protogen.Method) string {
-	var reqArgs []string
-	ret := "error"
-	if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
-		reqArgs = append(reqArgs, g.QualifiedGoIdent(contextPackage.Ident("Context")))
-		ret = "(*" + g.QualifiedGoIdent(method.Output.GoIdent) + ", error)"
-	}
-	if !method.Desc.IsStreamingClient() {
-		reqArgs = append(reqArgs, "*"+g.QualifiedGoIdent(method.Input.GoIdent))
-	}
-	if method.Desc.IsStreamingClient() || method.Desc.IsStreamingServer() {
-		reqArgs = append(reqArgs, method.Parent.GoName+"_"+method.GoName+"Server")
-	}
-	return method.GoName + "(" + strings.Join(reqArgs, ", ") + ") " + ret
-}
-
-func genServerMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method) string {
-	service := method.Parent
-	hname := fmt.Sprintf("_%s_%s_Handler", service.GoName, method.GoName)
-
-	if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
-		g.P("func ", hname, "(srv interface{}, ctx ", contextPackage.Ident("Context"), ", dec func(interface{}) error, interceptor ", grpcPackage.Ident("UnaryServerInterceptor"), ") (interface{}, error) {")
-		g.P("in := new(", method.Input.GoIdent, ")")
-		g.P("if err := dec(in); err != nil { return nil, err }")
-		g.P("if interceptor == nil { return srv.(", service.GoName, "Server).", method.GoName, "(ctx, in) }")
-		g.P("info := &", grpcPackage.Ident("UnaryServerInfo"), "{")
-		g.P("Server: srv,")
-		g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", service.Desc.FullName(), method.GoName)), ",")
-		g.P("}")
-		g.P("handler := func(ctx ", contextPackage.Ident("Context"), ", req interface{}) (interface{}, error) {")
-		g.P("return srv.(", service.GoName, "Server).", method.GoName, "(ctx, req.(*", method.Input.GoIdent, "))")
-		g.P("}")
-		g.P("return interceptor(ctx, in, info, handler)")
-		g.P("}")
-		g.P()
-		return hname
-	}
-	streamType := unexport(service.GoName) + method.GoName + "Server"
-	g.P("func ", hname, "(srv interface{}, stream ", grpcPackage.Ident("ServerStream"), ") error {")
-	if !method.Desc.IsStreamingClient() {
-		g.P("m := new(", method.Input.GoIdent, ")")
-		g.P("if err := stream.RecvMsg(m); err != nil { return err }")
-		g.P("return srv.(", service.GoName, "Server).", method.GoName, "(m, &", streamType, "{stream})")
-	} else {
-		g.P("return srv.(", service.GoName, "Server).", method.GoName, "(&", streamType, "{stream})")
-	}
-	g.P("}")
-	g.P()
-
-	genSend := method.Desc.IsStreamingServer()
-	genSendAndClose := !method.Desc.IsStreamingServer()
-	genRecv := method.Desc.IsStreamingClient()
-
-	// Stream auxiliary types and methods.
-	g.P("type ", service.GoName, "_", method.GoName, "Server interface {")
-	if genSend {
-		g.P("Send(*", method.Output.GoIdent, ") error")
-	}
-	if genSendAndClose {
-		g.P("SendAndClose(*", method.Output.GoIdent, ") error")
-	}
-	if genRecv {
-		g.P("Recv() (*", method.Input.GoIdent, ", error)")
-	}
-	g.P(grpcPackage.Ident("ServerStream"))
-	g.P("}")
-	g.P()
-
-	g.P("type ", streamType, " struct {")
-	g.P(grpcPackage.Ident("ServerStream"))
-	g.P("}")
-	g.P()
-
-	if genSend {
-		g.P("func (x *", streamType, ") Send(m *", method.Output.GoIdent, ") error {")
-		g.P("return x.ServerStream.SendMsg(m)")
-		g.P("}")
-		g.P()
-	}
-	if genSendAndClose {
-		g.P("func (x *", streamType, ") SendAndClose(m *", method.Output.GoIdent, ") error {")
-		g.P("return x.ServerStream.SendMsg(m)")
-		g.P("}")
-		g.P()
-	}
-	if genRecv {
-		g.P("func (x *", streamType, ") Recv() (*", method.Input.GoIdent, ", error) {")
-		g.P("m := new(", method.Input.GoIdent, ")")
-		g.P("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }")
-		g.P("return m, nil")
-		g.P("}")
-		g.P()
-	}
-
-	return hname
-}
-
-const deprecationComment = "// Deprecated: Do not use."
-
-func unexport(s string) string { return strings.ToLower(s[:1]) + s[1:] }

+ 0 - 74
vendor/github.com/golang/protobuf/protoc-gen-go/main.go

@@ -1,74 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// protoc-gen-go is a plugin for the Google protocol buffer compiler to generate
-// Go code. Install it by building this program and making it accessible within
-// your PATH with the name:
-//	protoc-gen-go
-//
-// The 'go' suffix becomes part of the argument for the protocol compiler,
-// such that it can be invoked as:
-//	protoc --go_out=paths=source_relative:. path/to/file.proto
-//
-// This generates Go bindings for the protocol buffer defined by file.proto.
-// With that input, the output will be written to:
-//	path/to/file.pb.go
-//
-// See the README and documentation for protocol buffers to learn more:
-//	https://developers.google.com/protocol-buffers/
-package main
-
-import (
-	"flag"
-	"fmt"
-	"strings"
-
-	"github.com/golang/protobuf/internal/gengogrpc"
-	gengo "google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo"
-	"google.golang.org/protobuf/compiler/protogen"
-)
-
-func main() {
-	var (
-		flags        flag.FlagSet
-		plugins      = flags.String("plugins", "", "list of plugins to enable (supported values: grpc)")
-		importPrefix = flags.String("import_prefix", "", "prefix to prepend to import paths")
-	)
-	importRewriteFunc := func(importPath protogen.GoImportPath) protogen.GoImportPath {
-		switch importPath {
-		case "context", "fmt", "math":
-			return importPath
-		}
-		if *importPrefix != "" {
-			return protogen.GoImportPath(*importPrefix) + importPath
-		}
-		return importPath
-	}
-	protogen.Options{
-		ParamFunc:         flags.Set,
-		ImportRewriteFunc: importRewriteFunc,
-	}.Run(func(gen *protogen.Plugin) error {
-		grpc := false
-		for _, plugin := range strings.Split(*plugins, ",") {
-			switch plugin {
-			case "grpc":
-				grpc = true
-			case "":
-			default:
-				return fmt.Errorf("protoc-gen-go: unknown plugin %q", plugin)
-			}
-		}
-		for _, f := range gen.Files {
-			if !f.Generate {
-				continue
-			}
-			g := gengo.GenerateFile(gen, f)
-			if grpc {
-				gengogrpc.GenerateFileContent(gen, f, g)
-			}
-		}
-		gen.SupportedFeatures = gengo.SupportedFeatures
-		return nil
-	})
-}

+ 0 - 1
vendor/github.com/jstemmer/go-junit-report/.gitignore

@@ -1 +0,0 @@
-go-junit-report

+ 0 - 16
vendor/github.com/jstemmer/go-junit-report/.travis.yml

@@ -1,16 +0,0 @@
-language: go
-
-go:
-  - tip
-  - "1.13.x"
-  - "1.12.x"
-  - "1.11.x"
-  - "1.10.x"
-  - "1.9.x"
-  - "1.8.x"
-  - "1.7.x"
-  - "1.6.x"
-  - "1.5.x"
-  - "1.4.x"
-  - "1.3.x"
-  - "1.2.x"

+ 0 - 20
vendor/github.com/jstemmer/go-junit-report/LICENSE

@@ -1,20 +0,0 @@
-Copyright (c) 2012 Joel Stemmer
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 49
vendor/github.com/jstemmer/go-junit-report/README.md

@@ -1,49 +0,0 @@
-# go-junit-report
-
-Converts `go test` output to an xml report, suitable for applications that
-expect junit xml reports (e.g. [Jenkins](http://jenkins-ci.org)).
-
-[![Build Status][travis-badge]][travis-link]
-[![Report Card][report-badge]][report-link]
-
-## Installation
-
-Go version 1.2 or higher is required. Install or update using the `go get`
-command:
-
-```bash
-go get -u github.com/jstemmer/go-junit-report
-```
-
-## Usage
-
-go-junit-report reads the `go test` verbose output from standard in and writes
-junit compatible XML to standard out.
-
-```bash
-go test -v 2>&1 | go-junit-report > report.xml
-```
-
-Note that it also can parse benchmark output with `-bench` flag:
-```bash
-go test -v -bench . -count 5 2>&1 | go-junit-report > report.xml
-```
-
-## Contribution
-
-Create an Issue and discuss the fix or feature, then fork the package.
-Clone to github.com/jstemmer/go-junit-report.  This is necessary because go import uses this path.
-Fix or implement feature. Test and then commit change.
-Specify #Issue and describe change in the commit message.
-Create Pull Request. It can be merged by owner or administrator then.
-
-### Run Tests
-
-```bash
-go test
-```
-
-[travis-badge]: https://travis-ci.org/jstemmer/go-junit-report.svg
-[travis-link]: https://travis-ci.org/jstemmer/go-junit-report
-[report-badge]: https://goreportcard.com/badge/github.com/jstemmer/go-junit-report
-[report-link]: https://goreportcard.com/report/github.com/jstemmer/go-junit-report

+ 0 - 182
vendor/github.com/jstemmer/go-junit-report/formatter/formatter.go

@@ -1,182 +0,0 @@
-package formatter
-
-import (
-	"bufio"
-	"encoding/xml"
-	"fmt"
-	"io"
-	"runtime"
-	"strings"
-	"time"
-
-	"github.com/jstemmer/go-junit-report/parser"
-)
-
-// JUnitTestSuites is a collection of JUnit test suites.
-type JUnitTestSuites struct {
-	XMLName xml.Name         `xml:"testsuites"`
-	Suites  []JUnitTestSuite `xml:"testsuite"`
-}
-
-// JUnitTestSuite is a single JUnit test suite which may contain many
-// testcases.
-type JUnitTestSuite struct {
-	XMLName    xml.Name        `xml:"testsuite"`
-	Tests      int             `xml:"tests,attr"`
-	Failures   int             `xml:"failures,attr"`
-	Time       string          `xml:"time,attr"`
-	Name       string          `xml:"name,attr"`
-	Properties []JUnitProperty `xml:"properties>property,omitempty"`
-	TestCases  []JUnitTestCase `xml:"testcase"`
-}
-
-// JUnitTestCase is a single test case with its result.
-type JUnitTestCase struct {
-	XMLName     xml.Name          `xml:"testcase"`
-	Classname   string            `xml:"classname,attr"`
-	Name        string            `xml:"name,attr"`
-	Time        string            `xml:"time,attr"`
-	SkipMessage *JUnitSkipMessage `xml:"skipped,omitempty"`
-	Failure     *JUnitFailure     `xml:"failure,omitempty"`
-}
-
-// JUnitSkipMessage contains the reason why a testcase was skipped.
-type JUnitSkipMessage struct {
-	Message string `xml:"message,attr"`
-}
-
-// JUnitProperty represents a key/value pair used to define properties.
-type JUnitProperty struct {
-	Name  string `xml:"name,attr"`
-	Value string `xml:"value,attr"`
-}
-
-// JUnitFailure contains data related to a failed test.
-type JUnitFailure struct {
-	Message  string `xml:"message,attr"`
-	Type     string `xml:"type,attr"`
-	Contents string `xml:",chardata"`
-}
-
-// JUnitReportXML writes a JUnit xml representation of the given report to w
-// in the format described at http://windyroad.org/dl/Open%20Source/JUnit.xsd
-func JUnitReportXML(report *parser.Report, noXMLHeader bool, goVersion string, w io.Writer) error {
-	suites := JUnitTestSuites{}
-
-	// convert Report to JUnit test suites
-	for _, pkg := range report.Packages {
-		pkg.Benchmarks = mergeBenchmarks(pkg.Benchmarks)
-		ts := JUnitTestSuite{
-			Tests:      len(pkg.Tests) + len(pkg.Benchmarks),
-			Failures:   0,
-			Time:       formatTime(pkg.Duration),
-			Name:       pkg.Name,
-			Properties: []JUnitProperty{},
-			TestCases:  []JUnitTestCase{},
-		}
-
-		classname := pkg.Name
-		if idx := strings.LastIndex(classname, "/"); idx > -1 && idx < len(pkg.Name) {
-			classname = pkg.Name[idx+1:]
-		}
-
-		// properties
-		if goVersion == "" {
-			// if goVersion was not specified as a flag, fall back to version reported by runtime
-			goVersion = runtime.Version()
-		}
-		ts.Properties = append(ts.Properties, JUnitProperty{"go.version", goVersion})
-		if pkg.CoveragePct != "" {
-			ts.Properties = append(ts.Properties, JUnitProperty{"coverage.statements.pct", pkg.CoveragePct})
-		}
-
-		// individual test cases
-		for _, test := range pkg.Tests {
-			testCase := JUnitTestCase{
-				Classname: classname,
-				Name:      test.Name,
-				Time:      formatTime(test.Duration),
-				Failure:   nil,
-			}
-
-			if test.Result == parser.FAIL {
-				ts.Failures++
-				testCase.Failure = &JUnitFailure{
-					Message:  "Failed",
-					Type:     "",
-					Contents: strings.Join(test.Output, "\n"),
-				}
-			}
-
-			if test.Result == parser.SKIP {
-				testCase.SkipMessage = &JUnitSkipMessage{strings.Join(test.Output, "\n")}
-			}
-
-			ts.TestCases = append(ts.TestCases, testCase)
-		}
-
-		// individual benchmarks
-		for _, benchmark := range pkg.Benchmarks {
-			benchmarkCase := JUnitTestCase{
-				Classname: classname,
-				Name:      benchmark.Name,
-				Time:      formatBenchmarkTime(benchmark.Duration),
-			}
-
-			ts.TestCases = append(ts.TestCases, benchmarkCase)
-		}
-
-		suites.Suites = append(suites.Suites, ts)
-	}
-
-	// to xml
-	bytes, err := xml.MarshalIndent(suites, "", "\t")
-	if err != nil {
-		return err
-	}
-
-	writer := bufio.NewWriter(w)
-
-	if !noXMLHeader {
-		writer.WriteString(xml.Header)
-	}
-
-	writer.Write(bytes)
-	writer.WriteByte('\n')
-	writer.Flush()
-
-	return nil
-}
-
-func mergeBenchmarks(benchmarks []*parser.Benchmark) []*parser.Benchmark {
-	var merged []*parser.Benchmark
-	benchmap := make(map[string][]*parser.Benchmark)
-	for _, bm := range benchmarks {
-		if _, ok := benchmap[bm.Name]; !ok {
-			merged = append(merged, &parser.Benchmark{Name: bm.Name})
-		}
-		benchmap[bm.Name] = append(benchmap[bm.Name], bm)
-	}
-
-	for _, bm := range merged {
-		for _, b := range benchmap[bm.Name] {
-			bm.Allocs += b.Allocs
-			bm.Bytes += b.Bytes
-			bm.Duration += b.Duration
-		}
-		n := len(benchmap[bm.Name])
-		bm.Allocs /= n
-		bm.Bytes /= n
-		bm.Duration /= time.Duration(n)
-	}
-
-	return merged
-}
-
-func formatTime(d time.Duration) string {
-	return fmt.Sprintf("%.3f", d.Seconds())
-}
-
-func formatBenchmarkTime(d time.Duration) string {
-	return fmt.Sprintf("%.9f", d.Seconds())
-}

+ 0 - 45
vendor/github.com/jstemmer/go-junit-report/go-junit-report.go

@@ -1,45 +0,0 @@
-package main
-
-import (
-	"flag"
-	"fmt"
-	"os"
-
-	"github.com/jstemmer/go-junit-report/formatter"
-	"github.com/jstemmer/go-junit-report/parser"
-)
-
-var (
-	noXMLHeader   = flag.Bool("no-xml-header", false, "do not print xml header")
-	packageName   = flag.String("package-name", "", "specify a package name (compiled test have no package name in output)")
-	goVersionFlag = flag.String("go-version", "", "specify the value to use for the go.version property in the generated XML")
-	setExitCode   = flag.Bool("set-exit-code", false, "set exit code to 1 if tests failed")
-)
-
-func main() {
-	flag.Parse()
-
-	if flag.NArg() != 0 {
-		fmt.Fprintf(os.Stderr, "%s does not accept positional arguments\n", os.Args[0])
-		flag.Usage()
-		os.Exit(1)
-	}
-
-	// Read input
-	report, err := parser.Parse(os.Stdin, *packageName)
-	if err != nil {
-		fmt.Printf("Error reading input: %s\n", err)
-		os.Exit(1)
-	}
-
-	// Write xml
-	err = formatter.JUnitReportXML(report, *noXMLHeader, *goVersionFlag, os.Stdout)
-	if err != nil {
-		fmt.Printf("Error writing XML: %s\n", err)
-		os.Exit(1)
-	}
-
-	if *setExitCode && report.Failures() > 0 {
-		os.Exit(1)
-	}
-}

+ 0 - 319
vendor/github.com/jstemmer/go-junit-report/parser/parser.go

@@ -1,319 +0,0 @@
-package parser
-
-import (
-	"bufio"
-	"io"
-	"regexp"
-	"strconv"
-	"strings"
-	"time"
-)
-
-// Result represents a test result.
-type Result int
-
-// Test result constants
-const (
-	PASS Result = iota
-	FAIL
-	SKIP
-)
-
-// Report is a collection of package tests.
-type Report struct {
-	Packages []Package
-}
-
-// Package contains the test results of a single package.
-type Package struct {
-	Name        string
-	Duration    time.Duration
-	Tests       []*Test
-	Benchmarks  []*Benchmark
-	CoveragePct string
-
-	// Time is deprecated, use Duration instead.
-	Time int // in milliseconds
-}
-
-// Test contains the results of a single test.
-type Test struct {
-	Name     string
-	Duration time.Duration
-	Result   Result
-	Output   []string
-
-	SubtestIndent string
-
-	// Time is deprecated, use Duration instead.
-	Time int // in milliseconds
-}
-
-// Benchmark contains the results of a single benchmark.
-type Benchmark struct {
-	Name     string
-	Duration time.Duration
-	// number of B/op
-	Bytes int
-	// number of allocs/op
-	Allocs int
-}
-
-var (
-	regexStatus   = regexp.MustCompile(`--- (PASS|FAIL|SKIP): (.+) \((\d+\.\d+)(?: seconds|s)\)`)
-	regexIndent   = regexp.MustCompile(`^([ \t]+)---`)
-	regexCoverage = regexp.MustCompile(`^coverage:\s+(\d+\.\d+)%\s+of\s+statements(?:\sin\s.+)?$`)
-	regexResult   = regexp.MustCompile(`^(ok|FAIL)\s+([^ ]+)\s+(?:(\d+\.\d+)s|\(cached\)|(\[\w+ failed]))(?:\s+coverage:\s+(\d+\.\d+)%\sof\sstatements(?:\sin\s.+)?)?$`)
-	// regexBenchmark captures 3-5 groups: benchmark name, number of times ran, ns/op (with or without decimal), B/op (optional), and allocs/op (optional).
-	regexBenchmark       = regexp.MustCompile(`^(Benchmark[^ -]+)(?:-\d+\s+|\s+)(\d+)\s+(\d+|\d+\.\d+)\sns/op(?:\s+(\d+)\sB/op)?(?:\s+(\d+)\sallocs/op)?`)
-	regexOutput          = regexp.MustCompile(`(    )*\t(.*)`)
-	regexSummary         = regexp.MustCompile(`^(PASS|FAIL|SKIP)$`)
-	regexPackageWithTest = regexp.MustCompile(`^# ([^\[\]]+) \[[^\]]+\]$`)
-)
-
-// Parse parses go test output from reader r and returns a report with the
-// results. An optional pkgName can be given, which is used in case a package
-// result line is missing.
-func Parse(r io.Reader, pkgName string) (*Report, error) {
-	reader := bufio.NewReader(r)
-
-	report := &Report{make([]Package, 0)}
-
-	// keep track of tests we find
-	var tests []*Test
-
-	// keep track of benchmarks we find
-	var benchmarks []*Benchmark
-
-	// sum of tests' time, use this if current test has no result line (when it is compiled test)
-	var testsTime time.Duration
-
-	// current test
-	var cur string
-
-	// coverage percentage report for current package
-	var coveragePct string
-
-	// stores mapping between package name and output of build failures
-	var packageCaptures = map[string][]string{}
-
-	// the name of the package which it's build failure output is being captured
-	var capturedPackage string
-
-	// capture any non-test output
-	var buffers = map[string][]string{}
-
-	// parse lines
-	for {
-		l, _, err := reader.ReadLine()
-		if err != nil && err == io.EOF {
-			break
-		} else if err != nil {
-			return nil, err
-		}
-
-		line := string(l)
-
-		if strings.HasPrefix(line, "=== RUN ") {
-			// new test
-			cur = strings.TrimSpace(line[8:])
-			tests = append(tests, &Test{
-				Name:   cur,
-				Result: FAIL,
-				Output: make([]string, 0),
-			})
-
-			// clear the current build package, so output lines won't be added to that build
-			capturedPackage = ""
-		} else if matches := regexBenchmark.FindStringSubmatch(line); len(matches) == 6 {
-			bytes, _ := strconv.Atoi(matches[4])
-			allocs, _ := strconv.Atoi(matches[5])
-
-			benchmarks = append(benchmarks, &Benchmark{
-				Name:     matches[1],
-				Duration: parseNanoseconds(matches[3]),
-				Bytes:    bytes,
-				Allocs:   allocs,
-			})
-		} else if strings.HasPrefix(line, "=== PAUSE ") {
-			continue
-		} else if strings.HasPrefix(line, "=== CONT ") {
-			cur = strings.TrimSpace(line[8:])
-			continue
-		} else if matches := regexResult.FindStringSubmatch(line); len(matches) == 6 {
-			if matches[5] != "" {
-				coveragePct = matches[5]
-			}
-			if strings.HasSuffix(matches[4], "failed]") {
-				// the build of the package failed, inject a dummy test into the package
-				// which indicate about the failure and contain the failure description.
-				tests = append(tests, &Test{
-					Name:   matches[4],
-					Result: FAIL,
-					Output: packageCaptures[matches[2]],
-				})
-			} else if matches[1] == "FAIL" && !containsFailures(tests) && len(buffers[cur]) > 0 {
-				// This package didn't have any failing tests, but still it
-				// failed with some output. Create a dummy test with the
-				// output.
-				tests = append(tests, &Test{
-					Name:   "Failure",
-					Result: FAIL,
-					Output: buffers[cur],
-				})
-				buffers[cur] = buffers[cur][0:0]
-			}
-
-			// all tests in this package are finished
-			report.Packages = append(report.Packages, Package{
-				Name:        matches[2],
-				Duration:    parseSeconds(matches[3]),
-				Tests:       tests,
-				Benchmarks:  benchmarks,
-				CoveragePct: coveragePct,
-
-				Time: int(parseSeconds(matches[3]) / time.Millisecond), // deprecated
-			})
-
-			buffers[cur] = buffers[cur][0:0]
-			tests = make([]*Test, 0)
-			benchmarks = make([]*Benchmark, 0)
-			coveragePct = ""
-			cur = ""
-			testsTime = 0
-		} else if matches := regexStatus.FindStringSubmatch(line); len(matches) == 4 {
-			cur = matches[2]
-			test := findTest(tests, cur)
-			if test == nil {
-				continue
-			}
-
-			// test status
-			if matches[1] == "PASS" {
-				test.Result = PASS
-			} else if matches[1] == "SKIP" {
-				test.Result = SKIP
-			} else {
-				test.Result = FAIL
-			}
-
-			if matches := regexIndent.FindStringSubmatch(line); len(matches) == 2 {
-				test.SubtestIndent = matches[1]
-			}
-
-			test.Output = buffers[cur]
-
-			test.Name = matches[2]
-			test.Duration = parseSeconds(matches[3])
-			testsTime += test.Duration
-
-			test.Time = int(test.Duration / time.Millisecond) // deprecated
-		} else if matches := regexCoverage.FindStringSubmatch(line); len(matches) == 2 {
-			coveragePct = matches[1]
-		} else if matches := regexOutput.FindStringSubmatch(line); capturedPackage == "" && len(matches) == 3 {
-			// Sub-tests start with one or more series of 4-space indents, followed by a hard tab,
-			// followed by the test output
-			// Top-level tests start with a hard tab.
-			test := findTest(tests, cur)
-			if test == nil {
-				continue
-			}
-			test.Output = append(test.Output, matches[2])
-		} else if strings.HasPrefix(line, "# ") {
-			// indicates a capture of build output of a package. set the current build package.
-			packageWithTestBinary := regexPackageWithTest.FindStringSubmatch(line)
-			if packageWithTestBinary != nil {
-				// Sometimes, the text after "# " shows the name of the test binary
-				// ("<package>.test") in addition to the package
-				// e.g.: "# package/name [package/name.test]"
-				capturedPackage = packageWithTestBinary[1]
-			} else {
-				capturedPackage = line[2:]
-			}
-		} else if capturedPackage != "" {
-			// current line is build failure capture for the current built package
-			packageCaptures[capturedPackage] = append(packageCaptures[capturedPackage], line)
-		} else if regexSummary.MatchString(line) {
-			// unset current test name so any additional output after the
-			// summary is captured separately.
-			cur = ""
-		} else {
-			// buffer anything else that we didn't recognize
-			buffers[cur] = append(buffers[cur], line)
-
-			// if we have a current test, also append to its output
-			test := findTest(tests, cur)
-			if test != nil {
-				if strings.HasPrefix(line, test.SubtestIndent+"    ") {
-					test.Output = append(test.Output, strings.TrimPrefix(line, test.SubtestIndent+"    "))
-				}
-			}
-		}
-	}
-
-	if len(tests) > 0 {
-		// no result line found
-		report.Packages = append(report.Packages, Package{
-			Name:        pkgName,
-			Duration:    testsTime,
-			Time:        int(testsTime / time.Millisecond),
-			Tests:       tests,
-			Benchmarks:  benchmarks,
-			CoveragePct: coveragePct,
-		})
-	}
-
-	return report, nil
-}
-
-func parseSeconds(t string) time.Duration {
-	if t == "" {
-		return time.Duration(0)
-	}
-	// ignore error
-	d, _ := time.ParseDuration(t + "s")
-	return d
-}
-
-func parseNanoseconds(t string) time.Duration {
-	// note: if input < 1 ns precision, result will be 0s.
-	if t == "" {
-		return time.Duration(0)
-	}
-	// ignore error
-	d, _ := time.ParseDuration(t + "ns")
-	return d
-}
-
-func findTest(tests []*Test, name string) *Test {
-	for i := len(tests) - 1; i >= 0; i-- {
-		if tests[i].Name == name {
-			return tests[i]
-		}
-	}
-	return nil
-}
-
-func containsFailures(tests []*Test) bool {
-	for _, test := range tests {
-		if test.Result == FAIL {
-			return true
-		}
-	}
-	return false
-}
-
-// Failures counts the number of failed tests in this report
-func (r *Report) Failures() int {
-	count := 0
-
-	for _, p := range r.Packages {
-		for _, t := range p.Tests {
-			if t.Result == FAIL {
-				count++
-			}
-		}
-	}
-
-	return count
-}

+ 0 - 19
vendor/golang.org/x/lint/.travis.yml

@@ -1,19 +0,0 @@
-sudo: false
-language: go
-go:
-  - 1.10.x
-  - 1.11.x
-  - master
-
-go_import_path: golang.org/x/lint
-
-install:
-  - go get -t -v ./...
-
-script:
-  - go test -v -race ./...
-
-matrix:
-  allow_failures:
-    - go: master
-  fast_finish: true

+ 0 - 15
vendor/golang.org/x/lint/CONTRIBUTING.md

@@ -1,15 +0,0 @@
-# Contributing to Golint
-
-## Before filing an issue:
-
-### Are you having trouble building golint?
-
-Check you have the latest version of its dependencies. Run
-```
-go get -u golang.org/x/lint/golint
-```
-If you still have problems, consider searching for existing issues before filing a new issue.
-
-## Before sending a pull request:
-
-Have you understood the purpose of golint? Make sure to carefully read `README`.

+ 0 - 27
vendor/golang.org/x/lint/LICENSE

@@ -1,27 +0,0 @@
-Copyright (c) 2013 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 0 - 93
vendor/golang.org/x/lint/README.md

@@ -1,93 +0,0 @@
-**NOTE:** Golint is [deprecated and frozen](https://github.com/golang/go/issues/38968).
-There's no drop-in replacement for it, but tools such as [Staticcheck](https://staticcheck.io/)
-and `go vet` should be used instead.
-
-Golint is a linter for Go source code.
-
-[![Go Reference](https://pkg.go.dev/badge/golang.org/x/lint.svg)](https://pkg.go.dev/golang.org/x/lint)
-[![Build Status](https://travis-ci.org/golang/lint.svg?branch=master)](https://travis-ci.org/golang/lint)
-
-## Installation
-
-Golint requires a
-[supported release of Go](https://golang.org/doc/devel/release.html#policy).
-
-    go get -u golang.org/x/lint/golint
-
-To find out where `golint` was installed you can run `go list -f {{.Target}} golang.org/x/lint/golint`. For `golint` to be used globally add that directory to the `$PATH` environment setting.
-
-## Usage
-
-Invoke `golint` with one or more filenames, directories, or packages named
-by its import path. Golint uses the same
-[import path syntax](https://golang.org/cmd/go/#hdr-Import_path_syntax) as
-the `go` command and therefore
-also supports relative import paths like `./...`. Additionally the `...`
-wildcard can be used as suffix on relative and absolute file paths to recurse
-into them.
-
-The output of this tool is a list of suggestions in Vim quickfix format,
-which is accepted by lots of different editors.
-
-## Purpose
-
-Golint differs from gofmt. Gofmt reformats Go source code, whereas
-golint prints out style mistakes.
-
-Golint differs from govet. Govet is concerned with correctness, whereas
-golint is concerned with coding style. Golint is in use at Google, and it
-seeks to match the accepted style of the open source Go project.
-
-The suggestions made by golint are exactly that: suggestions.
-Golint is not perfect, and has both false positives and false negatives.
-Do not treat its output as a gold standard. We will not be adding pragmas
-or other knobs to suppress specific warnings, so do not expect or require
-code to be completely "lint-free".
-In short, this tool is not, and will never be, trustworthy enough for its
-suggestions to be enforced automatically, for example as part of a build process.
-Golint makes suggestions for many of the mechanically checkable items listed in
-[Effective Go](https://golang.org/doc/effective_go.html) and the
-[CodeReviewComments wiki page](https://golang.org/wiki/CodeReviewComments).
-
-## Scope
-
-Golint is meant to carry out the stylistic conventions put forth in
-[Effective Go](https://golang.org/doc/effective_go.html) and
-[CodeReviewComments](https://golang.org/wiki/CodeReviewComments).
-Changes that are not aligned with those documents will not be considered.
-
-## Contributions
-
-Contributions to this project are welcome provided they are [in scope](#scope),
-though please send mail before starting work on anything major.
-Contributors retain their copyright, so we need you to fill out
-[a short form](https://developers.google.com/open-source/cla/individual)
-before we can accept your contribution.
-
-## Vim
-
-Add this to your ~/.vimrc:
-
-    set rtp+=$GOPATH/src/golang.org/x/lint/misc/vim
-
-If you have multiple entries in your GOPATH, replace `$GOPATH` with the right value.
-
-Running `:Lint` will run golint on the current file and populate the quickfix list.
-
-Optionally, add this to your `~/.vimrc` to automatically run `golint` on `:w`
-
-    autocmd BufWritePost,FileWritePost *.go execute 'Lint' | cwindow
-
-
-## Emacs
-
-Add this to your `.emacs` file:
-
-    (add-to-list 'load-path (concat (getenv "GOPATH")  "/src/golang.org/x/lint/misc/emacs/"))
-    (require 'golint)
-
-If you have multiple entries in your GOPATH, replace `$GOPATH` with the right value.
-
-Running M-x golint will run golint on the current file.
-
-For more usage, see [Compilation-Mode](http://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation-Mode.html).

+ 0 - 159
vendor/golang.org/x/lint/golint/golint.go

@@ -1,159 +0,0 @@
-// Copyright (c) 2013 The Go Authors. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd.
-
-// golint lints the Go source files named on its command line.
-package main
-
-import (
-	"flag"
-	"fmt"
-	"go/build"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"strings"
-
-	"golang.org/x/lint"
-)
-
-var (
-	minConfidence = flag.Float64("min_confidence", 0.8, "minimum confidence of a problem to print it")
-	setExitStatus = flag.Bool("set_exit_status", false, "set exit status to 1 if any issues are found")
-	suggestions   int
-)
-
-func usage() {
-	fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
-	fmt.Fprintf(os.Stderr, "\tgolint [flags] # runs on package in current directory\n")
-	fmt.Fprintf(os.Stderr, "\tgolint [flags] [packages]\n")
-	fmt.Fprintf(os.Stderr, "\tgolint [flags] [directories] # where a '/...' suffix includes all sub-directories\n")
-	fmt.Fprintf(os.Stderr, "\tgolint [flags] [files] # all must belong to a single package\n")
-	fmt.Fprintf(os.Stderr, "Flags:\n")
-	flag.PrintDefaults()
-}
-
-func main() {
-	flag.Usage = usage
-	flag.Parse()
-
-	if flag.NArg() == 0 {
-		lintDir(".")
-	} else {
-		// dirsRun, filesRun, and pkgsRun indicate whether golint is applied to
-		// directory, file or package targets. The distinction affects which
-		// checks are run. It is no valid to mix target types.
-		var dirsRun, filesRun, pkgsRun int
-		var args []string
-		for _, arg := range flag.Args() {
-			if strings.HasSuffix(arg, "/...") && isDir(arg[:len(arg)-len("/...")]) {
-				dirsRun = 1
-				for _, dirname := range allPackagesInFS(arg) {
-					args = append(args, dirname)
-				}
-			} else if isDir(arg) {
-				dirsRun = 1
-				args = append(args, arg)
-			} else if exists(arg) {
-				filesRun = 1
-				args = append(args, arg)
-			} else {
-				pkgsRun = 1
-				args = append(args, arg)
-			}
-		}
-
-		if dirsRun+filesRun+pkgsRun != 1 {
-			usage()
-			os.Exit(2)
-		}
-		switch {
-		case dirsRun == 1:
-			for _, dir := range args {
-				lintDir(dir)
-			}
-		case filesRun == 1:
-			lintFiles(args...)
-		case pkgsRun == 1:
-			for _, pkg := range importPaths(args) {
-				lintPackage(pkg)
-			}
-		}
-	}
-
-	if *setExitStatus && suggestions > 0 {
-		fmt.Fprintf(os.Stderr, "Found %d lint suggestions; failing.\n", suggestions)
-		os.Exit(1)
-	}
-}
-
-func isDir(filename string) bool {
-	fi, err := os.Stat(filename)
-	return err == nil && fi.IsDir()
-}
-
-func exists(filename string) bool {
-	_, err := os.Stat(filename)
-	return err == nil
-}
-
-func lintFiles(filenames ...string) {
-	files := make(map[string][]byte)
-	for _, filename := range filenames {
-		src, err := ioutil.ReadFile(filename)
-		if err != nil {
-			fmt.Fprintln(os.Stderr, err)
-			continue
-		}
-		files[filename] = src
-	}
-
-	l := new(lint.Linter)
-	ps, err := l.LintFiles(files)
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "%v\n", err)
-		return
-	}
-	for _, p := range ps {
-		if p.Confidence >= *minConfidence {
-			fmt.Printf("%v: %s\n", p.Position, p.Text)
-			suggestions++
-		}
-	}
-}
-
-func lintDir(dirname string) {
-	pkg, err := build.ImportDir(dirname, 0)
-	lintImportedPackage(pkg, err)
-}
-
-func lintPackage(pkgname string) {
-	pkg, err := build.Import(pkgname, ".", 0)
-	lintImportedPackage(pkg, err)
-}
-
-func lintImportedPackage(pkg *build.Package, err error) {
-	if err != nil {
-		if _, nogo := err.(*build.NoGoError); nogo {
-			// Don't complain if the failure is due to no Go source files.
-			return
-		}
-		fmt.Fprintln(os.Stderr, err)
-		return
-	}
-
-	var files []string
-	files = append(files, pkg.GoFiles...)
-	files = append(files, pkg.CgoFiles...)
-	files = append(files, pkg.TestGoFiles...)
-	if pkg.Dir != "." {
-		for i, f := range files {
-			files[i] = filepath.Join(pkg.Dir, f)
-		}
-	}
-	// TODO(dsymonds): Do foo_test too (pkg.XTestGoFiles)
-
-	lintFiles(files...)
-}

+ 0 - 309
vendor/golang.org/x/lint/golint/import.go

@@ -1,309 +0,0 @@
-package main
-
-/*
-
-This file holds a direct copy of the import path matching code of
-https://github.com/golang/go/blob/master/src/cmd/go/main.go. It can be
-replaced when https://golang.org/issue/8768 is resolved.
-
-It has been updated to follow upstream changes in a few ways.
-
-*/
-
-import (
-	"fmt"
-	"go/build"
-	"log"
-	"os"
-	"path"
-	"path/filepath"
-	"regexp"
-	"runtime"
-	"strings"
-)
-
-var (
-	buildContext = build.Default
-	goroot       = filepath.Clean(runtime.GOROOT())
-	gorootSrc    = filepath.Join(goroot, "src")
-)
-
-// importPathsNoDotExpansion returns the import paths to use for the given
-// command line, but it does no ... expansion.
-func importPathsNoDotExpansion(args []string) []string {
-	if len(args) == 0 {
-		return []string{"."}
-	}
-	var out []string
-	for _, a := range args {
-		// Arguments are supposed to be import paths, but
-		// as a courtesy to Windows developers, rewrite \ to /
-		// in command-line arguments.  Handles .\... and so on.
-		if filepath.Separator == '\\' {
-			a = strings.Replace(a, `\`, `/`, -1)
-		}
-
-		// Put argument in canonical form, but preserve leading ./.
-		if strings.HasPrefix(a, "./") {
-			a = "./" + path.Clean(a)
-			if a == "./." {
-				a = "."
-			}
-		} else {
-			a = path.Clean(a)
-		}
-		if a == "all" || a == "std" {
-			out = append(out, allPackages(a)...)
-			continue
-		}
-		out = append(out, a)
-	}
-	return out
-}
-
-// importPaths returns the import paths to use for the given command line.
-func importPaths(args []string) []string {
-	args = importPathsNoDotExpansion(args)
-	var out []string
-	for _, a := range args {
-		if strings.Contains(a, "...") {
-			if build.IsLocalImport(a) {
-				out = append(out, allPackagesInFS(a)...)
-			} else {
-				out = append(out, allPackages(a)...)
-			}
-			continue
-		}
-		out = append(out, a)
-	}
-	return out
-}
-
-// matchPattern(pattern)(name) reports whether
-// name matches pattern.  Pattern is a limited glob
-// pattern in which '...' means 'any string' and there
-// is no other special syntax.
-func matchPattern(pattern string) func(name string) bool {
-	re := regexp.QuoteMeta(pattern)
-	re = strings.Replace(re, `\.\.\.`, `.*`, -1)
-	// Special case: foo/... matches foo too.
-	if strings.HasSuffix(re, `/.*`) {
-		re = re[:len(re)-len(`/.*`)] + `(/.*)?`
-	}
-	reg := regexp.MustCompile(`^` + re + `$`)
-	return func(name string) bool {
-		return reg.MatchString(name)
-	}
-}
-
-// hasPathPrefix reports whether the path s begins with the
-// elements in prefix.
-func hasPathPrefix(s, prefix string) bool {
-	switch {
-	default:
-		return false
-	case len(s) == len(prefix):
-		return s == prefix
-	case len(s) > len(prefix):
-		if prefix != "" && prefix[len(prefix)-1] == '/' {
-			return strings.HasPrefix(s, prefix)
-		}
-		return s[len(prefix)] == '/' && s[:len(prefix)] == prefix
-	}
-}
-
-// treeCanMatchPattern(pattern)(name) reports whether
-// name or children of name can possibly match pattern.
-// Pattern is the same limited glob accepted by matchPattern.
-func treeCanMatchPattern(pattern string) func(name string) bool {
-	wildCard := false
-	if i := strings.Index(pattern, "..."); i >= 0 {
-		wildCard = true
-		pattern = pattern[:i]
-	}
-	return func(name string) bool {
-		return len(name) <= len(pattern) && hasPathPrefix(pattern, name) ||
-			wildCard && strings.HasPrefix(name, pattern)
-	}
-}
-
-// allPackages returns all the packages that can be found
-// under the $GOPATH directories and $GOROOT matching pattern.
-// The pattern is either "all" (all packages), "std" (standard packages)
-// or a path including "...".
-func allPackages(pattern string) []string {
-	pkgs := matchPackages(pattern)
-	if len(pkgs) == 0 {
-		fmt.Fprintf(os.Stderr, "warning: %q matched no packages\n", pattern)
-	}
-	return pkgs
-}
-
-func matchPackages(pattern string) []string {
-	match := func(string) bool { return true }
-	treeCanMatch := func(string) bool { return true }
-	if pattern != "all" && pattern != "std" {
-		match = matchPattern(pattern)
-		treeCanMatch = treeCanMatchPattern(pattern)
-	}
-
-	have := map[string]bool{
-		"builtin": true, // ignore pseudo-package that exists only for documentation
-	}
-	if !buildContext.CgoEnabled {
-		have["runtime/cgo"] = true // ignore during walk
-	}
-	var pkgs []string
-
-	// Commands
-	cmd := filepath.Join(goroot, "src/cmd") + string(filepath.Separator)
-	filepath.Walk(cmd, func(path string, fi os.FileInfo, err error) error {
-		if err != nil || !fi.IsDir() || path == cmd {
-			return nil
-		}
-		name := path[len(cmd):]
-		if !treeCanMatch(name) {
-			return filepath.SkipDir
-		}
-		// Commands are all in cmd/, not in subdirectories.
-		if strings.Contains(name, string(filepath.Separator)) {
-			return filepath.SkipDir
-		}
-
-		// We use, e.g., cmd/gofmt as the pseudo import path for gofmt.
-		name = "cmd/" + name
-		if have[name] {
-			return nil
-		}
-		have[name] = true
-		if !match(name) {
-			return nil
-		}
-		_, err = buildContext.ImportDir(path, 0)
-		if err != nil {
-			if _, noGo := err.(*build.NoGoError); !noGo {
-				log.Print(err)
-			}
-			return nil
-		}
-		pkgs = append(pkgs, name)
-		return nil
-	})
-
-	for _, src := range buildContext.SrcDirs() {
-		if (pattern == "std" || pattern == "cmd") && src != gorootSrc {
-			continue
-		}
-		src = filepath.Clean(src) + string(filepath.Separator)
-		root := src
-		if pattern == "cmd" {
-			root += "cmd" + string(filepath.Separator)
-		}
-		filepath.Walk(root, func(path string, fi os.FileInfo, err error) error {
-			if err != nil || !fi.IsDir() || path == src {
-				return nil
-			}
-
-			// Avoid .foo, _foo, and testdata directory trees.
-			_, elem := filepath.Split(path)
-			if strings.HasPrefix(elem, ".") || strings.HasPrefix(elem, "_") || elem == "testdata" {
-				return filepath.SkipDir
-			}
-
-			name := filepath.ToSlash(path[len(src):])
-			if pattern == "std" && (strings.Contains(name, ".") || name == "cmd") {
-				// The name "std" is only the standard library.
-				// If the name is cmd, it's the root of the command tree.
-				return filepath.SkipDir
-			}
-			if !treeCanMatch(name) {
-				return filepath.SkipDir
-			}
-			if have[name] {
-				return nil
-			}
-			have[name] = true
-			if !match(name) {
-				return nil
-			}
-			_, err = buildContext.ImportDir(path, 0)
-			if err != nil {
-				if _, noGo := err.(*build.NoGoError); noGo {
-					return nil
-				}
-			}
-			pkgs = append(pkgs, name)
-			return nil
-		})
-	}
-	return pkgs
-}
-
-// allPackagesInFS is like allPackages but is passed a pattern
-// beginning ./ or ../, meaning it should scan the tree rooted
-// at the given directory.  There are ... in the pattern too.
-func allPackagesInFS(pattern string) []string {
-	pkgs := matchPackagesInFS(pattern)
-	if len(pkgs) == 0 {
-		fmt.Fprintf(os.Stderr, "warning: %q matched no packages\n", pattern)
-	}
-	return pkgs
-}
-
-func matchPackagesInFS(pattern string) []string {
-	// Find directory to begin the scan.
-	// Could be smarter but this one optimization
-	// is enough for now, since ... is usually at the
-	// end of a path.
-	i := strings.Index(pattern, "...")
-	dir, _ := path.Split(pattern[:i])
-
-	// pattern begins with ./ or ../.
-	// path.Clean will discard the ./ but not the ../.
-	// We need to preserve the ./ for pattern matching
-	// and in the returned import paths.
-	prefix := ""
-	if strings.HasPrefix(pattern, "./") {
-		prefix = "./"
-	}
-	match := matchPattern(pattern)
-
-	var pkgs []string
-	filepath.Walk(dir, func(path string, fi os.FileInfo, err error) error {
-		if err != nil || !fi.IsDir() {
-			return nil
-		}
-		if path == dir {
-			// filepath.Walk starts at dir and recurses. For the recursive case,
-			// the path is the result of filepath.Join, which calls filepath.Clean.
-			// The initial case is not Cleaned, though, so we do this explicitly.
-			//
-			// This converts a path like "./io/" to "io". Without this step, running
-			// "cd $GOROOT/src/pkg; go list ./io/..." would incorrectly skip the io
-			// package, because prepending the prefix "./" to the unclean path would
-			// result in "././io", and match("././io") returns false.
-			path = filepath.Clean(path)
-		}
-
-		// Avoid .foo, _foo, and testdata directory trees, but do not avoid "." or "..".
-		_, elem := filepath.Split(path)
-		dot := strings.HasPrefix(elem, ".") && elem != "." && elem != ".."
-		if dot || strings.HasPrefix(elem, "_") || elem == "testdata" {
-			return filepath.SkipDir
-		}
-
-		name := prefix + filepath.ToSlash(path)
-		if !match(name) {
-			return nil
-		}
-		if _, err = build.ImportDir(path, 0); err != nil {
-			if _, noGo := err.(*build.NoGoError); !noGo {
-				log.Print(err)
-			}
-			return nil
-		}
-		pkgs = append(pkgs, name)
-		return nil
-	})
-	return pkgs
-}

+ 0 - 13
vendor/golang.org/x/lint/golint/importcomment.go

@@ -1,13 +0,0 @@
-// Copyright (c) 2018 The Go Authors. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd.
-
-// +build go1.12
-
-// Require use of the correct import path only for Go 1.12+ users, so
-// any breakages coincide with people updating their CI configs or
-// whatnot.
-
-package main // import "golang.org/x/lint/golint"

+ 0 - 1615
vendor/golang.org/x/lint/lint.go

@@ -1,1615 +0,0 @@
-// Copyright (c) 2013 The Go Authors. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd.
-
-// Package lint contains a linter for Go source code.
-package lint // import "golang.org/x/lint"
-
-import (
-	"bufio"
-	"bytes"
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/printer"
-	"go/token"
-	"go/types"
-	"regexp"
-	"sort"
-	"strconv"
-	"strings"
-	"unicode"
-	"unicode/utf8"
-
-	"golang.org/x/tools/go/ast/astutil"
-	"golang.org/x/tools/go/gcexportdata"
-)
-
-const styleGuideBase = "https://golang.org/wiki/CodeReviewComments"
-
-// A Linter lints Go source code.
-type Linter struct {
-}
-
-// Problem represents a problem in some source code.
-type Problem struct {
-	Position   token.Position // position in source file
-	Text       string         // the prose that describes the problem
-	Link       string         // (optional) the link to the style guide for the problem
-	Confidence float64        // a value in (0,1] estimating the confidence in this problem's correctness
-	LineText   string         // the source line
-	Category   string         // a short name for the general category of the problem
-
-	// If the problem has a suggested fix (the minority case),
-	// ReplacementLine is a full replacement for the relevant line of the source file.
-	ReplacementLine string
-}
-
-func (p *Problem) String() string {
-	if p.Link != "" {
-		return p.Text + "\n\n" + p.Link
-	}
-	return p.Text
-}
-
-type byPosition []Problem
-
-func (p byPosition) Len() int      { return len(p) }
-func (p byPosition) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
-
-func (p byPosition) Less(i, j int) bool {
-	pi, pj := p[i].Position, p[j].Position
-
-	if pi.Filename != pj.Filename {
-		return pi.Filename < pj.Filename
-	}
-	if pi.Line != pj.Line {
-		return pi.Line < pj.Line
-	}
-	if pi.Column != pj.Column {
-		return pi.Column < pj.Column
-	}
-
-	return p[i].Text < p[j].Text
-}
-
-// Lint lints src.
-func (l *Linter) Lint(filename string, src []byte) ([]Problem, error) {
-	return l.LintFiles(map[string][]byte{filename: src})
-}
-
-// LintFiles lints a set of files of a single package.
-// The argument is a map of filename to source.
-func (l *Linter) LintFiles(files map[string][]byte) ([]Problem, error) {
-	pkg := &pkg{
-		fset:  token.NewFileSet(),
-		files: make(map[string]*file),
-	}
-	var pkgName string
-	for filename, src := range files {
-		if isGenerated(src) {
-			continue // See issue #239
-		}
-		f, err := parser.ParseFile(pkg.fset, filename, src, parser.ParseComments)
-		if err != nil {
-			return nil, err
-		}
-		if pkgName == "" {
-			pkgName = f.Name.Name
-		} else if f.Name.Name != pkgName {
-			return nil, fmt.Errorf("%s is in package %s, not %s", filename, f.Name.Name, pkgName)
-		}
-		pkg.files[filename] = &file{
-			pkg:      pkg,
-			f:        f,
-			fset:     pkg.fset,
-			src:      src,
-			filename: filename,
-		}
-	}
-	if len(pkg.files) == 0 {
-		return nil, nil
-	}
-	return pkg.lint(), nil
-}
-
-var (
-	genHdr = []byte("// Code generated ")
-	genFtr = []byte(" DO NOT EDIT.")
-)
-
-// isGenerated reports whether the source file is generated code
-// according the rules from https://golang.org/s/generatedcode.
-func isGenerated(src []byte) bool {
-	sc := bufio.NewScanner(bytes.NewReader(src))
-	for sc.Scan() {
-		b := sc.Bytes()
-		if bytes.HasPrefix(b, genHdr) && bytes.HasSuffix(b, genFtr) && len(b) >= len(genHdr)+len(genFtr) {
-			return true
-		}
-	}
-	return false
-}
-
-// pkg represents a package being linted.
-type pkg struct {
-	fset  *token.FileSet
-	files map[string]*file
-
-	typesPkg  *types.Package
-	typesInfo *types.Info
-
-	// sortable is the set of types in the package that implement sort.Interface.
-	sortable map[string]bool
-	// main is whether this is a "main" package.
-	main bool
-
-	problems []Problem
-}
-
-func (p *pkg) lint() []Problem {
-	if err := p.typeCheck(); err != nil {
-		/* TODO(dsymonds): Consider reporting these errors when golint operates on entire packages.
-		if e, ok := err.(types.Error); ok {
-			pos := p.fset.Position(e.Pos)
-			conf := 1.0
-			if strings.Contains(e.Msg, "can't find import: ") {
-				// Golint is probably being run in a context that doesn't support
-				// typechecking (e.g. package files aren't found), so don't warn about it.
-				conf = 0
-			}
-			if conf > 0 {
-				p.errorfAt(pos, conf, category("typechecking"), e.Msg)
-			}
-
-			// TODO(dsymonds): Abort if !e.Soft?
-		}
-		*/
-	}
-
-	p.scanSortable()
-	p.main = p.isMain()
-
-	for _, f := range p.files {
-		f.lint()
-	}
-
-	sort.Sort(byPosition(p.problems))
-
-	return p.problems
-}
-
-// file represents a file being linted.
-type file struct {
-	pkg      *pkg
-	f        *ast.File
-	fset     *token.FileSet
-	src      []byte
-	filename string
-}
-
-func (f *file) isTest() bool { return strings.HasSuffix(f.filename, "_test.go") }
-
-func (f *file) lint() {
-	f.lintPackageComment()
-	f.lintImports()
-	f.lintBlankImports()
-	f.lintExported()
-	f.lintNames()
-	f.lintElses()
-	f.lintRanges()
-	f.lintErrorf()
-	f.lintErrors()
-	f.lintErrorStrings()
-	f.lintReceiverNames()
-	f.lintIncDec()
-	f.lintErrorReturn()
-	f.lintUnexportedReturn()
-	f.lintTimeNames()
-	f.lintContextKeyTypes()
-	f.lintContextArgs()
-}
-
-type link string
-type category string
-
-// The variadic arguments may start with link and category types,
-// and must end with a format string and any arguments.
-// It returns the new Problem.
-func (f *file) errorf(n ast.Node, confidence float64, args ...interface{}) *Problem {
-	pos := f.fset.Position(n.Pos())
-	if pos.Filename == "" {
-		pos.Filename = f.filename
-	}
-	return f.pkg.errorfAt(pos, confidence, args...)
-}
-
-func (p *pkg) errorfAt(pos token.Position, confidence float64, args ...interface{}) *Problem {
-	problem := Problem{
-		Position:   pos,
-		Confidence: confidence,
-	}
-	if pos.Filename != "" {
-		// The file might not exist in our mapping if a //line directive was encountered.
-		if f, ok := p.files[pos.Filename]; ok {
-			problem.LineText = srcLine(f.src, pos)
-		}
-	}
-
-argLoop:
-	for len(args) > 1 { // always leave at least the format string in args
-		switch v := args[0].(type) {
-		case link:
-			problem.Link = string(v)
-		case category:
-			problem.Category = string(v)
-		default:
-			break argLoop
-		}
-		args = args[1:]
-	}
-
-	problem.Text = fmt.Sprintf(args[0].(string), args[1:]...)
-
-	p.problems = append(p.problems, problem)
-	return &p.problems[len(p.problems)-1]
-}
-
-var newImporter = func(fset *token.FileSet) types.ImporterFrom {
-	return gcexportdata.NewImporter(fset, make(map[string]*types.Package))
-}
-
-func (p *pkg) typeCheck() error {
-	config := &types.Config{
-		// By setting a no-op error reporter, the type checker does as much work as possible.
-		Error:    func(error) {},
-		Importer: newImporter(p.fset),
-	}
-	info := &types.Info{
-		Types:  make(map[ast.Expr]types.TypeAndValue),
-		Defs:   make(map[*ast.Ident]types.Object),
-		Uses:   make(map[*ast.Ident]types.Object),
-		Scopes: make(map[ast.Node]*types.Scope),
-	}
-	var anyFile *file
-	var astFiles []*ast.File
-	for _, f := range p.files {
-		anyFile = f
-		astFiles = append(astFiles, f.f)
-	}
-	pkg, err := config.Check(anyFile.f.Name.Name, p.fset, astFiles, info)
-	// Remember the typechecking info, even if config.Check failed,
-	// since we will get partial information.
-	p.typesPkg = pkg
-	p.typesInfo = info
-	return err
-}
-
-func (p *pkg) typeOf(expr ast.Expr) types.Type {
-	if p.typesInfo == nil {
-		return nil
-	}
-	return p.typesInfo.TypeOf(expr)
-}
-
-func (p *pkg) isNamedType(typ types.Type, importPath, name string) bool {
-	n, ok := typ.(*types.Named)
-	if !ok {
-		return false
-	}
-	tn := n.Obj()
-	return tn != nil && tn.Pkg() != nil && tn.Pkg().Path() == importPath && tn.Name() == name
-}
-
-// scopeOf returns the tightest scope encompassing id.
-func (p *pkg) scopeOf(id *ast.Ident) *types.Scope {
-	var scope *types.Scope
-	if obj := p.typesInfo.ObjectOf(id); obj != nil {
-		scope = obj.Parent()
-	}
-	if scope == p.typesPkg.Scope() {
-		// We were given a top-level identifier.
-		// Use the file-level scope instead of the package-level scope.
-		pos := id.Pos()
-		for _, f := range p.files {
-			if f.f.Pos() <= pos && pos < f.f.End() {
-				scope = p.typesInfo.Scopes[f.f]
-				break
-			}
-		}
-	}
-	return scope
-}
-
-func (p *pkg) scanSortable() {
-	p.sortable = make(map[string]bool)
-
-	// bitfield for which methods exist on each type.
-	const (
-		Len = 1 << iota
-		Less
-		Swap
-	)
-	nmap := map[string]int{"Len": Len, "Less": Less, "Swap": Swap}
-	has := make(map[string]int)
-	for _, f := range p.files {
-		f.walk(func(n ast.Node) bool {
-			fn, ok := n.(*ast.FuncDecl)
-			if !ok || fn.Recv == nil || len(fn.Recv.List) == 0 {
-				return true
-			}
-			// TODO(dsymonds): We could check the signature to be more precise.
-			recv := receiverType(fn)
-			if i, ok := nmap[fn.Name.Name]; ok {
-				has[recv] |= i
-			}
-			return false
-		})
-	}
-	for typ, ms := range has {
-		if ms == Len|Less|Swap {
-			p.sortable[typ] = true
-		}
-	}
-}
-
-func (p *pkg) isMain() bool {
-	for _, f := range p.files {
-		if f.isMain() {
-			return true
-		}
-	}
-	return false
-}
-
-func (f *file) isMain() bool {
-	if f.f.Name.Name == "main" {
-		return true
-	}
-	return false
-}
-
-// lintPackageComment checks package comments. It complains if
-// there is no package comment, or if it is not of the right form.
-// This has a notable false positive in that a package comment
-// could rightfully appear in a different file of the same package,
-// but that's not easy to fix since this linter is file-oriented.
-func (f *file) lintPackageComment() {
-	if f.isTest() {
-		return
-	}
-
-	const ref = styleGuideBase + "#package-comments"
-	prefix := "Package " + f.f.Name.Name + " "
-
-	// Look for a detached package comment.
-	// First, scan for the last comment that occurs before the "package" keyword.
-	var lastCG *ast.CommentGroup
-	for _, cg := range f.f.Comments {
-		if cg.Pos() > f.f.Package {
-			// Gone past "package" keyword.
-			break
-		}
-		lastCG = cg
-	}
-	if lastCG != nil && strings.HasPrefix(lastCG.Text(), prefix) {
-		endPos := f.fset.Position(lastCG.End())
-		pkgPos := f.fset.Position(f.f.Package)
-		if endPos.Line+1 < pkgPos.Line {
-			// There isn't a great place to anchor this error;
-			// the start of the blank lines between the doc and the package statement
-			// is at least pointing at the location of the problem.
-			pos := token.Position{
-				Filename: endPos.Filename,
-				// Offset not set; it is non-trivial, and doesn't appear to be needed.
-				Line:   endPos.Line + 1,
-				Column: 1,
-			}
-			f.pkg.errorfAt(pos, 0.9, link(ref), category("comments"), "package comment is detached; there should be no blank lines between it and the package statement")
-			return
-		}
-	}
-
-	if f.f.Doc == nil {
-		f.errorf(f.f, 0.2, link(ref), category("comments"), "should have a package comment, unless it's in another file for this package")
-		return
-	}
-	s := f.f.Doc.Text()
-	if ts := strings.TrimLeft(s, " \t"); ts != s {
-		f.errorf(f.f.Doc, 1, link(ref), category("comments"), "package comment should not have leading space")
-		s = ts
-	}
-	// Only non-main packages need to keep to this form.
-	if !f.pkg.main && !strings.HasPrefix(s, prefix) {
-		f.errorf(f.f.Doc, 1, link(ref), category("comments"), `package comment should be of the form "%s..."`, prefix)
-	}
-}
-
-// lintBlankImports complains if a non-main package has blank imports that are
-// not documented.
-func (f *file) lintBlankImports() {
-	// In package main and in tests, we don't complain about blank imports.
-	if f.pkg.main || f.isTest() {
-		return
-	}
-
-	// The first element of each contiguous group of blank imports should have
-	// an explanatory comment of some kind.
-	for i, imp := range f.f.Imports {
-		pos := f.fset.Position(imp.Pos())
-
-		if !isBlank(imp.Name) {
-			continue // Ignore non-blank imports.
-		}
-		if i > 0 {
-			prev := f.f.Imports[i-1]
-			prevPos := f.fset.Position(prev.Pos())
-			if isBlank(prev.Name) && prevPos.Line+1 == pos.Line {
-				continue // A subsequent blank in a group.
-			}
-		}
-
-		// This is the first blank import of a group.
-		if imp.Doc == nil && imp.Comment == nil {
-			ref := ""
-			f.errorf(imp, 1, link(ref), category("imports"), "a blank import should be only in a main or test package, or have a comment justifying it")
-		}
-	}
-}
-
-// lintImports examines import blocks.
-func (f *file) lintImports() {
-	for i, is := range f.f.Imports {
-		_ = i
-		if is.Name != nil && is.Name.Name == "." && !f.isTest() {
-			f.errorf(is, 1, link(styleGuideBase+"#import-dot"), category("imports"), "should not use dot imports")
-		}
-
-	}
-}
-
-const docCommentsLink = styleGuideBase + "#doc-comments"
-
-// lintExported examines the exported names.
-// It complains if any required doc comments are missing,
-// or if they are not of the right form. The exact rules are in
-// lintFuncDoc, lintTypeDoc and lintValueSpecDoc; this function
-// also tracks the GenDecl structure being traversed to permit
-// doc comments for constants to be on top of the const block.
-// It also complains if the names stutter when combined with
-// the package name.
-func (f *file) lintExported() {
-	if f.isTest() {
-		return
-	}
-
-	var lastGen *ast.GenDecl // last GenDecl entered.
-
-	// Set of GenDecls that have already had missing comments flagged.
-	genDeclMissingComments := make(map[*ast.GenDecl]bool)
-
-	f.walk(func(node ast.Node) bool {
-		switch v := node.(type) {
-		case *ast.GenDecl:
-			if v.Tok == token.IMPORT {
-				return false
-			}
-			// token.CONST, token.TYPE or token.VAR
-			lastGen = v
-			return true
-		case *ast.FuncDecl:
-			f.lintFuncDoc(v)
-			if v.Recv == nil {
-				// Only check for stutter on functions, not methods.
-				// Method names are not used package-qualified.
-				f.checkStutter(v.Name, "func")
-			}
-			// Don't proceed inside funcs.
-			return false
-		case *ast.TypeSpec:
-			// inside a GenDecl, which usually has the doc
-			doc := v.Doc
-			if doc == nil {
-				doc = lastGen.Doc
-			}
-			f.lintTypeDoc(v, doc)
-			f.checkStutter(v.Name, "type")
-			// Don't proceed inside types.
-			return false
-		case *ast.ValueSpec:
-			f.lintValueSpecDoc(v, lastGen, genDeclMissingComments)
-			return false
-		}
-		return true
-	})
-}
-
-var (
-	allCapsRE = regexp.MustCompile(`^[A-Z0-9_]+$`)
-	anyCapsRE = regexp.MustCompile(`[A-Z]`)
-)
-
-// knownNameExceptions is a set of names that are known to be exempt from naming checks.
-// This is usually because they are constrained by having to match names in the
-// standard library.
-var knownNameExceptions = map[string]bool{
-	"LastInsertId": true, // must match database/sql
-	"kWh":          true,
-}
-
-func isInTopLevel(f *ast.File, ident *ast.Ident) bool {
-	path, _ := astutil.PathEnclosingInterval(f, ident.Pos(), ident.End())
-	for _, f := range path {
-		switch f.(type) {
-		case *ast.File, *ast.GenDecl, *ast.ValueSpec, *ast.Ident:
-			continue
-		}
-		return false
-	}
-	return true
-}
-
-// lintNames examines all names in the file.
-// It complains if any use underscores or incorrect known initialisms.
-func (f *file) lintNames() {
-	// Package names need slightly different handling than other names.
-	if strings.Contains(f.f.Name.Name, "_") && !strings.HasSuffix(f.f.Name.Name, "_test") {
-		f.errorf(f.f, 1, link("http://golang.org/doc/effective_go.html#package-names"), category("naming"), "don't use an underscore in package name")
-	}
-	if anyCapsRE.MatchString(f.f.Name.Name) {
-		f.errorf(f.f, 1, link("http://golang.org/doc/effective_go.html#package-names"), category("mixed-caps"), "don't use MixedCaps in package name; %s should be %s", f.f.Name.Name, strings.ToLower(f.f.Name.Name))
-	}
-
-	check := func(id *ast.Ident, thing string) {
-		if id.Name == "_" {
-			return
-		}
-		if knownNameExceptions[id.Name] {
-			return
-		}
-
-		// Handle two common styles from other languages that don't belong in Go.
-		if len(id.Name) >= 5 && allCapsRE.MatchString(id.Name) && strings.Contains(id.Name, "_") {
-			capCount := 0
-			for _, c := range id.Name {
-				if 'A' <= c && c <= 'Z' {
-					capCount++
-				}
-			}
-			if capCount >= 2 {
-				f.errorf(id, 0.8, link(styleGuideBase+"#mixed-caps"), category("naming"), "don't use ALL_CAPS in Go names; use CamelCase")
-				return
-			}
-		}
-		if thing == "const" || (thing == "var" && isInTopLevel(f.f, id)) {
-			if len(id.Name) > 2 && id.Name[0] == 'k' && id.Name[1] >= 'A' && id.Name[1] <= 'Z' {
-				should := string(id.Name[1]+'a'-'A') + id.Name[2:]
-				f.errorf(id, 0.8, link(styleGuideBase+"#mixed-caps"), category("naming"), "don't use leading k in Go names; %s %s should be %s", thing, id.Name, should)
-			}
-		}
-
-		should := lintName(id.Name)
-		if id.Name == should {
-			return
-		}
-
-		if len(id.Name) > 2 && strings.Contains(id.Name[1:], "_") {
-			f.errorf(id, 0.9, link("http://golang.org/doc/effective_go.html#mixed-caps"), category("naming"), "don't use underscores in Go names; %s %s should be %s", thing, id.Name, should)
-			return
-		}
-		f.errorf(id, 0.8, link(styleGuideBase+"#initialisms"), category("naming"), "%s %s should be %s", thing, id.Name, should)
-	}
-	checkList := func(fl *ast.FieldList, thing string) {
-		if fl == nil {
-			return
-		}
-		for _, f := range fl.List {
-			for _, id := range f.Names {
-				check(id, thing)
-			}
-		}
-	}
-	f.walk(func(node ast.Node) bool {
-		switch v := node.(type) {
-		case *ast.AssignStmt:
-			if v.Tok == token.ASSIGN {
-				return true
-			}
-			for _, exp := range v.Lhs {
-				if id, ok := exp.(*ast.Ident); ok {
-					check(id, "var")
-				}
-			}
-		case *ast.FuncDecl:
-			if f.isTest() && (strings.HasPrefix(v.Name.Name, "Example") || strings.HasPrefix(v.Name.Name, "Test") || strings.HasPrefix(v.Name.Name, "Benchmark")) {
-				return true
-			}
-
-			thing := "func"
-			if v.Recv != nil {
-				thing = "method"
-			}
-
-			// Exclude naming warnings for functions that are exported to C but
-			// not exported in the Go API.
-			// See https://github.com/golang/lint/issues/144.
-			if ast.IsExported(v.Name.Name) || !isCgoExported(v) {
-				check(v.Name, thing)
-			}
-
-			checkList(v.Type.Params, thing+" parameter")
-			checkList(v.Type.Results, thing+" result")
-		case *ast.GenDecl:
-			if v.Tok == token.IMPORT {
-				return true
-			}
-			var thing string
-			switch v.Tok {
-			case token.CONST:
-				thing = "const"
-			case token.TYPE:
-				thing = "type"
-			case token.VAR:
-				thing = "var"
-			}
-			for _, spec := range v.Specs {
-				switch s := spec.(type) {
-				case *ast.TypeSpec:
-					check(s.Name, thing)
-				case *ast.ValueSpec:
-					for _, id := range s.Names {
-						check(id, thing)
-					}
-				}
-			}
-		case *ast.InterfaceType:
-			// Do not check interface method names.
-			// They are often constrainted by the method names of concrete types.
-			for _, x := range v.Methods.List {
-				ft, ok := x.Type.(*ast.FuncType)
-				if !ok { // might be an embedded interface name
-					continue
-				}
-				checkList(ft.Params, "interface method parameter")
-				checkList(ft.Results, "interface method result")
-			}
-		case *ast.RangeStmt:
-			if v.Tok == token.ASSIGN {
-				return true
-			}
-			if id, ok := v.Key.(*ast.Ident); ok {
-				check(id, "range var")
-			}
-			if id, ok := v.Value.(*ast.Ident); ok {
-				check(id, "range var")
-			}
-		case *ast.StructType:
-			for _, f := range v.Fields.List {
-				for _, id := range f.Names {
-					check(id, "struct field")
-				}
-			}
-		}
-		return true
-	})
-}
-
-// lintName returns a different name if it should be different.
-func lintName(name string) (should string) {
-	// Fast path for simple cases: "_" and all lowercase.
-	if name == "_" {
-		return name
-	}
-	allLower := true
-	for _, r := range name {
-		if !unicode.IsLower(r) {
-			allLower = false
-			break
-		}
-	}
-	if allLower {
-		return name
-	}
-
-	// Split camelCase at any lower->upper transition, and split on underscores.
-	// Check each word for common initialisms.
-	runes := []rune(name)
-	w, i := 0, 0 // index of start of word, scan
-	for i+1 <= len(runes) {
-		eow := false // whether we hit the end of a word
-		if i+1 == len(runes) {
-			eow = true
-		} else if runes[i+1] == '_' {
-			// underscore; shift the remainder forward over any run of underscores
-			eow = true
-			n := 1
-			for i+n+1 < len(runes) && runes[i+n+1] == '_' {
-				n++
-			}
-
-			// Leave at most one underscore if the underscore is between two digits
-			if i+n+1 < len(runes) && unicode.IsDigit(runes[i]) && unicode.IsDigit(runes[i+n+1]) {
-				n--
-			}
-
-			copy(runes[i+1:], runes[i+n+1:])
-			runes = runes[:len(runes)-n]
-		} else if unicode.IsLower(runes[i]) && !unicode.IsLower(runes[i+1]) {
-			// lower->non-lower
-			eow = true
-		}
-		i++
-		if !eow {
-			continue
-		}
-
-		// [w,i) is a word.
-		word := string(runes[w:i])
-		if u := strings.ToUpper(word); commonInitialisms[u] {
-			// Keep consistent case, which is lowercase only at the start.
-			if w == 0 && unicode.IsLower(runes[w]) {
-				u = strings.ToLower(u)
-			}
-			// All the common initialisms are ASCII,
-			// so we can replace the bytes exactly.
-			copy(runes[w:], []rune(u))
-		} else if w > 0 && strings.ToLower(word) == word {
-			// already all lowercase, and not the first word, so uppercase the first character.
-			runes[w] = unicode.ToUpper(runes[w])
-		}
-		w = i
-	}
-	return string(runes)
-}
-
-// commonInitialisms is a set of common initialisms.
-// Only add entries that are highly unlikely to be non-initialisms.
-// For instance, "ID" is fine (Freudian code is rare), but "AND" is not.
-var commonInitialisms = map[string]bool{
-	"ACL":   true,
-	"API":   true,
-	"ASCII": true,
-	"CPU":   true,
-	"CSS":   true,
-	"DNS":   true,
-	"EOF":   true,
-	"GUID":  true,
-	"HTML":  true,
-	"HTTP":  true,
-	"HTTPS": true,
-	"ID":    true,
-	"IP":    true,
-	"JSON":  true,
-	"LHS":   true,
-	"QPS":   true,
-	"RAM":   true,
-	"RHS":   true,
-	"RPC":   true,
-	"SLA":   true,
-	"SMTP":  true,
-	"SQL":   true,
-	"SSH":   true,
-	"TCP":   true,
-	"TLS":   true,
-	"TTL":   true,
-	"UDP":   true,
-	"UI":    true,
-	"UID":   true,
-	"UUID":  true,
-	"URI":   true,
-	"URL":   true,
-	"UTF8":  true,
-	"VM":    true,
-	"XML":   true,
-	"XMPP":  true,
-	"XSRF":  true,
-	"XSS":   true,
-}
-
-// lintTypeDoc examines the doc comment on a type.
-// It complains if they are missing from an exported type,
-// or if they are not of the standard form.
-func (f *file) lintTypeDoc(t *ast.TypeSpec, doc *ast.CommentGroup) {
-	if !ast.IsExported(t.Name.Name) {
-		return
-	}
-	if doc == nil {
-		f.errorf(t, 1, link(docCommentsLink), category("comments"), "exported type %v should have comment or be unexported", t.Name)
-		return
-	}
-
-	s := doc.Text()
-	articles := [...]string{"A", "An", "The"}
-	for _, a := range articles {
-		if strings.HasPrefix(s, a+" ") {
-			s = s[len(a)+1:]
-			break
-		}
-	}
-	if !strings.HasPrefix(s, t.Name.Name+" ") {
-		f.errorf(doc, 1, link(docCommentsLink), category("comments"), `comment on exported type %v should be of the form "%v ..." (with optional leading article)`, t.Name, t.Name)
-	}
-}
-
-var commonMethods = map[string]bool{
-	"Error":     true,
-	"Read":      true,
-	"ServeHTTP": true,
-	"String":    true,
-	"Write":     true,
-	"Unwrap":    true,
-}
-
-// lintFuncDoc examines doc comments on functions and methods.
-// It complains if they are missing, or not of the right form.
-// It has specific exclusions for well-known methods (see commonMethods above).
-func (f *file) lintFuncDoc(fn *ast.FuncDecl) {
-	if !ast.IsExported(fn.Name.Name) {
-		// func is unexported
-		return
-	}
-	kind := "function"
-	name := fn.Name.Name
-	if fn.Recv != nil && len(fn.Recv.List) > 0 {
-		// method
-		kind = "method"
-		recv := receiverType(fn)
-		if !ast.IsExported(recv) {
-			// receiver is unexported
-			return
-		}
-		if commonMethods[name] {
-			return
-		}
-		switch name {
-		case "Len", "Less", "Swap":
-			if f.pkg.sortable[recv] {
-				return
-			}
-		}
-		name = recv + "." + name
-	}
-	if fn.Doc == nil {
-		f.errorf(fn, 1, link(docCommentsLink), category("comments"), "exported %s %s should have comment or be unexported", kind, name)
-		return
-	}
-	s := fn.Doc.Text()
-	prefix := fn.Name.Name + " "
-	if !strings.HasPrefix(s, prefix) {
-		f.errorf(fn.Doc, 1, link(docCommentsLink), category("comments"), `comment on exported %s %s should be of the form "%s..."`, kind, name, prefix)
-	}
-}
-
-// lintValueSpecDoc examines package-global variables and constants.
-// It complains if they are not individually declared,
-// or if they are not suitably documented in the right form (unless they are in a block that is commented).
-func (f *file) lintValueSpecDoc(vs *ast.ValueSpec, gd *ast.GenDecl, genDeclMissingComments map[*ast.GenDecl]bool) {
-	kind := "var"
-	if gd.Tok == token.CONST {
-		kind = "const"
-	}
-
-	if len(vs.Names) > 1 {
-		// Check that none are exported except for the first.
-		for _, n := range vs.Names[1:] {
-			if ast.IsExported(n.Name) {
-				f.errorf(vs, 1, category("comments"), "exported %s %s should have its own declaration", kind, n.Name)
-				return
-			}
-		}
-	}
-
-	// Only one name.
-	name := vs.Names[0].Name
-	if !ast.IsExported(name) {
-		return
-	}
-
-	if vs.Doc == nil && gd.Doc == nil {
-		if genDeclMissingComments[gd] {
-			return
-		}
-		block := ""
-		if kind == "const" && gd.Lparen.IsValid() {
-			block = " (or a comment on this block)"
-		}
-		f.errorf(vs, 1, link(docCommentsLink), category("comments"), "exported %s %s should have comment%s or be unexported", kind, name, block)
-		genDeclMissingComments[gd] = true
-		return
-	}
-	// If this GenDecl has parens and a comment, we don't check its comment form.
-	if gd.Lparen.IsValid() && gd.Doc != nil {
-		return
-	}
-	// The relevant text to check will be on either vs.Doc or gd.Doc.
-	// Use vs.Doc preferentially.
-	doc := vs.Doc
-	if doc == nil {
-		doc = gd.Doc
-	}
-	prefix := name + " "
-	if !strings.HasPrefix(doc.Text(), prefix) {
-		f.errorf(doc, 1, link(docCommentsLink), category("comments"), `comment on exported %s %s should be of the form "%s..."`, kind, name, prefix)
-	}
-}
-
-func (f *file) checkStutter(id *ast.Ident, thing string) {
-	pkg, name := f.f.Name.Name, id.Name
-	if !ast.IsExported(name) {
-		// unexported name
-		return
-	}
-	// A name stutters if the package name is a strict prefix
-	// and the next character of the name starts a new word.
-	if len(name) <= len(pkg) {
-		// name is too short to stutter.
-		// This permits the name to be the same as the package name.
-		return
-	}
-	if !strings.EqualFold(pkg, name[:len(pkg)]) {
-		return
-	}
-	// We can assume the name is well-formed UTF-8.
-	// If the next rune after the package name is uppercase or an underscore
-	// the it's starting a new word and thus this name stutters.
-	rem := name[len(pkg):]
-	if next, _ := utf8.DecodeRuneInString(rem); next == '_' || unicode.IsUpper(next) {
-		f.errorf(id, 0.8, link(styleGuideBase+"#package-names"), category("naming"), "%s name will be used as %s.%s by other packages, and that stutters; consider calling this %s", thing, pkg, name, rem)
-	}
-}
-
-// zeroLiteral is a set of ast.BasicLit values that are zero values.
-// It is not exhaustive.
-var zeroLiteral = map[string]bool{
-	"false": true, // bool
-	// runes
-	`'\x00'`: true,
-	`'\000'`: true,
-	// strings
-	`""`: true,
-	"``": true,
-	// numerics
-	"0":   true,
-	"0.":  true,
-	"0.0": true,
-	"0i":  true,
-}
-
-// lintElses examines else blocks. It complains about any else block whose if block ends in a return.
-func (f *file) lintElses() {
-	// We don't want to flag if { } else if { } else { } constructions.
-	// They will appear as an IfStmt whose Else field is also an IfStmt.
-	// Record such a node so we ignore it when we visit it.
-	ignore := make(map[*ast.IfStmt]bool)
-
-	f.walk(func(node ast.Node) bool {
-		ifStmt, ok := node.(*ast.IfStmt)
-		if !ok || ifStmt.Else == nil {
-			return true
-		}
-		if elseif, ok := ifStmt.Else.(*ast.IfStmt); ok {
-			ignore[elseif] = true
-			return true
-		}
-		if ignore[ifStmt] {
-			return true
-		}
-		if _, ok := ifStmt.Else.(*ast.BlockStmt); !ok {
-			// only care about elses without conditions
-			return true
-		}
-		if len(ifStmt.Body.List) == 0 {
-			return true
-		}
-		shortDecl := false // does the if statement have a ":=" initialization statement?
-		if ifStmt.Init != nil {
-			if as, ok := ifStmt.Init.(*ast.AssignStmt); ok && as.Tok == token.DEFINE {
-				shortDecl = true
-			}
-		}
-		lastStmt := ifStmt.Body.List[len(ifStmt.Body.List)-1]
-		if _, ok := lastStmt.(*ast.ReturnStmt); ok {
-			extra := ""
-			if shortDecl {
-				extra = " (move short variable declaration to its own line if necessary)"
-			}
-			f.errorf(ifStmt.Else, 1, link(styleGuideBase+"#indent-error-flow"), category("indent"), "if block ends with a return statement, so drop this else and outdent its block"+extra)
-		}
-		return true
-	})
-}
-
-// lintRanges examines range clauses. It complains about redundant constructions.
-func (f *file) lintRanges() {
-	f.walk(func(node ast.Node) bool {
-		rs, ok := node.(*ast.RangeStmt)
-		if !ok {
-			return true
-		}
-
-		if isIdent(rs.Key, "_") && (rs.Value == nil || isIdent(rs.Value, "_")) {
-			p := f.errorf(rs.Key, 1, category("range-loop"), "should omit values from range; this loop is equivalent to `for range ...`")
-
-			newRS := *rs // shallow copy
-			newRS.Value = nil
-			newRS.Key = nil
-			p.ReplacementLine = f.firstLineOf(&newRS, rs)
-
-			return true
-		}
-
-		if isIdent(rs.Value, "_") {
-			p := f.errorf(rs.Value, 1, category("range-loop"), "should omit 2nd value from range; this loop is equivalent to `for %s %s range ...`", f.render(rs.Key), rs.Tok)
-
-			newRS := *rs // shallow copy
-			newRS.Value = nil
-			p.ReplacementLine = f.firstLineOf(&newRS, rs)
-		}
-
-		return true
-	})
-}
-
-// lintErrorf examines errors.New and testing.Error calls. It complains if its only argument is an fmt.Sprintf invocation.
-func (f *file) lintErrorf() {
-	f.walk(func(node ast.Node) bool {
-		ce, ok := node.(*ast.CallExpr)
-		if !ok || len(ce.Args) != 1 {
-			return true
-		}
-		isErrorsNew := isPkgDot(ce.Fun, "errors", "New")
-		var isTestingError bool
-		se, ok := ce.Fun.(*ast.SelectorExpr)
-		if ok && se.Sel.Name == "Error" {
-			if typ := f.pkg.typeOf(se.X); typ != nil {
-				isTestingError = typ.String() == "*testing.T"
-			}
-		}
-		if !isErrorsNew && !isTestingError {
-			return true
-		}
-		if !f.imports("errors") {
-			return true
-		}
-		arg := ce.Args[0]
-		ce, ok = arg.(*ast.CallExpr)
-		if !ok || !isPkgDot(ce.Fun, "fmt", "Sprintf") {
-			return true
-		}
-		errorfPrefix := "fmt"
-		if isTestingError {
-			errorfPrefix = f.render(se.X)
-		}
-		p := f.errorf(node, 1, category("errors"), "should replace %s(fmt.Sprintf(...)) with %s.Errorf(...)", f.render(se), errorfPrefix)
-
-		m := f.srcLineWithMatch(ce, `^(.*)`+f.render(se)+`\(fmt\.Sprintf\((.*)\)\)(.*)$`)
-		if m != nil {
-			p.ReplacementLine = m[1] + errorfPrefix + ".Errorf(" + m[2] + ")" + m[3]
-		}
-
-		return true
-	})
-}
-
-// lintErrors examines global error vars. It complains if they aren't named in the standard way.
-func (f *file) lintErrors() {
-	for _, decl := range f.f.Decls {
-		gd, ok := decl.(*ast.GenDecl)
-		if !ok || gd.Tok != token.VAR {
-			continue
-		}
-		for _, spec := range gd.Specs {
-			spec := spec.(*ast.ValueSpec)
-			if len(spec.Names) != 1 || len(spec.Values) != 1 {
-				continue
-			}
-			ce, ok := spec.Values[0].(*ast.CallExpr)
-			if !ok {
-				continue
-			}
-			if !isPkgDot(ce.Fun, "errors", "New") && !isPkgDot(ce.Fun, "fmt", "Errorf") {
-				continue
-			}
-
-			id := spec.Names[0]
-			prefix := "err"
-			if id.IsExported() {
-				prefix = "Err"
-			}
-			if !strings.HasPrefix(id.Name, prefix) {
-				f.errorf(id, 0.9, category("naming"), "error var %s should have name of the form %sFoo", id.Name, prefix)
-			}
-		}
-	}
-}
-
-func lintErrorString(s string) (isClean bool, conf float64) {
-	const basicConfidence = 0.8
-	const capConfidence = basicConfidence - 0.2
-	first, firstN := utf8.DecodeRuneInString(s)
-	last, _ := utf8.DecodeLastRuneInString(s)
-	if last == '.' || last == ':' || last == '!' || last == '\n' {
-		return false, basicConfidence
-	}
-	if unicode.IsUpper(first) {
-		// People use proper nouns and exported Go identifiers in error strings,
-		// so decrease the confidence of warnings for capitalization.
-		if len(s) <= firstN {
-			return false, capConfidence
-		}
-		// Flag strings starting with something that doesn't look like an initialism.
-		if second, _ := utf8.DecodeRuneInString(s[firstN:]); !unicode.IsUpper(second) {
-			return false, capConfidence
-		}
-	}
-	return true, 0
-}
-
-// lintErrorStrings examines error strings.
-// It complains if they are capitalized or end in punctuation or a newline.
-func (f *file) lintErrorStrings() {
-	f.walk(func(node ast.Node) bool {
-		ce, ok := node.(*ast.CallExpr)
-		if !ok {
-			return true
-		}
-		if !isPkgDot(ce.Fun, "errors", "New") && !isPkgDot(ce.Fun, "fmt", "Errorf") {
-			return true
-		}
-		if len(ce.Args) < 1 {
-			return true
-		}
-		str, ok := ce.Args[0].(*ast.BasicLit)
-		if !ok || str.Kind != token.STRING {
-			return true
-		}
-		s, _ := strconv.Unquote(str.Value) // can assume well-formed Go
-		if s == "" {
-			return true
-		}
-		clean, conf := lintErrorString(s)
-		if clean {
-			return true
-		}
-
-		f.errorf(str, conf, link(styleGuideBase+"#error-strings"), category("errors"),
-			"error strings should not be capitalized or end with punctuation or a newline")
-		return true
-	})
-}
-
-// lintReceiverNames examines receiver names. It complains about inconsistent
-// names used for the same type and names such as "this".
-func (f *file) lintReceiverNames() {
-	typeReceiver := map[string]string{}
-	f.walk(func(n ast.Node) bool {
-		fn, ok := n.(*ast.FuncDecl)
-		if !ok || fn.Recv == nil || len(fn.Recv.List) == 0 {
-			return true
-		}
-		names := fn.Recv.List[0].Names
-		if len(names) < 1 {
-			return true
-		}
-		name := names[0].Name
-		const ref = styleGuideBase + "#receiver-names"
-		if name == "_" {
-			f.errorf(n, 1, link(ref), category("naming"), `receiver name should not be an underscore, omit the name if it is unused`)
-			return true
-		}
-		if name == "this" || name == "self" {
-			f.errorf(n, 1, link(ref), category("naming"), `receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"`)
-			return true
-		}
-		recv := receiverType(fn)
-		if prev, ok := typeReceiver[recv]; ok && prev != name {
-			f.errorf(n, 1, link(ref), category("naming"), "receiver name %s should be consistent with previous receiver name %s for %s", name, prev, recv)
-			return true
-		}
-		typeReceiver[recv] = name
-		return true
-	})
-}
-
-// lintIncDec examines statements that increment or decrement a variable.
-// It complains if they don't use x++ or x--.
-func (f *file) lintIncDec() {
-	f.walk(func(n ast.Node) bool {
-		as, ok := n.(*ast.AssignStmt)
-		if !ok {
-			return true
-		}
-		if len(as.Lhs) != 1 {
-			return true
-		}
-		if !isOne(as.Rhs[0]) {
-			return true
-		}
-		var suffix string
-		switch as.Tok {
-		case token.ADD_ASSIGN:
-			suffix = "++"
-		case token.SUB_ASSIGN:
-			suffix = "--"
-		default:
-			return true
-		}
-		f.errorf(as, 0.8, category("unary-op"), "should replace %s with %s%s", f.render(as), f.render(as.Lhs[0]), suffix)
-		return true
-	})
-}
-
-// lintErrorReturn examines function declarations that return an error.
-// It complains if the error isn't the last parameter.
-func (f *file) lintErrorReturn() {
-	f.walk(func(n ast.Node) bool {
-		fn, ok := n.(*ast.FuncDecl)
-		if !ok || fn.Type.Results == nil {
-			return true
-		}
-		ret := fn.Type.Results.List
-		if len(ret) <= 1 {
-			return true
-		}
-		if isIdent(ret[len(ret)-1].Type, "error") {
-			return true
-		}
-		// An error return parameter should be the last parameter.
-		// Flag any error parameters found before the last.
-		for _, r := range ret[:len(ret)-1] {
-			if isIdent(r.Type, "error") {
-				f.errorf(fn, 0.9, category("arg-order"), "error should be the last type when returning multiple items")
-				break // only flag one
-			}
-		}
-		return true
-	})
-}
-
-// lintUnexportedReturn examines exported function declarations.
-// It complains if any return an unexported type.
-func (f *file) lintUnexportedReturn() {
-	f.walk(func(n ast.Node) bool {
-		fn, ok := n.(*ast.FuncDecl)
-		if !ok {
-			return true
-		}
-		if fn.Type.Results == nil {
-			return false
-		}
-		if !fn.Name.IsExported() {
-			return false
-		}
-		thing := "func"
-		if fn.Recv != nil && len(fn.Recv.List) > 0 {
-			thing = "method"
-			if !ast.IsExported(receiverType(fn)) {
-				// Don't report exported methods of unexported types,
-				// such as private implementations of sort.Interface.
-				return false
-			}
-		}
-		for _, ret := range fn.Type.Results.List {
-			typ := f.pkg.typeOf(ret.Type)
-			if exportedType(typ) {
-				continue
-			}
-			f.errorf(ret.Type, 0.8, category("unexported-type-in-api"),
-				"exported %s %s returns unexported type %s, which can be annoying to use",
-				thing, fn.Name.Name, typ)
-			break // only flag one
-		}
-		return false
-	})
-}
-
-// exportedType reports whether typ is an exported type.
-// It is imprecise, and will err on the side of returning true,
-// such as for composite types.
-func exportedType(typ types.Type) bool {
-	switch T := typ.(type) {
-	case *types.Named:
-		// Builtin types have no package.
-		return T.Obj().Pkg() == nil || T.Obj().Exported()
-	case *types.Map:
-		return exportedType(T.Key()) && exportedType(T.Elem())
-	case interface {
-		Elem() types.Type
-	}: // array, slice, pointer, chan
-		return exportedType(T.Elem())
-	}
-	// Be conservative about other types, such as struct, interface, etc.
-	return true
-}
-
-// timeSuffixes is a list of name suffixes that imply a time unit.
-// This is not an exhaustive list.
-var timeSuffixes = []string{
-	"Sec", "Secs", "Seconds",
-	"Msec", "Msecs",
-	"Milli", "Millis", "Milliseconds",
-	"Usec", "Usecs", "Microseconds",
-	"MS", "Ms",
-}
-
-func (f *file) lintTimeNames() {
-	f.walk(func(node ast.Node) bool {
-		v, ok := node.(*ast.ValueSpec)
-		if !ok {
-			return true
-		}
-		for _, name := range v.Names {
-			origTyp := f.pkg.typeOf(name)
-			// Look for time.Duration or *time.Duration;
-			// the latter is common when using flag.Duration.
-			typ := origTyp
-			if pt, ok := typ.(*types.Pointer); ok {
-				typ = pt.Elem()
-			}
-			if !f.pkg.isNamedType(typ, "time", "Duration") {
-				continue
-			}
-			suffix := ""
-			for _, suf := range timeSuffixes {
-				if strings.HasSuffix(name.Name, suf) {
-					suffix = suf
-					break
-				}
-			}
-			if suffix == "" {
-				continue
-			}
-			f.errorf(v, 0.9, category("time"), "var %s is of type %v; don't use unit-specific suffix %q", name.Name, origTyp, suffix)
-		}
-		return true
-	})
-}
-
-// lintContextKeyTypes checks for call expressions to context.WithValue with
-// basic types used for the key argument.
-// See: https://golang.org/issue/17293
-func (f *file) lintContextKeyTypes() {
-	f.walk(func(node ast.Node) bool {
-		switch node := node.(type) {
-		case *ast.CallExpr:
-			f.checkContextKeyType(node)
-		}
-
-		return true
-	})
-}
-
-// checkContextKeyType reports an error if the call expression calls
-// context.WithValue with a key argument of basic type.
-func (f *file) checkContextKeyType(x *ast.CallExpr) {
-	sel, ok := x.Fun.(*ast.SelectorExpr)
-	if !ok {
-		return
-	}
-	pkg, ok := sel.X.(*ast.Ident)
-	if !ok || pkg.Name != "context" {
-		return
-	}
-	if sel.Sel.Name != "WithValue" {
-		return
-	}
-
-	// key is second argument to context.WithValue
-	if len(x.Args) != 3 {
-		return
-	}
-	key := f.pkg.typesInfo.Types[x.Args[1]]
-
-	if ktyp, ok := key.Type.(*types.Basic); ok && ktyp.Kind() != types.Invalid {
-		f.errorf(x, 1.0, category("context"), fmt.Sprintf("should not use basic type %s as key in context.WithValue", key.Type))
-	}
-}
-
-// lintContextArgs examines function declarations that contain an
-// argument with a type of context.Context
-// It complains if that argument isn't the first parameter.
-func (f *file) lintContextArgs() {
-	f.walk(func(n ast.Node) bool {
-		fn, ok := n.(*ast.FuncDecl)
-		if !ok || len(fn.Type.Params.List) <= 1 {
-			return true
-		}
-		// A context.Context should be the first parameter of a function.
-		// Flag any that show up after the first.
-		for _, arg := range fn.Type.Params.List[1:] {
-			if isPkgDot(arg.Type, "context", "Context") {
-				f.errorf(fn, 0.9, link("https://golang.org/pkg/context/"), category("arg-order"), "context.Context should be the first parameter of a function")
-				break // only flag one
-			}
-		}
-		return true
-	})
-}
-
-// containsComments returns whether the interval [start, end) contains any
-// comments without "// MATCH " prefix.
-func (f *file) containsComments(start, end token.Pos) bool {
-	for _, cgroup := range f.f.Comments {
-		comments := cgroup.List
-		if comments[0].Slash >= end {
-			// All comments starting with this group are after end pos.
-			return false
-		}
-		if comments[len(comments)-1].Slash < start {
-			// Comments group ends before start pos.
-			continue
-		}
-		for _, c := range comments {
-			if start <= c.Slash && c.Slash < end && !strings.HasPrefix(c.Text, "// MATCH ") {
-				return true
-			}
-		}
-	}
-	return false
-}
-
-// receiverType returns the named type of the method receiver, sans "*",
-// or "invalid-type" if fn.Recv is ill formed.
-func receiverType(fn *ast.FuncDecl) string {
-	switch e := fn.Recv.List[0].Type.(type) {
-	case *ast.Ident:
-		return e.Name
-	case *ast.StarExpr:
-		if id, ok := e.X.(*ast.Ident); ok {
-			return id.Name
-		}
-	}
-	// The parser accepts much more than just the legal forms.
-	return "invalid-type"
-}
-
-func (f *file) walk(fn func(ast.Node) bool) {
-	ast.Walk(walker(fn), f.f)
-}
-
-func (f *file) render(x interface{}) string {
-	var buf bytes.Buffer
-	if err := printer.Fprint(&buf, f.fset, x); err != nil {
-		panic(err)
-	}
-	return buf.String()
-}
-
-func (f *file) debugRender(x interface{}) string {
-	var buf bytes.Buffer
-	if err := ast.Fprint(&buf, f.fset, x, nil); err != nil {
-		panic(err)
-	}
-	return buf.String()
-}
-
-// walker adapts a function to satisfy the ast.Visitor interface.
-// The function return whether the walk should proceed into the node's children.
-type walker func(ast.Node) bool
-
-func (w walker) Visit(node ast.Node) ast.Visitor {
-	if w(node) {
-		return w
-	}
-	return nil
-}
-
-func isIdent(expr ast.Expr, ident string) bool {
-	id, ok := expr.(*ast.Ident)
-	return ok && id.Name == ident
-}
-
-// isBlank returns whether id is the blank identifier "_".
-// If id == nil, the answer is false.
-func isBlank(id *ast.Ident) bool { return id != nil && id.Name == "_" }
-
-func isPkgDot(expr ast.Expr, pkg, name string) bool {
-	sel, ok := expr.(*ast.SelectorExpr)
-	return ok && isIdent(sel.X, pkg) && isIdent(sel.Sel, name)
-}
-
-func isOne(expr ast.Expr) bool {
-	lit, ok := expr.(*ast.BasicLit)
-	return ok && lit.Kind == token.INT && lit.Value == "1"
-}
-
-func isCgoExported(f *ast.FuncDecl) bool {
-	if f.Recv != nil || f.Doc == nil {
-		return false
-	}
-
-	cgoExport := regexp.MustCompile(fmt.Sprintf("(?m)^//export %s$", regexp.QuoteMeta(f.Name.Name)))
-	for _, c := range f.Doc.List {
-		if cgoExport.MatchString(c.Text) {
-			return true
-		}
-	}
-	return false
-}
-
-var basicTypeKinds = map[types.BasicKind]string{
-	types.UntypedBool:    "bool",
-	types.UntypedInt:     "int",
-	types.UntypedRune:    "rune",
-	types.UntypedFloat:   "float64",
-	types.UntypedComplex: "complex128",
-	types.UntypedString:  "string",
-}
-
-// isUntypedConst reports whether expr is an untyped constant,
-// and indicates what its default type is.
-// scope may be nil.
-func (f *file) isUntypedConst(expr ast.Expr) (defType string, ok bool) {
-	// Re-evaluate expr outside of its context to see if it's untyped.
-	// (An expr evaluated within, for example, an assignment context will get the type of the LHS.)
-	exprStr := f.render(expr)
-	tv, err := types.Eval(f.fset, f.pkg.typesPkg, expr.Pos(), exprStr)
-	if err != nil {
-		return "", false
-	}
-	if b, ok := tv.Type.(*types.Basic); ok {
-		if dt, ok := basicTypeKinds[b.Kind()]; ok {
-			return dt, true
-		}
-	}
-
-	return "", false
-}
-
-// firstLineOf renders the given node and returns its first line.
-// It will also match the indentation of another node.
-func (f *file) firstLineOf(node, match ast.Node) string {
-	line := f.render(node)
-	if i := strings.Index(line, "\n"); i >= 0 {
-		line = line[:i]
-	}
-	return f.indentOf(match) + line
-}
-
-func (f *file) indentOf(node ast.Node) string {
-	line := srcLine(f.src, f.fset.Position(node.Pos()))
-	for i, r := range line {
-		switch r {
-		case ' ', '\t':
-		default:
-			return line[:i]
-		}
-	}
-	return line // unusual or empty line
-}
-
-func (f *file) srcLineWithMatch(node ast.Node, pattern string) (m []string) {
-	line := srcLine(f.src, f.fset.Position(node.Pos()))
-	line = strings.TrimSuffix(line, "\n")
-	rx := regexp.MustCompile(pattern)
-	return rx.FindStringSubmatch(line)
-}
-
-// imports returns true if the current file imports the specified package path.
-func (f *file) imports(importPath string) bool {
-	all := astutil.Imports(f.fset, f.f)
-	for _, p := range all {
-		for _, i := range p {
-			uq, err := strconv.Unquote(i.Path.Value)
-			if err == nil && importPath == uq {
-				return true
-			}
-		}
-	}
-	return false
-}
-
-// srcLine returns the complete line at p, including the terminating newline.
-func srcLine(src []byte, p token.Position) string {
-	// Run to end of line in both directions if not at line start/end.
-	lo, hi := p.Offset, p.Offset+1
-	for lo > 0 && src[lo-1] != '\n' {
-		lo--
-	}
-	for hi < len(src) && src[hi-1] != '\n' {
-		hi++
-	}
-	return string(src[lo:hi])
-}

+ 0 - 27
vendor/golang.org/x/mod/LICENSE

@@ -1,27 +0,0 @@
-Copyright (c) 2009 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 0 - 22
vendor/golang.org/x/mod/PATENTS

@@ -1,22 +0,0 @@
-Additional IP Rights Grant (Patents)
-
-"This implementation" means the copyrightable works distributed by
-Google as part of the Go project.
-
-Google hereby grants to You a perpetual, worldwide, non-exclusive,
-no-charge, royalty-free, irrevocable (except as stated in this section)
-patent license to make, have made, use, offer to sell, sell, import,
-transfer and otherwise run, modify and propagate the contents of this
-implementation of Go, where such license applies only to those patent
-claims, both currently owned or controlled by Google and acquired in
-the future, licensable by Google that are necessarily infringed by this
-implementation of Go.  This grant does not include claims that would be
-infringed only as a consequence of further modification of this
-implementation.  If you or your agent or exclusive licensee institute or
-order or agree to the institution of patent litigation against any
-entity (including a cross-claim or counterclaim in a lawsuit) alleging
-that this implementation of Go or any code incorporated within this
-implementation of Go constitutes direct or contributory patent
-infringement, or inducement of patent infringement, then any patent
-rights granted to you under this License for this implementation of Go
-shall terminate as of the date such litigation is filed.

+ 0 - 822
vendor/golang.org/x/mod/module/module.go

@@ -1,822 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package module defines the module.Version type along with support code.
-//
-// The module.Version type is a simple Path, Version pair:
-//
-//	type Version struct {
-//		Path string
-//		Version string
-//	}
-//
-// There are no restrictions imposed directly by use of this structure,
-// but additional checking functions, most notably Check, verify that
-// a particular path, version pair is valid.
-//
-// Escaped Paths
-//
-// Module paths appear as substrings of file system paths
-// (in the download cache) and of web server URLs in the proxy protocol.
-// In general we cannot rely on file systems to be case-sensitive,
-// nor can we rely on web servers, since they read from file systems.
-// That is, we cannot rely on the file system to keep rsc.io/QUOTE
-// and rsc.io/quote separate. Windows and macOS don't.
-// Instead, we must never require two different casings of a file path.
-// Because we want the download cache to match the proxy protocol,
-// and because we want the proxy protocol to be possible to serve
-// from a tree of static files (which might be stored on a case-insensitive
-// file system), the proxy protocol must never require two different casings
-// of a URL path either.
-//
-// One possibility would be to make the escaped form be the lowercase
-// hexadecimal encoding of the actual path bytes. This would avoid ever
-// needing different casings of a file path, but it would be fairly illegible
-// to most programmers when those paths appeared in the file system
-// (including in file paths in compiler errors and stack traces)
-// in web server logs, and so on. Instead, we want a safe escaped form that
-// leaves most paths unaltered.
-//
-// The safe escaped form is to replace every uppercase letter
-// with an exclamation mark followed by the letter's lowercase equivalent.
-//
-// For example,
-//
-//	github.com/Azure/azure-sdk-for-go ->  github.com/!azure/azure-sdk-for-go.
-//	github.com/GoogleCloudPlatform/cloudsql-proxy -> github.com/!google!cloud!platform/cloudsql-proxy
-//	github.com/Sirupsen/logrus -> github.com/!sirupsen/logrus.
-//
-// Import paths that avoid upper-case letters are left unchanged.
-// Note that because import paths are ASCII-only and avoid various
-// problematic punctuation (like : < and >), the escaped form is also ASCII-only
-// and avoids the same problematic punctuation.
-//
-// Import paths have never allowed exclamation marks, so there is no
-// need to define how to escape a literal !.
-//
-// Unicode Restrictions
-//
-// Today, paths are disallowed from using Unicode.
-//
-// Although paths are currently disallowed from using Unicode,
-// we would like at some point to allow Unicode letters as well, to assume that
-// file systems and URLs are Unicode-safe (storing UTF-8), and apply
-// the !-for-uppercase convention for escaping them in the file system.
-// But there are at least two subtle considerations.
-//
-// First, note that not all case-fold equivalent distinct runes
-// form an upper/lower pair.
-// For example, U+004B ('K'), U+006B ('k'), and U+212A ('K' for Kelvin)
-// are three distinct runes that case-fold to each other.
-// When we do add Unicode letters, we must not assume that upper/lower
-// are the only case-equivalent pairs.
-// Perhaps the Kelvin symbol would be disallowed entirely, for example.
-// Or perhaps it would escape as "!!k", or perhaps as "(212A)".
-//
-// Second, it would be nice to allow Unicode marks as well as letters,
-// but marks include combining marks, and then we must deal not
-// only with case folding but also normalization: both U+00E9 ('é')
-// and U+0065 U+0301 ('e' followed by combining acute accent)
-// look the same on the page and are treated by some file systems
-// as the same path. If we do allow Unicode marks in paths, there
-// must be some kind of normalization to allow only one canonical
-// encoding of any character used in an import path.
-package module
-
-// IMPORTANT NOTE
-//
-// This file essentially defines the set of valid import paths for the go command.
-// There are many subtle considerations, including Unicode ambiguity,
-// security, network, and file system representations.
-//
-// This file also defines the set of valid module path and version combinations,
-// another topic with many subtle considerations.
-//
-// Changes to the semantics in this file require approval from rsc.
-
-import (
-	"fmt"
-	"path"
-	"sort"
-	"strings"
-	"unicode"
-	"unicode/utf8"
-
-	"golang.org/x/mod/semver"
-	errors "golang.org/x/xerrors"
-)
-
-// A Version (for clients, a module.Version) is defined by a module path and version pair.
-// These are stored in their plain (unescaped) form.
-type Version struct {
-	// Path is a module path, like "golang.org/x/text" or "rsc.io/quote/v2".
-	Path string
-
-	// Version is usually a semantic version in canonical form.
-	// There are three exceptions to this general rule.
-	// First, the top-level target of a build has no specific version
-	// and uses Version = "".
-	// Second, during MVS calculations the version "none" is used
-	// to represent the decision to take no version of a given module.
-	// Third, filesystem paths found in "replace" directives are
-	// represented by a path with an empty version.
-	Version string `json:",omitempty"`
-}
-
-// String returns a representation of the Version suitable for logging
-// (Path@Version, or just Path if Version is empty).
-func (m Version) String() string {
-	if m.Version == "" {
-		return m.Path
-	}
-	return m.Path + "@" + m.Version
-}
-
-// A ModuleError indicates an error specific to a module.
-type ModuleError struct {
-	Path    string
-	Version string
-	Err     error
-}
-
-// VersionError returns a ModuleError derived from a Version and error,
-// or err itself if it is already such an error.
-func VersionError(v Version, err error) error {
-	var mErr *ModuleError
-	if errors.As(err, &mErr) && mErr.Path == v.Path && mErr.Version == v.Version {
-		return err
-	}
-	return &ModuleError{
-		Path:    v.Path,
-		Version: v.Version,
-		Err:     err,
-	}
-}
-
-func (e *ModuleError) Error() string {
-	if v, ok := e.Err.(*InvalidVersionError); ok {
-		return fmt.Sprintf("%s@%s: invalid %s: %v", e.Path, v.Version, v.noun(), v.Err)
-	}
-	if e.Version != "" {
-		return fmt.Sprintf("%s@%s: %v", e.Path, e.Version, e.Err)
-	}
-	return fmt.Sprintf("module %s: %v", e.Path, e.Err)
-}
-
-func (e *ModuleError) Unwrap() error { return e.Err }
-
-// An InvalidVersionError indicates an error specific to a version, with the
-// module path unknown or specified externally.
-//
-// A ModuleError may wrap an InvalidVersionError, but an InvalidVersionError
-// must not wrap a ModuleError.
-type InvalidVersionError struct {
-	Version string
-	Pseudo  bool
-	Err     error
-}
-
-// noun returns either "version" or "pseudo-version", depending on whether
-// e.Version is a pseudo-version.
-func (e *InvalidVersionError) noun() string {
-	if e.Pseudo {
-		return "pseudo-version"
-	}
-	return "version"
-}
-
-func (e *InvalidVersionError) Error() string {
-	return fmt.Sprintf("%s %q invalid: %s", e.noun(), e.Version, e.Err)
-}
-
-func (e *InvalidVersionError) Unwrap() error { return e.Err }
-
-// Check checks that a given module path, version pair is valid.
-// In addition to the path being a valid module path
-// and the version being a valid semantic version,
-// the two must correspond.
-// For example, the path "yaml/v2" only corresponds to
-// semantic versions beginning with "v2.".
-func Check(path, version string) error {
-	if err := CheckPath(path); err != nil {
-		return err
-	}
-	if !semver.IsValid(version) {
-		return &ModuleError{
-			Path: path,
-			Err:  &InvalidVersionError{Version: version, Err: errors.New("not a semantic version")},
-		}
-	}
-	_, pathMajor, _ := SplitPathVersion(path)
-	if err := CheckPathMajor(version, pathMajor); err != nil {
-		return &ModuleError{Path: path, Err: err}
-	}
-	return nil
-}
-
-// firstPathOK reports whether r can appear in the first element of a module path.
-// The first element of the path must be an LDH domain name, at least for now.
-// To avoid case ambiguity, the domain name must be entirely lower case.
-func firstPathOK(r rune) bool {
-	return r == '-' || r == '.' ||
-		'0' <= r && r <= '9' ||
-		'a' <= r && r <= 'z'
-}
-
-// modPathOK reports whether r can appear in a module path element.
-// Paths can be ASCII letters, ASCII digits, and limited ASCII punctuation: - . _ and ~.
-//
-// This matches what "go get" has historically recognized in import paths,
-// and avoids confusing sequences like '%20' or '+' that would change meaning
-// if used in a URL.
-//
-// TODO(rsc): We would like to allow Unicode letters, but that requires additional
-// care in the safe encoding (see "escaped paths" above).
-func modPathOK(r rune) bool {
-	if r < utf8.RuneSelf {
-		return r == '-' || r == '.' || r == '_' || r == '~' ||
-			'0' <= r && r <= '9' ||
-			'A' <= r && r <= 'Z' ||
-			'a' <= r && r <= 'z'
-	}
-	return false
-}
-
-// modPathOK reports whether r can appear in a package import path element.
-//
-// Import paths are intermediate between module paths and file paths: we allow
-// disallow characters that would be confusing or ambiguous as arguments to
-// 'go get' (such as '@' and ' ' ), but allow certain characters that are
-// otherwise-unambiguous on the command line and historically used for some
-// binary names (such as '++' as a suffix for compiler binaries and wrappers).
-func importPathOK(r rune) bool {
-	return modPathOK(r) || r == '+'
-}
-
-// fileNameOK reports whether r can appear in a file name.
-// For now we allow all Unicode letters but otherwise limit to pathOK plus a few more punctuation characters.
-// If we expand the set of allowed characters here, we have to
-// work harder at detecting potential case-folding and normalization collisions.
-// See note about "escaped paths" above.
-func fileNameOK(r rune) bool {
-	if r < utf8.RuneSelf {
-		// Entire set of ASCII punctuation, from which we remove characters:
-		//     ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
-		// We disallow some shell special characters: " ' * < > ? ` |
-		// (Note that some of those are disallowed by the Windows file system as well.)
-		// We also disallow path separators / : and \ (fileNameOK is only called on path element characters).
-		// We allow spaces (U+0020) in file names.
-		const allowed = "!#$%&()+,-.=@[]^_{}~ "
-		if '0' <= r && r <= '9' || 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' {
-			return true
-		}
-		for i := 0; i < len(allowed); i++ {
-			if rune(allowed[i]) == r {
-				return true
-			}
-		}
-		return false
-	}
-	// It may be OK to add more ASCII punctuation here, but only carefully.
-	// For example Windows disallows < > \, and macOS disallows :, so we must not allow those.
-	return unicode.IsLetter(r)
-}
-
-// CheckPath checks that a module path is valid.
-// A valid module path is a valid import path, as checked by CheckImportPath,
-// with three additional constraints.
-// First, the leading path element (up to the first slash, if any),
-// by convention a domain name, must contain only lower-case ASCII letters,
-// ASCII digits, dots (U+002E), and dashes (U+002D);
-// it must contain at least one dot and cannot start with a dash.
-// Second, for a final path element of the form /vN, where N looks numeric
-// (ASCII digits and dots) must not begin with a leading zero, must not be /v1,
-// and must not contain any dots. For paths beginning with "gopkg.in/",
-// this second requirement is replaced by a requirement that the path
-// follow the gopkg.in server's conventions.
-// Third, no path element may begin with a dot.
-func CheckPath(path string) error {
-	if err := checkPath(path, modulePath); err != nil {
-		return fmt.Errorf("malformed module path %q: %v", path, err)
-	}
-	i := strings.Index(path, "/")
-	if i < 0 {
-		i = len(path)
-	}
-	if i == 0 {
-		return fmt.Errorf("malformed module path %q: leading slash", path)
-	}
-	if !strings.Contains(path[:i], ".") {
-		return fmt.Errorf("malformed module path %q: missing dot in first path element", path)
-	}
-	if path[0] == '-' {
-		return fmt.Errorf("malformed module path %q: leading dash in first path element", path)
-	}
-	for _, r := range path[:i] {
-		if !firstPathOK(r) {
-			return fmt.Errorf("malformed module path %q: invalid char %q in first path element", path, r)
-		}
-	}
-	if _, _, ok := SplitPathVersion(path); !ok {
-		return fmt.Errorf("malformed module path %q: invalid version", path)
-	}
-	return nil
-}
-
-// CheckImportPath checks that an import path is valid.
-//
-// A valid import path consists of one or more valid path elements
-// separated by slashes (U+002F). (It must not begin with nor end in a slash.)
-//
-// A valid path element is a non-empty string made up of
-// ASCII letters, ASCII digits, and limited ASCII punctuation: - . _ and ~.
-// It must not end with a dot (U+002E), nor contain two dots in a row.
-//
-// The element prefix up to the first dot must not be a reserved file name
-// on Windows, regardless of case (CON, com1, NuL, and so on). The element
-// must not have a suffix of a tilde followed by one or more ASCII digits
-// (to exclude paths elements that look like Windows short-names).
-//
-// CheckImportPath may be less restrictive in the future, but see the
-// top-level package documentation for additional information about
-// subtleties of Unicode.
-func CheckImportPath(path string) error {
-	if err := checkPath(path, importPath); err != nil {
-		return fmt.Errorf("malformed import path %q: %v", path, err)
-	}
-	return nil
-}
-
-// pathKind indicates what kind of path we're checking. Module paths,
-// import paths, and file paths have different restrictions.
-type pathKind int
-
-const (
-	modulePath pathKind = iota
-	importPath
-	filePath
-)
-
-// checkPath checks that a general path is valid.
-// It returns an error describing why but not mentioning path.
-// Because these checks apply to both module paths and import paths,
-// the caller is expected to add the "malformed ___ path %q: " prefix.
-// fileName indicates whether the final element of the path is a file name
-// (as opposed to a directory name).
-func checkPath(path string, kind pathKind) error {
-	if !utf8.ValidString(path) {
-		return fmt.Errorf("invalid UTF-8")
-	}
-	if path == "" {
-		return fmt.Errorf("empty string")
-	}
-	if path[0] == '-' {
-		return fmt.Errorf("leading dash")
-	}
-	if strings.Contains(path, "//") {
-		return fmt.Errorf("double slash")
-	}
-	if path[len(path)-1] == '/' {
-		return fmt.Errorf("trailing slash")
-	}
-	elemStart := 0
-	for i, r := range path {
-		if r == '/' {
-			if err := checkElem(path[elemStart:i], kind); err != nil {
-				return err
-			}
-			elemStart = i + 1
-		}
-	}
-	if err := checkElem(path[elemStart:], kind); err != nil {
-		return err
-	}
-	return nil
-}
-
-// checkElem checks whether an individual path element is valid.
-func checkElem(elem string, kind pathKind) error {
-	if elem == "" {
-		return fmt.Errorf("empty path element")
-	}
-	if strings.Count(elem, ".") == len(elem) {
-		return fmt.Errorf("invalid path element %q", elem)
-	}
-	if elem[0] == '.' && kind == modulePath {
-		return fmt.Errorf("leading dot in path element")
-	}
-	if elem[len(elem)-1] == '.' {
-		return fmt.Errorf("trailing dot in path element")
-	}
-	for _, r := range elem {
-		ok := false
-		switch kind {
-		case modulePath:
-			ok = modPathOK(r)
-		case importPath:
-			ok = importPathOK(r)
-		case filePath:
-			ok = fileNameOK(r)
-		default:
-			panic(fmt.Sprintf("internal error: invalid kind %v", kind))
-		}
-		if !ok {
-			return fmt.Errorf("invalid char %q", r)
-		}
-	}
-
-	// Windows disallows a bunch of path elements, sadly.
-	// See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file
-	short := elem
-	if i := strings.Index(short, "."); i >= 0 {
-		short = short[:i]
-	}
-	for _, bad := range badWindowsNames {
-		if strings.EqualFold(bad, short) {
-			return fmt.Errorf("%q disallowed as path element component on Windows", short)
-		}
-	}
-
-	if kind == filePath {
-		// don't check for Windows short-names in file names. They're
-		// only an issue for import paths.
-		return nil
-	}
-
-	// Reject path components that look like Windows short-names.
-	// Those usually end in a tilde followed by one or more ASCII digits.
-	if tilde := strings.LastIndexByte(short, '~'); tilde >= 0 && tilde < len(short)-1 {
-		suffix := short[tilde+1:]
-		suffixIsDigits := true
-		for _, r := range suffix {
-			if r < '0' || r > '9' {
-				suffixIsDigits = false
-				break
-			}
-		}
-		if suffixIsDigits {
-			return fmt.Errorf("trailing tilde and digits in path element")
-		}
-	}
-
-	return nil
-}
-
-// CheckFilePath checks that a slash-separated file path is valid.
-// The definition of a valid file path is the same as the definition
-// of a valid import path except that the set of allowed characters is larger:
-// all Unicode letters, ASCII digits, the ASCII space character (U+0020),
-// and the ASCII punctuation characters
-// “!#$%&()+,-.=@[]^_{}~”.
-// (The excluded punctuation characters, " * < > ? ` ' | / \ and :,
-// have special meanings in certain shells or operating systems.)
-//
-// CheckFilePath may be less restrictive in the future, but see the
-// top-level package documentation for additional information about
-// subtleties of Unicode.
-func CheckFilePath(path string) error {
-	if err := checkPath(path, filePath); err != nil {
-		return fmt.Errorf("malformed file path %q: %v", path, err)
-	}
-	return nil
-}
-
-// badWindowsNames are the reserved file path elements on Windows.
-// See https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file
-var badWindowsNames = []string{
-	"CON",
-	"PRN",
-	"AUX",
-	"NUL",
-	"COM1",
-	"COM2",
-	"COM3",
-	"COM4",
-	"COM5",
-	"COM6",
-	"COM7",
-	"COM8",
-	"COM9",
-	"LPT1",
-	"LPT2",
-	"LPT3",
-	"LPT4",
-	"LPT5",
-	"LPT6",
-	"LPT7",
-	"LPT8",
-	"LPT9",
-}
-
-// SplitPathVersion returns prefix and major version such that prefix+pathMajor == path
-// and version is either empty or "/vN" for N >= 2.
-// As a special case, gopkg.in paths are recognized directly;
-// they require ".vN" instead of "/vN", and for all N, not just N >= 2.
-// SplitPathVersion returns with ok = false when presented with
-// a path whose last path element does not satisfy the constraints
-// applied by CheckPath, such as "example.com/pkg/v1" or "example.com/pkg/v1.2".
-func SplitPathVersion(path string) (prefix, pathMajor string, ok bool) {
-	if strings.HasPrefix(path, "gopkg.in/") {
-		return splitGopkgIn(path)
-	}
-
-	i := len(path)
-	dot := false
-	for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9' || path[i-1] == '.') {
-		if path[i-1] == '.' {
-			dot = true
-		}
-		i--
-	}
-	if i <= 1 || i == len(path) || path[i-1] != 'v' || path[i-2] != '/' {
-		return path, "", true
-	}
-	prefix, pathMajor = path[:i-2], path[i-2:]
-	if dot || len(pathMajor) <= 2 || pathMajor[2] == '0' || pathMajor == "/v1" {
-		return path, "", false
-	}
-	return prefix, pathMajor, true
-}
-
-// splitGopkgIn is like SplitPathVersion but only for gopkg.in paths.
-func splitGopkgIn(path string) (prefix, pathMajor string, ok bool) {
-	if !strings.HasPrefix(path, "gopkg.in/") {
-		return path, "", false
-	}
-	i := len(path)
-	if strings.HasSuffix(path, "-unstable") {
-		i -= len("-unstable")
-	}
-	for i > 0 && ('0' <= path[i-1] && path[i-1] <= '9') {
-		i--
-	}
-	if i <= 1 || path[i-1] != 'v' || path[i-2] != '.' {
-		// All gopkg.in paths must end in vN for some N.
-		return path, "", false
-	}
-	prefix, pathMajor = path[:i-2], path[i-2:]
-	if len(pathMajor) <= 2 || pathMajor[2] == '0' && pathMajor != ".v0" {
-		return path, "", false
-	}
-	return prefix, pathMajor, true
-}
-
-// MatchPathMajor reports whether the semantic version v
-// matches the path major version pathMajor.
-//
-// MatchPathMajor returns true if and only if CheckPathMajor returns nil.
-func MatchPathMajor(v, pathMajor string) bool {
-	return CheckPathMajor(v, pathMajor) == nil
-}
-
-// CheckPathMajor returns a non-nil error if the semantic version v
-// does not match the path major version pathMajor.
-func CheckPathMajor(v, pathMajor string) error {
-	// TODO(jayconrod): return errors or panic for invalid inputs. This function
-	// (and others) was covered by integration tests for cmd/go, and surrounding
-	// code protected against invalid inputs like non-canonical versions.
-	if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") {
-		pathMajor = strings.TrimSuffix(pathMajor, "-unstable")
-	}
-	if strings.HasPrefix(v, "v0.0.0-") && pathMajor == ".v1" {
-		// Allow old bug in pseudo-versions that generated v0.0.0- pseudoversion for gopkg .v1.
-		// For example, gopkg.in/yaml.v2@v2.2.1's go.mod requires gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405.
-		return nil
-	}
-	m := semver.Major(v)
-	if pathMajor == "" {
-		if m == "v0" || m == "v1" || semver.Build(v) == "+incompatible" {
-			return nil
-		}
-		pathMajor = "v0 or v1"
-	} else if pathMajor[0] == '/' || pathMajor[0] == '.' {
-		if m == pathMajor[1:] {
-			return nil
-		}
-		pathMajor = pathMajor[1:]
-	}
-	return &InvalidVersionError{
-		Version: v,
-		Err:     fmt.Errorf("should be %s, not %s", pathMajor, semver.Major(v)),
-	}
-}
-
-// PathMajorPrefix returns the major-version tag prefix implied by pathMajor.
-// An empty PathMajorPrefix allows either v0 or v1.
-//
-// Note that MatchPathMajor may accept some versions that do not actually begin
-// with this prefix: namely, it accepts a 'v0.0.0-' prefix for a '.v1'
-// pathMajor, even though that pathMajor implies 'v1' tagging.
-func PathMajorPrefix(pathMajor string) string {
-	if pathMajor == "" {
-		return ""
-	}
-	if pathMajor[0] != '/' && pathMajor[0] != '.' {
-		panic("pathMajor suffix " + pathMajor + " passed to PathMajorPrefix lacks separator")
-	}
-	if strings.HasPrefix(pathMajor, ".v") && strings.HasSuffix(pathMajor, "-unstable") {
-		pathMajor = strings.TrimSuffix(pathMajor, "-unstable")
-	}
-	m := pathMajor[1:]
-	if m != semver.Major(m) {
-		panic("pathMajor suffix " + pathMajor + "passed to PathMajorPrefix is not a valid major version")
-	}
-	return m
-}
-
-// CanonicalVersion returns the canonical form of the version string v.
-// It is the same as semver.Canonical(v) except that it preserves the special build suffix "+incompatible".
-func CanonicalVersion(v string) string {
-	cv := semver.Canonical(v)
-	if semver.Build(v) == "+incompatible" {
-		cv += "+incompatible"
-	}
-	return cv
-}
-
-// Sort sorts the list by Path, breaking ties by comparing Version fields.
-// The Version fields are interpreted as semantic versions (using semver.Compare)
-// optionally followed by a tie-breaking suffix introduced by a slash character,
-// like in "v0.0.1/go.mod".
-func Sort(list []Version) {
-	sort.Slice(list, func(i, j int) bool {
-		mi := list[i]
-		mj := list[j]
-		if mi.Path != mj.Path {
-			return mi.Path < mj.Path
-		}
-		// To help go.sum formatting, allow version/file.
-		// Compare semver prefix by semver rules,
-		// file by string order.
-		vi := mi.Version
-		vj := mj.Version
-		var fi, fj string
-		if k := strings.Index(vi, "/"); k >= 0 {
-			vi, fi = vi[:k], vi[k:]
-		}
-		if k := strings.Index(vj, "/"); k >= 0 {
-			vj, fj = vj[:k], vj[k:]
-		}
-		if vi != vj {
-			return semver.Compare(vi, vj) < 0
-		}
-		return fi < fj
-	})
-}
-
-// EscapePath returns the escaped form of the given module path.
-// It fails if the module path is invalid.
-func EscapePath(path string) (escaped string, err error) {
-	if err := CheckPath(path); err != nil {
-		return "", err
-	}
-
-	return escapeString(path)
-}
-
-// EscapeVersion returns the escaped form of the given module version.
-// Versions are allowed to be in non-semver form but must be valid file names
-// and not contain exclamation marks.
-func EscapeVersion(v string) (escaped string, err error) {
-	if err := checkElem(v, filePath); err != nil || strings.Contains(v, "!") {
-		return "", &InvalidVersionError{
-			Version: v,
-			Err:     fmt.Errorf("disallowed version string"),
-		}
-	}
-	return escapeString(v)
-}
-
-func escapeString(s string) (escaped string, err error) {
-	haveUpper := false
-	for _, r := range s {
-		if r == '!' || r >= utf8.RuneSelf {
-			// This should be disallowed by CheckPath, but diagnose anyway.
-			// The correctness of the escaping loop below depends on it.
-			return "", fmt.Errorf("internal error: inconsistency in EscapePath")
-		}
-		if 'A' <= r && r <= 'Z' {
-			haveUpper = true
-		}
-	}
-
-	if !haveUpper {
-		return s, nil
-	}
-
-	var buf []byte
-	for _, r := range s {
-		if 'A' <= r && r <= 'Z' {
-			buf = append(buf, '!', byte(r+'a'-'A'))
-		} else {
-			buf = append(buf, byte(r))
-		}
-	}
-	return string(buf), nil
-}
-
-// UnescapePath returns the module path for the given escaped path.
-// It fails if the escaped path is invalid or describes an invalid path.
-func UnescapePath(escaped string) (path string, err error) {
-	path, ok := unescapeString(escaped)
-	if !ok {
-		return "", fmt.Errorf("invalid escaped module path %q", escaped)
-	}
-	if err := CheckPath(path); err != nil {
-		return "", fmt.Errorf("invalid escaped module path %q: %v", escaped, err)
-	}
-	return path, nil
-}
-
-// UnescapeVersion returns the version string for the given escaped version.
-// It fails if the escaped form is invalid or describes an invalid version.
-// Versions are allowed to be in non-semver form but must be valid file names
-// and not contain exclamation marks.
-func UnescapeVersion(escaped string) (v string, err error) {
-	v, ok := unescapeString(escaped)
-	if !ok {
-		return "", fmt.Errorf("invalid escaped version %q", escaped)
-	}
-	if err := checkElem(v, filePath); err != nil {
-		return "", fmt.Errorf("invalid escaped version %q: %v", v, err)
-	}
-	return v, nil
-}
-
-func unescapeString(escaped string) (string, bool) {
-	var buf []byte
-
-	bang := false
-	for _, r := range escaped {
-		if r >= utf8.RuneSelf {
-			return "", false
-		}
-		if bang {
-			bang = false
-			if r < 'a' || 'z' < r {
-				return "", false
-			}
-			buf = append(buf, byte(r+'A'-'a'))
-			continue
-		}
-		if r == '!' {
-			bang = true
-			continue
-		}
-		if 'A' <= r && r <= 'Z' {
-			return "", false
-		}
-		buf = append(buf, byte(r))
-	}
-	if bang {
-		return "", false
-	}
-	return string(buf), true
-}
-
-// MatchPrefixPatterns reports whether any path prefix of target matches one of
-// the glob patterns (as defined by path.Match) in the comma-separated globs
-// list. This implements the algorithm used when matching a module path to the
-// GOPRIVATE environment variable, as described by 'go help module-private'.
-//
-// It ignores any empty or malformed patterns in the list.
-func MatchPrefixPatterns(globs, target string) bool {
-	for globs != "" {
-		// Extract next non-empty glob in comma-separated list.
-		var glob string
-		if i := strings.Index(globs, ","); i >= 0 {
-			glob, globs = globs[:i], globs[i+1:]
-		} else {
-			glob, globs = globs, ""
-		}
-		if glob == "" {
-			continue
-		}
-
-		// A glob with N+1 path elements (N slashes) needs to be matched
-		// against the first N+1 path elements of target,
-		// which end just before the N+1'th slash.
-		n := strings.Count(glob, "/")
-		prefix := target
-		// Walk target, counting slashes, truncating at the N+1'th slash.
-		for i := 0; i < len(target); i++ {
-			if target[i] == '/' {
-				if n == 0 {
-					prefix = target[:i]
-					break
-				}
-				n--
-			}
-		}
-		if n > 0 {
-			// Not enough prefix elements.
-			continue
-		}
-		matched, _ := path.Match(glob, prefix)
-		if matched {
-			return true
-		}
-	}
-	return false
-}

+ 0 - 391
vendor/golang.org/x/mod/semver/semver.go

@@ -1,391 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package semver implements comparison of semantic version strings.
-// In this package, semantic version strings must begin with a leading "v",
-// as in "v1.0.0".
-//
-// The general form of a semantic version string accepted by this package is
-//
-//	vMAJOR[.MINOR[.PATCH[-PRERELEASE][+BUILD]]]
-//
-// where square brackets indicate optional parts of the syntax;
-// MAJOR, MINOR, and PATCH are decimal integers without extra leading zeros;
-// PRERELEASE and BUILD are each a series of non-empty dot-separated identifiers
-// using only alphanumeric characters and hyphens; and
-// all-numeric PRERELEASE identifiers must not have leading zeros.
-//
-// This package follows Semantic Versioning 2.0.0 (see semver.org)
-// with two exceptions. First, it requires the "v" prefix. Second, it recognizes
-// vMAJOR and vMAJOR.MINOR (with no prerelease or build suffixes)
-// as shorthands for vMAJOR.0.0 and vMAJOR.MINOR.0.
-package semver
-
-// parsed returns the parsed form of a semantic version string.
-type parsed struct {
-	major      string
-	minor      string
-	patch      string
-	short      string
-	prerelease string
-	build      string
-	err        string
-}
-
-// IsValid reports whether v is a valid semantic version string.
-func IsValid(v string) bool {
-	_, ok := parse(v)
-	return ok
-}
-
-// Canonical returns the canonical formatting of the semantic version v.
-// It fills in any missing .MINOR or .PATCH and discards build metadata.
-// Two semantic versions compare equal only if their canonical formattings
-// are identical strings.
-// The canonical invalid semantic version is the empty string.
-func Canonical(v string) string {
-	p, ok := parse(v)
-	if !ok {
-		return ""
-	}
-	if p.build != "" {
-		return v[:len(v)-len(p.build)]
-	}
-	if p.short != "" {
-		return v + p.short
-	}
-	return v
-}
-
-// Major returns the major version prefix of the semantic version v.
-// For example, Major("v2.1.0") == "v2".
-// If v is an invalid semantic version string, Major returns the empty string.
-func Major(v string) string {
-	pv, ok := parse(v)
-	if !ok {
-		return ""
-	}
-	return v[:1+len(pv.major)]
-}
-
-// MajorMinor returns the major.minor version prefix of the semantic version v.
-// For example, MajorMinor("v2.1.0") == "v2.1".
-// If v is an invalid semantic version string, MajorMinor returns the empty string.
-func MajorMinor(v string) string {
-	pv, ok := parse(v)
-	if !ok {
-		return ""
-	}
-	i := 1 + len(pv.major)
-	if j := i + 1 + len(pv.minor); j <= len(v) && v[i] == '.' && v[i+1:j] == pv.minor {
-		return v[:j]
-	}
-	return v[:i] + "." + pv.minor
-}
-
-// Prerelease returns the prerelease suffix of the semantic version v.
-// For example, Prerelease("v2.1.0-pre+meta") == "-pre".
-// If v is an invalid semantic version string, Prerelease returns the empty string.
-func Prerelease(v string) string {
-	pv, ok := parse(v)
-	if !ok {
-		return ""
-	}
-	return pv.prerelease
-}
-
-// Build returns the build suffix of the semantic version v.
-// For example, Build("v2.1.0+meta") == "+meta".
-// If v is an invalid semantic version string, Build returns the empty string.
-func Build(v string) string {
-	pv, ok := parse(v)
-	if !ok {
-		return ""
-	}
-	return pv.build
-}
-
-// Compare returns an integer comparing two versions according to
-// semantic version precedence.
-// The result will be 0 if v == w, -1 if v < w, or +1 if v > w.
-//
-// An invalid semantic version string is considered less than a valid one.
-// All invalid semantic version strings compare equal to each other.
-func Compare(v, w string) int {
-	pv, ok1 := parse(v)
-	pw, ok2 := parse(w)
-	if !ok1 && !ok2 {
-		return 0
-	}
-	if !ok1 {
-		return -1
-	}
-	if !ok2 {
-		return +1
-	}
-	if c := compareInt(pv.major, pw.major); c != 0 {
-		return c
-	}
-	if c := compareInt(pv.minor, pw.minor); c != 0 {
-		return c
-	}
-	if c := compareInt(pv.patch, pw.patch); c != 0 {
-		return c
-	}
-	return comparePrerelease(pv.prerelease, pw.prerelease)
-}
-
-// Max canonicalizes its arguments and then returns the version string
-// that compares greater.
-//
-// Deprecated: use Compare instead. In most cases, returning a canonicalized
-// version is not expected or desired.
-func Max(v, w string) string {
-	v = Canonical(v)
-	w = Canonical(w)
-	if Compare(v, w) > 0 {
-		return v
-	}
-	return w
-}
-
-func parse(v string) (p parsed, ok bool) {
-	if v == "" || v[0] != 'v' {
-		p.err = "missing v prefix"
-		return
-	}
-	p.major, v, ok = parseInt(v[1:])
-	if !ok {
-		p.err = "bad major version"
-		return
-	}
-	if v == "" {
-		p.minor = "0"
-		p.patch = "0"
-		p.short = ".0.0"
-		return
-	}
-	if v[0] != '.' {
-		p.err = "bad minor prefix"
-		ok = false
-		return
-	}
-	p.minor, v, ok = parseInt(v[1:])
-	if !ok {
-		p.err = "bad minor version"
-		return
-	}
-	if v == "" {
-		p.patch = "0"
-		p.short = ".0"
-		return
-	}
-	if v[0] != '.' {
-		p.err = "bad patch prefix"
-		ok = false
-		return
-	}
-	p.patch, v, ok = parseInt(v[1:])
-	if !ok {
-		p.err = "bad patch version"
-		return
-	}
-	if len(v) > 0 && v[0] == '-' {
-		p.prerelease, v, ok = parsePrerelease(v)
-		if !ok {
-			p.err = "bad prerelease"
-			return
-		}
-	}
-	if len(v) > 0 && v[0] == '+' {
-		p.build, v, ok = parseBuild(v)
-		if !ok {
-			p.err = "bad build"
-			return
-		}
-	}
-	if v != "" {
-		p.err = "junk on end"
-		ok = false
-		return
-	}
-	ok = true
-	return
-}
-
-func parseInt(v string) (t, rest string, ok bool) {
-	if v == "" {
-		return
-	}
-	if v[0] < '0' || '9' < v[0] {
-		return
-	}
-	i := 1
-	for i < len(v) && '0' <= v[i] && v[i] <= '9' {
-		i++
-	}
-	if v[0] == '0' && i != 1 {
-		return
-	}
-	return v[:i], v[i:], true
-}
-
-func parsePrerelease(v string) (t, rest string, ok bool) {
-	// "A pre-release version MAY be denoted by appending a hyphen and
-	// a series of dot separated identifiers immediately following the patch version.
-	// Identifiers MUST comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-].
-	// Identifiers MUST NOT be empty. Numeric identifiers MUST NOT include leading zeroes."
-	if v == "" || v[0] != '-' {
-		return
-	}
-	i := 1
-	start := 1
-	for i < len(v) && v[i] != '+' {
-		if !isIdentChar(v[i]) && v[i] != '.' {
-			return
-		}
-		if v[i] == '.' {
-			if start == i || isBadNum(v[start:i]) {
-				return
-			}
-			start = i + 1
-		}
-		i++
-	}
-	if start == i || isBadNum(v[start:i]) {
-		return
-	}
-	return v[:i], v[i:], true
-}
-
-func parseBuild(v string) (t, rest string, ok bool) {
-	if v == "" || v[0] != '+' {
-		return
-	}
-	i := 1
-	start := 1
-	for i < len(v) {
-		if !isIdentChar(v[i]) && v[i] != '.' {
-			return
-		}
-		if v[i] == '.' {
-			if start == i {
-				return
-			}
-			start = i + 1
-		}
-		i++
-	}
-	if start == i {
-		return
-	}
-	return v[:i], v[i:], true
-}
-
-func isIdentChar(c byte) bool {
-	return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' || c == '-'
-}
-
-func isBadNum(v string) bool {
-	i := 0
-	for i < len(v) && '0' <= v[i] && v[i] <= '9' {
-		i++
-	}
-	return i == len(v) && i > 1 && v[0] == '0'
-}
-
-func isNum(v string) bool {
-	i := 0
-	for i < len(v) && '0' <= v[i] && v[i] <= '9' {
-		i++
-	}
-	return i == len(v)
-}
-
-func compareInt(x, y string) int {
-	if x == y {
-		return 0
-	}
-	if len(x) < len(y) {
-		return -1
-	}
-	if len(x) > len(y) {
-		return +1
-	}
-	if x < y {
-		return -1
-	} else {
-		return +1
-	}
-}
-
-func comparePrerelease(x, y string) int {
-	// "When major, minor, and patch are equal, a pre-release version has
-	// lower precedence than a normal version.
-	// Example: 1.0.0-alpha < 1.0.0.
-	// Precedence for two pre-release versions with the same major, minor,
-	// and patch version MUST be determined by comparing each dot separated
-	// identifier from left to right until a difference is found as follows:
-	// identifiers consisting of only digits are compared numerically and
-	// identifiers with letters or hyphens are compared lexically in ASCII
-	// sort order. Numeric identifiers always have lower precedence than
-	// non-numeric identifiers. A larger set of pre-release fields has a
-	// higher precedence than a smaller set, if all of the preceding
-	// identifiers are equal.
-	// Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta <
-	// 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0."
-	if x == y {
-		return 0
-	}
-	if x == "" {
-		return +1
-	}
-	if y == "" {
-		return -1
-	}
-	for x != "" && y != "" {
-		x = x[1:] // skip - or .
-		y = y[1:] // skip - or .
-		var dx, dy string
-		dx, x = nextIdent(x)
-		dy, y = nextIdent(y)
-		if dx != dy {
-			ix := isNum(dx)
-			iy := isNum(dy)
-			if ix != iy {
-				if ix {
-					return -1
-				} else {
-					return +1
-				}
-			}
-			if ix {
-				if len(dx) < len(dy) {
-					return -1
-				}
-				if len(dx) > len(dy) {
-					return +1
-				}
-			}
-			if dx < dy {
-				return -1
-			} else {
-				return +1
-			}
-		}
-	}
-	if x == "" {
-		return -1
-	} else {
-		return +1
-	}
-}
-
-func nextIdent(x string) (dx, rest string) {
-	i := 0
-	for i < len(x) && x[i] != '.' {
-		i++
-	}
-	return x[:i], x[i:]
-}

+ 0 - 3
vendor/golang.org/x/tools/AUTHORS

@@ -1,3 +0,0 @@
-# This source code refers to The Go Authors for copyright purposes.
-# The master list of authors is in the main Go distribution,
-# visible at http://tip.golang.org/AUTHORS.

+ 0 - 3
vendor/golang.org/x/tools/CONTRIBUTORS

@@ -1,3 +0,0 @@
-# This source code was written by the Go contributors.
-# The master list of contributors is in the main Go distribution,
-# visible at http://tip.golang.org/CONTRIBUTORS.

+ 0 - 27
vendor/golang.org/x/tools/LICENSE

@@ -1,27 +0,0 @@
-Copyright (c) 2009 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 0 - 22
vendor/golang.org/x/tools/PATENTS

@@ -1,22 +0,0 @@
-Additional IP Rights Grant (Patents)
-
-"This implementation" means the copyrightable works distributed by
-Google as part of the Go project.
-
-Google hereby grants to You a perpetual, worldwide, non-exclusive,
-no-charge, royalty-free, irrevocable (except as stated in this section)
-patent license to make, have made, use, offer to sell, sell, import,
-transfer and otherwise run, modify and propagate the contents of this
-implementation of Go, where such license applies only to those patent
-claims, both currently owned or controlled by Google and acquired in
-the future, licensable by Google that are necessarily infringed by this
-implementation of Go.  This grant does not include claims that would be
-infringed only as a consequence of further modification of this
-implementation.  If you or your agent or exclusive licensee institute or
-order or agree to the institution of patent litigation against any
-entity (including a cross-claim or counterclaim in a lawsuit) alleging
-that this implementation of Go or any code incorporated within this
-implementation of Go constitutes direct or contributory patent
-infringement, or inducement of patent infringement, then any patent
-rights granted to you under this License for this implementation of Go
-shall terminate as of the date such litigation is filed.

+ 0 - 47
vendor/golang.org/x/tools/cmd/goimports/doc.go

@@ -1,47 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-
-Command goimports updates your Go import lines,
-adding missing ones and removing unreferenced ones.
-
-     $ go get golang.org/x/tools/cmd/goimports
-
-In addition to fixing imports, goimports also formats
-your code in the same style as gofmt so it can be used
-as a replacement for your editor's gofmt-on-save hook.
-
-For emacs, make sure you have the latest go-mode.el:
-   https://github.com/dominikh/go-mode.el
-Then in your .emacs file:
-   (setq gofmt-command "goimports")
-   (add-hook 'before-save-hook 'gofmt-before-save)
-
-For vim, set "gofmt_command" to "goimports":
-    https://golang.org/change/39c724dd7f252
-    https://golang.org/wiki/IDEsAndTextEditorPlugins
-    etc
-
-For GoSublime, follow the steps described here:
-    http://michaelwhatcott.com/gosublime-goimports/
-
-For other editors, you probably know what to do.
-
-To exclude directories in your $GOPATH from being scanned for Go
-files, goimports respects a configuration file at
-$GOPATH/src/.goimportsignore which may contain blank lines, comment
-lines (beginning with '#'), or lines naming a directory relative to
-the configuration file to ignore when scanning. No globbing or regex
-patterns are allowed. Use the "-v" verbose flag to verify it's
-working and see what goimports is doing.
-
-File bugs or feature requests at:
-
-    https://golang.org/issues/new?title=x/tools/cmd/goimports:+
-
-Happy hacking!
-
-*/
-package main // import "golang.org/x/tools/cmd/goimports"

+ 0 - 380
vendor/golang.org/x/tools/cmd/goimports/goimports.go

@@ -1,380 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package main
-
-import (
-	"bufio"
-	"bytes"
-	"errors"
-	"flag"
-	"fmt"
-	"go/scanner"
-	exec "golang.org/x/sys/execabs"
-	"io"
-	"io/ioutil"
-	"log"
-	"os"
-	"path/filepath"
-	"runtime"
-	"runtime/pprof"
-	"strings"
-
-	"golang.org/x/tools/internal/gocommand"
-	"golang.org/x/tools/internal/imports"
-)
-
-var (
-	// main operation modes
-	list   = flag.Bool("l", false, "list files whose formatting differs from goimport's")
-	write  = flag.Bool("w", false, "write result to (source) file instead of stdout")
-	doDiff = flag.Bool("d", false, "display diffs instead of rewriting files")
-	srcdir = flag.String("srcdir", "", "choose imports as if source code is from `dir`. When operating on a single file, dir may instead be the complete file name.")
-
-	verbose bool // verbose logging
-
-	cpuProfile     = flag.String("cpuprofile", "", "CPU profile output")
-	memProfile     = flag.String("memprofile", "", "memory profile output")
-	memProfileRate = flag.Int("memrate", 0, "if > 0, sets runtime.MemProfileRate")
-
-	options = &imports.Options{
-		TabWidth:  8,
-		TabIndent: true,
-		Comments:  true,
-		Fragment:  true,
-		Env: &imports.ProcessEnv{
-			GocmdRunner: &gocommand.Runner{},
-		},
-	}
-	exitCode = 0
-)
-
-func init() {
-	flag.BoolVar(&options.AllErrors, "e", false, "report all errors (not just the first 10 on different lines)")
-	flag.StringVar(&options.LocalPrefix, "local", "", "put imports beginning with this string after 3rd-party packages; comma-separated list")
-	flag.BoolVar(&options.FormatOnly, "format-only", false, "if true, don't fix imports and only format. In this mode, goimports is effectively gofmt, with the addition that imports are grouped into sections.")
-}
-
-func report(err error) {
-	scanner.PrintError(os.Stderr, err)
-	exitCode = 2
-}
-
-func usage() {
-	fmt.Fprintf(os.Stderr, "usage: goimports [flags] [path ...]\n")
-	flag.PrintDefaults()
-	os.Exit(2)
-}
-
-func isGoFile(f os.FileInfo) bool {
-	// ignore non-Go files
-	name := f.Name()
-	return !f.IsDir() && !strings.HasPrefix(name, ".") && strings.HasSuffix(name, ".go")
-}
-
-// argumentType is which mode goimports was invoked as.
-type argumentType int
-
-const (
-	// fromStdin means the user is piping their source into goimports.
-	fromStdin argumentType = iota
-
-	// singleArg is the common case from editors, when goimports is run on
-	// a single file.
-	singleArg
-
-	// multipleArg is when the user ran "goimports file1.go file2.go"
-	// or ran goimports on a directory tree.
-	multipleArg
-)
-
-func processFile(filename string, in io.Reader, out io.Writer, argType argumentType) error {
-	opt := options
-	if argType == fromStdin {
-		nopt := *options
-		nopt.Fragment = true
-		opt = &nopt
-	}
-
-	if in == nil {
-		f, err := os.Open(filename)
-		if err != nil {
-			return err
-		}
-		defer f.Close()
-		in = f
-	}
-
-	src, err := ioutil.ReadAll(in)
-	if err != nil {
-		return err
-	}
-
-	target := filename
-	if *srcdir != "" {
-		// Determine whether the provided -srcdirc is a directory or file
-		// and then use it to override the target.
-		//
-		// See https://github.com/dominikh/go-mode.el/issues/146
-		if isFile(*srcdir) {
-			if argType == multipleArg {
-				return errors.New("-srcdir value can't be a file when passing multiple arguments or when walking directories")
-			}
-			target = *srcdir
-		} else if argType == singleArg && strings.HasSuffix(*srcdir, ".go") && !isDir(*srcdir) {
-			// For a file which doesn't exist on disk yet, but might shortly.
-			// e.g. user in editor opens $DIR/newfile.go and newfile.go doesn't yet exist on disk.
-			// The goimports on-save hook writes the buffer to a temp file
-			// first and runs goimports before the actual save to newfile.go.
-			// The editor's buffer is named "newfile.go" so that is passed to goimports as:
-			//      goimports -srcdir=/gopath/src/pkg/newfile.go /tmp/gofmtXXXXXXXX.go
-			// and then the editor reloads the result from the tmp file and writes
-			// it to newfile.go.
-			target = *srcdir
-		} else {
-			// Pretend that file is from *srcdir in order to decide
-			// visible imports correctly.
-			target = filepath.Join(*srcdir, filepath.Base(filename))
-		}
-	}
-
-	res, err := imports.Process(target, src, opt)
-	if err != nil {
-		return err
-	}
-
-	if !bytes.Equal(src, res) {
-		// formatting has changed
-		if *list {
-			fmt.Fprintln(out, filename)
-		}
-		if *write {
-			if argType == fromStdin {
-				// filename is "<standard input>"
-				return errors.New("can't use -w on stdin")
-			}
-			// On Windows, we need to re-set the permissions from the file. See golang/go#38225.
-			var perms os.FileMode
-			if fi, err := os.Stat(filename); err == nil {
-				perms = fi.Mode() & os.ModePerm
-			}
-			err = ioutil.WriteFile(filename, res, perms)
-			if err != nil {
-				return err
-			}
-		}
-		if *doDiff {
-			if argType == fromStdin {
-				filename = "stdin.go" // because <standard input>.orig looks silly
-			}
-			data, err := diff(src, res, filename)
-			if err != nil {
-				return fmt.Errorf("computing diff: %s", err)
-			}
-			fmt.Printf("diff -u %s %s\n", filepath.ToSlash(filename+".orig"), filepath.ToSlash(filename))
-			out.Write(data)
-		}
-	}
-
-	if !*list && !*write && !*doDiff {
-		_, err = out.Write(res)
-	}
-
-	return err
-}
-
-func visitFile(path string, f os.FileInfo, err error) error {
-	if err == nil && isGoFile(f) {
-		err = processFile(path, nil, os.Stdout, multipleArg)
-	}
-	if err != nil {
-		report(err)
-	}
-	return nil
-}
-
-func walkDir(path string) {
-	filepath.Walk(path, visitFile)
-}
-
-func main() {
-	runtime.GOMAXPROCS(runtime.NumCPU())
-
-	// call gofmtMain in a separate function
-	// so that it can use defer and have them
-	// run before the exit.
-	gofmtMain()
-	os.Exit(exitCode)
-}
-
-// parseFlags parses command line flags and returns the paths to process.
-// It's a var so that custom implementations can replace it in other files.
-var parseFlags = func() []string {
-	flag.BoolVar(&verbose, "v", false, "verbose logging")
-
-	flag.Parse()
-	return flag.Args()
-}
-
-func bufferedFileWriter(dest string) (w io.Writer, close func()) {
-	f, err := os.Create(dest)
-	if err != nil {
-		log.Fatal(err)
-	}
-	bw := bufio.NewWriter(f)
-	return bw, func() {
-		if err := bw.Flush(); err != nil {
-			log.Fatalf("error flushing %v: %v", dest, err)
-		}
-		if err := f.Close(); err != nil {
-			log.Fatal(err)
-		}
-	}
-}
-
-func gofmtMain() {
-	flag.Usage = usage
-	paths := parseFlags()
-
-	if *cpuProfile != "" {
-		bw, flush := bufferedFileWriter(*cpuProfile)
-		pprof.StartCPUProfile(bw)
-		defer flush()
-		defer pprof.StopCPUProfile()
-	}
-	// doTrace is a conditionally compiled wrapper around runtime/trace. It is
-	// used to allow goimports to compile under gccgo, which does not support
-	// runtime/trace. See https://golang.org/issue/15544.
-	defer doTrace()()
-	if *memProfileRate > 0 {
-		runtime.MemProfileRate = *memProfileRate
-		bw, flush := bufferedFileWriter(*memProfile)
-		defer func() {
-			runtime.GC() // materialize all statistics
-			if err := pprof.WriteHeapProfile(bw); err != nil {
-				log.Fatal(err)
-			}
-			flush()
-		}()
-	}
-
-	if verbose {
-		log.SetFlags(log.LstdFlags | log.Lmicroseconds)
-		options.Env.Logf = log.Printf
-	}
-	if options.TabWidth < 0 {
-		fmt.Fprintf(os.Stderr, "negative tabwidth %d\n", options.TabWidth)
-		exitCode = 2
-		return
-	}
-
-	if len(paths) == 0 {
-		if err := processFile("<standard input>", os.Stdin, os.Stdout, fromStdin); err != nil {
-			report(err)
-		}
-		return
-	}
-
-	argType := singleArg
-	if len(paths) > 1 {
-		argType = multipleArg
-	}
-
-	for _, path := range paths {
-		switch dir, err := os.Stat(path); {
-		case err != nil:
-			report(err)
-		case dir.IsDir():
-			walkDir(path)
-		default:
-			if err := processFile(path, nil, os.Stdout, argType); err != nil {
-				report(err)
-			}
-		}
-	}
-}
-
-func writeTempFile(dir, prefix string, data []byte) (string, error) {
-	file, err := ioutil.TempFile(dir, prefix)
-	if err != nil {
-		return "", err
-	}
-	_, err = file.Write(data)
-	if err1 := file.Close(); err == nil {
-		err = err1
-	}
-	if err != nil {
-		os.Remove(file.Name())
-		return "", err
-	}
-	return file.Name(), nil
-}
-
-func diff(b1, b2 []byte, filename string) (data []byte, err error) {
-	f1, err := writeTempFile("", "gofmt", b1)
-	if err != nil {
-		return
-	}
-	defer os.Remove(f1)
-
-	f2, err := writeTempFile("", "gofmt", b2)
-	if err != nil {
-		return
-	}
-	defer os.Remove(f2)
-
-	cmd := "diff"
-	if runtime.GOOS == "plan9" {
-		cmd = "/bin/ape/diff"
-	}
-
-	data, err = exec.Command(cmd, "-u", f1, f2).CombinedOutput()
-	if len(data) > 0 {
-		// diff exits with a non-zero status when the files don't match.
-		// Ignore that failure as long as we get output.
-		return replaceTempFilename(data, filename)
-	}
-	return
-}
-
-// replaceTempFilename replaces temporary filenames in diff with actual one.
-//
-// --- /tmp/gofmt316145376	2017-02-03 19:13:00.280468375 -0500
-// +++ /tmp/gofmt617882815	2017-02-03 19:13:00.280468375 -0500
-// ...
-// ->
-// --- path/to/file.go.orig	2017-02-03 19:13:00.280468375 -0500
-// +++ path/to/file.go	2017-02-03 19:13:00.280468375 -0500
-// ...
-func replaceTempFilename(diff []byte, filename string) ([]byte, error) {
-	bs := bytes.SplitN(diff, []byte{'\n'}, 3)
-	if len(bs) < 3 {
-		return nil, fmt.Errorf("got unexpected diff for %s", filename)
-	}
-	// Preserve timestamps.
-	var t0, t1 []byte
-	if i := bytes.LastIndexByte(bs[0], '\t'); i != -1 {
-		t0 = bs[0][i:]
-	}
-	if i := bytes.LastIndexByte(bs[1], '\t'); i != -1 {
-		t1 = bs[1][i:]
-	}
-	// Always print filepath with slash separator.
-	f := filepath.ToSlash(filename)
-	bs[0] = []byte(fmt.Sprintf("--- %s%s", f+".orig", t0))
-	bs[1] = []byte(fmt.Sprintf("+++ %s%s", f, t1))
-	return bytes.Join(bs, []byte{'\n'}), nil
-}
-
-// isFile reports whether name is a file.
-func isFile(name string) bool {
-	fi, err := os.Stat(name)
-	return err == nil && fi.Mode().IsRegular()
-}
-
-// isDir reports whether name is a directory.
-func isDir(name string) bool {
-	fi, err := os.Stat(name)
-	return err == nil && fi.IsDir()
-}

+ 0 - 27
vendor/golang.org/x/tools/cmd/goimports/goimports_gc.go

@@ -1,27 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build gc
-// +build gc
-
-package main
-
-import (
-	"flag"
-	"runtime/trace"
-)
-
-var traceProfile = flag.String("trace", "", "trace profile output")
-
-func doTrace() func() {
-	if *traceProfile != "" {
-		bw, flush := bufferedFileWriter(*traceProfile)
-		trace.Start(bw)
-		return func() {
-			flush()
-			trace.Stop()
-		}
-	}
-	return func() {}
-}

+ 0 - 12
vendor/golang.org/x/tools/cmd/goimports/goimports_not_gc.go

@@ -1,12 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !gc
-// +build !gc
-
-package main
-
-func doTrace() func() {
-	return func() {}
-}

+ 0 - 627
vendor/golang.org/x/tools/go/ast/astutil/enclosing.go

@@ -1,627 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-// This file defines utilities for working with source positions.
-
-import (
-	"fmt"
-	"go/ast"
-	"go/token"
-	"sort"
-)
-
-// PathEnclosingInterval returns the node that encloses the source
-// interval [start, end), and all its ancestors up to the AST root.
-//
-// The definition of "enclosing" used by this function considers
-// additional whitespace abutting a node to be enclosed by it.
-// In this example:
-//
-//              z := x + y // add them
-//                   <-A->
-//                  <----B----->
-//
-// the ast.BinaryExpr(+) node is considered to enclose interval B
-// even though its [Pos()..End()) is actually only interval A.
-// This behaviour makes user interfaces more tolerant of imperfect
-// input.
-//
-// This function treats tokens as nodes, though they are not included
-// in the result. e.g. PathEnclosingInterval("+") returns the
-// enclosing ast.BinaryExpr("x + y").
-//
-// If start==end, the 1-char interval following start is used instead.
-//
-// The 'exact' result is true if the interval contains only path[0]
-// and perhaps some adjacent whitespace.  It is false if the interval
-// overlaps multiple children of path[0], or if it contains only
-// interior whitespace of path[0].
-// In this example:
-//
-//              z := x + y // add them
-//                <--C-->     <---E-->
-//                  ^
-//                  D
-//
-// intervals C, D and E are inexact.  C is contained by the
-// z-assignment statement, because it spans three of its children (:=,
-// x, +).  So too is the 1-char interval D, because it contains only
-// interior whitespace of the assignment.  E is considered interior
-// whitespace of the BlockStmt containing the assignment.
-//
-// Precondition: [start, end) both lie within the same file as root.
-// TODO(adonovan): return (nil, false) in this case and remove precond.
-// Requires FileSet; see loader.tokenFileContainsPos.
-//
-// Postcondition: path is never nil; it always contains at least 'root'.
-//
-func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Node, exact bool) {
-	// fmt.Printf("EnclosingInterval %d %d\n", start, end) // debugging
-
-	// Precondition: node.[Pos..End) and adjoining whitespace contain [start, end).
-	var visit func(node ast.Node) bool
-	visit = func(node ast.Node) bool {
-		path = append(path, node)
-
-		nodePos := node.Pos()
-		nodeEnd := node.End()
-
-		// fmt.Printf("visit(%T, %d, %d)\n", node, nodePos, nodeEnd) // debugging
-
-		// Intersect [start, end) with interval of node.
-		if start < nodePos {
-			start = nodePos
-		}
-		if end > nodeEnd {
-			end = nodeEnd
-		}
-
-		// Find sole child that contains [start, end).
-		children := childrenOf(node)
-		l := len(children)
-		for i, child := range children {
-			// [childPos, childEnd) is unaugmented interval of child.
-			childPos := child.Pos()
-			childEnd := child.End()
-
-			// [augPos, augEnd) is whitespace-augmented interval of child.
-			augPos := childPos
-			augEnd := childEnd
-			if i > 0 {
-				augPos = children[i-1].End() // start of preceding whitespace
-			}
-			if i < l-1 {
-				nextChildPos := children[i+1].Pos()
-				// Does [start, end) lie between child and next child?
-				if start >= augEnd && end <= nextChildPos {
-					return false // inexact match
-				}
-				augEnd = nextChildPos // end of following whitespace
-			}
-
-			// fmt.Printf("\tchild %d: [%d..%d)\tcontains interval [%d..%d)?\n",
-			// 	i, augPos, augEnd, start, end) // debugging
-
-			// Does augmented child strictly contain [start, end)?
-			if augPos <= start && end <= augEnd {
-				_, isToken := child.(tokenNode)
-				return isToken || visit(child)
-			}
-
-			// Does [start, end) overlap multiple children?
-			// i.e. left-augmented child contains start
-			// but LR-augmented child does not contain end.
-			if start < childEnd && end > augEnd {
-				break
-			}
-		}
-
-		// No single child contained [start, end),
-		// so node is the result.  Is it exact?
-
-		// (It's tempting to put this condition before the
-		// child loop, but it gives the wrong result in the
-		// case where a node (e.g. ExprStmt) and its sole
-		// child have equal intervals.)
-		if start == nodePos && end == nodeEnd {
-			return true // exact match
-		}
-
-		return false // inexact: overlaps multiple children
-	}
-
-	if start > end {
-		start, end = end, start
-	}
-
-	if start < root.End() && end > root.Pos() {
-		if start == end {
-			end = start + 1 // empty interval => interval of size 1
-		}
-		exact = visit(root)
-
-		// Reverse the path:
-		for i, l := 0, len(path); i < l/2; i++ {
-			path[i], path[l-1-i] = path[l-1-i], path[i]
-		}
-	} else {
-		// Selection lies within whitespace preceding the
-		// first (or following the last) declaration in the file.
-		// The result nonetheless always includes the ast.File.
-		path = append(path, root)
-	}
-
-	return
-}
-
-// tokenNode is a dummy implementation of ast.Node for a single token.
-// They are used transiently by PathEnclosingInterval but never escape
-// this package.
-//
-type tokenNode struct {
-	pos token.Pos
-	end token.Pos
-}
-
-func (n tokenNode) Pos() token.Pos {
-	return n.pos
-}
-
-func (n tokenNode) End() token.Pos {
-	return n.end
-}
-
-func tok(pos token.Pos, len int) ast.Node {
-	return tokenNode{pos, pos + token.Pos(len)}
-}
-
-// childrenOf returns the direct non-nil children of ast.Node n.
-// It may include fake ast.Node implementations for bare tokens.
-// it is not safe to call (e.g.) ast.Walk on such nodes.
-//
-func childrenOf(n ast.Node) []ast.Node {
-	var children []ast.Node
-
-	// First add nodes for all true subtrees.
-	ast.Inspect(n, func(node ast.Node) bool {
-		if node == n { // push n
-			return true // recur
-		}
-		if node != nil { // push child
-			children = append(children, node)
-		}
-		return false // no recursion
-	})
-
-	// Then add fake Nodes for bare tokens.
-	switch n := n.(type) {
-	case *ast.ArrayType:
-		children = append(children,
-			tok(n.Lbrack, len("[")),
-			tok(n.Elt.End(), len("]")))
-
-	case *ast.AssignStmt:
-		children = append(children,
-			tok(n.TokPos, len(n.Tok.String())))
-
-	case *ast.BasicLit:
-		children = append(children,
-			tok(n.ValuePos, len(n.Value)))
-
-	case *ast.BinaryExpr:
-		children = append(children, tok(n.OpPos, len(n.Op.String())))
-
-	case *ast.BlockStmt:
-		children = append(children,
-			tok(n.Lbrace, len("{")),
-			tok(n.Rbrace, len("}")))
-
-	case *ast.BranchStmt:
-		children = append(children,
-			tok(n.TokPos, len(n.Tok.String())))
-
-	case *ast.CallExpr:
-		children = append(children,
-			tok(n.Lparen, len("(")),
-			tok(n.Rparen, len(")")))
-		if n.Ellipsis != 0 {
-			children = append(children, tok(n.Ellipsis, len("...")))
-		}
-
-	case *ast.CaseClause:
-		if n.List == nil {
-			children = append(children,
-				tok(n.Case, len("default")))
-		} else {
-			children = append(children,
-				tok(n.Case, len("case")))
-		}
-		children = append(children, tok(n.Colon, len(":")))
-
-	case *ast.ChanType:
-		switch n.Dir {
-		case ast.RECV:
-			children = append(children, tok(n.Begin, len("<-chan")))
-		case ast.SEND:
-			children = append(children, tok(n.Begin, len("chan<-")))
-		case ast.RECV | ast.SEND:
-			children = append(children, tok(n.Begin, len("chan")))
-		}
-
-	case *ast.CommClause:
-		if n.Comm == nil {
-			children = append(children,
-				tok(n.Case, len("default")))
-		} else {
-			children = append(children,
-				tok(n.Case, len("case")))
-		}
-		children = append(children, tok(n.Colon, len(":")))
-
-	case *ast.Comment:
-		// nop
-
-	case *ast.CommentGroup:
-		// nop
-
-	case *ast.CompositeLit:
-		children = append(children,
-			tok(n.Lbrace, len("{")),
-			tok(n.Rbrace, len("{")))
-
-	case *ast.DeclStmt:
-		// nop
-
-	case *ast.DeferStmt:
-		children = append(children,
-			tok(n.Defer, len("defer")))
-
-	case *ast.Ellipsis:
-		children = append(children,
-			tok(n.Ellipsis, len("...")))
-
-	case *ast.EmptyStmt:
-		// nop
-
-	case *ast.ExprStmt:
-		// nop
-
-	case *ast.Field:
-		// TODO(adonovan): Field.{Doc,Comment,Tag}?
-
-	case *ast.FieldList:
-		children = append(children,
-			tok(n.Opening, len("(")),
-			tok(n.Closing, len(")")))
-
-	case *ast.File:
-		// TODO test: Doc
-		children = append(children,
-			tok(n.Package, len("package")))
-
-	case *ast.ForStmt:
-		children = append(children,
-			tok(n.For, len("for")))
-
-	case *ast.FuncDecl:
-		// TODO(adonovan): FuncDecl.Comment?
-
-		// Uniquely, FuncDecl breaks the invariant that
-		// preorder traversal yields tokens in lexical order:
-		// in fact, FuncDecl.Recv precedes FuncDecl.Type.Func.
-		//
-		// As a workaround, we inline the case for FuncType
-		// here and order things correctly.
-		//
-		children = nil // discard ast.Walk(FuncDecl) info subtrees
-		children = append(children, tok(n.Type.Func, len("func")))
-		if n.Recv != nil {
-			children = append(children, n.Recv)
-		}
-		children = append(children, n.Name)
-		if n.Type.Params != nil {
-			children = append(children, n.Type.Params)
-		}
-		if n.Type.Results != nil {
-			children = append(children, n.Type.Results)
-		}
-		if n.Body != nil {
-			children = append(children, n.Body)
-		}
-
-	case *ast.FuncLit:
-		// nop
-
-	case *ast.FuncType:
-		if n.Func != 0 {
-			children = append(children,
-				tok(n.Func, len("func")))
-		}
-
-	case *ast.GenDecl:
-		children = append(children,
-			tok(n.TokPos, len(n.Tok.String())))
-		if n.Lparen != 0 {
-			children = append(children,
-				tok(n.Lparen, len("(")),
-				tok(n.Rparen, len(")")))
-		}
-
-	case *ast.GoStmt:
-		children = append(children,
-			tok(n.Go, len("go")))
-
-	case *ast.Ident:
-		children = append(children,
-			tok(n.NamePos, len(n.Name)))
-
-	case *ast.IfStmt:
-		children = append(children,
-			tok(n.If, len("if")))
-
-	case *ast.ImportSpec:
-		// TODO(adonovan): ImportSpec.{Doc,EndPos}?
-
-	case *ast.IncDecStmt:
-		children = append(children,
-			tok(n.TokPos, len(n.Tok.String())))
-
-	case *ast.IndexExpr:
-		children = append(children,
-			tok(n.Lbrack, len("{")),
-			tok(n.Rbrack, len("}")))
-
-	case *ast.InterfaceType:
-		children = append(children,
-			tok(n.Interface, len("interface")))
-
-	case *ast.KeyValueExpr:
-		children = append(children,
-			tok(n.Colon, len(":")))
-
-	case *ast.LabeledStmt:
-		children = append(children,
-			tok(n.Colon, len(":")))
-
-	case *ast.MapType:
-		children = append(children,
-			tok(n.Map, len("map")))
-
-	case *ast.ParenExpr:
-		children = append(children,
-			tok(n.Lparen, len("(")),
-			tok(n.Rparen, len(")")))
-
-	case *ast.RangeStmt:
-		children = append(children,
-			tok(n.For, len("for")),
-			tok(n.TokPos, len(n.Tok.String())))
-
-	case *ast.ReturnStmt:
-		children = append(children,
-			tok(n.Return, len("return")))
-
-	case *ast.SelectStmt:
-		children = append(children,
-			tok(n.Select, len("select")))
-
-	case *ast.SelectorExpr:
-		// nop
-
-	case *ast.SendStmt:
-		children = append(children,
-			tok(n.Arrow, len("<-")))
-
-	case *ast.SliceExpr:
-		children = append(children,
-			tok(n.Lbrack, len("[")),
-			tok(n.Rbrack, len("]")))
-
-	case *ast.StarExpr:
-		children = append(children, tok(n.Star, len("*")))
-
-	case *ast.StructType:
-		children = append(children, tok(n.Struct, len("struct")))
-
-	case *ast.SwitchStmt:
-		children = append(children, tok(n.Switch, len("switch")))
-
-	case *ast.TypeAssertExpr:
-		children = append(children,
-			tok(n.Lparen-1, len(".")),
-			tok(n.Lparen, len("(")),
-			tok(n.Rparen, len(")")))
-
-	case *ast.TypeSpec:
-		// TODO(adonovan): TypeSpec.{Doc,Comment}?
-
-	case *ast.TypeSwitchStmt:
-		children = append(children, tok(n.Switch, len("switch")))
-
-	case *ast.UnaryExpr:
-		children = append(children, tok(n.OpPos, len(n.Op.String())))
-
-	case *ast.ValueSpec:
-		// TODO(adonovan): ValueSpec.{Doc,Comment}?
-
-	case *ast.BadDecl, *ast.BadExpr, *ast.BadStmt:
-		// nop
-	}
-
-	// TODO(adonovan): opt: merge the logic of ast.Inspect() into
-	// the switch above so we can make interleaved callbacks for
-	// both Nodes and Tokens in the right order and avoid the need
-	// to sort.
-	sort.Sort(byPos(children))
-
-	return children
-}
-
-type byPos []ast.Node
-
-func (sl byPos) Len() int {
-	return len(sl)
-}
-func (sl byPos) Less(i, j int) bool {
-	return sl[i].Pos() < sl[j].Pos()
-}
-func (sl byPos) Swap(i, j int) {
-	sl[i], sl[j] = sl[j], sl[i]
-}
-
-// NodeDescription returns a description of the concrete type of n suitable
-// for a user interface.
-//
-// TODO(adonovan): in some cases (e.g. Field, FieldList, Ident,
-// StarExpr) we could be much more specific given the path to the AST
-// root.  Perhaps we should do that.
-//
-func NodeDescription(n ast.Node) string {
-	switch n := n.(type) {
-	case *ast.ArrayType:
-		return "array type"
-	case *ast.AssignStmt:
-		return "assignment"
-	case *ast.BadDecl:
-		return "bad declaration"
-	case *ast.BadExpr:
-		return "bad expression"
-	case *ast.BadStmt:
-		return "bad statement"
-	case *ast.BasicLit:
-		return "basic literal"
-	case *ast.BinaryExpr:
-		return fmt.Sprintf("binary %s operation", n.Op)
-	case *ast.BlockStmt:
-		return "block"
-	case *ast.BranchStmt:
-		switch n.Tok {
-		case token.BREAK:
-			return "break statement"
-		case token.CONTINUE:
-			return "continue statement"
-		case token.GOTO:
-			return "goto statement"
-		case token.FALLTHROUGH:
-			return "fall-through statement"
-		}
-	case *ast.CallExpr:
-		if len(n.Args) == 1 && !n.Ellipsis.IsValid() {
-			return "function call (or conversion)"
-		}
-		return "function call"
-	case *ast.CaseClause:
-		return "case clause"
-	case *ast.ChanType:
-		return "channel type"
-	case *ast.CommClause:
-		return "communication clause"
-	case *ast.Comment:
-		return "comment"
-	case *ast.CommentGroup:
-		return "comment group"
-	case *ast.CompositeLit:
-		return "composite literal"
-	case *ast.DeclStmt:
-		return NodeDescription(n.Decl) + " statement"
-	case *ast.DeferStmt:
-		return "defer statement"
-	case *ast.Ellipsis:
-		return "ellipsis"
-	case *ast.EmptyStmt:
-		return "empty statement"
-	case *ast.ExprStmt:
-		return "expression statement"
-	case *ast.Field:
-		// Can be any of these:
-		// struct {x, y int}  -- struct field(s)
-		// struct {T}         -- anon struct field
-		// interface {I}      -- interface embedding
-		// interface {f()}    -- interface method
-		// func (A) func(B) C -- receiver, param(s), result(s)
-		return "field/method/parameter"
-	case *ast.FieldList:
-		return "field/method/parameter list"
-	case *ast.File:
-		return "source file"
-	case *ast.ForStmt:
-		return "for loop"
-	case *ast.FuncDecl:
-		return "function declaration"
-	case *ast.FuncLit:
-		return "function literal"
-	case *ast.FuncType:
-		return "function type"
-	case *ast.GenDecl:
-		switch n.Tok {
-		case token.IMPORT:
-			return "import declaration"
-		case token.CONST:
-			return "constant declaration"
-		case token.TYPE:
-			return "type declaration"
-		case token.VAR:
-			return "variable declaration"
-		}
-	case *ast.GoStmt:
-		return "go statement"
-	case *ast.Ident:
-		return "identifier"
-	case *ast.IfStmt:
-		return "if statement"
-	case *ast.ImportSpec:
-		return "import specification"
-	case *ast.IncDecStmt:
-		if n.Tok == token.INC {
-			return "increment statement"
-		}
-		return "decrement statement"
-	case *ast.IndexExpr:
-		return "index expression"
-	case *ast.InterfaceType:
-		return "interface type"
-	case *ast.KeyValueExpr:
-		return "key/value association"
-	case *ast.LabeledStmt:
-		return "statement label"
-	case *ast.MapType:
-		return "map type"
-	case *ast.Package:
-		return "package"
-	case *ast.ParenExpr:
-		return "parenthesized " + NodeDescription(n.X)
-	case *ast.RangeStmt:
-		return "range loop"
-	case *ast.ReturnStmt:
-		return "return statement"
-	case *ast.SelectStmt:
-		return "select statement"
-	case *ast.SelectorExpr:
-		return "selector"
-	case *ast.SendStmt:
-		return "channel send"
-	case *ast.SliceExpr:
-		return "slice expression"
-	case *ast.StarExpr:
-		return "*-operation" // load/store expr or pointer type
-	case *ast.StructType:
-		return "struct type"
-	case *ast.SwitchStmt:
-		return "switch statement"
-	case *ast.TypeAssertExpr:
-		return "type assertion"
-	case *ast.TypeSpec:
-		return "type specification"
-	case *ast.TypeSwitchStmt:
-		return "type switch"
-	case *ast.UnaryExpr:
-		return fmt.Sprintf("unary %s operation", n.Op)
-	case *ast.ValueSpec:
-		return "value specification"
-
-	}
-	panic(fmt.Sprintf("unexpected node type: %T", n))
-}

+ 0 - 482
vendor/golang.org/x/tools/go/ast/astutil/imports.go

@@ -1,482 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package astutil contains common utilities for working with the Go AST.
-package astutil // import "golang.org/x/tools/go/ast/astutil"
-
-import (
-	"fmt"
-	"go/ast"
-	"go/token"
-	"strconv"
-	"strings"
-)
-
-// AddImport adds the import path to the file f, if absent.
-func AddImport(fset *token.FileSet, f *ast.File, path string) (added bool) {
-	return AddNamedImport(fset, f, "", path)
-}
-
-// AddNamedImport adds the import with the given name and path to the file f, if absent.
-// If name is not empty, it is used to rename the import.
-//
-// For example, calling
-//	AddNamedImport(fset, f, "pathpkg", "path")
-// adds
-//	import pathpkg "path"
-func AddNamedImport(fset *token.FileSet, f *ast.File, name, path string) (added bool) {
-	if imports(f, name, path) {
-		return false
-	}
-
-	newImport := &ast.ImportSpec{
-		Path: &ast.BasicLit{
-			Kind:  token.STRING,
-			Value: strconv.Quote(path),
-		},
-	}
-	if name != "" {
-		newImport.Name = &ast.Ident{Name: name}
-	}
-
-	// Find an import decl to add to.
-	// The goal is to find an existing import
-	// whose import path has the longest shared
-	// prefix with path.
-	var (
-		bestMatch  = -1         // length of longest shared prefix
-		lastImport = -1         // index in f.Decls of the file's final import decl
-		impDecl    *ast.GenDecl // import decl containing the best match
-		impIndex   = -1         // spec index in impDecl containing the best match
-
-		isThirdPartyPath = isThirdParty(path)
-	)
-	for i, decl := range f.Decls {
-		gen, ok := decl.(*ast.GenDecl)
-		if ok && gen.Tok == token.IMPORT {
-			lastImport = i
-			// Do not add to import "C", to avoid disrupting the
-			// association with its doc comment, breaking cgo.
-			if declImports(gen, "C") {
-				continue
-			}
-
-			// Match an empty import decl if that's all that is available.
-			if len(gen.Specs) == 0 && bestMatch == -1 {
-				impDecl = gen
-			}
-
-			// Compute longest shared prefix with imports in this group and find best
-			// matched import spec.
-			// 1. Always prefer import spec with longest shared prefix.
-			// 2. While match length is 0,
-			// - for stdlib package: prefer first import spec.
-			// - for third party package: prefer first third party import spec.
-			// We cannot use last import spec as best match for third party package
-			// because grouped imports are usually placed last by goimports -local
-			// flag.
-			// See issue #19190.
-			seenAnyThirdParty := false
-			for j, spec := range gen.Specs {
-				impspec := spec.(*ast.ImportSpec)
-				p := importPath(impspec)
-				n := matchLen(p, path)
-				if n > bestMatch || (bestMatch == 0 && !seenAnyThirdParty && isThirdPartyPath) {
-					bestMatch = n
-					impDecl = gen
-					impIndex = j
-				}
-				seenAnyThirdParty = seenAnyThirdParty || isThirdParty(p)
-			}
-		}
-	}
-
-	// If no import decl found, add one after the last import.
-	if impDecl == nil {
-		impDecl = &ast.GenDecl{
-			Tok: token.IMPORT,
-		}
-		if lastImport >= 0 {
-			impDecl.TokPos = f.Decls[lastImport].End()
-		} else {
-			// There are no existing imports.
-			// Our new import, preceded by a blank line,  goes after the package declaration
-			// and after the comment, if any, that starts on the same line as the
-			// package declaration.
-			impDecl.TokPos = f.Package
-
-			file := fset.File(f.Package)
-			pkgLine := file.Line(f.Package)
-			for _, c := range f.Comments {
-				if file.Line(c.Pos()) > pkgLine {
-					break
-				}
-				// +2 for a blank line
-				impDecl.TokPos = c.End() + 2
-			}
-		}
-		f.Decls = append(f.Decls, nil)
-		copy(f.Decls[lastImport+2:], f.Decls[lastImport+1:])
-		f.Decls[lastImport+1] = impDecl
-	}
-
-	// Insert new import at insertAt.
-	insertAt := 0
-	if impIndex >= 0 {
-		// insert after the found import
-		insertAt = impIndex + 1
-	}
-	impDecl.Specs = append(impDecl.Specs, nil)
-	copy(impDecl.Specs[insertAt+1:], impDecl.Specs[insertAt:])
-	impDecl.Specs[insertAt] = newImport
-	pos := impDecl.Pos()
-	if insertAt > 0 {
-		// If there is a comment after an existing import, preserve the comment
-		// position by adding the new import after the comment.
-		if spec, ok := impDecl.Specs[insertAt-1].(*ast.ImportSpec); ok && spec.Comment != nil {
-			pos = spec.Comment.End()
-		} else {
-			// Assign same position as the previous import,
-			// so that the sorter sees it as being in the same block.
-			pos = impDecl.Specs[insertAt-1].Pos()
-		}
-	}
-	if newImport.Name != nil {
-		newImport.Name.NamePos = pos
-	}
-	newImport.Path.ValuePos = pos
-	newImport.EndPos = pos
-
-	// Clean up parens. impDecl contains at least one spec.
-	if len(impDecl.Specs) == 1 {
-		// Remove unneeded parens.
-		impDecl.Lparen = token.NoPos
-	} else if !impDecl.Lparen.IsValid() {
-		// impDecl needs parens added.
-		impDecl.Lparen = impDecl.Specs[0].Pos()
-	}
-
-	f.Imports = append(f.Imports, newImport)
-
-	if len(f.Decls) <= 1 {
-		return true
-	}
-
-	// Merge all the import declarations into the first one.
-	var first *ast.GenDecl
-	for i := 0; i < len(f.Decls); i++ {
-		decl := f.Decls[i]
-		gen, ok := decl.(*ast.GenDecl)
-		if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") {
-			continue
-		}
-		if first == nil {
-			first = gen
-			continue // Don't touch the first one.
-		}
-		// We now know there is more than one package in this import
-		// declaration. Ensure that it ends up parenthesized.
-		first.Lparen = first.Pos()
-		// Move the imports of the other import declaration to the first one.
-		for _, spec := range gen.Specs {
-			spec.(*ast.ImportSpec).Path.ValuePos = first.Pos()
-			first.Specs = append(first.Specs, spec)
-		}
-		f.Decls = append(f.Decls[:i], f.Decls[i+1:]...)
-		i--
-	}
-
-	return true
-}
-
-func isThirdParty(importPath string) bool {
-	// Third party package import path usually contains "." (".com", ".org", ...)
-	// This logic is taken from golang.org/x/tools/imports package.
-	return strings.Contains(importPath, ".")
-}
-
-// DeleteImport deletes the import path from the file f, if present.
-// If there are duplicate import declarations, all matching ones are deleted.
-func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool) {
-	return DeleteNamedImport(fset, f, "", path)
-}
-
-// DeleteNamedImport deletes the import with the given name and path from the file f, if present.
-// If there are duplicate import declarations, all matching ones are deleted.
-func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) {
-	var delspecs []*ast.ImportSpec
-	var delcomments []*ast.CommentGroup
-
-	// Find the import nodes that import path, if any.
-	for i := 0; i < len(f.Decls); i++ {
-		decl := f.Decls[i]
-		gen, ok := decl.(*ast.GenDecl)
-		if !ok || gen.Tok != token.IMPORT {
-			continue
-		}
-		for j := 0; j < len(gen.Specs); j++ {
-			spec := gen.Specs[j]
-			impspec := spec.(*ast.ImportSpec)
-			if importName(impspec) != name || importPath(impspec) != path {
-				continue
-			}
-
-			// We found an import spec that imports path.
-			// Delete it.
-			delspecs = append(delspecs, impspec)
-			deleted = true
-			copy(gen.Specs[j:], gen.Specs[j+1:])
-			gen.Specs = gen.Specs[:len(gen.Specs)-1]
-
-			// If this was the last import spec in this decl,
-			// delete the decl, too.
-			if len(gen.Specs) == 0 {
-				copy(f.Decls[i:], f.Decls[i+1:])
-				f.Decls = f.Decls[:len(f.Decls)-1]
-				i--
-				break
-			} else if len(gen.Specs) == 1 {
-				if impspec.Doc != nil {
-					delcomments = append(delcomments, impspec.Doc)
-				}
-				if impspec.Comment != nil {
-					delcomments = append(delcomments, impspec.Comment)
-				}
-				for _, cg := range f.Comments {
-					// Found comment on the same line as the import spec.
-					if cg.End() < impspec.Pos() && fset.Position(cg.End()).Line == fset.Position(impspec.Pos()).Line {
-						delcomments = append(delcomments, cg)
-						break
-					}
-				}
-
-				spec := gen.Specs[0].(*ast.ImportSpec)
-
-				// Move the documentation right after the import decl.
-				if spec.Doc != nil {
-					for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Doc.Pos()).Line {
-						fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line)
-					}
-				}
-				for _, cg := range f.Comments {
-					if cg.End() < spec.Pos() && fset.Position(cg.End()).Line == fset.Position(spec.Pos()).Line {
-						for fset.Position(gen.TokPos).Line+1 < fset.Position(spec.Pos()).Line {
-							fset.File(gen.TokPos).MergeLine(fset.Position(gen.TokPos).Line)
-						}
-						break
-					}
-				}
-			}
-			if j > 0 {
-				lastImpspec := gen.Specs[j-1].(*ast.ImportSpec)
-				lastLine := fset.Position(lastImpspec.Path.ValuePos).Line
-				line := fset.Position(impspec.Path.ValuePos).Line
-
-				// We deleted an entry but now there may be
-				// a blank line-sized hole where the import was.
-				if line-lastLine > 1 || !gen.Rparen.IsValid() {
-					// There was a blank line immediately preceding the deleted import,
-					// so there's no need to close the hole. The right parenthesis is
-					// invalid after AddImport to an import statement without parenthesis.
-					// Do nothing.
-				} else if line != fset.File(gen.Rparen).LineCount() {
-					// There was no blank line. Close the hole.
-					fset.File(gen.Rparen).MergeLine(line)
-				}
-			}
-			j--
-		}
-	}
-
-	// Delete imports from f.Imports.
-	for i := 0; i < len(f.Imports); i++ {
-		imp := f.Imports[i]
-		for j, del := range delspecs {
-			if imp == del {
-				copy(f.Imports[i:], f.Imports[i+1:])
-				f.Imports = f.Imports[:len(f.Imports)-1]
-				copy(delspecs[j:], delspecs[j+1:])
-				delspecs = delspecs[:len(delspecs)-1]
-				i--
-				break
-			}
-		}
-	}
-
-	// Delete comments from f.Comments.
-	for i := 0; i < len(f.Comments); i++ {
-		cg := f.Comments[i]
-		for j, del := range delcomments {
-			if cg == del {
-				copy(f.Comments[i:], f.Comments[i+1:])
-				f.Comments = f.Comments[:len(f.Comments)-1]
-				copy(delcomments[j:], delcomments[j+1:])
-				delcomments = delcomments[:len(delcomments)-1]
-				i--
-				break
-			}
-		}
-	}
-
-	if len(delspecs) > 0 {
-		panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs))
-	}
-
-	return
-}
-
-// RewriteImport rewrites any import of path oldPath to path newPath.
-func RewriteImport(fset *token.FileSet, f *ast.File, oldPath, newPath string) (rewrote bool) {
-	for _, imp := range f.Imports {
-		if importPath(imp) == oldPath {
-			rewrote = true
-			// record old End, because the default is to compute
-			// it using the length of imp.Path.Value.
-			imp.EndPos = imp.End()
-			imp.Path.Value = strconv.Quote(newPath)
-		}
-	}
-	return
-}
-
-// UsesImport reports whether a given import is used.
-func UsesImport(f *ast.File, path string) (used bool) {
-	spec := importSpec(f, path)
-	if spec == nil {
-		return
-	}
-
-	name := spec.Name.String()
-	switch name {
-	case "<nil>":
-		// If the package name is not explicitly specified,
-		// make an educated guess. This is not guaranteed to be correct.
-		lastSlash := strings.LastIndex(path, "/")
-		if lastSlash == -1 {
-			name = path
-		} else {
-			name = path[lastSlash+1:]
-		}
-	case "_", ".":
-		// Not sure if this import is used - err on the side of caution.
-		return true
-	}
-
-	ast.Walk(visitFn(func(n ast.Node) {
-		sel, ok := n.(*ast.SelectorExpr)
-		if ok && isTopName(sel.X, name) {
-			used = true
-		}
-	}), f)
-
-	return
-}
-
-type visitFn func(node ast.Node)
-
-func (fn visitFn) Visit(node ast.Node) ast.Visitor {
-	fn(node)
-	return fn
-}
-
-// imports reports whether f has an import with the specified name and path.
-func imports(f *ast.File, name, path string) bool {
-	for _, s := range f.Imports {
-		if importName(s) == name && importPath(s) == path {
-			return true
-		}
-	}
-	return false
-}
-
-// importSpec returns the import spec if f imports path,
-// or nil otherwise.
-func importSpec(f *ast.File, path string) *ast.ImportSpec {
-	for _, s := range f.Imports {
-		if importPath(s) == path {
-			return s
-		}
-	}
-	return nil
-}
-
-// importName returns the name of s,
-// or "" if the import is not named.
-func importName(s *ast.ImportSpec) string {
-	if s.Name == nil {
-		return ""
-	}
-	return s.Name.Name
-}
-
-// importPath returns the unquoted import path of s,
-// or "" if the path is not properly quoted.
-func importPath(s *ast.ImportSpec) string {
-	t, err := strconv.Unquote(s.Path.Value)
-	if err != nil {
-		return ""
-	}
-	return t
-}
-
-// declImports reports whether gen contains an import of path.
-func declImports(gen *ast.GenDecl, path string) bool {
-	if gen.Tok != token.IMPORT {
-		return false
-	}
-	for _, spec := range gen.Specs {
-		impspec := spec.(*ast.ImportSpec)
-		if importPath(impspec) == path {
-			return true
-		}
-	}
-	return false
-}
-
-// matchLen returns the length of the longest path segment prefix shared by x and y.
-func matchLen(x, y string) int {
-	n := 0
-	for i := 0; i < len(x) && i < len(y) && x[i] == y[i]; i++ {
-		if x[i] == '/' {
-			n++
-		}
-	}
-	return n
-}
-
-// isTopName returns true if n is a top-level unresolved identifier with the given name.
-func isTopName(n ast.Expr, name string) bool {
-	id, ok := n.(*ast.Ident)
-	return ok && id.Name == name && id.Obj == nil
-}
-
-// Imports returns the file imports grouped by paragraph.
-func Imports(fset *token.FileSet, f *ast.File) [][]*ast.ImportSpec {
-	var groups [][]*ast.ImportSpec
-
-	for _, decl := range f.Decls {
-		genDecl, ok := decl.(*ast.GenDecl)
-		if !ok || genDecl.Tok != token.IMPORT {
-			break
-		}
-
-		group := []*ast.ImportSpec{}
-
-		var lastLine int
-		for _, spec := range genDecl.Specs {
-			importSpec := spec.(*ast.ImportSpec)
-			pos := importSpec.Path.ValuePos
-			line := fset.Position(pos).Line
-			if lastLine > 0 && pos > 0 && line-lastLine > 1 {
-				groups = append(groups, group)
-				group = []*ast.ImportSpec{}
-			}
-			group = append(group, importSpec)
-			lastLine = line
-		}
-		groups = append(groups, group)
-	}
-
-	return groups
-}

+ 0 - 483
vendor/golang.org/x/tools/go/ast/astutil/rewrite.go

@@ -1,483 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-import (
-	"fmt"
-	"go/ast"
-	"reflect"
-	"sort"
-
-	"golang.org/x/tools/internal/typeparams"
-)
-
-// An ApplyFunc is invoked by Apply for each node n, even if n is nil,
-// before and/or after the node's children, using a Cursor describing
-// the current node and providing operations on it.
-//
-// The return value of ApplyFunc controls the syntax tree traversal.
-// See Apply for details.
-type ApplyFunc func(*Cursor) bool
-
-// Apply traverses a syntax tree recursively, starting with root,
-// and calling pre and post for each node as described below.
-// Apply returns the syntax tree, possibly modified.
-//
-// If pre is not nil, it is called for each node before the node's
-// children are traversed (pre-order). If pre returns false, no
-// children are traversed, and post is not called for that node.
-//
-// If post is not nil, and a prior call of pre didn't return false,
-// post is called for each node after its children are traversed
-// (post-order). If post returns false, traversal is terminated and
-// Apply returns immediately.
-//
-// Only fields that refer to AST nodes are considered children;
-// i.e., token.Pos, Scopes, Objects, and fields of basic types
-// (strings, etc.) are ignored.
-//
-// Children are traversed in the order in which they appear in the
-// respective node's struct definition. A package's files are
-// traversed in the filenames' alphabetical order.
-//
-func Apply(root ast.Node, pre, post ApplyFunc) (result ast.Node) {
-	parent := &struct{ ast.Node }{root}
-	defer func() {
-		if r := recover(); r != nil && r != abort {
-			panic(r)
-		}
-		result = parent.Node
-	}()
-	a := &application{pre: pre, post: post}
-	a.apply(parent, "Node", nil, root)
-	return
-}
-
-var abort = new(int) // singleton, to signal termination of Apply
-
-// A Cursor describes a node encountered during Apply.
-// Information about the node and its parent is available
-// from the Node, Parent, Name, and Index methods.
-//
-// If p is a variable of type and value of the current parent node
-// c.Parent(), and f is the field identifier with name c.Name(),
-// the following invariants hold:
-//
-//   p.f            == c.Node()  if c.Index() <  0
-//   p.f[c.Index()] == c.Node()  if c.Index() >= 0
-//
-// The methods Replace, Delete, InsertBefore, and InsertAfter
-// can be used to change the AST without disrupting Apply.
-type Cursor struct {
-	parent ast.Node
-	name   string
-	iter   *iterator // valid if non-nil
-	node   ast.Node
-}
-
-// Node returns the current Node.
-func (c *Cursor) Node() ast.Node { return c.node }
-
-// Parent returns the parent of the current Node.
-func (c *Cursor) Parent() ast.Node { return c.parent }
-
-// Name returns the name of the parent Node field that contains the current Node.
-// If the parent is a *ast.Package and the current Node is a *ast.File, Name returns
-// the filename for the current Node.
-func (c *Cursor) Name() string { return c.name }
-
-// Index reports the index >= 0 of the current Node in the slice of Nodes that
-// contains it, or a value < 0 if the current Node is not part of a slice.
-// The index of the current node changes if InsertBefore is called while
-// processing the current node.
-func (c *Cursor) Index() int {
-	if c.iter != nil {
-		return c.iter.index
-	}
-	return -1
-}
-
-// field returns the current node's parent field value.
-func (c *Cursor) field() reflect.Value {
-	return reflect.Indirect(reflect.ValueOf(c.parent)).FieldByName(c.name)
-}
-
-// Replace replaces the current Node with n.
-// The replacement node is not walked by Apply.
-func (c *Cursor) Replace(n ast.Node) {
-	if _, ok := c.node.(*ast.File); ok {
-		file, ok := n.(*ast.File)
-		if !ok {
-			panic("attempt to replace *ast.File with non-*ast.File")
-		}
-		c.parent.(*ast.Package).Files[c.name] = file
-		return
-	}
-
-	v := c.field()
-	if i := c.Index(); i >= 0 {
-		v = v.Index(i)
-	}
-	v.Set(reflect.ValueOf(n))
-}
-
-// Delete deletes the current Node from its containing slice.
-// If the current Node is not part of a slice, Delete panics.
-// As a special case, if the current node is a package file,
-// Delete removes it from the package's Files map.
-func (c *Cursor) Delete() {
-	if _, ok := c.node.(*ast.File); ok {
-		delete(c.parent.(*ast.Package).Files, c.name)
-		return
-	}
-
-	i := c.Index()
-	if i < 0 {
-		panic("Delete node not contained in slice")
-	}
-	v := c.field()
-	l := v.Len()
-	reflect.Copy(v.Slice(i, l), v.Slice(i+1, l))
-	v.Index(l - 1).Set(reflect.Zero(v.Type().Elem()))
-	v.SetLen(l - 1)
-	c.iter.step--
-}
-
-// InsertAfter inserts n after the current Node in its containing slice.
-// If the current Node is not part of a slice, InsertAfter panics.
-// Apply does not walk n.
-func (c *Cursor) InsertAfter(n ast.Node) {
-	i := c.Index()
-	if i < 0 {
-		panic("InsertAfter node not contained in slice")
-	}
-	v := c.field()
-	v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem())))
-	l := v.Len()
-	reflect.Copy(v.Slice(i+2, l), v.Slice(i+1, l))
-	v.Index(i + 1).Set(reflect.ValueOf(n))
-	c.iter.step++
-}
-
-// InsertBefore inserts n before the current Node in its containing slice.
-// If the current Node is not part of a slice, InsertBefore panics.
-// Apply will not walk n.
-func (c *Cursor) InsertBefore(n ast.Node) {
-	i := c.Index()
-	if i < 0 {
-		panic("InsertBefore node not contained in slice")
-	}
-	v := c.field()
-	v.Set(reflect.Append(v, reflect.Zero(v.Type().Elem())))
-	l := v.Len()
-	reflect.Copy(v.Slice(i+1, l), v.Slice(i, l))
-	v.Index(i).Set(reflect.ValueOf(n))
-	c.iter.index++
-}
-
-// application carries all the shared data so we can pass it around cheaply.
-type application struct {
-	pre, post ApplyFunc
-	cursor    Cursor
-	iter      iterator
-}
-
-func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast.Node) {
-	// convert typed nil into untyped nil
-	if v := reflect.ValueOf(n); v.Kind() == reflect.Ptr && v.IsNil() {
-		n = nil
-	}
-
-	// avoid heap-allocating a new cursor for each apply call; reuse a.cursor instead
-	saved := a.cursor
-	a.cursor.parent = parent
-	a.cursor.name = name
-	a.cursor.iter = iter
-	a.cursor.node = n
-
-	if a.pre != nil && !a.pre(&a.cursor) {
-		a.cursor = saved
-		return
-	}
-
-	// walk children
-	// (the order of the cases matches the order of the corresponding node types in go/ast)
-	switch n := n.(type) {
-	case nil:
-		// nothing to do
-
-	// Comments and fields
-	case *ast.Comment:
-		// nothing to do
-
-	case *ast.CommentGroup:
-		if n != nil {
-			a.applyList(n, "List")
-		}
-
-	case *ast.Field:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.applyList(n, "Names")
-		a.apply(n, "Type", nil, n.Type)
-		a.apply(n, "Tag", nil, n.Tag)
-		a.apply(n, "Comment", nil, n.Comment)
-
-	case *ast.FieldList:
-		a.applyList(n, "List")
-
-	// Expressions
-	case *ast.BadExpr, *ast.Ident, *ast.BasicLit:
-		// nothing to do
-
-	case *ast.Ellipsis:
-		a.apply(n, "Elt", nil, n.Elt)
-
-	case *ast.FuncLit:
-		a.apply(n, "Type", nil, n.Type)
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.CompositeLit:
-		a.apply(n, "Type", nil, n.Type)
-		a.applyList(n, "Elts")
-
-	case *ast.ParenExpr:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.SelectorExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Sel", nil, n.Sel)
-
-	case *ast.IndexExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Index", nil, n.Index)
-
-	case *ast.SliceExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Low", nil, n.Low)
-		a.apply(n, "High", nil, n.High)
-		a.apply(n, "Max", nil, n.Max)
-
-	case *ast.TypeAssertExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Type", nil, n.Type)
-
-	case *ast.CallExpr:
-		a.apply(n, "Fun", nil, n.Fun)
-		a.applyList(n, "Args")
-
-	case *ast.StarExpr:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.UnaryExpr:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.BinaryExpr:
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Y", nil, n.Y)
-
-	case *ast.KeyValueExpr:
-		a.apply(n, "Key", nil, n.Key)
-		a.apply(n, "Value", nil, n.Value)
-
-	// Types
-	case *ast.ArrayType:
-		a.apply(n, "Len", nil, n.Len)
-		a.apply(n, "Elt", nil, n.Elt)
-
-	case *ast.StructType:
-		a.apply(n, "Fields", nil, n.Fields)
-
-	case *ast.FuncType:
-		a.apply(n, "Params", nil, n.Params)
-		a.apply(n, "Results", nil, n.Results)
-
-	case *ast.InterfaceType:
-		a.apply(n, "Methods", nil, n.Methods)
-
-	case *ast.MapType:
-		a.apply(n, "Key", nil, n.Key)
-		a.apply(n, "Value", nil, n.Value)
-
-	case *ast.ChanType:
-		a.apply(n, "Value", nil, n.Value)
-
-	// Statements
-	case *ast.BadStmt:
-		// nothing to do
-
-	case *ast.DeclStmt:
-		a.apply(n, "Decl", nil, n.Decl)
-
-	case *ast.EmptyStmt:
-		// nothing to do
-
-	case *ast.LabeledStmt:
-		a.apply(n, "Label", nil, n.Label)
-		a.apply(n, "Stmt", nil, n.Stmt)
-
-	case *ast.ExprStmt:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.SendStmt:
-		a.apply(n, "Chan", nil, n.Chan)
-		a.apply(n, "Value", nil, n.Value)
-
-	case *ast.IncDecStmt:
-		a.apply(n, "X", nil, n.X)
-
-	case *ast.AssignStmt:
-		a.applyList(n, "Lhs")
-		a.applyList(n, "Rhs")
-
-	case *ast.GoStmt:
-		a.apply(n, "Call", nil, n.Call)
-
-	case *ast.DeferStmt:
-		a.apply(n, "Call", nil, n.Call)
-
-	case *ast.ReturnStmt:
-		a.applyList(n, "Results")
-
-	case *ast.BranchStmt:
-		a.apply(n, "Label", nil, n.Label)
-
-	case *ast.BlockStmt:
-		a.applyList(n, "List")
-
-	case *ast.IfStmt:
-		a.apply(n, "Init", nil, n.Init)
-		a.apply(n, "Cond", nil, n.Cond)
-		a.apply(n, "Body", nil, n.Body)
-		a.apply(n, "Else", nil, n.Else)
-
-	case *ast.CaseClause:
-		a.applyList(n, "List")
-		a.applyList(n, "Body")
-
-	case *ast.SwitchStmt:
-		a.apply(n, "Init", nil, n.Init)
-		a.apply(n, "Tag", nil, n.Tag)
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.TypeSwitchStmt:
-		a.apply(n, "Init", nil, n.Init)
-		a.apply(n, "Assign", nil, n.Assign)
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.CommClause:
-		a.apply(n, "Comm", nil, n.Comm)
-		a.applyList(n, "Body")
-
-	case *ast.SelectStmt:
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.ForStmt:
-		a.apply(n, "Init", nil, n.Init)
-		a.apply(n, "Cond", nil, n.Cond)
-		a.apply(n, "Post", nil, n.Post)
-		a.apply(n, "Body", nil, n.Body)
-
-	case *ast.RangeStmt:
-		a.apply(n, "Key", nil, n.Key)
-		a.apply(n, "Value", nil, n.Value)
-		a.apply(n, "X", nil, n.X)
-		a.apply(n, "Body", nil, n.Body)
-
-	// Declarations
-	case *ast.ImportSpec:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.apply(n, "Name", nil, n.Name)
-		a.apply(n, "Path", nil, n.Path)
-		a.apply(n, "Comment", nil, n.Comment)
-
-	case *ast.ValueSpec:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.applyList(n, "Names")
-		a.apply(n, "Type", nil, n.Type)
-		a.applyList(n, "Values")
-		a.apply(n, "Comment", nil, n.Comment)
-
-	case *ast.TypeSpec:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.apply(n, "Name", nil, n.Name)
-		a.apply(n, "Type", nil, n.Type)
-		a.apply(n, "Comment", nil, n.Comment)
-
-	case *ast.BadDecl:
-		// nothing to do
-
-	case *ast.GenDecl:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.applyList(n, "Specs")
-
-	case *ast.FuncDecl:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.apply(n, "Recv", nil, n.Recv)
-		a.apply(n, "Name", nil, n.Name)
-		a.apply(n, "Type", nil, n.Type)
-		a.apply(n, "Body", nil, n.Body)
-
-	// Files and packages
-	case *ast.File:
-		a.apply(n, "Doc", nil, n.Doc)
-		a.apply(n, "Name", nil, n.Name)
-		a.applyList(n, "Decls")
-		// Don't walk n.Comments; they have either been walked already if
-		// they are Doc comments, or they can be easily walked explicitly.
-
-	case *ast.Package:
-		// collect and sort names for reproducible behavior
-		var names []string
-		for name := range n.Files {
-			names = append(names, name)
-		}
-		sort.Strings(names)
-		for _, name := range names {
-			a.apply(n, name, nil, n.Files[name])
-		}
-
-	default:
-		if typeparams.IsListExpr(n) {
-			a.applyList(n, "ElemList")
-		} else {
-			panic(fmt.Sprintf("Apply: unexpected node type %T", n))
-		}
-	}
-
-	if a.post != nil && !a.post(&a.cursor) {
-		panic(abort)
-	}
-
-	a.cursor = saved
-}
-
-// An iterator controls iteration over a slice of nodes.
-type iterator struct {
-	index, step int
-}
-
-func (a *application) applyList(parent ast.Node, name string) {
-	// avoid heap-allocating a new iterator for each applyList call; reuse a.iter instead
-	saved := a.iter
-	a.iter.index = 0
-	for {
-		// must reload parent.name each time, since cursor modifications might change it
-		v := reflect.Indirect(reflect.ValueOf(parent)).FieldByName(name)
-		if a.iter.index >= v.Len() {
-			break
-		}
-
-		// element x may be nil in a bad AST - be cautious
-		var x ast.Node
-		if e := v.Index(a.iter.index); e.IsValid() {
-			x = e.Interface().(ast.Node)
-		}
-
-		a.iter.step = 1
-		a.apply(parent, name, &a.iter, x)
-		a.iter.index += a.iter.step
-	}
-	a.iter = saved
-}

+ 0 - 18
vendor/golang.org/x/tools/go/ast/astutil/util.go

@@ -1,18 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package astutil
-
-import "go/ast"
-
-// Unparen returns e with any enclosing parentheses stripped.
-func Unparen(e ast.Expr) ast.Expr {
-	for {
-		p, ok := e.(*ast.ParenExpr)
-		if !ok {
-			return e
-		}
-		e = p.X
-	}
-}

+ 0 - 133
vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.go

@@ -1,133 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package gcexportdata provides functions for locating, reading, and
-// writing export data files containing type information produced by the
-// gc compiler.  This package supports go1.7 export data format and all
-// later versions.
-//
-// Although it might seem convenient for this package to live alongside
-// go/types in the standard library, this would cause version skew
-// problems for developer tools that use it, since they must be able to
-// consume the outputs of the gc compiler both before and after a Go
-// update such as from Go 1.7 to Go 1.8.  Because this package lives in
-// golang.org/x/tools, sites can update their version of this repo some
-// time before the Go 1.8 release and rebuild and redeploy their
-// developer tools, which will then be able to consume both Go 1.7 and
-// Go 1.8 export data files, so they will work before and after the
-// Go update. (See discussion at https://golang.org/issue/15651.)
-//
-package gcexportdata // import "golang.org/x/tools/go/gcexportdata"
-
-import (
-	"bufio"
-	"bytes"
-	"fmt"
-	"go/token"
-	"go/types"
-	"io"
-	"io/ioutil"
-
-	"golang.org/x/tools/go/internal/gcimporter"
-)
-
-// Find returns the name of an object (.o) or archive (.a) file
-// containing type information for the specified import path,
-// using the workspace layout conventions of go/build.
-// If no file was found, an empty filename is returned.
-//
-// A relative srcDir is interpreted relative to the current working directory.
-//
-// Find also returns the package's resolved (canonical) import path,
-// reflecting the effects of srcDir and vendoring on importPath.
-func Find(importPath, srcDir string) (filename, path string) {
-	return gcimporter.FindPkg(importPath, srcDir)
-}
-
-// NewReader returns a reader for the export data section of an object
-// (.o) or archive (.a) file read from r.  The new reader may provide
-// additional trailing data beyond the end of the export data.
-func NewReader(r io.Reader) (io.Reader, error) {
-	buf := bufio.NewReader(r)
-	_, err := gcimporter.FindExportData(buf)
-	// If we ever switch to a zip-like archive format with the ToC
-	// at the end, we can return the correct portion of export data,
-	// but for now we must return the entire rest of the file.
-	return buf, err
-}
-
-// Read reads export data from in, decodes it, and returns type
-// information for the package.
-// The package name is specified by path.
-// File position information is added to fset.
-//
-// Read may inspect and add to the imports map to ensure that references
-// within the export data to other packages are consistent.  The caller
-// must ensure that imports[path] does not exist, or exists but is
-// incomplete (see types.Package.Complete), and Read inserts the
-// resulting package into this map entry.
-//
-// On return, the state of the reader is undefined.
-func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, path string) (*types.Package, error) {
-	data, err := ioutil.ReadAll(in)
-	if err != nil {
-		return nil, fmt.Errorf("reading export data for %q: %v", path, err)
-	}
-
-	if bytes.HasPrefix(data, []byte("!<arch>")) {
-		return nil, fmt.Errorf("can't read export data for %q directly from an archive file (call gcexportdata.NewReader first to extract export data)", path)
-	}
-
-	// The App Engine Go runtime v1.6 uses the old export data format.
-	// TODO(adonovan): delete once v1.7 has been around for a while.
-	if bytes.HasPrefix(data, []byte("package ")) {
-		return gcimporter.ImportData(imports, path, path, bytes.NewReader(data))
-	}
-
-	// The indexed export format starts with an 'i'; the older
-	// binary export format starts with a 'c', 'd', or 'v'
-	// (from "version"). Select appropriate importer.
-	if len(data) > 0 && data[0] == 'i' {
-		_, pkg, err := gcimporter.IImportData(fset, imports, data[1:], path)
-		return pkg, err
-	}
-
-	_, pkg, err := gcimporter.BImportData(fset, imports, data, path)
-	return pkg, err
-}
-
-// Write writes encoded type information for the specified package to out.
-// The FileSet provides file position information for named objects.
-func Write(out io.Writer, fset *token.FileSet, pkg *types.Package) error {
-	if _, err := io.WriteString(out, "i"); err != nil {
-		return err
-	}
-	return gcimporter.IExportData(out, fset, pkg)
-}
-
-// ReadBundle reads an export bundle from in, decodes it, and returns type
-// information for the packages.
-// File position information is added to fset.
-//
-// ReadBundle may inspect and add to the imports map to ensure that references
-// within the export bundle to other packages are consistent.
-//
-// On return, the state of the reader is undefined.
-//
-// Experimental: This API is experimental and may change in the future.
-func ReadBundle(in io.Reader, fset *token.FileSet, imports map[string]*types.Package) ([]*types.Package, error) {
-	data, err := ioutil.ReadAll(in)
-	if err != nil {
-		return nil, fmt.Errorf("reading export bundle: %v", err)
-	}
-	return gcimporter.IImportBundle(fset, imports, data)
-}
-
-// WriteBundle writes encoded type information for the specified packages to out.
-// The FileSet provides file position information for named objects.
-//
-// Experimental: This API is experimental and may change in the future.
-func WriteBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error {
-	return gcimporter.IExportBundle(out, fset, pkgs)
-}

+ 0 - 73
vendor/golang.org/x/tools/go/gcexportdata/importer.go

@@ -1,73 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gcexportdata
-
-import (
-	"fmt"
-	"go/token"
-	"go/types"
-	"os"
-)
-
-// NewImporter returns a new instance of the types.Importer interface
-// that reads type information from export data files written by gc.
-// The Importer also satisfies types.ImporterFrom.
-//
-// Export data files are located using "go build" workspace conventions
-// and the build.Default context.
-//
-// Use this importer instead of go/importer.For("gc", ...) to avoid the
-// version-skew problems described in the documentation of this package,
-// or to control the FileSet or access the imports map populated during
-// package loading.
-//
-func NewImporter(fset *token.FileSet, imports map[string]*types.Package) types.ImporterFrom {
-	return importer{fset, imports}
-}
-
-type importer struct {
-	fset    *token.FileSet
-	imports map[string]*types.Package
-}
-
-func (imp importer) Import(importPath string) (*types.Package, error) {
-	return imp.ImportFrom(importPath, "", 0)
-}
-
-func (imp importer) ImportFrom(importPath, srcDir string, mode types.ImportMode) (_ *types.Package, err error) {
-	filename, path := Find(importPath, srcDir)
-	if filename == "" {
-		if importPath == "unsafe" {
-			// Even for unsafe, call Find first in case
-			// the package was vendored.
-			return types.Unsafe, nil
-		}
-		return nil, fmt.Errorf("can't find import: %s", importPath)
-	}
-
-	if pkg, ok := imp.imports[path]; ok && pkg.Complete() {
-		return pkg, nil // cache hit
-	}
-
-	// open file
-	f, err := os.Open(filename)
-	if err != nil {
-		return nil, err
-	}
-	defer func() {
-		f.Close()
-		if err != nil {
-			// add file name to error
-			err = fmt.Errorf("reading export data: %s: %v", filename, err)
-		}
-	}()
-
-	r, err := NewReader(f)
-	if err != nil {
-		return nil, err
-	}
-
-	return Read(r, imp.fset, imp.imports, path)
-}

+ 0 - 852
vendor/golang.org/x/tools/go/internal/gcimporter/bexport.go

@@ -1,852 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Binary package export.
-// This file was derived from $GOROOT/src/cmd/compile/internal/gc/bexport.go;
-// see that file for specification of the format.
-
-package gcimporter
-
-import (
-	"bytes"
-	"encoding/binary"
-	"fmt"
-	"go/ast"
-	"go/constant"
-	"go/token"
-	"go/types"
-	"math"
-	"math/big"
-	"sort"
-	"strings"
-)
-
-// If debugFormat is set, each integer and string value is preceded by a marker
-// and position information in the encoding. This mechanism permits an importer
-// to recognize immediately when it is out of sync. The importer recognizes this
-// mode automatically (i.e., it can import export data produced with debugging
-// support even if debugFormat is not set at the time of import). This mode will
-// lead to massively larger export data (by a factor of 2 to 3) and should only
-// be enabled during development and debugging.
-//
-// NOTE: This flag is the first flag to enable if importing dies because of
-// (suspected) format errors, and whenever a change is made to the format.
-const debugFormat = false // default: false
-
-// If trace is set, debugging output is printed to std out.
-const trace = false // default: false
-
-// Current export format version. Increase with each format change.
-// Note: The latest binary (non-indexed) export format is at version 6.
-//       This exporter is still at level 4, but it doesn't matter since
-//       the binary importer can handle older versions just fine.
-// 6: package height (CL 105038) -- NOT IMPLEMENTED HERE
-// 5: improved position encoding efficiency (issue 20080, CL 41619) -- NOT IMPLEMEMTED HERE
-// 4: type name objects support type aliases, uses aliasTag
-// 3: Go1.8 encoding (same as version 2, aliasTag defined but never used)
-// 2: removed unused bool in ODCL export (compiler only)
-// 1: header format change (more regular), export package for _ struct fields
-// 0: Go1.7 encoding
-const exportVersion = 4
-
-// trackAllTypes enables cycle tracking for all types, not just named
-// types. The existing compiler invariants assume that unnamed types
-// that are not completely set up are not used, or else there are spurious
-// errors.
-// If disabled, only named types are tracked, possibly leading to slightly
-// less efficient encoding in rare cases. It also prevents the export of
-// some corner-case type declarations (but those are not handled correctly
-// with with the textual export format either).
-// TODO(gri) enable and remove once issues caused by it are fixed
-const trackAllTypes = false
-
-type exporter struct {
-	fset *token.FileSet
-	out  bytes.Buffer
-
-	// object -> index maps, indexed in order of serialization
-	strIndex map[string]int
-	pkgIndex map[*types.Package]int
-	typIndex map[types.Type]int
-
-	// position encoding
-	posInfoFormat bool
-	prevFile      string
-	prevLine      int
-
-	// debugging support
-	written int // bytes written
-	indent  int // for trace
-}
-
-// internalError represents an error generated inside this package.
-type internalError string
-
-func (e internalError) Error() string { return "gcimporter: " + string(e) }
-
-func internalErrorf(format string, args ...interface{}) error {
-	return internalError(fmt.Sprintf(format, args...))
-}
-
-// BExportData returns binary export data for pkg.
-// If no file set is provided, position info will be missing.
-func BExportData(fset *token.FileSet, pkg *types.Package) (b []byte, err error) {
-	defer func() {
-		if e := recover(); e != nil {
-			if ierr, ok := e.(internalError); ok {
-				err = ierr
-				return
-			}
-			// Not an internal error; panic again.
-			panic(e)
-		}
-	}()
-
-	p := exporter{
-		fset:          fset,
-		strIndex:      map[string]int{"": 0}, // empty string is mapped to 0
-		pkgIndex:      make(map[*types.Package]int),
-		typIndex:      make(map[types.Type]int),
-		posInfoFormat: true, // TODO(gri) might become a flag, eventually
-	}
-
-	// write version info
-	// The version string must start with "version %d" where %d is the version
-	// number. Additional debugging information may follow after a blank; that
-	// text is ignored by the importer.
-	p.rawStringln(fmt.Sprintf("version %d", exportVersion))
-	var debug string
-	if debugFormat {
-		debug = "debug"
-	}
-	p.rawStringln(debug) // cannot use p.bool since it's affected by debugFormat; also want to see this clearly
-	p.bool(trackAllTypes)
-	p.bool(p.posInfoFormat)
-
-	// --- generic export data ---
-
-	// populate type map with predeclared "known" types
-	for index, typ := range predeclared() {
-		p.typIndex[typ] = index
-	}
-	if len(p.typIndex) != len(predeclared()) {
-		return nil, internalError("duplicate entries in type map?")
-	}
-
-	// write package data
-	p.pkg(pkg, true)
-	if trace {
-		p.tracef("\n")
-	}
-
-	// write objects
-	objcount := 0
-	scope := pkg.Scope()
-	for _, name := range scope.Names() {
-		if !ast.IsExported(name) {
-			continue
-		}
-		if trace {
-			p.tracef("\n")
-		}
-		p.obj(scope.Lookup(name))
-		objcount++
-	}
-
-	// indicate end of list
-	if trace {
-		p.tracef("\n")
-	}
-	p.tag(endTag)
-
-	// for self-verification only (redundant)
-	p.int(objcount)
-
-	if trace {
-		p.tracef("\n")
-	}
-
-	// --- end of export data ---
-
-	return p.out.Bytes(), nil
-}
-
-func (p *exporter) pkg(pkg *types.Package, emptypath bool) {
-	if pkg == nil {
-		panic(internalError("unexpected nil pkg"))
-	}
-
-	// if we saw the package before, write its index (>= 0)
-	if i, ok := p.pkgIndex[pkg]; ok {
-		p.index('P', i)
-		return
-	}
-
-	// otherwise, remember the package, write the package tag (< 0) and package data
-	if trace {
-		p.tracef("P%d = { ", len(p.pkgIndex))
-		defer p.tracef("} ")
-	}
-	p.pkgIndex[pkg] = len(p.pkgIndex)
-
-	p.tag(packageTag)
-	p.string(pkg.Name())
-	if emptypath {
-		p.string("")
-	} else {
-		p.string(pkg.Path())
-	}
-}
-
-func (p *exporter) obj(obj types.Object) {
-	switch obj := obj.(type) {
-	case *types.Const:
-		p.tag(constTag)
-		p.pos(obj)
-		p.qualifiedName(obj)
-		p.typ(obj.Type())
-		p.value(obj.Val())
-
-	case *types.TypeName:
-		if obj.IsAlias() {
-			p.tag(aliasTag)
-			p.pos(obj)
-			p.qualifiedName(obj)
-		} else {
-			p.tag(typeTag)
-		}
-		p.typ(obj.Type())
-
-	case *types.Var:
-		p.tag(varTag)
-		p.pos(obj)
-		p.qualifiedName(obj)
-		p.typ(obj.Type())
-
-	case *types.Func:
-		p.tag(funcTag)
-		p.pos(obj)
-		p.qualifiedName(obj)
-		sig := obj.Type().(*types.Signature)
-		p.paramList(sig.Params(), sig.Variadic())
-		p.paramList(sig.Results(), false)
-
-	default:
-		panic(internalErrorf("unexpected object %v (%T)", obj, obj))
-	}
-}
-
-func (p *exporter) pos(obj types.Object) {
-	if !p.posInfoFormat {
-		return
-	}
-
-	file, line := p.fileLine(obj)
-	if file == p.prevFile {
-		// common case: write line delta
-		// delta == 0 means different file or no line change
-		delta := line - p.prevLine
-		p.int(delta)
-		if delta == 0 {
-			p.int(-1) // -1 means no file change
-		}
-	} else {
-		// different file
-		p.int(0)
-		// Encode filename as length of common prefix with previous
-		// filename, followed by (possibly empty) suffix. Filenames
-		// frequently share path prefixes, so this can save a lot
-		// of space and make export data size less dependent on file
-		// path length. The suffix is unlikely to be empty because
-		// file names tend to end in ".go".
-		n := commonPrefixLen(p.prevFile, file)
-		p.int(n)           // n >= 0
-		p.string(file[n:]) // write suffix only
-		p.prevFile = file
-		p.int(line)
-	}
-	p.prevLine = line
-}
-
-func (p *exporter) fileLine(obj types.Object) (file string, line int) {
-	if p.fset != nil {
-		pos := p.fset.Position(obj.Pos())
-		file = pos.Filename
-		line = pos.Line
-	}
-	return
-}
-
-func commonPrefixLen(a, b string) int {
-	if len(a) > len(b) {
-		a, b = b, a
-	}
-	// len(a) <= len(b)
-	i := 0
-	for i < len(a) && a[i] == b[i] {
-		i++
-	}
-	return i
-}
-
-func (p *exporter) qualifiedName(obj types.Object) {
-	p.string(obj.Name())
-	p.pkg(obj.Pkg(), false)
-}
-
-func (p *exporter) typ(t types.Type) {
-	if t == nil {
-		panic(internalError("nil type"))
-	}
-
-	// Possible optimization: Anonymous pointer types *T where
-	// T is a named type are common. We could canonicalize all
-	// such types *T to a single type PT = *T. This would lead
-	// to at most one *T entry in typIndex, and all future *T's
-	// would be encoded as the respective index directly. Would
-	// save 1 byte (pointerTag) per *T and reduce the typIndex
-	// size (at the cost of a canonicalization map). We can do
-	// this later, without encoding format change.
-
-	// if we saw the type before, write its index (>= 0)
-	if i, ok := p.typIndex[t]; ok {
-		p.index('T', i)
-		return
-	}
-
-	// otherwise, remember the type, write the type tag (< 0) and type data
-	if trackAllTypes {
-		if trace {
-			p.tracef("T%d = {>\n", len(p.typIndex))
-			defer p.tracef("<\n} ")
-		}
-		p.typIndex[t] = len(p.typIndex)
-	}
-
-	switch t := t.(type) {
-	case *types.Named:
-		if !trackAllTypes {
-			// if we don't track all types, track named types now
-			p.typIndex[t] = len(p.typIndex)
-		}
-
-		p.tag(namedTag)
-		p.pos(t.Obj())
-		p.qualifiedName(t.Obj())
-		p.typ(t.Underlying())
-		if !types.IsInterface(t) {
-			p.assocMethods(t)
-		}
-
-	case *types.Array:
-		p.tag(arrayTag)
-		p.int64(t.Len())
-		p.typ(t.Elem())
-
-	case *types.Slice:
-		p.tag(sliceTag)
-		p.typ(t.Elem())
-
-	case *dddSlice:
-		p.tag(dddTag)
-		p.typ(t.elem)
-
-	case *types.Struct:
-		p.tag(structTag)
-		p.fieldList(t)
-
-	case *types.Pointer:
-		p.tag(pointerTag)
-		p.typ(t.Elem())
-
-	case *types.Signature:
-		p.tag(signatureTag)
-		p.paramList(t.Params(), t.Variadic())
-		p.paramList(t.Results(), false)
-
-	case *types.Interface:
-		p.tag(interfaceTag)
-		p.iface(t)
-
-	case *types.Map:
-		p.tag(mapTag)
-		p.typ(t.Key())
-		p.typ(t.Elem())
-
-	case *types.Chan:
-		p.tag(chanTag)
-		p.int(int(3 - t.Dir())) // hack
-		p.typ(t.Elem())
-
-	default:
-		panic(internalErrorf("unexpected type %T: %s", t, t))
-	}
-}
-
-func (p *exporter) assocMethods(named *types.Named) {
-	// Sort methods (for determinism).
-	var methods []*types.Func
-	for i := 0; i < named.NumMethods(); i++ {
-		methods = append(methods, named.Method(i))
-	}
-	sort.Sort(methodsByName(methods))
-
-	p.int(len(methods))
-
-	if trace && methods != nil {
-		p.tracef("associated methods {>\n")
-	}
-
-	for i, m := range methods {
-		if trace && i > 0 {
-			p.tracef("\n")
-		}
-
-		p.pos(m)
-		name := m.Name()
-		p.string(name)
-		if !exported(name) {
-			p.pkg(m.Pkg(), false)
-		}
-
-		sig := m.Type().(*types.Signature)
-		p.paramList(types.NewTuple(sig.Recv()), false)
-		p.paramList(sig.Params(), sig.Variadic())
-		p.paramList(sig.Results(), false)
-		p.int(0) // dummy value for go:nointerface pragma - ignored by importer
-	}
-
-	if trace && methods != nil {
-		p.tracef("<\n} ")
-	}
-}
-
-type methodsByName []*types.Func
-
-func (x methodsByName) Len() int           { return len(x) }
-func (x methodsByName) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }
-func (x methodsByName) Less(i, j int) bool { return x[i].Name() < x[j].Name() }
-
-func (p *exporter) fieldList(t *types.Struct) {
-	if trace && t.NumFields() > 0 {
-		p.tracef("fields {>\n")
-		defer p.tracef("<\n} ")
-	}
-
-	p.int(t.NumFields())
-	for i := 0; i < t.NumFields(); i++ {
-		if trace && i > 0 {
-			p.tracef("\n")
-		}
-		p.field(t.Field(i))
-		p.string(t.Tag(i))
-	}
-}
-
-func (p *exporter) field(f *types.Var) {
-	if !f.IsField() {
-		panic(internalError("field expected"))
-	}
-
-	p.pos(f)
-	p.fieldName(f)
-	p.typ(f.Type())
-}
-
-func (p *exporter) iface(t *types.Interface) {
-	// TODO(gri): enable importer to load embedded interfaces,
-	// then emit Embeddeds and ExplicitMethods separately here.
-	p.int(0)
-
-	n := t.NumMethods()
-	if trace && n > 0 {
-		p.tracef("methods {>\n")
-		defer p.tracef("<\n} ")
-	}
-	p.int(n)
-	for i := 0; i < n; i++ {
-		if trace && i > 0 {
-			p.tracef("\n")
-		}
-		p.method(t.Method(i))
-	}
-}
-
-func (p *exporter) method(m *types.Func) {
-	sig := m.Type().(*types.Signature)
-	if sig.Recv() == nil {
-		panic(internalError("method expected"))
-	}
-
-	p.pos(m)
-	p.string(m.Name())
-	if m.Name() != "_" && !ast.IsExported(m.Name()) {
-		p.pkg(m.Pkg(), false)
-	}
-
-	// interface method; no need to encode receiver.
-	p.paramList(sig.Params(), sig.Variadic())
-	p.paramList(sig.Results(), false)
-}
-
-func (p *exporter) fieldName(f *types.Var) {
-	name := f.Name()
-
-	if f.Anonymous() {
-		// anonymous field - we distinguish between 3 cases:
-		// 1) field name matches base type name and is exported
-		// 2) field name matches base type name and is not exported
-		// 3) field name doesn't match base type name (alias name)
-		bname := basetypeName(f.Type())
-		if name == bname {
-			if ast.IsExported(name) {
-				name = "" // 1) we don't need to know the field name or package
-			} else {
-				name = "?" // 2) use unexported name "?" to force package export
-			}
-		} else {
-			// 3) indicate alias and export name as is
-			// (this requires an extra "@" but this is a rare case)
-			p.string("@")
-		}
-	}
-
-	p.string(name)
-	if name != "" && !ast.IsExported(name) {
-		p.pkg(f.Pkg(), false)
-	}
-}
-
-func basetypeName(typ types.Type) string {
-	switch typ := deref(typ).(type) {
-	case *types.Basic:
-		return typ.Name()
-	case *types.Named:
-		return typ.Obj().Name()
-	default:
-		return "" // unnamed type
-	}
-}
-
-func (p *exporter) paramList(params *types.Tuple, variadic bool) {
-	// use negative length to indicate unnamed parameters
-	// (look at the first parameter only since either all
-	// names are present or all are absent)
-	n := params.Len()
-	if n > 0 && params.At(0).Name() == "" {
-		n = -n
-	}
-	p.int(n)
-	for i := 0; i < params.Len(); i++ {
-		q := params.At(i)
-		t := q.Type()
-		if variadic && i == params.Len()-1 {
-			t = &dddSlice{t.(*types.Slice).Elem()}
-		}
-		p.typ(t)
-		if n > 0 {
-			name := q.Name()
-			p.string(name)
-			if name != "_" {
-				p.pkg(q.Pkg(), false)
-			}
-		}
-		p.string("") // no compiler-specific info
-	}
-}
-
-func (p *exporter) value(x constant.Value) {
-	if trace {
-		p.tracef("= ")
-	}
-
-	switch x.Kind() {
-	case constant.Bool:
-		tag := falseTag
-		if constant.BoolVal(x) {
-			tag = trueTag
-		}
-		p.tag(tag)
-
-	case constant.Int:
-		if v, exact := constant.Int64Val(x); exact {
-			// common case: x fits into an int64 - use compact encoding
-			p.tag(int64Tag)
-			p.int64(v)
-			return
-		}
-		// uncommon case: large x - use float encoding
-		// (powers of 2 will be encoded efficiently with exponent)
-		p.tag(floatTag)
-		p.float(constant.ToFloat(x))
-
-	case constant.Float:
-		p.tag(floatTag)
-		p.float(x)
-
-	case constant.Complex:
-		p.tag(complexTag)
-		p.float(constant.Real(x))
-		p.float(constant.Imag(x))
-
-	case constant.String:
-		p.tag(stringTag)
-		p.string(constant.StringVal(x))
-
-	case constant.Unknown:
-		// package contains type errors
-		p.tag(unknownTag)
-
-	default:
-		panic(internalErrorf("unexpected value %v (%T)", x, x))
-	}
-}
-
-func (p *exporter) float(x constant.Value) {
-	if x.Kind() != constant.Float {
-		panic(internalErrorf("unexpected constant %v, want float", x))
-	}
-	// extract sign (there is no -0)
-	sign := constant.Sign(x)
-	if sign == 0 {
-		// x == 0
-		p.int(0)
-		return
-	}
-	// x != 0
-
-	var f big.Float
-	if v, exact := constant.Float64Val(x); exact {
-		// float64
-		f.SetFloat64(v)
-	} else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int {
-		// TODO(gri): add big.Rat accessor to constant.Value.
-		r := valueToRat(num)
-		f.SetRat(r.Quo(r, valueToRat(denom)))
-	} else {
-		// Value too large to represent as a fraction => inaccessible.
-		// TODO(gri): add big.Float accessor to constant.Value.
-		f.SetFloat64(math.MaxFloat64) // FIXME
-	}
-
-	// extract exponent such that 0.5 <= m < 1.0
-	var m big.Float
-	exp := f.MantExp(&m)
-
-	// extract mantissa as *big.Int
-	// - set exponent large enough so mant satisfies mant.IsInt()
-	// - get *big.Int from mant
-	m.SetMantExp(&m, int(m.MinPrec()))
-	mant, acc := m.Int(nil)
-	if acc != big.Exact {
-		panic(internalError("internal error"))
-	}
-
-	p.int(sign)
-	p.int(exp)
-	p.string(string(mant.Bytes()))
-}
-
-func valueToRat(x constant.Value) *big.Rat {
-	// Convert little-endian to big-endian.
-	// I can't believe this is necessary.
-	bytes := constant.Bytes(x)
-	for i := 0; i < len(bytes)/2; i++ {
-		bytes[i], bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i], bytes[i]
-	}
-	return new(big.Rat).SetInt(new(big.Int).SetBytes(bytes))
-}
-
-func (p *exporter) bool(b bool) bool {
-	if trace {
-		p.tracef("[")
-		defer p.tracef("= %v] ", b)
-	}
-
-	x := 0
-	if b {
-		x = 1
-	}
-	p.int(x)
-	return b
-}
-
-// ----------------------------------------------------------------------------
-// Low-level encoders
-
-func (p *exporter) index(marker byte, index int) {
-	if index < 0 {
-		panic(internalError("invalid index < 0"))
-	}
-	if debugFormat {
-		p.marker('t')
-	}
-	if trace {
-		p.tracef("%c%d ", marker, index)
-	}
-	p.rawInt64(int64(index))
-}
-
-func (p *exporter) tag(tag int) {
-	if tag >= 0 {
-		panic(internalError("invalid tag >= 0"))
-	}
-	if debugFormat {
-		p.marker('t')
-	}
-	if trace {
-		p.tracef("%s ", tagString[-tag])
-	}
-	p.rawInt64(int64(tag))
-}
-
-func (p *exporter) int(x int) {
-	p.int64(int64(x))
-}
-
-func (p *exporter) int64(x int64) {
-	if debugFormat {
-		p.marker('i')
-	}
-	if trace {
-		p.tracef("%d ", x)
-	}
-	p.rawInt64(x)
-}
-
-func (p *exporter) string(s string) {
-	if debugFormat {
-		p.marker('s')
-	}
-	if trace {
-		p.tracef("%q ", s)
-	}
-	// if we saw the string before, write its index (>= 0)
-	// (the empty string is mapped to 0)
-	if i, ok := p.strIndex[s]; ok {
-		p.rawInt64(int64(i))
-		return
-	}
-	// otherwise, remember string and write its negative length and bytes
-	p.strIndex[s] = len(p.strIndex)
-	p.rawInt64(-int64(len(s)))
-	for i := 0; i < len(s); i++ {
-		p.rawByte(s[i])
-	}
-}
-
-// marker emits a marker byte and position information which makes
-// it easy for a reader to detect if it is "out of sync". Used for
-// debugFormat format only.
-func (p *exporter) marker(m byte) {
-	p.rawByte(m)
-	// Enable this for help tracking down the location
-	// of an incorrect marker when running in debugFormat.
-	if false && trace {
-		p.tracef("#%d ", p.written)
-	}
-	p.rawInt64(int64(p.written))
-}
-
-// rawInt64 should only be used by low-level encoders.
-func (p *exporter) rawInt64(x int64) {
-	var tmp [binary.MaxVarintLen64]byte
-	n := binary.PutVarint(tmp[:], x)
-	for i := 0; i < n; i++ {
-		p.rawByte(tmp[i])
-	}
-}
-
-// rawStringln should only be used to emit the initial version string.
-func (p *exporter) rawStringln(s string) {
-	for i := 0; i < len(s); i++ {
-		p.rawByte(s[i])
-	}
-	p.rawByte('\n')
-}
-
-// rawByte is the bottleneck interface to write to p.out.
-// rawByte escapes b as follows (any encoding does that
-// hides '$'):
-//
-//	'$'  => '|' 'S'
-//	'|'  => '|' '|'
-//
-// Necessary so other tools can find the end of the
-// export data by searching for "$$".
-// rawByte should only be used by low-level encoders.
-func (p *exporter) rawByte(b byte) {
-	switch b {
-	case '$':
-		// write '$' as '|' 'S'
-		b = 'S'
-		fallthrough
-	case '|':
-		// write '|' as '|' '|'
-		p.out.WriteByte('|')
-		p.written++
-	}
-	p.out.WriteByte(b)
-	p.written++
-}
-
-// tracef is like fmt.Printf but it rewrites the format string
-// to take care of indentation.
-func (p *exporter) tracef(format string, args ...interface{}) {
-	if strings.ContainsAny(format, "<>\n") {
-		var buf bytes.Buffer
-		for i := 0; i < len(format); i++ {
-			// no need to deal with runes
-			ch := format[i]
-			switch ch {
-			case '>':
-				p.indent++
-				continue
-			case '<':
-				p.indent--
-				continue
-			}
-			buf.WriteByte(ch)
-			if ch == '\n' {
-				for j := p.indent; j > 0; j-- {
-					buf.WriteString(".  ")
-				}
-			}
-		}
-		format = buf.String()
-	}
-	fmt.Printf(format, args...)
-}
-
-// Debugging support.
-// (tagString is only used when tracing is enabled)
-var tagString = [...]string{
-	// Packages
-	-packageTag: "package",
-
-	// Types
-	-namedTag:     "named type",
-	-arrayTag:     "array",
-	-sliceTag:     "slice",
-	-dddTag:       "ddd",
-	-structTag:    "struct",
-	-pointerTag:   "pointer",
-	-signatureTag: "signature",
-	-interfaceTag: "interface",
-	-mapTag:       "map",
-	-chanTag:      "chan",
-
-	// Values
-	-falseTag:    "false",
-	-trueTag:     "true",
-	-int64Tag:    "int64",
-	-floatTag:    "float",
-	-fractionTag: "fraction",
-	-complexTag:  "complex",
-	-stringTag:   "string",
-	-unknownTag:  "unknown",
-
-	// Type aliases
-	-aliasTag: "alias",
-}

+ 0 - 1039
vendor/golang.org/x/tools/go/internal/gcimporter/bimport.go

@@ -1,1039 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file is a copy of $GOROOT/src/go/internal/gcimporter/bimport.go.
-
-package gcimporter
-
-import (
-	"encoding/binary"
-	"fmt"
-	"go/constant"
-	"go/token"
-	"go/types"
-	"sort"
-	"strconv"
-	"strings"
-	"sync"
-	"unicode"
-	"unicode/utf8"
-)
-
-type importer struct {
-	imports    map[string]*types.Package
-	data       []byte
-	importpath string
-	buf        []byte // for reading strings
-	version    int    // export format version
-
-	// object lists
-	strList       []string           // in order of appearance
-	pathList      []string           // in order of appearance
-	pkgList       []*types.Package   // in order of appearance
-	typList       []types.Type       // in order of appearance
-	interfaceList []*types.Interface // for delayed completion only
-	trackAllTypes bool
-
-	// position encoding
-	posInfoFormat bool
-	prevFile      string
-	prevLine      int
-	fake          fakeFileSet
-
-	// debugging support
-	debugFormat bool
-	read        int // bytes read
-}
-
-// BImportData imports a package from the serialized package data
-// and returns the number of bytes consumed and a reference to the package.
-// If the export data version is not recognized or the format is otherwise
-// compromised, an error is returned.
-func BImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (_ int, pkg *types.Package, err error) {
-	// catch panics and return them as errors
-	const currentVersion = 6
-	version := -1 // unknown version
-	defer func() {
-		if e := recover(); e != nil {
-			// Return a (possibly nil or incomplete) package unchanged (see #16088).
-			if version > currentVersion {
-				err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e)
-			} else {
-				err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e)
-			}
-		}
-	}()
-
-	p := importer{
-		imports:    imports,
-		data:       data,
-		importpath: path,
-		version:    version,
-		strList:    []string{""}, // empty string is mapped to 0
-		pathList:   []string{""}, // empty string is mapped to 0
-		fake: fakeFileSet{
-			fset:  fset,
-			files: make(map[string]*token.File),
-		},
-	}
-
-	// read version info
-	var versionstr string
-	if b := p.rawByte(); b == 'c' || b == 'd' {
-		// Go1.7 encoding; first byte encodes low-level
-		// encoding format (compact vs debug).
-		// For backward-compatibility only (avoid problems with
-		// old installed packages). Newly compiled packages use
-		// the extensible format string.
-		// TODO(gri) Remove this support eventually; after Go1.8.
-		if b == 'd' {
-			p.debugFormat = true
-		}
-		p.trackAllTypes = p.rawByte() == 'a'
-		p.posInfoFormat = p.int() != 0
-		versionstr = p.string()
-		if versionstr == "v1" {
-			version = 0
-		}
-	} else {
-		// Go1.8 extensible encoding
-		// read version string and extract version number (ignore anything after the version number)
-		versionstr = p.rawStringln(b)
-		if s := strings.SplitN(versionstr, " ", 3); len(s) >= 2 && s[0] == "version" {
-			if v, err := strconv.Atoi(s[1]); err == nil && v > 0 {
-				version = v
-			}
-		}
-	}
-	p.version = version
-
-	// read version specific flags - extend as necessary
-	switch p.version {
-	// case currentVersion:
-	// 	...
-	//	fallthrough
-	case currentVersion, 5, 4, 3, 2, 1:
-		p.debugFormat = p.rawStringln(p.rawByte()) == "debug"
-		p.trackAllTypes = p.int() != 0
-		p.posInfoFormat = p.int() != 0
-	case 0:
-		// Go1.7 encoding format - nothing to do here
-	default:
-		errorf("unknown bexport format version %d (%q)", p.version, versionstr)
-	}
-
-	// --- generic export data ---
-
-	// populate typList with predeclared "known" types
-	p.typList = append(p.typList, predeclared()...)
-
-	// read package data
-	pkg = p.pkg()
-
-	// read objects of phase 1 only (see cmd/compile/internal/gc/bexport.go)
-	objcount := 0
-	for {
-		tag := p.tagOrIndex()
-		if tag == endTag {
-			break
-		}
-		p.obj(tag)
-		objcount++
-	}
-
-	// self-verification
-	if count := p.int(); count != objcount {
-		errorf("got %d objects; want %d", objcount, count)
-	}
-
-	// ignore compiler-specific import data
-
-	// complete interfaces
-	// TODO(gri) re-investigate if we still need to do this in a delayed fashion
-	for _, typ := range p.interfaceList {
-		typ.Complete()
-	}
-
-	// record all referenced packages as imports
-	list := append(([]*types.Package)(nil), p.pkgList[1:]...)
-	sort.Sort(byPath(list))
-	pkg.SetImports(list)
-
-	// package was imported completely and without errors
-	pkg.MarkComplete()
-
-	return p.read, pkg, nil
-}
-
-func errorf(format string, args ...interface{}) {
-	panic(fmt.Sprintf(format, args...))
-}
-
-func (p *importer) pkg() *types.Package {
-	// if the package was seen before, i is its index (>= 0)
-	i := p.tagOrIndex()
-	if i >= 0 {
-		return p.pkgList[i]
-	}
-
-	// otherwise, i is the package tag (< 0)
-	if i != packageTag {
-		errorf("unexpected package tag %d version %d", i, p.version)
-	}
-
-	// read package data
-	name := p.string()
-	var path string
-	if p.version >= 5 {
-		path = p.path()
-	} else {
-		path = p.string()
-	}
-	if p.version >= 6 {
-		p.int() // package height; unused by go/types
-	}
-
-	// we should never see an empty package name
-	if name == "" {
-		errorf("empty package name in import")
-	}
-
-	// an empty path denotes the package we are currently importing;
-	// it must be the first package we see
-	if (path == "") != (len(p.pkgList) == 0) {
-		errorf("package path %q for pkg index %d", path, len(p.pkgList))
-	}
-
-	// if the package was imported before, use that one; otherwise create a new one
-	if path == "" {
-		path = p.importpath
-	}
-	pkg := p.imports[path]
-	if pkg == nil {
-		pkg = types.NewPackage(path, name)
-		p.imports[path] = pkg
-	} else if pkg.Name() != name {
-		errorf("conflicting names %s and %s for package %q", pkg.Name(), name, path)
-	}
-	p.pkgList = append(p.pkgList, pkg)
-
-	return pkg
-}
-
-// objTag returns the tag value for each object kind.
-func objTag(obj types.Object) int {
-	switch obj.(type) {
-	case *types.Const:
-		return constTag
-	case *types.TypeName:
-		return typeTag
-	case *types.Var:
-		return varTag
-	case *types.Func:
-		return funcTag
-	default:
-		errorf("unexpected object: %v (%T)", obj, obj) // panics
-		panic("unreachable")
-	}
-}
-
-func sameObj(a, b types.Object) bool {
-	// Because unnamed types are not canonicalized, we cannot simply compare types for
-	// (pointer) identity.
-	// Ideally we'd check equality of constant values as well, but this is good enough.
-	return objTag(a) == objTag(b) && types.Identical(a.Type(), b.Type())
-}
-
-func (p *importer) declare(obj types.Object) {
-	pkg := obj.Pkg()
-	if alt := pkg.Scope().Insert(obj); alt != nil {
-		// This can only trigger if we import a (non-type) object a second time.
-		// Excluding type aliases, this cannot happen because 1) we only import a package
-		// once; and b) we ignore compiler-specific export data which may contain
-		// functions whose inlined function bodies refer to other functions that
-		// were already imported.
-		// However, type aliases require reexporting the original type, so we need
-		// to allow it (see also the comment in cmd/compile/internal/gc/bimport.go,
-		// method importer.obj, switch case importing functions).
-		// TODO(gri) review/update this comment once the gc compiler handles type aliases.
-		if !sameObj(obj, alt) {
-			errorf("inconsistent import:\n\t%v\npreviously imported as:\n\t%v\n", obj, alt)
-		}
-	}
-}
-
-func (p *importer) obj(tag int) {
-	switch tag {
-	case constTag:
-		pos := p.pos()
-		pkg, name := p.qualifiedName()
-		typ := p.typ(nil, nil)
-		val := p.value()
-		p.declare(types.NewConst(pos, pkg, name, typ, val))
-
-	case aliasTag:
-		// TODO(gri) verify type alias hookup is correct
-		pos := p.pos()
-		pkg, name := p.qualifiedName()
-		typ := p.typ(nil, nil)
-		p.declare(types.NewTypeName(pos, pkg, name, typ))
-
-	case typeTag:
-		p.typ(nil, nil)
-
-	case varTag:
-		pos := p.pos()
-		pkg, name := p.qualifiedName()
-		typ := p.typ(nil, nil)
-		p.declare(types.NewVar(pos, pkg, name, typ))
-
-	case funcTag:
-		pos := p.pos()
-		pkg, name := p.qualifiedName()
-		params, isddd := p.paramList()
-		result, _ := p.paramList()
-		sig := types.NewSignature(nil, params, result, isddd)
-		p.declare(types.NewFunc(pos, pkg, name, sig))
-
-	default:
-		errorf("unexpected object tag %d", tag)
-	}
-}
-
-const deltaNewFile = -64 // see cmd/compile/internal/gc/bexport.go
-
-func (p *importer) pos() token.Pos {
-	if !p.posInfoFormat {
-		return token.NoPos
-	}
-
-	file := p.prevFile
-	line := p.prevLine
-	delta := p.int()
-	line += delta
-	if p.version >= 5 {
-		if delta == deltaNewFile {
-			if n := p.int(); n >= 0 {
-				// file changed
-				file = p.path()
-				line = n
-			}
-		}
-	} else {
-		if delta == 0 {
-			if n := p.int(); n >= 0 {
-				// file changed
-				file = p.prevFile[:n] + p.string()
-				line = p.int()
-			}
-		}
-	}
-	p.prevFile = file
-	p.prevLine = line
-
-	return p.fake.pos(file, line, 0)
-}
-
-// Synthesize a token.Pos
-type fakeFileSet struct {
-	fset  *token.FileSet
-	files map[string]*token.File
-}
-
-func (s *fakeFileSet) pos(file string, line, column int) token.Pos {
-	// TODO(mdempsky): Make use of column.
-
-	// Since we don't know the set of needed file positions, we
-	// reserve maxlines positions per file.
-	const maxlines = 64 * 1024
-	f := s.files[file]
-	if f == nil {
-		f = s.fset.AddFile(file, -1, maxlines)
-		s.files[file] = f
-		// Allocate the fake linebreak indices on first use.
-		// TODO(adonovan): opt: save ~512KB using a more complex scheme?
-		fakeLinesOnce.Do(func() {
-			fakeLines = make([]int, maxlines)
-			for i := range fakeLines {
-				fakeLines[i] = i
-			}
-		})
-		f.SetLines(fakeLines)
-	}
-
-	if line > maxlines {
-		line = 1
-	}
-
-	// Treat the file as if it contained only newlines
-	// and column=1: use the line number as the offset.
-	return f.Pos(line - 1)
-}
-
-var (
-	fakeLines     []int
-	fakeLinesOnce sync.Once
-)
-
-func (p *importer) qualifiedName() (pkg *types.Package, name string) {
-	name = p.string()
-	pkg = p.pkg()
-	return
-}
-
-func (p *importer) record(t types.Type) {
-	p.typList = append(p.typList, t)
-}
-
-// A dddSlice is a types.Type representing ...T parameters.
-// It only appears for parameter types and does not escape
-// the importer.
-type dddSlice struct {
-	elem types.Type
-}
-
-func (t *dddSlice) Underlying() types.Type { return t }
-func (t *dddSlice) String() string         { return "..." + t.elem.String() }
-
-// parent is the package which declared the type; parent == nil means
-// the package currently imported. The parent package is needed for
-// exported struct fields and interface methods which don't contain
-// explicit package information in the export data.
-//
-// A non-nil tname is used as the "owner" of the result type; i.e.,
-// the result type is the underlying type of tname. tname is used
-// to give interface methods a named receiver type where possible.
-func (p *importer) typ(parent *types.Package, tname *types.Named) types.Type {
-	// if the type was seen before, i is its index (>= 0)
-	i := p.tagOrIndex()
-	if i >= 0 {
-		return p.typList[i]
-	}
-
-	// otherwise, i is the type tag (< 0)
-	switch i {
-	case namedTag:
-		// read type object
-		pos := p.pos()
-		parent, name := p.qualifiedName()
-		scope := parent.Scope()
-		obj := scope.Lookup(name)
-
-		// if the object doesn't exist yet, create and insert it
-		if obj == nil {
-			obj = types.NewTypeName(pos, parent, name, nil)
-			scope.Insert(obj)
-		}
-
-		if _, ok := obj.(*types.TypeName); !ok {
-			errorf("pkg = %s, name = %s => %s", parent, name, obj)
-		}
-
-		// associate new named type with obj if it doesn't exist yet
-		t0 := types.NewNamed(obj.(*types.TypeName), nil, nil)
-
-		// but record the existing type, if any
-		tname := obj.Type().(*types.Named) // tname is either t0 or the existing type
-		p.record(tname)
-
-		// read underlying type
-		t0.SetUnderlying(p.typ(parent, t0))
-
-		// interfaces don't have associated methods
-		if types.IsInterface(t0) {
-			return tname
-		}
-
-		// read associated methods
-		for i := p.int(); i > 0; i-- {
-			// TODO(gri) replace this with something closer to fieldName
-			pos := p.pos()
-			name := p.string()
-			if !exported(name) {
-				p.pkg()
-			}
-
-			recv, _ := p.paramList() // TODO(gri) do we need a full param list for the receiver?
-			params, isddd := p.paramList()
-			result, _ := p.paramList()
-			p.int() // go:nointerface pragma - discarded
-
-			sig := types.NewSignature(recv.At(0), params, result, isddd)
-			t0.AddMethod(types.NewFunc(pos, parent, name, sig))
-		}
-
-		return tname
-
-	case arrayTag:
-		t := new(types.Array)
-		if p.trackAllTypes {
-			p.record(t)
-		}
-
-		n := p.int64()
-		*t = *types.NewArray(p.typ(parent, nil), n)
-		return t
-
-	case sliceTag:
-		t := new(types.Slice)
-		if p.trackAllTypes {
-			p.record(t)
-		}
-
-		*t = *types.NewSlice(p.typ(parent, nil))
-		return t
-
-	case dddTag:
-		t := new(dddSlice)
-		if p.trackAllTypes {
-			p.record(t)
-		}
-
-		t.elem = p.typ(parent, nil)
-		return t
-
-	case structTag:
-		t := new(types.Struct)
-		if p.trackAllTypes {
-			p.record(t)
-		}
-
-		*t = *types.NewStruct(p.fieldList(parent))
-		return t
-
-	case pointerTag:
-		t := new(types.Pointer)
-		if p.trackAllTypes {
-			p.record(t)
-		}
-
-		*t = *types.NewPointer(p.typ(parent, nil))
-		return t
-
-	case signatureTag:
-		t := new(types.Signature)
-		if p.trackAllTypes {
-			p.record(t)
-		}
-
-		params, isddd := p.paramList()
-		result, _ := p.paramList()
-		*t = *types.NewSignature(nil, params, result, isddd)
-		return t
-
-	case interfaceTag:
-		// Create a dummy entry in the type list. This is safe because we
-		// cannot expect the interface type to appear in a cycle, as any
-		// such cycle must contain a named type which would have been
-		// first defined earlier.
-		// TODO(gri) Is this still true now that we have type aliases?
-		// See issue #23225.
-		n := len(p.typList)
-		if p.trackAllTypes {
-			p.record(nil)
-		}
-
-		var embeddeds []types.Type
-		for n := p.int(); n > 0; n-- {
-			p.pos()
-			embeddeds = append(embeddeds, p.typ(parent, nil))
-		}
-
-		t := newInterface(p.methodList(parent, tname), embeddeds)
-		p.interfaceList = append(p.interfaceList, t)
-		if p.trackAllTypes {
-			p.typList[n] = t
-		}
-		return t
-
-	case mapTag:
-		t := new(types.Map)
-		if p.trackAllTypes {
-			p.record(t)
-		}
-
-		key := p.typ(parent, nil)
-		val := p.typ(parent, nil)
-		*t = *types.NewMap(key, val)
-		return t
-
-	case chanTag:
-		t := new(types.Chan)
-		if p.trackAllTypes {
-			p.record(t)
-		}
-
-		dir := chanDir(p.int())
-		val := p.typ(parent, nil)
-		*t = *types.NewChan(dir, val)
-		return t
-
-	default:
-		errorf("unexpected type tag %d", i) // panics
-		panic("unreachable")
-	}
-}
-
-func chanDir(d int) types.ChanDir {
-	// tag values must match the constants in cmd/compile/internal/gc/go.go
-	switch d {
-	case 1 /* Crecv */ :
-		return types.RecvOnly
-	case 2 /* Csend */ :
-		return types.SendOnly
-	case 3 /* Cboth */ :
-		return types.SendRecv
-	default:
-		errorf("unexpected channel dir %d", d)
-		return 0
-	}
-}
-
-func (p *importer) fieldList(parent *types.Package) (fields []*types.Var, tags []string) {
-	if n := p.int(); n > 0 {
-		fields = make([]*types.Var, n)
-		tags = make([]string, n)
-		for i := range fields {
-			fields[i], tags[i] = p.field(parent)
-		}
-	}
-	return
-}
-
-func (p *importer) field(parent *types.Package) (*types.Var, string) {
-	pos := p.pos()
-	pkg, name, alias := p.fieldName(parent)
-	typ := p.typ(parent, nil)
-	tag := p.string()
-
-	anonymous := false
-	if name == "" {
-		// anonymous field - typ must be T or *T and T must be a type name
-		switch typ := deref(typ).(type) {
-		case *types.Basic: // basic types are named types
-			pkg = nil // // objects defined in Universe scope have no package
-			name = typ.Name()
-		case *types.Named:
-			name = typ.Obj().Name()
-		default:
-			errorf("named base type expected")
-		}
-		anonymous = true
-	} else if alias {
-		// anonymous field: we have an explicit name because it's an alias
-		anonymous = true
-	}
-
-	return types.NewField(pos, pkg, name, typ, anonymous), tag
-}
-
-func (p *importer) methodList(parent *types.Package, baseType *types.Named) (methods []*types.Func) {
-	if n := p.int(); n > 0 {
-		methods = make([]*types.Func, n)
-		for i := range methods {
-			methods[i] = p.method(parent, baseType)
-		}
-	}
-	return
-}
-
-func (p *importer) method(parent *types.Package, baseType *types.Named) *types.Func {
-	pos := p.pos()
-	pkg, name, _ := p.fieldName(parent)
-	// If we don't have a baseType, use a nil receiver.
-	// A receiver using the actual interface type (which
-	// we don't know yet) will be filled in when we call
-	// types.Interface.Complete.
-	var recv *types.Var
-	if baseType != nil {
-		recv = types.NewVar(token.NoPos, parent, "", baseType)
-	}
-	params, isddd := p.paramList()
-	result, _ := p.paramList()
-	sig := types.NewSignature(recv, params, result, isddd)
-	return types.NewFunc(pos, pkg, name, sig)
-}
-
-func (p *importer) fieldName(parent *types.Package) (pkg *types.Package, name string, alias bool) {
-	name = p.string()
-	pkg = parent
-	if pkg == nil {
-		// use the imported package instead
-		pkg = p.pkgList[0]
-	}
-	if p.version == 0 && name == "_" {
-		// version 0 didn't export a package for _ fields
-		return
-	}
-	switch name {
-	case "":
-		// 1) field name matches base type name and is exported: nothing to do
-	case "?":
-		// 2) field name matches base type name and is not exported: need package
-		name = ""
-		pkg = p.pkg()
-	case "@":
-		// 3) field name doesn't match type name (alias)
-		name = p.string()
-		alias = true
-		fallthrough
-	default:
-		if !exported(name) {
-			pkg = p.pkg()
-		}
-	}
-	return
-}
-
-func (p *importer) paramList() (*types.Tuple, bool) {
-	n := p.int()
-	if n == 0 {
-		return nil, false
-	}
-	// negative length indicates unnamed parameters
-	named := true
-	if n < 0 {
-		n = -n
-		named = false
-	}
-	// n > 0
-	params := make([]*types.Var, n)
-	isddd := false
-	for i := range params {
-		params[i], isddd = p.param(named)
-	}
-	return types.NewTuple(params...), isddd
-}
-
-func (p *importer) param(named bool) (*types.Var, bool) {
-	t := p.typ(nil, nil)
-	td, isddd := t.(*dddSlice)
-	if isddd {
-		t = types.NewSlice(td.elem)
-	}
-
-	var pkg *types.Package
-	var name string
-	if named {
-		name = p.string()
-		if name == "" {
-			errorf("expected named parameter")
-		}
-		if name != "_" {
-			pkg = p.pkg()
-		}
-		if i := strings.Index(name, "·"); i > 0 {
-			name = name[:i] // cut off gc-specific parameter numbering
-		}
-	}
-
-	// read and discard compiler-specific info
-	p.string()
-
-	return types.NewVar(token.NoPos, pkg, name, t), isddd
-}
-
-func exported(name string) bool {
-	ch, _ := utf8.DecodeRuneInString(name)
-	return unicode.IsUpper(ch)
-}
-
-func (p *importer) value() constant.Value {
-	switch tag := p.tagOrIndex(); tag {
-	case falseTag:
-		return constant.MakeBool(false)
-	case trueTag:
-		return constant.MakeBool(true)
-	case int64Tag:
-		return constant.MakeInt64(p.int64())
-	case floatTag:
-		return p.float()
-	case complexTag:
-		re := p.float()
-		im := p.float()
-		return constant.BinaryOp(re, token.ADD, constant.MakeImag(im))
-	case stringTag:
-		return constant.MakeString(p.string())
-	case unknownTag:
-		return constant.MakeUnknown()
-	default:
-		errorf("unexpected value tag %d", tag) // panics
-		panic("unreachable")
-	}
-}
-
-func (p *importer) float() constant.Value {
-	sign := p.int()
-	if sign == 0 {
-		return constant.MakeInt64(0)
-	}
-
-	exp := p.int()
-	mant := []byte(p.string()) // big endian
-
-	// remove leading 0's if any
-	for len(mant) > 0 && mant[0] == 0 {
-		mant = mant[1:]
-	}
-
-	// convert to little endian
-	// TODO(gri) go/constant should have a more direct conversion function
-	//           (e.g., once it supports a big.Float based implementation)
-	for i, j := 0, len(mant)-1; i < j; i, j = i+1, j-1 {
-		mant[i], mant[j] = mant[j], mant[i]
-	}
-
-	// adjust exponent (constant.MakeFromBytes creates an integer value,
-	// but mant represents the mantissa bits such that 0.5 <= mant < 1.0)
-	exp -= len(mant) << 3
-	if len(mant) > 0 {
-		for msd := mant[len(mant)-1]; msd&0x80 == 0; msd <<= 1 {
-			exp++
-		}
-	}
-
-	x := constant.MakeFromBytes(mant)
-	switch {
-	case exp < 0:
-		d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp))
-		x = constant.BinaryOp(x, token.QUO, d)
-	case exp > 0:
-		x = constant.Shift(x, token.SHL, uint(exp))
-	}
-
-	if sign < 0 {
-		x = constant.UnaryOp(token.SUB, x, 0)
-	}
-	return x
-}
-
-// ----------------------------------------------------------------------------
-// Low-level decoders
-
-func (p *importer) tagOrIndex() int {
-	if p.debugFormat {
-		p.marker('t')
-	}
-
-	return int(p.rawInt64())
-}
-
-func (p *importer) int() int {
-	x := p.int64()
-	if int64(int(x)) != x {
-		errorf("exported integer too large")
-	}
-	return int(x)
-}
-
-func (p *importer) int64() int64 {
-	if p.debugFormat {
-		p.marker('i')
-	}
-
-	return p.rawInt64()
-}
-
-func (p *importer) path() string {
-	if p.debugFormat {
-		p.marker('p')
-	}
-	// if the path was seen before, i is its index (>= 0)
-	// (the empty string is at index 0)
-	i := p.rawInt64()
-	if i >= 0 {
-		return p.pathList[i]
-	}
-	// otherwise, i is the negative path length (< 0)
-	a := make([]string, -i)
-	for n := range a {
-		a[n] = p.string()
-	}
-	s := strings.Join(a, "/")
-	p.pathList = append(p.pathList, s)
-	return s
-}
-
-func (p *importer) string() string {
-	if p.debugFormat {
-		p.marker('s')
-	}
-	// if the string was seen before, i is its index (>= 0)
-	// (the empty string is at index 0)
-	i := p.rawInt64()
-	if i >= 0 {
-		return p.strList[i]
-	}
-	// otherwise, i is the negative string length (< 0)
-	if n := int(-i); n <= cap(p.buf) {
-		p.buf = p.buf[:n]
-	} else {
-		p.buf = make([]byte, n)
-	}
-	for i := range p.buf {
-		p.buf[i] = p.rawByte()
-	}
-	s := string(p.buf)
-	p.strList = append(p.strList, s)
-	return s
-}
-
-func (p *importer) marker(want byte) {
-	if got := p.rawByte(); got != want {
-		errorf("incorrect marker: got %c; want %c (pos = %d)", got, want, p.read)
-	}
-
-	pos := p.read
-	if n := int(p.rawInt64()); n != pos {
-		errorf("incorrect position: got %d; want %d", n, pos)
-	}
-}
-
-// rawInt64 should only be used by low-level decoders.
-func (p *importer) rawInt64() int64 {
-	i, err := binary.ReadVarint(p)
-	if err != nil {
-		errorf("read error: %v", err)
-	}
-	return i
-}
-
-// rawStringln should only be used to read the initial version string.
-func (p *importer) rawStringln(b byte) string {
-	p.buf = p.buf[:0]
-	for b != '\n' {
-		p.buf = append(p.buf, b)
-		b = p.rawByte()
-	}
-	return string(p.buf)
-}
-
-// needed for binary.ReadVarint in rawInt64
-func (p *importer) ReadByte() (byte, error) {
-	return p.rawByte(), nil
-}
-
-// byte is the bottleneck interface for reading p.data.
-// It unescapes '|' 'S' to '$' and '|' '|' to '|'.
-// rawByte should only be used by low-level decoders.
-func (p *importer) rawByte() byte {
-	b := p.data[0]
-	r := 1
-	if b == '|' {
-		b = p.data[1]
-		r = 2
-		switch b {
-		case 'S':
-			b = '$'
-		case '|':
-			// nothing to do
-		default:
-			errorf("unexpected escape sequence in export data")
-		}
-	}
-	p.data = p.data[r:]
-	p.read += r
-	return b
-
-}
-
-// ----------------------------------------------------------------------------
-// Export format
-
-// Tags. Must be < 0.
-const (
-	// Objects
-	packageTag = -(iota + 1)
-	constTag
-	typeTag
-	varTag
-	funcTag
-	endTag
-
-	// Types
-	namedTag
-	arrayTag
-	sliceTag
-	dddTag
-	structTag
-	pointerTag
-	signatureTag
-	interfaceTag
-	mapTag
-	chanTag
-
-	// Values
-	falseTag
-	trueTag
-	int64Tag
-	floatTag
-	fractionTag // not used by gc
-	complexTag
-	stringTag
-	nilTag     // only used by gc (appears in exported inlined function bodies)
-	unknownTag // not used by gc (only appears in packages with errors)
-
-	// Type aliases
-	aliasTag
-)
-
-var predeclOnce sync.Once
-var predecl []types.Type // initialized lazily
-
-func predeclared() []types.Type {
-	predeclOnce.Do(func() {
-		// initialize lazily to be sure that all
-		// elements have been initialized before
-		predecl = []types.Type{ // basic types
-			types.Typ[types.Bool],
-			types.Typ[types.Int],
-			types.Typ[types.Int8],
-			types.Typ[types.Int16],
-			types.Typ[types.Int32],
-			types.Typ[types.Int64],
-			types.Typ[types.Uint],
-			types.Typ[types.Uint8],
-			types.Typ[types.Uint16],
-			types.Typ[types.Uint32],
-			types.Typ[types.Uint64],
-			types.Typ[types.Uintptr],
-			types.Typ[types.Float32],
-			types.Typ[types.Float64],
-			types.Typ[types.Complex64],
-			types.Typ[types.Complex128],
-			types.Typ[types.String],
-
-			// basic type aliases
-			types.Universe.Lookup("byte").Type(),
-			types.Universe.Lookup("rune").Type(),
-
-			// error
-			types.Universe.Lookup("error").Type(),
-
-			// untyped types
-			types.Typ[types.UntypedBool],
-			types.Typ[types.UntypedInt],
-			types.Typ[types.UntypedRune],
-			types.Typ[types.UntypedFloat],
-			types.Typ[types.UntypedComplex],
-			types.Typ[types.UntypedString],
-			types.Typ[types.UntypedNil],
-
-			// package unsafe
-			types.Typ[types.UnsafePointer],
-
-			// invalid type
-			types.Typ[types.Invalid], // only appears in packages with errors
-
-			// used internally by gc; never used by this package or in .a files
-			anyType{},
-		}
-	})
-	return predecl
-}
-
-type anyType struct{}
-
-func (t anyType) Underlying() types.Type { return t }
-func (t anyType) String() string         { return "any" }

+ 0 - 93
vendor/golang.org/x/tools/go/internal/gcimporter/exportdata.go

@@ -1,93 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file is a copy of $GOROOT/src/go/internal/gcimporter/exportdata.go.
-
-// This file implements FindExportData.
-
-package gcimporter
-
-import (
-	"bufio"
-	"fmt"
-	"io"
-	"strconv"
-	"strings"
-)
-
-func readGopackHeader(r *bufio.Reader) (name string, size int, err error) {
-	// See $GOROOT/include/ar.h.
-	hdr := make([]byte, 16+12+6+6+8+10+2)
-	_, err = io.ReadFull(r, hdr)
-	if err != nil {
-		return
-	}
-	// leave for debugging
-	if false {
-		fmt.Printf("header: %s", hdr)
-	}
-	s := strings.TrimSpace(string(hdr[16+12+6+6+8:][:10]))
-	size, err = strconv.Atoi(s)
-	if err != nil || hdr[len(hdr)-2] != '`' || hdr[len(hdr)-1] != '\n' {
-		err = fmt.Errorf("invalid archive header")
-		return
-	}
-	name = strings.TrimSpace(string(hdr[:16]))
-	return
-}
-
-// FindExportData positions the reader r at the beginning of the
-// export data section of an underlying GC-created object/archive
-// file by reading from it. The reader must be positioned at the
-// start of the file before calling this function. The hdr result
-// is the string before the export data, either "$$" or "$$B".
-//
-func FindExportData(r *bufio.Reader) (hdr string, err error) {
-	// Read first line to make sure this is an object file.
-	line, err := r.ReadSlice('\n')
-	if err != nil {
-		err = fmt.Errorf("can't find export data (%v)", err)
-		return
-	}
-
-	if string(line) == "!<arch>\n" {
-		// Archive file. Scan to __.PKGDEF.
-		var name string
-		if name, _, err = readGopackHeader(r); err != nil {
-			return
-		}
-
-		// First entry should be __.PKGDEF.
-		if name != "__.PKGDEF" {
-			err = fmt.Errorf("go archive is missing __.PKGDEF")
-			return
-		}
-
-		// Read first line of __.PKGDEF data, so that line
-		// is once again the first line of the input.
-		if line, err = r.ReadSlice('\n'); err != nil {
-			err = fmt.Errorf("can't find export data (%v)", err)
-			return
-		}
-	}
-
-	// Now at __.PKGDEF in archive or still at beginning of file.
-	// Either way, line should begin with "go object ".
-	if !strings.HasPrefix(string(line), "go object ") {
-		err = fmt.Errorf("not a Go object file")
-		return
-	}
-
-	// Skip over object header to export data.
-	// Begins after first line starting with $$.
-	for line[0] != '$' {
-		if line, err = r.ReadSlice('\n'); err != nil {
-			err = fmt.Errorf("can't find export data (%v)", err)
-			return
-		}
-	}
-	hdr = string(line)
-
-	return
-}

+ 0 - 1078
vendor/golang.org/x/tools/go/internal/gcimporter/gcimporter.go

@@ -1,1078 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file is a modified copy of $GOROOT/src/go/internal/gcimporter/gcimporter.go,
-// but it also contains the original source-based importer code for Go1.6.
-// Once we stop supporting 1.6, we can remove that code.
-
-// Package gcimporter provides various functions for reading
-// gc-generated object files that can be used to implement the
-// Importer interface defined by the Go 1.5 standard library package.
-package gcimporter // import "golang.org/x/tools/go/internal/gcimporter"
-
-import (
-	"bufio"
-	"errors"
-	"fmt"
-	"go/build"
-	"go/constant"
-	"go/token"
-	"go/types"
-	"io"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"sort"
-	"strconv"
-	"strings"
-	"text/scanner"
-)
-
-// debugging/development support
-const debug = false
-
-var pkgExts = [...]string{".a", ".o"}
-
-// FindPkg returns the filename and unique package id for an import
-// path based on package information provided by build.Import (using
-// the build.Default build.Context). A relative srcDir is interpreted
-// relative to the current working directory.
-// If no file was found, an empty filename is returned.
-//
-func FindPkg(path, srcDir string) (filename, id string) {
-	if path == "" {
-		return
-	}
-
-	var noext string
-	switch {
-	default:
-		// "x" -> "$GOPATH/pkg/$GOOS_$GOARCH/x.ext", "x"
-		// Don't require the source files to be present.
-		if abs, err := filepath.Abs(srcDir); err == nil { // see issue 14282
-			srcDir = abs
-		}
-		bp, _ := build.Import(path, srcDir, build.FindOnly|build.AllowBinary)
-		if bp.PkgObj == "" {
-			id = path // make sure we have an id to print in error message
-			return
-		}
-		noext = strings.TrimSuffix(bp.PkgObj, ".a")
-		id = bp.ImportPath
-
-	case build.IsLocalImport(path):
-		// "./x" -> "/this/directory/x.ext", "/this/directory/x"
-		noext = filepath.Join(srcDir, path)
-		id = noext
-
-	case filepath.IsAbs(path):
-		// for completeness only - go/build.Import
-		// does not support absolute imports
-		// "/x" -> "/x.ext", "/x"
-		noext = path
-		id = path
-	}
-
-	if false { // for debugging
-		if path != id {
-			fmt.Printf("%s -> %s\n", path, id)
-		}
-	}
-
-	// try extensions
-	for _, ext := range pkgExts {
-		filename = noext + ext
-		if f, err := os.Stat(filename); err == nil && !f.IsDir() {
-			return
-		}
-	}
-
-	filename = "" // not found
-	return
-}
-
-// ImportData imports a package by reading the gc-generated export data,
-// adds the corresponding package object to the packages map indexed by id,
-// and returns the object.
-//
-// The packages map must contains all packages already imported. The data
-// reader position must be the beginning of the export data section. The
-// filename is only used in error messages.
-//
-// If packages[id] contains the completely imported package, that package
-// can be used directly, and there is no need to call this function (but
-// there is also no harm but for extra time used).
-//
-func ImportData(packages map[string]*types.Package, filename, id string, data io.Reader) (pkg *types.Package, err error) {
-	// support for parser error handling
-	defer func() {
-		switch r := recover().(type) {
-		case nil:
-			// nothing to do
-		case importError:
-			err = r
-		default:
-			panic(r) // internal error
-		}
-	}()
-
-	var p parser
-	p.init(filename, id, data, packages)
-	pkg = p.parseExport()
-
-	return
-}
-
-// Import imports a gc-generated package given its import path and srcDir, adds
-// the corresponding package object to the packages map, and returns the object.
-// The packages map must contain all packages already imported.
-//
-func Import(packages map[string]*types.Package, path, srcDir string, lookup func(path string) (io.ReadCloser, error)) (pkg *types.Package, err error) {
-	var rc io.ReadCloser
-	var filename, id string
-	if lookup != nil {
-		// With custom lookup specified, assume that caller has
-		// converted path to a canonical import path for use in the map.
-		if path == "unsafe" {
-			return types.Unsafe, nil
-		}
-		id = path
-
-		// No need to re-import if the package was imported completely before.
-		if pkg = packages[id]; pkg != nil && pkg.Complete() {
-			return
-		}
-		f, err := lookup(path)
-		if err != nil {
-			return nil, err
-		}
-		rc = f
-	} else {
-		filename, id = FindPkg(path, srcDir)
-		if filename == "" {
-			if path == "unsafe" {
-				return types.Unsafe, nil
-			}
-			return nil, fmt.Errorf("can't find import: %q", id)
-		}
-
-		// no need to re-import if the package was imported completely before
-		if pkg = packages[id]; pkg != nil && pkg.Complete() {
-			return
-		}
-
-		// open file
-		f, err := os.Open(filename)
-		if err != nil {
-			return nil, err
-		}
-		defer func() {
-			if err != nil {
-				// add file name to error
-				err = fmt.Errorf("%s: %v", filename, err)
-			}
-		}()
-		rc = f
-	}
-	defer rc.Close()
-
-	var hdr string
-	buf := bufio.NewReader(rc)
-	if hdr, err = FindExportData(buf); err != nil {
-		return
-	}
-
-	switch hdr {
-	case "$$\n":
-		// Work-around if we don't have a filename; happens only if lookup != nil.
-		// Either way, the filename is only needed for importer error messages, so
-		// this is fine.
-		if filename == "" {
-			filename = path
-		}
-		return ImportData(packages, filename, id, buf)
-
-	case "$$B\n":
-		var data []byte
-		data, err = ioutil.ReadAll(buf)
-		if err != nil {
-			break
-		}
-
-		// TODO(gri): allow clients of go/importer to provide a FileSet.
-		// Or, define a new standard go/types/gcexportdata package.
-		fset := token.NewFileSet()
-
-		// The indexed export format starts with an 'i'; the older
-		// binary export format starts with a 'c', 'd', or 'v'
-		// (from "version"). Select appropriate importer.
-		if len(data) > 0 && data[0] == 'i' {
-			_, pkg, err = IImportData(fset, packages, data[1:], id)
-		} else {
-			_, pkg, err = BImportData(fset, packages, data, id)
-		}
-
-	default:
-		err = fmt.Errorf("unknown export data header: %q", hdr)
-	}
-
-	return
-}
-
-// ----------------------------------------------------------------------------
-// Parser
-
-// TODO(gri) Imported objects don't have position information.
-//           Ideally use the debug table line info; alternatively
-//           create some fake position (or the position of the
-//           import). That way error messages referring to imported
-//           objects can print meaningful information.
-
-// parser parses the exports inside a gc compiler-produced
-// object/archive file and populates its scope with the results.
-type parser struct {
-	scanner    scanner.Scanner
-	tok        rune                      // current token
-	lit        string                    // literal string; only valid for Ident, Int, String tokens
-	id         string                    // package id of imported package
-	sharedPkgs map[string]*types.Package // package id -> package object (across importer)
-	localPkgs  map[string]*types.Package // package id -> package object (just this package)
-}
-
-func (p *parser) init(filename, id string, src io.Reader, packages map[string]*types.Package) {
-	p.scanner.Init(src)
-	p.scanner.Error = func(_ *scanner.Scanner, msg string) { p.error(msg) }
-	p.scanner.Mode = scanner.ScanIdents | scanner.ScanInts | scanner.ScanChars | scanner.ScanStrings | scanner.ScanComments | scanner.SkipComments
-	p.scanner.Whitespace = 1<<'\t' | 1<<' '
-	p.scanner.Filename = filename // for good error messages
-	p.next()
-	p.id = id
-	p.sharedPkgs = packages
-	if debug {
-		// check consistency of packages map
-		for _, pkg := range packages {
-			if pkg.Name() == "" {
-				fmt.Printf("no package name for %s\n", pkg.Path())
-			}
-		}
-	}
-}
-
-func (p *parser) next() {
-	p.tok = p.scanner.Scan()
-	switch p.tok {
-	case scanner.Ident, scanner.Int, scanner.Char, scanner.String, '·':
-		p.lit = p.scanner.TokenText()
-	default:
-		p.lit = ""
-	}
-	if debug {
-		fmt.Printf("%s: %q -> %q\n", scanner.TokenString(p.tok), p.scanner.TokenText(), p.lit)
-	}
-}
-
-func declTypeName(pkg *types.Package, name string) *types.TypeName {
-	scope := pkg.Scope()
-	if obj := scope.Lookup(name); obj != nil {
-		return obj.(*types.TypeName)
-	}
-	obj := types.NewTypeName(token.NoPos, pkg, name, nil)
-	// a named type may be referred to before the underlying type
-	// is known - set it up
-	types.NewNamed(obj, nil, nil)
-	scope.Insert(obj)
-	return obj
-}
-
-// ----------------------------------------------------------------------------
-// Error handling
-
-// Internal errors are boxed as importErrors.
-type importError struct {
-	pos scanner.Position
-	err error
-}
-
-func (e importError) Error() string {
-	return fmt.Sprintf("import error %s (byte offset = %d): %s", e.pos, e.pos.Offset, e.err)
-}
-
-func (p *parser) error(err interface{}) {
-	if s, ok := err.(string); ok {
-		err = errors.New(s)
-	}
-	// panic with a runtime.Error if err is not an error
-	panic(importError{p.scanner.Pos(), err.(error)})
-}
-
-func (p *parser) errorf(format string, args ...interface{}) {
-	p.error(fmt.Sprintf(format, args...))
-}
-
-func (p *parser) expect(tok rune) string {
-	lit := p.lit
-	if p.tok != tok {
-		p.errorf("expected %s, got %s (%s)", scanner.TokenString(tok), scanner.TokenString(p.tok), lit)
-	}
-	p.next()
-	return lit
-}
-
-func (p *parser) expectSpecial(tok string) {
-	sep := 'x' // not white space
-	i := 0
-	for i < len(tok) && p.tok == rune(tok[i]) && sep > ' ' {
-		sep = p.scanner.Peek() // if sep <= ' ', there is white space before the next token
-		p.next()
-		i++
-	}
-	if i < len(tok) {
-		p.errorf("expected %q, got %q", tok, tok[0:i])
-	}
-}
-
-func (p *parser) expectKeyword(keyword string) {
-	lit := p.expect(scanner.Ident)
-	if lit != keyword {
-		p.errorf("expected keyword %s, got %q", keyword, lit)
-	}
-}
-
-// ----------------------------------------------------------------------------
-// Qualified and unqualified names
-
-// PackageId = string_lit .
-//
-func (p *parser) parsePackageID() string {
-	id, err := strconv.Unquote(p.expect(scanner.String))
-	if err != nil {
-		p.error(err)
-	}
-	// id == "" stands for the imported package id
-	// (only known at time of package installation)
-	if id == "" {
-		id = p.id
-	}
-	return id
-}
-
-// PackageName = ident .
-//
-func (p *parser) parsePackageName() string {
-	return p.expect(scanner.Ident)
-}
-
-// dotIdentifier = ( ident | '·' ) { ident | int | '·' } .
-func (p *parser) parseDotIdent() string {
-	ident := ""
-	if p.tok != scanner.Int {
-		sep := 'x' // not white space
-		for (p.tok == scanner.Ident || p.tok == scanner.Int || p.tok == '·') && sep > ' ' {
-			ident += p.lit
-			sep = p.scanner.Peek() // if sep <= ' ', there is white space before the next token
-			p.next()
-		}
-	}
-	if ident == "" {
-		p.expect(scanner.Ident) // use expect() for error handling
-	}
-	return ident
-}
-
-// QualifiedName = "@" PackageId "." ( "?" | dotIdentifier ) .
-//
-func (p *parser) parseQualifiedName() (id, name string) {
-	p.expect('@')
-	id = p.parsePackageID()
-	p.expect('.')
-	// Per rev f280b8a485fd (10/2/2013), qualified names may be used for anonymous fields.
-	if p.tok == '?' {
-		p.next()
-	} else {
-		name = p.parseDotIdent()
-	}
-	return
-}
-
-// getPkg returns the package for a given id. If the package is
-// not found, create the package and add it to the p.localPkgs
-// and p.sharedPkgs maps. name is the (expected) name of the
-// package. If name == "", the package name is expected to be
-// set later via an import clause in the export data.
-//
-// id identifies a package, usually by a canonical package path like
-// "encoding/json" but possibly by a non-canonical import path like
-// "./json".
-//
-func (p *parser) getPkg(id, name string) *types.Package {
-	// package unsafe is not in the packages maps - handle explicitly
-	if id == "unsafe" {
-		return types.Unsafe
-	}
-
-	pkg := p.localPkgs[id]
-	if pkg == nil {
-		// first import of id from this package
-		pkg = p.sharedPkgs[id]
-		if pkg == nil {
-			// first import of id by this importer;
-			// add (possibly unnamed) pkg to shared packages
-			pkg = types.NewPackage(id, name)
-			p.sharedPkgs[id] = pkg
-		}
-		// add (possibly unnamed) pkg to local packages
-		if p.localPkgs == nil {
-			p.localPkgs = make(map[string]*types.Package)
-		}
-		p.localPkgs[id] = pkg
-	} else if name != "" {
-		// package exists already and we have an expected package name;
-		// make sure names match or set package name if necessary
-		if pname := pkg.Name(); pname == "" {
-			pkg.SetName(name)
-		} else if pname != name {
-			p.errorf("%s package name mismatch: %s (given) vs %s (expected)", id, pname, name)
-		}
-	}
-	return pkg
-}
-
-// parseExportedName is like parseQualifiedName, but
-// the package id is resolved to an imported *types.Package.
-//
-func (p *parser) parseExportedName() (pkg *types.Package, name string) {
-	id, name := p.parseQualifiedName()
-	pkg = p.getPkg(id, "")
-	return
-}
-
-// ----------------------------------------------------------------------------
-// Types
-
-// BasicType = identifier .
-//
-func (p *parser) parseBasicType() types.Type {
-	id := p.expect(scanner.Ident)
-	obj := types.Universe.Lookup(id)
-	if obj, ok := obj.(*types.TypeName); ok {
-		return obj.Type()
-	}
-	p.errorf("not a basic type: %s", id)
-	return nil
-}
-
-// ArrayType = "[" int_lit "]" Type .
-//
-func (p *parser) parseArrayType(parent *types.Package) types.Type {
-	// "[" already consumed and lookahead known not to be "]"
-	lit := p.expect(scanner.Int)
-	p.expect(']')
-	elem := p.parseType(parent)
-	n, err := strconv.ParseInt(lit, 10, 64)
-	if err != nil {
-		p.error(err)
-	}
-	return types.NewArray(elem, n)
-}
-
-// MapType = "map" "[" Type "]" Type .
-//
-func (p *parser) parseMapType(parent *types.Package) types.Type {
-	p.expectKeyword("map")
-	p.expect('[')
-	key := p.parseType(parent)
-	p.expect(']')
-	elem := p.parseType(parent)
-	return types.NewMap(key, elem)
-}
-
-// Name = identifier | "?" | QualifiedName .
-//
-// For unqualified and anonymous names, the returned package is the parent
-// package unless parent == nil, in which case the returned package is the
-// package being imported. (The parent package is not nil if the name
-// is an unqualified struct field or interface method name belonging to a
-// type declared in another package.)
-//
-// For qualified names, the returned package is nil (and not created if
-// it doesn't exist yet) unless materializePkg is set (which creates an
-// unnamed package with valid package path). In the latter case, a
-// subsequent import clause is expected to provide a name for the package.
-//
-func (p *parser) parseName(parent *types.Package, materializePkg bool) (pkg *types.Package, name string) {
-	pkg = parent
-	if pkg == nil {
-		pkg = p.sharedPkgs[p.id]
-	}
-	switch p.tok {
-	case scanner.Ident:
-		name = p.lit
-		p.next()
-	case '?':
-		// anonymous
-		p.next()
-	case '@':
-		// exported name prefixed with package path
-		pkg = nil
-		var id string
-		id, name = p.parseQualifiedName()
-		if materializePkg {
-			pkg = p.getPkg(id, "")
-		}
-	default:
-		p.error("name expected")
-	}
-	return
-}
-
-func deref(typ types.Type) types.Type {
-	if p, _ := typ.(*types.Pointer); p != nil {
-		return p.Elem()
-	}
-	return typ
-}
-
-// Field = Name Type [ string_lit ] .
-//
-func (p *parser) parseField(parent *types.Package) (*types.Var, string) {
-	pkg, name := p.parseName(parent, true)
-
-	if name == "_" {
-		// Blank fields should be package-qualified because they
-		// are unexported identifiers, but gc does not qualify them.
-		// Assuming that the ident belongs to the current package
-		// causes types to change during re-exporting, leading
-		// to spurious "can't assign A to B" errors from go/types.
-		// As a workaround, pretend all blank fields belong
-		// to the same unique dummy package.
-		const blankpkg = "<_>"
-		pkg = p.getPkg(blankpkg, blankpkg)
-	}
-
-	typ := p.parseType(parent)
-	anonymous := false
-	if name == "" {
-		// anonymous field - typ must be T or *T and T must be a type name
-		switch typ := deref(typ).(type) {
-		case *types.Basic: // basic types are named types
-			pkg = nil // objects defined in Universe scope have no package
-			name = typ.Name()
-		case *types.Named:
-			name = typ.Obj().Name()
-		default:
-			p.errorf("anonymous field expected")
-		}
-		anonymous = true
-	}
-	tag := ""
-	if p.tok == scanner.String {
-		s := p.expect(scanner.String)
-		var err error
-		tag, err = strconv.Unquote(s)
-		if err != nil {
-			p.errorf("invalid struct tag %s: %s", s, err)
-		}
-	}
-	return types.NewField(token.NoPos, pkg, name, typ, anonymous), tag
-}
-
-// StructType = "struct" "{" [ FieldList ] "}" .
-// FieldList  = Field { ";" Field } .
-//
-func (p *parser) parseStructType(parent *types.Package) types.Type {
-	var fields []*types.Var
-	var tags []string
-
-	p.expectKeyword("struct")
-	p.expect('{')
-	for i := 0; p.tok != '}' && p.tok != scanner.EOF; i++ {
-		if i > 0 {
-			p.expect(';')
-		}
-		fld, tag := p.parseField(parent)
-		if tag != "" && tags == nil {
-			tags = make([]string, i)
-		}
-		if tags != nil {
-			tags = append(tags, tag)
-		}
-		fields = append(fields, fld)
-	}
-	p.expect('}')
-
-	return types.NewStruct(fields, tags)
-}
-
-// Parameter = ( identifier | "?" ) [ "..." ] Type [ string_lit ] .
-//
-func (p *parser) parseParameter() (par *types.Var, isVariadic bool) {
-	_, name := p.parseName(nil, false)
-	// remove gc-specific parameter numbering
-	if i := strings.Index(name, "·"); i >= 0 {
-		name = name[:i]
-	}
-	if p.tok == '.' {
-		p.expectSpecial("...")
-		isVariadic = true
-	}
-	typ := p.parseType(nil)
-	if isVariadic {
-		typ = types.NewSlice(typ)
-	}
-	// ignore argument tag (e.g. "noescape")
-	if p.tok == scanner.String {
-		p.next()
-	}
-	// TODO(gri) should we provide a package?
-	par = types.NewVar(token.NoPos, nil, name, typ)
-	return
-}
-
-// Parameters    = "(" [ ParameterList ] ")" .
-// ParameterList = { Parameter "," } Parameter .
-//
-func (p *parser) parseParameters() (list []*types.Var, isVariadic bool) {
-	p.expect('(')
-	for p.tok != ')' && p.tok != scanner.EOF {
-		if len(list) > 0 {
-			p.expect(',')
-		}
-		par, variadic := p.parseParameter()
-		list = append(list, par)
-		if variadic {
-			if isVariadic {
-				p.error("... not on final argument")
-			}
-			isVariadic = true
-		}
-	}
-	p.expect(')')
-
-	return
-}
-
-// Signature = Parameters [ Result ] .
-// Result    = Type | Parameters .
-//
-func (p *parser) parseSignature(recv *types.Var) *types.Signature {
-	params, isVariadic := p.parseParameters()
-
-	// optional result type
-	var results []*types.Var
-	if p.tok == '(' {
-		var variadic bool
-		results, variadic = p.parseParameters()
-		if variadic {
-			p.error("... not permitted on result type")
-		}
-	}
-
-	return types.NewSignature(recv, types.NewTuple(params...), types.NewTuple(results...), isVariadic)
-}
-
-// InterfaceType = "interface" "{" [ MethodList ] "}" .
-// MethodList    = Method { ";" Method } .
-// Method        = Name Signature .
-//
-// The methods of embedded interfaces are always "inlined"
-// by the compiler and thus embedded interfaces are never
-// visible in the export data.
-//
-func (p *parser) parseInterfaceType(parent *types.Package) types.Type {
-	var methods []*types.Func
-
-	p.expectKeyword("interface")
-	p.expect('{')
-	for i := 0; p.tok != '}' && p.tok != scanner.EOF; i++ {
-		if i > 0 {
-			p.expect(';')
-		}
-		pkg, name := p.parseName(parent, true)
-		sig := p.parseSignature(nil)
-		methods = append(methods, types.NewFunc(token.NoPos, pkg, name, sig))
-	}
-	p.expect('}')
-
-	// Complete requires the type's embedded interfaces to be fully defined,
-	// but we do not define any
-	return newInterface(methods, nil).Complete()
-}
-
-// ChanType = ( "chan" [ "<-" ] | "<-" "chan" ) Type .
-//
-func (p *parser) parseChanType(parent *types.Package) types.Type {
-	dir := types.SendRecv
-	if p.tok == scanner.Ident {
-		p.expectKeyword("chan")
-		if p.tok == '<' {
-			p.expectSpecial("<-")
-			dir = types.SendOnly
-		}
-	} else {
-		p.expectSpecial("<-")
-		p.expectKeyword("chan")
-		dir = types.RecvOnly
-	}
-	elem := p.parseType(parent)
-	return types.NewChan(dir, elem)
-}
-
-// Type =
-//	BasicType | TypeName | ArrayType | SliceType | StructType |
-//      PointerType | FuncType | InterfaceType | MapType | ChanType |
-//      "(" Type ")" .
-//
-// BasicType   = ident .
-// TypeName    = ExportedName .
-// SliceType   = "[" "]" Type .
-// PointerType = "*" Type .
-// FuncType    = "func" Signature .
-//
-func (p *parser) parseType(parent *types.Package) types.Type {
-	switch p.tok {
-	case scanner.Ident:
-		switch p.lit {
-		default:
-			return p.parseBasicType()
-		case "struct":
-			return p.parseStructType(parent)
-		case "func":
-			// FuncType
-			p.next()
-			return p.parseSignature(nil)
-		case "interface":
-			return p.parseInterfaceType(parent)
-		case "map":
-			return p.parseMapType(parent)
-		case "chan":
-			return p.parseChanType(parent)
-		}
-	case '@':
-		// TypeName
-		pkg, name := p.parseExportedName()
-		return declTypeName(pkg, name).Type()
-	case '[':
-		p.next() // look ahead
-		if p.tok == ']' {
-			// SliceType
-			p.next()
-			return types.NewSlice(p.parseType(parent))
-		}
-		return p.parseArrayType(parent)
-	case '*':
-		// PointerType
-		p.next()
-		return types.NewPointer(p.parseType(parent))
-	case '<':
-		return p.parseChanType(parent)
-	case '(':
-		// "(" Type ")"
-		p.next()
-		typ := p.parseType(parent)
-		p.expect(')')
-		return typ
-	}
-	p.errorf("expected type, got %s (%q)", scanner.TokenString(p.tok), p.lit)
-	return nil
-}
-
-// ----------------------------------------------------------------------------
-// Declarations
-
-// ImportDecl = "import" PackageName PackageId .
-//
-func (p *parser) parseImportDecl() {
-	p.expectKeyword("import")
-	name := p.parsePackageName()
-	p.getPkg(p.parsePackageID(), name)
-}
-
-// int_lit = [ "+" | "-" ] { "0" ... "9" } .
-//
-func (p *parser) parseInt() string {
-	s := ""
-	switch p.tok {
-	case '-':
-		s = "-"
-		p.next()
-	case '+':
-		p.next()
-	}
-	return s + p.expect(scanner.Int)
-}
-
-// number = int_lit [ "p" int_lit ] .
-//
-func (p *parser) parseNumber() (typ *types.Basic, val constant.Value) {
-	// mantissa
-	mant := constant.MakeFromLiteral(p.parseInt(), token.INT, 0)
-	if mant == nil {
-		panic("invalid mantissa")
-	}
-
-	if p.lit == "p" {
-		// exponent (base 2)
-		p.next()
-		exp, err := strconv.ParseInt(p.parseInt(), 10, 0)
-		if err != nil {
-			p.error(err)
-		}
-		if exp < 0 {
-			denom := constant.MakeInt64(1)
-			denom = constant.Shift(denom, token.SHL, uint(-exp))
-			typ = types.Typ[types.UntypedFloat]
-			val = constant.BinaryOp(mant, token.QUO, denom)
-			return
-		}
-		if exp > 0 {
-			mant = constant.Shift(mant, token.SHL, uint(exp))
-		}
-		typ = types.Typ[types.UntypedFloat]
-		val = mant
-		return
-	}
-
-	typ = types.Typ[types.UntypedInt]
-	val = mant
-	return
-}
-
-// ConstDecl   = "const" ExportedName [ Type ] "=" Literal .
-// Literal     = bool_lit | int_lit | float_lit | complex_lit | rune_lit | string_lit .
-// bool_lit    = "true" | "false" .
-// complex_lit = "(" float_lit "+" float_lit "i" ")" .
-// rune_lit    = "(" int_lit "+" int_lit ")" .
-// string_lit  = `"` { unicode_char } `"` .
-//
-func (p *parser) parseConstDecl() {
-	p.expectKeyword("const")
-	pkg, name := p.parseExportedName()
-
-	var typ0 types.Type
-	if p.tok != '=' {
-		// constant types are never structured - no need for parent type
-		typ0 = p.parseType(nil)
-	}
-
-	p.expect('=')
-	var typ types.Type
-	var val constant.Value
-	switch p.tok {
-	case scanner.Ident:
-		// bool_lit
-		if p.lit != "true" && p.lit != "false" {
-			p.error("expected true or false")
-		}
-		typ = types.Typ[types.UntypedBool]
-		val = constant.MakeBool(p.lit == "true")
-		p.next()
-
-	case '-', scanner.Int:
-		// int_lit
-		typ, val = p.parseNumber()
-
-	case '(':
-		// complex_lit or rune_lit
-		p.next()
-		if p.tok == scanner.Char {
-			p.next()
-			p.expect('+')
-			typ = types.Typ[types.UntypedRune]
-			_, val = p.parseNumber()
-			p.expect(')')
-			break
-		}
-		_, re := p.parseNumber()
-		p.expect('+')
-		_, im := p.parseNumber()
-		p.expectKeyword("i")
-		p.expect(')')
-		typ = types.Typ[types.UntypedComplex]
-		val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im))
-
-	case scanner.Char:
-		// rune_lit
-		typ = types.Typ[types.UntypedRune]
-		val = constant.MakeFromLiteral(p.lit, token.CHAR, 0)
-		p.next()
-
-	case scanner.String:
-		// string_lit
-		typ = types.Typ[types.UntypedString]
-		val = constant.MakeFromLiteral(p.lit, token.STRING, 0)
-		p.next()
-
-	default:
-		p.errorf("expected literal got %s", scanner.TokenString(p.tok))
-	}
-
-	if typ0 == nil {
-		typ0 = typ
-	}
-
-	pkg.Scope().Insert(types.NewConst(token.NoPos, pkg, name, typ0, val))
-}
-
-// TypeDecl = "type" ExportedName Type .
-//
-func (p *parser) parseTypeDecl() {
-	p.expectKeyword("type")
-	pkg, name := p.parseExportedName()
-	obj := declTypeName(pkg, name)
-
-	// The type object may have been imported before and thus already
-	// have a type associated with it. We still need to parse the type
-	// structure, but throw it away if the object already has a type.
-	// This ensures that all imports refer to the same type object for
-	// a given type declaration.
-	typ := p.parseType(pkg)
-
-	if name := obj.Type().(*types.Named); name.Underlying() == nil {
-		name.SetUnderlying(typ)
-	}
-}
-
-// VarDecl = "var" ExportedName Type .
-//
-func (p *parser) parseVarDecl() {
-	p.expectKeyword("var")
-	pkg, name := p.parseExportedName()
-	typ := p.parseType(pkg)
-	pkg.Scope().Insert(types.NewVar(token.NoPos, pkg, name, typ))
-}
-
-// Func = Signature [ Body ] .
-// Body = "{" ... "}" .
-//
-func (p *parser) parseFunc(recv *types.Var) *types.Signature {
-	sig := p.parseSignature(recv)
-	if p.tok == '{' {
-		p.next()
-		for i := 1; i > 0; p.next() {
-			switch p.tok {
-			case '{':
-				i++
-			case '}':
-				i--
-			}
-		}
-	}
-	return sig
-}
-
-// MethodDecl = "func" Receiver Name Func .
-// Receiver   = "(" ( identifier | "?" ) [ "*" ] ExportedName ")" .
-//
-func (p *parser) parseMethodDecl() {
-	// "func" already consumed
-	p.expect('(')
-	recv, _ := p.parseParameter() // receiver
-	p.expect(')')
-
-	// determine receiver base type object
-	base := deref(recv.Type()).(*types.Named)
-
-	// parse method name, signature, and possibly inlined body
-	_, name := p.parseName(nil, false)
-	sig := p.parseFunc(recv)
-
-	// methods always belong to the same package as the base type object
-	pkg := base.Obj().Pkg()
-
-	// add method to type unless type was imported before
-	// and method exists already
-	// TODO(gri) This leads to a quadratic algorithm - ok for now because method counts are small.
-	base.AddMethod(types.NewFunc(token.NoPos, pkg, name, sig))
-}
-
-// FuncDecl = "func" ExportedName Func .
-//
-func (p *parser) parseFuncDecl() {
-	// "func" already consumed
-	pkg, name := p.parseExportedName()
-	typ := p.parseFunc(nil)
-	pkg.Scope().Insert(types.NewFunc(token.NoPos, pkg, name, typ))
-}
-
-// Decl = [ ImportDecl | ConstDecl | TypeDecl | VarDecl | FuncDecl | MethodDecl ] "\n" .
-//
-func (p *parser) parseDecl() {
-	if p.tok == scanner.Ident {
-		switch p.lit {
-		case "import":
-			p.parseImportDecl()
-		case "const":
-			p.parseConstDecl()
-		case "type":
-			p.parseTypeDecl()
-		case "var":
-			p.parseVarDecl()
-		case "func":
-			p.next() // look ahead
-			if p.tok == '(' {
-				p.parseMethodDecl()
-			} else {
-				p.parseFuncDecl()
-			}
-		}
-	}
-	p.expect('\n')
-}
-
-// ----------------------------------------------------------------------------
-// Export
-
-// Export        = "PackageClause { Decl } "$$" .
-// PackageClause = "package" PackageName [ "safe" ] "\n" .
-//
-func (p *parser) parseExport() *types.Package {
-	p.expectKeyword("package")
-	name := p.parsePackageName()
-	if p.tok == scanner.Ident && p.lit == "safe" {
-		// package was compiled with -u option - ignore
-		p.next()
-	}
-	p.expect('\n')
-
-	pkg := p.getPkg(p.id, name)
-
-	for p.tok != '$' && p.tok != scanner.EOF {
-		p.parseDecl()
-	}
-
-	if ch := p.scanner.Peek(); p.tok != '$' || ch != '$' {
-		// don't call next()/expect() since reading past the
-		// export data may cause scanner errors (e.g. NUL chars)
-		p.errorf("expected '$$', got %s %c", scanner.TokenString(p.tok), ch)
-	}
-
-	if n := p.scanner.ErrorCount; n != 0 {
-		p.errorf("expected no scanner errors, got %d", n)
-	}
-
-	// Record all locally referenced packages as imports.
-	var imports []*types.Package
-	for id, pkg2 := range p.localPkgs {
-		if pkg2.Name() == "" {
-			p.errorf("%s package has no name", id)
-		}
-		if id == p.id {
-			continue // avoid self-edge
-		}
-		imports = append(imports, pkg2)
-	}
-	sort.Sort(byPath(imports))
-	pkg.SetImports(imports)
-
-	// package was imported completely and without errors
-	pkg.MarkComplete()
-
-	return pkg
-}
-
-type byPath []*types.Package
-
-func (a byPath) Len() int           { return len(a) }
-func (a byPath) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
-func (a byPath) Less(i, j int) bool { return a[i].Path() < a[j].Path() }

+ 0 - 781
vendor/golang.org/x/tools/go/internal/gcimporter/iexport.go

@@ -1,781 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Indexed binary package export.
-// This file was derived from $GOROOT/src/cmd/compile/internal/gc/iexport.go;
-// see that file for specification of the format.
-
-package gcimporter
-
-import (
-	"bytes"
-	"encoding/binary"
-	"go/ast"
-	"go/constant"
-	"go/token"
-	"go/types"
-	"io"
-	"math/big"
-	"reflect"
-	"sort"
-)
-
-// Current indexed export format version. Increase with each format change.
-// 0: Go1.11 encoding
-const iexportVersion = 0
-
-// Current bundled export format version. Increase with each format change.
-// 0: initial implementation
-const bundleVersion = 0
-
-// IExportData writes indexed export data for pkg to out.
-//
-// If no file set is provided, position info will be missing.
-// The package path of the top-level package will not be recorded,
-// so that calls to IImportData can override with a provided package path.
-func IExportData(out io.Writer, fset *token.FileSet, pkg *types.Package) error {
-	return iexportCommon(out, fset, false, []*types.Package{pkg})
-}
-
-// IExportBundle writes an indexed export bundle for pkgs to out.
-func IExportBundle(out io.Writer, fset *token.FileSet, pkgs []*types.Package) error {
-	return iexportCommon(out, fset, true, pkgs)
-}
-
-func iexportCommon(out io.Writer, fset *token.FileSet, bundle bool, pkgs []*types.Package) (err error) {
-	defer func() {
-		if e := recover(); e != nil {
-			if ierr, ok := e.(internalError); ok {
-				err = ierr
-				return
-			}
-			// Not an internal error; panic again.
-			panic(e)
-		}
-	}()
-
-	p := iexporter{
-		fset:        fset,
-		allPkgs:     map[*types.Package]bool{},
-		stringIndex: map[string]uint64{},
-		declIndex:   map[types.Object]uint64{},
-		typIndex:    map[types.Type]uint64{},
-	}
-	if !bundle {
-		p.localpkg = pkgs[0]
-	}
-
-	for i, pt := range predeclared() {
-		p.typIndex[pt] = uint64(i)
-	}
-	if len(p.typIndex) > predeclReserved {
-		panic(internalErrorf("too many predeclared types: %d > %d", len(p.typIndex), predeclReserved))
-	}
-
-	// Initialize work queue with exported declarations.
-	for _, pkg := range pkgs {
-		scope := pkg.Scope()
-		for _, name := range scope.Names() {
-			if ast.IsExported(name) {
-				p.pushDecl(scope.Lookup(name))
-			}
-		}
-
-		if bundle {
-			// Ensure pkg and its imports are included in the index.
-			p.allPkgs[pkg] = true
-			for _, imp := range pkg.Imports() {
-				p.allPkgs[imp] = true
-			}
-		}
-	}
-
-	// Loop until no more work.
-	for !p.declTodo.empty() {
-		p.doDecl(p.declTodo.popHead())
-	}
-
-	// Append indices to data0 section.
-	dataLen := uint64(p.data0.Len())
-	w := p.newWriter()
-	w.writeIndex(p.declIndex)
-
-	if bundle {
-		w.uint64(uint64(len(pkgs)))
-		for _, pkg := range pkgs {
-			w.pkg(pkg)
-			imps := pkg.Imports()
-			w.uint64(uint64(len(imps)))
-			for _, imp := range imps {
-				w.pkg(imp)
-			}
-		}
-	}
-	w.flush()
-
-	// Assemble header.
-	var hdr intWriter
-	if bundle {
-		hdr.uint64(bundleVersion)
-	}
-	hdr.uint64(iexportVersion)
-	hdr.uint64(uint64(p.strings.Len()))
-	hdr.uint64(dataLen)
-
-	// Flush output.
-	io.Copy(out, &hdr)
-	io.Copy(out, &p.strings)
-	io.Copy(out, &p.data0)
-
-	return nil
-}
-
-// writeIndex writes out an object index. mainIndex indicates whether
-// we're writing out the main index, which is also read by
-// non-compiler tools and includes a complete package description
-// (i.e., name and height).
-func (w *exportWriter) writeIndex(index map[types.Object]uint64) {
-	// Build a map from packages to objects from that package.
-	pkgObjs := map[*types.Package][]types.Object{}
-
-	// For the main index, make sure to include every package that
-	// we reference, even if we're not exporting (or reexporting)
-	// any symbols from it.
-	if w.p.localpkg != nil {
-		pkgObjs[w.p.localpkg] = nil
-	}
-	for pkg := range w.p.allPkgs {
-		pkgObjs[pkg] = nil
-	}
-
-	for obj := range index {
-		pkgObjs[obj.Pkg()] = append(pkgObjs[obj.Pkg()], obj)
-	}
-
-	var pkgs []*types.Package
-	for pkg, objs := range pkgObjs {
-		pkgs = append(pkgs, pkg)
-
-		sort.Slice(objs, func(i, j int) bool {
-			return objs[i].Name() < objs[j].Name()
-		})
-	}
-
-	sort.Slice(pkgs, func(i, j int) bool {
-		return w.exportPath(pkgs[i]) < w.exportPath(pkgs[j])
-	})
-
-	w.uint64(uint64(len(pkgs)))
-	for _, pkg := range pkgs {
-		w.string(w.exportPath(pkg))
-		w.string(pkg.Name())
-		w.uint64(uint64(0)) // package height is not needed for go/types
-
-		objs := pkgObjs[pkg]
-		w.uint64(uint64(len(objs)))
-		for _, obj := range objs {
-			w.string(obj.Name())
-			w.uint64(index[obj])
-		}
-	}
-}
-
-type iexporter struct {
-	fset *token.FileSet
-	out  *bytes.Buffer
-
-	localpkg *types.Package
-
-	// allPkgs tracks all packages that have been referenced by
-	// the export data, so we can ensure to include them in the
-	// main index.
-	allPkgs map[*types.Package]bool
-
-	declTodo objQueue
-
-	strings     intWriter
-	stringIndex map[string]uint64
-
-	data0     intWriter
-	declIndex map[types.Object]uint64
-	typIndex  map[types.Type]uint64
-}
-
-// stringOff returns the offset of s within the string section.
-// If not already present, it's added to the end.
-func (p *iexporter) stringOff(s string) uint64 {
-	off, ok := p.stringIndex[s]
-	if !ok {
-		off = uint64(p.strings.Len())
-		p.stringIndex[s] = off
-
-		p.strings.uint64(uint64(len(s)))
-		p.strings.WriteString(s)
-	}
-	return off
-}
-
-// pushDecl adds n to the declaration work queue, if not already present.
-func (p *iexporter) pushDecl(obj types.Object) {
-	// Package unsafe is known to the compiler and predeclared.
-	assert(obj.Pkg() != types.Unsafe)
-
-	if _, ok := p.declIndex[obj]; ok {
-		return
-	}
-
-	p.declIndex[obj] = ^uint64(0) // mark n present in work queue
-	p.declTodo.pushTail(obj)
-}
-
-// exportWriter handles writing out individual data section chunks.
-type exportWriter struct {
-	p *iexporter
-
-	data     intWriter
-	currPkg  *types.Package
-	prevFile string
-	prevLine int64
-}
-
-func (w *exportWriter) exportPath(pkg *types.Package) string {
-	if pkg == w.p.localpkg {
-		return ""
-	}
-	return pkg.Path()
-}
-
-func (p *iexporter) doDecl(obj types.Object) {
-	w := p.newWriter()
-	w.setPkg(obj.Pkg(), false)
-
-	switch obj := obj.(type) {
-	case *types.Var:
-		w.tag('V')
-		w.pos(obj.Pos())
-		w.typ(obj.Type(), obj.Pkg())
-
-	case *types.Func:
-		sig, _ := obj.Type().(*types.Signature)
-		if sig.Recv() != nil {
-			panic(internalErrorf("unexpected method: %v", sig))
-		}
-		w.tag('F')
-		w.pos(obj.Pos())
-		w.signature(sig)
-
-	case *types.Const:
-		w.tag('C')
-		w.pos(obj.Pos())
-		w.value(obj.Type(), obj.Val())
-
-	case *types.TypeName:
-		if obj.IsAlias() {
-			w.tag('A')
-			w.pos(obj.Pos())
-			w.typ(obj.Type(), obj.Pkg())
-			break
-		}
-
-		// Defined type.
-		w.tag('T')
-		w.pos(obj.Pos())
-
-		underlying := obj.Type().Underlying()
-		w.typ(underlying, obj.Pkg())
-
-		t := obj.Type()
-		if types.IsInterface(t) {
-			break
-		}
-
-		named, ok := t.(*types.Named)
-		if !ok {
-			panic(internalErrorf("%s is not a defined type", t))
-		}
-
-		n := named.NumMethods()
-		w.uint64(uint64(n))
-		for i := 0; i < n; i++ {
-			m := named.Method(i)
-			w.pos(m.Pos())
-			w.string(m.Name())
-			sig, _ := m.Type().(*types.Signature)
-			w.param(sig.Recv())
-			w.signature(sig)
-		}
-
-	default:
-		panic(internalErrorf("unexpected object: %v", obj))
-	}
-
-	p.declIndex[obj] = w.flush()
-}
-
-func (w *exportWriter) tag(tag byte) {
-	w.data.WriteByte(tag)
-}
-
-func (w *exportWriter) pos(pos token.Pos) {
-	if w.p.fset == nil {
-		w.int64(0)
-		return
-	}
-
-	p := w.p.fset.Position(pos)
-	file := p.Filename
-	line := int64(p.Line)
-
-	// When file is the same as the last position (common case),
-	// we can save a few bytes by delta encoding just the line
-	// number.
-	//
-	// Note: Because data objects may be read out of order (or not
-	// at all), we can only apply delta encoding within a single
-	// object. This is handled implicitly by tracking prevFile and
-	// prevLine as fields of exportWriter.
-
-	if file == w.prevFile {
-		delta := line - w.prevLine
-		w.int64(delta)
-		if delta == deltaNewFile {
-			w.int64(-1)
-		}
-	} else {
-		w.int64(deltaNewFile)
-		w.int64(line) // line >= 0
-		w.string(file)
-		w.prevFile = file
-	}
-	w.prevLine = line
-}
-
-func (w *exportWriter) pkg(pkg *types.Package) {
-	// Ensure any referenced packages are declared in the main index.
-	w.p.allPkgs[pkg] = true
-
-	w.string(w.exportPath(pkg))
-}
-
-func (w *exportWriter) qualifiedIdent(obj types.Object) {
-	// Ensure any referenced declarations are written out too.
-	w.p.pushDecl(obj)
-
-	w.string(obj.Name())
-	w.pkg(obj.Pkg())
-}
-
-func (w *exportWriter) typ(t types.Type, pkg *types.Package) {
-	w.data.uint64(w.p.typOff(t, pkg))
-}
-
-func (p *iexporter) newWriter() *exportWriter {
-	return &exportWriter{p: p}
-}
-
-func (w *exportWriter) flush() uint64 {
-	off := uint64(w.p.data0.Len())
-	io.Copy(&w.p.data0, &w.data)
-	return off
-}
-
-func (p *iexporter) typOff(t types.Type, pkg *types.Package) uint64 {
-	off, ok := p.typIndex[t]
-	if !ok {
-		w := p.newWriter()
-		w.doTyp(t, pkg)
-		off = predeclReserved + w.flush()
-		p.typIndex[t] = off
-	}
-	return off
-}
-
-func (w *exportWriter) startType(k itag) {
-	w.data.uint64(uint64(k))
-}
-
-func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) {
-	switch t := t.(type) {
-	case *types.Named:
-		w.startType(definedType)
-		w.qualifiedIdent(t.Obj())
-
-	case *types.Pointer:
-		w.startType(pointerType)
-		w.typ(t.Elem(), pkg)
-
-	case *types.Slice:
-		w.startType(sliceType)
-		w.typ(t.Elem(), pkg)
-
-	case *types.Array:
-		w.startType(arrayType)
-		w.uint64(uint64(t.Len()))
-		w.typ(t.Elem(), pkg)
-
-	case *types.Chan:
-		w.startType(chanType)
-		// 1 RecvOnly; 2 SendOnly; 3 SendRecv
-		var dir uint64
-		switch t.Dir() {
-		case types.RecvOnly:
-			dir = 1
-		case types.SendOnly:
-			dir = 2
-		case types.SendRecv:
-			dir = 3
-		}
-		w.uint64(dir)
-		w.typ(t.Elem(), pkg)
-
-	case *types.Map:
-		w.startType(mapType)
-		w.typ(t.Key(), pkg)
-		w.typ(t.Elem(), pkg)
-
-	case *types.Signature:
-		w.startType(signatureType)
-		w.setPkg(pkg, true)
-		w.signature(t)
-
-	case *types.Struct:
-		w.startType(structType)
-		w.setPkg(pkg, true)
-
-		n := t.NumFields()
-		w.uint64(uint64(n))
-		for i := 0; i < n; i++ {
-			f := t.Field(i)
-			w.pos(f.Pos())
-			w.string(f.Name())
-			w.typ(f.Type(), pkg)
-			w.bool(f.Anonymous())
-			w.string(t.Tag(i)) // note (or tag)
-		}
-
-	case *types.Interface:
-		w.startType(interfaceType)
-		w.setPkg(pkg, true)
-
-		n := t.NumEmbeddeds()
-		w.uint64(uint64(n))
-		for i := 0; i < n; i++ {
-			f := t.Embedded(i)
-			w.pos(f.Obj().Pos())
-			w.typ(f.Obj().Type(), f.Obj().Pkg())
-		}
-
-		n = t.NumExplicitMethods()
-		w.uint64(uint64(n))
-		for i := 0; i < n; i++ {
-			m := t.ExplicitMethod(i)
-			w.pos(m.Pos())
-			w.string(m.Name())
-			sig, _ := m.Type().(*types.Signature)
-			w.signature(sig)
-		}
-
-	default:
-		panic(internalErrorf("unexpected type: %v, %v", t, reflect.TypeOf(t)))
-	}
-}
-
-func (w *exportWriter) setPkg(pkg *types.Package, write bool) {
-	if write {
-		w.pkg(pkg)
-	}
-
-	w.currPkg = pkg
-}
-
-func (w *exportWriter) signature(sig *types.Signature) {
-	w.paramList(sig.Params())
-	w.paramList(sig.Results())
-	if sig.Params().Len() > 0 {
-		w.bool(sig.Variadic())
-	}
-}
-
-func (w *exportWriter) paramList(tup *types.Tuple) {
-	n := tup.Len()
-	w.uint64(uint64(n))
-	for i := 0; i < n; i++ {
-		w.param(tup.At(i))
-	}
-}
-
-func (w *exportWriter) param(obj types.Object) {
-	w.pos(obj.Pos())
-	w.localIdent(obj)
-	w.typ(obj.Type(), obj.Pkg())
-}
-
-func (w *exportWriter) value(typ types.Type, v constant.Value) {
-	w.typ(typ, nil)
-
-	switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType {
-	case types.IsBoolean:
-		w.bool(constant.BoolVal(v))
-	case types.IsInteger:
-		var i big.Int
-		if i64, exact := constant.Int64Val(v); exact {
-			i.SetInt64(i64)
-		} else if ui64, exact := constant.Uint64Val(v); exact {
-			i.SetUint64(ui64)
-		} else {
-			i.SetString(v.ExactString(), 10)
-		}
-		w.mpint(&i, typ)
-	case types.IsFloat:
-		f := constantToFloat(v)
-		w.mpfloat(f, typ)
-	case types.IsComplex:
-		w.mpfloat(constantToFloat(constant.Real(v)), typ)
-		w.mpfloat(constantToFloat(constant.Imag(v)), typ)
-	case types.IsString:
-		w.string(constant.StringVal(v))
-	default:
-		if b.Kind() == types.Invalid {
-			// package contains type errors
-			break
-		}
-		panic(internalErrorf("unexpected type %v (%v)", typ, typ.Underlying()))
-	}
-}
-
-// constantToFloat converts a constant.Value with kind constant.Float to a
-// big.Float.
-func constantToFloat(x constant.Value) *big.Float {
-	x = constant.ToFloat(x)
-	// Use the same floating-point precision (512) as cmd/compile
-	// (see Mpprec in cmd/compile/internal/gc/mpfloat.go).
-	const mpprec = 512
-	var f big.Float
-	f.SetPrec(mpprec)
-	if v, exact := constant.Float64Val(x); exact {
-		// float64
-		f.SetFloat64(v)
-	} else if num, denom := constant.Num(x), constant.Denom(x); num.Kind() == constant.Int {
-		// TODO(gri): add big.Rat accessor to constant.Value.
-		n := valueToRat(num)
-		d := valueToRat(denom)
-		f.SetRat(n.Quo(n, d))
-	} else {
-		// Value too large to represent as a fraction => inaccessible.
-		// TODO(gri): add big.Float accessor to constant.Value.
-		_, ok := f.SetString(x.ExactString())
-		assert(ok)
-	}
-	return &f
-}
-
-// mpint exports a multi-precision integer.
-//
-// For unsigned types, small values are written out as a single
-// byte. Larger values are written out as a length-prefixed big-endian
-// byte string, where the length prefix is encoded as its complement.
-// For example, bytes 0, 1, and 2 directly represent the integer
-// values 0, 1, and 2; while bytes 255, 254, and 253 indicate a 1-,
-// 2-, and 3-byte big-endian string follow.
-//
-// Encoding for signed types use the same general approach as for
-// unsigned types, except small values use zig-zag encoding and the
-// bottom bit of length prefix byte for large values is reserved as a
-// sign bit.
-//
-// The exact boundary between small and large encodings varies
-// according to the maximum number of bytes needed to encode a value
-// of type typ. As a special case, 8-bit types are always encoded as a
-// single byte.
-//
-// TODO(mdempsky): Is this level of complexity really worthwhile?
-func (w *exportWriter) mpint(x *big.Int, typ types.Type) {
-	basic, ok := typ.Underlying().(*types.Basic)
-	if !ok {
-		panic(internalErrorf("unexpected type %v (%T)", typ.Underlying(), typ.Underlying()))
-	}
-
-	signed, maxBytes := intSize(basic)
-
-	negative := x.Sign() < 0
-	if !signed && negative {
-		panic(internalErrorf("negative unsigned integer; type %v, value %v", typ, x))
-	}
-
-	b := x.Bytes()
-	if len(b) > 0 && b[0] == 0 {
-		panic(internalErrorf("leading zeros"))
-	}
-	if uint(len(b)) > maxBytes {
-		panic(internalErrorf("bad mpint length: %d > %d (type %v, value %v)", len(b), maxBytes, typ, x))
-	}
-
-	maxSmall := 256 - maxBytes
-	if signed {
-		maxSmall = 256 - 2*maxBytes
-	}
-	if maxBytes == 1 {
-		maxSmall = 256
-	}
-
-	// Check if x can use small value encoding.
-	if len(b) <= 1 {
-		var ux uint
-		if len(b) == 1 {
-			ux = uint(b[0])
-		}
-		if signed {
-			ux <<= 1
-			if negative {
-				ux--
-			}
-		}
-		if ux < maxSmall {
-			w.data.WriteByte(byte(ux))
-			return
-		}
-	}
-
-	n := 256 - uint(len(b))
-	if signed {
-		n = 256 - 2*uint(len(b))
-		if negative {
-			n |= 1
-		}
-	}
-	if n < maxSmall || n >= 256 {
-		panic(internalErrorf("encoding mistake: %d, %v, %v => %d", len(b), signed, negative, n))
-	}
-
-	w.data.WriteByte(byte(n))
-	w.data.Write(b)
-}
-
-// mpfloat exports a multi-precision floating point number.
-//
-// The number's value is decomposed into mantissa × 2**exponent, where
-// mantissa is an integer. The value is written out as mantissa (as a
-// multi-precision integer) and then the exponent, except exponent is
-// omitted if mantissa is zero.
-func (w *exportWriter) mpfloat(f *big.Float, typ types.Type) {
-	if f.IsInf() {
-		panic("infinite constant")
-	}
-
-	// Break into f = mant × 2**exp, with 0.5 <= mant < 1.
-	var mant big.Float
-	exp := int64(f.MantExp(&mant))
-
-	// Scale so that mant is an integer.
-	prec := mant.MinPrec()
-	mant.SetMantExp(&mant, int(prec))
-	exp -= int64(prec)
-
-	manti, acc := mant.Int(nil)
-	if acc != big.Exact {
-		panic(internalErrorf("mantissa scaling failed for %f (%s)", f, acc))
-	}
-	w.mpint(manti, typ)
-	if manti.Sign() != 0 {
-		w.int64(exp)
-	}
-}
-
-func (w *exportWriter) bool(b bool) bool {
-	var x uint64
-	if b {
-		x = 1
-	}
-	w.uint64(x)
-	return b
-}
-
-func (w *exportWriter) int64(x int64)   { w.data.int64(x) }
-func (w *exportWriter) uint64(x uint64) { w.data.uint64(x) }
-func (w *exportWriter) string(s string) { w.uint64(w.p.stringOff(s)) }
-
-func (w *exportWriter) localIdent(obj types.Object) {
-	// Anonymous parameters.
-	if obj == nil {
-		w.string("")
-		return
-	}
-
-	name := obj.Name()
-	if name == "_" {
-		w.string("_")
-		return
-	}
-
-	w.string(name)
-}
-
-type intWriter struct {
-	bytes.Buffer
-}
-
-func (w *intWriter) int64(x int64) {
-	var buf [binary.MaxVarintLen64]byte
-	n := binary.PutVarint(buf[:], x)
-	w.Write(buf[:n])
-}
-
-func (w *intWriter) uint64(x uint64) {
-	var buf [binary.MaxVarintLen64]byte
-	n := binary.PutUvarint(buf[:], x)
-	w.Write(buf[:n])
-}
-
-func assert(cond bool) {
-	if !cond {
-		panic("internal error: assertion failed")
-	}
-}
-
-// The below is copied from go/src/cmd/compile/internal/gc/syntax.go.
-
-// objQueue is a FIFO queue of types.Object. The zero value of objQueue is
-// a ready-to-use empty queue.
-type objQueue struct {
-	ring       []types.Object
-	head, tail int
-}
-
-// empty returns true if q contains no Nodes.
-func (q *objQueue) empty() bool {
-	return q.head == q.tail
-}
-
-// pushTail appends n to the tail of the queue.
-func (q *objQueue) pushTail(obj types.Object) {
-	if len(q.ring) == 0 {
-		q.ring = make([]types.Object, 16)
-	} else if q.head+len(q.ring) == q.tail {
-		// Grow the ring.
-		nring := make([]types.Object, len(q.ring)*2)
-		// Copy the old elements.
-		part := q.ring[q.head%len(q.ring):]
-		if q.tail-q.head <= len(part) {
-			part = part[:q.tail-q.head]
-			copy(nring, part)
-		} else {
-			pos := copy(nring, part)
-			copy(nring[pos:], q.ring[:q.tail%len(q.ring)])
-		}
-		q.ring, q.head, q.tail = nring, 0, q.tail-q.head
-	}
-
-	q.ring[q.tail%len(q.ring)] = obj
-	q.tail++
-}
-
-// popHead pops a node from the head of the queue. It panics if q is empty.
-func (q *objQueue) popHead() types.Object {
-	if q.empty() {
-		panic("dequeue empty")
-	}
-	obj := q.ring[q.head%len(q.ring)]
-	q.head++
-	return obj
-}

+ 0 - 676
vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go

@@ -1,676 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Indexed package import.
-// See cmd/compile/internal/gc/iexport.go for the export data format.
-
-// This file is a copy of $GOROOT/src/go/internal/gcimporter/iimport.go.
-
-package gcimporter
-
-import (
-	"bytes"
-	"encoding/binary"
-	"fmt"
-	"go/constant"
-	"go/token"
-	"go/types"
-	"io"
-	"sort"
-)
-
-type intReader struct {
-	*bytes.Reader
-	path string
-}
-
-func (r *intReader) int64() int64 {
-	i, err := binary.ReadVarint(r.Reader)
-	if err != nil {
-		errorf("import %q: read varint error: %v", r.path, err)
-	}
-	return i
-}
-
-func (r *intReader) uint64() uint64 {
-	i, err := binary.ReadUvarint(r.Reader)
-	if err != nil {
-		errorf("import %q: read varint error: %v", r.path, err)
-	}
-	return i
-}
-
-const predeclReserved = 32
-
-type itag uint64
-
-const (
-	// Types
-	definedType itag = iota
-	pointerType
-	sliceType
-	arrayType
-	chanType
-	mapType
-	signatureType
-	structType
-	interfaceType
-)
-
-// IImportData imports a package from the serialized package data
-// and returns 0 and a reference to the package.
-// If the export data version is not recognized or the format is otherwise
-// compromised, an error is returned.
-func IImportData(fset *token.FileSet, imports map[string]*types.Package, data []byte, path string) (int, *types.Package, error) {
-	pkgs, err := iimportCommon(fset, imports, data, false, path)
-	if err != nil {
-		return 0, nil, err
-	}
-	return 0, pkgs[0], nil
-}
-
-// IImportBundle imports a set of packages from the serialized package bundle.
-func IImportBundle(fset *token.FileSet, imports map[string]*types.Package, data []byte) ([]*types.Package, error) {
-	return iimportCommon(fset, imports, data, true, "")
-}
-
-func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data []byte, bundle bool, path string) (pkgs []*types.Package, err error) {
-	const currentVersion = 1
-	version := int64(-1)
-	defer func() {
-		if e := recover(); e != nil {
-			if version > currentVersion {
-				err = fmt.Errorf("cannot import %q (%v), export data is newer version - update tool", path, e)
-			} else {
-				err = fmt.Errorf("cannot import %q (%v), possibly version skew - reinstall package", path, e)
-			}
-		}
-	}()
-
-	r := &intReader{bytes.NewReader(data), path}
-
-	if bundle {
-		bundleVersion := r.uint64()
-		switch bundleVersion {
-		case bundleVersion:
-		default:
-			errorf("unknown bundle format version %d", bundleVersion)
-		}
-	}
-
-	version = int64(r.uint64())
-	switch version {
-	case currentVersion, 0:
-	default:
-		errorf("unknown iexport format version %d", version)
-	}
-
-	sLen := int64(r.uint64())
-	dLen := int64(r.uint64())
-
-	whence, _ := r.Seek(0, io.SeekCurrent)
-	stringData := data[whence : whence+sLen]
-	declData := data[whence+sLen : whence+sLen+dLen]
-	r.Seek(sLen+dLen, io.SeekCurrent)
-
-	p := iimporter{
-		ipath:   path,
-		version: int(version),
-
-		stringData:  stringData,
-		stringCache: make(map[uint64]string),
-		pkgCache:    make(map[uint64]*types.Package),
-
-		declData: declData,
-		pkgIndex: make(map[*types.Package]map[string]uint64),
-		typCache: make(map[uint64]types.Type),
-
-		fake: fakeFileSet{
-			fset:  fset,
-			files: make(map[string]*token.File),
-		},
-	}
-
-	for i, pt := range predeclared() {
-		p.typCache[uint64(i)] = pt
-	}
-
-	pkgList := make([]*types.Package, r.uint64())
-	for i := range pkgList {
-		pkgPathOff := r.uint64()
-		pkgPath := p.stringAt(pkgPathOff)
-		pkgName := p.stringAt(r.uint64())
-		_ = r.uint64() // package height; unused by go/types
-
-		if pkgPath == "" {
-			pkgPath = path
-		}
-		pkg := imports[pkgPath]
-		if pkg == nil {
-			pkg = types.NewPackage(pkgPath, pkgName)
-			imports[pkgPath] = pkg
-		} else if pkg.Name() != pkgName {
-			errorf("conflicting names %s and %s for package %q", pkg.Name(), pkgName, path)
-		}
-
-		p.pkgCache[pkgPathOff] = pkg
-
-		nameIndex := make(map[string]uint64)
-		for nSyms := r.uint64(); nSyms > 0; nSyms-- {
-			name := p.stringAt(r.uint64())
-			nameIndex[name] = r.uint64()
-		}
-
-		p.pkgIndex[pkg] = nameIndex
-		pkgList[i] = pkg
-	}
-
-	if bundle {
-		pkgs = make([]*types.Package, r.uint64())
-		for i := range pkgs {
-			pkg := p.pkgAt(r.uint64())
-			imps := make([]*types.Package, r.uint64())
-			for j := range imps {
-				imps[j] = p.pkgAt(r.uint64())
-			}
-			pkg.SetImports(imps)
-			pkgs[i] = pkg
-		}
-	} else {
-		if len(pkgList) == 0 {
-			errorf("no packages found for %s", path)
-			panic("unreachable")
-		}
-		pkgs = pkgList[:1]
-
-		// record all referenced packages as imports
-		list := append(([]*types.Package)(nil), pkgList[1:]...)
-		sort.Sort(byPath(list))
-		pkgs[0].SetImports(list)
-	}
-
-	for _, pkg := range pkgs {
-		if pkg.Complete() {
-			continue
-		}
-
-		names := make([]string, 0, len(p.pkgIndex[pkg]))
-		for name := range p.pkgIndex[pkg] {
-			names = append(names, name)
-		}
-		sort.Strings(names)
-		for _, name := range names {
-			p.doDecl(pkg, name)
-		}
-
-		// package was imported completely and without errors
-		pkg.MarkComplete()
-	}
-
-	for _, typ := range p.interfaceList {
-		typ.Complete()
-	}
-
-	return pkgs, nil
-}
-
-type iimporter struct {
-	ipath   string
-	version int
-
-	stringData  []byte
-	stringCache map[uint64]string
-	pkgCache    map[uint64]*types.Package
-
-	declData []byte
-	pkgIndex map[*types.Package]map[string]uint64
-	typCache map[uint64]types.Type
-
-	fake          fakeFileSet
-	interfaceList []*types.Interface
-}
-
-func (p *iimporter) doDecl(pkg *types.Package, name string) {
-	// See if we've already imported this declaration.
-	if obj := pkg.Scope().Lookup(name); obj != nil {
-		return
-	}
-
-	off, ok := p.pkgIndex[pkg][name]
-	if !ok {
-		errorf("%v.%v not in index", pkg, name)
-	}
-
-	r := &importReader{p: p, currPkg: pkg}
-	r.declReader.Reset(p.declData[off:])
-
-	r.obj(name)
-}
-
-func (p *iimporter) stringAt(off uint64) string {
-	if s, ok := p.stringCache[off]; ok {
-		return s
-	}
-
-	slen, n := binary.Uvarint(p.stringData[off:])
-	if n <= 0 {
-		errorf("varint failed")
-	}
-	spos := off + uint64(n)
-	s := string(p.stringData[spos : spos+slen])
-	p.stringCache[off] = s
-	return s
-}
-
-func (p *iimporter) pkgAt(off uint64) *types.Package {
-	if pkg, ok := p.pkgCache[off]; ok {
-		return pkg
-	}
-	path := p.stringAt(off)
-	errorf("missing package %q in %q", path, p.ipath)
-	return nil
-}
-
-func (p *iimporter) typAt(off uint64, base *types.Named) types.Type {
-	if t, ok := p.typCache[off]; ok && (base == nil || !isInterface(t)) {
-		return t
-	}
-
-	if off < predeclReserved {
-		errorf("predeclared type missing from cache: %v", off)
-	}
-
-	r := &importReader{p: p}
-	r.declReader.Reset(p.declData[off-predeclReserved:])
-	t := r.doType(base)
-
-	if base == nil || !isInterface(t) {
-		p.typCache[off] = t
-	}
-	return t
-}
-
-type importReader struct {
-	p          *iimporter
-	declReader bytes.Reader
-	currPkg    *types.Package
-	prevFile   string
-	prevLine   int64
-	prevColumn int64
-}
-
-func (r *importReader) obj(name string) {
-	tag := r.byte()
-	pos := r.pos()
-
-	switch tag {
-	case 'A':
-		typ := r.typ()
-
-		r.declare(types.NewTypeName(pos, r.currPkg, name, typ))
-
-	case 'C':
-		typ, val := r.value()
-
-		r.declare(types.NewConst(pos, r.currPkg, name, typ, val))
-
-	case 'F':
-		sig := r.signature(nil)
-
-		r.declare(types.NewFunc(pos, r.currPkg, name, sig))
-
-	case 'T':
-		// Types can be recursive. We need to setup a stub
-		// declaration before recursing.
-		obj := types.NewTypeName(pos, r.currPkg, name, nil)
-		named := types.NewNamed(obj, nil, nil)
-		r.declare(obj)
-
-		underlying := r.p.typAt(r.uint64(), named).Underlying()
-		named.SetUnderlying(underlying)
-
-		if !isInterface(underlying) {
-			for n := r.uint64(); n > 0; n-- {
-				mpos := r.pos()
-				mname := r.ident()
-				recv := r.param()
-				msig := r.signature(recv)
-
-				named.AddMethod(types.NewFunc(mpos, r.currPkg, mname, msig))
-			}
-		}
-
-	case 'V':
-		typ := r.typ()
-
-		r.declare(types.NewVar(pos, r.currPkg, name, typ))
-
-	default:
-		errorf("unexpected tag: %v", tag)
-	}
-}
-
-func (r *importReader) declare(obj types.Object) {
-	obj.Pkg().Scope().Insert(obj)
-}
-
-func (r *importReader) value() (typ types.Type, val constant.Value) {
-	typ = r.typ()
-
-	switch b := typ.Underlying().(*types.Basic); b.Info() & types.IsConstType {
-	case types.IsBoolean:
-		val = constant.MakeBool(r.bool())
-
-	case types.IsString:
-		val = constant.MakeString(r.string())
-
-	case types.IsInteger:
-		val = r.mpint(b)
-
-	case types.IsFloat:
-		val = r.mpfloat(b)
-
-	case types.IsComplex:
-		re := r.mpfloat(b)
-		im := r.mpfloat(b)
-		val = constant.BinaryOp(re, token.ADD, constant.MakeImag(im))
-
-	default:
-		if b.Kind() == types.Invalid {
-			val = constant.MakeUnknown()
-			return
-		}
-		errorf("unexpected type %v", typ) // panics
-		panic("unreachable")
-	}
-
-	return
-}
-
-func intSize(b *types.Basic) (signed bool, maxBytes uint) {
-	if (b.Info() & types.IsUntyped) != 0 {
-		return true, 64
-	}
-
-	switch b.Kind() {
-	case types.Float32, types.Complex64:
-		return true, 3
-	case types.Float64, types.Complex128:
-		return true, 7
-	}
-
-	signed = (b.Info() & types.IsUnsigned) == 0
-	switch b.Kind() {
-	case types.Int8, types.Uint8:
-		maxBytes = 1
-	case types.Int16, types.Uint16:
-		maxBytes = 2
-	case types.Int32, types.Uint32:
-		maxBytes = 4
-	default:
-		maxBytes = 8
-	}
-
-	return
-}
-
-func (r *importReader) mpint(b *types.Basic) constant.Value {
-	signed, maxBytes := intSize(b)
-
-	maxSmall := 256 - maxBytes
-	if signed {
-		maxSmall = 256 - 2*maxBytes
-	}
-	if maxBytes == 1 {
-		maxSmall = 256
-	}
-
-	n, _ := r.declReader.ReadByte()
-	if uint(n) < maxSmall {
-		v := int64(n)
-		if signed {
-			v >>= 1
-			if n&1 != 0 {
-				v = ^v
-			}
-		}
-		return constant.MakeInt64(v)
-	}
-
-	v := -n
-	if signed {
-		v = -(n &^ 1) >> 1
-	}
-	if v < 1 || uint(v) > maxBytes {
-		errorf("weird decoding: %v, %v => %v", n, signed, v)
-	}
-
-	buf := make([]byte, v)
-	io.ReadFull(&r.declReader, buf)
-
-	// convert to little endian
-	// TODO(gri) go/constant should have a more direct conversion function
-	//           (e.g., once it supports a big.Float based implementation)
-	for i, j := 0, len(buf)-1; i < j; i, j = i+1, j-1 {
-		buf[i], buf[j] = buf[j], buf[i]
-	}
-
-	x := constant.MakeFromBytes(buf)
-	if signed && n&1 != 0 {
-		x = constant.UnaryOp(token.SUB, x, 0)
-	}
-	return x
-}
-
-func (r *importReader) mpfloat(b *types.Basic) constant.Value {
-	x := r.mpint(b)
-	if constant.Sign(x) == 0 {
-		return x
-	}
-
-	exp := r.int64()
-	switch {
-	case exp > 0:
-		x = constant.Shift(x, token.SHL, uint(exp))
-		// Ensure that the imported Kind is Float, else this constant may run into
-		// bitsize limits on overlarge integers. Eventually we can instead adopt
-		// the approach of CL 288632, but that CL relies on go/constant APIs that
-		// were introduced in go1.13.
-		//
-		// TODO(rFindley): sync the logic here with tip Go once we no longer
-		// support go1.12.
-		x = constant.ToFloat(x)
-	case exp < 0:
-		d := constant.Shift(constant.MakeInt64(1), token.SHL, uint(-exp))
-		x = constant.BinaryOp(x, token.QUO, d)
-	}
-	return x
-}
-
-func (r *importReader) ident() string {
-	return r.string()
-}
-
-func (r *importReader) qualifiedIdent() (*types.Package, string) {
-	name := r.string()
-	pkg := r.pkg()
-	return pkg, name
-}
-
-func (r *importReader) pos() token.Pos {
-	if r.p.version >= 1 {
-		r.posv1()
-	} else {
-		r.posv0()
-	}
-
-	if r.prevFile == "" && r.prevLine == 0 && r.prevColumn == 0 {
-		return token.NoPos
-	}
-	return r.p.fake.pos(r.prevFile, int(r.prevLine), int(r.prevColumn))
-}
-
-func (r *importReader) posv0() {
-	delta := r.int64()
-	if delta != deltaNewFile {
-		r.prevLine += delta
-	} else if l := r.int64(); l == -1 {
-		r.prevLine += deltaNewFile
-	} else {
-		r.prevFile = r.string()
-		r.prevLine = l
-	}
-}
-
-func (r *importReader) posv1() {
-	delta := r.int64()
-	r.prevColumn += delta >> 1
-	if delta&1 != 0 {
-		delta = r.int64()
-		r.prevLine += delta >> 1
-		if delta&1 != 0 {
-			r.prevFile = r.string()
-		}
-	}
-}
-
-func (r *importReader) typ() types.Type {
-	return r.p.typAt(r.uint64(), nil)
-}
-
-func isInterface(t types.Type) bool {
-	_, ok := t.(*types.Interface)
-	return ok
-}
-
-func (r *importReader) pkg() *types.Package { return r.p.pkgAt(r.uint64()) }
-func (r *importReader) string() string      { return r.p.stringAt(r.uint64()) }
-
-func (r *importReader) doType(base *types.Named) types.Type {
-	switch k := r.kind(); k {
-	default:
-		errorf("unexpected kind tag in %q: %v", r.p.ipath, k)
-		return nil
-
-	case definedType:
-		pkg, name := r.qualifiedIdent()
-		r.p.doDecl(pkg, name)
-		return pkg.Scope().Lookup(name).(*types.TypeName).Type()
-	case pointerType:
-		return types.NewPointer(r.typ())
-	case sliceType:
-		return types.NewSlice(r.typ())
-	case arrayType:
-		n := r.uint64()
-		return types.NewArray(r.typ(), int64(n))
-	case chanType:
-		dir := chanDir(int(r.uint64()))
-		return types.NewChan(dir, r.typ())
-	case mapType:
-		return types.NewMap(r.typ(), r.typ())
-	case signatureType:
-		r.currPkg = r.pkg()
-		return r.signature(nil)
-
-	case structType:
-		r.currPkg = r.pkg()
-
-		fields := make([]*types.Var, r.uint64())
-		tags := make([]string, len(fields))
-		for i := range fields {
-			fpos := r.pos()
-			fname := r.ident()
-			ftyp := r.typ()
-			emb := r.bool()
-			tag := r.string()
-
-			fields[i] = types.NewField(fpos, r.currPkg, fname, ftyp, emb)
-			tags[i] = tag
-		}
-		return types.NewStruct(fields, tags)
-
-	case interfaceType:
-		r.currPkg = r.pkg()
-
-		embeddeds := make([]types.Type, r.uint64())
-		for i := range embeddeds {
-			_ = r.pos()
-			embeddeds[i] = r.typ()
-		}
-
-		methods := make([]*types.Func, r.uint64())
-		for i := range methods {
-			mpos := r.pos()
-			mname := r.ident()
-
-			// TODO(mdempsky): Matches bimport.go, but I
-			// don't agree with this.
-			var recv *types.Var
-			if base != nil {
-				recv = types.NewVar(token.NoPos, r.currPkg, "", base)
-			}
-
-			msig := r.signature(recv)
-			methods[i] = types.NewFunc(mpos, r.currPkg, mname, msig)
-		}
-
-		typ := newInterface(methods, embeddeds)
-		r.p.interfaceList = append(r.p.interfaceList, typ)
-		return typ
-	}
-}
-
-func (r *importReader) kind() itag {
-	return itag(r.uint64())
-}
-
-func (r *importReader) signature(recv *types.Var) *types.Signature {
-	params := r.paramList()
-	results := r.paramList()
-	variadic := params.Len() > 0 && r.bool()
-	return types.NewSignature(recv, params, results, variadic)
-}
-
-func (r *importReader) paramList() *types.Tuple {
-	xs := make([]*types.Var, r.uint64())
-	for i := range xs {
-		xs[i] = r.param()
-	}
-	return types.NewTuple(xs...)
-}
-
-func (r *importReader) param() *types.Var {
-	pos := r.pos()
-	name := r.ident()
-	typ := r.typ()
-	return types.NewParam(pos, r.currPkg, name, typ)
-}
-
-func (r *importReader) bool() bool {
-	return r.uint64() != 0
-}
-
-func (r *importReader) int64() int64 {
-	n, err := binary.ReadVarint(&r.declReader)
-	if err != nil {
-		errorf("readVarint: %v", err)
-	}
-	return n
-}
-
-func (r *importReader) uint64() uint64 {
-	n, err := binary.ReadUvarint(&r.declReader)
-	if err != nil {
-		errorf("readUvarint: %v", err)
-	}
-	return n
-}
-
-func (r *importReader) byte() byte {
-	x, err := r.declReader.ReadByte()
-	if err != nil {
-		errorf("declReader.ReadByte: %v", err)
-	}
-	return x
-}

+ 0 - 22
vendor/golang.org/x/tools/go/internal/gcimporter/newInterface10.go

@@ -1,22 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !go1.11
-// +build !go1.11
-
-package gcimporter
-
-import "go/types"
-
-func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface {
-	named := make([]*types.Named, len(embeddeds))
-	for i, e := range embeddeds {
-		var ok bool
-		named[i], ok = e.(*types.Named)
-		if !ok {
-			panic("embedding of non-defined interfaces in interfaces is not supported before Go 1.11")
-		}
-	}
-	return types.NewInterface(methods, named)
-}

+ 0 - 14
vendor/golang.org/x/tools/go/internal/gcimporter/newInterface11.go

@@ -1,14 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.11
-// +build go1.11
-
-package gcimporter
-
-import "go/types"
-
-func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface {
-	return types.NewInterfaceType(methods, embeddeds)
-}

+ 0 - 85
vendor/golang.org/x/tools/internal/event/core/event.go

@@ -1,85 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package core provides support for event based telemetry.
-package core
-
-import (
-	"fmt"
-	"time"
-
-	"golang.org/x/tools/internal/event/label"
-)
-
-// Event holds the information about an event of note that occurred.
-type Event struct {
-	at time.Time
-
-	// As events are often on the stack, storing the first few labels directly
-	// in the event can avoid an allocation at all for the very common cases of
-	// simple events.
-	// The length needs to be large enough to cope with the majority of events
-	// but no so large as to cause undue stack pressure.
-	// A log message with two values will use 3 labels (one for each value and
-	// one for the message itself).
-
-	static  [3]label.Label // inline storage for the first few labels
-	dynamic []label.Label  // dynamically sized storage for remaining labels
-}
-
-// eventLabelMap implements label.Map for a the labels of an Event.
-type eventLabelMap struct {
-	event Event
-}
-
-func (ev Event) At() time.Time { return ev.at }
-
-func (ev Event) Format(f fmt.State, r rune) {
-	if !ev.at.IsZero() {
-		fmt.Fprint(f, ev.at.Format("2006/01/02 15:04:05 "))
-	}
-	for index := 0; ev.Valid(index); index++ {
-		if l := ev.Label(index); l.Valid() {
-			fmt.Fprintf(f, "\n\t%v", l)
-		}
-	}
-}
-
-func (ev Event) Valid(index int) bool {
-	return index >= 0 && index < len(ev.static)+len(ev.dynamic)
-}
-
-func (ev Event) Label(index int) label.Label {
-	if index < len(ev.static) {
-		return ev.static[index]
-	}
-	return ev.dynamic[index-len(ev.static)]
-}
-
-func (ev Event) Find(key label.Key) label.Label {
-	for _, l := range ev.static {
-		if l.Key() == key {
-			return l
-		}
-	}
-	for _, l := range ev.dynamic {
-		if l.Key() == key {
-			return l
-		}
-	}
-	return label.Label{}
-}
-
-func MakeEvent(static [3]label.Label, labels []label.Label) Event {
-	return Event{
-		static:  static,
-		dynamic: labels,
-	}
-}
-
-// CloneEvent event returns a copy of the event with the time adjusted to at.
-func CloneEvent(ev Event, at time.Time) Event {
-	ev.at = at
-	return ev
-}

+ 0 - 70
vendor/golang.org/x/tools/internal/event/core/export.go

@@ -1,70 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package core
-
-import (
-	"context"
-	"sync/atomic"
-	"time"
-	"unsafe"
-
-	"golang.org/x/tools/internal/event/label"
-)
-
-// Exporter is a function that handles events.
-// It may return a modified context and event.
-type Exporter func(context.Context, Event, label.Map) context.Context
-
-var (
-	exporter unsafe.Pointer
-)
-
-// SetExporter sets the global exporter function that handles all events.
-// The exporter is called synchronously from the event call site, so it should
-// return quickly so as not to hold up user code.
-func SetExporter(e Exporter) {
-	p := unsafe.Pointer(&e)
-	if e == nil {
-		// &e is always valid, and so p is always valid, but for the early abort
-		// of ProcessEvent to be efficient it needs to make the nil check on the
-		// pointer without having to dereference it, so we make the nil function
-		// also a nil pointer
-		p = nil
-	}
-	atomic.StorePointer(&exporter, p)
-}
-
-// deliver is called to deliver an event to the supplied exporter.
-// it will fill in the time.
-func deliver(ctx context.Context, exporter Exporter, ev Event) context.Context {
-	// add the current time to the event
-	ev.at = time.Now()
-	// hand the event off to the current exporter
-	return exporter(ctx, ev, ev)
-}
-
-// Export is called to deliver an event to the global exporter if set.
-func Export(ctx context.Context, ev Event) context.Context {
-	// get the global exporter and abort early if there is not one
-	exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter))
-	if exporterPtr == nil {
-		return ctx
-	}
-	return deliver(ctx, *exporterPtr, ev)
-}
-
-// ExportPair is called to deliver a start event to the supplied exporter.
-// It also returns a function that will deliver the end event to the same
-// exporter.
-// It will fill in the time.
-func ExportPair(ctx context.Context, begin, end Event) (context.Context, func()) {
-	// get the global exporter and abort early if there is not one
-	exporterPtr := (*Exporter)(atomic.LoadPointer(&exporter))
-	if exporterPtr == nil {
-		return ctx, func() {}
-	}
-	ctx = deliver(ctx, *exporterPtr, begin)
-	return ctx, func() { deliver(ctx, *exporterPtr, end) }
-}

+ 0 - 77
vendor/golang.org/x/tools/internal/event/core/fast.go

@@ -1,77 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package core
-
-import (
-	"context"
-
-	"golang.org/x/tools/internal/event/keys"
-	"golang.org/x/tools/internal/event/label"
-)
-
-// Log1 takes a message and one label delivers a log event to the exporter.
-// It is a customized version of Print that is faster and does no allocation.
-func Log1(ctx context.Context, message string, t1 label.Label) {
-	Export(ctx, MakeEvent([3]label.Label{
-		keys.Msg.Of(message),
-		t1,
-	}, nil))
-}
-
-// Log2 takes a message and two labels and delivers a log event to the exporter.
-// It is a customized version of Print that is faster and does no allocation.
-func Log2(ctx context.Context, message string, t1 label.Label, t2 label.Label) {
-	Export(ctx, MakeEvent([3]label.Label{
-		keys.Msg.Of(message),
-		t1,
-		t2,
-	}, nil))
-}
-
-// Metric1 sends a label event to the exporter with the supplied labels.
-func Metric1(ctx context.Context, t1 label.Label) context.Context {
-	return Export(ctx, MakeEvent([3]label.Label{
-		keys.Metric.New(),
-		t1,
-	}, nil))
-}
-
-// Metric2 sends a label event to the exporter with the supplied labels.
-func Metric2(ctx context.Context, t1, t2 label.Label) context.Context {
-	return Export(ctx, MakeEvent([3]label.Label{
-		keys.Metric.New(),
-		t1,
-		t2,
-	}, nil))
-}
-
-// Start1 sends a span start event with the supplied label list to the exporter.
-// It also returns a function that will end the span, which should normally be
-// deferred.
-func Start1(ctx context.Context, name string, t1 label.Label) (context.Context, func()) {
-	return ExportPair(ctx,
-		MakeEvent([3]label.Label{
-			keys.Start.Of(name),
-			t1,
-		}, nil),
-		MakeEvent([3]label.Label{
-			keys.End.New(),
-		}, nil))
-}
-
-// Start2 sends a span start event with the supplied label list to the exporter.
-// It also returns a function that will end the span, which should normally be
-// deferred.
-func Start2(ctx context.Context, name string, t1, t2 label.Label) (context.Context, func()) {
-	return ExportPair(ctx,
-		MakeEvent([3]label.Label{
-			keys.Start.Of(name),
-			t1,
-			t2,
-		}, nil),
-		MakeEvent([3]label.Label{
-			keys.End.New(),
-		}, nil))
-}

+ 0 - 7
vendor/golang.org/x/tools/internal/event/doc.go

@@ -1,7 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package event provides a set of packages that cover the main
-// concepts of telemetry in an implementation agnostic way.
-package event

+ 0 - 127
vendor/golang.org/x/tools/internal/event/event.go

@@ -1,127 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package event
-
-import (
-	"context"
-
-	"golang.org/x/tools/internal/event/core"
-	"golang.org/x/tools/internal/event/keys"
-	"golang.org/x/tools/internal/event/label"
-)
-
-// Exporter is a function that handles events.
-// It may return a modified context and event.
-type Exporter func(context.Context, core.Event, label.Map) context.Context
-
-// SetExporter sets the global exporter function that handles all events.
-// The exporter is called synchronously from the event call site, so it should
-// return quickly so as not to hold up user code.
-func SetExporter(e Exporter) {
-	core.SetExporter(core.Exporter(e))
-}
-
-// Log takes a message and a label list and combines them into a single event
-// before delivering them to the exporter.
-func Log(ctx context.Context, message string, labels ...label.Label) {
-	core.Export(ctx, core.MakeEvent([3]label.Label{
-		keys.Msg.Of(message),
-	}, labels))
-}
-
-// IsLog returns true if the event was built by the Log function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsLog(ev core.Event) bool {
-	return ev.Label(0).Key() == keys.Msg
-}
-
-// Error takes a message and a label list and combines them into a single event
-// before delivering them to the exporter. It captures the error in the
-// delivered event.
-func Error(ctx context.Context, message string, err error, labels ...label.Label) {
-	core.Export(ctx, core.MakeEvent([3]label.Label{
-		keys.Msg.Of(message),
-		keys.Err.Of(err),
-	}, labels))
-}
-
-// IsError returns true if the event was built by the Error function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsError(ev core.Event) bool {
-	return ev.Label(0).Key() == keys.Msg &&
-		ev.Label(1).Key() == keys.Err
-}
-
-// Metric sends a label event to the exporter with the supplied labels.
-func Metric(ctx context.Context, labels ...label.Label) {
-	core.Export(ctx, core.MakeEvent([3]label.Label{
-		keys.Metric.New(),
-	}, labels))
-}
-
-// IsMetric returns true if the event was built by the Metric function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsMetric(ev core.Event) bool {
-	return ev.Label(0).Key() == keys.Metric
-}
-
-// Label sends a label event to the exporter with the supplied labels.
-func Label(ctx context.Context, labels ...label.Label) context.Context {
-	return core.Export(ctx, core.MakeEvent([3]label.Label{
-		keys.Label.New(),
-	}, labels))
-}
-
-// IsLabel returns true if the event was built by the Label function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsLabel(ev core.Event) bool {
-	return ev.Label(0).Key() == keys.Label
-}
-
-// Start sends a span start event with the supplied label list to the exporter.
-// It also returns a function that will end the span, which should normally be
-// deferred.
-func Start(ctx context.Context, name string, labels ...label.Label) (context.Context, func()) {
-	return core.ExportPair(ctx,
-		core.MakeEvent([3]label.Label{
-			keys.Start.Of(name),
-		}, labels),
-		core.MakeEvent([3]label.Label{
-			keys.End.New(),
-		}, nil))
-}
-
-// IsStart returns true if the event was built by the Start function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsStart(ev core.Event) bool {
-	return ev.Label(0).Key() == keys.Start
-}
-
-// IsEnd returns true if the event was built by the End function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsEnd(ev core.Event) bool {
-	return ev.Label(0).Key() == keys.End
-}
-
-// Detach returns a context without an associated span.
-// This allows the creation of spans that are not children of the current span.
-func Detach(ctx context.Context) context.Context {
-	return core.Export(ctx, core.MakeEvent([3]label.Label{
-		keys.Detach.New(),
-	}, nil))
-}
-
-// IsDetach returns true if the event was built by the Detach function.
-// It is intended to be used in exporters to identify the semantics of the
-// event when deciding what to do with it.
-func IsDetach(ev core.Event) bool {
-	return ev.Label(0).Key() == keys.Detach
-}

+ 0 - 564
vendor/golang.org/x/tools/internal/event/keys/keys.go

@@ -1,564 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package keys
-
-import (
-	"fmt"
-	"io"
-	"math"
-	"strconv"
-
-	"golang.org/x/tools/internal/event/label"
-)
-
-// Value represents a key for untyped values.
-type Value struct {
-	name        string
-	description string
-}
-
-// New creates a new Key for untyped values.
-func New(name, description string) *Value {
-	return &Value{name: name, description: description}
-}
-
-func (k *Value) Name() string        { return k.name }
-func (k *Value) Description() string { return k.description }
-
-func (k *Value) Format(w io.Writer, buf []byte, l label.Label) {
-	fmt.Fprint(w, k.From(l))
-}
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Value) Get(lm label.Map) interface{} {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return nil
-}
-
-// From can be used to get a value from a Label.
-func (k *Value) From(t label.Label) interface{} { return t.UnpackValue() }
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Value) Of(value interface{}) label.Label { return label.OfValue(k, value) }
-
-// Tag represents a key for tagging labels that have no value.
-// These are used when the existence of the label is the entire information it
-// carries, such as marking events to be of a specific kind, or from a specific
-// package.
-type Tag struct {
-	name        string
-	description string
-}
-
-// NewTag creates a new Key for tagging labels.
-func NewTag(name, description string) *Tag {
-	return &Tag{name: name, description: description}
-}
-
-func (k *Tag) Name() string        { return k.name }
-func (k *Tag) Description() string { return k.description }
-
-func (k *Tag) Format(w io.Writer, buf []byte, l label.Label) {}
-
-// New creates a new Label with this key.
-func (k *Tag) New() label.Label { return label.OfValue(k, nil) }
-
-// Int represents a key
-type Int struct {
-	name        string
-	description string
-}
-
-// NewInt creates a new Key for int values.
-func NewInt(name, description string) *Int {
-	return &Int{name: name, description: description}
-}
-
-func (k *Int) Name() string        { return k.name }
-func (k *Int) Description() string { return k.description }
-
-func (k *Int) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int) Of(v int) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int) Get(lm label.Map) int {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int) From(t label.Label) int { return int(t.Unpack64()) }
-
-// Int8 represents a key
-type Int8 struct {
-	name        string
-	description string
-}
-
-// NewInt8 creates a new Key for int8 values.
-func NewInt8(name, description string) *Int8 {
-	return &Int8{name: name, description: description}
-}
-
-func (k *Int8) Name() string        { return k.name }
-func (k *Int8) Description() string { return k.description }
-
-func (k *Int8) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int8) Of(v int8) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int8) Get(lm label.Map) int8 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int8) From(t label.Label) int8 { return int8(t.Unpack64()) }
-
-// Int16 represents a key
-type Int16 struct {
-	name        string
-	description string
-}
-
-// NewInt16 creates a new Key for int16 values.
-func NewInt16(name, description string) *Int16 {
-	return &Int16{name: name, description: description}
-}
-
-func (k *Int16) Name() string        { return k.name }
-func (k *Int16) Description() string { return k.description }
-
-func (k *Int16) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int16) Of(v int16) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int16) Get(lm label.Map) int16 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int16) From(t label.Label) int16 { return int16(t.Unpack64()) }
-
-// Int32 represents a key
-type Int32 struct {
-	name        string
-	description string
-}
-
-// NewInt32 creates a new Key for int32 values.
-func NewInt32(name, description string) *Int32 {
-	return &Int32{name: name, description: description}
-}
-
-func (k *Int32) Name() string        { return k.name }
-func (k *Int32) Description() string { return k.description }
-
-func (k *Int32) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendInt(buf, int64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int32) Of(v int32) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int32) Get(lm label.Map) int32 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int32) From(t label.Label) int32 { return int32(t.Unpack64()) }
-
-// Int64 represents a key
-type Int64 struct {
-	name        string
-	description string
-}
-
-// NewInt64 creates a new Key for int64 values.
-func NewInt64(name, description string) *Int64 {
-	return &Int64{name: name, description: description}
-}
-
-func (k *Int64) Name() string        { return k.name }
-func (k *Int64) Description() string { return k.description }
-
-func (k *Int64) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendInt(buf, k.From(l), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Int64) Of(v int64) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Int64) Get(lm label.Map) int64 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Int64) From(t label.Label) int64 { return int64(t.Unpack64()) }
-
-// UInt represents a key
-type UInt struct {
-	name        string
-	description string
-}
-
-// NewUInt creates a new Key for uint values.
-func NewUInt(name, description string) *UInt {
-	return &UInt{name: name, description: description}
-}
-
-func (k *UInt) Name() string        { return k.name }
-func (k *UInt) Description() string { return k.description }
-
-func (k *UInt) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt) Of(v uint) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt) Get(lm label.Map) uint {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt) From(t label.Label) uint { return uint(t.Unpack64()) }
-
-// UInt8 represents a key
-type UInt8 struct {
-	name        string
-	description string
-}
-
-// NewUInt8 creates a new Key for uint8 values.
-func NewUInt8(name, description string) *UInt8 {
-	return &UInt8{name: name, description: description}
-}
-
-func (k *UInt8) Name() string        { return k.name }
-func (k *UInt8) Description() string { return k.description }
-
-func (k *UInt8) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt8) Of(v uint8) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt8) Get(lm label.Map) uint8 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt8) From(t label.Label) uint8 { return uint8(t.Unpack64()) }
-
-// UInt16 represents a key
-type UInt16 struct {
-	name        string
-	description string
-}
-
-// NewUInt16 creates a new Key for uint16 values.
-func NewUInt16(name, description string) *UInt16 {
-	return &UInt16{name: name, description: description}
-}
-
-func (k *UInt16) Name() string        { return k.name }
-func (k *UInt16) Description() string { return k.description }
-
-func (k *UInt16) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt16) Of(v uint16) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt16) Get(lm label.Map) uint16 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt16) From(t label.Label) uint16 { return uint16(t.Unpack64()) }
-
-// UInt32 represents a key
-type UInt32 struct {
-	name        string
-	description string
-}
-
-// NewUInt32 creates a new Key for uint32 values.
-func NewUInt32(name, description string) *UInt32 {
-	return &UInt32{name: name, description: description}
-}
-
-func (k *UInt32) Name() string        { return k.name }
-func (k *UInt32) Description() string { return k.description }
-
-func (k *UInt32) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendUint(buf, uint64(k.From(l)), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt32) Of(v uint32) label.Label { return label.Of64(k, uint64(v)) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt32) Get(lm label.Map) uint32 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt32) From(t label.Label) uint32 { return uint32(t.Unpack64()) }
-
-// UInt64 represents a key
-type UInt64 struct {
-	name        string
-	description string
-}
-
-// NewUInt64 creates a new Key for uint64 values.
-func NewUInt64(name, description string) *UInt64 {
-	return &UInt64{name: name, description: description}
-}
-
-func (k *UInt64) Name() string        { return k.name }
-func (k *UInt64) Description() string { return k.description }
-
-func (k *UInt64) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendUint(buf, k.From(l), 10))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *UInt64) Of(v uint64) label.Label { return label.Of64(k, v) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *UInt64) Get(lm label.Map) uint64 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *UInt64) From(t label.Label) uint64 { return t.Unpack64() }
-
-// Float32 represents a key
-type Float32 struct {
-	name        string
-	description string
-}
-
-// NewFloat32 creates a new Key for float32 values.
-func NewFloat32(name, description string) *Float32 {
-	return &Float32{name: name, description: description}
-}
-
-func (k *Float32) Name() string        { return k.name }
-func (k *Float32) Description() string { return k.description }
-
-func (k *Float32) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendFloat(buf, float64(k.From(l)), 'E', -1, 32))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Float32) Of(v float32) label.Label {
-	return label.Of64(k, uint64(math.Float32bits(v)))
-}
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Float32) Get(lm label.Map) float32 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Float32) From(t label.Label) float32 {
-	return math.Float32frombits(uint32(t.Unpack64()))
-}
-
-// Float64 represents a key
-type Float64 struct {
-	name        string
-	description string
-}
-
-// NewFloat64 creates a new Key for int64 values.
-func NewFloat64(name, description string) *Float64 {
-	return &Float64{name: name, description: description}
-}
-
-func (k *Float64) Name() string        { return k.name }
-func (k *Float64) Description() string { return k.description }
-
-func (k *Float64) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendFloat(buf, k.From(l), 'E', -1, 64))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Float64) Of(v float64) label.Label {
-	return label.Of64(k, math.Float64bits(v))
-}
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Float64) Get(lm label.Map) float64 {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return 0
-}
-
-// From can be used to get a value from a Label.
-func (k *Float64) From(t label.Label) float64 {
-	return math.Float64frombits(t.Unpack64())
-}
-
-// String represents a key
-type String struct {
-	name        string
-	description string
-}
-
-// NewString creates a new Key for int64 values.
-func NewString(name, description string) *String {
-	return &String{name: name, description: description}
-}
-
-func (k *String) Name() string        { return k.name }
-func (k *String) Description() string { return k.description }
-
-func (k *String) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendQuote(buf, k.From(l)))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *String) Of(v string) label.Label { return label.OfString(k, v) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *String) Get(lm label.Map) string {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return ""
-}
-
-// From can be used to get a value from a Label.
-func (k *String) From(t label.Label) string { return t.UnpackString() }
-
-// Boolean represents a key
-type Boolean struct {
-	name        string
-	description string
-}
-
-// NewBoolean creates a new Key for bool values.
-func NewBoolean(name, description string) *Boolean {
-	return &Boolean{name: name, description: description}
-}
-
-func (k *Boolean) Name() string        { return k.name }
-func (k *Boolean) Description() string { return k.description }
-
-func (k *Boolean) Format(w io.Writer, buf []byte, l label.Label) {
-	w.Write(strconv.AppendBool(buf, k.From(l)))
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Boolean) Of(v bool) label.Label {
-	if v {
-		return label.Of64(k, 1)
-	}
-	return label.Of64(k, 0)
-}
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Boolean) Get(lm label.Map) bool {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return false
-}
-
-// From can be used to get a value from a Label.
-func (k *Boolean) From(t label.Label) bool { return t.Unpack64() > 0 }
-
-// Error represents a key
-type Error struct {
-	name        string
-	description string
-}
-
-// NewError creates a new Key for int64 values.
-func NewError(name, description string) *Error {
-	return &Error{name: name, description: description}
-}
-
-func (k *Error) Name() string        { return k.name }
-func (k *Error) Description() string { return k.description }
-
-func (k *Error) Format(w io.Writer, buf []byte, l label.Label) {
-	io.WriteString(w, k.From(l).Error())
-}
-
-// Of creates a new Label with this key and the supplied value.
-func (k *Error) Of(v error) label.Label { return label.OfValue(k, v) }
-
-// Get can be used to get a label for the key from a label.Map.
-func (k *Error) Get(lm label.Map) error {
-	if t := lm.Find(k); t.Valid() {
-		return k.From(t)
-	}
-	return nil
-}
-
-// From can be used to get a value from a Label.
-func (k *Error) From(t label.Label) error {
-	err, _ := t.UnpackValue().(error)
-	return err
-}

+ 0 - 22
vendor/golang.org/x/tools/internal/event/keys/standard.go

@@ -1,22 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package keys
-
-var (
-	// Msg is a key used to add message strings to label lists.
-	Msg = NewString("message", "a readable message")
-	// Label is a key used to indicate an event adds labels to the context.
-	Label = NewTag("label", "a label context marker")
-	// Start is used for things like traces that have a name.
-	Start = NewString("start", "span start")
-	// Metric is a key used to indicate an event records metrics.
-	End = NewTag("end", "a span end marker")
-	// Metric is a key used to indicate an event records metrics.
-	Detach = NewTag("detach", "a span detach marker")
-	// Err is a key used to add error values to label lists.
-	Err = NewError("error", "an error that occurred")
-	// Metric is a key used to indicate an event records metrics.
-	Metric = NewTag("metric", "a metric event marker")
-)

+ 0 - 215
vendor/golang.org/x/tools/internal/event/label/label.go

@@ -1,215 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package label
-
-import (
-	"fmt"
-	"io"
-	"reflect"
-	"unsafe"
-)
-
-// Key is used as the identity of a Label.
-// Keys are intended to be compared by pointer only, the name should be unique
-// for communicating with external systems, but it is not required or enforced.
-type Key interface {
-	// Name returns the key name.
-	Name() string
-	// Description returns a string that can be used to describe the value.
-	Description() string
-
-	// Format is used in formatting to append the value of the label to the
-	// supplied buffer.
-	// The formatter may use the supplied buf as a scratch area to avoid
-	// allocations.
-	Format(w io.Writer, buf []byte, l Label)
-}
-
-// Label holds a key and value pair.
-// It is normally used when passing around lists of labels.
-type Label struct {
-	key     Key
-	packed  uint64
-	untyped interface{}
-}
-
-// Map is the interface to a collection of Labels indexed by key.
-type Map interface {
-	// Find returns the label that matches the supplied key.
-	Find(key Key) Label
-}
-
-// List is the interface to something that provides an iterable
-// list of labels.
-// Iteration should start from 0 and continue until Valid returns false.
-type List interface {
-	// Valid returns true if the index is within range for the list.
-	// It does not imply the label at that index will itself be valid.
-	Valid(index int) bool
-	// Label returns the label at the given index.
-	Label(index int) Label
-}
-
-// list implements LabelList for a list of Labels.
-type list struct {
-	labels []Label
-}
-
-// filter wraps a LabelList filtering out specific labels.
-type filter struct {
-	keys       []Key
-	underlying List
-}
-
-// listMap implements LabelMap for a simple list of labels.
-type listMap struct {
-	labels []Label
-}
-
-// mapChain implements LabelMap for a list of underlying LabelMap.
-type mapChain struct {
-	maps []Map
-}
-
-// OfValue creates a new label from the key and value.
-// This method is for implementing new key types, label creation should
-// normally be done with the Of method of the key.
-func OfValue(k Key, value interface{}) Label { return Label{key: k, untyped: value} }
-
-// UnpackValue assumes the label was built using LabelOfValue and returns the value
-// that was passed to that constructor.
-// This method is for implementing new key types, for type safety normal
-// access should be done with the From method of the key.
-func (t Label) UnpackValue() interface{} { return t.untyped }
-
-// Of64 creates a new label from a key and a uint64. This is often
-// used for non uint64 values that can be packed into a uint64.
-// This method is for implementing new key types, label creation should
-// normally be done with the Of method of the key.
-func Of64(k Key, v uint64) Label { return Label{key: k, packed: v} }
-
-// Unpack64 assumes the label was built using LabelOf64 and returns the value that
-// was passed to that constructor.
-// This method is for implementing new key types, for type safety normal
-// access should be done with the From method of the key.
-func (t Label) Unpack64() uint64 { return t.packed }
-
-type stringptr unsafe.Pointer
-
-// OfString creates a new label from a key and a string.
-// This method is for implementing new key types, label creation should
-// normally be done with the Of method of the key.
-func OfString(k Key, v string) Label {
-	hdr := (*reflect.StringHeader)(unsafe.Pointer(&v))
-	return Label{
-		key:     k,
-		packed:  uint64(hdr.Len),
-		untyped: stringptr(hdr.Data),
-	}
-}
-
-// UnpackString assumes the label was built using LabelOfString and returns the
-// value that was passed to that constructor.
-// This method is for implementing new key types, for type safety normal
-// access should be done with the From method of the key.
-func (t Label) UnpackString() string {
-	var v string
-	hdr := (*reflect.StringHeader)(unsafe.Pointer(&v))
-	hdr.Data = uintptr(t.untyped.(stringptr))
-	hdr.Len = int(t.packed)
-	return v
-}
-
-// Valid returns true if the Label is a valid one (it has a key).
-func (t Label) Valid() bool { return t.key != nil }
-
-// Key returns the key of this Label.
-func (t Label) Key() Key { return t.key }
-
-// Format is used for debug printing of labels.
-func (t Label) Format(f fmt.State, r rune) {
-	if !t.Valid() {
-		io.WriteString(f, `nil`)
-		return
-	}
-	io.WriteString(f, t.Key().Name())
-	io.WriteString(f, "=")
-	var buf [128]byte
-	t.Key().Format(f, buf[:0], t)
-}
-
-func (l *list) Valid(index int) bool {
-	return index >= 0 && index < len(l.labels)
-}
-
-func (l *list) Label(index int) Label {
-	return l.labels[index]
-}
-
-func (f *filter) Valid(index int) bool {
-	return f.underlying.Valid(index)
-}
-
-func (f *filter) Label(index int) Label {
-	l := f.underlying.Label(index)
-	for _, f := range f.keys {
-		if l.Key() == f {
-			return Label{}
-		}
-	}
-	return l
-}
-
-func (lm listMap) Find(key Key) Label {
-	for _, l := range lm.labels {
-		if l.Key() == key {
-			return l
-		}
-	}
-	return Label{}
-}
-
-func (c mapChain) Find(key Key) Label {
-	for _, src := range c.maps {
-		l := src.Find(key)
-		if l.Valid() {
-			return l
-		}
-	}
-	return Label{}
-}
-
-var emptyList = &list{}
-
-func NewList(labels ...Label) List {
-	if len(labels) == 0 {
-		return emptyList
-	}
-	return &list{labels: labels}
-}
-
-func Filter(l List, keys ...Key) List {
-	if len(keys) == 0 {
-		return l
-	}
-	return &filter{keys: keys, underlying: l}
-}
-
-func NewMap(labels ...Label) Map {
-	return listMap{labels: labels}
-}
-
-func MergeMaps(srcs ...Map) Map {
-	var nonNil []Map
-	for _, src := range srcs {
-		if src != nil {
-			nonNil = append(nonNil, src)
-		}
-	}
-	if len(nonNil) == 1 {
-		return nonNil[0]
-	}
-	return mapChain{maps: nonNil}
-}

+ 0 - 196
vendor/golang.org/x/tools/internal/fastwalk/fastwalk.go

@@ -1,196 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package fastwalk provides a faster version of filepath.Walk for file system
-// scanning tools.
-package fastwalk
-
-import (
-	"errors"
-	"os"
-	"path/filepath"
-	"runtime"
-	"sync"
-)
-
-// ErrTraverseLink is used as a return value from WalkFuncs to indicate that the
-// symlink named in the call may be traversed.
-var ErrTraverseLink = errors.New("fastwalk: traverse symlink, assuming target is a directory")
-
-// ErrSkipFiles is a used as a return value from WalkFuncs to indicate that the
-// callback should not be called for any other files in the current directory.
-// Child directories will still be traversed.
-var ErrSkipFiles = errors.New("fastwalk: skip remaining files in directory")
-
-// Walk is a faster implementation of filepath.Walk.
-//
-// filepath.Walk's design necessarily calls os.Lstat on each file,
-// even if the caller needs less info.
-// Many tools need only the type of each file.
-// On some platforms, this information is provided directly by the readdir
-// system call, avoiding the need to stat each file individually.
-// fastwalk_unix.go contains a fork of the syscall routines.
-//
-// See golang.org/issue/16399
-//
-// Walk walks the file tree rooted at root, calling walkFn for
-// each file or directory in the tree, including root.
-//
-// If fastWalk returns filepath.SkipDir, the directory is skipped.
-//
-// Unlike filepath.Walk:
-//   * file stat calls must be done by the user.
-//     The only provided metadata is the file type, which does not include
-//     any permission bits.
-//   * multiple goroutines stat the filesystem concurrently. The provided
-//     walkFn must be safe for concurrent use.
-//   * fastWalk can follow symlinks if walkFn returns the TraverseLink
-//     sentinel error. It is the walkFn's responsibility to prevent
-//     fastWalk from going into symlink cycles.
-func Walk(root string, walkFn func(path string, typ os.FileMode) error) error {
-	// TODO(bradfitz): make numWorkers configurable? We used a
-	// minimum of 4 to give the kernel more info about multiple
-	// things we want, in hopes its I/O scheduling can take
-	// advantage of that. Hopefully most are in cache. Maybe 4 is
-	// even too low of a minimum. Profile more.
-	numWorkers := 4
-	if n := runtime.NumCPU(); n > numWorkers {
-		numWorkers = n
-	}
-
-	// Make sure to wait for all workers to finish, otherwise
-	// walkFn could still be called after returning. This Wait call
-	// runs after close(e.donec) below.
-	var wg sync.WaitGroup
-	defer wg.Wait()
-
-	w := &walker{
-		fn:       walkFn,
-		enqueuec: make(chan walkItem, numWorkers), // buffered for performance
-		workc:    make(chan walkItem, numWorkers), // buffered for performance
-		donec:    make(chan struct{}),
-
-		// buffered for correctness & not leaking goroutines:
-		resc: make(chan error, numWorkers),
-	}
-	defer close(w.donec)
-
-	for i := 0; i < numWorkers; i++ {
-		wg.Add(1)
-		go w.doWork(&wg)
-	}
-	todo := []walkItem{{dir: root}}
-	out := 0
-	for {
-		workc := w.workc
-		var workItem walkItem
-		if len(todo) == 0 {
-			workc = nil
-		} else {
-			workItem = todo[len(todo)-1]
-		}
-		select {
-		case workc <- workItem:
-			todo = todo[:len(todo)-1]
-			out++
-		case it := <-w.enqueuec:
-			todo = append(todo, it)
-		case err := <-w.resc:
-			out--
-			if err != nil {
-				return err
-			}
-			if out == 0 && len(todo) == 0 {
-				// It's safe to quit here, as long as the buffered
-				// enqueue channel isn't also readable, which might
-				// happen if the worker sends both another unit of
-				// work and its result before the other select was
-				// scheduled and both w.resc and w.enqueuec were
-				// readable.
-				select {
-				case it := <-w.enqueuec:
-					todo = append(todo, it)
-				default:
-					return nil
-				}
-			}
-		}
-	}
-}
-
-// doWork reads directories as instructed (via workc) and runs the
-// user's callback function.
-func (w *walker) doWork(wg *sync.WaitGroup) {
-	defer wg.Done()
-	for {
-		select {
-		case <-w.donec:
-			return
-		case it := <-w.workc:
-			select {
-			case <-w.donec:
-				return
-			case w.resc <- w.walk(it.dir, !it.callbackDone):
-			}
-		}
-	}
-}
-
-type walker struct {
-	fn func(path string, typ os.FileMode) error
-
-	donec    chan struct{} // closed on fastWalk's return
-	workc    chan walkItem // to workers
-	enqueuec chan walkItem // from workers
-	resc     chan error    // from workers
-}
-
-type walkItem struct {
-	dir          string
-	callbackDone bool // callback already called; don't do it again
-}
-
-func (w *walker) enqueue(it walkItem) {
-	select {
-	case w.enqueuec <- it:
-	case <-w.donec:
-	}
-}
-
-func (w *walker) onDirEnt(dirName, baseName string, typ os.FileMode) error {
-	joined := dirName + string(os.PathSeparator) + baseName
-	if typ == os.ModeDir {
-		w.enqueue(walkItem{dir: joined})
-		return nil
-	}
-
-	err := w.fn(joined, typ)
-	if typ == os.ModeSymlink {
-		if err == ErrTraverseLink {
-			// Set callbackDone so we don't call it twice for both the
-			// symlink-as-symlink and the symlink-as-directory later:
-			w.enqueue(walkItem{dir: joined, callbackDone: true})
-			return nil
-		}
-		if err == filepath.SkipDir {
-			// Permit SkipDir on symlinks too.
-			return nil
-		}
-	}
-	return err
-}
-
-func (w *walker) walk(root string, runUserCallback bool) error {
-	if runUserCallback {
-		err := w.fn(root, os.ModeDir)
-		if err == filepath.SkipDir {
-			return nil
-		}
-		if err != nil {
-			return err
-		}
-	}
-
-	return readDir(root, w.onDirEnt)
-}

+ 0 - 14
vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_fileno.go

@@ -1,14 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build freebsd || openbsd || netbsd
-// +build freebsd openbsd netbsd
-
-package fastwalk
-
-import "syscall"
-
-func direntInode(dirent *syscall.Dirent) uint64 {
-	return uint64(dirent.Fileno)
-}

+ 0 - 15
vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_ino.go

@@ -1,15 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build (linux || darwin) && !appengine
-// +build linux darwin
-// +build !appengine
-
-package fastwalk
-
-import "syscall"
-
-func direntInode(dirent *syscall.Dirent) uint64 {
-	return uint64(dirent.Ino)
-}

+ 0 - 14
vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_bsd.go

@@ -1,14 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build darwin || freebsd || openbsd || netbsd
-// +build darwin freebsd openbsd netbsd
-
-package fastwalk
-
-import "syscall"
-
-func direntNamlen(dirent *syscall.Dirent) uint64 {
-	return uint64(dirent.Namlen)
-}

+ 0 - 29
vendor/golang.org/x/tools/internal/fastwalk/fastwalk_dirent_namlen_linux.go

@@ -1,29 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build linux && !appengine
-// +build linux,!appengine
-
-package fastwalk
-
-import (
-	"bytes"
-	"syscall"
-	"unsafe"
-)
-
-func direntNamlen(dirent *syscall.Dirent) uint64 {
-	const fixedHdr = uint16(unsafe.Offsetof(syscall.Dirent{}.Name))
-	nameBuf := (*[unsafe.Sizeof(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0]))
-	const nameBufLen = uint16(len(nameBuf))
-	limit := dirent.Reclen - fixedHdr
-	if limit > nameBufLen {
-		limit = nameBufLen
-	}
-	nameLen := bytes.IndexByte(nameBuf[:limit], 0)
-	if nameLen < 0 {
-		panic("failed to find terminating 0 byte in dirent")
-	}
-	return uint64(nameLen)
-}

+ 0 - 38
vendor/golang.org/x/tools/internal/fastwalk/fastwalk_portable.go

@@ -1,38 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build appengine || (!linux && !darwin && !freebsd && !openbsd && !netbsd)
-// +build appengine !linux,!darwin,!freebsd,!openbsd,!netbsd
-
-package fastwalk
-
-import (
-	"io/ioutil"
-	"os"
-)
-
-// readDir calls fn for each directory entry in dirName.
-// It does not descend into directories or follow symlinks.
-// If fn returns a non-nil error, readDir returns with that error
-// immediately.
-func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error {
-	fis, err := ioutil.ReadDir(dirName)
-	if err != nil {
-		return err
-	}
-	skipFiles := false
-	for _, fi := range fis {
-		if fi.Mode().IsRegular() && skipFiles {
-			continue
-		}
-		if err := fn(dirName, fi.Name(), fi.Mode()&os.ModeType); err != nil {
-			if err == ErrSkipFiles {
-				skipFiles = true
-				continue
-			}
-			return err
-		}
-	}
-	return nil
-}

+ 0 - 153
vendor/golang.org/x/tools/internal/fastwalk/fastwalk_unix.go

@@ -1,153 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build (linux || darwin || freebsd || openbsd || netbsd) && !appengine
-// +build linux darwin freebsd openbsd netbsd
-// +build !appengine
-
-package fastwalk
-
-import (
-	"fmt"
-	"os"
-	"syscall"
-	"unsafe"
-)
-
-const blockSize = 8 << 10
-
-// unknownFileMode is a sentinel (and bogus) os.FileMode
-// value used to represent a syscall.DT_UNKNOWN Dirent.Type.
-const unknownFileMode os.FileMode = os.ModeNamedPipe | os.ModeSocket | os.ModeDevice
-
-func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error {
-	fd, err := open(dirName, 0, 0)
-	if err != nil {
-		return &os.PathError{Op: "open", Path: dirName, Err: err}
-	}
-	defer syscall.Close(fd)
-
-	// The buffer must be at least a block long.
-	buf := make([]byte, blockSize) // stack-allocated; doesn't escape
-	bufp := 0                      // starting read position in buf
-	nbuf := 0                      // end valid data in buf
-	skipFiles := false
-	for {
-		if bufp >= nbuf {
-			bufp = 0
-			nbuf, err = readDirent(fd, buf)
-			if err != nil {
-				return os.NewSyscallError("readdirent", err)
-			}
-			if nbuf <= 0 {
-				return nil
-			}
-		}
-		consumed, name, typ := parseDirEnt(buf[bufp:nbuf])
-		bufp += consumed
-		if name == "" || name == "." || name == ".." {
-			continue
-		}
-		// Fallback for filesystems (like old XFS) that don't
-		// support Dirent.Type and have DT_UNKNOWN (0) there
-		// instead.
-		if typ == unknownFileMode {
-			fi, err := os.Lstat(dirName + "/" + name)
-			if err != nil {
-				// It got deleted in the meantime.
-				if os.IsNotExist(err) {
-					continue
-				}
-				return err
-			}
-			typ = fi.Mode() & os.ModeType
-		}
-		if skipFiles && typ.IsRegular() {
-			continue
-		}
-		if err := fn(dirName, name, typ); err != nil {
-			if err == ErrSkipFiles {
-				skipFiles = true
-				continue
-			}
-			return err
-		}
-	}
-}
-
-func parseDirEnt(buf []byte) (consumed int, name string, typ os.FileMode) {
-	// golang.org/issue/37269
-	dirent := &syscall.Dirent{}
-	copy((*[unsafe.Sizeof(syscall.Dirent{})]byte)(unsafe.Pointer(dirent))[:], buf)
-	if v := unsafe.Offsetof(dirent.Reclen) + unsafe.Sizeof(dirent.Reclen); uintptr(len(buf)) < v {
-		panic(fmt.Sprintf("buf size of %d smaller than dirent header size %d", len(buf), v))
-	}
-	if len(buf) < int(dirent.Reclen) {
-		panic(fmt.Sprintf("buf size %d < record length %d", len(buf), dirent.Reclen))
-	}
-	consumed = int(dirent.Reclen)
-	if direntInode(dirent) == 0 { // File absent in directory.
-		return
-	}
-	switch dirent.Type {
-	case syscall.DT_REG:
-		typ = 0
-	case syscall.DT_DIR:
-		typ = os.ModeDir
-	case syscall.DT_LNK:
-		typ = os.ModeSymlink
-	case syscall.DT_BLK:
-		typ = os.ModeDevice
-	case syscall.DT_FIFO:
-		typ = os.ModeNamedPipe
-	case syscall.DT_SOCK:
-		typ = os.ModeSocket
-	case syscall.DT_UNKNOWN:
-		typ = unknownFileMode
-	default:
-		// Skip weird things.
-		// It's probably a DT_WHT (http://lwn.net/Articles/325369/)
-		// or something. Revisit if/when this package is moved outside
-		// of goimports. goimports only cares about regular files,
-		// symlinks, and directories.
-		return
-	}
-
-	nameBuf := (*[unsafe.Sizeof(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0]))
-	nameLen := direntNamlen(dirent)
-
-	// Special cases for common things:
-	if nameLen == 1 && nameBuf[0] == '.' {
-		name = "."
-	} else if nameLen == 2 && nameBuf[0] == '.' && nameBuf[1] == '.' {
-		name = ".."
-	} else {
-		name = string(nameBuf[:nameLen])
-	}
-	return
-}
-
-// According to https://golang.org/doc/go1.14#runtime
-// A consequence of the implementation of preemption is that on Unix systems, including Linux and macOS
-// systems, programs built with Go 1.14 will receive more signals than programs built with earlier releases.
-//
-// This causes syscall.Open and syscall.ReadDirent sometimes fail with EINTR errors.
-// We need to retry in this case.
-func open(path string, mode int, perm uint32) (fd int, err error) {
-	for {
-		fd, err := syscall.Open(path, mode, perm)
-		if err != syscall.EINTR {
-			return fd, err
-		}
-	}
-}
-
-func readDirent(fd int, buf []byte) (n int, err error) {
-	for {
-		nbuf, err := syscall.ReadDirent(fd, buf)
-		if err != syscall.EINTR {
-			return nbuf, err
-		}
-	}
-}

+ 0 - 273
vendor/golang.org/x/tools/internal/gocommand/invoke.go

@@ -1,273 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package gocommand is a helper for calling the go command.
-package gocommand
-
-import (
-	"bytes"
-	"context"
-	"fmt"
-	exec "golang.org/x/sys/execabs"
-	"io"
-	"os"
-	"regexp"
-	"strconv"
-	"strings"
-	"sync"
-	"time"
-
-	"golang.org/x/tools/internal/event"
-)
-
-// An Runner will run go command invocations and serialize
-// them if it sees a concurrency error.
-type Runner struct {
-	// once guards the runner initialization.
-	once sync.Once
-
-	// inFlight tracks available workers.
-	inFlight chan struct{}
-
-	// serialized guards the ability to run a go command serially,
-	// to avoid deadlocks when claiming workers.
-	serialized chan struct{}
-}
-
-const maxInFlight = 10
-
-func (runner *Runner) initialize() {
-	runner.once.Do(func() {
-		runner.inFlight = make(chan struct{}, maxInFlight)
-		runner.serialized = make(chan struct{}, 1)
-	})
-}
-
-// 1.13: go: updates to go.mod needed, but contents have changed
-// 1.14: go: updating go.mod: existing contents have changed since last read
-var modConcurrencyError = regexp.MustCompile(`go:.*go.mod.*contents have changed`)
-
-// Run is a convenience wrapper around RunRaw.
-// It returns only stdout and a "friendly" error.
-func (runner *Runner) Run(ctx context.Context, inv Invocation) (*bytes.Buffer, error) {
-	stdout, _, friendly, _ := runner.RunRaw(ctx, inv)
-	return stdout, friendly
-}
-
-// RunPiped runs the invocation serially, always waiting for any concurrent
-// invocations to complete first.
-func (runner *Runner) RunPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) error {
-	_, err := runner.runPiped(ctx, inv, stdout, stderr)
-	return err
-}
-
-// RunRaw runs the invocation, serializing requests only if they fight over
-// go.mod changes.
-func (runner *Runner) RunRaw(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) {
-	// Make sure the runner is always initialized.
-	runner.initialize()
-
-	// First, try to run the go command concurrently.
-	stdout, stderr, friendlyErr, err := runner.runConcurrent(ctx, inv)
-
-	// If we encounter a load concurrency error, we need to retry serially.
-	if friendlyErr == nil || !modConcurrencyError.MatchString(friendlyErr.Error()) {
-		return stdout, stderr, friendlyErr, err
-	}
-	event.Error(ctx, "Load concurrency error, will retry serially", err)
-
-	// Run serially by calling runPiped.
-	stdout.Reset()
-	stderr.Reset()
-	friendlyErr, err = runner.runPiped(ctx, inv, stdout, stderr)
-	return stdout, stderr, friendlyErr, err
-}
-
-func (runner *Runner) runConcurrent(ctx context.Context, inv Invocation) (*bytes.Buffer, *bytes.Buffer, error, error) {
-	// Wait for 1 worker to become available.
-	select {
-	case <-ctx.Done():
-		return nil, nil, nil, ctx.Err()
-	case runner.inFlight <- struct{}{}:
-		defer func() { <-runner.inFlight }()
-	}
-
-	stdout, stderr := &bytes.Buffer{}, &bytes.Buffer{}
-	friendlyErr, err := inv.runWithFriendlyError(ctx, stdout, stderr)
-	return stdout, stderr, friendlyErr, err
-}
-
-func (runner *Runner) runPiped(ctx context.Context, inv Invocation, stdout, stderr io.Writer) (error, error) {
-	// Make sure the runner is always initialized.
-	runner.initialize()
-
-	// Acquire the serialization lock. This avoids deadlocks between two
-	// runPiped commands.
-	select {
-	case <-ctx.Done():
-		return nil, ctx.Err()
-	case runner.serialized <- struct{}{}:
-		defer func() { <-runner.serialized }()
-	}
-
-	// Wait for all in-progress go commands to return before proceeding,
-	// to avoid load concurrency errors.
-	for i := 0; i < maxInFlight; i++ {
-		select {
-		case <-ctx.Done():
-			return nil, ctx.Err()
-		case runner.inFlight <- struct{}{}:
-			// Make sure we always "return" any workers we took.
-			defer func() { <-runner.inFlight }()
-		}
-	}
-
-	return inv.runWithFriendlyError(ctx, stdout, stderr)
-}
-
-// An Invocation represents a call to the go command.
-type Invocation struct {
-	Verb       string
-	Args       []string
-	BuildFlags []string
-	ModFlag    string
-	ModFile    string
-	Overlay    string
-	// If CleanEnv is set, the invocation will run only with the environment
-	// in Env, not starting with os.Environ.
-	CleanEnv   bool
-	Env        []string
-	WorkingDir string
-	Logf       func(format string, args ...interface{})
-}
-
-func (i *Invocation) runWithFriendlyError(ctx context.Context, stdout, stderr io.Writer) (friendlyError error, rawError error) {
-	rawError = i.run(ctx, stdout, stderr)
-	if rawError != nil {
-		friendlyError = rawError
-		// Check for 'go' executable not being found.
-		if ee, ok := rawError.(*exec.Error); ok && ee.Err == exec.ErrNotFound {
-			friendlyError = fmt.Errorf("go command required, not found: %v", ee)
-		}
-		if ctx.Err() != nil {
-			friendlyError = ctx.Err()
-		}
-		friendlyError = fmt.Errorf("err: %v: stderr: %s", friendlyError, stderr)
-	}
-	return
-}
-
-func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error {
-	log := i.Logf
-	if log == nil {
-		log = func(string, ...interface{}) {}
-	}
-
-	goArgs := []string{i.Verb}
-
-	appendModFile := func() {
-		if i.ModFile != "" {
-			goArgs = append(goArgs, "-modfile="+i.ModFile)
-		}
-	}
-	appendModFlag := func() {
-		if i.ModFlag != "" {
-			goArgs = append(goArgs, "-mod="+i.ModFlag)
-		}
-	}
-	appendOverlayFlag := func() {
-		if i.Overlay != "" {
-			goArgs = append(goArgs, "-overlay="+i.Overlay)
-		}
-	}
-
-	switch i.Verb {
-	case "env", "version":
-		goArgs = append(goArgs, i.Args...)
-	case "mod":
-		// mod needs the sub-verb before flags.
-		goArgs = append(goArgs, i.Args[0])
-		appendModFile()
-		goArgs = append(goArgs, i.Args[1:]...)
-	case "get":
-		goArgs = append(goArgs, i.BuildFlags...)
-		appendModFile()
-		goArgs = append(goArgs, i.Args...)
-
-	default: // notably list and build.
-		goArgs = append(goArgs, i.BuildFlags...)
-		appendModFile()
-		appendModFlag()
-		appendOverlayFlag()
-		goArgs = append(goArgs, i.Args...)
-	}
-	cmd := exec.Command("go", goArgs...)
-	cmd.Stdout = stdout
-	cmd.Stderr = stderr
-	// On darwin the cwd gets resolved to the real path, which breaks anything that
-	// expects the working directory to keep the original path, including the
-	// go command when dealing with modules.
-	// The Go stdlib has a special feature where if the cwd and the PWD are the
-	// same node then it trusts the PWD, so by setting it in the env for the child
-	// process we fix up all the paths returned by the go command.
-	if !i.CleanEnv {
-		cmd.Env = os.Environ()
-	}
-	cmd.Env = append(cmd.Env, i.Env...)
-	if i.WorkingDir != "" {
-		cmd.Env = append(cmd.Env, "PWD="+i.WorkingDir)
-		cmd.Dir = i.WorkingDir
-	}
-	defer func(start time.Time) { log("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now())
-
-	return runCmdContext(ctx, cmd)
-}
-
-// runCmdContext is like exec.CommandContext except it sends os.Interrupt
-// before os.Kill.
-func runCmdContext(ctx context.Context, cmd *exec.Cmd) error {
-	if err := cmd.Start(); err != nil {
-		return err
-	}
-	resChan := make(chan error, 1)
-	go func() {
-		resChan <- cmd.Wait()
-	}()
-
-	select {
-	case err := <-resChan:
-		return err
-	case <-ctx.Done():
-	}
-	// Cancelled. Interrupt and see if it ends voluntarily.
-	cmd.Process.Signal(os.Interrupt)
-	select {
-	case err := <-resChan:
-		return err
-	case <-time.After(time.Second):
-	}
-	// Didn't shut down in response to interrupt. Kill it hard.
-	cmd.Process.Kill()
-	return <-resChan
-}
-
-func cmdDebugStr(cmd *exec.Cmd) string {
-	env := make(map[string]string)
-	for _, kv := range cmd.Env {
-		split := strings.SplitN(kv, "=", 2)
-		k, v := split[0], split[1]
-		env[k] = v
-	}
-
-	var args []string
-	for _, arg := range cmd.Args {
-		quoted := strconv.Quote(arg)
-		if quoted[1:len(quoted)-1] != arg || strings.Contains(arg, " ") {
-			args = append(args, quoted)
-		} else {
-			args = append(args, arg)
-		}
-	}
-	return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " "))
-}

+ 0 - 107
vendor/golang.org/x/tools/internal/gocommand/vendor.go

@@ -1,107 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gocommand
-
-import (
-	"bytes"
-	"context"
-	"fmt"
-	"os"
-	"path/filepath"
-	"regexp"
-	"strings"
-	"time"
-
-	"golang.org/x/mod/semver"
-)
-
-// ModuleJSON holds information about a module.
-type ModuleJSON struct {
-	Path      string      // module path
-	Version   string      // module version
-	Versions  []string    // available module versions (with -versions)
-	Replace   *ModuleJSON // replaced by this module
-	Time      *time.Time  // time version was created
-	Update    *ModuleJSON // available update, if any (with -u)
-	Main      bool        // is this the main module?
-	Indirect  bool        // is this module only an indirect dependency of main module?
-	Dir       string      // directory holding files for this module, if any
-	GoMod     string      // path to go.mod file used when loading this module, if any
-	GoVersion string      // go version used in module
-}
-
-var modFlagRegexp = regexp.MustCompile(`-mod[ =](\w+)`)
-
-// VendorEnabled reports whether vendoring is enabled. It takes a *Runner to execute Go commands
-// with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields,
-// of which only Verb and Args are modified to run the appropriate Go command.
-// Inspired by setDefaultBuildMod in modload/init.go
-func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) {
-	mainMod, go114, err := getMainModuleAnd114(ctx, inv, r)
-	if err != nil {
-		return nil, false, err
-	}
-
-	// We check the GOFLAGS to see if there is anything overridden or not.
-	inv.Verb = "env"
-	inv.Args = []string{"GOFLAGS"}
-	stdout, err := r.Run(ctx, inv)
-	if err != nil {
-		return nil, false, err
-	}
-	goflags := string(bytes.TrimSpace(stdout.Bytes()))
-	matches := modFlagRegexp.FindStringSubmatch(goflags)
-	var modFlag string
-	if len(matches) != 0 {
-		modFlag = matches[1]
-	}
-	if modFlag != "" {
-		// Don't override an explicit '-mod=' argument.
-		return mainMod, modFlag == "vendor", nil
-	}
-	if mainMod == nil || !go114 {
-		return mainMod, false, nil
-	}
-	// Check 1.14's automatic vendor mode.
-	if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() {
-		if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 {
-			// The Go version is at least 1.14, and a vendor directory exists.
-			// Set -mod=vendor by default.
-			return mainMod, true, nil
-		}
-	}
-	return mainMod, false, nil
-}
-
-// getMainModuleAnd114 gets the main module's information and whether the
-// go command in use is 1.14+. This is the information needed to figure out
-// if vendoring should be enabled.
-func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) {
-	const format = `{{.Path}}
-{{.Dir}}
-{{.GoMod}}
-{{.GoVersion}}
-{{range context.ReleaseTags}}{{if eq . "go1.14"}}{{.}}{{end}}{{end}}
-`
-	inv.Verb = "list"
-	inv.Args = []string{"-m", "-f", format}
-	stdout, err := r.Run(ctx, inv)
-	if err != nil {
-		return nil, false, err
-	}
-
-	lines := strings.Split(stdout.String(), "\n")
-	if len(lines) < 5 {
-		return nil, false, fmt.Errorf("unexpected stdout: %q", stdout.String())
-	}
-	mod := &ModuleJSON{
-		Path:      lines[0],
-		Dir:       lines[1],
-		GoMod:     lines[2],
-		GoVersion: lines[3],
-		Main:      true,
-	}
-	return mod, lines[4] == "go1.14", nil
-}

+ 0 - 51
vendor/golang.org/x/tools/internal/gocommand/version.go

@@ -1,51 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gocommand
-
-import (
-	"context"
-	"fmt"
-	"strings"
-)
-
-// GoVersion checks the go version by running "go list" with modules off.
-// It returns the X in Go 1.X.
-func GoVersion(ctx context.Context, inv Invocation, r *Runner) (int, error) {
-	inv.Verb = "list"
-	inv.Args = []string{"-e", "-f", `{{context.ReleaseTags}}`, `--`, `unsafe`}
-	inv.Env = append(append([]string{}, inv.Env...), "GO111MODULE=off")
-	// Unset any unneeded flags, and remove them from BuildFlags, if they're
-	// present.
-	inv.ModFile = ""
-	inv.ModFlag = ""
-	var buildFlags []string
-	for _, flag := range inv.BuildFlags {
-		// Flags can be prefixed by one or two dashes.
-		f := strings.TrimPrefix(strings.TrimPrefix(flag, "-"), "-")
-		if strings.HasPrefix(f, "mod=") || strings.HasPrefix(f, "modfile=") {
-			continue
-		}
-		buildFlags = append(buildFlags, flag)
-	}
-	inv.BuildFlags = buildFlags
-	stdoutBytes, err := r.Run(ctx, inv)
-	if err != nil {
-		return 0, err
-	}
-	stdout := stdoutBytes.String()
-	if len(stdout) < 3 {
-		return 0, fmt.Errorf("bad ReleaseTags output: %q", stdout)
-	}
-	// Split up "[go1.1 go1.15]"
-	tags := strings.Fields(stdout[1 : len(stdout)-2])
-	for i := len(tags) - 1; i >= 0; i-- {
-		var version int
-		if _, err := fmt.Sscanf(tags[i], "go1.%d", &version); err != nil {
-			continue
-		}
-		return version, nil
-	}
-	return 0, fmt.Errorf("no parseable ReleaseTags in %v", tags)
-}

+ 0 - 264
vendor/golang.org/x/tools/internal/gopathwalk/walk.go

@@ -1,264 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package gopathwalk is like filepath.Walk but specialized for finding Go
-// packages, particularly in $GOPATH and $GOROOT.
-package gopathwalk
-
-import (
-	"bufio"
-	"bytes"
-	"fmt"
-	"io/ioutil"
-	"log"
-	"os"
-	"path/filepath"
-	"strings"
-	"time"
-
-	"golang.org/x/tools/internal/fastwalk"
-)
-
-// Options controls the behavior of a Walk call.
-type Options struct {
-	// If Logf is non-nil, debug logging is enabled through this function.
-	Logf func(format string, args ...interface{})
-	// Search module caches. Also disables legacy goimports ignore rules.
-	ModulesEnabled bool
-}
-
-// RootType indicates the type of a Root.
-type RootType int
-
-const (
-	RootUnknown RootType = iota
-	RootGOROOT
-	RootGOPATH
-	RootCurrentModule
-	RootModuleCache
-	RootOther
-)
-
-// A Root is a starting point for a Walk.
-type Root struct {
-	Path string
-	Type RootType
-}
-
-// Walk walks Go source directories ($GOROOT, $GOPATH, etc) to find packages.
-// For each package found, add will be called (concurrently) with the absolute
-// paths of the containing source directory and the package directory.
-// add will be called concurrently.
-func Walk(roots []Root, add func(root Root, dir string), opts Options) {
-	WalkSkip(roots, add, func(Root, string) bool { return false }, opts)
-}
-
-// WalkSkip walks Go source directories ($GOROOT, $GOPATH, etc) to find packages.
-// For each package found, add will be called (concurrently) with the absolute
-// paths of the containing source directory and the package directory.
-// For each directory that will be scanned, skip will be called (concurrently)
-// with the absolute paths of the containing source directory and the directory.
-// If skip returns false on a directory it will be processed.
-// add will be called concurrently.
-// skip will be called concurrently.
-func WalkSkip(roots []Root, add func(root Root, dir string), skip func(root Root, dir string) bool, opts Options) {
-	for _, root := range roots {
-		walkDir(root, add, skip, opts)
-	}
-}
-
-// walkDir creates a walker and starts fastwalk with this walker.
-func walkDir(root Root, add func(Root, string), skip func(root Root, dir string) bool, opts Options) {
-	if _, err := os.Stat(root.Path); os.IsNotExist(err) {
-		if opts.Logf != nil {
-			opts.Logf("skipping nonexistent directory: %v", root.Path)
-		}
-		return
-	}
-	start := time.Now()
-	if opts.Logf != nil {
-		opts.Logf("gopathwalk: scanning %s", root.Path)
-	}
-	w := &walker{
-		root: root,
-		add:  add,
-		skip: skip,
-		opts: opts,
-	}
-	w.init()
-	if err := fastwalk.Walk(root.Path, w.walk); err != nil {
-		log.Printf("gopathwalk: scanning directory %v: %v", root.Path, err)
-	}
-
-	if opts.Logf != nil {
-		opts.Logf("gopathwalk: scanned %s in %v", root.Path, time.Since(start))
-	}
-}
-
-// walker is the callback for fastwalk.Walk.
-type walker struct {
-	root Root                    // The source directory to scan.
-	add  func(Root, string)      // The callback that will be invoked for every possible Go package dir.
-	skip func(Root, string) bool // The callback that will be invoked for every dir. dir is skipped if it returns true.
-	opts Options                 // Options passed to Walk by the user.
-
-	ignoredDirs []os.FileInfo // The ignored directories, loaded from .goimportsignore files.
-}
-
-// init initializes the walker based on its Options
-func (w *walker) init() {
-	var ignoredPaths []string
-	if w.root.Type == RootModuleCache {
-		ignoredPaths = []string{"cache"}
-	}
-	if !w.opts.ModulesEnabled && w.root.Type == RootGOPATH {
-		ignoredPaths = w.getIgnoredDirs(w.root.Path)
-		ignoredPaths = append(ignoredPaths, "v", "mod")
-	}
-
-	for _, p := range ignoredPaths {
-		full := filepath.Join(w.root.Path, p)
-		if fi, err := os.Stat(full); err == nil {
-			w.ignoredDirs = append(w.ignoredDirs, fi)
-			if w.opts.Logf != nil {
-				w.opts.Logf("Directory added to ignore list: %s", full)
-			}
-		} else if w.opts.Logf != nil {
-			w.opts.Logf("Error statting ignored directory: %v", err)
-		}
-	}
-}
-
-// getIgnoredDirs reads an optional config file at <path>/.goimportsignore
-// of relative directories to ignore when scanning for go files.
-// The provided path is one of the $GOPATH entries with "src" appended.
-func (w *walker) getIgnoredDirs(path string) []string {
-	file := filepath.Join(path, ".goimportsignore")
-	slurp, err := ioutil.ReadFile(file)
-	if w.opts.Logf != nil {
-		if err != nil {
-			w.opts.Logf("%v", err)
-		} else {
-			w.opts.Logf("Read %s", file)
-		}
-	}
-	if err != nil {
-		return nil
-	}
-
-	var ignoredDirs []string
-	bs := bufio.NewScanner(bytes.NewReader(slurp))
-	for bs.Scan() {
-		line := strings.TrimSpace(bs.Text())
-		if line == "" || strings.HasPrefix(line, "#") {
-			continue
-		}
-		ignoredDirs = append(ignoredDirs, line)
-	}
-	return ignoredDirs
-}
-
-// shouldSkipDir reports whether the file should be skipped or not.
-func (w *walker) shouldSkipDir(fi os.FileInfo, dir string) bool {
-	for _, ignoredDir := range w.ignoredDirs {
-		if os.SameFile(fi, ignoredDir) {
-			return true
-		}
-	}
-	if w.skip != nil {
-		// Check with the user specified callback.
-		return w.skip(w.root, dir)
-	}
-	return false
-}
-
-// walk walks through the given path.
-func (w *walker) walk(path string, typ os.FileMode) error {
-	dir := filepath.Dir(path)
-	if typ.IsRegular() {
-		if dir == w.root.Path && (w.root.Type == RootGOROOT || w.root.Type == RootGOPATH) {
-			// Doesn't make sense to have regular files
-			// directly in your $GOPATH/src or $GOROOT/src.
-			return fastwalk.ErrSkipFiles
-		}
-		if !strings.HasSuffix(path, ".go") {
-			return nil
-		}
-
-		w.add(w.root, dir)
-		return fastwalk.ErrSkipFiles
-	}
-	if typ == os.ModeDir {
-		base := filepath.Base(path)
-		if base == "" || base[0] == '.' || base[0] == '_' ||
-			base == "testdata" ||
-			(w.root.Type == RootGOROOT && w.opts.ModulesEnabled && base == "vendor") ||
-			(!w.opts.ModulesEnabled && base == "node_modules") {
-			return filepath.SkipDir
-		}
-		fi, err := os.Lstat(path)
-		if err == nil && w.shouldSkipDir(fi, path) {
-			return filepath.SkipDir
-		}
-		return nil
-	}
-	if typ == os.ModeSymlink {
-		base := filepath.Base(path)
-		if strings.HasPrefix(base, ".#") {
-			// Emacs noise.
-			return nil
-		}
-		fi, err := os.Lstat(path)
-		if err != nil {
-			// Just ignore it.
-			return nil
-		}
-		if w.shouldTraverse(dir, fi) {
-			return fastwalk.ErrTraverseLink
-		}
-	}
-	return nil
-}
-
-// shouldTraverse reports whether the symlink fi, found in dir,
-// should be followed.  It makes sure symlinks were never visited
-// before to avoid symlink loops.
-func (w *walker) shouldTraverse(dir string, fi os.FileInfo) bool {
-	path := filepath.Join(dir, fi.Name())
-	target, err := filepath.EvalSymlinks(path)
-	if err != nil {
-		return false
-	}
-	ts, err := os.Stat(target)
-	if err != nil {
-		fmt.Fprintln(os.Stderr, err)
-		return false
-	}
-	if !ts.IsDir() {
-		return false
-	}
-	if w.shouldSkipDir(ts, dir) {
-		return false
-	}
-	// Check for symlink loops by statting each directory component
-	// and seeing if any are the same file as ts.
-	for {
-		parent := filepath.Dir(path)
-		if parent == path {
-			// Made it to the root without seeing a cycle.
-			// Use this symlink.
-			return true
-		}
-		parentInfo, err := os.Stat(parent)
-		if err != nil {
-			return false
-		}
-		if os.SameFile(ts, parentInfo) {
-			// Cycle. Don't traverse.
-			return false
-		}
-		path = parent
-	}
-
-}

+ 0 - 1730
vendor/golang.org/x/tools/internal/imports/fix.go

@@ -1,1730 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package imports
-
-import (
-	"bytes"
-	"context"
-	"encoding/json"
-	"fmt"
-	"go/ast"
-	"go/build"
-	"go/parser"
-	"go/token"
-	"io/ioutil"
-	"os"
-	"path"
-	"path/filepath"
-	"reflect"
-	"sort"
-	"strconv"
-	"strings"
-	"sync"
-	"unicode"
-	"unicode/utf8"
-
-	"golang.org/x/tools/go/ast/astutil"
-	"golang.org/x/tools/internal/gocommand"
-	"golang.org/x/tools/internal/gopathwalk"
-)
-
-// importToGroup is a list of functions which map from an import path to
-// a group number.
-var importToGroup = []func(localPrefix, importPath string) (num int, ok bool){
-	func(localPrefix, importPath string) (num int, ok bool) {
-		if localPrefix == "" {
-			return
-		}
-		for _, p := range strings.Split(localPrefix, ",") {
-			if strings.HasPrefix(importPath, p) || strings.TrimSuffix(p, "/") == importPath {
-				return 3, true
-			}
-		}
-		return
-	},
-	func(_, importPath string) (num int, ok bool) {
-		if strings.HasPrefix(importPath, "appengine") {
-			return 2, true
-		}
-		return
-	},
-	func(_, importPath string) (num int, ok bool) {
-		firstComponent := strings.Split(importPath, "/")[0]
-		if strings.Contains(firstComponent, ".") {
-			return 1, true
-		}
-		return
-	},
-}
-
-func importGroup(localPrefix, importPath string) int {
-	for _, fn := range importToGroup {
-		if n, ok := fn(localPrefix, importPath); ok {
-			return n
-		}
-	}
-	return 0
-}
-
-type ImportFixType int
-
-const (
-	AddImport ImportFixType = iota
-	DeleteImport
-	SetImportName
-)
-
-type ImportFix struct {
-	// StmtInfo represents the import statement this fix will add, remove, or change.
-	StmtInfo ImportInfo
-	// IdentName is the identifier that this fix will add or remove.
-	IdentName string
-	// FixType is the type of fix this is (AddImport, DeleteImport, SetImportName).
-	FixType   ImportFixType
-	Relevance float64 // see pkg
-}
-
-// An ImportInfo represents a single import statement.
-type ImportInfo struct {
-	ImportPath string // import path, e.g. "crypto/rand".
-	Name       string // import name, e.g. "crand", or "" if none.
-}
-
-// A packageInfo represents what's known about a package.
-type packageInfo struct {
-	name    string          // real package name, if known.
-	exports map[string]bool // known exports.
-}
-
-// parseOtherFiles parses all the Go files in srcDir except filename, including
-// test files if filename looks like a test.
-func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File {
-	// This could use go/packages but it doesn't buy much, and it fails
-	// with https://golang.org/issue/26296 in LoadFiles mode in some cases.
-	considerTests := strings.HasSuffix(filename, "_test.go")
-
-	fileBase := filepath.Base(filename)
-	packageFileInfos, err := ioutil.ReadDir(srcDir)
-	if err != nil {
-		return nil
-	}
-
-	var files []*ast.File
-	for _, fi := range packageFileInfos {
-		if fi.Name() == fileBase || !strings.HasSuffix(fi.Name(), ".go") {
-			continue
-		}
-		if !considerTests && strings.HasSuffix(fi.Name(), "_test.go") {
-			continue
-		}
-
-		f, err := parser.ParseFile(fset, filepath.Join(srcDir, fi.Name()), nil, 0)
-		if err != nil {
-			continue
-		}
-
-		files = append(files, f)
-	}
-
-	return files
-}
-
-// addGlobals puts the names of package vars into the provided map.
-func addGlobals(f *ast.File, globals map[string]bool) {
-	for _, decl := range f.Decls {
-		genDecl, ok := decl.(*ast.GenDecl)
-		if !ok {
-			continue
-		}
-
-		for _, spec := range genDecl.Specs {
-			valueSpec, ok := spec.(*ast.ValueSpec)
-			if !ok {
-				continue
-			}
-			globals[valueSpec.Names[0].Name] = true
-		}
-	}
-}
-
-// collectReferences builds a map of selector expressions, from
-// left hand side (X) to a set of right hand sides (Sel).
-func collectReferences(f *ast.File) references {
-	refs := references{}
-
-	var visitor visitFn
-	visitor = func(node ast.Node) ast.Visitor {
-		if node == nil {
-			return visitor
-		}
-		switch v := node.(type) {
-		case *ast.SelectorExpr:
-			xident, ok := v.X.(*ast.Ident)
-			if !ok {
-				break
-			}
-			if xident.Obj != nil {
-				// If the parser can resolve it, it's not a package ref.
-				break
-			}
-			if !ast.IsExported(v.Sel.Name) {
-				// Whatever this is, it's not exported from a package.
-				break
-			}
-			pkgName := xident.Name
-			r := refs[pkgName]
-			if r == nil {
-				r = make(map[string]bool)
-				refs[pkgName] = r
-			}
-			r[v.Sel.Name] = true
-		}
-		return visitor
-	}
-	ast.Walk(visitor, f)
-	return refs
-}
-
-// collectImports returns all the imports in f.
-// Unnamed imports (., _) and "C" are ignored.
-func collectImports(f *ast.File) []*ImportInfo {
-	var imports []*ImportInfo
-	for _, imp := range f.Imports {
-		var name string
-		if imp.Name != nil {
-			name = imp.Name.Name
-		}
-		if imp.Path.Value == `"C"` || name == "_" || name == "." {
-			continue
-		}
-		path := strings.Trim(imp.Path.Value, `"`)
-		imports = append(imports, &ImportInfo{
-			Name:       name,
-			ImportPath: path,
-		})
-	}
-	return imports
-}
-
-// findMissingImport searches pass's candidates for an import that provides
-// pkg, containing all of syms.
-func (p *pass) findMissingImport(pkg string, syms map[string]bool) *ImportInfo {
-	for _, candidate := range p.candidates {
-		pkgInfo, ok := p.knownPackages[candidate.ImportPath]
-		if !ok {
-			continue
-		}
-		if p.importIdentifier(candidate) != pkg {
-			continue
-		}
-
-		allFound := true
-		for right := range syms {
-			if !pkgInfo.exports[right] {
-				allFound = false
-				break
-			}
-		}
-
-		if allFound {
-			return candidate
-		}
-	}
-	return nil
-}
-
-// references is set of references found in a Go file. The first map key is the
-// left hand side of a selector expression, the second key is the right hand
-// side, and the value should always be true.
-type references map[string]map[string]bool
-
-// A pass contains all the inputs and state necessary to fix a file's imports.
-// It can be modified in some ways during use; see comments below.
-type pass struct {
-	// Inputs. These must be set before a call to load, and not modified after.
-	fset                 *token.FileSet // fset used to parse f and its siblings.
-	f                    *ast.File      // the file being fixed.
-	srcDir               string         // the directory containing f.
-	env                  *ProcessEnv    // the environment to use for go commands, etc.
-	loadRealPackageNames bool           // if true, load package names from disk rather than guessing them.
-	otherFiles           []*ast.File    // sibling files.
-
-	// Intermediate state, generated by load.
-	existingImports map[string]*ImportInfo
-	allRefs         references
-	missingRefs     references
-
-	// Inputs to fix. These can be augmented between successive fix calls.
-	lastTry       bool                    // indicates that this is the last call and fix should clean up as best it can.
-	candidates    []*ImportInfo           // candidate imports in priority order.
-	knownPackages map[string]*packageInfo // information about all known packages.
-}
-
-// loadPackageNames saves the package names for everything referenced by imports.
-func (p *pass) loadPackageNames(imports []*ImportInfo) error {
-	if p.env.Logf != nil {
-		p.env.Logf("loading package names for %v packages", len(imports))
-		defer func() {
-			p.env.Logf("done loading package names for %v packages", len(imports))
-		}()
-	}
-	var unknown []string
-	for _, imp := range imports {
-		if _, ok := p.knownPackages[imp.ImportPath]; ok {
-			continue
-		}
-		unknown = append(unknown, imp.ImportPath)
-	}
-
-	resolver, err := p.env.GetResolver()
-	if err != nil {
-		return err
-	}
-
-	names, err := resolver.loadPackageNames(unknown, p.srcDir)
-	if err != nil {
-		return err
-	}
-
-	for path, name := range names {
-		p.knownPackages[path] = &packageInfo{
-			name:    name,
-			exports: map[string]bool{},
-		}
-	}
-	return nil
-}
-
-// importIdentifier returns the identifier that imp will introduce. It will
-// guess if the package name has not been loaded, e.g. because the source
-// is not available.
-func (p *pass) importIdentifier(imp *ImportInfo) string {
-	if imp.Name != "" {
-		return imp.Name
-	}
-	known := p.knownPackages[imp.ImportPath]
-	if known != nil && known.name != "" {
-		return known.name
-	}
-	return ImportPathToAssumedName(imp.ImportPath)
-}
-
-// load reads in everything necessary to run a pass, and reports whether the
-// file already has all the imports it needs. It fills in p.missingRefs with the
-// file's missing symbols, if any, or removes unused imports if not.
-func (p *pass) load() ([]*ImportFix, bool) {
-	p.knownPackages = map[string]*packageInfo{}
-	p.missingRefs = references{}
-	p.existingImports = map[string]*ImportInfo{}
-
-	// Load basic information about the file in question.
-	p.allRefs = collectReferences(p.f)
-
-	// Load stuff from other files in the same package:
-	// global variables so we know they don't need resolving, and imports
-	// that we might want to mimic.
-	globals := map[string]bool{}
-	for _, otherFile := range p.otherFiles {
-		// Don't load globals from files that are in the same directory
-		// but a different package. Using them to suggest imports is OK.
-		if p.f.Name.Name == otherFile.Name.Name {
-			addGlobals(otherFile, globals)
-		}
-		p.candidates = append(p.candidates, collectImports(otherFile)...)
-	}
-
-	// Resolve all the import paths we've seen to package names, and store
-	// f's imports by the identifier they introduce.
-	imports := collectImports(p.f)
-	if p.loadRealPackageNames {
-		err := p.loadPackageNames(append(imports, p.candidates...))
-		if err != nil {
-			if p.env.Logf != nil {
-				p.env.Logf("loading package names: %v", err)
-			}
-			return nil, false
-		}
-	}
-	for _, imp := range imports {
-		p.existingImports[p.importIdentifier(imp)] = imp
-	}
-
-	// Find missing references.
-	for left, rights := range p.allRefs {
-		if globals[left] {
-			continue
-		}
-		_, ok := p.existingImports[left]
-		if !ok {
-			p.missingRefs[left] = rights
-			continue
-		}
-	}
-	if len(p.missingRefs) != 0 {
-		return nil, false
-	}
-
-	return p.fix()
-}
-
-// fix attempts to satisfy missing imports using p.candidates. If it finds
-// everything, or if p.lastTry is true, it updates fixes to add the imports it found,
-// delete anything unused, and update import names, and returns true.
-func (p *pass) fix() ([]*ImportFix, bool) {
-	// Find missing imports.
-	var selected []*ImportInfo
-	for left, rights := range p.missingRefs {
-		if imp := p.findMissingImport(left, rights); imp != nil {
-			selected = append(selected, imp)
-		}
-	}
-
-	if !p.lastTry && len(selected) != len(p.missingRefs) {
-		return nil, false
-	}
-
-	// Found everything, or giving up. Add the new imports and remove any unused.
-	var fixes []*ImportFix
-	for _, imp := range p.existingImports {
-		// We deliberately ignore globals here, because we can't be sure
-		// they're in the same package. People do things like put multiple
-		// main packages in the same directory, and we don't want to
-		// remove imports if they happen to have the same name as a var in
-		// a different package.
-		if _, ok := p.allRefs[p.importIdentifier(imp)]; !ok {
-			fixes = append(fixes, &ImportFix{
-				StmtInfo:  *imp,
-				IdentName: p.importIdentifier(imp),
-				FixType:   DeleteImport,
-			})
-			continue
-		}
-
-		// An existing import may need to update its import name to be correct.
-		if name := p.importSpecName(imp); name != imp.Name {
-			fixes = append(fixes, &ImportFix{
-				StmtInfo: ImportInfo{
-					Name:       name,
-					ImportPath: imp.ImportPath,
-				},
-				IdentName: p.importIdentifier(imp),
-				FixType:   SetImportName,
-			})
-		}
-	}
-
-	for _, imp := range selected {
-		fixes = append(fixes, &ImportFix{
-			StmtInfo: ImportInfo{
-				Name:       p.importSpecName(imp),
-				ImportPath: imp.ImportPath,
-			},
-			IdentName: p.importIdentifier(imp),
-			FixType:   AddImport,
-		})
-	}
-
-	return fixes, true
-}
-
-// importSpecName gets the import name of imp in the import spec.
-//
-// When the import identifier matches the assumed import name, the import name does
-// not appear in the import spec.
-func (p *pass) importSpecName(imp *ImportInfo) string {
-	// If we did not load the real package names, or the name is already set,
-	// we just return the existing name.
-	if !p.loadRealPackageNames || imp.Name != "" {
-		return imp.Name
-	}
-
-	ident := p.importIdentifier(imp)
-	if ident == ImportPathToAssumedName(imp.ImportPath) {
-		return "" // ident not needed since the assumed and real names are the same.
-	}
-	return ident
-}
-
-// apply will perform the fixes on f in order.
-func apply(fset *token.FileSet, f *ast.File, fixes []*ImportFix) {
-	for _, fix := range fixes {
-		switch fix.FixType {
-		case DeleteImport:
-			astutil.DeleteNamedImport(fset, f, fix.StmtInfo.Name, fix.StmtInfo.ImportPath)
-		case AddImport:
-			astutil.AddNamedImport(fset, f, fix.StmtInfo.Name, fix.StmtInfo.ImportPath)
-		case SetImportName:
-			// Find the matching import path and change the name.
-			for _, spec := range f.Imports {
-				path := strings.Trim(spec.Path.Value, `"`)
-				if path == fix.StmtInfo.ImportPath {
-					spec.Name = &ast.Ident{
-						Name:    fix.StmtInfo.Name,
-						NamePos: spec.Pos(),
-					}
-				}
-			}
-		}
-	}
-}
-
-// assumeSiblingImportsValid assumes that siblings' use of packages is valid,
-// adding the exports they use.
-func (p *pass) assumeSiblingImportsValid() {
-	for _, f := range p.otherFiles {
-		refs := collectReferences(f)
-		imports := collectImports(f)
-		importsByName := map[string]*ImportInfo{}
-		for _, imp := range imports {
-			importsByName[p.importIdentifier(imp)] = imp
-		}
-		for left, rights := range refs {
-			if imp, ok := importsByName[left]; ok {
-				if m, ok := stdlib[imp.ImportPath]; ok {
-					// We have the stdlib in memory; no need to guess.
-					rights = copyExports(m)
-				}
-				p.addCandidate(imp, &packageInfo{
-					// no name; we already know it.
-					exports: rights,
-				})
-			}
-		}
-	}
-}
-
-// addCandidate adds a candidate import to p, and merges in the information
-// in pkg.
-func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) {
-	p.candidates = append(p.candidates, imp)
-	if existing, ok := p.knownPackages[imp.ImportPath]; ok {
-		if existing.name == "" {
-			existing.name = pkg.name
-		}
-		for export := range pkg.exports {
-			existing.exports[export] = true
-		}
-	} else {
-		p.knownPackages[imp.ImportPath] = pkg
-	}
-}
-
-// fixImports adds and removes imports from f so that all its references are
-// satisfied and there are no unused imports.
-//
-// This is declared as a variable rather than a function so goimports can
-// easily be extended by adding a file with an init function.
-var fixImports = fixImportsDefault
-
-func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error {
-	fixes, err := getFixes(fset, f, filename, env)
-	if err != nil {
-		return err
-	}
-	apply(fset, f, fixes)
-	return err
-}
-
-// getFixes gets the import fixes that need to be made to f in order to fix the imports.
-// It does not modify the ast.
-func getFixes(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) ([]*ImportFix, error) {
-	abs, err := filepath.Abs(filename)
-	if err != nil {
-		return nil, err
-	}
-	srcDir := filepath.Dir(abs)
-	if env.Logf != nil {
-		env.Logf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir)
-	}
-
-	// First pass: looking only at f, and using the naive algorithm to
-	// derive package names from import paths, see if the file is already
-	// complete. We can't add any imports yet, because we don't know
-	// if missing references are actually package vars.
-	p := &pass{fset: fset, f: f, srcDir: srcDir, env: env}
-	if fixes, done := p.load(); done {
-		return fixes, nil
-	}
-
-	otherFiles := parseOtherFiles(fset, srcDir, filename)
-
-	// Second pass: add information from other files in the same package,
-	// like their package vars and imports.
-	p.otherFiles = otherFiles
-	if fixes, done := p.load(); done {
-		return fixes, nil
-	}
-
-	// Now we can try adding imports from the stdlib.
-	p.assumeSiblingImportsValid()
-	addStdlibCandidates(p, p.missingRefs)
-	if fixes, done := p.fix(); done {
-		return fixes, nil
-	}
-
-	// Third pass: get real package names where we had previously used
-	// the naive algorithm.
-	p = &pass{fset: fset, f: f, srcDir: srcDir, env: env}
-	p.loadRealPackageNames = true
-	p.otherFiles = otherFiles
-	if fixes, done := p.load(); done {
-		return fixes, nil
-	}
-
-	if err := addStdlibCandidates(p, p.missingRefs); err != nil {
-		return nil, err
-	}
-	p.assumeSiblingImportsValid()
-	if fixes, done := p.fix(); done {
-		return fixes, nil
-	}
-
-	// Go look for candidates in $GOPATH, etc. We don't necessarily load
-	// the real exports of sibling imports, so keep assuming their contents.
-	if err := addExternalCandidates(p, p.missingRefs, filename); err != nil {
-		return nil, err
-	}
-
-	p.lastTry = true
-	fixes, _ := p.fix()
-	return fixes, nil
-}
-
-// MaxRelevance is the highest relevance, used for the standard library.
-// Chosen arbitrarily to match pre-existing gopls code.
-const MaxRelevance = 7.0
-
-// getCandidatePkgs works with the passed callback to find all acceptable packages.
-// It deduplicates by import path, and uses a cached stdlib rather than reading
-// from disk.
-func getCandidatePkgs(ctx context.Context, wrappedCallback *scanCallback, filename, filePkg string, env *ProcessEnv) error {
-	notSelf := func(p *pkg) bool {
-		return p.packageName != filePkg || p.dir != filepath.Dir(filename)
-	}
-	goenv, err := env.goEnv()
-	if err != nil {
-		return err
-	}
-
-	var mu sync.Mutex // to guard asynchronous access to dupCheck
-	dupCheck := map[string]struct{}{}
-
-	// Start off with the standard library.
-	for importPath, exports := range stdlib {
-		p := &pkg{
-			dir:             filepath.Join(goenv["GOROOT"], "src", importPath),
-			importPathShort: importPath,
-			packageName:     path.Base(importPath),
-			relevance:       MaxRelevance,
-		}
-		dupCheck[importPath] = struct{}{}
-		if notSelf(p) && wrappedCallback.dirFound(p) && wrappedCallback.packageNameLoaded(p) {
-			wrappedCallback.exportsLoaded(p, exports)
-		}
-	}
-
-	scanFilter := &scanCallback{
-		rootFound: func(root gopathwalk.Root) bool {
-			// Exclude goroot results -- getting them is relatively expensive, not cached,
-			// and generally redundant with the in-memory version.
-			return root.Type != gopathwalk.RootGOROOT && wrappedCallback.rootFound(root)
-		},
-		dirFound: wrappedCallback.dirFound,
-		packageNameLoaded: func(pkg *pkg) bool {
-			mu.Lock()
-			defer mu.Unlock()
-			if _, ok := dupCheck[pkg.importPathShort]; ok {
-				return false
-			}
-			dupCheck[pkg.importPathShort] = struct{}{}
-			return notSelf(pkg) && wrappedCallback.packageNameLoaded(pkg)
-		},
-		exportsLoaded: func(pkg *pkg, exports []string) {
-			// If we're an x_test, load the package under test's test variant.
-			if strings.HasSuffix(filePkg, "_test") && pkg.dir == filepath.Dir(filename) {
-				var err error
-				_, exports, err = loadExportsFromFiles(ctx, env, pkg.dir, true)
-				if err != nil {
-					return
-				}
-			}
-			wrappedCallback.exportsLoaded(pkg, exports)
-		},
-	}
-	resolver, err := env.GetResolver()
-	if err != nil {
-		return err
-	}
-	return resolver.scan(ctx, scanFilter)
-}
-
-func ScoreImportPaths(ctx context.Context, env *ProcessEnv, paths []string) (map[string]float64, error) {
-	result := make(map[string]float64)
-	resolver, err := env.GetResolver()
-	if err != nil {
-		return nil, err
-	}
-	for _, path := range paths {
-		result[path] = resolver.scoreImportPath(ctx, path)
-	}
-	return result, nil
-}
-
-func PrimeCache(ctx context.Context, env *ProcessEnv) error {
-	// Fully scan the disk for directories, but don't actually read any Go files.
-	callback := &scanCallback{
-		rootFound: func(gopathwalk.Root) bool {
-			return true
-		},
-		dirFound: func(pkg *pkg) bool {
-			return false
-		},
-		packageNameLoaded: func(pkg *pkg) bool {
-			return false
-		},
-	}
-	return getCandidatePkgs(ctx, callback, "", "", env)
-}
-
-func candidateImportName(pkg *pkg) string {
-	if ImportPathToAssumedName(pkg.importPathShort) != pkg.packageName {
-		return pkg.packageName
-	}
-	return ""
-}
-
-// GetAllCandidates calls wrapped for each package whose name starts with
-// searchPrefix, and can be imported from filename with the package name filePkg.
-func GetAllCandidates(ctx context.Context, wrapped func(ImportFix), searchPrefix, filename, filePkg string, env *ProcessEnv) error {
-	callback := &scanCallback{
-		rootFound: func(gopathwalk.Root) bool {
-			return true
-		},
-		dirFound: func(pkg *pkg) bool {
-			if !canUse(filename, pkg.dir) {
-				return false
-			}
-			// Try the assumed package name first, then a simpler path match
-			// in case of packages named vN, which are not uncommon.
-			return strings.HasPrefix(ImportPathToAssumedName(pkg.importPathShort), searchPrefix) ||
-				strings.HasPrefix(path.Base(pkg.importPathShort), searchPrefix)
-		},
-		packageNameLoaded: func(pkg *pkg) bool {
-			if !strings.HasPrefix(pkg.packageName, searchPrefix) {
-				return false
-			}
-			wrapped(ImportFix{
-				StmtInfo: ImportInfo{
-					ImportPath: pkg.importPathShort,
-					Name:       candidateImportName(pkg),
-				},
-				IdentName: pkg.packageName,
-				FixType:   AddImport,
-				Relevance: pkg.relevance,
-			})
-			return false
-		},
-	}
-	return getCandidatePkgs(ctx, callback, filename, filePkg, env)
-}
-
-// GetImportPaths calls wrapped for each package whose import path starts with
-// searchPrefix, and can be imported from filename with the package name filePkg.
-func GetImportPaths(ctx context.Context, wrapped func(ImportFix), searchPrefix, filename, filePkg string, env *ProcessEnv) error {
-	callback := &scanCallback{
-		rootFound: func(gopathwalk.Root) bool {
-			return true
-		},
-		dirFound: func(pkg *pkg) bool {
-			if !canUse(filename, pkg.dir) {
-				return false
-			}
-			return strings.HasPrefix(pkg.importPathShort, searchPrefix)
-		},
-		packageNameLoaded: func(pkg *pkg) bool {
-			wrapped(ImportFix{
-				StmtInfo: ImportInfo{
-					ImportPath: pkg.importPathShort,
-					Name:       candidateImportName(pkg),
-				},
-				IdentName: pkg.packageName,
-				FixType:   AddImport,
-				Relevance: pkg.relevance,
-			})
-			return false
-		},
-	}
-	return getCandidatePkgs(ctx, callback, filename, filePkg, env)
-}
-
-// A PackageExport is a package and its exports.
-type PackageExport struct {
-	Fix     *ImportFix
-	Exports []string
-}
-
-// GetPackageExports returns all known packages with name pkg and their exports.
-func GetPackageExports(ctx context.Context, wrapped func(PackageExport), searchPkg, filename, filePkg string, env *ProcessEnv) error {
-	callback := &scanCallback{
-		rootFound: func(gopathwalk.Root) bool {
-			return true
-		},
-		dirFound: func(pkg *pkg) bool {
-			return pkgIsCandidate(filename, references{searchPkg: nil}, pkg)
-		},
-		packageNameLoaded: func(pkg *pkg) bool {
-			return pkg.packageName == searchPkg
-		},
-		exportsLoaded: func(pkg *pkg, exports []string) {
-			sort.Strings(exports)
-			wrapped(PackageExport{
-				Fix: &ImportFix{
-					StmtInfo: ImportInfo{
-						ImportPath: pkg.importPathShort,
-						Name:       candidateImportName(pkg),
-					},
-					IdentName: pkg.packageName,
-					FixType:   AddImport,
-					Relevance: pkg.relevance,
-				},
-				Exports: exports,
-			})
-		},
-	}
-	return getCandidatePkgs(ctx, callback, filename, filePkg, env)
-}
-
-var RequiredGoEnvVars = []string{"GO111MODULE", "GOFLAGS", "GOINSECURE", "GOMOD", "GOMODCACHE", "GONOPROXY", "GONOSUMDB", "GOPATH", "GOPROXY", "GOROOT", "GOSUMDB"}
-
-// ProcessEnv contains environment variables and settings that affect the use of
-// the go command, the go/build package, etc.
-type ProcessEnv struct {
-	GocmdRunner *gocommand.Runner
-
-	BuildFlags []string
-	ModFlag    string
-	ModFile    string
-
-	// Env overrides the OS environment, and can be used to specify
-	// GOPROXY, GO111MODULE, etc. PATH cannot be set here, because
-	// exec.Command will not honor it.
-	// Specifying all of RequiredGoEnvVars avoids a call to `go env`.
-	Env map[string]string
-
-	WorkingDir string
-
-	// If Logf is non-nil, debug logging is enabled through this function.
-	Logf func(format string, args ...interface{})
-
-	initialized bool
-
-	resolver Resolver
-}
-
-func (e *ProcessEnv) goEnv() (map[string]string, error) {
-	if err := e.init(); err != nil {
-		return nil, err
-	}
-	return e.Env, nil
-}
-
-func (e *ProcessEnv) matchFile(dir, name string) (bool, error) {
-	bctx, err := e.buildContext()
-	if err != nil {
-		return false, err
-	}
-	return bctx.MatchFile(dir, name)
-}
-
-// CopyConfig copies the env's configuration into a new env.
-func (e *ProcessEnv) CopyConfig() *ProcessEnv {
-	copy := &ProcessEnv{
-		GocmdRunner: e.GocmdRunner,
-		initialized: e.initialized,
-		BuildFlags:  e.BuildFlags,
-		Logf:        e.Logf,
-		WorkingDir:  e.WorkingDir,
-		resolver:    nil,
-		Env:         map[string]string{},
-	}
-	for k, v := range e.Env {
-		copy.Env[k] = v
-	}
-	return copy
-}
-
-func (e *ProcessEnv) init() error {
-	if e.initialized {
-		return nil
-	}
-
-	foundAllRequired := true
-	for _, k := range RequiredGoEnvVars {
-		if _, ok := e.Env[k]; !ok {
-			foundAllRequired = false
-			break
-		}
-	}
-	if foundAllRequired {
-		e.initialized = true
-		return nil
-	}
-
-	if e.Env == nil {
-		e.Env = map[string]string{}
-	}
-
-	goEnv := map[string]string{}
-	stdout, err := e.invokeGo(context.TODO(), "env", append([]string{"-json"}, RequiredGoEnvVars...)...)
-	if err != nil {
-		return err
-	}
-	if err := json.Unmarshal(stdout.Bytes(), &goEnv); err != nil {
-		return err
-	}
-	for k, v := range goEnv {
-		e.Env[k] = v
-	}
-	e.initialized = true
-	return nil
-}
-
-func (e *ProcessEnv) env() []string {
-	var env []string // the gocommand package will prepend os.Environ.
-	for k, v := range e.Env {
-		env = append(env, k+"="+v)
-	}
-	return env
-}
-
-func (e *ProcessEnv) GetResolver() (Resolver, error) {
-	if e.resolver != nil {
-		return e.resolver, nil
-	}
-	if err := e.init(); err != nil {
-		return nil, err
-	}
-	if len(e.Env["GOMOD"]) == 0 {
-		e.resolver = newGopathResolver(e)
-		return e.resolver, nil
-	}
-	e.resolver = newModuleResolver(e)
-	return e.resolver, nil
-}
-
-func (e *ProcessEnv) buildContext() (*build.Context, error) {
-	ctx := build.Default
-	goenv, err := e.goEnv()
-	if err != nil {
-		return nil, err
-	}
-	ctx.GOROOT = goenv["GOROOT"]
-	ctx.GOPATH = goenv["GOPATH"]
-
-	// As of Go 1.14, build.Context has a Dir field
-	// (see golang.org/issue/34860).
-	// Populate it only if present.
-	rc := reflect.ValueOf(&ctx).Elem()
-	dir := rc.FieldByName("Dir")
-	if dir.IsValid() && dir.Kind() == reflect.String {
-		dir.SetString(e.WorkingDir)
-	}
-
-	// Since Go 1.11, go/build.Context.Import may invoke 'go list' depending on
-	// the value in GO111MODULE in the process's environment. We always want to
-	// run in GOPATH mode when calling Import, so we need to prevent this from
-	// happening. In Go 1.16, GO111MODULE defaults to "on", so this problem comes
-	// up more frequently.
-	//
-	// HACK: setting any of the Context I/O hooks prevents Import from invoking
-	// 'go list', regardless of GO111MODULE. This is undocumented, but it's
-	// unlikely to change before GOPATH support is removed.
-	ctx.ReadDir = ioutil.ReadDir
-
-	return &ctx, nil
-}
-
-func (e *ProcessEnv) invokeGo(ctx context.Context, verb string, args ...string) (*bytes.Buffer, error) {
-	inv := gocommand.Invocation{
-		Verb:       verb,
-		Args:       args,
-		BuildFlags: e.BuildFlags,
-		Env:        e.env(),
-		Logf:       e.Logf,
-		WorkingDir: e.WorkingDir,
-	}
-	return e.GocmdRunner.Run(ctx, inv)
-}
-
-func addStdlibCandidates(pass *pass, refs references) error {
-	goenv, err := pass.env.goEnv()
-	if err != nil {
-		return err
-	}
-	add := func(pkg string) {
-		// Prevent self-imports.
-		if path.Base(pkg) == pass.f.Name.Name && filepath.Join(goenv["GOROOT"], "src", pkg) == pass.srcDir {
-			return
-		}
-		exports := copyExports(stdlib[pkg])
-		pass.addCandidate(
-			&ImportInfo{ImportPath: pkg},
-			&packageInfo{name: path.Base(pkg), exports: exports})
-	}
-	for left := range refs {
-		if left == "rand" {
-			// Make sure we try crypto/rand before math/rand.
-			add("crypto/rand")
-			add("math/rand")
-			continue
-		}
-		for importPath := range stdlib {
-			if path.Base(importPath) == left {
-				add(importPath)
-			}
-		}
-	}
-	return nil
-}
-
-// A Resolver does the build-system-specific parts of goimports.
-type Resolver interface {
-	// loadPackageNames loads the package names in importPaths.
-	loadPackageNames(importPaths []string, srcDir string) (map[string]string, error)
-	// scan works with callback to search for packages. See scanCallback for details.
-	scan(ctx context.Context, callback *scanCallback) error
-	// loadExports returns the set of exported symbols in the package at dir.
-	// loadExports may be called concurrently.
-	loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error)
-	// scoreImportPath returns the relevance for an import path.
-	scoreImportPath(ctx context.Context, path string) float64
-
-	ClearForNewScan()
-}
-
-// A scanCallback controls a call to scan and receives its results.
-// In general, minor errors will be silently discarded; a user should not
-// expect to receive a full series of calls for everything.
-type scanCallback struct {
-	// rootFound is called before scanning a new root dir. If it returns true,
-	// the root will be scanned. Returning false will not necessarily prevent
-	// directories from that root making it to dirFound.
-	rootFound func(gopathwalk.Root) bool
-	// dirFound is called when a directory is found that is possibly a Go package.
-	// pkg will be populated with everything except packageName.
-	// If it returns true, the package's name will be loaded.
-	dirFound func(pkg *pkg) bool
-	// packageNameLoaded is called when a package is found and its name is loaded.
-	// If it returns true, the package's exports will be loaded.
-	packageNameLoaded func(pkg *pkg) bool
-	// exportsLoaded is called when a package's exports have been loaded.
-	exportsLoaded func(pkg *pkg, exports []string)
-}
-
-func addExternalCandidates(pass *pass, refs references, filename string) error {
-	var mu sync.Mutex
-	found := make(map[string][]pkgDistance)
-	callback := &scanCallback{
-		rootFound: func(gopathwalk.Root) bool {
-			return true // We want everything.
-		},
-		dirFound: func(pkg *pkg) bool {
-			return pkgIsCandidate(filename, refs, pkg)
-		},
-		packageNameLoaded: func(pkg *pkg) bool {
-			if _, want := refs[pkg.packageName]; !want {
-				return false
-			}
-			if pkg.dir == pass.srcDir && pass.f.Name.Name == pkg.packageName {
-				// The candidate is in the same directory and has the
-				// same package name. Don't try to import ourselves.
-				return false
-			}
-			if !canUse(filename, pkg.dir) {
-				return false
-			}
-			mu.Lock()
-			defer mu.Unlock()
-			found[pkg.packageName] = append(found[pkg.packageName], pkgDistance{pkg, distance(pass.srcDir, pkg.dir)})
-			return false // We'll do our own loading after we sort.
-		},
-	}
-	resolver, err := pass.env.GetResolver()
-	if err != nil {
-		return err
-	}
-	if err = resolver.scan(context.Background(), callback); err != nil {
-		return err
-	}
-
-	// Search for imports matching potential package references.
-	type result struct {
-		imp *ImportInfo
-		pkg *packageInfo
-	}
-	results := make(chan result, len(refs))
-
-	ctx, cancel := context.WithCancel(context.TODO())
-	var wg sync.WaitGroup
-	defer func() {
-		cancel()
-		wg.Wait()
-	}()
-	var (
-		firstErr     error
-		firstErrOnce sync.Once
-	)
-	for pkgName, symbols := range refs {
-		wg.Add(1)
-		go func(pkgName string, symbols map[string]bool) {
-			defer wg.Done()
-
-			found, err := findImport(ctx, pass, found[pkgName], pkgName, symbols, filename)
-
-			if err != nil {
-				firstErrOnce.Do(func() {
-					firstErr = err
-					cancel()
-				})
-				return
-			}
-
-			if found == nil {
-				return // No matching package.
-			}
-
-			imp := &ImportInfo{
-				ImportPath: found.importPathShort,
-			}
-
-			pkg := &packageInfo{
-				name:    pkgName,
-				exports: symbols,
-			}
-			results <- result{imp, pkg}
-		}(pkgName, symbols)
-	}
-	go func() {
-		wg.Wait()
-		close(results)
-	}()
-
-	for result := range results {
-		pass.addCandidate(result.imp, result.pkg)
-	}
-	return firstErr
-}
-
-// notIdentifier reports whether ch is an invalid identifier character.
-func notIdentifier(ch rune) bool {
-	return !('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' ||
-		'0' <= ch && ch <= '9' ||
-		ch == '_' ||
-		ch >= utf8.RuneSelf && (unicode.IsLetter(ch) || unicode.IsDigit(ch)))
-}
-
-// ImportPathToAssumedName returns the assumed package name of an import path.
-// It does this using only string parsing of the import path.
-// It picks the last element of the path that does not look like a major
-// version, and then picks the valid identifier off the start of that element.
-// It is used to determine if a local rename should be added to an import for
-// clarity.
-// This function could be moved to a standard package and exported if we want
-// for use in other tools.
-func ImportPathToAssumedName(importPath string) string {
-	base := path.Base(importPath)
-	if strings.HasPrefix(base, "v") {
-		if _, err := strconv.Atoi(base[1:]); err == nil {
-			dir := path.Dir(importPath)
-			if dir != "." {
-				base = path.Base(dir)
-			}
-		}
-	}
-	base = strings.TrimPrefix(base, "go-")
-	if i := strings.IndexFunc(base, notIdentifier); i >= 0 {
-		base = base[:i]
-	}
-	return base
-}
-
-// gopathResolver implements resolver for GOPATH workspaces.
-type gopathResolver struct {
-	env      *ProcessEnv
-	walked   bool
-	cache    *dirInfoCache
-	scanSema chan struct{} // scanSema prevents concurrent scans.
-}
-
-func newGopathResolver(env *ProcessEnv) *gopathResolver {
-	r := &gopathResolver{
-		env: env,
-		cache: &dirInfoCache{
-			dirs:      map[string]*directoryPackageInfo{},
-			listeners: map[*int]cacheListener{},
-		},
-		scanSema: make(chan struct{}, 1),
-	}
-	r.scanSema <- struct{}{}
-	return r
-}
-
-func (r *gopathResolver) ClearForNewScan() {
-	<-r.scanSema
-	r.cache = &dirInfoCache{
-		dirs:      map[string]*directoryPackageInfo{},
-		listeners: map[*int]cacheListener{},
-	}
-	r.walked = false
-	r.scanSema <- struct{}{}
-}
-
-func (r *gopathResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) {
-	names := map[string]string{}
-	bctx, err := r.env.buildContext()
-	if err != nil {
-		return nil, err
-	}
-	for _, path := range importPaths {
-		names[path] = importPathToName(bctx, path, srcDir)
-	}
-	return names, nil
-}
-
-// importPathToName finds out the actual package name, as declared in its .go files.
-func importPathToName(bctx *build.Context, importPath, srcDir string) string {
-	// Fast path for standard library without going to disk.
-	if _, ok := stdlib[importPath]; ok {
-		return path.Base(importPath) // stdlib packages always match their paths.
-	}
-
-	buildPkg, err := bctx.Import(importPath, srcDir, build.FindOnly)
-	if err != nil {
-		return ""
-	}
-	pkgName, err := packageDirToName(buildPkg.Dir)
-	if err != nil {
-		return ""
-	}
-	return pkgName
-}
-
-// packageDirToName is a faster version of build.Import if
-// the only thing desired is the package name. Given a directory,
-// packageDirToName then only parses one file in the package,
-// trusting that the files in the directory are consistent.
-func packageDirToName(dir string) (packageName string, err error) {
-	d, err := os.Open(dir)
-	if err != nil {
-		return "", err
-	}
-	names, err := d.Readdirnames(-1)
-	d.Close()
-	if err != nil {
-		return "", err
-	}
-	sort.Strings(names) // to have predictable behavior
-	var lastErr error
-	var nfile int
-	for _, name := range names {
-		if !strings.HasSuffix(name, ".go") {
-			continue
-		}
-		if strings.HasSuffix(name, "_test.go") {
-			continue
-		}
-		nfile++
-		fullFile := filepath.Join(dir, name)
-
-		fset := token.NewFileSet()
-		f, err := parser.ParseFile(fset, fullFile, nil, parser.PackageClauseOnly)
-		if err != nil {
-			lastErr = err
-			continue
-		}
-		pkgName := f.Name.Name
-		if pkgName == "documentation" {
-			// Special case from go/build.ImportDir, not
-			// handled by ctx.MatchFile.
-			continue
-		}
-		if pkgName == "main" {
-			// Also skip package main, assuming it's a +build ignore generator or example.
-			// Since you can't import a package main anyway, there's no harm here.
-			continue
-		}
-		return pkgName, nil
-	}
-	if lastErr != nil {
-		return "", lastErr
-	}
-	return "", fmt.Errorf("no importable package found in %d Go files", nfile)
-}
-
-type pkg struct {
-	dir             string  // absolute file path to pkg directory ("/usr/lib/go/src/net/http")
-	importPathShort string  // vendorless import path ("net/http", "a/b")
-	packageName     string  // package name loaded from source if requested
-	relevance       float64 // a weakly-defined score of how relevant a package is. 0 is most relevant.
-}
-
-type pkgDistance struct {
-	pkg      *pkg
-	distance int // relative distance to target
-}
-
-// byDistanceOrImportPathShortLength sorts by relative distance breaking ties
-// on the short import path length and then the import string itself.
-type byDistanceOrImportPathShortLength []pkgDistance
-
-func (s byDistanceOrImportPathShortLength) Len() int { return len(s) }
-func (s byDistanceOrImportPathShortLength) Less(i, j int) bool {
-	di, dj := s[i].distance, s[j].distance
-	if di == -1 {
-		return false
-	}
-	if dj == -1 {
-		return true
-	}
-	if di != dj {
-		return di < dj
-	}
-
-	vi, vj := s[i].pkg.importPathShort, s[j].pkg.importPathShort
-	if len(vi) != len(vj) {
-		return len(vi) < len(vj)
-	}
-	return vi < vj
-}
-func (s byDistanceOrImportPathShortLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-
-func distance(basepath, targetpath string) int {
-	p, err := filepath.Rel(basepath, targetpath)
-	if err != nil {
-		return -1
-	}
-	if p == "." {
-		return 0
-	}
-	return strings.Count(p, string(filepath.Separator)) + 1
-}
-
-func (r *gopathResolver) scan(ctx context.Context, callback *scanCallback) error {
-	add := func(root gopathwalk.Root, dir string) {
-		// We assume cached directories have not changed. We can skip them and their
-		// children.
-		if _, ok := r.cache.Load(dir); ok {
-			return
-		}
-
-		importpath := filepath.ToSlash(dir[len(root.Path)+len("/"):])
-		info := directoryPackageInfo{
-			status:                 directoryScanned,
-			dir:                    dir,
-			rootType:               root.Type,
-			nonCanonicalImportPath: VendorlessPath(importpath),
-		}
-		r.cache.Store(dir, info)
-	}
-	processDir := func(info directoryPackageInfo) {
-		// Skip this directory if we were not able to get the package information successfully.
-		if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil {
-			return
-		}
-
-		p := &pkg{
-			importPathShort: info.nonCanonicalImportPath,
-			dir:             info.dir,
-			relevance:       MaxRelevance - 1,
-		}
-		if info.rootType == gopathwalk.RootGOROOT {
-			p.relevance = MaxRelevance
-		}
-
-		if !callback.dirFound(p) {
-			return
-		}
-		var err error
-		p.packageName, err = r.cache.CachePackageName(info)
-		if err != nil {
-			return
-		}
-
-		if !callback.packageNameLoaded(p) {
-			return
-		}
-		if _, exports, err := r.loadExports(ctx, p, false); err == nil {
-			callback.exportsLoaded(p, exports)
-		}
-	}
-	stop := r.cache.ScanAndListen(ctx, processDir)
-	defer stop()
-
-	goenv, err := r.env.goEnv()
-	if err != nil {
-		return err
-	}
-	var roots []gopathwalk.Root
-	roots = append(roots, gopathwalk.Root{filepath.Join(goenv["GOROOT"], "src"), gopathwalk.RootGOROOT})
-	for _, p := range filepath.SplitList(goenv["GOPATH"]) {
-		roots = append(roots, gopathwalk.Root{filepath.Join(p, "src"), gopathwalk.RootGOPATH})
-	}
-	// The callback is not necessarily safe to use in the goroutine below. Process roots eagerly.
-	roots = filterRoots(roots, callback.rootFound)
-	// We can't cancel walks, because we need them to finish to have a usable
-	// cache. Instead, run them in a separate goroutine and detach.
-	scanDone := make(chan struct{})
-	go func() {
-		select {
-		case <-ctx.Done():
-			return
-		case <-r.scanSema:
-		}
-		defer func() { r.scanSema <- struct{}{} }()
-		gopathwalk.Walk(roots, add, gopathwalk.Options{Logf: r.env.Logf, ModulesEnabled: false})
-		close(scanDone)
-	}()
-	select {
-	case <-ctx.Done():
-	case <-scanDone:
-	}
-	return nil
-}
-
-func (r *gopathResolver) scoreImportPath(ctx context.Context, path string) float64 {
-	if _, ok := stdlib[path]; ok {
-		return MaxRelevance
-	}
-	return MaxRelevance - 1
-}
-
-func filterRoots(roots []gopathwalk.Root, include func(gopathwalk.Root) bool) []gopathwalk.Root {
-	var result []gopathwalk.Root
-	for _, root := range roots {
-		if !include(root) {
-			continue
-		}
-		result = append(result, root)
-	}
-	return result
-}
-
-func (r *gopathResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) {
-	if info, ok := r.cache.Load(pkg.dir); ok && !includeTest {
-		return r.cache.CacheExports(ctx, r.env, info)
-	}
-	return loadExportsFromFiles(ctx, r.env, pkg.dir, includeTest)
-}
-
-// VendorlessPath returns the devendorized version of the import path ipath.
-// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b".
-func VendorlessPath(ipath string) string {
-	// Devendorize for use in import statement.
-	if i := strings.LastIndex(ipath, "/vendor/"); i >= 0 {
-		return ipath[i+len("/vendor/"):]
-	}
-	if strings.HasPrefix(ipath, "vendor/") {
-		return ipath[len("vendor/"):]
-	}
-	return ipath
-}
-
-func loadExportsFromFiles(ctx context.Context, env *ProcessEnv, dir string, includeTest bool) (string, []string, error) {
-	// Look for non-test, buildable .go files which could provide exports.
-	all, err := ioutil.ReadDir(dir)
-	if err != nil {
-		return "", nil, err
-	}
-	var files []os.FileInfo
-	for _, fi := range all {
-		name := fi.Name()
-		if !strings.HasSuffix(name, ".go") || (!includeTest && strings.HasSuffix(name, "_test.go")) {
-			continue
-		}
-		match, err := env.matchFile(dir, fi.Name())
-		if err != nil || !match {
-			continue
-		}
-		files = append(files, fi)
-	}
-
-	if len(files) == 0 {
-		return "", nil, fmt.Errorf("dir %v contains no buildable, non-test .go files", dir)
-	}
-
-	var pkgName string
-	var exports []string
-	fset := token.NewFileSet()
-	for _, fi := range files {
-		select {
-		case <-ctx.Done():
-			return "", nil, ctx.Err()
-		default:
-		}
-
-		fullFile := filepath.Join(dir, fi.Name())
-		f, err := parser.ParseFile(fset, fullFile, nil, 0)
-		if err != nil {
-			if env.Logf != nil {
-				env.Logf("error parsing %v: %v", fullFile, err)
-			}
-			continue
-		}
-		if f.Name.Name == "documentation" {
-			// Special case from go/build.ImportDir, not
-			// handled by MatchFile above.
-			continue
-		}
-		if includeTest && strings.HasSuffix(f.Name.Name, "_test") {
-			// x_test package. We want internal test files only.
-			continue
-		}
-		pkgName = f.Name.Name
-		for name := range f.Scope.Objects {
-			if ast.IsExported(name) {
-				exports = append(exports, name)
-			}
-		}
-	}
-
-	if env.Logf != nil {
-		sortedExports := append([]string(nil), exports...)
-		sort.Strings(sortedExports)
-		env.Logf("loaded exports in dir %v (package %v): %v", dir, pkgName, strings.Join(sortedExports, ", "))
-	}
-	return pkgName, exports, nil
-}
-
-// findImport searches for a package with the given symbols.
-// If no package is found, findImport returns ("", false, nil)
-func findImport(ctx context.Context, pass *pass, candidates []pkgDistance, pkgName string, symbols map[string]bool, filename string) (*pkg, error) {
-	// Sort the candidates by their import package length,
-	// assuming that shorter package names are better than long
-	// ones.  Note that this sorts by the de-vendored name, so
-	// there's no "penalty" for vendoring.
-	sort.Sort(byDistanceOrImportPathShortLength(candidates))
-	if pass.env.Logf != nil {
-		for i, c := range candidates {
-			pass.env.Logf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir)
-		}
-	}
-	resolver, err := pass.env.GetResolver()
-	if err != nil {
-		return nil, err
-	}
-
-	// Collect exports for packages with matching names.
-	rescv := make([]chan *pkg, len(candidates))
-	for i := range candidates {
-		rescv[i] = make(chan *pkg, 1)
-	}
-	const maxConcurrentPackageImport = 4
-	loadExportsSem := make(chan struct{}, maxConcurrentPackageImport)
-
-	ctx, cancel := context.WithCancel(ctx)
-	var wg sync.WaitGroup
-	defer func() {
-		cancel()
-		wg.Wait()
-	}()
-
-	wg.Add(1)
-	go func() {
-		defer wg.Done()
-		for i, c := range candidates {
-			select {
-			case loadExportsSem <- struct{}{}:
-			case <-ctx.Done():
-				return
-			}
-
-			wg.Add(1)
-			go func(c pkgDistance, resc chan<- *pkg) {
-				defer func() {
-					<-loadExportsSem
-					wg.Done()
-				}()
-
-				if pass.env.Logf != nil {
-					pass.env.Logf("loading exports in dir %s (seeking package %s)", c.pkg.dir, pkgName)
-				}
-				// If we're an x_test, load the package under test's test variant.
-				includeTest := strings.HasSuffix(pass.f.Name.Name, "_test") && c.pkg.dir == pass.srcDir
-				_, exports, err := resolver.loadExports(ctx, c.pkg, includeTest)
-				if err != nil {
-					if pass.env.Logf != nil {
-						pass.env.Logf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err)
-					}
-					resc <- nil
-					return
-				}
-
-				exportsMap := make(map[string]bool, len(exports))
-				for _, sym := range exports {
-					exportsMap[sym] = true
-				}
-
-				// If it doesn't have the right
-				// symbols, send nil to mean no match.
-				for symbol := range symbols {
-					if !exportsMap[symbol] {
-						resc <- nil
-						return
-					}
-				}
-				resc <- c.pkg
-			}(c, rescv[i])
-		}
-	}()
-
-	for _, resc := range rescv {
-		pkg := <-resc
-		if pkg == nil {
-			continue
-		}
-		return pkg, nil
-	}
-	return nil, nil
-}
-
-// pkgIsCandidate reports whether pkg is a candidate for satisfying the
-// finding which package pkgIdent in the file named by filename is trying
-// to refer to.
-//
-// This check is purely lexical and is meant to be as fast as possible
-// because it's run over all $GOPATH directories to filter out poor
-// candidates in order to limit the CPU and I/O later parsing the
-// exports in candidate packages.
-//
-// filename is the file being formatted.
-// pkgIdent is the package being searched for, like "client" (if
-// searching for "client.New")
-func pkgIsCandidate(filename string, refs references, pkg *pkg) bool {
-	// Check "internal" and "vendor" visibility:
-	if !canUse(filename, pkg.dir) {
-		return false
-	}
-
-	// Speed optimization to minimize disk I/O:
-	// the last two components on disk must contain the
-	// package name somewhere.
-	//
-	// This permits mismatch naming like directory
-	// "go-foo" being package "foo", or "pkg.v3" being "pkg",
-	// or directory "google.golang.org/api/cloudbilling/v1"
-	// being package "cloudbilling", but doesn't
-	// permit a directory "foo" to be package
-	// "bar", which is strongly discouraged
-	// anyway. There's no reason goimports needs
-	// to be slow just to accommodate that.
-	for pkgIdent := range refs {
-		lastTwo := lastTwoComponents(pkg.importPathShort)
-		if strings.Contains(lastTwo, pkgIdent) {
-			return true
-		}
-		if hasHyphenOrUpperASCII(lastTwo) && !hasHyphenOrUpperASCII(pkgIdent) {
-			lastTwo = lowerASCIIAndRemoveHyphen(lastTwo)
-			if strings.Contains(lastTwo, pkgIdent) {
-				return true
-			}
-		}
-	}
-	return false
-}
-
-func hasHyphenOrUpperASCII(s string) bool {
-	for i := 0; i < len(s); i++ {
-		b := s[i]
-		if b == '-' || ('A' <= b && b <= 'Z') {
-			return true
-		}
-	}
-	return false
-}
-
-func lowerASCIIAndRemoveHyphen(s string) (ret string) {
-	buf := make([]byte, 0, len(s))
-	for i := 0; i < len(s); i++ {
-		b := s[i]
-		switch {
-		case b == '-':
-			continue
-		case 'A' <= b && b <= 'Z':
-			buf = append(buf, b+('a'-'A'))
-		default:
-			buf = append(buf, b)
-		}
-	}
-	return string(buf)
-}
-
-// canUse reports whether the package in dir is usable from filename,
-// respecting the Go "internal" and "vendor" visibility rules.
-func canUse(filename, dir string) bool {
-	// Fast path check, before any allocations. If it doesn't contain vendor
-	// or internal, it's not tricky:
-	// Note that this can false-negative on directories like "notinternal",
-	// but we check it correctly below. This is just a fast path.
-	if !strings.Contains(dir, "vendor") && !strings.Contains(dir, "internal") {
-		return true
-	}
-
-	dirSlash := filepath.ToSlash(dir)
-	if !strings.Contains(dirSlash, "/vendor/") && !strings.Contains(dirSlash, "/internal/") && !strings.HasSuffix(dirSlash, "/internal") {
-		return true
-	}
-	// Vendor or internal directory only visible from children of parent.
-	// That means the path from the current directory to the target directory
-	// can contain ../vendor or ../internal but not ../foo/vendor or ../foo/internal
-	// or bar/vendor or bar/internal.
-	// After stripping all the leading ../, the only okay place to see vendor or internal
-	// is at the very beginning of the path.
-	absfile, err := filepath.Abs(filename)
-	if err != nil {
-		return false
-	}
-	absdir, err := filepath.Abs(dir)
-	if err != nil {
-		return false
-	}
-	rel, err := filepath.Rel(absfile, absdir)
-	if err != nil {
-		return false
-	}
-	relSlash := filepath.ToSlash(rel)
-	if i := strings.LastIndex(relSlash, "../"); i >= 0 {
-		relSlash = relSlash[i+len("../"):]
-	}
-	return !strings.Contains(relSlash, "/vendor/") && !strings.Contains(relSlash, "/internal/") && !strings.HasSuffix(relSlash, "/internal")
-}
-
-// lastTwoComponents returns at most the last two path components
-// of v, using either / or \ as the path separator.
-func lastTwoComponents(v string) string {
-	nslash := 0
-	for i := len(v) - 1; i >= 0; i-- {
-		if v[i] == '/' || v[i] == '\\' {
-			nslash++
-			if nslash == 2 {
-				return v[i:]
-			}
-		}
-	}
-	return v
-}
-
-type visitFn func(node ast.Node) ast.Visitor
-
-func (fn visitFn) Visit(node ast.Node) ast.Visitor {
-	return fn(node)
-}
-
-func copyExports(pkg []string) map[string]bool {
-	m := make(map[string]bool, len(pkg))
-	for _, v := range pkg {
-		m[v] = true
-	}
-	return m
-}

+ 0 - 346
vendor/golang.org/x/tools/internal/imports/imports.go

@@ -1,346 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:generate go run mkstdlib.go
-
-// Package imports implements a Go pretty-printer (like package "go/format")
-// that also adds or removes import statements as necessary.
-package imports
-
-import (
-	"bufio"
-	"bytes"
-	"fmt"
-	"go/ast"
-	"go/format"
-	"go/parser"
-	"go/printer"
-	"go/token"
-	"io"
-	"regexp"
-	"strconv"
-	"strings"
-
-	"golang.org/x/tools/go/ast/astutil"
-)
-
-// Options is golang.org/x/tools/imports.Options with extra internal-only options.
-type Options struct {
-	Env *ProcessEnv // The environment to use. Note: this contains the cached module and filesystem state.
-
-	// LocalPrefix is a comma-separated string of import path prefixes, which, if
-	// set, instructs Process to sort the import paths with the given prefixes
-	// into another group after 3rd-party packages.
-	LocalPrefix string
-
-	Fragment  bool // Accept fragment of a source file (no package statement)
-	AllErrors bool // Report all errors (not just the first 10 on different lines)
-
-	Comments  bool // Print comments (true if nil *Options provided)
-	TabIndent bool // Use tabs for indent (true if nil *Options provided)
-	TabWidth  int  // Tab width (8 if nil *Options provided)
-
-	FormatOnly bool // Disable the insertion and deletion of imports
-}
-
-// Process implements golang.org/x/tools/imports.Process with explicit context in opt.Env.
-func Process(filename string, src []byte, opt *Options) (formatted []byte, err error) {
-	fileSet := token.NewFileSet()
-	file, adjust, err := parse(fileSet, filename, src, opt)
-	if err != nil {
-		return nil, err
-	}
-
-	if !opt.FormatOnly {
-		if err := fixImports(fileSet, file, filename, opt.Env); err != nil {
-			return nil, err
-		}
-	}
-	return formatFile(fileSet, file, src, adjust, opt)
-}
-
-// FixImports returns a list of fixes to the imports that, when applied,
-// will leave the imports in the same state as Process. src and opt must
-// be specified.
-//
-// Note that filename's directory influences which imports can be chosen,
-// so it is important that filename be accurate.
-func FixImports(filename string, src []byte, opt *Options) (fixes []*ImportFix, err error) {
-	fileSet := token.NewFileSet()
-	file, _, err := parse(fileSet, filename, src, opt)
-	if err != nil {
-		return nil, err
-	}
-
-	return getFixes(fileSet, file, filename, opt.Env)
-}
-
-// ApplyFixes applies all of the fixes to the file and formats it. extraMode
-// is added in when parsing the file. src and opts must be specified, but no
-// env is needed.
-func ApplyFixes(fixes []*ImportFix, filename string, src []byte, opt *Options, extraMode parser.Mode) (formatted []byte, err error) {
-	// Don't use parse() -- we don't care about fragments or statement lists
-	// here, and we need to work with unparseable files.
-	fileSet := token.NewFileSet()
-	parserMode := parser.Mode(0)
-	if opt.Comments {
-		parserMode |= parser.ParseComments
-	}
-	if opt.AllErrors {
-		parserMode |= parser.AllErrors
-	}
-	parserMode |= extraMode
-
-	file, err := parser.ParseFile(fileSet, filename, src, parserMode)
-	if file == nil {
-		return nil, err
-	}
-
-	// Apply the fixes to the file.
-	apply(fileSet, file, fixes)
-
-	return formatFile(fileSet, file, src, nil, opt)
-}
-
-func formatFile(fileSet *token.FileSet, file *ast.File, src []byte, adjust func(orig []byte, src []byte) []byte, opt *Options) ([]byte, error) {
-	mergeImports(fileSet, file)
-	sortImports(opt.LocalPrefix, fileSet, file)
-	imps := astutil.Imports(fileSet, file)
-	var spacesBefore []string // import paths we need spaces before
-	for _, impSection := range imps {
-		// Within each block of contiguous imports, see if any
-		// import lines are in different group numbers. If so,
-		// we'll need to put a space between them so it's
-		// compatible with gofmt.
-		lastGroup := -1
-		for _, importSpec := range impSection {
-			importPath, _ := strconv.Unquote(importSpec.Path.Value)
-			groupNum := importGroup(opt.LocalPrefix, importPath)
-			if groupNum != lastGroup && lastGroup != -1 {
-				spacesBefore = append(spacesBefore, importPath)
-			}
-			lastGroup = groupNum
-		}
-
-	}
-
-	printerMode := printer.UseSpaces
-	if opt.TabIndent {
-		printerMode |= printer.TabIndent
-	}
-	printConfig := &printer.Config{Mode: printerMode, Tabwidth: opt.TabWidth}
-
-	var buf bytes.Buffer
-	err := printConfig.Fprint(&buf, fileSet, file)
-	if err != nil {
-		return nil, err
-	}
-	out := buf.Bytes()
-	if adjust != nil {
-		out = adjust(src, out)
-	}
-	if len(spacesBefore) > 0 {
-		out, err = addImportSpaces(bytes.NewReader(out), spacesBefore)
-		if err != nil {
-			return nil, err
-		}
-	}
-
-	out, err = format.Source(out)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-// parse parses src, which was read from filename,
-// as a Go source file or statement list.
-func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast.File, func(orig, src []byte) []byte, error) {
-	parserMode := parser.Mode(0)
-	if opt.Comments {
-		parserMode |= parser.ParseComments
-	}
-	if opt.AllErrors {
-		parserMode |= parser.AllErrors
-	}
-
-	// Try as whole source file.
-	file, err := parser.ParseFile(fset, filename, src, parserMode)
-	if err == nil {
-		return file, nil, nil
-	}
-	// If the error is that the source file didn't begin with a
-	// package line and we accept fragmented input, fall through to
-	// try as a source fragment.  Stop and return on any other error.
-	if !opt.Fragment || !strings.Contains(err.Error(), "expected 'package'") {
-		return nil, nil, err
-	}
-
-	// If this is a declaration list, make it a source file
-	// by inserting a package clause.
-	// Insert using a ;, not a newline, so that parse errors are on
-	// the correct line.
-	const prefix = "package main;"
-	psrc := append([]byte(prefix), src...)
-	file, err = parser.ParseFile(fset, filename, psrc, parserMode)
-	if err == nil {
-		// Gofmt will turn the ; into a \n.
-		// Do that ourselves now and update the file contents,
-		// so that positions and line numbers are correct going forward.
-		psrc[len(prefix)-1] = '\n'
-		fset.File(file.Package).SetLinesForContent(psrc)
-
-		// If a main function exists, we will assume this is a main
-		// package and leave the file.
-		if containsMainFunc(file) {
-			return file, nil, nil
-		}
-
-		adjust := func(orig, src []byte) []byte {
-			// Remove the package clause.
-			src = src[len(prefix):]
-			return matchSpace(orig, src)
-		}
-		return file, adjust, nil
-	}
-	// If the error is that the source file didn't begin with a
-	// declaration, fall through to try as a statement list.
-	// Stop and return on any other error.
-	if !strings.Contains(err.Error(), "expected declaration") {
-		return nil, nil, err
-	}
-
-	// If this is a statement list, make it a source file
-	// by inserting a package clause and turning the list
-	// into a function body.  This handles expressions too.
-	// Insert using a ;, not a newline, so that the line numbers
-	// in fsrc match the ones in src.
-	fsrc := append(append([]byte("package p; func _() {"), src...), '}')
-	file, err = parser.ParseFile(fset, filename, fsrc, parserMode)
-	if err == nil {
-		adjust := func(orig, src []byte) []byte {
-			// Remove the wrapping.
-			// Gofmt has turned the ; into a \n\n.
-			src = src[len("package p\n\nfunc _() {"):]
-			src = src[:len(src)-len("}\n")]
-			// Gofmt has also indented the function body one level.
-			// Remove that indent.
-			src = bytes.Replace(src, []byte("\n\t"), []byte("\n"), -1)
-			return matchSpace(orig, src)
-		}
-		return file, adjust, nil
-	}
-
-	// Failed, and out of options.
-	return nil, nil, err
-}
-
-// containsMainFunc checks if a file contains a function declaration with the
-// function signature 'func main()'
-func containsMainFunc(file *ast.File) bool {
-	for _, decl := range file.Decls {
-		if f, ok := decl.(*ast.FuncDecl); ok {
-			if f.Name.Name != "main" {
-				continue
-			}
-
-			if len(f.Type.Params.List) != 0 {
-				continue
-			}
-
-			if f.Type.Results != nil && len(f.Type.Results.List) != 0 {
-				continue
-			}
-
-			return true
-		}
-	}
-
-	return false
-}
-
-func cutSpace(b []byte) (before, middle, after []byte) {
-	i := 0
-	for i < len(b) && (b[i] == ' ' || b[i] == '\t' || b[i] == '\n') {
-		i++
-	}
-	j := len(b)
-	for j > 0 && (b[j-1] == ' ' || b[j-1] == '\t' || b[j-1] == '\n') {
-		j--
-	}
-	if i <= j {
-		return b[:i], b[i:j], b[j:]
-	}
-	return nil, nil, b[j:]
-}
-
-// matchSpace reformats src to use the same space context as orig.
-// 1) If orig begins with blank lines, matchSpace inserts them at the beginning of src.
-// 2) matchSpace copies the indentation of the first non-blank line in orig
-//    to every non-blank line in src.
-// 3) matchSpace copies the trailing space from orig and uses it in place
-//   of src's trailing space.
-func matchSpace(orig []byte, src []byte) []byte {
-	before, _, after := cutSpace(orig)
-	i := bytes.LastIndex(before, []byte{'\n'})
-	before, indent := before[:i+1], before[i+1:]
-
-	_, src, _ = cutSpace(src)
-
-	var b bytes.Buffer
-	b.Write(before)
-	for len(src) > 0 {
-		line := src
-		if i := bytes.IndexByte(line, '\n'); i >= 0 {
-			line, src = line[:i+1], line[i+1:]
-		} else {
-			src = nil
-		}
-		if len(line) > 0 && line[0] != '\n' { // not blank
-			b.Write(indent)
-		}
-		b.Write(line)
-	}
-	b.Write(after)
-	return b.Bytes()
-}
-
-var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+)"`)
-
-func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) {
-	var out bytes.Buffer
-	in := bufio.NewReader(r)
-	inImports := false
-	done := false
-	for {
-		s, err := in.ReadString('\n')
-		if err == io.EOF {
-			break
-		} else if err != nil {
-			return nil, err
-		}
-
-		if !inImports && !done && strings.HasPrefix(s, "import") {
-			inImports = true
-		}
-		if inImports && (strings.HasPrefix(s, "var") ||
-			strings.HasPrefix(s, "func") ||
-			strings.HasPrefix(s, "const") ||
-			strings.HasPrefix(s, "type")) {
-			done = true
-			inImports = false
-		}
-		if inImports && len(breaks) > 0 {
-			if m := impLine.FindStringSubmatch(s); m != nil {
-				if m[1] == breaks[0] {
-					out.WriteByte('\n')
-					breaks = breaks[1:]
-				}
-			}
-		}
-
-		fmt.Fprint(&out, s)
-	}
-	return out.Bytes(), nil
-}

+ 0 - 695
vendor/golang.org/x/tools/internal/imports/mod.go

@@ -1,695 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package imports
-
-import (
-	"bytes"
-	"context"
-	"encoding/json"
-	"fmt"
-	"io/ioutil"
-	"os"
-	"path"
-	"path/filepath"
-	"regexp"
-	"sort"
-	"strconv"
-	"strings"
-
-	"golang.org/x/mod/module"
-	"golang.org/x/tools/internal/gocommand"
-	"golang.org/x/tools/internal/gopathwalk"
-)
-
-// ModuleResolver implements resolver for modules using the go command as little
-// as feasible.
-type ModuleResolver struct {
-	env            *ProcessEnv
-	moduleCacheDir string
-	dummyVendorMod *gocommand.ModuleJSON // If vendoring is enabled, the pseudo-module that represents the /vendor directory.
-	roots          []gopathwalk.Root
-	scanSema       chan struct{} // scanSema prevents concurrent scans and guards scannedRoots.
-	scannedRoots   map[gopathwalk.Root]bool
-
-	initialized   bool
-	main          *gocommand.ModuleJSON
-	modsByModPath []*gocommand.ModuleJSON // All modules, ordered by # of path components in module Path...
-	modsByDir     []*gocommand.ModuleJSON // ...or Dir.
-
-	// moduleCacheCache stores information about the module cache.
-	moduleCacheCache *dirInfoCache
-	otherCache       *dirInfoCache
-}
-
-func newModuleResolver(e *ProcessEnv) *ModuleResolver {
-	r := &ModuleResolver{
-		env:      e,
-		scanSema: make(chan struct{}, 1),
-	}
-	r.scanSema <- struct{}{}
-	return r
-}
-
-func (r *ModuleResolver) init() error {
-	if r.initialized {
-		return nil
-	}
-
-	goenv, err := r.env.goEnv()
-	if err != nil {
-		return err
-	}
-	inv := gocommand.Invocation{
-		BuildFlags: r.env.BuildFlags,
-		ModFlag:    r.env.ModFlag,
-		ModFile:    r.env.ModFile,
-		Env:        r.env.env(),
-		Logf:       r.env.Logf,
-		WorkingDir: r.env.WorkingDir,
-	}
-	mainMod, vendorEnabled, err := gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner)
-	if err != nil {
-		return err
-	}
-
-	if mainMod != nil && vendorEnabled {
-		// Vendor mode is on, so all the non-Main modules are irrelevant,
-		// and we need to search /vendor for everything.
-		r.main = mainMod
-		r.dummyVendorMod = &gocommand.ModuleJSON{
-			Path: "",
-			Dir:  filepath.Join(mainMod.Dir, "vendor"),
-		}
-		r.modsByModPath = []*gocommand.ModuleJSON{mainMod, r.dummyVendorMod}
-		r.modsByDir = []*gocommand.ModuleJSON{mainMod, r.dummyVendorMod}
-	} else {
-		// Vendor mode is off, so run go list -m ... to find everything.
-		err := r.initAllMods()
-		// We expect an error when running outside of a module with
-		// GO111MODULE=on. Other errors are fatal.
-		if err != nil {
-			if errMsg := err.Error(); !strings.Contains(errMsg, "working directory is not part of a module") && !strings.Contains(errMsg, "go.mod file not found") {
-				return err
-			}
-		}
-	}
-
-	if gmc := r.env.Env["GOMODCACHE"]; gmc != "" {
-		r.moduleCacheDir = gmc
-	} else {
-		gopaths := filepath.SplitList(goenv["GOPATH"])
-		if len(gopaths) == 0 {
-			return fmt.Errorf("empty GOPATH")
-		}
-		r.moduleCacheDir = filepath.Join(gopaths[0], "/pkg/mod")
-	}
-
-	sort.Slice(r.modsByModPath, func(i, j int) bool {
-		count := func(x int) int {
-			return strings.Count(r.modsByModPath[x].Path, "/")
-		}
-		return count(j) < count(i) // descending order
-	})
-	sort.Slice(r.modsByDir, func(i, j int) bool {
-		count := func(x int) int {
-			return strings.Count(r.modsByDir[x].Dir, "/")
-		}
-		return count(j) < count(i) // descending order
-	})
-
-	r.roots = []gopathwalk.Root{
-		{filepath.Join(goenv["GOROOT"], "/src"), gopathwalk.RootGOROOT},
-	}
-	if r.main != nil {
-		r.roots = append(r.roots, gopathwalk.Root{r.main.Dir, gopathwalk.RootCurrentModule})
-	}
-	if vendorEnabled {
-		r.roots = append(r.roots, gopathwalk.Root{r.dummyVendorMod.Dir, gopathwalk.RootOther})
-	} else {
-		addDep := func(mod *gocommand.ModuleJSON) {
-			if mod.Replace == nil {
-				// This is redundant with the cache, but we'll skip it cheaply enough.
-				r.roots = append(r.roots, gopathwalk.Root{mod.Dir, gopathwalk.RootModuleCache})
-			} else {
-				r.roots = append(r.roots, gopathwalk.Root{mod.Dir, gopathwalk.RootOther})
-			}
-		}
-		// Walk dependent modules before scanning the full mod cache, direct deps first.
-		for _, mod := range r.modsByModPath {
-			if !mod.Indirect && !mod.Main {
-				addDep(mod)
-			}
-		}
-		for _, mod := range r.modsByModPath {
-			if mod.Indirect && !mod.Main {
-				addDep(mod)
-			}
-		}
-		r.roots = append(r.roots, gopathwalk.Root{r.moduleCacheDir, gopathwalk.RootModuleCache})
-	}
-
-	r.scannedRoots = map[gopathwalk.Root]bool{}
-	if r.moduleCacheCache == nil {
-		r.moduleCacheCache = &dirInfoCache{
-			dirs:      map[string]*directoryPackageInfo{},
-			listeners: map[*int]cacheListener{},
-		}
-	}
-	if r.otherCache == nil {
-		r.otherCache = &dirInfoCache{
-			dirs:      map[string]*directoryPackageInfo{},
-			listeners: map[*int]cacheListener{},
-		}
-	}
-	r.initialized = true
-	return nil
-}
-
-func (r *ModuleResolver) initAllMods() error {
-	stdout, err := r.env.invokeGo(context.TODO(), "list", "-m", "-e", "-json", "...")
-	if err != nil {
-		return err
-	}
-	for dec := json.NewDecoder(stdout); dec.More(); {
-		mod := &gocommand.ModuleJSON{}
-		if err := dec.Decode(mod); err != nil {
-			return err
-		}
-		if mod.Dir == "" {
-			if r.env.Logf != nil {
-				r.env.Logf("module %v has not been downloaded and will be ignored", mod.Path)
-			}
-			// Can't do anything with a module that's not downloaded.
-			continue
-		}
-		// golang/go#36193: the go command doesn't always clean paths.
-		mod.Dir = filepath.Clean(mod.Dir)
-		r.modsByModPath = append(r.modsByModPath, mod)
-		r.modsByDir = append(r.modsByDir, mod)
-		if mod.Main {
-			r.main = mod
-		}
-	}
-	return nil
-}
-
-func (r *ModuleResolver) ClearForNewScan() {
-	<-r.scanSema
-	r.scannedRoots = map[gopathwalk.Root]bool{}
-	r.otherCache = &dirInfoCache{
-		dirs:      map[string]*directoryPackageInfo{},
-		listeners: map[*int]cacheListener{},
-	}
-	r.scanSema <- struct{}{}
-}
-
-func (r *ModuleResolver) ClearForNewMod() {
-	<-r.scanSema
-	*r = ModuleResolver{
-		env:              r.env,
-		moduleCacheCache: r.moduleCacheCache,
-		otherCache:       r.otherCache,
-		scanSema:         r.scanSema,
-	}
-	r.init()
-	r.scanSema <- struct{}{}
-}
-
-// findPackage returns the module and directory that contains the package at
-// the given import path, or returns nil, "" if no module is in scope.
-func (r *ModuleResolver) findPackage(importPath string) (*gocommand.ModuleJSON, string) {
-	// This can't find packages in the stdlib, but that's harmless for all
-	// the existing code paths.
-	for _, m := range r.modsByModPath {
-		if !strings.HasPrefix(importPath, m.Path) {
-			continue
-		}
-		pathInModule := importPath[len(m.Path):]
-		pkgDir := filepath.Join(m.Dir, pathInModule)
-		if r.dirIsNestedModule(pkgDir, m) {
-			continue
-		}
-
-		if info, ok := r.cacheLoad(pkgDir); ok {
-			if loaded, err := info.reachedStatus(nameLoaded); loaded {
-				if err != nil {
-					continue // No package in this dir.
-				}
-				return m, pkgDir
-			}
-			if scanned, err := info.reachedStatus(directoryScanned); scanned && err != nil {
-				continue // Dir is unreadable, etc.
-			}
-			// This is slightly wrong: a directory doesn't have to have an
-			// importable package to count as a package for package-to-module
-			// resolution. package main or _test files should count but
-			// don't.
-			// TODO(heschi): fix this.
-			if _, err := r.cachePackageName(info); err == nil {
-				return m, pkgDir
-			}
-		}
-
-		// Not cached. Read the filesystem.
-		pkgFiles, err := ioutil.ReadDir(pkgDir)
-		if err != nil {
-			continue
-		}
-		// A module only contains a package if it has buildable go
-		// files in that directory. If not, it could be provided by an
-		// outer module. See #29736.
-		for _, fi := range pkgFiles {
-			if ok, _ := r.env.matchFile(pkgDir, fi.Name()); ok {
-				return m, pkgDir
-			}
-		}
-	}
-	return nil, ""
-}
-
-func (r *ModuleResolver) cacheLoad(dir string) (directoryPackageInfo, bool) {
-	if info, ok := r.moduleCacheCache.Load(dir); ok {
-		return info, ok
-	}
-	return r.otherCache.Load(dir)
-}
-
-func (r *ModuleResolver) cacheStore(info directoryPackageInfo) {
-	if info.rootType == gopathwalk.RootModuleCache {
-		r.moduleCacheCache.Store(info.dir, info)
-	} else {
-		r.otherCache.Store(info.dir, info)
-	}
-}
-
-func (r *ModuleResolver) cacheKeys() []string {
-	return append(r.moduleCacheCache.Keys(), r.otherCache.Keys()...)
-}
-
-// cachePackageName caches the package name for a dir already in the cache.
-func (r *ModuleResolver) cachePackageName(info directoryPackageInfo) (string, error) {
-	if info.rootType == gopathwalk.RootModuleCache {
-		return r.moduleCacheCache.CachePackageName(info)
-	}
-	return r.otherCache.CachePackageName(info)
-}
-
-func (r *ModuleResolver) cacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []string, error) {
-	if info.rootType == gopathwalk.RootModuleCache {
-		return r.moduleCacheCache.CacheExports(ctx, env, info)
-	}
-	return r.otherCache.CacheExports(ctx, env, info)
-}
-
-// findModuleByDir returns the module that contains dir, or nil if no such
-// module is in scope.
-func (r *ModuleResolver) findModuleByDir(dir string) *gocommand.ModuleJSON {
-	// This is quite tricky and may not be correct. dir could be:
-	// - a package in the main module.
-	// - a replace target underneath the main module's directory.
-	//    - a nested module in the above.
-	// - a replace target somewhere totally random.
-	//    - a nested module in the above.
-	// - in the mod cache.
-	// - in /vendor/ in -mod=vendor mode.
-	//    - nested module? Dunno.
-	// Rumor has it that replace targets cannot contain other replace targets.
-	for _, m := range r.modsByDir {
-		if !strings.HasPrefix(dir, m.Dir) {
-			continue
-		}
-
-		if r.dirIsNestedModule(dir, m) {
-			continue
-		}
-
-		return m
-	}
-	return nil
-}
-
-// dirIsNestedModule reports if dir is contained in a nested module underneath
-// mod, not actually in mod.
-func (r *ModuleResolver) dirIsNestedModule(dir string, mod *gocommand.ModuleJSON) bool {
-	if !strings.HasPrefix(dir, mod.Dir) {
-		return false
-	}
-	if r.dirInModuleCache(dir) {
-		// Nested modules in the module cache are pruned,
-		// so it cannot be a nested module.
-		return false
-	}
-	if mod != nil && mod == r.dummyVendorMod {
-		// The /vendor pseudomodule is flattened and doesn't actually count.
-		return false
-	}
-	modDir, _ := r.modInfo(dir)
-	if modDir == "" {
-		return false
-	}
-	return modDir != mod.Dir
-}
-
-func (r *ModuleResolver) modInfo(dir string) (modDir string, modName string) {
-	readModName := func(modFile string) string {
-		modBytes, err := ioutil.ReadFile(modFile)
-		if err != nil {
-			return ""
-		}
-		return modulePath(modBytes)
-	}
-
-	if r.dirInModuleCache(dir) {
-		if matches := modCacheRegexp.FindStringSubmatch(dir); len(matches) == 3 {
-			index := strings.Index(dir, matches[1]+"@"+matches[2])
-			modDir := filepath.Join(dir[:index], matches[1]+"@"+matches[2])
-			return modDir, readModName(filepath.Join(modDir, "go.mod"))
-		}
-	}
-	for {
-		if info, ok := r.cacheLoad(dir); ok {
-			return info.moduleDir, info.moduleName
-		}
-		f := filepath.Join(dir, "go.mod")
-		info, err := os.Stat(f)
-		if err == nil && !info.IsDir() {
-			return dir, readModName(f)
-		}
-
-		d := filepath.Dir(dir)
-		if len(d) >= len(dir) {
-			return "", "" // reached top of file system, no go.mod
-		}
-		dir = d
-	}
-}
-
-func (r *ModuleResolver) dirInModuleCache(dir string) bool {
-	if r.moduleCacheDir == "" {
-		return false
-	}
-	return strings.HasPrefix(dir, r.moduleCacheDir)
-}
-
-func (r *ModuleResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) {
-	if err := r.init(); err != nil {
-		return nil, err
-	}
-	names := map[string]string{}
-	for _, path := range importPaths {
-		_, packageDir := r.findPackage(path)
-		if packageDir == "" {
-			continue
-		}
-		name, err := packageDirToName(packageDir)
-		if err != nil {
-			continue
-		}
-		names[path] = name
-	}
-	return names, nil
-}
-
-func (r *ModuleResolver) scan(ctx context.Context, callback *scanCallback) error {
-	if err := r.init(); err != nil {
-		return err
-	}
-
-	processDir := func(info directoryPackageInfo) {
-		// Skip this directory if we were not able to get the package information successfully.
-		if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil {
-			return
-		}
-		pkg, err := r.canonicalize(info)
-		if err != nil {
-			return
-		}
-
-		if !callback.dirFound(pkg) {
-			return
-		}
-		pkg.packageName, err = r.cachePackageName(info)
-		if err != nil {
-			return
-		}
-
-		if !callback.packageNameLoaded(pkg) {
-			return
-		}
-		_, exports, err := r.loadExports(ctx, pkg, false)
-		if err != nil {
-			return
-		}
-		callback.exportsLoaded(pkg, exports)
-	}
-
-	// Start processing everything in the cache, and listen for the new stuff
-	// we discover in the walk below.
-	stop1 := r.moduleCacheCache.ScanAndListen(ctx, processDir)
-	defer stop1()
-	stop2 := r.otherCache.ScanAndListen(ctx, processDir)
-	defer stop2()
-
-	// We assume cached directories are fully cached, including all their
-	// children, and have not changed. We can skip them.
-	skip := func(root gopathwalk.Root, dir string) bool {
-		info, ok := r.cacheLoad(dir)
-		if !ok {
-			return false
-		}
-		// This directory can be skipped as long as we have already scanned it.
-		// Packages with errors will continue to have errors, so there is no need
-		// to rescan them.
-		packageScanned, _ := info.reachedStatus(directoryScanned)
-		return packageScanned
-	}
-
-	// Add anything new to the cache, and process it if we're still listening.
-	add := func(root gopathwalk.Root, dir string) {
-		r.cacheStore(r.scanDirForPackage(root, dir))
-	}
-
-	// r.roots and the callback are not necessarily safe to use in the
-	// goroutine below. Process them eagerly.
-	roots := filterRoots(r.roots, callback.rootFound)
-	// We can't cancel walks, because we need them to finish to have a usable
-	// cache. Instead, run them in a separate goroutine and detach.
-	scanDone := make(chan struct{})
-	go func() {
-		select {
-		case <-ctx.Done():
-			return
-		case <-r.scanSema:
-		}
-		defer func() { r.scanSema <- struct{}{} }()
-		// We have the lock on r.scannedRoots, and no other scans can run.
-		for _, root := range roots {
-			if ctx.Err() != nil {
-				return
-			}
-
-			if r.scannedRoots[root] {
-				continue
-			}
-			gopathwalk.WalkSkip([]gopathwalk.Root{root}, add, skip, gopathwalk.Options{Logf: r.env.Logf, ModulesEnabled: true})
-			r.scannedRoots[root] = true
-		}
-		close(scanDone)
-	}()
-	select {
-	case <-ctx.Done():
-	case <-scanDone:
-	}
-	return nil
-}
-
-func (r *ModuleResolver) scoreImportPath(ctx context.Context, path string) float64 {
-	if _, ok := stdlib[path]; ok {
-		return MaxRelevance
-	}
-	mod, _ := r.findPackage(path)
-	return modRelevance(mod)
-}
-
-func modRelevance(mod *gocommand.ModuleJSON) float64 {
-	var relevance float64
-	switch {
-	case mod == nil: // out of scope
-		return MaxRelevance - 4
-	case mod.Indirect:
-		relevance = MaxRelevance - 3
-	case !mod.Main:
-		relevance = MaxRelevance - 2
-	default:
-		relevance = MaxRelevance - 1 // main module ties with stdlib
-	}
-
-	_, versionString, ok := module.SplitPathVersion(mod.Path)
-	if ok {
-		index := strings.Index(versionString, "v")
-		if index == -1 {
-			return relevance
-		}
-		if versionNumber, err := strconv.ParseFloat(versionString[index+1:], 64); err == nil {
-			relevance += versionNumber / 1000
-		}
-	}
-
-	return relevance
-}
-
-// canonicalize gets the result of canonicalizing the packages using the results
-// of initializing the resolver from 'go list -m'.
-func (r *ModuleResolver) canonicalize(info directoryPackageInfo) (*pkg, error) {
-	// Packages in GOROOT are already canonical, regardless of the std/cmd modules.
-	if info.rootType == gopathwalk.RootGOROOT {
-		return &pkg{
-			importPathShort: info.nonCanonicalImportPath,
-			dir:             info.dir,
-			packageName:     path.Base(info.nonCanonicalImportPath),
-			relevance:       MaxRelevance,
-		}, nil
-	}
-
-	importPath := info.nonCanonicalImportPath
-	mod := r.findModuleByDir(info.dir)
-	// Check if the directory is underneath a module that's in scope.
-	if mod != nil {
-		// It is. If dir is the target of a replace directive,
-		// our guessed import path is wrong. Use the real one.
-		if mod.Dir == info.dir {
-			importPath = mod.Path
-		} else {
-			dirInMod := info.dir[len(mod.Dir)+len("/"):]
-			importPath = path.Join(mod.Path, filepath.ToSlash(dirInMod))
-		}
-	} else if !strings.HasPrefix(importPath, info.moduleName) {
-		// The module's name doesn't match the package's import path. It
-		// probably needs a replace directive we don't have.
-		return nil, fmt.Errorf("package in %q is not valid without a replace statement", info.dir)
-	}
-
-	res := &pkg{
-		importPathShort: importPath,
-		dir:             info.dir,
-		relevance:       modRelevance(mod),
-	}
-	// We may have discovered a package that has a different version
-	// in scope already. Canonicalize to that one if possible.
-	if _, canonicalDir := r.findPackage(importPath); canonicalDir != "" {
-		res.dir = canonicalDir
-	}
-	return res, nil
-}
-
-func (r *ModuleResolver) loadExports(ctx context.Context, pkg *pkg, includeTest bool) (string, []string, error) {
-	if err := r.init(); err != nil {
-		return "", nil, err
-	}
-	if info, ok := r.cacheLoad(pkg.dir); ok && !includeTest {
-		return r.cacheExports(ctx, r.env, info)
-	}
-	return loadExportsFromFiles(ctx, r.env, pkg.dir, includeTest)
-}
-
-func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) directoryPackageInfo {
-	subdir := ""
-	if dir != root.Path {
-		subdir = dir[len(root.Path)+len("/"):]
-	}
-	importPath := filepath.ToSlash(subdir)
-	if strings.HasPrefix(importPath, "vendor/") {
-		// Only enter vendor directories if they're explicitly requested as a root.
-		return directoryPackageInfo{
-			status: directoryScanned,
-			err:    fmt.Errorf("unwanted vendor directory"),
-		}
-	}
-	switch root.Type {
-	case gopathwalk.RootCurrentModule:
-		importPath = path.Join(r.main.Path, filepath.ToSlash(subdir))
-	case gopathwalk.RootModuleCache:
-		matches := modCacheRegexp.FindStringSubmatch(subdir)
-		if len(matches) == 0 {
-			return directoryPackageInfo{
-				status: directoryScanned,
-				err:    fmt.Errorf("invalid module cache path: %v", subdir),
-			}
-		}
-		modPath, err := module.UnescapePath(filepath.ToSlash(matches[1]))
-		if err != nil {
-			if r.env.Logf != nil {
-				r.env.Logf("decoding module cache path %q: %v", subdir, err)
-			}
-			return directoryPackageInfo{
-				status: directoryScanned,
-				err:    fmt.Errorf("decoding module cache path %q: %v", subdir, err),
-			}
-		}
-		importPath = path.Join(modPath, filepath.ToSlash(matches[3]))
-	}
-
-	modDir, modName := r.modInfo(dir)
-	result := directoryPackageInfo{
-		status:                 directoryScanned,
-		dir:                    dir,
-		rootType:               root.Type,
-		nonCanonicalImportPath: importPath,
-		moduleDir:              modDir,
-		moduleName:             modName,
-	}
-	if root.Type == gopathwalk.RootGOROOT {
-		// stdlib packages are always in scope, despite the confusing go.mod
-		return result
-	}
-	return result
-}
-
-// modCacheRegexp splits a path in a module cache into module, module version, and package.
-var modCacheRegexp = regexp.MustCompile(`(.*)@([^/\\]*)(.*)`)
-
-var (
-	slashSlash = []byte("//")
-	moduleStr  = []byte("module")
-)
-
-// modulePath returns the module path from the gomod file text.
-// If it cannot find a module path, it returns an empty string.
-// It is tolerant of unrelated problems in the go.mod file.
-//
-// Copied from cmd/go/internal/modfile.
-func modulePath(mod []byte) string {
-	for len(mod) > 0 {
-		line := mod
-		mod = nil
-		if i := bytes.IndexByte(line, '\n'); i >= 0 {
-			line, mod = line[:i], line[i+1:]
-		}
-		if i := bytes.Index(line, slashSlash); i >= 0 {
-			line = line[:i]
-		}
-		line = bytes.TrimSpace(line)
-		if !bytes.HasPrefix(line, moduleStr) {
-			continue
-		}
-		line = line[len(moduleStr):]
-		n := len(line)
-		line = bytes.TrimSpace(line)
-		if len(line) == n || len(line) == 0 {
-			continue
-		}
-
-		if line[0] == '"' || line[0] == '`' {
-			p, err := strconv.Unquote(string(line))
-			if err != nil {
-				return "" // malformed quoted string or multiline module path
-			}
-			return p
-		}
-
-		return string(line)
-	}
-	return "" // missing module path
-}

+ 0 - 236
vendor/golang.org/x/tools/internal/imports/mod_cache.go

@@ -1,236 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package imports
-
-import (
-	"context"
-	"fmt"
-	"sync"
-
-	"golang.org/x/tools/internal/gopathwalk"
-)
-
-// To find packages to import, the resolver needs to know about all of the
-// the packages that could be imported. This includes packages that are
-// already in modules that are in (1) the current module, (2) replace targets,
-// and (3) packages in the module cache. Packages in (1) and (2) may change over
-// time, as the client may edit the current module and locally replaced modules.
-// The module cache (which includes all of the packages in (3)) can only
-// ever be added to.
-//
-// The resolver can thus save state about packages in the module cache
-// and guarantee that this will not change over time. To obtain information
-// about new modules added to the module cache, the module cache should be
-// rescanned.
-//
-// It is OK to serve information about modules that have been deleted,
-// as they do still exist.
-// TODO(suzmue): can we share information with the caller about
-// what module needs to be downloaded to import this package?
-
-type directoryPackageStatus int
-
-const (
-	_ directoryPackageStatus = iota
-	directoryScanned
-	nameLoaded
-	exportsLoaded
-)
-
-type directoryPackageInfo struct {
-	// status indicates the extent to which this struct has been filled in.
-	status directoryPackageStatus
-	// err is non-nil when there was an error trying to reach status.
-	err error
-
-	// Set when status >= directoryScanned.
-
-	// dir is the absolute directory of this package.
-	dir      string
-	rootType gopathwalk.RootType
-	// nonCanonicalImportPath is the package's expected import path. It may
-	// not actually be importable at that path.
-	nonCanonicalImportPath string
-
-	// Module-related information.
-	moduleDir  string // The directory that is the module root of this dir.
-	moduleName string // The module name that contains this dir.
-
-	// Set when status >= nameLoaded.
-
-	packageName string // the package name, as declared in the source.
-
-	// Set when status >= exportsLoaded.
-
-	exports []string
-}
-
-// reachedStatus returns true when info has a status at least target and any error associated with
-// an attempt to reach target.
-func (info *directoryPackageInfo) reachedStatus(target directoryPackageStatus) (bool, error) {
-	if info.err == nil {
-		return info.status >= target, nil
-	}
-	if info.status == target {
-		return true, info.err
-	}
-	return true, nil
-}
-
-// dirInfoCache is a concurrency safe map for storing information about
-// directories that may contain packages.
-//
-// The information in this cache is built incrementally. Entries are initialized in scan.
-// No new keys should be added in any other functions, as all directories containing
-// packages are identified in scan.
-//
-// Other functions, including loadExports and findPackage, may update entries in this cache
-// as they discover new things about the directory.
-//
-// The information in the cache is not expected to change for the cache's
-// lifetime, so there is no protection against competing writes. Users should
-// take care not to hold the cache across changes to the underlying files.
-//
-// TODO(suzmue): consider other concurrency strategies and data structures (RWLocks, sync.Map, etc)
-type dirInfoCache struct {
-	mu sync.Mutex
-	// dirs stores information about packages in directories, keyed by absolute path.
-	dirs      map[string]*directoryPackageInfo
-	listeners map[*int]cacheListener
-}
-
-type cacheListener func(directoryPackageInfo)
-
-// ScanAndListen calls listener on all the items in the cache, and on anything
-// newly added. The returned stop function waits for all in-flight callbacks to
-// finish and blocks new ones.
-func (d *dirInfoCache) ScanAndListen(ctx context.Context, listener cacheListener) func() {
-	ctx, cancel := context.WithCancel(ctx)
-
-	// Flushing out all the callbacks is tricky without knowing how many there
-	// are going to be. Setting an arbitrary limit makes it much easier.
-	const maxInFlight = 10
-	sema := make(chan struct{}, maxInFlight)
-	for i := 0; i < maxInFlight; i++ {
-		sema <- struct{}{}
-	}
-
-	cookie := new(int) // A unique ID we can use for the listener.
-
-	// We can't hold mu while calling the listener.
-	d.mu.Lock()
-	var keys []string
-	for key := range d.dirs {
-		keys = append(keys, key)
-	}
-	d.listeners[cookie] = func(info directoryPackageInfo) {
-		select {
-		case <-ctx.Done():
-			return
-		case <-sema:
-		}
-		listener(info)
-		sema <- struct{}{}
-	}
-	d.mu.Unlock()
-
-	stop := func() {
-		cancel()
-		d.mu.Lock()
-		delete(d.listeners, cookie)
-		d.mu.Unlock()
-		for i := 0; i < maxInFlight; i++ {
-			<-sema
-		}
-	}
-
-	// Process the pre-existing keys.
-	for _, k := range keys {
-		select {
-		case <-ctx.Done():
-			return stop
-		default:
-		}
-		if v, ok := d.Load(k); ok {
-			listener(v)
-		}
-	}
-
-	return stop
-}
-
-// Store stores the package info for dir.
-func (d *dirInfoCache) Store(dir string, info directoryPackageInfo) {
-	d.mu.Lock()
-	_, old := d.dirs[dir]
-	d.dirs[dir] = &info
-	var listeners []cacheListener
-	for _, l := range d.listeners {
-		listeners = append(listeners, l)
-	}
-	d.mu.Unlock()
-
-	if !old {
-		for _, l := range listeners {
-			l(info)
-		}
-	}
-}
-
-// Load returns a copy of the directoryPackageInfo for absolute directory dir.
-func (d *dirInfoCache) Load(dir string) (directoryPackageInfo, bool) {
-	d.mu.Lock()
-	defer d.mu.Unlock()
-	info, ok := d.dirs[dir]
-	if !ok {
-		return directoryPackageInfo{}, false
-	}
-	return *info, true
-}
-
-// Keys returns the keys currently present in d.
-func (d *dirInfoCache) Keys() (keys []string) {
-	d.mu.Lock()
-	defer d.mu.Unlock()
-	for key := range d.dirs {
-		keys = append(keys, key)
-	}
-	return keys
-}
-
-func (d *dirInfoCache) CachePackageName(info directoryPackageInfo) (string, error) {
-	if loaded, err := info.reachedStatus(nameLoaded); loaded {
-		return info.packageName, err
-	}
-	if scanned, err := info.reachedStatus(directoryScanned); !scanned || err != nil {
-		return "", fmt.Errorf("cannot read package name, scan error: %v", err)
-	}
-	info.packageName, info.err = packageDirToName(info.dir)
-	info.status = nameLoaded
-	d.Store(info.dir, info)
-	return info.packageName, info.err
-}
-
-func (d *dirInfoCache) CacheExports(ctx context.Context, env *ProcessEnv, info directoryPackageInfo) (string, []string, error) {
-	if reached, _ := info.reachedStatus(exportsLoaded); reached {
-		return info.packageName, info.exports, info.err
-	}
-	if reached, err := info.reachedStatus(nameLoaded); reached && err != nil {
-		return "", nil, err
-	}
-	info.packageName, info.exports, info.err = loadExportsFromFiles(ctx, env, info.dir, false)
-	if info.err == context.Canceled || info.err == context.DeadlineExceeded {
-		return info.packageName, info.exports, info.err
-	}
-	// The cache structure wants things to proceed linearly. We can skip a
-	// step here, but only if we succeed.
-	if info.status == nameLoaded || info.err == nil {
-		info.status = exportsLoaded
-	} else {
-		info.status = nameLoaded
-	}
-	d.Store(info.dir, info)
-	return info.packageName, info.exports, info.err
-}

+ 0 - 280
vendor/golang.org/x/tools/internal/imports/sortimports.go

@@ -1,280 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Hacked up copy of go/ast/import.go
-
-package imports
-
-import (
-	"go/ast"
-	"go/token"
-	"sort"
-	"strconv"
-)
-
-// sortImports sorts runs of consecutive import lines in import blocks in f.
-// It also removes duplicate imports when it is possible to do so without data loss.
-func sortImports(localPrefix string, fset *token.FileSet, f *ast.File) {
-	for i, d := range f.Decls {
-		d, ok := d.(*ast.GenDecl)
-		if !ok || d.Tok != token.IMPORT {
-			// Not an import declaration, so we're done.
-			// Imports are always first.
-			break
-		}
-
-		if len(d.Specs) == 0 {
-			// Empty import block, remove it.
-			f.Decls = append(f.Decls[:i], f.Decls[i+1:]...)
-		}
-
-		if !d.Lparen.IsValid() {
-			// Not a block: sorted by default.
-			continue
-		}
-
-		// Identify and sort runs of specs on successive lines.
-		i := 0
-		specs := d.Specs[:0]
-		for j, s := range d.Specs {
-			if j > i && fset.Position(s.Pos()).Line > 1+fset.Position(d.Specs[j-1].End()).Line {
-				// j begins a new run.  End this one.
-				specs = append(specs, sortSpecs(localPrefix, fset, f, d.Specs[i:j])...)
-				i = j
-			}
-		}
-		specs = append(specs, sortSpecs(localPrefix, fset, f, d.Specs[i:])...)
-		d.Specs = specs
-
-		// Deduping can leave a blank line before the rparen; clean that up.
-		if len(d.Specs) > 0 {
-			lastSpec := d.Specs[len(d.Specs)-1]
-			lastLine := fset.Position(lastSpec.Pos()).Line
-			if rParenLine := fset.Position(d.Rparen).Line; rParenLine > lastLine+1 {
-				fset.File(d.Rparen).MergeLine(rParenLine - 1)
-			}
-		}
-	}
-}
-
-// mergeImports merges all the import declarations into the first one.
-// Taken from golang.org/x/tools/ast/astutil.
-func mergeImports(fset *token.FileSet, f *ast.File) {
-	if len(f.Decls) <= 1 {
-		return
-	}
-
-	// Merge all the import declarations into the first one.
-	var first *ast.GenDecl
-	for i := 0; i < len(f.Decls); i++ {
-		decl := f.Decls[i]
-		gen, ok := decl.(*ast.GenDecl)
-		if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") {
-			continue
-		}
-		if first == nil {
-			first = gen
-			continue // Don't touch the first one.
-		}
-		// We now know there is more than one package in this import
-		// declaration. Ensure that it ends up parenthesized.
-		first.Lparen = first.Pos()
-		// Move the imports of the other import declaration to the first one.
-		for _, spec := range gen.Specs {
-			spec.(*ast.ImportSpec).Path.ValuePos = first.Pos()
-			first.Specs = append(first.Specs, spec)
-		}
-		f.Decls = append(f.Decls[:i], f.Decls[i+1:]...)
-		i--
-	}
-}
-
-// declImports reports whether gen contains an import of path.
-// Taken from golang.org/x/tools/ast/astutil.
-func declImports(gen *ast.GenDecl, path string) bool {
-	if gen.Tok != token.IMPORT {
-		return false
-	}
-	for _, spec := range gen.Specs {
-		impspec := spec.(*ast.ImportSpec)
-		if importPath(impspec) == path {
-			return true
-		}
-	}
-	return false
-}
-
-func importPath(s ast.Spec) string {
-	t, err := strconv.Unquote(s.(*ast.ImportSpec).Path.Value)
-	if err == nil {
-		return t
-	}
-	return ""
-}
-
-func importName(s ast.Spec) string {
-	n := s.(*ast.ImportSpec).Name
-	if n == nil {
-		return ""
-	}
-	return n.Name
-}
-
-func importComment(s ast.Spec) string {
-	c := s.(*ast.ImportSpec).Comment
-	if c == nil {
-		return ""
-	}
-	return c.Text()
-}
-
-// collapse indicates whether prev may be removed, leaving only next.
-func collapse(prev, next ast.Spec) bool {
-	if importPath(next) != importPath(prev) || importName(next) != importName(prev) {
-		return false
-	}
-	return prev.(*ast.ImportSpec).Comment == nil
-}
-
-type posSpan struct {
-	Start token.Pos
-	End   token.Pos
-}
-
-func sortSpecs(localPrefix string, fset *token.FileSet, f *ast.File, specs []ast.Spec) []ast.Spec {
-	// Can't short-circuit here even if specs are already sorted,
-	// since they might yet need deduplication.
-	// A lone import, however, may be safely ignored.
-	if len(specs) <= 1 {
-		return specs
-	}
-
-	// Record positions for specs.
-	pos := make([]posSpan, len(specs))
-	for i, s := range specs {
-		pos[i] = posSpan{s.Pos(), s.End()}
-	}
-
-	// Identify comments in this range.
-	// Any comment from pos[0].Start to the final line counts.
-	lastLine := fset.Position(pos[len(pos)-1].End).Line
-	cstart := len(f.Comments)
-	cend := len(f.Comments)
-	for i, g := range f.Comments {
-		if g.Pos() < pos[0].Start {
-			continue
-		}
-		if i < cstart {
-			cstart = i
-		}
-		if fset.Position(g.End()).Line > lastLine {
-			cend = i
-			break
-		}
-	}
-	comments := f.Comments[cstart:cend]
-
-	// Assign each comment to the import spec preceding it.
-	importComment := map[*ast.ImportSpec][]*ast.CommentGroup{}
-	specIndex := 0
-	for _, g := range comments {
-		for specIndex+1 < len(specs) && pos[specIndex+1].Start <= g.Pos() {
-			specIndex++
-		}
-		s := specs[specIndex].(*ast.ImportSpec)
-		importComment[s] = append(importComment[s], g)
-	}
-
-	// Sort the import specs by import path.
-	// Remove duplicates, when possible without data loss.
-	// Reassign the import paths to have the same position sequence.
-	// Reassign each comment to abut the end of its spec.
-	// Sort the comments by new position.
-	sort.Sort(byImportSpec{localPrefix, specs})
-
-	// Dedup. Thanks to our sorting, we can just consider
-	// adjacent pairs of imports.
-	deduped := specs[:0]
-	for i, s := range specs {
-		if i == len(specs)-1 || !collapse(s, specs[i+1]) {
-			deduped = append(deduped, s)
-		} else {
-			p := s.Pos()
-			fset.File(p).MergeLine(fset.Position(p).Line)
-		}
-	}
-	specs = deduped
-
-	// Fix up comment positions
-	for i, s := range specs {
-		s := s.(*ast.ImportSpec)
-		if s.Name != nil {
-			s.Name.NamePos = pos[i].Start
-		}
-		s.Path.ValuePos = pos[i].Start
-		s.EndPos = pos[i].End
-		nextSpecPos := pos[i].End
-
-		for _, g := range importComment[s] {
-			for _, c := range g.List {
-				c.Slash = pos[i].End
-				nextSpecPos = c.End()
-			}
-		}
-		if i < len(specs)-1 {
-			pos[i+1].Start = nextSpecPos
-			pos[i+1].End = nextSpecPos
-		}
-	}
-
-	sort.Sort(byCommentPos(comments))
-
-	// Fixup comments can insert blank lines, because import specs are on different lines.
-	// We remove those blank lines here by merging import spec to the first import spec line.
-	firstSpecLine := fset.Position(specs[0].Pos()).Line
-	for _, s := range specs[1:] {
-		p := s.Pos()
-		line := fset.File(p).Line(p)
-		for previousLine := line - 1; previousLine >= firstSpecLine; {
-			fset.File(p).MergeLine(previousLine)
-			previousLine--
-		}
-	}
-	return specs
-}
-
-type byImportSpec struct {
-	localPrefix string
-	specs       []ast.Spec // slice of *ast.ImportSpec
-}
-
-func (x byImportSpec) Len() int      { return len(x.specs) }
-func (x byImportSpec) Swap(i, j int) { x.specs[i], x.specs[j] = x.specs[j], x.specs[i] }
-func (x byImportSpec) Less(i, j int) bool {
-	ipath := importPath(x.specs[i])
-	jpath := importPath(x.specs[j])
-
-	igroup := importGroup(x.localPrefix, ipath)
-	jgroup := importGroup(x.localPrefix, jpath)
-	if igroup != jgroup {
-		return igroup < jgroup
-	}
-
-	if ipath != jpath {
-		return ipath < jpath
-	}
-	iname := importName(x.specs[i])
-	jname := importName(x.specs[j])
-
-	if iname != jname {
-		return iname < jname
-	}
-	return importComment(x.specs[i]) < importComment(x.specs[j])
-}
-
-type byCommentPos []*ast.CommentGroup
-
-func (x byCommentPos) Len() int           { return len(x) }
-func (x byCommentPos) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }
-func (x byCommentPos) Less(i, j int) bool { return x[i].Pos() < x[j].Pos() }

+ 0 - 10733
vendor/golang.org/x/tools/internal/imports/zstdlib.go

@@ -1,10733 +0,0 @@
-// Code generated by mkstdlib.go. DO NOT EDIT.
-
-package imports
-
-var stdlib = map[string][]string{
-	"archive/tar": []string{
-		"ErrFieldTooLong",
-		"ErrHeader",
-		"ErrWriteAfterClose",
-		"ErrWriteTooLong",
-		"FileInfoHeader",
-		"Format",
-		"FormatGNU",
-		"FormatPAX",
-		"FormatUSTAR",
-		"FormatUnknown",
-		"Header",
-		"NewReader",
-		"NewWriter",
-		"Reader",
-		"TypeBlock",
-		"TypeChar",
-		"TypeCont",
-		"TypeDir",
-		"TypeFifo",
-		"TypeGNULongLink",
-		"TypeGNULongName",
-		"TypeGNUSparse",
-		"TypeLink",
-		"TypeReg",
-		"TypeRegA",
-		"TypeSymlink",
-		"TypeXGlobalHeader",
-		"TypeXHeader",
-		"Writer",
-	},
-	"archive/zip": []string{
-		"Compressor",
-		"Decompressor",
-		"Deflate",
-		"ErrAlgorithm",
-		"ErrChecksum",
-		"ErrFormat",
-		"File",
-		"FileHeader",
-		"FileInfoHeader",
-		"NewReader",
-		"NewWriter",
-		"OpenReader",
-		"ReadCloser",
-		"Reader",
-		"RegisterCompressor",
-		"RegisterDecompressor",
-		"Store",
-		"Writer",
-	},
-	"bufio": []string{
-		"ErrAdvanceTooFar",
-		"ErrBadReadCount",
-		"ErrBufferFull",
-		"ErrFinalToken",
-		"ErrInvalidUnreadByte",
-		"ErrInvalidUnreadRune",
-		"ErrNegativeAdvance",
-		"ErrNegativeCount",
-		"ErrTooLong",
-		"MaxScanTokenSize",
-		"NewReadWriter",
-		"NewReader",
-		"NewReaderSize",
-		"NewScanner",
-		"NewWriter",
-		"NewWriterSize",
-		"ReadWriter",
-		"Reader",
-		"ScanBytes",
-		"ScanLines",
-		"ScanRunes",
-		"ScanWords",
-		"Scanner",
-		"SplitFunc",
-		"Writer",
-	},
-	"bytes": []string{
-		"Buffer",
-		"Compare",
-		"Contains",
-		"ContainsAny",
-		"ContainsRune",
-		"Count",
-		"Equal",
-		"EqualFold",
-		"ErrTooLarge",
-		"Fields",
-		"FieldsFunc",
-		"HasPrefix",
-		"HasSuffix",
-		"Index",
-		"IndexAny",
-		"IndexByte",
-		"IndexFunc",
-		"IndexRune",
-		"Join",
-		"LastIndex",
-		"LastIndexAny",
-		"LastIndexByte",
-		"LastIndexFunc",
-		"Map",
-		"MinRead",
-		"NewBuffer",
-		"NewBufferString",
-		"NewReader",
-		"Reader",
-		"Repeat",
-		"Replace",
-		"ReplaceAll",
-		"Runes",
-		"Split",
-		"SplitAfter",
-		"SplitAfterN",
-		"SplitN",
-		"Title",
-		"ToLower",
-		"ToLowerSpecial",
-		"ToTitle",
-		"ToTitleSpecial",
-		"ToUpper",
-		"ToUpperSpecial",
-		"ToValidUTF8",
-		"Trim",
-		"TrimFunc",
-		"TrimLeft",
-		"TrimLeftFunc",
-		"TrimPrefix",
-		"TrimRight",
-		"TrimRightFunc",
-		"TrimSpace",
-		"TrimSuffix",
-	},
-	"compress/bzip2": []string{
-		"NewReader",
-		"StructuralError",
-	},
-	"compress/flate": []string{
-		"BestCompression",
-		"BestSpeed",
-		"CorruptInputError",
-		"DefaultCompression",
-		"HuffmanOnly",
-		"InternalError",
-		"NewReader",
-		"NewReaderDict",
-		"NewWriter",
-		"NewWriterDict",
-		"NoCompression",
-		"ReadError",
-		"Reader",
-		"Resetter",
-		"WriteError",
-		"Writer",
-	},
-	"compress/gzip": []string{
-		"BestCompression",
-		"BestSpeed",
-		"DefaultCompression",
-		"ErrChecksum",
-		"ErrHeader",
-		"Header",
-		"HuffmanOnly",
-		"NewReader",
-		"NewWriter",
-		"NewWriterLevel",
-		"NoCompression",
-		"Reader",
-		"Writer",
-	},
-	"compress/lzw": []string{
-		"LSB",
-		"MSB",
-		"NewReader",
-		"NewWriter",
-		"Order",
-	},
-	"compress/zlib": []string{
-		"BestCompression",
-		"BestSpeed",
-		"DefaultCompression",
-		"ErrChecksum",
-		"ErrDictionary",
-		"ErrHeader",
-		"HuffmanOnly",
-		"NewReader",
-		"NewReaderDict",
-		"NewWriter",
-		"NewWriterLevel",
-		"NewWriterLevelDict",
-		"NoCompression",
-		"Resetter",
-		"Writer",
-	},
-	"container/heap": []string{
-		"Fix",
-		"Init",
-		"Interface",
-		"Pop",
-		"Push",
-		"Remove",
-	},
-	"container/list": []string{
-		"Element",
-		"List",
-		"New",
-	},
-	"container/ring": []string{
-		"New",
-		"Ring",
-	},
-	"context": []string{
-		"Background",
-		"CancelFunc",
-		"Canceled",
-		"Context",
-		"DeadlineExceeded",
-		"TODO",
-		"WithCancel",
-		"WithDeadline",
-		"WithTimeout",
-		"WithValue",
-	},
-	"crypto": []string{
-		"BLAKE2b_256",
-		"BLAKE2b_384",
-		"BLAKE2b_512",
-		"BLAKE2s_256",
-		"Decrypter",
-		"DecrypterOpts",
-		"Hash",
-		"MD4",
-		"MD5",
-		"MD5SHA1",
-		"PrivateKey",
-		"PublicKey",
-		"RIPEMD160",
-		"RegisterHash",
-		"SHA1",
-		"SHA224",
-		"SHA256",
-		"SHA384",
-		"SHA3_224",
-		"SHA3_256",
-		"SHA3_384",
-		"SHA3_512",
-		"SHA512",
-		"SHA512_224",
-		"SHA512_256",
-		"Signer",
-		"SignerOpts",
-	},
-	"crypto/aes": []string{
-		"BlockSize",
-		"KeySizeError",
-		"NewCipher",
-	},
-	"crypto/cipher": []string{
-		"AEAD",
-		"Block",
-		"BlockMode",
-		"NewCBCDecrypter",
-		"NewCBCEncrypter",
-		"NewCFBDecrypter",
-		"NewCFBEncrypter",
-		"NewCTR",
-		"NewGCM",
-		"NewGCMWithNonceSize",
-		"NewGCMWithTagSize",
-		"NewOFB",
-		"Stream",
-		"StreamReader",
-		"StreamWriter",
-	},
-	"crypto/des": []string{
-		"BlockSize",
-		"KeySizeError",
-		"NewCipher",
-		"NewTripleDESCipher",
-	},
-	"crypto/dsa": []string{
-		"ErrInvalidPublicKey",
-		"GenerateKey",
-		"GenerateParameters",
-		"L1024N160",
-		"L2048N224",
-		"L2048N256",
-		"L3072N256",
-		"ParameterSizes",
-		"Parameters",
-		"PrivateKey",
-		"PublicKey",
-		"Sign",
-		"Verify",
-	},
-	"crypto/ecdsa": []string{
-		"GenerateKey",
-		"PrivateKey",
-		"PublicKey",
-		"Sign",
-		"SignASN1",
-		"Verify",
-		"VerifyASN1",
-	},
-	"crypto/ed25519": []string{
-		"GenerateKey",
-		"NewKeyFromSeed",
-		"PrivateKey",
-		"PrivateKeySize",
-		"PublicKey",
-		"PublicKeySize",
-		"SeedSize",
-		"Sign",
-		"SignatureSize",
-		"Verify",
-	},
-	"crypto/elliptic": []string{
-		"Curve",
-		"CurveParams",
-		"GenerateKey",
-		"Marshal",
-		"MarshalCompressed",
-		"P224",
-		"P256",
-		"P384",
-		"P521",
-		"Unmarshal",
-		"UnmarshalCompressed",
-	},
-	"crypto/hmac": []string{
-		"Equal",
-		"New",
-	},
-	"crypto/md5": []string{
-		"BlockSize",
-		"New",
-		"Size",
-		"Sum",
-	},
-	"crypto/rand": []string{
-		"Int",
-		"Prime",
-		"Read",
-		"Reader",
-	},
-	"crypto/rc4": []string{
-		"Cipher",
-		"KeySizeError",
-		"NewCipher",
-	},
-	"crypto/rsa": []string{
-		"CRTValue",
-		"DecryptOAEP",
-		"DecryptPKCS1v15",
-		"DecryptPKCS1v15SessionKey",
-		"EncryptOAEP",
-		"EncryptPKCS1v15",
-		"ErrDecryption",
-		"ErrMessageTooLong",
-		"ErrVerification",
-		"GenerateKey",
-		"GenerateMultiPrimeKey",
-		"OAEPOptions",
-		"PKCS1v15DecryptOptions",
-		"PSSOptions",
-		"PSSSaltLengthAuto",
-		"PSSSaltLengthEqualsHash",
-		"PrecomputedValues",
-		"PrivateKey",
-		"PublicKey",
-		"SignPKCS1v15",
-		"SignPSS",
-		"VerifyPKCS1v15",
-		"VerifyPSS",
-	},
-	"crypto/sha1": []string{
-		"BlockSize",
-		"New",
-		"Size",
-		"Sum",
-	},
-	"crypto/sha256": []string{
-		"BlockSize",
-		"New",
-		"New224",
-		"Size",
-		"Size224",
-		"Sum224",
-		"Sum256",
-	},
-	"crypto/sha512": []string{
-		"BlockSize",
-		"New",
-		"New384",
-		"New512_224",
-		"New512_256",
-		"Size",
-		"Size224",
-		"Size256",
-		"Size384",
-		"Sum384",
-		"Sum512",
-		"Sum512_224",
-		"Sum512_256",
-	},
-	"crypto/subtle": []string{
-		"ConstantTimeByteEq",
-		"ConstantTimeCompare",
-		"ConstantTimeCopy",
-		"ConstantTimeEq",
-		"ConstantTimeLessOrEq",
-		"ConstantTimeSelect",
-	},
-	"crypto/tls": []string{
-		"Certificate",
-		"CertificateRequestInfo",
-		"CipherSuite",
-		"CipherSuiteName",
-		"CipherSuites",
-		"Client",
-		"ClientAuthType",
-		"ClientHelloInfo",
-		"ClientSessionCache",
-		"ClientSessionState",
-		"Config",
-		"Conn",
-		"ConnectionState",
-		"CurveID",
-		"CurveP256",
-		"CurveP384",
-		"CurveP521",
-		"Dial",
-		"DialWithDialer",
-		"Dialer",
-		"ECDSAWithP256AndSHA256",
-		"ECDSAWithP384AndSHA384",
-		"ECDSAWithP521AndSHA512",
-		"ECDSAWithSHA1",
-		"Ed25519",
-		"InsecureCipherSuites",
-		"Listen",
-		"LoadX509KeyPair",
-		"NewLRUClientSessionCache",
-		"NewListener",
-		"NoClientCert",
-		"PKCS1WithSHA1",
-		"PKCS1WithSHA256",
-		"PKCS1WithSHA384",
-		"PKCS1WithSHA512",
-		"PSSWithSHA256",
-		"PSSWithSHA384",
-		"PSSWithSHA512",
-		"RecordHeaderError",
-		"RenegotiateFreelyAsClient",
-		"RenegotiateNever",
-		"RenegotiateOnceAsClient",
-		"RenegotiationSupport",
-		"RequestClientCert",
-		"RequireAndVerifyClientCert",
-		"RequireAnyClientCert",
-		"Server",
-		"SignatureScheme",
-		"TLS_AES_128_GCM_SHA256",
-		"TLS_AES_256_GCM_SHA384",
-		"TLS_CHACHA20_POLY1305_SHA256",
-		"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
-		"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
-		"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
-		"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
-		"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
-		"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305",
-		"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
-		"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
-		"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
-		"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
-		"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
-		"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
-		"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
-		"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
-		"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
-		"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
-		"TLS_ECDHE_RSA_WITH_RC4_128_SHA",
-		"TLS_FALLBACK_SCSV",
-		"TLS_RSA_WITH_3DES_EDE_CBC_SHA",
-		"TLS_RSA_WITH_AES_128_CBC_SHA",
-		"TLS_RSA_WITH_AES_128_CBC_SHA256",
-		"TLS_RSA_WITH_AES_128_GCM_SHA256",
-		"TLS_RSA_WITH_AES_256_CBC_SHA",
-		"TLS_RSA_WITH_AES_256_GCM_SHA384",
-		"TLS_RSA_WITH_RC4_128_SHA",
-		"VerifyClientCertIfGiven",
-		"VersionSSL30",
-		"VersionTLS10",
-		"VersionTLS11",
-		"VersionTLS12",
-		"VersionTLS13",
-		"X25519",
-		"X509KeyPair",
-	},
-	"crypto/x509": []string{
-		"CANotAuthorizedForExtKeyUsage",
-		"CANotAuthorizedForThisName",
-		"CertPool",
-		"Certificate",
-		"CertificateInvalidError",
-		"CertificateRequest",
-		"ConstraintViolationError",
-		"CreateCertificate",
-		"CreateCertificateRequest",
-		"CreateRevocationList",
-		"DSA",
-		"DSAWithSHA1",
-		"DSAWithSHA256",
-		"DecryptPEMBlock",
-		"ECDSA",
-		"ECDSAWithSHA1",
-		"ECDSAWithSHA256",
-		"ECDSAWithSHA384",
-		"ECDSAWithSHA512",
-		"Ed25519",
-		"EncryptPEMBlock",
-		"ErrUnsupportedAlgorithm",
-		"Expired",
-		"ExtKeyUsage",
-		"ExtKeyUsageAny",
-		"ExtKeyUsageClientAuth",
-		"ExtKeyUsageCodeSigning",
-		"ExtKeyUsageEmailProtection",
-		"ExtKeyUsageIPSECEndSystem",
-		"ExtKeyUsageIPSECTunnel",
-		"ExtKeyUsageIPSECUser",
-		"ExtKeyUsageMicrosoftCommercialCodeSigning",
-		"ExtKeyUsageMicrosoftKernelCodeSigning",
-		"ExtKeyUsageMicrosoftServerGatedCrypto",
-		"ExtKeyUsageNetscapeServerGatedCrypto",
-		"ExtKeyUsageOCSPSigning",
-		"ExtKeyUsageServerAuth",
-		"ExtKeyUsageTimeStamping",
-		"HostnameError",
-		"IncompatibleUsage",
-		"IncorrectPasswordError",
-		"InsecureAlgorithmError",
-		"InvalidReason",
-		"IsEncryptedPEMBlock",
-		"KeyUsage",
-		"KeyUsageCRLSign",
-		"KeyUsageCertSign",
-		"KeyUsageContentCommitment",
-		"KeyUsageDataEncipherment",
-		"KeyUsageDecipherOnly",
-		"KeyUsageDigitalSignature",
-		"KeyUsageEncipherOnly",
-		"KeyUsageKeyAgreement",
-		"KeyUsageKeyEncipherment",
-		"MD2WithRSA",
-		"MD5WithRSA",
-		"MarshalECPrivateKey",
-		"MarshalPKCS1PrivateKey",
-		"MarshalPKCS1PublicKey",
-		"MarshalPKCS8PrivateKey",
-		"MarshalPKIXPublicKey",
-		"NameConstraintsWithoutSANs",
-		"NameMismatch",
-		"NewCertPool",
-		"NotAuthorizedToSign",
-		"PEMCipher",
-		"PEMCipher3DES",
-		"PEMCipherAES128",
-		"PEMCipherAES192",
-		"PEMCipherAES256",
-		"PEMCipherDES",
-		"ParseCRL",
-		"ParseCertificate",
-		"ParseCertificateRequest",
-		"ParseCertificates",
-		"ParseDERCRL",
-		"ParseECPrivateKey",
-		"ParsePKCS1PrivateKey",
-		"ParsePKCS1PublicKey",
-		"ParsePKCS8PrivateKey",
-		"ParsePKIXPublicKey",
-		"PublicKeyAlgorithm",
-		"PureEd25519",
-		"RSA",
-		"RevocationList",
-		"SHA1WithRSA",
-		"SHA256WithRSA",
-		"SHA256WithRSAPSS",
-		"SHA384WithRSA",
-		"SHA384WithRSAPSS",
-		"SHA512WithRSA",
-		"SHA512WithRSAPSS",
-		"SignatureAlgorithm",
-		"SystemCertPool",
-		"SystemRootsError",
-		"TooManyConstraints",
-		"TooManyIntermediates",
-		"UnconstrainedName",
-		"UnhandledCriticalExtension",
-		"UnknownAuthorityError",
-		"UnknownPublicKeyAlgorithm",
-		"UnknownSignatureAlgorithm",
-		"VerifyOptions",
-	},
-	"crypto/x509/pkix": []string{
-		"AlgorithmIdentifier",
-		"AttributeTypeAndValue",
-		"AttributeTypeAndValueSET",
-		"CertificateList",
-		"Extension",
-		"Name",
-		"RDNSequence",
-		"RelativeDistinguishedNameSET",
-		"RevokedCertificate",
-		"TBSCertificateList",
-	},
-	"database/sql": []string{
-		"ColumnType",
-		"Conn",
-		"DB",
-		"DBStats",
-		"Drivers",
-		"ErrConnDone",
-		"ErrNoRows",
-		"ErrTxDone",
-		"IsolationLevel",
-		"LevelDefault",
-		"LevelLinearizable",
-		"LevelReadCommitted",
-		"LevelReadUncommitted",
-		"LevelRepeatableRead",
-		"LevelSerializable",
-		"LevelSnapshot",
-		"LevelWriteCommitted",
-		"Named",
-		"NamedArg",
-		"NullBool",
-		"NullFloat64",
-		"NullInt32",
-		"NullInt64",
-		"NullString",
-		"NullTime",
-		"Open",
-		"OpenDB",
-		"Out",
-		"RawBytes",
-		"Register",
-		"Result",
-		"Row",
-		"Rows",
-		"Scanner",
-		"Stmt",
-		"Tx",
-		"TxOptions",
-	},
-	"database/sql/driver": []string{
-		"Bool",
-		"ColumnConverter",
-		"Conn",
-		"ConnBeginTx",
-		"ConnPrepareContext",
-		"Connector",
-		"DefaultParameterConverter",
-		"Driver",
-		"DriverContext",
-		"ErrBadConn",
-		"ErrRemoveArgument",
-		"ErrSkip",
-		"Execer",
-		"ExecerContext",
-		"Int32",
-		"IsScanValue",
-		"IsValue",
-		"IsolationLevel",
-		"NamedValue",
-		"NamedValueChecker",
-		"NotNull",
-		"Null",
-		"Pinger",
-		"Queryer",
-		"QueryerContext",
-		"Result",
-		"ResultNoRows",
-		"Rows",
-		"RowsAffected",
-		"RowsColumnTypeDatabaseTypeName",
-		"RowsColumnTypeLength",
-		"RowsColumnTypeNullable",
-		"RowsColumnTypePrecisionScale",
-		"RowsColumnTypeScanType",
-		"RowsNextResultSet",
-		"SessionResetter",
-		"Stmt",
-		"StmtExecContext",
-		"StmtQueryContext",
-		"String",
-		"Tx",
-		"TxOptions",
-		"Validator",
-		"Value",
-		"ValueConverter",
-		"Valuer",
-	},
-	"debug/dwarf": []string{
-		"AddrType",
-		"ArrayType",
-		"Attr",
-		"AttrAbstractOrigin",
-		"AttrAccessibility",
-		"AttrAddrBase",
-		"AttrAddrClass",
-		"AttrAlignment",
-		"AttrAllocated",
-		"AttrArtificial",
-		"AttrAssociated",
-		"AttrBaseTypes",
-		"AttrBinaryScale",
-		"AttrBitOffset",
-		"AttrBitSize",
-		"AttrByteSize",
-		"AttrCallAllCalls",
-		"AttrCallAllSourceCalls",
-		"AttrCallAllTailCalls",
-		"AttrCallColumn",
-		"AttrCallDataLocation",
-		"AttrCallDataValue",
-		"AttrCallFile",
-		"AttrCallLine",
-		"AttrCallOrigin",
-		"AttrCallPC",
-		"AttrCallParameter",
-		"AttrCallReturnPC",
-		"AttrCallTailCall",
-		"AttrCallTarget",
-		"AttrCallTargetClobbered",
-		"AttrCallValue",
-		"AttrCalling",
-		"AttrCommonRef",
-		"AttrCompDir",
-		"AttrConstExpr",
-		"AttrConstValue",
-		"AttrContainingType",
-		"AttrCount",
-		"AttrDataBitOffset",
-		"AttrDataLocation",
-		"AttrDataMemberLoc",
-		"AttrDecimalScale",
-		"AttrDecimalSign",
-		"AttrDeclColumn",
-		"AttrDeclFile",
-		"AttrDeclLine",
-		"AttrDeclaration",
-		"AttrDefaultValue",
-		"AttrDefaulted",
-		"AttrDeleted",
-		"AttrDescription",
-		"AttrDigitCount",
-		"AttrDiscr",
-		"AttrDiscrList",
-		"AttrDiscrValue",
-		"AttrDwoName",
-		"AttrElemental",
-		"AttrEncoding",
-		"AttrEndianity",
-		"AttrEntrypc",
-		"AttrEnumClass",
-		"AttrExplicit",
-		"AttrExportSymbols",
-		"AttrExtension",
-		"AttrExternal",
-		"AttrFrameBase",
-		"AttrFriend",
-		"AttrHighpc",
-		"AttrIdentifierCase",
-		"AttrImport",
-		"AttrInline",
-		"AttrIsOptional",
-		"AttrLanguage",
-		"AttrLinkageName",
-		"AttrLocation",
-		"AttrLoclistsBase",
-		"AttrLowerBound",
-		"AttrLowpc",
-		"AttrMacroInfo",
-		"AttrMacros",
-		"AttrMainSubprogram",
-		"AttrMutable",
-		"AttrName",
-		"AttrNamelistItem",
-		"AttrNoreturn",
-		"AttrObjectPointer",
-		"AttrOrdering",
-		"AttrPictureString",
-		"AttrPriority",
-		"AttrProducer",
-		"AttrPrototyped",
-		"AttrPure",
-		"AttrRanges",
-		"AttrRank",
-		"AttrRecursive",
-		"AttrReference",
-		"AttrReturnAddr",
-		"AttrRnglistsBase",
-		"AttrRvalueReference",
-		"AttrSegment",
-		"AttrSibling",
-		"AttrSignature",
-		"AttrSmall",
-		"AttrSpecification",
-		"AttrStartScope",
-		"AttrStaticLink",
-		"AttrStmtList",
-		"AttrStrOffsetsBase",
-		"AttrStride",
-		"AttrStrideSize",
-		"AttrStringLength",
-		"AttrStringLengthBitSize",
-		"AttrStringLengthByteSize",
-		"AttrThreadsScaled",
-		"AttrTrampoline",
-		"AttrType",
-		"AttrUpperBound",
-		"AttrUseLocation",
-		"AttrUseUTF8",
-		"AttrVarParam",
-		"AttrVirtuality",
-		"AttrVisibility",
-		"AttrVtableElemLoc",
-		"BasicType",
-		"BoolType",
-		"CharType",
-		"Class",
-		"ClassAddrPtr",
-		"ClassAddress",
-		"ClassBlock",
-		"ClassConstant",
-		"ClassExprLoc",
-		"ClassFlag",
-		"ClassLinePtr",
-		"ClassLocList",
-		"ClassLocListPtr",
-		"ClassMacPtr",
-		"ClassRangeListPtr",
-		"ClassReference",
-		"ClassReferenceAlt",
-		"ClassReferenceSig",
-		"ClassRngList",
-		"ClassRngListsPtr",
-		"ClassStrOffsetsPtr",
-		"ClassString",
-		"ClassStringAlt",
-		"ClassUnknown",
-		"CommonType",
-		"ComplexType",
-		"Data",
-		"DecodeError",
-		"DotDotDotType",
-		"Entry",
-		"EnumType",
-		"EnumValue",
-		"ErrUnknownPC",
-		"Field",
-		"FloatType",
-		"FuncType",
-		"IntType",
-		"LineEntry",
-		"LineFile",
-		"LineReader",
-		"LineReaderPos",
-		"New",
-		"Offset",
-		"PtrType",
-		"QualType",
-		"Reader",
-		"StructField",
-		"StructType",
-		"Tag",
-		"TagAccessDeclaration",
-		"TagArrayType",
-		"TagAtomicType",
-		"TagBaseType",
-		"TagCallSite",
-		"TagCallSiteParameter",
-		"TagCatchDwarfBlock",
-		"TagClassType",
-		"TagCoarrayType",
-		"TagCommonDwarfBlock",
-		"TagCommonInclusion",
-		"TagCompileUnit",
-		"TagCondition",
-		"TagConstType",
-		"TagConstant",
-		"TagDwarfProcedure",
-		"TagDynamicType",
-		"TagEntryPoint",
-		"TagEnumerationType",
-		"TagEnumerator",
-		"TagFileType",
-		"TagFormalParameter",
-		"TagFriend",
-		"TagGenericSubrange",
-		"TagImmutableType",
-		"TagImportedDeclaration",
-		"TagImportedModule",
-		"TagImportedUnit",
-		"TagInheritance",
-		"TagInlinedSubroutine",
-		"TagInterfaceType",
-		"TagLabel",
-		"TagLexDwarfBlock",
-		"TagMember",
-		"TagModule",
-		"TagMutableType",
-		"TagNamelist",
-		"TagNamelistItem",
-		"TagNamespace",
-		"TagPackedType",
-		"TagPartialUnit",
-		"TagPointerType",
-		"TagPtrToMemberType",
-		"TagReferenceType",
-		"TagRestrictType",
-		"TagRvalueReferenceType",
-		"TagSetType",
-		"TagSharedType",
-		"TagSkeletonUnit",
-		"TagStringType",
-		"TagStructType",
-		"TagSubprogram",
-		"TagSubrangeType",
-		"TagSubroutineType",
-		"TagTemplateAlias",
-		"TagTemplateTypeParameter",
-		"TagTemplateValueParameter",
-		"TagThrownType",
-		"TagTryDwarfBlock",
-		"TagTypeUnit",
-		"TagTypedef",
-		"TagUnionType",
-		"TagUnspecifiedParameters",
-		"TagUnspecifiedType",
-		"TagVariable",
-		"TagVariant",
-		"TagVariantPart",
-		"TagVolatileType",
-		"TagWithStmt",
-		"Type",
-		"TypedefType",
-		"UcharType",
-		"UintType",
-		"UnspecifiedType",
-		"UnsupportedType",
-		"VoidType",
-	},
-	"debug/elf": []string{
-		"ARM_MAGIC_TRAMP_NUMBER",
-		"COMPRESS_HIOS",
-		"COMPRESS_HIPROC",
-		"COMPRESS_LOOS",
-		"COMPRESS_LOPROC",
-		"COMPRESS_ZLIB",
-		"Chdr32",
-		"Chdr64",
-		"Class",
-		"CompressionType",
-		"DF_BIND_NOW",
-		"DF_ORIGIN",
-		"DF_STATIC_TLS",
-		"DF_SYMBOLIC",
-		"DF_TEXTREL",
-		"DT_ADDRRNGHI",
-		"DT_ADDRRNGLO",
-		"DT_AUDIT",
-		"DT_AUXILIARY",
-		"DT_BIND_NOW",
-		"DT_CHECKSUM",
-		"DT_CONFIG",
-		"DT_DEBUG",
-		"DT_DEPAUDIT",
-		"DT_ENCODING",
-		"DT_FEATURE",
-		"DT_FILTER",
-		"DT_FINI",
-		"DT_FINI_ARRAY",
-		"DT_FINI_ARRAYSZ",
-		"DT_FLAGS",
-		"DT_FLAGS_1",
-		"DT_GNU_CONFLICT",
-		"DT_GNU_CONFLICTSZ",
-		"DT_GNU_HASH",
-		"DT_GNU_LIBLIST",
-		"DT_GNU_LIBLISTSZ",
-		"DT_GNU_PRELINKED",
-		"DT_HASH",
-		"DT_HIOS",
-		"DT_HIPROC",
-		"DT_INIT",
-		"DT_INIT_ARRAY",
-		"DT_INIT_ARRAYSZ",
-		"DT_JMPREL",
-		"DT_LOOS",
-		"DT_LOPROC",
-		"DT_MIPS_AUX_DYNAMIC",
-		"DT_MIPS_BASE_ADDRESS",
-		"DT_MIPS_COMPACT_SIZE",
-		"DT_MIPS_CONFLICT",
-		"DT_MIPS_CONFLICTNO",
-		"DT_MIPS_CXX_FLAGS",
-		"DT_MIPS_DELTA_CLASS",
-		"DT_MIPS_DELTA_CLASSSYM",
-		"DT_MIPS_DELTA_CLASSSYM_NO",
-		"DT_MIPS_DELTA_CLASS_NO",
-		"DT_MIPS_DELTA_INSTANCE",
-		"DT_MIPS_DELTA_INSTANCE_NO",
-		"DT_MIPS_DELTA_RELOC",
-		"DT_MIPS_DELTA_RELOC_NO",
-		"DT_MIPS_DELTA_SYM",
-		"DT_MIPS_DELTA_SYM_NO",
-		"DT_MIPS_DYNSTR_ALIGN",
-		"DT_MIPS_FLAGS",
-		"DT_MIPS_GOTSYM",
-		"DT_MIPS_GP_VALUE",
-		"DT_MIPS_HIDDEN_GOTIDX",
-		"DT_MIPS_HIPAGENO",
-		"DT_MIPS_ICHECKSUM",
-		"DT_MIPS_INTERFACE",
-		"DT_MIPS_INTERFACE_SIZE",
-		"DT_MIPS_IVERSION",
-		"DT_MIPS_LIBLIST",
-		"DT_MIPS_LIBLISTNO",
-		"DT_MIPS_LOCALPAGE_GOTIDX",
-		"DT_MIPS_LOCAL_GOTIDX",
-		"DT_MIPS_LOCAL_GOTNO",
-		"DT_MIPS_MSYM",
-		"DT_MIPS_OPTIONS",
-		"DT_MIPS_PERF_SUFFIX",
-		"DT_MIPS_PIXIE_INIT",
-		"DT_MIPS_PLTGOT",
-		"DT_MIPS_PROTECTED_GOTIDX",
-		"DT_MIPS_RLD_MAP",
-		"DT_MIPS_RLD_MAP_REL",
-		"DT_MIPS_RLD_TEXT_RESOLVE_ADDR",
-		"DT_MIPS_RLD_VERSION",
-		"DT_MIPS_RWPLT",
-		"DT_MIPS_SYMBOL_LIB",
-		"DT_MIPS_SYMTABNO",
-		"DT_MIPS_TIME_STAMP",
-		"DT_MIPS_UNREFEXTNO",
-		"DT_MOVEENT",
-		"DT_MOVESZ",
-		"DT_MOVETAB",
-		"DT_NEEDED",
-		"DT_NULL",
-		"DT_PLTGOT",
-		"DT_PLTPAD",
-		"DT_PLTPADSZ",
-		"DT_PLTREL",
-		"DT_PLTRELSZ",
-		"DT_POSFLAG_1",
-		"DT_PPC64_GLINK",
-		"DT_PPC64_OPD",
-		"DT_PPC64_OPDSZ",
-		"DT_PPC64_OPT",
-		"DT_PPC_GOT",
-		"DT_PPC_OPT",
-		"DT_PREINIT_ARRAY",
-		"DT_PREINIT_ARRAYSZ",
-		"DT_REL",
-		"DT_RELA",
-		"DT_RELACOUNT",
-		"DT_RELAENT",
-		"DT_RELASZ",
-		"DT_RELCOUNT",
-		"DT_RELENT",
-		"DT_RELSZ",
-		"DT_RPATH",
-		"DT_RUNPATH",
-		"DT_SONAME",
-		"DT_SPARC_REGISTER",
-		"DT_STRSZ",
-		"DT_STRTAB",
-		"DT_SYMBOLIC",
-		"DT_SYMENT",
-		"DT_SYMINENT",
-		"DT_SYMINFO",
-		"DT_SYMINSZ",
-		"DT_SYMTAB",
-		"DT_SYMTAB_SHNDX",
-		"DT_TEXTREL",
-		"DT_TLSDESC_GOT",
-		"DT_TLSDESC_PLT",
-		"DT_USED",
-		"DT_VALRNGHI",
-		"DT_VALRNGLO",
-		"DT_VERDEF",
-		"DT_VERDEFNUM",
-		"DT_VERNEED",
-		"DT_VERNEEDNUM",
-		"DT_VERSYM",
-		"Data",
-		"Dyn32",
-		"Dyn64",
-		"DynFlag",
-		"DynTag",
-		"EI_ABIVERSION",
-		"EI_CLASS",
-		"EI_DATA",
-		"EI_NIDENT",
-		"EI_OSABI",
-		"EI_PAD",
-		"EI_VERSION",
-		"ELFCLASS32",
-		"ELFCLASS64",
-		"ELFCLASSNONE",
-		"ELFDATA2LSB",
-		"ELFDATA2MSB",
-		"ELFDATANONE",
-		"ELFMAG",
-		"ELFOSABI_86OPEN",
-		"ELFOSABI_AIX",
-		"ELFOSABI_ARM",
-		"ELFOSABI_AROS",
-		"ELFOSABI_CLOUDABI",
-		"ELFOSABI_FENIXOS",
-		"ELFOSABI_FREEBSD",
-		"ELFOSABI_HPUX",
-		"ELFOSABI_HURD",
-		"ELFOSABI_IRIX",
-		"ELFOSABI_LINUX",
-		"ELFOSABI_MODESTO",
-		"ELFOSABI_NETBSD",
-		"ELFOSABI_NONE",
-		"ELFOSABI_NSK",
-		"ELFOSABI_OPENBSD",
-		"ELFOSABI_OPENVMS",
-		"ELFOSABI_SOLARIS",
-		"ELFOSABI_STANDALONE",
-		"ELFOSABI_TRU64",
-		"EM_386",
-		"EM_486",
-		"EM_56800EX",
-		"EM_68HC05",
-		"EM_68HC08",
-		"EM_68HC11",
-		"EM_68HC12",
-		"EM_68HC16",
-		"EM_68K",
-		"EM_78KOR",
-		"EM_8051",
-		"EM_860",
-		"EM_88K",
-		"EM_960",
-		"EM_AARCH64",
-		"EM_ALPHA",
-		"EM_ALPHA_STD",
-		"EM_ALTERA_NIOS2",
-		"EM_AMDGPU",
-		"EM_ARC",
-		"EM_ARCA",
-		"EM_ARC_COMPACT",
-		"EM_ARC_COMPACT2",
-		"EM_ARM",
-		"EM_AVR",
-		"EM_AVR32",
-		"EM_BA1",
-		"EM_BA2",
-		"EM_BLACKFIN",
-		"EM_BPF",
-		"EM_C166",
-		"EM_CDP",
-		"EM_CE",
-		"EM_CLOUDSHIELD",
-		"EM_COGE",
-		"EM_COLDFIRE",
-		"EM_COOL",
-		"EM_COREA_1ST",
-		"EM_COREA_2ND",
-		"EM_CR",
-		"EM_CR16",
-		"EM_CRAYNV2",
-		"EM_CRIS",
-		"EM_CRX",
-		"EM_CSR_KALIMBA",
-		"EM_CUDA",
-		"EM_CYPRESS_M8C",
-		"EM_D10V",
-		"EM_D30V",
-		"EM_DSP24",
-		"EM_DSPIC30F",
-		"EM_DXP",
-		"EM_ECOG1",
-		"EM_ECOG16",
-		"EM_ECOG1X",
-		"EM_ECOG2",
-		"EM_ETPU",
-		"EM_EXCESS",
-		"EM_F2MC16",
-		"EM_FIREPATH",
-		"EM_FR20",
-		"EM_FR30",
-		"EM_FT32",
-		"EM_FX66",
-		"EM_H8S",
-		"EM_H8_300",
-		"EM_H8_300H",
-		"EM_H8_500",
-		"EM_HUANY",
-		"EM_IA_64",
-		"EM_INTEL205",
-		"EM_INTEL206",
-		"EM_INTEL207",
-		"EM_INTEL208",
-		"EM_INTEL209",
-		"EM_IP2K",
-		"EM_JAVELIN",
-		"EM_K10M",
-		"EM_KM32",
-		"EM_KMX16",
-		"EM_KMX32",
-		"EM_KMX8",
-		"EM_KVARC",
-		"EM_L10M",
-		"EM_LANAI",
-		"EM_LATTICEMICO32",
-		"EM_M16C",
-		"EM_M32",
-		"EM_M32C",
-		"EM_M32R",
-		"EM_MANIK",
-		"EM_MAX",
-		"EM_MAXQ30",
-		"EM_MCHP_PIC",
-		"EM_MCST_ELBRUS",
-		"EM_ME16",
-		"EM_METAG",
-		"EM_MICROBLAZE",
-		"EM_MIPS",
-		"EM_MIPS_RS3_LE",
-		"EM_MIPS_RS4_BE",
-		"EM_MIPS_X",
-		"EM_MMA",
-		"EM_MMDSP_PLUS",
-		"EM_MMIX",
-		"EM_MN10200",
-		"EM_MN10300",
-		"EM_MOXIE",
-		"EM_MSP430",
-		"EM_NCPU",
-		"EM_NDR1",
-		"EM_NDS32",
-		"EM_NONE",
-		"EM_NORC",
-		"EM_NS32K",
-		"EM_OPEN8",
-		"EM_OPENRISC",
-		"EM_PARISC",
-		"EM_PCP",
-		"EM_PDP10",
-		"EM_PDP11",
-		"EM_PDSP",
-		"EM_PJ",
-		"EM_PPC",
-		"EM_PPC64",
-		"EM_PRISM",
-		"EM_QDSP6",
-		"EM_R32C",
-		"EM_RCE",
-		"EM_RH32",
-		"EM_RISCV",
-		"EM_RL78",
-		"EM_RS08",
-		"EM_RX",
-		"EM_S370",
-		"EM_S390",
-		"EM_SCORE7",
-		"EM_SEP",
-		"EM_SE_C17",
-		"EM_SE_C33",
-		"EM_SH",
-		"EM_SHARC",
-		"EM_SLE9X",
-		"EM_SNP1K",
-		"EM_SPARC",
-		"EM_SPARC32PLUS",
-		"EM_SPARCV9",
-		"EM_ST100",
-		"EM_ST19",
-		"EM_ST200",
-		"EM_ST7",
-		"EM_ST9PLUS",
-		"EM_STARCORE",
-		"EM_STM8",
-		"EM_STXP7X",
-		"EM_SVX",
-		"EM_TILE64",
-		"EM_TILEGX",
-		"EM_TILEPRO",
-		"EM_TINYJ",
-		"EM_TI_ARP32",
-		"EM_TI_C2000",
-		"EM_TI_C5500",
-		"EM_TI_C6000",
-		"EM_TI_PRU",
-		"EM_TMM_GPP",
-		"EM_TPC",
-		"EM_TRICORE",
-		"EM_TRIMEDIA",
-		"EM_TSK3000",
-		"EM_UNICORE",
-		"EM_V800",
-		"EM_V850",
-		"EM_VAX",
-		"EM_VIDEOCORE",
-		"EM_VIDEOCORE3",
-		"EM_VIDEOCORE5",
-		"EM_VISIUM",
-		"EM_VPP500",
-		"EM_X86_64",
-		"EM_XCORE",
-		"EM_XGATE",
-		"EM_XIMO16",
-		"EM_XTENSA",
-		"EM_Z80",
-		"EM_ZSP",
-		"ET_CORE",
-		"ET_DYN",
-		"ET_EXEC",
-		"ET_HIOS",
-		"ET_HIPROC",
-		"ET_LOOS",
-		"ET_LOPROC",
-		"ET_NONE",
-		"ET_REL",
-		"EV_CURRENT",
-		"EV_NONE",
-		"ErrNoSymbols",
-		"File",
-		"FileHeader",
-		"FormatError",
-		"Header32",
-		"Header64",
-		"ImportedSymbol",
-		"Machine",
-		"NT_FPREGSET",
-		"NT_PRPSINFO",
-		"NT_PRSTATUS",
-		"NType",
-		"NewFile",
-		"OSABI",
-		"Open",
-		"PF_MASKOS",
-		"PF_MASKPROC",
-		"PF_R",
-		"PF_W",
-		"PF_X",
-		"PT_AARCH64_ARCHEXT",
-		"PT_AARCH64_UNWIND",
-		"PT_ARM_ARCHEXT",
-		"PT_ARM_EXIDX",
-		"PT_DYNAMIC",
-		"PT_GNU_EH_FRAME",
-		"PT_GNU_MBIND_HI",
-		"PT_GNU_MBIND_LO",
-		"PT_GNU_PROPERTY",
-		"PT_GNU_RELRO",
-		"PT_GNU_STACK",
-		"PT_HIOS",
-		"PT_HIPROC",
-		"PT_INTERP",
-		"PT_LOAD",
-		"PT_LOOS",
-		"PT_LOPROC",
-		"PT_MIPS_ABIFLAGS",
-		"PT_MIPS_OPTIONS",
-		"PT_MIPS_REGINFO",
-		"PT_MIPS_RTPROC",
-		"PT_NOTE",
-		"PT_NULL",
-		"PT_OPENBSD_BOOTDATA",
-		"PT_OPENBSD_RANDOMIZE",
-		"PT_OPENBSD_WXNEEDED",
-		"PT_PAX_FLAGS",
-		"PT_PHDR",
-		"PT_S390_PGSTE",
-		"PT_SHLIB",
-		"PT_SUNWSTACK",
-		"PT_SUNW_EH_FRAME",
-		"PT_TLS",
-		"Prog",
-		"Prog32",
-		"Prog64",
-		"ProgFlag",
-		"ProgHeader",
-		"ProgType",
-		"R_386",
-		"R_386_16",
-		"R_386_32",
-		"R_386_32PLT",
-		"R_386_8",
-		"R_386_COPY",
-		"R_386_GLOB_DAT",
-		"R_386_GOT32",
-		"R_386_GOT32X",
-		"R_386_GOTOFF",
-		"R_386_GOTPC",
-		"R_386_IRELATIVE",
-		"R_386_JMP_SLOT",
-		"R_386_NONE",
-		"R_386_PC16",
-		"R_386_PC32",
-		"R_386_PC8",
-		"R_386_PLT32",
-		"R_386_RELATIVE",
-		"R_386_SIZE32",
-		"R_386_TLS_DESC",
-		"R_386_TLS_DESC_CALL",
-		"R_386_TLS_DTPMOD32",
-		"R_386_TLS_DTPOFF32",
-		"R_386_TLS_GD",
-		"R_386_TLS_GD_32",
-		"R_386_TLS_GD_CALL",
-		"R_386_TLS_GD_POP",
-		"R_386_TLS_GD_PUSH",
-		"R_386_TLS_GOTDESC",
-		"R_386_TLS_GOTIE",
-		"R_386_TLS_IE",
-		"R_386_TLS_IE_32",
-		"R_386_TLS_LDM",
-		"R_386_TLS_LDM_32",
-		"R_386_TLS_LDM_CALL",
-		"R_386_TLS_LDM_POP",
-		"R_386_TLS_LDM_PUSH",
-		"R_386_TLS_LDO_32",
-		"R_386_TLS_LE",
-		"R_386_TLS_LE_32",
-		"R_386_TLS_TPOFF",
-		"R_386_TLS_TPOFF32",
-		"R_390",
-		"R_390_12",
-		"R_390_16",
-		"R_390_20",
-		"R_390_32",
-		"R_390_64",
-		"R_390_8",
-		"R_390_COPY",
-		"R_390_GLOB_DAT",
-		"R_390_GOT12",
-		"R_390_GOT16",
-		"R_390_GOT20",
-		"R_390_GOT32",
-		"R_390_GOT64",
-		"R_390_GOTENT",
-		"R_390_GOTOFF",
-		"R_390_GOTOFF16",
-		"R_390_GOTOFF64",
-		"R_390_GOTPC",
-		"R_390_GOTPCDBL",
-		"R_390_GOTPLT12",
-		"R_390_GOTPLT16",
-		"R_390_GOTPLT20",
-		"R_390_GOTPLT32",
-		"R_390_GOTPLT64",
-		"R_390_GOTPLTENT",
-		"R_390_GOTPLTOFF16",
-		"R_390_GOTPLTOFF32",
-		"R_390_GOTPLTOFF64",
-		"R_390_JMP_SLOT",
-		"R_390_NONE",
-		"R_390_PC16",
-		"R_390_PC16DBL",
-		"R_390_PC32",
-		"R_390_PC32DBL",
-		"R_390_PC64",
-		"R_390_PLT16DBL",
-		"R_390_PLT32",
-		"R_390_PLT32DBL",
-		"R_390_PLT64",
-		"R_390_RELATIVE",
-		"R_390_TLS_DTPMOD",
-		"R_390_TLS_DTPOFF",
-		"R_390_TLS_GD32",
-		"R_390_TLS_GD64",
-		"R_390_TLS_GDCALL",
-		"R_390_TLS_GOTIE12",
-		"R_390_TLS_GOTIE20",
-		"R_390_TLS_GOTIE32",
-		"R_390_TLS_GOTIE64",
-		"R_390_TLS_IE32",
-		"R_390_TLS_IE64",
-		"R_390_TLS_IEENT",
-		"R_390_TLS_LDCALL",
-		"R_390_TLS_LDM32",
-		"R_390_TLS_LDM64",
-		"R_390_TLS_LDO32",
-		"R_390_TLS_LDO64",
-		"R_390_TLS_LE32",
-		"R_390_TLS_LE64",
-		"R_390_TLS_LOAD",
-		"R_390_TLS_TPOFF",
-		"R_AARCH64",
-		"R_AARCH64_ABS16",
-		"R_AARCH64_ABS32",
-		"R_AARCH64_ABS64",
-		"R_AARCH64_ADD_ABS_LO12_NC",
-		"R_AARCH64_ADR_GOT_PAGE",
-		"R_AARCH64_ADR_PREL_LO21",
-		"R_AARCH64_ADR_PREL_PG_HI21",
-		"R_AARCH64_ADR_PREL_PG_HI21_NC",
-		"R_AARCH64_CALL26",
-		"R_AARCH64_CONDBR19",
-		"R_AARCH64_COPY",
-		"R_AARCH64_GLOB_DAT",
-		"R_AARCH64_GOT_LD_PREL19",
-		"R_AARCH64_IRELATIVE",
-		"R_AARCH64_JUMP26",
-		"R_AARCH64_JUMP_SLOT",
-		"R_AARCH64_LD64_GOTOFF_LO15",
-		"R_AARCH64_LD64_GOTPAGE_LO15",
-		"R_AARCH64_LD64_GOT_LO12_NC",
-		"R_AARCH64_LDST128_ABS_LO12_NC",
-		"R_AARCH64_LDST16_ABS_LO12_NC",
-		"R_AARCH64_LDST32_ABS_LO12_NC",
-		"R_AARCH64_LDST64_ABS_LO12_NC",
-		"R_AARCH64_LDST8_ABS_LO12_NC",
-		"R_AARCH64_LD_PREL_LO19",
-		"R_AARCH64_MOVW_SABS_G0",
-		"R_AARCH64_MOVW_SABS_G1",
-		"R_AARCH64_MOVW_SABS_G2",
-		"R_AARCH64_MOVW_UABS_G0",
-		"R_AARCH64_MOVW_UABS_G0_NC",
-		"R_AARCH64_MOVW_UABS_G1",
-		"R_AARCH64_MOVW_UABS_G1_NC",
-		"R_AARCH64_MOVW_UABS_G2",
-		"R_AARCH64_MOVW_UABS_G2_NC",
-		"R_AARCH64_MOVW_UABS_G3",
-		"R_AARCH64_NONE",
-		"R_AARCH64_NULL",
-		"R_AARCH64_P32_ABS16",
-		"R_AARCH64_P32_ABS32",
-		"R_AARCH64_P32_ADD_ABS_LO12_NC",
-		"R_AARCH64_P32_ADR_GOT_PAGE",
-		"R_AARCH64_P32_ADR_PREL_LO21",
-		"R_AARCH64_P32_ADR_PREL_PG_HI21",
-		"R_AARCH64_P32_CALL26",
-		"R_AARCH64_P32_CONDBR19",
-		"R_AARCH64_P32_COPY",
-		"R_AARCH64_P32_GLOB_DAT",
-		"R_AARCH64_P32_GOT_LD_PREL19",
-		"R_AARCH64_P32_IRELATIVE",
-		"R_AARCH64_P32_JUMP26",
-		"R_AARCH64_P32_JUMP_SLOT",
-		"R_AARCH64_P32_LD32_GOT_LO12_NC",
-		"R_AARCH64_P32_LDST128_ABS_LO12_NC",
-		"R_AARCH64_P32_LDST16_ABS_LO12_NC",
-		"R_AARCH64_P32_LDST32_ABS_LO12_NC",
-		"R_AARCH64_P32_LDST64_ABS_LO12_NC",
-		"R_AARCH64_P32_LDST8_ABS_LO12_NC",
-		"R_AARCH64_P32_LD_PREL_LO19",
-		"R_AARCH64_P32_MOVW_SABS_G0",
-		"R_AARCH64_P32_MOVW_UABS_G0",
-		"R_AARCH64_P32_MOVW_UABS_G0_NC",
-		"R_AARCH64_P32_MOVW_UABS_G1",
-		"R_AARCH64_P32_PREL16",
-		"R_AARCH64_P32_PREL32",
-		"R_AARCH64_P32_RELATIVE",
-		"R_AARCH64_P32_TLSDESC",
-		"R_AARCH64_P32_TLSDESC_ADD_LO12_NC",
-		"R_AARCH64_P32_TLSDESC_ADR_PAGE21",
-		"R_AARCH64_P32_TLSDESC_ADR_PREL21",
-		"R_AARCH64_P32_TLSDESC_CALL",
-		"R_AARCH64_P32_TLSDESC_LD32_LO12_NC",
-		"R_AARCH64_P32_TLSDESC_LD_PREL19",
-		"R_AARCH64_P32_TLSGD_ADD_LO12_NC",
-		"R_AARCH64_P32_TLSGD_ADR_PAGE21",
-		"R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21",
-		"R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC",
-		"R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19",
-		"R_AARCH64_P32_TLSLE_ADD_TPREL_HI12",
-		"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12",
-		"R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC",
-		"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0",
-		"R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC",
-		"R_AARCH64_P32_TLSLE_MOVW_TPREL_G1",
-		"R_AARCH64_P32_TLS_DTPMOD",
-		"R_AARCH64_P32_TLS_DTPREL",
-		"R_AARCH64_P32_TLS_TPREL",
-		"R_AARCH64_P32_TSTBR14",
-		"R_AARCH64_PREL16",
-		"R_AARCH64_PREL32",
-		"R_AARCH64_PREL64",
-		"R_AARCH64_RELATIVE",
-		"R_AARCH64_TLSDESC",
-		"R_AARCH64_TLSDESC_ADD",
-		"R_AARCH64_TLSDESC_ADD_LO12_NC",
-		"R_AARCH64_TLSDESC_ADR_PAGE21",
-		"R_AARCH64_TLSDESC_ADR_PREL21",
-		"R_AARCH64_TLSDESC_CALL",
-		"R_AARCH64_TLSDESC_LD64_LO12_NC",
-		"R_AARCH64_TLSDESC_LDR",
-		"R_AARCH64_TLSDESC_LD_PREL19",
-		"R_AARCH64_TLSDESC_OFF_G0_NC",
-		"R_AARCH64_TLSDESC_OFF_G1",
-		"R_AARCH64_TLSGD_ADD_LO12_NC",
-		"R_AARCH64_TLSGD_ADR_PAGE21",
-		"R_AARCH64_TLSGD_ADR_PREL21",
-		"R_AARCH64_TLSGD_MOVW_G0_NC",
-		"R_AARCH64_TLSGD_MOVW_G1",
-		"R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21",
-		"R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC",
-		"R_AARCH64_TLSIE_LD_GOTTPREL_PREL19",
-		"R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC",
-		"R_AARCH64_TLSIE_MOVW_GOTTPREL_G1",
-		"R_AARCH64_TLSLD_ADR_PAGE21",
-		"R_AARCH64_TLSLD_ADR_PREL21",
-		"R_AARCH64_TLSLD_LDST128_DTPREL_LO12",
-		"R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC",
-		"R_AARCH64_TLSLE_ADD_TPREL_HI12",
-		"R_AARCH64_TLSLE_ADD_TPREL_LO12",
-		"R_AARCH64_TLSLE_ADD_TPREL_LO12_NC",
-		"R_AARCH64_TLSLE_LDST128_TPREL_LO12",
-		"R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC",
-		"R_AARCH64_TLSLE_MOVW_TPREL_G0",
-		"R_AARCH64_TLSLE_MOVW_TPREL_G0_NC",
-		"R_AARCH64_TLSLE_MOVW_TPREL_G1",
-		"R_AARCH64_TLSLE_MOVW_TPREL_G1_NC",
-		"R_AARCH64_TLSLE_MOVW_TPREL_G2",
-		"R_AARCH64_TLS_DTPMOD64",
-		"R_AARCH64_TLS_DTPREL64",
-		"R_AARCH64_TLS_TPREL64",
-		"R_AARCH64_TSTBR14",
-		"R_ALPHA",
-		"R_ALPHA_BRADDR",
-		"R_ALPHA_COPY",
-		"R_ALPHA_GLOB_DAT",
-		"R_ALPHA_GPDISP",
-		"R_ALPHA_GPREL32",
-		"R_ALPHA_GPRELHIGH",
-		"R_ALPHA_GPRELLOW",
-		"R_ALPHA_GPVALUE",
-		"R_ALPHA_HINT",
-		"R_ALPHA_IMMED_BR_HI32",
-		"R_ALPHA_IMMED_GP_16",
-		"R_ALPHA_IMMED_GP_HI32",
-		"R_ALPHA_IMMED_LO32",
-		"R_ALPHA_IMMED_SCN_HI32",
-		"R_ALPHA_JMP_SLOT",
-		"R_ALPHA_LITERAL",
-		"R_ALPHA_LITUSE",
-		"R_ALPHA_NONE",
-		"R_ALPHA_OP_PRSHIFT",
-		"R_ALPHA_OP_PSUB",
-		"R_ALPHA_OP_PUSH",
-		"R_ALPHA_OP_STORE",
-		"R_ALPHA_REFLONG",
-		"R_ALPHA_REFQUAD",
-		"R_ALPHA_RELATIVE",
-		"R_ALPHA_SREL16",
-		"R_ALPHA_SREL32",
-		"R_ALPHA_SREL64",
-		"R_ARM",
-		"R_ARM_ABS12",
-		"R_ARM_ABS16",
-		"R_ARM_ABS32",
-		"R_ARM_ABS32_NOI",
-		"R_ARM_ABS8",
-		"R_ARM_ALU_PCREL_15_8",
-		"R_ARM_ALU_PCREL_23_15",
-		"R_ARM_ALU_PCREL_7_0",
-		"R_ARM_ALU_PC_G0",
-		"R_ARM_ALU_PC_G0_NC",
-		"R_ARM_ALU_PC_G1",
-		"R_ARM_ALU_PC_G1_NC",
-		"R_ARM_ALU_PC_G2",
-		"R_ARM_ALU_SBREL_19_12_NC",
-		"R_ARM_ALU_SBREL_27_20_CK",
-		"R_ARM_ALU_SB_G0",
-		"R_ARM_ALU_SB_G0_NC",
-		"R_ARM_ALU_SB_G1",
-		"R_ARM_ALU_SB_G1_NC",
-		"R_ARM_ALU_SB_G2",
-		"R_ARM_AMP_VCALL9",
-		"R_ARM_BASE_ABS",
-		"R_ARM_CALL",
-		"R_ARM_COPY",
-		"R_ARM_GLOB_DAT",
-		"R_ARM_GNU_VTENTRY",
-		"R_ARM_GNU_VTINHERIT",
-		"R_ARM_GOT32",
-		"R_ARM_GOTOFF",
-		"R_ARM_GOTOFF12",
-		"R_ARM_GOTPC",
-		"R_ARM_GOTRELAX",
-		"R_ARM_GOT_ABS",
-		"R_ARM_GOT_BREL12",
-		"R_ARM_GOT_PREL",
-		"R_ARM_IRELATIVE",
-		"R_ARM_JUMP24",
-		"R_ARM_JUMP_SLOT",
-		"R_ARM_LDC_PC_G0",
-		"R_ARM_LDC_PC_G1",
-		"R_ARM_LDC_PC_G2",
-		"R_ARM_LDC_SB_G0",
-		"R_ARM_LDC_SB_G1",
-		"R_ARM_LDC_SB_G2",
-		"R_ARM_LDRS_PC_G0",
-		"R_ARM_LDRS_PC_G1",
-		"R_ARM_LDRS_PC_G2",
-		"R_ARM_LDRS_SB_G0",
-		"R_ARM_LDRS_SB_G1",
-		"R_ARM_LDRS_SB_G2",
-		"R_ARM_LDR_PC_G1",
-		"R_ARM_LDR_PC_G2",
-		"R_ARM_LDR_SBREL_11_10_NC",
-		"R_ARM_LDR_SB_G0",
-		"R_ARM_LDR_SB_G1",
-		"R_ARM_LDR_SB_G2",
-		"R_ARM_ME_TOO",
-		"R_ARM_MOVT_ABS",
-		"R_ARM_MOVT_BREL",
-		"R_ARM_MOVT_PREL",
-		"R_ARM_MOVW_ABS_NC",
-		"R_ARM_MOVW_BREL",
-		"R_ARM_MOVW_BREL_NC",
-		"R_ARM_MOVW_PREL_NC",
-		"R_ARM_NONE",
-		"R_ARM_PC13",
-		"R_ARM_PC24",
-		"R_ARM_PLT32",
-		"R_ARM_PLT32_ABS",
-		"R_ARM_PREL31",
-		"R_ARM_PRIVATE_0",
-		"R_ARM_PRIVATE_1",
-		"R_ARM_PRIVATE_10",
-		"R_ARM_PRIVATE_11",
-		"R_ARM_PRIVATE_12",
-		"R_ARM_PRIVATE_13",
-		"R_ARM_PRIVATE_14",
-		"R_ARM_PRIVATE_15",
-		"R_ARM_PRIVATE_2",
-		"R_ARM_PRIVATE_3",
-		"R_ARM_PRIVATE_4",
-		"R_ARM_PRIVATE_5",
-		"R_ARM_PRIVATE_6",
-		"R_ARM_PRIVATE_7",
-		"R_ARM_PRIVATE_8",
-		"R_ARM_PRIVATE_9",
-		"R_ARM_RABS32",
-		"R_ARM_RBASE",
-		"R_ARM_REL32",
-		"R_ARM_REL32_NOI",
-		"R_ARM_RELATIVE",
-		"R_ARM_RPC24",
-		"R_ARM_RREL32",
-		"R_ARM_RSBREL32",
-		"R_ARM_RXPC25",
-		"R_ARM_SBREL31",
-		"R_ARM_SBREL32",
-		"R_ARM_SWI24",
-		"R_ARM_TARGET1",
-		"R_ARM_TARGET2",
-		"R_ARM_THM_ABS5",
-		"R_ARM_THM_ALU_ABS_G0_NC",
-		"R_ARM_THM_ALU_ABS_G1_NC",
-		"R_ARM_THM_ALU_ABS_G2_NC",
-		"R_ARM_THM_ALU_ABS_G3",
-		"R_ARM_THM_ALU_PREL_11_0",
-		"R_ARM_THM_GOT_BREL12",
-		"R_ARM_THM_JUMP11",
-		"R_ARM_THM_JUMP19",
-		"R_ARM_THM_JUMP24",
-		"R_ARM_THM_JUMP6",
-		"R_ARM_THM_JUMP8",
-		"R_ARM_THM_MOVT_ABS",
-		"R_ARM_THM_MOVT_BREL",
-		"R_ARM_THM_MOVT_PREL",
-		"R_ARM_THM_MOVW_ABS_NC",
-		"R_ARM_THM_MOVW_BREL",
-		"R_ARM_THM_MOVW_BREL_NC",
-		"R_ARM_THM_MOVW_PREL_NC",
-		"R_ARM_THM_PC12",
-		"R_ARM_THM_PC22",
-		"R_ARM_THM_PC8",
-		"R_ARM_THM_RPC22",
-		"R_ARM_THM_SWI8",
-		"R_ARM_THM_TLS_CALL",
-		"R_ARM_THM_TLS_DESCSEQ16",
-		"R_ARM_THM_TLS_DESCSEQ32",
-		"R_ARM_THM_XPC22",
-		"R_ARM_TLS_CALL",
-		"R_ARM_TLS_DESCSEQ",
-		"R_ARM_TLS_DTPMOD32",
-		"R_ARM_TLS_DTPOFF32",
-		"R_ARM_TLS_GD32",
-		"R_ARM_TLS_GOTDESC",
-		"R_ARM_TLS_IE12GP",
-		"R_ARM_TLS_IE32",
-		"R_ARM_TLS_LDM32",
-		"R_ARM_TLS_LDO12",
-		"R_ARM_TLS_LDO32",
-		"R_ARM_TLS_LE12",
-		"R_ARM_TLS_LE32",
-		"R_ARM_TLS_TPOFF32",
-		"R_ARM_V4BX",
-		"R_ARM_XPC25",
-		"R_INFO",
-		"R_INFO32",
-		"R_MIPS",
-		"R_MIPS_16",
-		"R_MIPS_26",
-		"R_MIPS_32",
-		"R_MIPS_64",
-		"R_MIPS_ADD_IMMEDIATE",
-		"R_MIPS_CALL16",
-		"R_MIPS_CALL_HI16",
-		"R_MIPS_CALL_LO16",
-		"R_MIPS_DELETE",
-		"R_MIPS_GOT16",
-		"R_MIPS_GOT_DISP",
-		"R_MIPS_GOT_HI16",
-		"R_MIPS_GOT_LO16",
-		"R_MIPS_GOT_OFST",
-		"R_MIPS_GOT_PAGE",
-		"R_MIPS_GPREL16",
-		"R_MIPS_GPREL32",
-		"R_MIPS_HI16",
-		"R_MIPS_HIGHER",
-		"R_MIPS_HIGHEST",
-		"R_MIPS_INSERT_A",
-		"R_MIPS_INSERT_B",
-		"R_MIPS_JALR",
-		"R_MIPS_LITERAL",
-		"R_MIPS_LO16",
-		"R_MIPS_NONE",
-		"R_MIPS_PC16",
-		"R_MIPS_PJUMP",
-		"R_MIPS_REL16",
-		"R_MIPS_REL32",
-		"R_MIPS_RELGOT",
-		"R_MIPS_SCN_DISP",
-		"R_MIPS_SHIFT5",
-		"R_MIPS_SHIFT6",
-		"R_MIPS_SUB",
-		"R_MIPS_TLS_DTPMOD32",
-		"R_MIPS_TLS_DTPMOD64",
-		"R_MIPS_TLS_DTPREL32",
-		"R_MIPS_TLS_DTPREL64",
-		"R_MIPS_TLS_DTPREL_HI16",
-		"R_MIPS_TLS_DTPREL_LO16",
-		"R_MIPS_TLS_GD",
-		"R_MIPS_TLS_GOTTPREL",
-		"R_MIPS_TLS_LDM",
-		"R_MIPS_TLS_TPREL32",
-		"R_MIPS_TLS_TPREL64",
-		"R_MIPS_TLS_TPREL_HI16",
-		"R_MIPS_TLS_TPREL_LO16",
-		"R_PPC",
-		"R_PPC64",
-		"R_PPC64_ADDR14",
-		"R_PPC64_ADDR14_BRNTAKEN",
-		"R_PPC64_ADDR14_BRTAKEN",
-		"R_PPC64_ADDR16",
-		"R_PPC64_ADDR16_DS",
-		"R_PPC64_ADDR16_HA",
-		"R_PPC64_ADDR16_HI",
-		"R_PPC64_ADDR16_HIGH",
-		"R_PPC64_ADDR16_HIGHA",
-		"R_PPC64_ADDR16_HIGHER",
-		"R_PPC64_ADDR16_HIGHERA",
-		"R_PPC64_ADDR16_HIGHEST",
-		"R_PPC64_ADDR16_HIGHESTA",
-		"R_PPC64_ADDR16_LO",
-		"R_PPC64_ADDR16_LO_DS",
-		"R_PPC64_ADDR24",
-		"R_PPC64_ADDR32",
-		"R_PPC64_ADDR64",
-		"R_PPC64_ADDR64_LOCAL",
-		"R_PPC64_DTPMOD64",
-		"R_PPC64_DTPREL16",
-		"R_PPC64_DTPREL16_DS",
-		"R_PPC64_DTPREL16_HA",
-		"R_PPC64_DTPREL16_HI",
-		"R_PPC64_DTPREL16_HIGH",
-		"R_PPC64_DTPREL16_HIGHA",
-		"R_PPC64_DTPREL16_HIGHER",
-		"R_PPC64_DTPREL16_HIGHERA",
-		"R_PPC64_DTPREL16_HIGHEST",
-		"R_PPC64_DTPREL16_HIGHESTA",
-		"R_PPC64_DTPREL16_LO",
-		"R_PPC64_DTPREL16_LO_DS",
-		"R_PPC64_DTPREL64",
-		"R_PPC64_ENTRY",
-		"R_PPC64_GOT16",
-		"R_PPC64_GOT16_DS",
-		"R_PPC64_GOT16_HA",
-		"R_PPC64_GOT16_HI",
-		"R_PPC64_GOT16_LO",
-		"R_PPC64_GOT16_LO_DS",
-		"R_PPC64_GOT_DTPREL16_DS",
-		"R_PPC64_GOT_DTPREL16_HA",
-		"R_PPC64_GOT_DTPREL16_HI",
-		"R_PPC64_GOT_DTPREL16_LO_DS",
-		"R_PPC64_GOT_TLSGD16",
-		"R_PPC64_GOT_TLSGD16_HA",
-		"R_PPC64_GOT_TLSGD16_HI",
-		"R_PPC64_GOT_TLSGD16_LO",
-		"R_PPC64_GOT_TLSLD16",
-		"R_PPC64_GOT_TLSLD16_HA",
-		"R_PPC64_GOT_TLSLD16_HI",
-		"R_PPC64_GOT_TLSLD16_LO",
-		"R_PPC64_GOT_TPREL16_DS",
-		"R_PPC64_GOT_TPREL16_HA",
-		"R_PPC64_GOT_TPREL16_HI",
-		"R_PPC64_GOT_TPREL16_LO_DS",
-		"R_PPC64_IRELATIVE",
-		"R_PPC64_JMP_IREL",
-		"R_PPC64_JMP_SLOT",
-		"R_PPC64_NONE",
-		"R_PPC64_PLT16_LO_DS",
-		"R_PPC64_PLTGOT16",
-		"R_PPC64_PLTGOT16_DS",
-		"R_PPC64_PLTGOT16_HA",
-		"R_PPC64_PLTGOT16_HI",
-		"R_PPC64_PLTGOT16_LO",
-		"R_PPC64_PLTGOT_LO_DS",
-		"R_PPC64_REL14",
-		"R_PPC64_REL14_BRNTAKEN",
-		"R_PPC64_REL14_BRTAKEN",
-		"R_PPC64_REL16",
-		"R_PPC64_REL16DX_HA",
-		"R_PPC64_REL16_HA",
-		"R_PPC64_REL16_HI",
-		"R_PPC64_REL16_LO",
-		"R_PPC64_REL24",
-		"R_PPC64_REL24_NOTOC",
-		"R_PPC64_REL32",
-		"R_PPC64_REL64",
-		"R_PPC64_SECTOFF_DS",
-		"R_PPC64_SECTOFF_LO_DS",
-		"R_PPC64_TLS",
-		"R_PPC64_TLSGD",
-		"R_PPC64_TLSLD",
-		"R_PPC64_TOC",
-		"R_PPC64_TOC16",
-		"R_PPC64_TOC16_DS",
-		"R_PPC64_TOC16_HA",
-		"R_PPC64_TOC16_HI",
-		"R_PPC64_TOC16_LO",
-		"R_PPC64_TOC16_LO_DS",
-		"R_PPC64_TOCSAVE",
-		"R_PPC64_TPREL16",
-		"R_PPC64_TPREL16_DS",
-		"R_PPC64_TPREL16_HA",
-		"R_PPC64_TPREL16_HI",
-		"R_PPC64_TPREL16_HIGH",
-		"R_PPC64_TPREL16_HIGHA",
-		"R_PPC64_TPREL16_HIGHER",
-		"R_PPC64_TPREL16_HIGHERA",
-		"R_PPC64_TPREL16_HIGHEST",
-		"R_PPC64_TPREL16_HIGHESTA",
-		"R_PPC64_TPREL16_LO",
-		"R_PPC64_TPREL16_LO_DS",
-		"R_PPC64_TPREL64",
-		"R_PPC_ADDR14",
-		"R_PPC_ADDR14_BRNTAKEN",
-		"R_PPC_ADDR14_BRTAKEN",
-		"R_PPC_ADDR16",
-		"R_PPC_ADDR16_HA",
-		"R_PPC_ADDR16_HI",
-		"R_PPC_ADDR16_LO",
-		"R_PPC_ADDR24",
-		"R_PPC_ADDR32",
-		"R_PPC_COPY",
-		"R_PPC_DTPMOD32",
-		"R_PPC_DTPREL16",
-		"R_PPC_DTPREL16_HA",
-		"R_PPC_DTPREL16_HI",
-		"R_PPC_DTPREL16_LO",
-		"R_PPC_DTPREL32",
-		"R_PPC_EMB_BIT_FLD",
-		"R_PPC_EMB_MRKREF",
-		"R_PPC_EMB_NADDR16",
-		"R_PPC_EMB_NADDR16_HA",
-		"R_PPC_EMB_NADDR16_HI",
-		"R_PPC_EMB_NADDR16_LO",
-		"R_PPC_EMB_NADDR32",
-		"R_PPC_EMB_RELSDA",
-		"R_PPC_EMB_RELSEC16",
-		"R_PPC_EMB_RELST_HA",
-		"R_PPC_EMB_RELST_HI",
-		"R_PPC_EMB_RELST_LO",
-		"R_PPC_EMB_SDA21",
-		"R_PPC_EMB_SDA2I16",
-		"R_PPC_EMB_SDA2REL",
-		"R_PPC_EMB_SDAI16",
-		"R_PPC_GLOB_DAT",
-		"R_PPC_GOT16",
-		"R_PPC_GOT16_HA",
-		"R_PPC_GOT16_HI",
-		"R_PPC_GOT16_LO",
-		"R_PPC_GOT_TLSGD16",
-		"R_PPC_GOT_TLSGD16_HA",
-		"R_PPC_GOT_TLSGD16_HI",
-		"R_PPC_GOT_TLSGD16_LO",
-		"R_PPC_GOT_TLSLD16",
-		"R_PPC_GOT_TLSLD16_HA",
-		"R_PPC_GOT_TLSLD16_HI",
-		"R_PPC_GOT_TLSLD16_LO",
-		"R_PPC_GOT_TPREL16",
-		"R_PPC_GOT_TPREL16_HA",
-		"R_PPC_GOT_TPREL16_HI",
-		"R_PPC_GOT_TPREL16_LO",
-		"R_PPC_JMP_SLOT",
-		"R_PPC_LOCAL24PC",
-		"R_PPC_NONE",
-		"R_PPC_PLT16_HA",
-		"R_PPC_PLT16_HI",
-		"R_PPC_PLT16_LO",
-		"R_PPC_PLT32",
-		"R_PPC_PLTREL24",
-		"R_PPC_PLTREL32",
-		"R_PPC_REL14",
-		"R_PPC_REL14_BRNTAKEN",
-		"R_PPC_REL14_BRTAKEN",
-		"R_PPC_REL24",
-		"R_PPC_REL32",
-		"R_PPC_RELATIVE",
-		"R_PPC_SDAREL16",
-		"R_PPC_SECTOFF",
-		"R_PPC_SECTOFF_HA",
-		"R_PPC_SECTOFF_HI",
-		"R_PPC_SECTOFF_LO",
-		"R_PPC_TLS",
-		"R_PPC_TPREL16",
-		"R_PPC_TPREL16_HA",
-		"R_PPC_TPREL16_HI",
-		"R_PPC_TPREL16_LO",
-		"R_PPC_TPREL32",
-		"R_PPC_UADDR16",
-		"R_PPC_UADDR32",
-		"R_RISCV",
-		"R_RISCV_32",
-		"R_RISCV_32_PCREL",
-		"R_RISCV_64",
-		"R_RISCV_ADD16",
-		"R_RISCV_ADD32",
-		"R_RISCV_ADD64",
-		"R_RISCV_ADD8",
-		"R_RISCV_ALIGN",
-		"R_RISCV_BRANCH",
-		"R_RISCV_CALL",
-		"R_RISCV_CALL_PLT",
-		"R_RISCV_COPY",
-		"R_RISCV_GNU_VTENTRY",
-		"R_RISCV_GNU_VTINHERIT",
-		"R_RISCV_GOT_HI20",
-		"R_RISCV_GPREL_I",
-		"R_RISCV_GPREL_S",
-		"R_RISCV_HI20",
-		"R_RISCV_JAL",
-		"R_RISCV_JUMP_SLOT",
-		"R_RISCV_LO12_I",
-		"R_RISCV_LO12_S",
-		"R_RISCV_NONE",
-		"R_RISCV_PCREL_HI20",
-		"R_RISCV_PCREL_LO12_I",
-		"R_RISCV_PCREL_LO12_S",
-		"R_RISCV_RELATIVE",
-		"R_RISCV_RELAX",
-		"R_RISCV_RVC_BRANCH",
-		"R_RISCV_RVC_JUMP",
-		"R_RISCV_RVC_LUI",
-		"R_RISCV_SET16",
-		"R_RISCV_SET32",
-		"R_RISCV_SET6",
-		"R_RISCV_SET8",
-		"R_RISCV_SUB16",
-		"R_RISCV_SUB32",
-		"R_RISCV_SUB6",
-		"R_RISCV_SUB64",
-		"R_RISCV_SUB8",
-		"R_RISCV_TLS_DTPMOD32",
-		"R_RISCV_TLS_DTPMOD64",
-		"R_RISCV_TLS_DTPREL32",
-		"R_RISCV_TLS_DTPREL64",
-		"R_RISCV_TLS_GD_HI20",
-		"R_RISCV_TLS_GOT_HI20",
-		"R_RISCV_TLS_TPREL32",
-		"R_RISCV_TLS_TPREL64",
-		"R_RISCV_TPREL_ADD",
-		"R_RISCV_TPREL_HI20",
-		"R_RISCV_TPREL_I",
-		"R_RISCV_TPREL_LO12_I",
-		"R_RISCV_TPREL_LO12_S",
-		"R_RISCV_TPREL_S",
-		"R_SPARC",
-		"R_SPARC_10",
-		"R_SPARC_11",
-		"R_SPARC_13",
-		"R_SPARC_16",
-		"R_SPARC_22",
-		"R_SPARC_32",
-		"R_SPARC_5",
-		"R_SPARC_6",
-		"R_SPARC_64",
-		"R_SPARC_7",
-		"R_SPARC_8",
-		"R_SPARC_COPY",
-		"R_SPARC_DISP16",
-		"R_SPARC_DISP32",
-		"R_SPARC_DISP64",
-		"R_SPARC_DISP8",
-		"R_SPARC_GLOB_DAT",
-		"R_SPARC_GLOB_JMP",
-		"R_SPARC_GOT10",
-		"R_SPARC_GOT13",
-		"R_SPARC_GOT22",
-		"R_SPARC_H44",
-		"R_SPARC_HH22",
-		"R_SPARC_HI22",
-		"R_SPARC_HIPLT22",
-		"R_SPARC_HIX22",
-		"R_SPARC_HM10",
-		"R_SPARC_JMP_SLOT",
-		"R_SPARC_L44",
-		"R_SPARC_LM22",
-		"R_SPARC_LO10",
-		"R_SPARC_LOPLT10",
-		"R_SPARC_LOX10",
-		"R_SPARC_M44",
-		"R_SPARC_NONE",
-		"R_SPARC_OLO10",
-		"R_SPARC_PC10",
-		"R_SPARC_PC22",
-		"R_SPARC_PCPLT10",
-		"R_SPARC_PCPLT22",
-		"R_SPARC_PCPLT32",
-		"R_SPARC_PC_HH22",
-		"R_SPARC_PC_HM10",
-		"R_SPARC_PC_LM22",
-		"R_SPARC_PLT32",
-		"R_SPARC_PLT64",
-		"R_SPARC_REGISTER",
-		"R_SPARC_RELATIVE",
-		"R_SPARC_UA16",
-		"R_SPARC_UA32",
-		"R_SPARC_UA64",
-		"R_SPARC_WDISP16",
-		"R_SPARC_WDISP19",
-		"R_SPARC_WDISP22",
-		"R_SPARC_WDISP30",
-		"R_SPARC_WPLT30",
-		"R_SYM32",
-		"R_SYM64",
-		"R_TYPE32",
-		"R_TYPE64",
-		"R_X86_64",
-		"R_X86_64_16",
-		"R_X86_64_32",
-		"R_X86_64_32S",
-		"R_X86_64_64",
-		"R_X86_64_8",
-		"R_X86_64_COPY",
-		"R_X86_64_DTPMOD64",
-		"R_X86_64_DTPOFF32",
-		"R_X86_64_DTPOFF64",
-		"R_X86_64_GLOB_DAT",
-		"R_X86_64_GOT32",
-		"R_X86_64_GOT64",
-		"R_X86_64_GOTOFF64",
-		"R_X86_64_GOTPC32",
-		"R_X86_64_GOTPC32_TLSDESC",
-		"R_X86_64_GOTPC64",
-		"R_X86_64_GOTPCREL",
-		"R_X86_64_GOTPCREL64",
-		"R_X86_64_GOTPCRELX",
-		"R_X86_64_GOTPLT64",
-		"R_X86_64_GOTTPOFF",
-		"R_X86_64_IRELATIVE",
-		"R_X86_64_JMP_SLOT",
-		"R_X86_64_NONE",
-		"R_X86_64_PC16",
-		"R_X86_64_PC32",
-		"R_X86_64_PC32_BND",
-		"R_X86_64_PC64",
-		"R_X86_64_PC8",
-		"R_X86_64_PLT32",
-		"R_X86_64_PLT32_BND",
-		"R_X86_64_PLTOFF64",
-		"R_X86_64_RELATIVE",
-		"R_X86_64_RELATIVE64",
-		"R_X86_64_REX_GOTPCRELX",
-		"R_X86_64_SIZE32",
-		"R_X86_64_SIZE64",
-		"R_X86_64_TLSDESC",
-		"R_X86_64_TLSDESC_CALL",
-		"R_X86_64_TLSGD",
-		"R_X86_64_TLSLD",
-		"R_X86_64_TPOFF32",
-		"R_X86_64_TPOFF64",
-		"Rel32",
-		"Rel64",
-		"Rela32",
-		"Rela64",
-		"SHF_ALLOC",
-		"SHF_COMPRESSED",
-		"SHF_EXECINSTR",
-		"SHF_GROUP",
-		"SHF_INFO_LINK",
-		"SHF_LINK_ORDER",
-		"SHF_MASKOS",
-		"SHF_MASKPROC",
-		"SHF_MERGE",
-		"SHF_OS_NONCONFORMING",
-		"SHF_STRINGS",
-		"SHF_TLS",
-		"SHF_WRITE",
-		"SHN_ABS",
-		"SHN_COMMON",
-		"SHN_HIOS",
-		"SHN_HIPROC",
-		"SHN_HIRESERVE",
-		"SHN_LOOS",
-		"SHN_LOPROC",
-		"SHN_LORESERVE",
-		"SHN_UNDEF",
-		"SHN_XINDEX",
-		"SHT_DYNAMIC",
-		"SHT_DYNSYM",
-		"SHT_FINI_ARRAY",
-		"SHT_GNU_ATTRIBUTES",
-		"SHT_GNU_HASH",
-		"SHT_GNU_LIBLIST",
-		"SHT_GNU_VERDEF",
-		"SHT_GNU_VERNEED",
-		"SHT_GNU_VERSYM",
-		"SHT_GROUP",
-		"SHT_HASH",
-		"SHT_HIOS",
-		"SHT_HIPROC",
-		"SHT_HIUSER",
-		"SHT_INIT_ARRAY",
-		"SHT_LOOS",
-		"SHT_LOPROC",
-		"SHT_LOUSER",
-		"SHT_NOBITS",
-		"SHT_NOTE",
-		"SHT_NULL",
-		"SHT_PREINIT_ARRAY",
-		"SHT_PROGBITS",
-		"SHT_REL",
-		"SHT_RELA",
-		"SHT_SHLIB",
-		"SHT_STRTAB",
-		"SHT_SYMTAB",
-		"SHT_SYMTAB_SHNDX",
-		"STB_GLOBAL",
-		"STB_HIOS",
-		"STB_HIPROC",
-		"STB_LOCAL",
-		"STB_LOOS",
-		"STB_LOPROC",
-		"STB_WEAK",
-		"STT_COMMON",
-		"STT_FILE",
-		"STT_FUNC",
-		"STT_HIOS",
-		"STT_HIPROC",
-		"STT_LOOS",
-		"STT_LOPROC",
-		"STT_NOTYPE",
-		"STT_OBJECT",
-		"STT_SECTION",
-		"STT_TLS",
-		"STV_DEFAULT",
-		"STV_HIDDEN",
-		"STV_INTERNAL",
-		"STV_PROTECTED",
-		"ST_BIND",
-		"ST_INFO",
-		"ST_TYPE",
-		"ST_VISIBILITY",
-		"Section",
-		"Section32",
-		"Section64",
-		"SectionFlag",
-		"SectionHeader",
-		"SectionIndex",
-		"SectionType",
-		"Sym32",
-		"Sym32Size",
-		"Sym64",
-		"Sym64Size",
-		"SymBind",
-		"SymType",
-		"SymVis",
-		"Symbol",
-		"Type",
-		"Version",
-	},
-	"debug/gosym": []string{
-		"DecodingError",
-		"Func",
-		"LineTable",
-		"NewLineTable",
-		"NewTable",
-		"Obj",
-		"Sym",
-		"Table",
-		"UnknownFileError",
-		"UnknownLineError",
-	},
-	"debug/macho": []string{
-		"ARM64_RELOC_ADDEND",
-		"ARM64_RELOC_BRANCH26",
-		"ARM64_RELOC_GOT_LOAD_PAGE21",
-		"ARM64_RELOC_GOT_LOAD_PAGEOFF12",
-		"ARM64_RELOC_PAGE21",
-		"ARM64_RELOC_PAGEOFF12",
-		"ARM64_RELOC_POINTER_TO_GOT",
-		"ARM64_RELOC_SUBTRACTOR",
-		"ARM64_RELOC_TLVP_LOAD_PAGE21",
-		"ARM64_RELOC_TLVP_LOAD_PAGEOFF12",
-		"ARM64_RELOC_UNSIGNED",
-		"ARM_RELOC_BR24",
-		"ARM_RELOC_HALF",
-		"ARM_RELOC_HALF_SECTDIFF",
-		"ARM_RELOC_LOCAL_SECTDIFF",
-		"ARM_RELOC_PAIR",
-		"ARM_RELOC_PB_LA_PTR",
-		"ARM_RELOC_SECTDIFF",
-		"ARM_RELOC_VANILLA",
-		"ARM_THUMB_32BIT_BRANCH",
-		"ARM_THUMB_RELOC_BR22",
-		"Cpu",
-		"Cpu386",
-		"CpuAmd64",
-		"CpuArm",
-		"CpuArm64",
-		"CpuPpc",
-		"CpuPpc64",
-		"Dylib",
-		"DylibCmd",
-		"Dysymtab",
-		"DysymtabCmd",
-		"ErrNotFat",
-		"FatArch",
-		"FatArchHeader",
-		"FatFile",
-		"File",
-		"FileHeader",
-		"FlagAllModsBound",
-		"FlagAllowStackExecution",
-		"FlagAppExtensionSafe",
-		"FlagBindAtLoad",
-		"FlagBindsToWeak",
-		"FlagCanonical",
-		"FlagDeadStrippableDylib",
-		"FlagDyldLink",
-		"FlagForceFlat",
-		"FlagHasTLVDescriptors",
-		"FlagIncrLink",
-		"FlagLazyInit",
-		"FlagNoFixPrebinding",
-		"FlagNoHeapExecution",
-		"FlagNoMultiDefs",
-		"FlagNoReexportedDylibs",
-		"FlagNoUndefs",
-		"FlagPIE",
-		"FlagPrebindable",
-		"FlagPrebound",
-		"FlagRootSafe",
-		"FlagSetuidSafe",
-		"FlagSplitSegs",
-		"FlagSubsectionsViaSymbols",
-		"FlagTwoLevel",
-		"FlagWeakDefines",
-		"FormatError",
-		"GENERIC_RELOC_LOCAL_SECTDIFF",
-		"GENERIC_RELOC_PAIR",
-		"GENERIC_RELOC_PB_LA_PTR",
-		"GENERIC_RELOC_SECTDIFF",
-		"GENERIC_RELOC_TLV",
-		"GENERIC_RELOC_VANILLA",
-		"Load",
-		"LoadBytes",
-		"LoadCmd",
-		"LoadCmdDylib",
-		"LoadCmdDylinker",
-		"LoadCmdDysymtab",
-		"LoadCmdRpath",
-		"LoadCmdSegment",
-		"LoadCmdSegment64",
-		"LoadCmdSymtab",
-		"LoadCmdThread",
-		"LoadCmdUnixThread",
-		"Magic32",
-		"Magic64",
-		"MagicFat",
-		"NewFatFile",
-		"NewFile",
-		"Nlist32",
-		"Nlist64",
-		"Open",
-		"OpenFat",
-		"Regs386",
-		"RegsAMD64",
-		"Reloc",
-		"RelocTypeARM",
-		"RelocTypeARM64",
-		"RelocTypeGeneric",
-		"RelocTypeX86_64",
-		"Rpath",
-		"RpathCmd",
-		"Section",
-		"Section32",
-		"Section64",
-		"SectionHeader",
-		"Segment",
-		"Segment32",
-		"Segment64",
-		"SegmentHeader",
-		"Symbol",
-		"Symtab",
-		"SymtabCmd",
-		"Thread",
-		"Type",
-		"TypeBundle",
-		"TypeDylib",
-		"TypeExec",
-		"TypeObj",
-		"X86_64_RELOC_BRANCH",
-		"X86_64_RELOC_GOT",
-		"X86_64_RELOC_GOT_LOAD",
-		"X86_64_RELOC_SIGNED",
-		"X86_64_RELOC_SIGNED_1",
-		"X86_64_RELOC_SIGNED_2",
-		"X86_64_RELOC_SIGNED_4",
-		"X86_64_RELOC_SUBTRACTOR",
-		"X86_64_RELOC_TLV",
-		"X86_64_RELOC_UNSIGNED",
-	},
-	"debug/pe": []string{
-		"COFFSymbol",
-		"COFFSymbolSize",
-		"DataDirectory",
-		"File",
-		"FileHeader",
-		"FormatError",
-		"IMAGE_DIRECTORY_ENTRY_ARCHITECTURE",
-		"IMAGE_DIRECTORY_ENTRY_BASERELOC",
-		"IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT",
-		"IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR",
-		"IMAGE_DIRECTORY_ENTRY_DEBUG",
-		"IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT",
-		"IMAGE_DIRECTORY_ENTRY_EXCEPTION",
-		"IMAGE_DIRECTORY_ENTRY_EXPORT",
-		"IMAGE_DIRECTORY_ENTRY_GLOBALPTR",
-		"IMAGE_DIRECTORY_ENTRY_IAT",
-		"IMAGE_DIRECTORY_ENTRY_IMPORT",
-		"IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG",
-		"IMAGE_DIRECTORY_ENTRY_RESOURCE",
-		"IMAGE_DIRECTORY_ENTRY_SECURITY",
-		"IMAGE_DIRECTORY_ENTRY_TLS",
-		"IMAGE_DLLCHARACTERISTICS_APPCONTAINER",
-		"IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE",
-		"IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY",
-		"IMAGE_DLLCHARACTERISTICS_GUARD_CF",
-		"IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA",
-		"IMAGE_DLLCHARACTERISTICS_NO_BIND",
-		"IMAGE_DLLCHARACTERISTICS_NO_ISOLATION",
-		"IMAGE_DLLCHARACTERISTICS_NO_SEH",
-		"IMAGE_DLLCHARACTERISTICS_NX_COMPAT",
-		"IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE",
-		"IMAGE_DLLCHARACTERISTICS_WDM_DRIVER",
-		"IMAGE_FILE_32BIT_MACHINE",
-		"IMAGE_FILE_AGGRESIVE_WS_TRIM",
-		"IMAGE_FILE_BYTES_REVERSED_HI",
-		"IMAGE_FILE_BYTES_REVERSED_LO",
-		"IMAGE_FILE_DEBUG_STRIPPED",
-		"IMAGE_FILE_DLL",
-		"IMAGE_FILE_EXECUTABLE_IMAGE",
-		"IMAGE_FILE_LARGE_ADDRESS_AWARE",
-		"IMAGE_FILE_LINE_NUMS_STRIPPED",
-		"IMAGE_FILE_LOCAL_SYMS_STRIPPED",
-		"IMAGE_FILE_MACHINE_AM33",
-		"IMAGE_FILE_MACHINE_AMD64",
-		"IMAGE_FILE_MACHINE_ARM",
-		"IMAGE_FILE_MACHINE_ARM64",
-		"IMAGE_FILE_MACHINE_ARMNT",
-		"IMAGE_FILE_MACHINE_EBC",
-		"IMAGE_FILE_MACHINE_I386",
-		"IMAGE_FILE_MACHINE_IA64",
-		"IMAGE_FILE_MACHINE_M32R",
-		"IMAGE_FILE_MACHINE_MIPS16",
-		"IMAGE_FILE_MACHINE_MIPSFPU",
-		"IMAGE_FILE_MACHINE_MIPSFPU16",
-		"IMAGE_FILE_MACHINE_POWERPC",
-		"IMAGE_FILE_MACHINE_POWERPCFP",
-		"IMAGE_FILE_MACHINE_R4000",
-		"IMAGE_FILE_MACHINE_SH3",
-		"IMAGE_FILE_MACHINE_SH3DSP",
-		"IMAGE_FILE_MACHINE_SH4",
-		"IMAGE_FILE_MACHINE_SH5",
-		"IMAGE_FILE_MACHINE_THUMB",
-		"IMAGE_FILE_MACHINE_UNKNOWN",
-		"IMAGE_FILE_MACHINE_WCEMIPSV2",
-		"IMAGE_FILE_NET_RUN_FROM_SWAP",
-		"IMAGE_FILE_RELOCS_STRIPPED",
-		"IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP",
-		"IMAGE_FILE_SYSTEM",
-		"IMAGE_FILE_UP_SYSTEM_ONLY",
-		"IMAGE_SUBSYSTEM_EFI_APPLICATION",
-		"IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER",
-		"IMAGE_SUBSYSTEM_EFI_ROM",
-		"IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER",
-		"IMAGE_SUBSYSTEM_NATIVE",
-		"IMAGE_SUBSYSTEM_NATIVE_WINDOWS",
-		"IMAGE_SUBSYSTEM_OS2_CUI",
-		"IMAGE_SUBSYSTEM_POSIX_CUI",
-		"IMAGE_SUBSYSTEM_UNKNOWN",
-		"IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION",
-		"IMAGE_SUBSYSTEM_WINDOWS_CE_GUI",
-		"IMAGE_SUBSYSTEM_WINDOWS_CUI",
-		"IMAGE_SUBSYSTEM_WINDOWS_GUI",
-		"IMAGE_SUBSYSTEM_XBOX",
-		"ImportDirectory",
-		"NewFile",
-		"Open",
-		"OptionalHeader32",
-		"OptionalHeader64",
-		"Reloc",
-		"Section",
-		"SectionHeader",
-		"SectionHeader32",
-		"StringTable",
-		"Symbol",
-	},
-	"debug/plan9obj": []string{
-		"File",
-		"FileHeader",
-		"Magic386",
-		"Magic64",
-		"MagicAMD64",
-		"MagicARM",
-		"NewFile",
-		"Open",
-		"Section",
-		"SectionHeader",
-		"Sym",
-	},
-	"embed": []string{
-		"FS",
-	},
-	"encoding": []string{
-		"BinaryMarshaler",
-		"BinaryUnmarshaler",
-		"TextMarshaler",
-		"TextUnmarshaler",
-	},
-	"encoding/ascii85": []string{
-		"CorruptInputError",
-		"Decode",
-		"Encode",
-		"MaxEncodedLen",
-		"NewDecoder",
-		"NewEncoder",
-	},
-	"encoding/asn1": []string{
-		"BitString",
-		"ClassApplication",
-		"ClassContextSpecific",
-		"ClassPrivate",
-		"ClassUniversal",
-		"Enumerated",
-		"Flag",
-		"Marshal",
-		"MarshalWithParams",
-		"NullBytes",
-		"NullRawValue",
-		"ObjectIdentifier",
-		"RawContent",
-		"RawValue",
-		"StructuralError",
-		"SyntaxError",
-		"TagBMPString",
-		"TagBitString",
-		"TagBoolean",
-		"TagEnum",
-		"TagGeneralString",
-		"TagGeneralizedTime",
-		"TagIA5String",
-		"TagInteger",
-		"TagNull",
-		"TagNumericString",
-		"TagOID",
-		"TagOctetString",
-		"TagPrintableString",
-		"TagSequence",
-		"TagSet",
-		"TagT61String",
-		"TagUTCTime",
-		"TagUTF8String",
-		"Unmarshal",
-		"UnmarshalWithParams",
-	},
-	"encoding/base32": []string{
-		"CorruptInputError",
-		"Encoding",
-		"HexEncoding",
-		"NewDecoder",
-		"NewEncoder",
-		"NewEncoding",
-		"NoPadding",
-		"StdEncoding",
-		"StdPadding",
-	},
-	"encoding/base64": []string{
-		"CorruptInputError",
-		"Encoding",
-		"NewDecoder",
-		"NewEncoder",
-		"NewEncoding",
-		"NoPadding",
-		"RawStdEncoding",
-		"RawURLEncoding",
-		"StdEncoding",
-		"StdPadding",
-		"URLEncoding",
-	},
-	"encoding/binary": []string{
-		"BigEndian",
-		"ByteOrder",
-		"LittleEndian",
-		"MaxVarintLen16",
-		"MaxVarintLen32",
-		"MaxVarintLen64",
-		"PutUvarint",
-		"PutVarint",
-		"Read",
-		"ReadUvarint",
-		"ReadVarint",
-		"Size",
-		"Uvarint",
-		"Varint",
-		"Write",
-	},
-	"encoding/csv": []string{
-		"ErrBareQuote",
-		"ErrFieldCount",
-		"ErrQuote",
-		"ErrTrailingComma",
-		"NewReader",
-		"NewWriter",
-		"ParseError",
-		"Reader",
-		"Writer",
-	},
-	"encoding/gob": []string{
-		"CommonType",
-		"Decoder",
-		"Encoder",
-		"GobDecoder",
-		"GobEncoder",
-		"NewDecoder",
-		"NewEncoder",
-		"Register",
-		"RegisterName",
-	},
-	"encoding/hex": []string{
-		"Decode",
-		"DecodeString",
-		"DecodedLen",
-		"Dump",
-		"Dumper",
-		"Encode",
-		"EncodeToString",
-		"EncodedLen",
-		"ErrLength",
-		"InvalidByteError",
-		"NewDecoder",
-		"NewEncoder",
-	},
-	"encoding/json": []string{
-		"Compact",
-		"Decoder",
-		"Delim",
-		"Encoder",
-		"HTMLEscape",
-		"Indent",
-		"InvalidUTF8Error",
-		"InvalidUnmarshalError",
-		"Marshal",
-		"MarshalIndent",
-		"Marshaler",
-		"MarshalerError",
-		"NewDecoder",
-		"NewEncoder",
-		"Number",
-		"RawMessage",
-		"SyntaxError",
-		"Token",
-		"Unmarshal",
-		"UnmarshalFieldError",
-		"UnmarshalTypeError",
-		"Unmarshaler",
-		"UnsupportedTypeError",
-		"UnsupportedValueError",
-		"Valid",
-	},
-	"encoding/pem": []string{
-		"Block",
-		"Decode",
-		"Encode",
-		"EncodeToMemory",
-	},
-	"encoding/xml": []string{
-		"Attr",
-		"CharData",
-		"Comment",
-		"CopyToken",
-		"Decoder",
-		"Directive",
-		"Encoder",
-		"EndElement",
-		"Escape",
-		"EscapeText",
-		"HTMLAutoClose",
-		"HTMLEntity",
-		"Header",
-		"Marshal",
-		"MarshalIndent",
-		"Marshaler",
-		"MarshalerAttr",
-		"Name",
-		"NewDecoder",
-		"NewEncoder",
-		"NewTokenDecoder",
-		"ProcInst",
-		"StartElement",
-		"SyntaxError",
-		"TagPathError",
-		"Token",
-		"TokenReader",
-		"Unmarshal",
-		"UnmarshalError",
-		"Unmarshaler",
-		"UnmarshalerAttr",
-		"UnsupportedTypeError",
-	},
-	"errors": []string{
-		"As",
-		"Is",
-		"New",
-		"Unwrap",
-	},
-	"expvar": []string{
-		"Do",
-		"Float",
-		"Func",
-		"Get",
-		"Handler",
-		"Int",
-		"KeyValue",
-		"Map",
-		"NewFloat",
-		"NewInt",
-		"NewMap",
-		"NewString",
-		"Publish",
-		"String",
-		"Var",
-	},
-	"flag": []string{
-		"Arg",
-		"Args",
-		"Bool",
-		"BoolVar",
-		"CommandLine",
-		"ContinueOnError",
-		"Duration",
-		"DurationVar",
-		"ErrHelp",
-		"ErrorHandling",
-		"ExitOnError",
-		"Flag",
-		"FlagSet",
-		"Float64",
-		"Float64Var",
-		"Func",
-		"Getter",
-		"Int",
-		"Int64",
-		"Int64Var",
-		"IntVar",
-		"Lookup",
-		"NArg",
-		"NFlag",
-		"NewFlagSet",
-		"PanicOnError",
-		"Parse",
-		"Parsed",
-		"PrintDefaults",
-		"Set",
-		"String",
-		"StringVar",
-		"Uint",
-		"Uint64",
-		"Uint64Var",
-		"UintVar",
-		"UnquoteUsage",
-		"Usage",
-		"Value",
-		"Var",
-		"Visit",
-		"VisitAll",
-	},
-	"fmt": []string{
-		"Errorf",
-		"Formatter",
-		"Fprint",
-		"Fprintf",
-		"Fprintln",
-		"Fscan",
-		"Fscanf",
-		"Fscanln",
-		"GoStringer",
-		"Print",
-		"Printf",
-		"Println",
-		"Scan",
-		"ScanState",
-		"Scanf",
-		"Scanln",
-		"Scanner",
-		"Sprint",
-		"Sprintf",
-		"Sprintln",
-		"Sscan",
-		"Sscanf",
-		"Sscanln",
-		"State",
-		"Stringer",
-	},
-	"go/ast": []string{
-		"ArrayType",
-		"AssignStmt",
-		"Bad",
-		"BadDecl",
-		"BadExpr",
-		"BadStmt",
-		"BasicLit",
-		"BinaryExpr",
-		"BlockStmt",
-		"BranchStmt",
-		"CallExpr",
-		"CaseClause",
-		"ChanDir",
-		"ChanType",
-		"CommClause",
-		"Comment",
-		"CommentGroup",
-		"CommentMap",
-		"CompositeLit",
-		"Con",
-		"Decl",
-		"DeclStmt",
-		"DeferStmt",
-		"Ellipsis",
-		"EmptyStmt",
-		"Expr",
-		"ExprStmt",
-		"Field",
-		"FieldFilter",
-		"FieldList",
-		"File",
-		"FileExports",
-		"Filter",
-		"FilterDecl",
-		"FilterFile",
-		"FilterFuncDuplicates",
-		"FilterImportDuplicates",
-		"FilterPackage",
-		"FilterUnassociatedComments",
-		"ForStmt",
-		"Fprint",
-		"Fun",
-		"FuncDecl",
-		"FuncLit",
-		"FuncType",
-		"GenDecl",
-		"GoStmt",
-		"Ident",
-		"IfStmt",
-		"ImportSpec",
-		"Importer",
-		"IncDecStmt",
-		"IndexExpr",
-		"Inspect",
-		"InterfaceType",
-		"IsExported",
-		"KeyValueExpr",
-		"LabeledStmt",
-		"Lbl",
-		"MapType",
-		"MergeMode",
-		"MergePackageFiles",
-		"NewCommentMap",
-		"NewIdent",
-		"NewObj",
-		"NewPackage",
-		"NewScope",
-		"Node",
-		"NotNilFilter",
-		"ObjKind",
-		"Object",
-		"Package",
-		"PackageExports",
-		"ParenExpr",
-		"Pkg",
-		"Print",
-		"RECV",
-		"RangeStmt",
-		"ReturnStmt",
-		"SEND",
-		"Scope",
-		"SelectStmt",
-		"SelectorExpr",
-		"SendStmt",
-		"SliceExpr",
-		"SortImports",
-		"Spec",
-		"StarExpr",
-		"Stmt",
-		"StructType",
-		"SwitchStmt",
-		"Typ",
-		"TypeAssertExpr",
-		"TypeSpec",
-		"TypeSwitchStmt",
-		"UnaryExpr",
-		"ValueSpec",
-		"Var",
-		"Visitor",
-		"Walk",
-	},
-	"go/build": []string{
-		"AllowBinary",
-		"ArchChar",
-		"Context",
-		"Default",
-		"FindOnly",
-		"IgnoreVendor",
-		"Import",
-		"ImportComment",
-		"ImportDir",
-		"ImportMode",
-		"IsLocalImport",
-		"MultiplePackageError",
-		"NoGoError",
-		"Package",
-		"ToolDir",
-	},
-	"go/build/constraint": []string{
-		"AndExpr",
-		"Expr",
-		"IsGoBuild",
-		"IsPlusBuild",
-		"NotExpr",
-		"OrExpr",
-		"Parse",
-		"PlusBuildLines",
-		"SyntaxError",
-		"TagExpr",
-	},
-	"go/constant": []string{
-		"BinaryOp",
-		"BitLen",
-		"Bool",
-		"BoolVal",
-		"Bytes",
-		"Compare",
-		"Complex",
-		"Denom",
-		"Float",
-		"Float32Val",
-		"Float64Val",
-		"Imag",
-		"Int",
-		"Int64Val",
-		"Kind",
-		"Make",
-		"MakeBool",
-		"MakeFloat64",
-		"MakeFromBytes",
-		"MakeFromLiteral",
-		"MakeImag",
-		"MakeInt64",
-		"MakeString",
-		"MakeUint64",
-		"MakeUnknown",
-		"Num",
-		"Real",
-		"Shift",
-		"Sign",
-		"String",
-		"StringVal",
-		"ToComplex",
-		"ToFloat",
-		"ToInt",
-		"Uint64Val",
-		"UnaryOp",
-		"Unknown",
-		"Val",
-		"Value",
-	},
-	"go/doc": []string{
-		"AllDecls",
-		"AllMethods",
-		"Example",
-		"Examples",
-		"Filter",
-		"Func",
-		"IllegalPrefixes",
-		"IsPredeclared",
-		"Mode",
-		"New",
-		"NewFromFiles",
-		"Note",
-		"Package",
-		"PreserveAST",
-		"Synopsis",
-		"ToHTML",
-		"ToText",
-		"Type",
-		"Value",
-	},
-	"go/format": []string{
-		"Node",
-		"Source",
-	},
-	"go/importer": []string{
-		"Default",
-		"For",
-		"ForCompiler",
-		"Lookup",
-	},
-	"go/parser": []string{
-		"AllErrors",
-		"DeclarationErrors",
-		"ImportsOnly",
-		"Mode",
-		"PackageClauseOnly",
-		"ParseComments",
-		"ParseDir",
-		"ParseExpr",
-		"ParseExprFrom",
-		"ParseFile",
-		"SpuriousErrors",
-		"Trace",
-	},
-	"go/printer": []string{
-		"CommentedNode",
-		"Config",
-		"Fprint",
-		"Mode",
-		"RawFormat",
-		"SourcePos",
-		"TabIndent",
-		"UseSpaces",
-	},
-	"go/scanner": []string{
-		"Error",
-		"ErrorHandler",
-		"ErrorList",
-		"Mode",
-		"PrintError",
-		"ScanComments",
-		"Scanner",
-	},
-	"go/token": []string{
-		"ADD",
-		"ADD_ASSIGN",
-		"AND",
-		"AND_ASSIGN",
-		"AND_NOT",
-		"AND_NOT_ASSIGN",
-		"ARROW",
-		"ASSIGN",
-		"BREAK",
-		"CASE",
-		"CHAN",
-		"CHAR",
-		"COLON",
-		"COMMA",
-		"COMMENT",
-		"CONST",
-		"CONTINUE",
-		"DEC",
-		"DEFAULT",
-		"DEFER",
-		"DEFINE",
-		"ELLIPSIS",
-		"ELSE",
-		"EOF",
-		"EQL",
-		"FALLTHROUGH",
-		"FLOAT",
-		"FOR",
-		"FUNC",
-		"File",
-		"FileSet",
-		"GEQ",
-		"GO",
-		"GOTO",
-		"GTR",
-		"HighestPrec",
-		"IDENT",
-		"IF",
-		"ILLEGAL",
-		"IMAG",
-		"IMPORT",
-		"INC",
-		"INT",
-		"INTERFACE",
-		"IsExported",
-		"IsIdentifier",
-		"IsKeyword",
-		"LAND",
-		"LBRACE",
-		"LBRACK",
-		"LEQ",
-		"LOR",
-		"LPAREN",
-		"LSS",
-		"Lookup",
-		"LowestPrec",
-		"MAP",
-		"MUL",
-		"MUL_ASSIGN",
-		"NEQ",
-		"NOT",
-		"NewFileSet",
-		"NoPos",
-		"OR",
-		"OR_ASSIGN",
-		"PACKAGE",
-		"PERIOD",
-		"Pos",
-		"Position",
-		"QUO",
-		"QUO_ASSIGN",
-		"RANGE",
-		"RBRACE",
-		"RBRACK",
-		"REM",
-		"REM_ASSIGN",
-		"RETURN",
-		"RPAREN",
-		"SELECT",
-		"SEMICOLON",
-		"SHL",
-		"SHL_ASSIGN",
-		"SHR",
-		"SHR_ASSIGN",
-		"STRING",
-		"STRUCT",
-		"SUB",
-		"SUB_ASSIGN",
-		"SWITCH",
-		"TYPE",
-		"Token",
-		"UnaryPrec",
-		"VAR",
-		"XOR",
-		"XOR_ASSIGN",
-	},
-	"go/types": []string{
-		"Array",
-		"AssertableTo",
-		"AssignableTo",
-		"Basic",
-		"BasicInfo",
-		"BasicKind",
-		"Bool",
-		"Builtin",
-		"Byte",
-		"Chan",
-		"ChanDir",
-		"CheckExpr",
-		"Checker",
-		"Comparable",
-		"Complex128",
-		"Complex64",
-		"Config",
-		"Const",
-		"ConvertibleTo",
-		"DefPredeclaredTestFuncs",
-		"Default",
-		"Error",
-		"Eval",
-		"ExprString",
-		"FieldVal",
-		"Float32",
-		"Float64",
-		"Func",
-		"Id",
-		"Identical",
-		"IdenticalIgnoreTags",
-		"Implements",
-		"ImportMode",
-		"Importer",
-		"ImporterFrom",
-		"Info",
-		"Initializer",
-		"Int",
-		"Int16",
-		"Int32",
-		"Int64",
-		"Int8",
-		"Interface",
-		"Invalid",
-		"IsBoolean",
-		"IsComplex",
-		"IsConstType",
-		"IsFloat",
-		"IsInteger",
-		"IsInterface",
-		"IsNumeric",
-		"IsOrdered",
-		"IsString",
-		"IsUnsigned",
-		"IsUntyped",
-		"Label",
-		"LookupFieldOrMethod",
-		"Map",
-		"MethodExpr",
-		"MethodSet",
-		"MethodVal",
-		"MissingMethod",
-		"Named",
-		"NewArray",
-		"NewChan",
-		"NewChecker",
-		"NewConst",
-		"NewField",
-		"NewFunc",
-		"NewInterface",
-		"NewInterfaceType",
-		"NewLabel",
-		"NewMap",
-		"NewMethodSet",
-		"NewNamed",
-		"NewPackage",
-		"NewParam",
-		"NewPkgName",
-		"NewPointer",
-		"NewScope",
-		"NewSignature",
-		"NewSlice",
-		"NewStruct",
-		"NewTuple",
-		"NewTypeName",
-		"NewVar",
-		"Nil",
-		"Object",
-		"ObjectString",
-		"Package",
-		"PkgName",
-		"Pointer",
-		"Qualifier",
-		"RecvOnly",
-		"RelativeTo",
-		"Rune",
-		"Scope",
-		"Selection",
-		"SelectionKind",
-		"SelectionString",
-		"SendOnly",
-		"SendRecv",
-		"Signature",
-		"Sizes",
-		"SizesFor",
-		"Slice",
-		"StdSizes",
-		"String",
-		"Struct",
-		"Tuple",
-		"Typ",
-		"Type",
-		"TypeAndValue",
-		"TypeName",
-		"TypeString",
-		"Uint",
-		"Uint16",
-		"Uint32",
-		"Uint64",
-		"Uint8",
-		"Uintptr",
-		"Universe",
-		"Unsafe",
-		"UnsafePointer",
-		"UntypedBool",
-		"UntypedComplex",
-		"UntypedFloat",
-		"UntypedInt",
-		"UntypedNil",
-		"UntypedRune",
-		"UntypedString",
-		"Var",
-		"WriteExpr",
-		"WriteSignature",
-		"WriteType",
-	},
-	"hash": []string{
-		"Hash",
-		"Hash32",
-		"Hash64",
-	},
-	"hash/adler32": []string{
-		"Checksum",
-		"New",
-		"Size",
-	},
-	"hash/crc32": []string{
-		"Castagnoli",
-		"Checksum",
-		"ChecksumIEEE",
-		"IEEE",
-		"IEEETable",
-		"Koopman",
-		"MakeTable",
-		"New",
-		"NewIEEE",
-		"Size",
-		"Table",
-		"Update",
-	},
-	"hash/crc64": []string{
-		"Checksum",
-		"ECMA",
-		"ISO",
-		"MakeTable",
-		"New",
-		"Size",
-		"Table",
-		"Update",
-	},
-	"hash/fnv": []string{
-		"New128",
-		"New128a",
-		"New32",
-		"New32a",
-		"New64",
-		"New64a",
-	},
-	"hash/maphash": []string{
-		"Hash",
-		"MakeSeed",
-		"Seed",
-	},
-	"html": []string{
-		"EscapeString",
-		"UnescapeString",
-	},
-	"html/template": []string{
-		"CSS",
-		"ErrAmbigContext",
-		"ErrBadHTML",
-		"ErrBranchEnd",
-		"ErrEndContext",
-		"ErrNoSuchTemplate",
-		"ErrOutputContext",
-		"ErrPartialCharset",
-		"ErrPartialEscape",
-		"ErrPredefinedEscaper",
-		"ErrRangeLoopReentry",
-		"ErrSlashAmbig",
-		"Error",
-		"ErrorCode",
-		"FuncMap",
-		"HTML",
-		"HTMLAttr",
-		"HTMLEscape",
-		"HTMLEscapeString",
-		"HTMLEscaper",
-		"IsTrue",
-		"JS",
-		"JSEscape",
-		"JSEscapeString",
-		"JSEscaper",
-		"JSStr",
-		"Must",
-		"New",
-		"OK",
-		"ParseFS",
-		"ParseFiles",
-		"ParseGlob",
-		"Srcset",
-		"Template",
-		"URL",
-		"URLQueryEscaper",
-	},
-	"image": []string{
-		"Alpha",
-		"Alpha16",
-		"Black",
-		"CMYK",
-		"Config",
-		"Decode",
-		"DecodeConfig",
-		"ErrFormat",
-		"Gray",
-		"Gray16",
-		"Image",
-		"NRGBA",
-		"NRGBA64",
-		"NYCbCrA",
-		"NewAlpha",
-		"NewAlpha16",
-		"NewCMYK",
-		"NewGray",
-		"NewGray16",
-		"NewNRGBA",
-		"NewNRGBA64",
-		"NewNYCbCrA",
-		"NewPaletted",
-		"NewRGBA",
-		"NewRGBA64",
-		"NewUniform",
-		"NewYCbCr",
-		"Opaque",
-		"Paletted",
-		"PalettedImage",
-		"Point",
-		"Pt",
-		"RGBA",
-		"RGBA64",
-		"Rect",
-		"Rectangle",
-		"RegisterFormat",
-		"Transparent",
-		"Uniform",
-		"White",
-		"YCbCr",
-		"YCbCrSubsampleRatio",
-		"YCbCrSubsampleRatio410",
-		"YCbCrSubsampleRatio411",
-		"YCbCrSubsampleRatio420",
-		"YCbCrSubsampleRatio422",
-		"YCbCrSubsampleRatio440",
-		"YCbCrSubsampleRatio444",
-		"ZP",
-		"ZR",
-	},
-	"image/color": []string{
-		"Alpha",
-		"Alpha16",
-		"Alpha16Model",
-		"AlphaModel",
-		"Black",
-		"CMYK",
-		"CMYKModel",
-		"CMYKToRGB",
-		"Color",
-		"Gray",
-		"Gray16",
-		"Gray16Model",
-		"GrayModel",
-		"Model",
-		"ModelFunc",
-		"NRGBA",
-		"NRGBA64",
-		"NRGBA64Model",
-		"NRGBAModel",
-		"NYCbCrA",
-		"NYCbCrAModel",
-		"Opaque",
-		"Palette",
-		"RGBA",
-		"RGBA64",
-		"RGBA64Model",
-		"RGBAModel",
-		"RGBToCMYK",
-		"RGBToYCbCr",
-		"Transparent",
-		"White",
-		"YCbCr",
-		"YCbCrModel",
-		"YCbCrToRGB",
-	},
-	"image/color/palette": []string{
-		"Plan9",
-		"WebSafe",
-	},
-	"image/draw": []string{
-		"Draw",
-		"DrawMask",
-		"Drawer",
-		"FloydSteinberg",
-		"Image",
-		"Op",
-		"Over",
-		"Quantizer",
-		"Src",
-	},
-	"image/gif": []string{
-		"Decode",
-		"DecodeAll",
-		"DecodeConfig",
-		"DisposalBackground",
-		"DisposalNone",
-		"DisposalPrevious",
-		"Encode",
-		"EncodeAll",
-		"GIF",
-		"Options",
-	},
-	"image/jpeg": []string{
-		"Decode",
-		"DecodeConfig",
-		"DefaultQuality",
-		"Encode",
-		"FormatError",
-		"Options",
-		"Reader",
-		"UnsupportedError",
-	},
-	"image/png": []string{
-		"BestCompression",
-		"BestSpeed",
-		"CompressionLevel",
-		"Decode",
-		"DecodeConfig",
-		"DefaultCompression",
-		"Encode",
-		"Encoder",
-		"EncoderBuffer",
-		"EncoderBufferPool",
-		"FormatError",
-		"NoCompression",
-		"UnsupportedError",
-	},
-	"index/suffixarray": []string{
-		"Index",
-		"New",
-	},
-	"io": []string{
-		"ByteReader",
-		"ByteScanner",
-		"ByteWriter",
-		"Closer",
-		"Copy",
-		"CopyBuffer",
-		"CopyN",
-		"Discard",
-		"EOF",
-		"ErrClosedPipe",
-		"ErrNoProgress",
-		"ErrShortBuffer",
-		"ErrShortWrite",
-		"ErrUnexpectedEOF",
-		"LimitReader",
-		"LimitedReader",
-		"MultiReader",
-		"MultiWriter",
-		"NewSectionReader",
-		"NopCloser",
-		"Pipe",
-		"PipeReader",
-		"PipeWriter",
-		"ReadAll",
-		"ReadAtLeast",
-		"ReadCloser",
-		"ReadFull",
-		"ReadSeekCloser",
-		"ReadSeeker",
-		"ReadWriteCloser",
-		"ReadWriteSeeker",
-		"ReadWriter",
-		"Reader",
-		"ReaderAt",
-		"ReaderFrom",
-		"RuneReader",
-		"RuneScanner",
-		"SectionReader",
-		"SeekCurrent",
-		"SeekEnd",
-		"SeekStart",
-		"Seeker",
-		"StringWriter",
-		"TeeReader",
-		"WriteCloser",
-		"WriteSeeker",
-		"WriteString",
-		"Writer",
-		"WriterAt",
-		"WriterTo",
-	},
-	"io/fs": []string{
-		"DirEntry",
-		"ErrClosed",
-		"ErrExist",
-		"ErrInvalid",
-		"ErrNotExist",
-		"ErrPermission",
-		"FS",
-		"File",
-		"FileInfo",
-		"FileMode",
-		"Glob",
-		"GlobFS",
-		"ModeAppend",
-		"ModeCharDevice",
-		"ModeDevice",
-		"ModeDir",
-		"ModeExclusive",
-		"ModeIrregular",
-		"ModeNamedPipe",
-		"ModePerm",
-		"ModeSetgid",
-		"ModeSetuid",
-		"ModeSocket",
-		"ModeSticky",
-		"ModeSymlink",
-		"ModeTemporary",
-		"ModeType",
-		"PathError",
-		"ReadDir",
-		"ReadDirFS",
-		"ReadDirFile",
-		"ReadFile",
-		"ReadFileFS",
-		"SkipDir",
-		"Stat",
-		"StatFS",
-		"Sub",
-		"SubFS",
-		"ValidPath",
-		"WalkDir",
-		"WalkDirFunc",
-	},
-	"io/ioutil": []string{
-		"Discard",
-		"NopCloser",
-		"ReadAll",
-		"ReadDir",
-		"ReadFile",
-		"TempDir",
-		"TempFile",
-		"WriteFile",
-	},
-	"log": []string{
-		"Default",
-		"Fatal",
-		"Fatalf",
-		"Fatalln",
-		"Flags",
-		"LUTC",
-		"Ldate",
-		"Llongfile",
-		"Lmicroseconds",
-		"Lmsgprefix",
-		"Logger",
-		"Lshortfile",
-		"LstdFlags",
-		"Ltime",
-		"New",
-		"Output",
-		"Panic",
-		"Panicf",
-		"Panicln",
-		"Prefix",
-		"Print",
-		"Printf",
-		"Println",
-		"SetFlags",
-		"SetOutput",
-		"SetPrefix",
-		"Writer",
-	},
-	"log/syslog": []string{
-		"Dial",
-		"LOG_ALERT",
-		"LOG_AUTH",
-		"LOG_AUTHPRIV",
-		"LOG_CRIT",
-		"LOG_CRON",
-		"LOG_DAEMON",
-		"LOG_DEBUG",
-		"LOG_EMERG",
-		"LOG_ERR",
-		"LOG_FTP",
-		"LOG_INFO",
-		"LOG_KERN",
-		"LOG_LOCAL0",
-		"LOG_LOCAL1",
-		"LOG_LOCAL2",
-		"LOG_LOCAL3",
-		"LOG_LOCAL4",
-		"LOG_LOCAL5",
-		"LOG_LOCAL6",
-		"LOG_LOCAL7",
-		"LOG_LPR",
-		"LOG_MAIL",
-		"LOG_NEWS",
-		"LOG_NOTICE",
-		"LOG_SYSLOG",
-		"LOG_USER",
-		"LOG_UUCP",
-		"LOG_WARNING",
-		"New",
-		"NewLogger",
-		"Priority",
-		"Writer",
-	},
-	"math": []string{
-		"Abs",
-		"Acos",
-		"Acosh",
-		"Asin",
-		"Asinh",
-		"Atan",
-		"Atan2",
-		"Atanh",
-		"Cbrt",
-		"Ceil",
-		"Copysign",
-		"Cos",
-		"Cosh",
-		"Dim",
-		"E",
-		"Erf",
-		"Erfc",
-		"Erfcinv",
-		"Erfinv",
-		"Exp",
-		"Exp2",
-		"Expm1",
-		"FMA",
-		"Float32bits",
-		"Float32frombits",
-		"Float64bits",
-		"Float64frombits",
-		"Floor",
-		"Frexp",
-		"Gamma",
-		"Hypot",
-		"Ilogb",
-		"Inf",
-		"IsInf",
-		"IsNaN",
-		"J0",
-		"J1",
-		"Jn",
-		"Ldexp",
-		"Lgamma",
-		"Ln10",
-		"Ln2",
-		"Log",
-		"Log10",
-		"Log10E",
-		"Log1p",
-		"Log2",
-		"Log2E",
-		"Logb",
-		"Max",
-		"MaxFloat32",
-		"MaxFloat64",
-		"MaxInt16",
-		"MaxInt32",
-		"MaxInt64",
-		"MaxInt8",
-		"MaxUint16",
-		"MaxUint32",
-		"MaxUint64",
-		"MaxUint8",
-		"Min",
-		"MinInt16",
-		"MinInt32",
-		"MinInt64",
-		"MinInt8",
-		"Mod",
-		"Modf",
-		"NaN",
-		"Nextafter",
-		"Nextafter32",
-		"Phi",
-		"Pi",
-		"Pow",
-		"Pow10",
-		"Remainder",
-		"Round",
-		"RoundToEven",
-		"Signbit",
-		"Sin",
-		"Sincos",
-		"Sinh",
-		"SmallestNonzeroFloat32",
-		"SmallestNonzeroFloat64",
-		"Sqrt",
-		"Sqrt2",
-		"SqrtE",
-		"SqrtPhi",
-		"SqrtPi",
-		"Tan",
-		"Tanh",
-		"Trunc",
-		"Y0",
-		"Y1",
-		"Yn",
-	},
-	"math/big": []string{
-		"Above",
-		"Accuracy",
-		"AwayFromZero",
-		"Below",
-		"ErrNaN",
-		"Exact",
-		"Float",
-		"Int",
-		"Jacobi",
-		"MaxBase",
-		"MaxExp",
-		"MaxPrec",
-		"MinExp",
-		"NewFloat",
-		"NewInt",
-		"NewRat",
-		"ParseFloat",
-		"Rat",
-		"RoundingMode",
-		"ToNearestAway",
-		"ToNearestEven",
-		"ToNegativeInf",
-		"ToPositiveInf",
-		"ToZero",
-		"Word",
-	},
-	"math/bits": []string{
-		"Add",
-		"Add32",
-		"Add64",
-		"Div",
-		"Div32",
-		"Div64",
-		"LeadingZeros",
-		"LeadingZeros16",
-		"LeadingZeros32",
-		"LeadingZeros64",
-		"LeadingZeros8",
-		"Len",
-		"Len16",
-		"Len32",
-		"Len64",
-		"Len8",
-		"Mul",
-		"Mul32",
-		"Mul64",
-		"OnesCount",
-		"OnesCount16",
-		"OnesCount32",
-		"OnesCount64",
-		"OnesCount8",
-		"Rem",
-		"Rem32",
-		"Rem64",
-		"Reverse",
-		"Reverse16",
-		"Reverse32",
-		"Reverse64",
-		"Reverse8",
-		"ReverseBytes",
-		"ReverseBytes16",
-		"ReverseBytes32",
-		"ReverseBytes64",
-		"RotateLeft",
-		"RotateLeft16",
-		"RotateLeft32",
-		"RotateLeft64",
-		"RotateLeft8",
-		"Sub",
-		"Sub32",
-		"Sub64",
-		"TrailingZeros",
-		"TrailingZeros16",
-		"TrailingZeros32",
-		"TrailingZeros64",
-		"TrailingZeros8",
-		"UintSize",
-	},
-	"math/cmplx": []string{
-		"Abs",
-		"Acos",
-		"Acosh",
-		"Asin",
-		"Asinh",
-		"Atan",
-		"Atanh",
-		"Conj",
-		"Cos",
-		"Cosh",
-		"Cot",
-		"Exp",
-		"Inf",
-		"IsInf",
-		"IsNaN",
-		"Log",
-		"Log10",
-		"NaN",
-		"Phase",
-		"Polar",
-		"Pow",
-		"Rect",
-		"Sin",
-		"Sinh",
-		"Sqrt",
-		"Tan",
-		"Tanh",
-	},
-	"math/rand": []string{
-		"ExpFloat64",
-		"Float32",
-		"Float64",
-		"Int",
-		"Int31",
-		"Int31n",
-		"Int63",
-		"Int63n",
-		"Intn",
-		"New",
-		"NewSource",
-		"NewZipf",
-		"NormFloat64",
-		"Perm",
-		"Rand",
-		"Read",
-		"Seed",
-		"Shuffle",
-		"Source",
-		"Source64",
-		"Uint32",
-		"Uint64",
-		"Zipf",
-	},
-	"mime": []string{
-		"AddExtensionType",
-		"BEncoding",
-		"ErrInvalidMediaParameter",
-		"ExtensionsByType",
-		"FormatMediaType",
-		"ParseMediaType",
-		"QEncoding",
-		"TypeByExtension",
-		"WordDecoder",
-		"WordEncoder",
-	},
-	"mime/multipart": []string{
-		"ErrMessageTooLarge",
-		"File",
-		"FileHeader",
-		"Form",
-		"NewReader",
-		"NewWriter",
-		"Part",
-		"Reader",
-		"Writer",
-	},
-	"mime/quotedprintable": []string{
-		"NewReader",
-		"NewWriter",
-		"Reader",
-		"Writer",
-	},
-	"net": []string{
-		"Addr",
-		"AddrError",
-		"Buffers",
-		"CIDRMask",
-		"Conn",
-		"DNSConfigError",
-		"DNSError",
-		"DefaultResolver",
-		"Dial",
-		"DialIP",
-		"DialTCP",
-		"DialTimeout",
-		"DialUDP",
-		"DialUnix",
-		"Dialer",
-		"ErrClosed",
-		"ErrWriteToConnected",
-		"Error",
-		"FileConn",
-		"FileListener",
-		"FilePacketConn",
-		"FlagBroadcast",
-		"FlagLoopback",
-		"FlagMulticast",
-		"FlagPointToPoint",
-		"FlagUp",
-		"Flags",
-		"HardwareAddr",
-		"IP",
-		"IPAddr",
-		"IPConn",
-		"IPMask",
-		"IPNet",
-		"IPv4",
-		"IPv4Mask",
-		"IPv4allrouter",
-		"IPv4allsys",
-		"IPv4bcast",
-		"IPv4len",
-		"IPv4zero",
-		"IPv6interfacelocalallnodes",
-		"IPv6len",
-		"IPv6linklocalallnodes",
-		"IPv6linklocalallrouters",
-		"IPv6loopback",
-		"IPv6unspecified",
-		"IPv6zero",
-		"Interface",
-		"InterfaceAddrs",
-		"InterfaceByIndex",
-		"InterfaceByName",
-		"Interfaces",
-		"InvalidAddrError",
-		"JoinHostPort",
-		"Listen",
-		"ListenConfig",
-		"ListenIP",
-		"ListenMulticastUDP",
-		"ListenPacket",
-		"ListenTCP",
-		"ListenUDP",
-		"ListenUnix",
-		"ListenUnixgram",
-		"Listener",
-		"LookupAddr",
-		"LookupCNAME",
-		"LookupHost",
-		"LookupIP",
-		"LookupMX",
-		"LookupNS",
-		"LookupPort",
-		"LookupSRV",
-		"LookupTXT",
-		"MX",
-		"NS",
-		"OpError",
-		"PacketConn",
-		"ParseCIDR",
-		"ParseError",
-		"ParseIP",
-		"ParseMAC",
-		"Pipe",
-		"ResolveIPAddr",
-		"ResolveTCPAddr",
-		"ResolveUDPAddr",
-		"ResolveUnixAddr",
-		"Resolver",
-		"SRV",
-		"SplitHostPort",
-		"TCPAddr",
-		"TCPConn",
-		"TCPListener",
-		"UDPAddr",
-		"UDPConn",
-		"UnixAddr",
-		"UnixConn",
-		"UnixListener",
-		"UnknownNetworkError",
-	},
-	"net/http": []string{
-		"CanonicalHeaderKey",
-		"Client",
-		"CloseNotifier",
-		"ConnState",
-		"Cookie",
-		"CookieJar",
-		"DefaultClient",
-		"DefaultMaxHeaderBytes",
-		"DefaultMaxIdleConnsPerHost",
-		"DefaultServeMux",
-		"DefaultTransport",
-		"DetectContentType",
-		"Dir",
-		"ErrAbortHandler",
-		"ErrBodyNotAllowed",
-		"ErrBodyReadAfterClose",
-		"ErrContentLength",
-		"ErrHandlerTimeout",
-		"ErrHeaderTooLong",
-		"ErrHijacked",
-		"ErrLineTooLong",
-		"ErrMissingBoundary",
-		"ErrMissingContentLength",
-		"ErrMissingFile",
-		"ErrNoCookie",
-		"ErrNoLocation",
-		"ErrNotMultipart",
-		"ErrNotSupported",
-		"ErrServerClosed",
-		"ErrShortBody",
-		"ErrSkipAltProtocol",
-		"ErrUnexpectedTrailer",
-		"ErrUseLastResponse",
-		"ErrWriteAfterFlush",
-		"Error",
-		"FS",
-		"File",
-		"FileServer",
-		"FileSystem",
-		"Flusher",
-		"Get",
-		"Handle",
-		"HandleFunc",
-		"Handler",
-		"HandlerFunc",
-		"Head",
-		"Header",
-		"Hijacker",
-		"ListenAndServe",
-		"ListenAndServeTLS",
-		"LocalAddrContextKey",
-		"MaxBytesReader",
-		"MethodConnect",
-		"MethodDelete",
-		"MethodGet",
-		"MethodHead",
-		"MethodOptions",
-		"MethodPatch",
-		"MethodPost",
-		"MethodPut",
-		"MethodTrace",
-		"NewFileTransport",
-		"NewRequest",
-		"NewRequestWithContext",
-		"NewServeMux",
-		"NoBody",
-		"NotFound",
-		"NotFoundHandler",
-		"ParseHTTPVersion",
-		"ParseTime",
-		"Post",
-		"PostForm",
-		"ProtocolError",
-		"ProxyFromEnvironment",
-		"ProxyURL",
-		"PushOptions",
-		"Pusher",
-		"ReadRequest",
-		"ReadResponse",
-		"Redirect",
-		"RedirectHandler",
-		"Request",
-		"Response",
-		"ResponseWriter",
-		"RoundTripper",
-		"SameSite",
-		"SameSiteDefaultMode",
-		"SameSiteLaxMode",
-		"SameSiteNoneMode",
-		"SameSiteStrictMode",
-		"Serve",
-		"ServeContent",
-		"ServeFile",
-		"ServeMux",
-		"ServeTLS",
-		"Server",
-		"ServerContextKey",
-		"SetCookie",
-		"StateActive",
-		"StateClosed",
-		"StateHijacked",
-		"StateIdle",
-		"StateNew",
-		"StatusAccepted",
-		"StatusAlreadyReported",
-		"StatusBadGateway",
-		"StatusBadRequest",
-		"StatusConflict",
-		"StatusContinue",
-		"StatusCreated",
-		"StatusEarlyHints",
-		"StatusExpectationFailed",
-		"StatusFailedDependency",
-		"StatusForbidden",
-		"StatusFound",
-		"StatusGatewayTimeout",
-		"StatusGone",
-		"StatusHTTPVersionNotSupported",
-		"StatusIMUsed",
-		"StatusInsufficientStorage",
-		"StatusInternalServerError",
-		"StatusLengthRequired",
-		"StatusLocked",
-		"StatusLoopDetected",
-		"StatusMethodNotAllowed",
-		"StatusMisdirectedRequest",
-		"StatusMovedPermanently",
-		"StatusMultiStatus",
-		"StatusMultipleChoices",
-		"StatusNetworkAuthenticationRequired",
-		"StatusNoContent",
-		"StatusNonAuthoritativeInfo",
-		"StatusNotAcceptable",
-		"StatusNotExtended",
-		"StatusNotFound",
-		"StatusNotImplemented",
-		"StatusNotModified",
-		"StatusOK",
-		"StatusPartialContent",
-		"StatusPaymentRequired",
-		"StatusPermanentRedirect",
-		"StatusPreconditionFailed",
-		"StatusPreconditionRequired",
-		"StatusProcessing",
-		"StatusProxyAuthRequired",
-		"StatusRequestEntityTooLarge",
-		"StatusRequestHeaderFieldsTooLarge",
-		"StatusRequestTimeout",
-		"StatusRequestURITooLong",
-		"StatusRequestedRangeNotSatisfiable",
-		"StatusResetContent",
-		"StatusSeeOther",
-		"StatusServiceUnavailable",
-		"StatusSwitchingProtocols",
-		"StatusTeapot",
-		"StatusTemporaryRedirect",
-		"StatusText",
-		"StatusTooEarly",
-		"StatusTooManyRequests",
-		"StatusUnauthorized",
-		"StatusUnavailableForLegalReasons",
-		"StatusUnprocessableEntity",
-		"StatusUnsupportedMediaType",
-		"StatusUpgradeRequired",
-		"StatusUseProxy",
-		"StatusVariantAlsoNegotiates",
-		"StripPrefix",
-		"TimeFormat",
-		"TimeoutHandler",
-		"TrailerPrefix",
-		"Transport",
-	},
-	"net/http/cgi": []string{
-		"Handler",
-		"Request",
-		"RequestFromMap",
-		"Serve",
-	},
-	"net/http/cookiejar": []string{
-		"Jar",
-		"New",
-		"Options",
-		"PublicSuffixList",
-	},
-	"net/http/fcgi": []string{
-		"ErrConnClosed",
-		"ErrRequestAborted",
-		"ProcessEnv",
-		"Serve",
-	},
-	"net/http/httptest": []string{
-		"DefaultRemoteAddr",
-		"NewRecorder",
-		"NewRequest",
-		"NewServer",
-		"NewTLSServer",
-		"NewUnstartedServer",
-		"ResponseRecorder",
-		"Server",
-	},
-	"net/http/httptrace": []string{
-		"ClientTrace",
-		"ContextClientTrace",
-		"DNSDoneInfo",
-		"DNSStartInfo",
-		"GotConnInfo",
-		"WithClientTrace",
-		"WroteRequestInfo",
-	},
-	"net/http/httputil": []string{
-		"BufferPool",
-		"ClientConn",
-		"DumpRequest",
-		"DumpRequestOut",
-		"DumpResponse",
-		"ErrClosed",
-		"ErrLineTooLong",
-		"ErrPersistEOF",
-		"ErrPipeline",
-		"NewChunkedReader",
-		"NewChunkedWriter",
-		"NewClientConn",
-		"NewProxyClientConn",
-		"NewServerConn",
-		"NewSingleHostReverseProxy",
-		"ReverseProxy",
-		"ServerConn",
-	},
-	"net/http/pprof": []string{
-		"Cmdline",
-		"Handler",
-		"Index",
-		"Profile",
-		"Symbol",
-		"Trace",
-	},
-	"net/mail": []string{
-		"Address",
-		"AddressParser",
-		"ErrHeaderNotPresent",
-		"Header",
-		"Message",
-		"ParseAddress",
-		"ParseAddressList",
-		"ParseDate",
-		"ReadMessage",
-	},
-	"net/rpc": []string{
-		"Accept",
-		"Call",
-		"Client",
-		"ClientCodec",
-		"DefaultDebugPath",
-		"DefaultRPCPath",
-		"DefaultServer",
-		"Dial",
-		"DialHTTP",
-		"DialHTTPPath",
-		"ErrShutdown",
-		"HandleHTTP",
-		"NewClient",
-		"NewClientWithCodec",
-		"NewServer",
-		"Register",
-		"RegisterName",
-		"Request",
-		"Response",
-		"ServeCodec",
-		"ServeConn",
-		"ServeRequest",
-		"Server",
-		"ServerCodec",
-		"ServerError",
-	},
-	"net/rpc/jsonrpc": []string{
-		"Dial",
-		"NewClient",
-		"NewClientCodec",
-		"NewServerCodec",
-		"ServeConn",
-	},
-	"net/smtp": []string{
-		"Auth",
-		"CRAMMD5Auth",
-		"Client",
-		"Dial",
-		"NewClient",
-		"PlainAuth",
-		"SendMail",
-		"ServerInfo",
-	},
-	"net/textproto": []string{
-		"CanonicalMIMEHeaderKey",
-		"Conn",
-		"Dial",
-		"Error",
-		"MIMEHeader",
-		"NewConn",
-		"NewReader",
-		"NewWriter",
-		"Pipeline",
-		"ProtocolError",
-		"Reader",
-		"TrimBytes",
-		"TrimString",
-		"Writer",
-	},
-	"net/url": []string{
-		"Error",
-		"EscapeError",
-		"InvalidHostError",
-		"Parse",
-		"ParseQuery",
-		"ParseRequestURI",
-		"PathEscape",
-		"PathUnescape",
-		"QueryEscape",
-		"QueryUnescape",
-		"URL",
-		"User",
-		"UserPassword",
-		"Userinfo",
-		"Values",
-	},
-	"os": []string{
-		"Args",
-		"Chdir",
-		"Chmod",
-		"Chown",
-		"Chtimes",
-		"Clearenv",
-		"Create",
-		"CreateTemp",
-		"DevNull",
-		"DirEntry",
-		"DirFS",
-		"Environ",
-		"ErrClosed",
-		"ErrDeadlineExceeded",
-		"ErrExist",
-		"ErrInvalid",
-		"ErrNoDeadline",
-		"ErrNotExist",
-		"ErrPermission",
-		"ErrProcessDone",
-		"Executable",
-		"Exit",
-		"Expand",
-		"ExpandEnv",
-		"File",
-		"FileInfo",
-		"FileMode",
-		"FindProcess",
-		"Getegid",
-		"Getenv",
-		"Geteuid",
-		"Getgid",
-		"Getgroups",
-		"Getpagesize",
-		"Getpid",
-		"Getppid",
-		"Getuid",
-		"Getwd",
-		"Hostname",
-		"Interrupt",
-		"IsExist",
-		"IsNotExist",
-		"IsPathSeparator",
-		"IsPermission",
-		"IsTimeout",
-		"Kill",
-		"Lchown",
-		"Link",
-		"LinkError",
-		"LookupEnv",
-		"Lstat",
-		"Mkdir",
-		"MkdirAll",
-		"MkdirTemp",
-		"ModeAppend",
-		"ModeCharDevice",
-		"ModeDevice",
-		"ModeDir",
-		"ModeExclusive",
-		"ModeIrregular",
-		"ModeNamedPipe",
-		"ModePerm",
-		"ModeSetgid",
-		"ModeSetuid",
-		"ModeSocket",
-		"ModeSticky",
-		"ModeSymlink",
-		"ModeTemporary",
-		"ModeType",
-		"NewFile",
-		"NewSyscallError",
-		"O_APPEND",
-		"O_CREATE",
-		"O_EXCL",
-		"O_RDONLY",
-		"O_RDWR",
-		"O_SYNC",
-		"O_TRUNC",
-		"O_WRONLY",
-		"Open",
-		"OpenFile",
-		"PathError",
-		"PathListSeparator",
-		"PathSeparator",
-		"Pipe",
-		"ProcAttr",
-		"Process",
-		"ProcessState",
-		"ReadDir",
-		"ReadFile",
-		"Readlink",
-		"Remove",
-		"RemoveAll",
-		"Rename",
-		"SEEK_CUR",
-		"SEEK_END",
-		"SEEK_SET",
-		"SameFile",
-		"Setenv",
-		"Signal",
-		"StartProcess",
-		"Stat",
-		"Stderr",
-		"Stdin",
-		"Stdout",
-		"Symlink",
-		"SyscallError",
-		"TempDir",
-		"Truncate",
-		"Unsetenv",
-		"UserCacheDir",
-		"UserConfigDir",
-		"UserHomeDir",
-		"WriteFile",
-	},
-	"os/exec": []string{
-		"Cmd",
-		"Command",
-		"CommandContext",
-		"ErrNotFound",
-		"Error",
-		"ExitError",
-		"LookPath",
-	},
-	"os/signal": []string{
-		"Ignore",
-		"Ignored",
-		"Notify",
-		"NotifyContext",
-		"Reset",
-		"Stop",
-	},
-	"os/user": []string{
-		"Current",
-		"Group",
-		"Lookup",
-		"LookupGroup",
-		"LookupGroupId",
-		"LookupId",
-		"UnknownGroupError",
-		"UnknownGroupIdError",
-		"UnknownUserError",
-		"UnknownUserIdError",
-		"User",
-	},
-	"path": []string{
-		"Base",
-		"Clean",
-		"Dir",
-		"ErrBadPattern",
-		"Ext",
-		"IsAbs",
-		"Join",
-		"Match",
-		"Split",
-	},
-	"path/filepath": []string{
-		"Abs",
-		"Base",
-		"Clean",
-		"Dir",
-		"ErrBadPattern",
-		"EvalSymlinks",
-		"Ext",
-		"FromSlash",
-		"Glob",
-		"HasPrefix",
-		"IsAbs",
-		"Join",
-		"ListSeparator",
-		"Match",
-		"Rel",
-		"Separator",
-		"SkipDir",
-		"Split",
-		"SplitList",
-		"ToSlash",
-		"VolumeName",
-		"Walk",
-		"WalkDir",
-		"WalkFunc",
-	},
-	"plugin": []string{
-		"Open",
-		"Plugin",
-		"Symbol",
-	},
-	"reflect": []string{
-		"Append",
-		"AppendSlice",
-		"Array",
-		"ArrayOf",
-		"Bool",
-		"BothDir",
-		"Chan",
-		"ChanDir",
-		"ChanOf",
-		"Complex128",
-		"Complex64",
-		"Copy",
-		"DeepEqual",
-		"Float32",
-		"Float64",
-		"Func",
-		"FuncOf",
-		"Indirect",
-		"Int",
-		"Int16",
-		"Int32",
-		"Int64",
-		"Int8",
-		"Interface",
-		"Invalid",
-		"Kind",
-		"MakeChan",
-		"MakeFunc",
-		"MakeMap",
-		"MakeMapWithSize",
-		"MakeSlice",
-		"Map",
-		"MapIter",
-		"MapOf",
-		"Method",
-		"New",
-		"NewAt",
-		"Ptr",
-		"PtrTo",
-		"RecvDir",
-		"Select",
-		"SelectCase",
-		"SelectDefault",
-		"SelectDir",
-		"SelectRecv",
-		"SelectSend",
-		"SendDir",
-		"Slice",
-		"SliceHeader",
-		"SliceOf",
-		"String",
-		"StringHeader",
-		"Struct",
-		"StructField",
-		"StructOf",
-		"StructTag",
-		"Swapper",
-		"Type",
-		"TypeOf",
-		"Uint",
-		"Uint16",
-		"Uint32",
-		"Uint64",
-		"Uint8",
-		"Uintptr",
-		"UnsafePointer",
-		"Value",
-		"ValueError",
-		"ValueOf",
-		"Zero",
-	},
-	"regexp": []string{
-		"Compile",
-		"CompilePOSIX",
-		"Match",
-		"MatchReader",
-		"MatchString",
-		"MustCompile",
-		"MustCompilePOSIX",
-		"QuoteMeta",
-		"Regexp",
-	},
-	"regexp/syntax": []string{
-		"ClassNL",
-		"Compile",
-		"DotNL",
-		"EmptyBeginLine",
-		"EmptyBeginText",
-		"EmptyEndLine",
-		"EmptyEndText",
-		"EmptyNoWordBoundary",
-		"EmptyOp",
-		"EmptyOpContext",
-		"EmptyWordBoundary",
-		"ErrInternalError",
-		"ErrInvalidCharClass",
-		"ErrInvalidCharRange",
-		"ErrInvalidEscape",
-		"ErrInvalidNamedCapture",
-		"ErrInvalidPerlOp",
-		"ErrInvalidRepeatOp",
-		"ErrInvalidRepeatSize",
-		"ErrInvalidUTF8",
-		"ErrMissingBracket",
-		"ErrMissingParen",
-		"ErrMissingRepeatArgument",
-		"ErrTrailingBackslash",
-		"ErrUnexpectedParen",
-		"Error",
-		"ErrorCode",
-		"Flags",
-		"FoldCase",
-		"Inst",
-		"InstAlt",
-		"InstAltMatch",
-		"InstCapture",
-		"InstEmptyWidth",
-		"InstFail",
-		"InstMatch",
-		"InstNop",
-		"InstOp",
-		"InstRune",
-		"InstRune1",
-		"InstRuneAny",
-		"InstRuneAnyNotNL",
-		"IsWordChar",
-		"Literal",
-		"MatchNL",
-		"NonGreedy",
-		"OneLine",
-		"Op",
-		"OpAlternate",
-		"OpAnyChar",
-		"OpAnyCharNotNL",
-		"OpBeginLine",
-		"OpBeginText",
-		"OpCapture",
-		"OpCharClass",
-		"OpConcat",
-		"OpEmptyMatch",
-		"OpEndLine",
-		"OpEndText",
-		"OpLiteral",
-		"OpNoMatch",
-		"OpNoWordBoundary",
-		"OpPlus",
-		"OpQuest",
-		"OpRepeat",
-		"OpStar",
-		"OpWordBoundary",
-		"POSIX",
-		"Parse",
-		"Perl",
-		"PerlX",
-		"Prog",
-		"Regexp",
-		"Simple",
-		"UnicodeGroups",
-		"WasDollar",
-	},
-	"runtime": []string{
-		"BlockProfile",
-		"BlockProfileRecord",
-		"Breakpoint",
-		"CPUProfile",
-		"Caller",
-		"Callers",
-		"CallersFrames",
-		"Compiler",
-		"Error",
-		"Frame",
-		"Frames",
-		"Func",
-		"FuncForPC",
-		"GC",
-		"GOARCH",
-		"GOMAXPROCS",
-		"GOOS",
-		"GOROOT",
-		"Goexit",
-		"GoroutineProfile",
-		"Gosched",
-		"KeepAlive",
-		"LockOSThread",
-		"MemProfile",
-		"MemProfileRate",
-		"MemProfileRecord",
-		"MemStats",
-		"MutexProfile",
-		"NumCPU",
-		"NumCgoCall",
-		"NumGoroutine",
-		"ReadMemStats",
-		"ReadTrace",
-		"SetBlockProfileRate",
-		"SetCPUProfileRate",
-		"SetCgoTraceback",
-		"SetFinalizer",
-		"SetMutexProfileFraction",
-		"Stack",
-		"StackRecord",
-		"StartTrace",
-		"StopTrace",
-		"ThreadCreateProfile",
-		"TypeAssertionError",
-		"UnlockOSThread",
-		"Version",
-	},
-	"runtime/debug": []string{
-		"BuildInfo",
-		"FreeOSMemory",
-		"GCStats",
-		"Module",
-		"PrintStack",
-		"ReadBuildInfo",
-		"ReadGCStats",
-		"SetGCPercent",
-		"SetMaxStack",
-		"SetMaxThreads",
-		"SetPanicOnFault",
-		"SetTraceback",
-		"Stack",
-		"WriteHeapDump",
-	},
-	"runtime/metrics": []string{
-		"All",
-		"Description",
-		"Float64Histogram",
-		"KindBad",
-		"KindFloat64",
-		"KindFloat64Histogram",
-		"KindUint64",
-		"Read",
-		"Sample",
-		"Value",
-		"ValueKind",
-	},
-	"runtime/pprof": []string{
-		"Do",
-		"ForLabels",
-		"Label",
-		"LabelSet",
-		"Labels",
-		"Lookup",
-		"NewProfile",
-		"Profile",
-		"Profiles",
-		"SetGoroutineLabels",
-		"StartCPUProfile",
-		"StopCPUProfile",
-		"WithLabels",
-		"WriteHeapProfile",
-	},
-	"runtime/trace": []string{
-		"IsEnabled",
-		"Log",
-		"Logf",
-		"NewTask",
-		"Region",
-		"Start",
-		"StartRegion",
-		"Stop",
-		"Task",
-		"WithRegion",
-	},
-	"sort": []string{
-		"Float64Slice",
-		"Float64s",
-		"Float64sAreSorted",
-		"IntSlice",
-		"Interface",
-		"Ints",
-		"IntsAreSorted",
-		"IsSorted",
-		"Reverse",
-		"Search",
-		"SearchFloat64s",
-		"SearchInts",
-		"SearchStrings",
-		"Slice",
-		"SliceIsSorted",
-		"SliceStable",
-		"Sort",
-		"Stable",
-		"StringSlice",
-		"Strings",
-		"StringsAreSorted",
-	},
-	"strconv": []string{
-		"AppendBool",
-		"AppendFloat",
-		"AppendInt",
-		"AppendQuote",
-		"AppendQuoteRune",
-		"AppendQuoteRuneToASCII",
-		"AppendQuoteRuneToGraphic",
-		"AppendQuoteToASCII",
-		"AppendQuoteToGraphic",
-		"AppendUint",
-		"Atoi",
-		"CanBackquote",
-		"ErrRange",
-		"ErrSyntax",
-		"FormatBool",
-		"FormatComplex",
-		"FormatFloat",
-		"FormatInt",
-		"FormatUint",
-		"IntSize",
-		"IsGraphic",
-		"IsPrint",
-		"Itoa",
-		"NumError",
-		"ParseBool",
-		"ParseComplex",
-		"ParseFloat",
-		"ParseInt",
-		"ParseUint",
-		"Quote",
-		"QuoteRune",
-		"QuoteRuneToASCII",
-		"QuoteRuneToGraphic",
-		"QuoteToASCII",
-		"QuoteToGraphic",
-		"Unquote",
-		"UnquoteChar",
-	},
-	"strings": []string{
-		"Builder",
-		"Compare",
-		"Contains",
-		"ContainsAny",
-		"ContainsRune",
-		"Count",
-		"EqualFold",
-		"Fields",
-		"FieldsFunc",
-		"HasPrefix",
-		"HasSuffix",
-		"Index",
-		"IndexAny",
-		"IndexByte",
-		"IndexFunc",
-		"IndexRune",
-		"Join",
-		"LastIndex",
-		"LastIndexAny",
-		"LastIndexByte",
-		"LastIndexFunc",
-		"Map",
-		"NewReader",
-		"NewReplacer",
-		"Reader",
-		"Repeat",
-		"Replace",
-		"ReplaceAll",
-		"Replacer",
-		"Split",
-		"SplitAfter",
-		"SplitAfterN",
-		"SplitN",
-		"Title",
-		"ToLower",
-		"ToLowerSpecial",
-		"ToTitle",
-		"ToTitleSpecial",
-		"ToUpper",
-		"ToUpperSpecial",
-		"ToValidUTF8",
-		"Trim",
-		"TrimFunc",
-		"TrimLeft",
-		"TrimLeftFunc",
-		"TrimPrefix",
-		"TrimRight",
-		"TrimRightFunc",
-		"TrimSpace",
-		"TrimSuffix",
-	},
-	"sync": []string{
-		"Cond",
-		"Locker",
-		"Map",
-		"Mutex",
-		"NewCond",
-		"Once",
-		"Pool",
-		"RWMutex",
-		"WaitGroup",
-	},
-	"sync/atomic": []string{
-		"AddInt32",
-		"AddInt64",
-		"AddUint32",
-		"AddUint64",
-		"AddUintptr",
-		"CompareAndSwapInt32",
-		"CompareAndSwapInt64",
-		"CompareAndSwapPointer",
-		"CompareAndSwapUint32",
-		"CompareAndSwapUint64",
-		"CompareAndSwapUintptr",
-		"LoadInt32",
-		"LoadInt64",
-		"LoadPointer",
-		"LoadUint32",
-		"LoadUint64",
-		"LoadUintptr",
-		"StoreInt32",
-		"StoreInt64",
-		"StorePointer",
-		"StoreUint32",
-		"StoreUint64",
-		"StoreUintptr",
-		"SwapInt32",
-		"SwapInt64",
-		"SwapPointer",
-		"SwapUint32",
-		"SwapUint64",
-		"SwapUintptr",
-		"Value",
-	},
-	"syscall": []string{
-		"AF_ALG",
-		"AF_APPLETALK",
-		"AF_ARP",
-		"AF_ASH",
-		"AF_ATM",
-		"AF_ATMPVC",
-		"AF_ATMSVC",
-		"AF_AX25",
-		"AF_BLUETOOTH",
-		"AF_BRIDGE",
-		"AF_CAIF",
-		"AF_CAN",
-		"AF_CCITT",
-		"AF_CHAOS",
-		"AF_CNT",
-		"AF_COIP",
-		"AF_DATAKIT",
-		"AF_DECnet",
-		"AF_DLI",
-		"AF_E164",
-		"AF_ECMA",
-		"AF_ECONET",
-		"AF_ENCAP",
-		"AF_FILE",
-		"AF_HYLINK",
-		"AF_IEEE80211",
-		"AF_IEEE802154",
-		"AF_IMPLINK",
-		"AF_INET",
-		"AF_INET6",
-		"AF_INET6_SDP",
-		"AF_INET_SDP",
-		"AF_IPX",
-		"AF_IRDA",
-		"AF_ISDN",
-		"AF_ISO",
-		"AF_IUCV",
-		"AF_KEY",
-		"AF_LAT",
-		"AF_LINK",
-		"AF_LLC",
-		"AF_LOCAL",
-		"AF_MAX",
-		"AF_MPLS",
-		"AF_NATM",
-		"AF_NDRV",
-		"AF_NETBEUI",
-		"AF_NETBIOS",
-		"AF_NETGRAPH",
-		"AF_NETLINK",
-		"AF_NETROM",
-		"AF_NS",
-		"AF_OROUTE",
-		"AF_OSI",
-		"AF_PACKET",
-		"AF_PHONET",
-		"AF_PPP",
-		"AF_PPPOX",
-		"AF_PUP",
-		"AF_RDS",
-		"AF_RESERVED_36",
-		"AF_ROSE",
-		"AF_ROUTE",
-		"AF_RXRPC",
-		"AF_SCLUSTER",
-		"AF_SECURITY",
-		"AF_SIP",
-		"AF_SLOW",
-		"AF_SNA",
-		"AF_SYSTEM",
-		"AF_TIPC",
-		"AF_UNIX",
-		"AF_UNSPEC",
-		"AF_VENDOR00",
-		"AF_VENDOR01",
-		"AF_VENDOR02",
-		"AF_VENDOR03",
-		"AF_VENDOR04",
-		"AF_VENDOR05",
-		"AF_VENDOR06",
-		"AF_VENDOR07",
-		"AF_VENDOR08",
-		"AF_VENDOR09",
-		"AF_VENDOR10",
-		"AF_VENDOR11",
-		"AF_VENDOR12",
-		"AF_VENDOR13",
-		"AF_VENDOR14",
-		"AF_VENDOR15",
-		"AF_VENDOR16",
-		"AF_VENDOR17",
-		"AF_VENDOR18",
-		"AF_VENDOR19",
-		"AF_VENDOR20",
-		"AF_VENDOR21",
-		"AF_VENDOR22",
-		"AF_VENDOR23",
-		"AF_VENDOR24",
-		"AF_VENDOR25",
-		"AF_VENDOR26",
-		"AF_VENDOR27",
-		"AF_VENDOR28",
-		"AF_VENDOR29",
-		"AF_VENDOR30",
-		"AF_VENDOR31",
-		"AF_VENDOR32",
-		"AF_VENDOR33",
-		"AF_VENDOR34",
-		"AF_VENDOR35",
-		"AF_VENDOR36",
-		"AF_VENDOR37",
-		"AF_VENDOR38",
-		"AF_VENDOR39",
-		"AF_VENDOR40",
-		"AF_VENDOR41",
-		"AF_VENDOR42",
-		"AF_VENDOR43",
-		"AF_VENDOR44",
-		"AF_VENDOR45",
-		"AF_VENDOR46",
-		"AF_VENDOR47",
-		"AF_WANPIPE",
-		"AF_X25",
-		"AI_CANONNAME",
-		"AI_NUMERICHOST",
-		"AI_PASSIVE",
-		"APPLICATION_ERROR",
-		"ARPHRD_ADAPT",
-		"ARPHRD_APPLETLK",
-		"ARPHRD_ARCNET",
-		"ARPHRD_ASH",
-		"ARPHRD_ATM",
-		"ARPHRD_AX25",
-		"ARPHRD_BIF",
-		"ARPHRD_CHAOS",
-		"ARPHRD_CISCO",
-		"ARPHRD_CSLIP",
-		"ARPHRD_CSLIP6",
-		"ARPHRD_DDCMP",
-		"ARPHRD_DLCI",
-		"ARPHRD_ECONET",
-		"ARPHRD_EETHER",
-		"ARPHRD_ETHER",
-		"ARPHRD_EUI64",
-		"ARPHRD_FCAL",
-		"ARPHRD_FCFABRIC",
-		"ARPHRD_FCPL",
-		"ARPHRD_FCPP",
-		"ARPHRD_FDDI",
-		"ARPHRD_FRAD",
-		"ARPHRD_FRELAY",
-		"ARPHRD_HDLC",
-		"ARPHRD_HIPPI",
-		"ARPHRD_HWX25",
-		"ARPHRD_IEEE1394",
-		"ARPHRD_IEEE802",
-		"ARPHRD_IEEE80211",
-		"ARPHRD_IEEE80211_PRISM",
-		"ARPHRD_IEEE80211_RADIOTAP",
-		"ARPHRD_IEEE802154",
-		"ARPHRD_IEEE802154_PHY",
-		"ARPHRD_IEEE802_TR",
-		"ARPHRD_INFINIBAND",
-		"ARPHRD_IPDDP",
-		"ARPHRD_IPGRE",
-		"ARPHRD_IRDA",
-		"ARPHRD_LAPB",
-		"ARPHRD_LOCALTLK",
-		"ARPHRD_LOOPBACK",
-		"ARPHRD_METRICOM",
-		"ARPHRD_NETROM",
-		"ARPHRD_NONE",
-		"ARPHRD_PIMREG",
-		"ARPHRD_PPP",
-		"ARPHRD_PRONET",
-		"ARPHRD_RAWHDLC",
-		"ARPHRD_ROSE",
-		"ARPHRD_RSRVD",
-		"ARPHRD_SIT",
-		"ARPHRD_SKIP",
-		"ARPHRD_SLIP",
-		"ARPHRD_SLIP6",
-		"ARPHRD_STRIP",
-		"ARPHRD_TUNNEL",
-		"ARPHRD_TUNNEL6",
-		"ARPHRD_VOID",
-		"ARPHRD_X25",
-		"AUTHTYPE_CLIENT",
-		"AUTHTYPE_SERVER",
-		"Accept",
-		"Accept4",
-		"AcceptEx",
-		"Access",
-		"Acct",
-		"AddrinfoW",
-		"Adjtime",
-		"Adjtimex",
-		"AllThreadsSyscall",
-		"AllThreadsSyscall6",
-		"AttachLsf",
-		"B0",
-		"B1000000",
-		"B110",
-		"B115200",
-		"B1152000",
-		"B1200",
-		"B134",
-		"B14400",
-		"B150",
-		"B1500000",
-		"B1800",
-		"B19200",
-		"B200",
-		"B2000000",
-		"B230400",
-		"B2400",
-		"B2500000",
-		"B28800",
-		"B300",
-		"B3000000",
-		"B3500000",
-		"B38400",
-		"B4000000",
-		"B460800",
-		"B4800",
-		"B50",
-		"B500000",
-		"B57600",
-		"B576000",
-		"B600",
-		"B7200",
-		"B75",
-		"B76800",
-		"B921600",
-		"B9600",
-		"BASE_PROTOCOL",
-		"BIOCFEEDBACK",
-		"BIOCFLUSH",
-		"BIOCGBLEN",
-		"BIOCGDIRECTION",
-		"BIOCGDIRFILT",
-		"BIOCGDLT",
-		"BIOCGDLTLIST",
-		"BIOCGETBUFMODE",
-		"BIOCGETIF",
-		"BIOCGETZMAX",
-		"BIOCGFEEDBACK",
-		"BIOCGFILDROP",
-		"BIOCGHDRCMPLT",
-		"BIOCGRSIG",
-		"BIOCGRTIMEOUT",
-		"BIOCGSEESENT",
-		"BIOCGSTATS",
-		"BIOCGSTATSOLD",
-		"BIOCGTSTAMP",
-		"BIOCIMMEDIATE",
-		"BIOCLOCK",
-		"BIOCPROMISC",
-		"BIOCROTZBUF",
-		"BIOCSBLEN",
-		"BIOCSDIRECTION",
-		"BIOCSDIRFILT",
-		"BIOCSDLT",
-		"BIOCSETBUFMODE",
-		"BIOCSETF",
-		"BIOCSETFNR",
-		"BIOCSETIF",
-		"BIOCSETWF",
-		"BIOCSETZBUF",
-		"BIOCSFEEDBACK",
-		"BIOCSFILDROP",
-		"BIOCSHDRCMPLT",
-		"BIOCSRSIG",
-		"BIOCSRTIMEOUT",
-		"BIOCSSEESENT",
-		"BIOCSTCPF",
-		"BIOCSTSTAMP",
-		"BIOCSUDPF",
-		"BIOCVERSION",
-		"BPF_A",
-		"BPF_ABS",
-		"BPF_ADD",
-		"BPF_ALIGNMENT",
-		"BPF_ALIGNMENT32",
-		"BPF_ALU",
-		"BPF_AND",
-		"BPF_B",
-		"BPF_BUFMODE_BUFFER",
-		"BPF_BUFMODE_ZBUF",
-		"BPF_DFLTBUFSIZE",
-		"BPF_DIRECTION_IN",
-		"BPF_DIRECTION_OUT",
-		"BPF_DIV",
-		"BPF_H",
-		"BPF_IMM",
-		"BPF_IND",
-		"BPF_JA",
-		"BPF_JEQ",
-		"BPF_JGE",
-		"BPF_JGT",
-		"BPF_JMP",
-		"BPF_JSET",
-		"BPF_K",
-		"BPF_LD",
-		"BPF_LDX",
-		"BPF_LEN",
-		"BPF_LSH",
-		"BPF_MAJOR_VERSION",
-		"BPF_MAXBUFSIZE",
-		"BPF_MAXINSNS",
-		"BPF_MEM",
-		"BPF_MEMWORDS",
-		"BPF_MINBUFSIZE",
-		"BPF_MINOR_VERSION",
-		"BPF_MISC",
-		"BPF_MSH",
-		"BPF_MUL",
-		"BPF_NEG",
-		"BPF_OR",
-		"BPF_RELEASE",
-		"BPF_RET",
-		"BPF_RSH",
-		"BPF_ST",
-		"BPF_STX",
-		"BPF_SUB",
-		"BPF_TAX",
-		"BPF_TXA",
-		"BPF_T_BINTIME",
-		"BPF_T_BINTIME_FAST",
-		"BPF_T_BINTIME_MONOTONIC",
-		"BPF_T_BINTIME_MONOTONIC_FAST",
-		"BPF_T_FAST",
-		"BPF_T_FLAG_MASK",
-		"BPF_T_FORMAT_MASK",
-		"BPF_T_MICROTIME",
-		"BPF_T_MICROTIME_FAST",
-		"BPF_T_MICROTIME_MONOTONIC",
-		"BPF_T_MICROTIME_MONOTONIC_FAST",
-		"BPF_T_MONOTONIC",
-		"BPF_T_MONOTONIC_FAST",
-		"BPF_T_NANOTIME",
-		"BPF_T_NANOTIME_FAST",
-		"BPF_T_NANOTIME_MONOTONIC",
-		"BPF_T_NANOTIME_MONOTONIC_FAST",
-		"BPF_T_NONE",
-		"BPF_T_NORMAL",
-		"BPF_W",
-		"BPF_X",
-		"BRKINT",
-		"Bind",
-		"BindToDevice",
-		"BpfBuflen",
-		"BpfDatalink",
-		"BpfHdr",
-		"BpfHeadercmpl",
-		"BpfInsn",
-		"BpfInterface",
-		"BpfJump",
-		"BpfProgram",
-		"BpfStat",
-		"BpfStats",
-		"BpfStmt",
-		"BpfTimeout",
-		"BpfTimeval",
-		"BpfVersion",
-		"BpfZbuf",
-		"BpfZbufHeader",
-		"ByHandleFileInformation",
-		"BytePtrFromString",
-		"ByteSliceFromString",
-		"CCR0_FLUSH",
-		"CERT_CHAIN_POLICY_AUTHENTICODE",
-		"CERT_CHAIN_POLICY_AUTHENTICODE_TS",
-		"CERT_CHAIN_POLICY_BASE",
-		"CERT_CHAIN_POLICY_BASIC_CONSTRAINTS",
-		"CERT_CHAIN_POLICY_EV",
-		"CERT_CHAIN_POLICY_MICROSOFT_ROOT",
-		"CERT_CHAIN_POLICY_NT_AUTH",
-		"CERT_CHAIN_POLICY_SSL",
-		"CERT_E_CN_NO_MATCH",
-		"CERT_E_EXPIRED",
-		"CERT_E_PURPOSE",
-		"CERT_E_ROLE",
-		"CERT_E_UNTRUSTEDROOT",
-		"CERT_STORE_ADD_ALWAYS",
-		"CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG",
-		"CERT_STORE_PROV_MEMORY",
-		"CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT",
-		"CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT",
-		"CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT",
-		"CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT",
-		"CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT",
-		"CERT_TRUST_INVALID_BASIC_CONSTRAINTS",
-		"CERT_TRUST_INVALID_EXTENSION",
-		"CERT_TRUST_INVALID_NAME_CONSTRAINTS",
-		"CERT_TRUST_INVALID_POLICY_CONSTRAINTS",
-		"CERT_TRUST_IS_CYCLIC",
-		"CERT_TRUST_IS_EXPLICIT_DISTRUST",
-		"CERT_TRUST_IS_NOT_SIGNATURE_VALID",
-		"CERT_TRUST_IS_NOT_TIME_VALID",
-		"CERT_TRUST_IS_NOT_VALID_FOR_USAGE",
-		"CERT_TRUST_IS_OFFLINE_REVOCATION",
-		"CERT_TRUST_IS_REVOKED",
-		"CERT_TRUST_IS_UNTRUSTED_ROOT",
-		"CERT_TRUST_NO_ERROR",
-		"CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY",
-		"CERT_TRUST_REVOCATION_STATUS_UNKNOWN",
-		"CFLUSH",
-		"CLOCAL",
-		"CLONE_CHILD_CLEARTID",
-		"CLONE_CHILD_SETTID",
-		"CLONE_CSIGNAL",
-		"CLONE_DETACHED",
-		"CLONE_FILES",
-		"CLONE_FS",
-		"CLONE_IO",
-		"CLONE_NEWIPC",
-		"CLONE_NEWNET",
-		"CLONE_NEWNS",
-		"CLONE_NEWPID",
-		"CLONE_NEWUSER",
-		"CLONE_NEWUTS",
-		"CLONE_PARENT",
-		"CLONE_PARENT_SETTID",
-		"CLONE_PID",
-		"CLONE_PTRACE",
-		"CLONE_SETTLS",
-		"CLONE_SIGHAND",
-		"CLONE_SYSVSEM",
-		"CLONE_THREAD",
-		"CLONE_UNTRACED",
-		"CLONE_VFORK",
-		"CLONE_VM",
-		"CPUID_CFLUSH",
-		"CREAD",
-		"CREATE_ALWAYS",
-		"CREATE_NEW",
-		"CREATE_NEW_PROCESS_GROUP",
-		"CREATE_UNICODE_ENVIRONMENT",
-		"CRYPT_DEFAULT_CONTAINER_OPTIONAL",
-		"CRYPT_DELETEKEYSET",
-		"CRYPT_MACHINE_KEYSET",
-		"CRYPT_NEWKEYSET",
-		"CRYPT_SILENT",
-		"CRYPT_VERIFYCONTEXT",
-		"CS5",
-		"CS6",
-		"CS7",
-		"CS8",
-		"CSIZE",
-		"CSTART",
-		"CSTATUS",
-		"CSTOP",
-		"CSTOPB",
-		"CSUSP",
-		"CTL_MAXNAME",
-		"CTL_NET",
-		"CTL_QUERY",
-		"CTRL_BREAK_EVENT",
-		"CTRL_CLOSE_EVENT",
-		"CTRL_C_EVENT",
-		"CTRL_LOGOFF_EVENT",
-		"CTRL_SHUTDOWN_EVENT",
-		"CancelIo",
-		"CancelIoEx",
-		"CertAddCertificateContextToStore",
-		"CertChainContext",
-		"CertChainElement",
-		"CertChainPara",
-		"CertChainPolicyPara",
-		"CertChainPolicyStatus",
-		"CertCloseStore",
-		"CertContext",
-		"CertCreateCertificateContext",
-		"CertEnhKeyUsage",
-		"CertEnumCertificatesInStore",
-		"CertFreeCertificateChain",
-		"CertFreeCertificateContext",
-		"CertGetCertificateChain",
-		"CertInfo",
-		"CertOpenStore",
-		"CertOpenSystemStore",
-		"CertRevocationCrlInfo",
-		"CertRevocationInfo",
-		"CertSimpleChain",
-		"CertTrustListInfo",
-		"CertTrustStatus",
-		"CertUsageMatch",
-		"CertVerifyCertificateChainPolicy",
-		"Chdir",
-		"CheckBpfVersion",
-		"Chflags",
-		"Chmod",
-		"Chown",
-		"Chroot",
-		"Clearenv",
-		"Close",
-		"CloseHandle",
-		"CloseOnExec",
-		"Closesocket",
-		"CmsgLen",
-		"CmsgSpace",
-		"Cmsghdr",
-		"CommandLineToArgv",
-		"ComputerName",
-		"Conn",
-		"Connect",
-		"ConnectEx",
-		"ConvertSidToStringSid",
-		"ConvertStringSidToSid",
-		"CopySid",
-		"Creat",
-		"CreateDirectory",
-		"CreateFile",
-		"CreateFileMapping",
-		"CreateHardLink",
-		"CreateIoCompletionPort",
-		"CreatePipe",
-		"CreateProcess",
-		"CreateProcessAsUser",
-		"CreateSymbolicLink",
-		"CreateToolhelp32Snapshot",
-		"Credential",
-		"CryptAcquireContext",
-		"CryptGenRandom",
-		"CryptReleaseContext",
-		"DIOCBSFLUSH",
-		"DIOCOSFPFLUSH",
-		"DLL",
-		"DLLError",
-		"DLT_A429",
-		"DLT_A653_ICM",
-		"DLT_AIRONET_HEADER",
-		"DLT_AOS",
-		"DLT_APPLE_IP_OVER_IEEE1394",
-		"DLT_ARCNET",
-		"DLT_ARCNET_LINUX",
-		"DLT_ATM_CLIP",
-		"DLT_ATM_RFC1483",
-		"DLT_AURORA",
-		"DLT_AX25",
-		"DLT_AX25_KISS",
-		"DLT_BACNET_MS_TP",
-		"DLT_BLUETOOTH_HCI_H4",
-		"DLT_BLUETOOTH_HCI_H4_WITH_PHDR",
-		"DLT_CAN20B",
-		"DLT_CAN_SOCKETCAN",
-		"DLT_CHAOS",
-		"DLT_CHDLC",
-		"DLT_CISCO_IOS",
-		"DLT_C_HDLC",
-		"DLT_C_HDLC_WITH_DIR",
-		"DLT_DBUS",
-		"DLT_DECT",
-		"DLT_DOCSIS",
-		"DLT_DVB_CI",
-		"DLT_ECONET",
-		"DLT_EN10MB",
-		"DLT_EN3MB",
-		"DLT_ENC",
-		"DLT_ERF",
-		"DLT_ERF_ETH",
-		"DLT_ERF_POS",
-		"DLT_FC_2",
-		"DLT_FC_2_WITH_FRAME_DELIMS",
-		"DLT_FDDI",
-		"DLT_FLEXRAY",
-		"DLT_FRELAY",
-		"DLT_FRELAY_WITH_DIR",
-		"DLT_GCOM_SERIAL",
-		"DLT_GCOM_T1E1",
-		"DLT_GPF_F",
-		"DLT_GPF_T",
-		"DLT_GPRS_LLC",
-		"DLT_GSMTAP_ABIS",
-		"DLT_GSMTAP_UM",
-		"DLT_HDLC",
-		"DLT_HHDLC",
-		"DLT_HIPPI",
-		"DLT_IBM_SN",
-		"DLT_IBM_SP",
-		"DLT_IEEE802",
-		"DLT_IEEE802_11",
-		"DLT_IEEE802_11_RADIO",
-		"DLT_IEEE802_11_RADIO_AVS",
-		"DLT_IEEE802_15_4",
-		"DLT_IEEE802_15_4_LINUX",
-		"DLT_IEEE802_15_4_NOFCS",
-		"DLT_IEEE802_15_4_NONASK_PHY",
-		"DLT_IEEE802_16_MAC_CPS",
-		"DLT_IEEE802_16_MAC_CPS_RADIO",
-		"DLT_IPFILTER",
-		"DLT_IPMB",
-		"DLT_IPMB_LINUX",
-		"DLT_IPNET",
-		"DLT_IPOIB",
-		"DLT_IPV4",
-		"DLT_IPV6",
-		"DLT_IP_OVER_FC",
-		"DLT_JUNIPER_ATM1",
-		"DLT_JUNIPER_ATM2",
-		"DLT_JUNIPER_ATM_CEMIC",
-		"DLT_JUNIPER_CHDLC",
-		"DLT_JUNIPER_ES",
-		"DLT_JUNIPER_ETHER",
-		"DLT_JUNIPER_FIBRECHANNEL",
-		"DLT_JUNIPER_FRELAY",
-		"DLT_JUNIPER_GGSN",
-		"DLT_JUNIPER_ISM",
-		"DLT_JUNIPER_MFR",
-		"DLT_JUNIPER_MLFR",
-		"DLT_JUNIPER_MLPPP",
-		"DLT_JUNIPER_MONITOR",
-		"DLT_JUNIPER_PIC_PEER",
-		"DLT_JUNIPER_PPP",
-		"DLT_JUNIPER_PPPOE",
-		"DLT_JUNIPER_PPPOE_ATM",
-		"DLT_JUNIPER_SERVICES",
-		"DLT_JUNIPER_SRX_E2E",
-		"DLT_JUNIPER_ST",
-		"DLT_JUNIPER_VP",
-		"DLT_JUNIPER_VS",
-		"DLT_LAPB_WITH_DIR",
-		"DLT_LAPD",
-		"DLT_LIN",
-		"DLT_LINUX_EVDEV",
-		"DLT_LINUX_IRDA",
-		"DLT_LINUX_LAPD",
-		"DLT_LINUX_PPP_WITHDIRECTION",
-		"DLT_LINUX_SLL",
-		"DLT_LOOP",
-		"DLT_LTALK",
-		"DLT_MATCHING_MAX",
-		"DLT_MATCHING_MIN",
-		"DLT_MFR",
-		"DLT_MOST",
-		"DLT_MPEG_2_TS",
-		"DLT_MPLS",
-		"DLT_MTP2",
-		"DLT_MTP2_WITH_PHDR",
-		"DLT_MTP3",
-		"DLT_MUX27010",
-		"DLT_NETANALYZER",
-		"DLT_NETANALYZER_TRANSPARENT",
-		"DLT_NFC_LLCP",
-		"DLT_NFLOG",
-		"DLT_NG40",
-		"DLT_NULL",
-		"DLT_PCI_EXP",
-		"DLT_PFLOG",
-		"DLT_PFSYNC",
-		"DLT_PPI",
-		"DLT_PPP",
-		"DLT_PPP_BSDOS",
-		"DLT_PPP_ETHER",
-		"DLT_PPP_PPPD",
-		"DLT_PPP_SERIAL",
-		"DLT_PPP_WITH_DIR",
-		"DLT_PPP_WITH_DIRECTION",
-		"DLT_PRISM_HEADER",
-		"DLT_PRONET",
-		"DLT_RAIF1",
-		"DLT_RAW",
-		"DLT_RAWAF_MASK",
-		"DLT_RIO",
-		"DLT_SCCP",
-		"DLT_SITA",
-		"DLT_SLIP",
-		"DLT_SLIP_BSDOS",
-		"DLT_STANAG_5066_D_PDU",
-		"DLT_SUNATM",
-		"DLT_SYMANTEC_FIREWALL",
-		"DLT_TZSP",
-		"DLT_USB",
-		"DLT_USB_LINUX",
-		"DLT_USB_LINUX_MMAPPED",
-		"DLT_USER0",
-		"DLT_USER1",
-		"DLT_USER10",
-		"DLT_USER11",
-		"DLT_USER12",
-		"DLT_USER13",
-		"DLT_USER14",
-		"DLT_USER15",
-		"DLT_USER2",
-		"DLT_USER3",
-		"DLT_USER4",
-		"DLT_USER5",
-		"DLT_USER6",
-		"DLT_USER7",
-		"DLT_USER8",
-		"DLT_USER9",
-		"DLT_WIHART",
-		"DLT_X2E_SERIAL",
-		"DLT_X2E_XORAYA",
-		"DNSMXData",
-		"DNSPTRData",
-		"DNSRecord",
-		"DNSSRVData",
-		"DNSTXTData",
-		"DNS_INFO_NO_RECORDS",
-		"DNS_TYPE_A",
-		"DNS_TYPE_A6",
-		"DNS_TYPE_AAAA",
-		"DNS_TYPE_ADDRS",
-		"DNS_TYPE_AFSDB",
-		"DNS_TYPE_ALL",
-		"DNS_TYPE_ANY",
-		"DNS_TYPE_ATMA",
-		"DNS_TYPE_AXFR",
-		"DNS_TYPE_CERT",
-		"DNS_TYPE_CNAME",
-		"DNS_TYPE_DHCID",
-		"DNS_TYPE_DNAME",
-		"DNS_TYPE_DNSKEY",
-		"DNS_TYPE_DS",
-		"DNS_TYPE_EID",
-		"DNS_TYPE_GID",
-		"DNS_TYPE_GPOS",
-		"DNS_TYPE_HINFO",
-		"DNS_TYPE_ISDN",
-		"DNS_TYPE_IXFR",
-		"DNS_TYPE_KEY",
-		"DNS_TYPE_KX",
-		"DNS_TYPE_LOC",
-		"DNS_TYPE_MAILA",
-		"DNS_TYPE_MAILB",
-		"DNS_TYPE_MB",
-		"DNS_TYPE_MD",
-		"DNS_TYPE_MF",
-		"DNS_TYPE_MG",
-		"DNS_TYPE_MINFO",
-		"DNS_TYPE_MR",
-		"DNS_TYPE_MX",
-		"DNS_TYPE_NAPTR",
-		"DNS_TYPE_NBSTAT",
-		"DNS_TYPE_NIMLOC",
-		"DNS_TYPE_NS",
-		"DNS_TYPE_NSAP",
-		"DNS_TYPE_NSAPPTR",
-		"DNS_TYPE_NSEC",
-		"DNS_TYPE_NULL",
-		"DNS_TYPE_NXT",
-		"DNS_TYPE_OPT",
-		"DNS_TYPE_PTR",
-		"DNS_TYPE_PX",
-		"DNS_TYPE_RP",
-		"DNS_TYPE_RRSIG",
-		"DNS_TYPE_RT",
-		"DNS_TYPE_SIG",
-		"DNS_TYPE_SINK",
-		"DNS_TYPE_SOA",
-		"DNS_TYPE_SRV",
-		"DNS_TYPE_TEXT",
-		"DNS_TYPE_TKEY",
-		"DNS_TYPE_TSIG",
-		"DNS_TYPE_UID",
-		"DNS_TYPE_UINFO",
-		"DNS_TYPE_UNSPEC",
-		"DNS_TYPE_WINS",
-		"DNS_TYPE_WINSR",
-		"DNS_TYPE_WKS",
-		"DNS_TYPE_X25",
-		"DT_BLK",
-		"DT_CHR",
-		"DT_DIR",
-		"DT_FIFO",
-		"DT_LNK",
-		"DT_REG",
-		"DT_SOCK",
-		"DT_UNKNOWN",
-		"DT_WHT",
-		"DUPLICATE_CLOSE_SOURCE",
-		"DUPLICATE_SAME_ACCESS",
-		"DeleteFile",
-		"DetachLsf",
-		"DeviceIoControl",
-		"Dirent",
-		"DnsNameCompare",
-		"DnsQuery",
-		"DnsRecordListFree",
-		"DnsSectionAdditional",
-		"DnsSectionAnswer",
-		"DnsSectionAuthority",
-		"DnsSectionQuestion",
-		"Dup",
-		"Dup2",
-		"Dup3",
-		"DuplicateHandle",
-		"E2BIG",
-		"EACCES",
-		"EADDRINUSE",
-		"EADDRNOTAVAIL",
-		"EADV",
-		"EAFNOSUPPORT",
-		"EAGAIN",
-		"EALREADY",
-		"EAUTH",
-		"EBADARCH",
-		"EBADE",
-		"EBADEXEC",
-		"EBADF",
-		"EBADFD",
-		"EBADMACHO",
-		"EBADMSG",
-		"EBADR",
-		"EBADRPC",
-		"EBADRQC",
-		"EBADSLT",
-		"EBFONT",
-		"EBUSY",
-		"ECANCELED",
-		"ECAPMODE",
-		"ECHILD",
-		"ECHO",
-		"ECHOCTL",
-		"ECHOE",
-		"ECHOK",
-		"ECHOKE",
-		"ECHONL",
-		"ECHOPRT",
-		"ECHRNG",
-		"ECOMM",
-		"ECONNABORTED",
-		"ECONNREFUSED",
-		"ECONNRESET",
-		"EDEADLK",
-		"EDEADLOCK",
-		"EDESTADDRREQ",
-		"EDEVERR",
-		"EDOM",
-		"EDOOFUS",
-		"EDOTDOT",
-		"EDQUOT",
-		"EEXIST",
-		"EFAULT",
-		"EFBIG",
-		"EFER_LMA",
-		"EFER_LME",
-		"EFER_NXE",
-		"EFER_SCE",
-		"EFTYPE",
-		"EHOSTDOWN",
-		"EHOSTUNREACH",
-		"EHWPOISON",
-		"EIDRM",
-		"EILSEQ",
-		"EINPROGRESS",
-		"EINTR",
-		"EINVAL",
-		"EIO",
-		"EIPSEC",
-		"EISCONN",
-		"EISDIR",
-		"EISNAM",
-		"EKEYEXPIRED",
-		"EKEYREJECTED",
-		"EKEYREVOKED",
-		"EL2HLT",
-		"EL2NSYNC",
-		"EL3HLT",
-		"EL3RST",
-		"ELAST",
-		"ELF_NGREG",
-		"ELF_PRARGSZ",
-		"ELIBACC",
-		"ELIBBAD",
-		"ELIBEXEC",
-		"ELIBMAX",
-		"ELIBSCN",
-		"ELNRNG",
-		"ELOOP",
-		"EMEDIUMTYPE",
-		"EMFILE",
-		"EMLINK",
-		"EMSGSIZE",
-		"EMT_TAGOVF",
-		"EMULTIHOP",
-		"EMUL_ENABLED",
-		"EMUL_LINUX",
-		"EMUL_LINUX32",
-		"EMUL_MAXID",
-		"EMUL_NATIVE",
-		"ENAMETOOLONG",
-		"ENAVAIL",
-		"ENDRUNDISC",
-		"ENEEDAUTH",
-		"ENETDOWN",
-		"ENETRESET",
-		"ENETUNREACH",
-		"ENFILE",
-		"ENOANO",
-		"ENOATTR",
-		"ENOBUFS",
-		"ENOCSI",
-		"ENODATA",
-		"ENODEV",
-		"ENOENT",
-		"ENOEXEC",
-		"ENOKEY",
-		"ENOLCK",
-		"ENOLINK",
-		"ENOMEDIUM",
-		"ENOMEM",
-		"ENOMSG",
-		"ENONET",
-		"ENOPKG",
-		"ENOPOLICY",
-		"ENOPROTOOPT",
-		"ENOSPC",
-		"ENOSR",
-		"ENOSTR",
-		"ENOSYS",
-		"ENOTBLK",
-		"ENOTCAPABLE",
-		"ENOTCONN",
-		"ENOTDIR",
-		"ENOTEMPTY",
-		"ENOTNAM",
-		"ENOTRECOVERABLE",
-		"ENOTSOCK",
-		"ENOTSUP",
-		"ENOTTY",
-		"ENOTUNIQ",
-		"ENXIO",
-		"EN_SW_CTL_INF",
-		"EN_SW_CTL_PREC",
-		"EN_SW_CTL_ROUND",
-		"EN_SW_DATACHAIN",
-		"EN_SW_DENORM",
-		"EN_SW_INVOP",
-		"EN_SW_OVERFLOW",
-		"EN_SW_PRECLOSS",
-		"EN_SW_UNDERFLOW",
-		"EN_SW_ZERODIV",
-		"EOPNOTSUPP",
-		"EOVERFLOW",
-		"EOWNERDEAD",
-		"EPERM",
-		"EPFNOSUPPORT",
-		"EPIPE",
-		"EPOLLERR",
-		"EPOLLET",
-		"EPOLLHUP",
-		"EPOLLIN",
-		"EPOLLMSG",
-		"EPOLLONESHOT",
-		"EPOLLOUT",
-		"EPOLLPRI",
-		"EPOLLRDBAND",
-		"EPOLLRDHUP",
-		"EPOLLRDNORM",
-		"EPOLLWRBAND",
-		"EPOLLWRNORM",
-		"EPOLL_CLOEXEC",
-		"EPOLL_CTL_ADD",
-		"EPOLL_CTL_DEL",
-		"EPOLL_CTL_MOD",
-		"EPOLL_NONBLOCK",
-		"EPROCLIM",
-		"EPROCUNAVAIL",
-		"EPROGMISMATCH",
-		"EPROGUNAVAIL",
-		"EPROTO",
-		"EPROTONOSUPPORT",
-		"EPROTOTYPE",
-		"EPWROFF",
-		"ERANGE",
-		"EREMCHG",
-		"EREMOTE",
-		"EREMOTEIO",
-		"ERESTART",
-		"ERFKILL",
-		"EROFS",
-		"ERPCMISMATCH",
-		"ERROR_ACCESS_DENIED",
-		"ERROR_ALREADY_EXISTS",
-		"ERROR_BROKEN_PIPE",
-		"ERROR_BUFFER_OVERFLOW",
-		"ERROR_DIR_NOT_EMPTY",
-		"ERROR_ENVVAR_NOT_FOUND",
-		"ERROR_FILE_EXISTS",
-		"ERROR_FILE_NOT_FOUND",
-		"ERROR_HANDLE_EOF",
-		"ERROR_INSUFFICIENT_BUFFER",
-		"ERROR_IO_PENDING",
-		"ERROR_MOD_NOT_FOUND",
-		"ERROR_MORE_DATA",
-		"ERROR_NETNAME_DELETED",
-		"ERROR_NOT_FOUND",
-		"ERROR_NO_MORE_FILES",
-		"ERROR_OPERATION_ABORTED",
-		"ERROR_PATH_NOT_FOUND",
-		"ERROR_PRIVILEGE_NOT_HELD",
-		"ERROR_PROC_NOT_FOUND",
-		"ESHLIBVERS",
-		"ESHUTDOWN",
-		"ESOCKTNOSUPPORT",
-		"ESPIPE",
-		"ESRCH",
-		"ESRMNT",
-		"ESTALE",
-		"ESTRPIPE",
-		"ETHERCAP_JUMBO_MTU",
-		"ETHERCAP_VLAN_HWTAGGING",
-		"ETHERCAP_VLAN_MTU",
-		"ETHERMIN",
-		"ETHERMTU",
-		"ETHERMTU_JUMBO",
-		"ETHERTYPE_8023",
-		"ETHERTYPE_AARP",
-		"ETHERTYPE_ACCTON",
-		"ETHERTYPE_AEONIC",
-		"ETHERTYPE_ALPHA",
-		"ETHERTYPE_AMBER",
-		"ETHERTYPE_AMOEBA",
-		"ETHERTYPE_AOE",
-		"ETHERTYPE_APOLLO",
-		"ETHERTYPE_APOLLODOMAIN",
-		"ETHERTYPE_APPLETALK",
-		"ETHERTYPE_APPLITEK",
-		"ETHERTYPE_ARGONAUT",
-		"ETHERTYPE_ARP",
-		"ETHERTYPE_AT",
-		"ETHERTYPE_ATALK",
-		"ETHERTYPE_ATOMIC",
-		"ETHERTYPE_ATT",
-		"ETHERTYPE_ATTSTANFORD",
-		"ETHERTYPE_AUTOPHON",
-		"ETHERTYPE_AXIS",
-		"ETHERTYPE_BCLOOP",
-		"ETHERTYPE_BOFL",
-		"ETHERTYPE_CABLETRON",
-		"ETHERTYPE_CHAOS",
-		"ETHERTYPE_COMDESIGN",
-		"ETHERTYPE_COMPUGRAPHIC",
-		"ETHERTYPE_COUNTERPOINT",
-		"ETHERTYPE_CRONUS",
-		"ETHERTYPE_CRONUSVLN",
-		"ETHERTYPE_DCA",
-		"ETHERTYPE_DDE",
-		"ETHERTYPE_DEBNI",
-		"ETHERTYPE_DECAM",
-		"ETHERTYPE_DECCUST",
-		"ETHERTYPE_DECDIAG",
-		"ETHERTYPE_DECDNS",
-		"ETHERTYPE_DECDTS",
-		"ETHERTYPE_DECEXPER",
-		"ETHERTYPE_DECLAST",
-		"ETHERTYPE_DECLTM",
-		"ETHERTYPE_DECMUMPS",
-		"ETHERTYPE_DECNETBIOS",
-		"ETHERTYPE_DELTACON",
-		"ETHERTYPE_DIDDLE",
-		"ETHERTYPE_DLOG1",
-		"ETHERTYPE_DLOG2",
-		"ETHERTYPE_DN",
-		"ETHERTYPE_DOGFIGHT",
-		"ETHERTYPE_DSMD",
-		"ETHERTYPE_ECMA",
-		"ETHERTYPE_ENCRYPT",
-		"ETHERTYPE_ES",
-		"ETHERTYPE_EXCELAN",
-		"ETHERTYPE_EXPERDATA",
-		"ETHERTYPE_FLIP",
-		"ETHERTYPE_FLOWCONTROL",
-		"ETHERTYPE_FRARP",
-		"ETHERTYPE_GENDYN",
-		"ETHERTYPE_HAYES",
-		"ETHERTYPE_HIPPI_FP",
-		"ETHERTYPE_HITACHI",
-		"ETHERTYPE_HP",
-		"ETHERTYPE_IEEEPUP",
-		"ETHERTYPE_IEEEPUPAT",
-		"ETHERTYPE_IMLBL",
-		"ETHERTYPE_IMLBLDIAG",
-		"ETHERTYPE_IP",
-		"ETHERTYPE_IPAS",
-		"ETHERTYPE_IPV6",
-		"ETHERTYPE_IPX",
-		"ETHERTYPE_IPXNEW",
-		"ETHERTYPE_KALPANA",
-		"ETHERTYPE_LANBRIDGE",
-		"ETHERTYPE_LANPROBE",
-		"ETHERTYPE_LAT",
-		"ETHERTYPE_LBACK",
-		"ETHERTYPE_LITTLE",
-		"ETHERTYPE_LLDP",
-		"ETHERTYPE_LOGICRAFT",
-		"ETHERTYPE_LOOPBACK",
-		"ETHERTYPE_MATRA",
-		"ETHERTYPE_MAX",
-		"ETHERTYPE_MERIT",
-		"ETHERTYPE_MICP",
-		"ETHERTYPE_MOPDL",
-		"ETHERTYPE_MOPRC",
-		"ETHERTYPE_MOTOROLA",
-		"ETHERTYPE_MPLS",
-		"ETHERTYPE_MPLS_MCAST",
-		"ETHERTYPE_MUMPS",
-		"ETHERTYPE_NBPCC",
-		"ETHERTYPE_NBPCLAIM",
-		"ETHERTYPE_NBPCLREQ",
-		"ETHERTYPE_NBPCLRSP",
-		"ETHERTYPE_NBPCREQ",
-		"ETHERTYPE_NBPCRSP",
-		"ETHERTYPE_NBPDG",
-		"ETHERTYPE_NBPDGB",
-		"ETHERTYPE_NBPDLTE",
-		"ETHERTYPE_NBPRAR",
-		"ETHERTYPE_NBPRAS",
-		"ETHERTYPE_NBPRST",
-		"ETHERTYPE_NBPSCD",
-		"ETHERTYPE_NBPVCD",
-		"ETHERTYPE_NBS",
-		"ETHERTYPE_NCD",
-		"ETHERTYPE_NESTAR",
-		"ETHERTYPE_NETBEUI",
-		"ETHERTYPE_NOVELL",
-		"ETHERTYPE_NS",
-		"ETHERTYPE_NSAT",
-		"ETHERTYPE_NSCOMPAT",
-		"ETHERTYPE_NTRAILER",
-		"ETHERTYPE_OS9",
-		"ETHERTYPE_OS9NET",
-		"ETHERTYPE_PACER",
-		"ETHERTYPE_PAE",
-		"ETHERTYPE_PCS",
-		"ETHERTYPE_PLANNING",
-		"ETHERTYPE_PPP",
-		"ETHERTYPE_PPPOE",
-		"ETHERTYPE_PPPOEDISC",
-		"ETHERTYPE_PRIMENTS",
-		"ETHERTYPE_PUP",
-		"ETHERTYPE_PUPAT",
-		"ETHERTYPE_QINQ",
-		"ETHERTYPE_RACAL",
-		"ETHERTYPE_RATIONAL",
-		"ETHERTYPE_RAWFR",
-		"ETHERTYPE_RCL",
-		"ETHERTYPE_RDP",
-		"ETHERTYPE_RETIX",
-		"ETHERTYPE_REVARP",
-		"ETHERTYPE_SCA",
-		"ETHERTYPE_SECTRA",
-		"ETHERTYPE_SECUREDATA",
-		"ETHERTYPE_SGITW",
-		"ETHERTYPE_SG_BOUNCE",
-		"ETHERTYPE_SG_DIAG",
-		"ETHERTYPE_SG_NETGAMES",
-		"ETHERTYPE_SG_RESV",
-		"ETHERTYPE_SIMNET",
-		"ETHERTYPE_SLOW",
-		"ETHERTYPE_SLOWPROTOCOLS",
-		"ETHERTYPE_SNA",
-		"ETHERTYPE_SNMP",
-		"ETHERTYPE_SONIX",
-		"ETHERTYPE_SPIDER",
-		"ETHERTYPE_SPRITE",
-		"ETHERTYPE_STP",
-		"ETHERTYPE_TALARIS",
-		"ETHERTYPE_TALARISMC",
-		"ETHERTYPE_TCPCOMP",
-		"ETHERTYPE_TCPSM",
-		"ETHERTYPE_TEC",
-		"ETHERTYPE_TIGAN",
-		"ETHERTYPE_TRAIL",
-		"ETHERTYPE_TRANSETHER",
-		"ETHERTYPE_TYMSHARE",
-		"ETHERTYPE_UBBST",
-		"ETHERTYPE_UBDEBUG",
-		"ETHERTYPE_UBDIAGLOOP",
-		"ETHERTYPE_UBDL",
-		"ETHERTYPE_UBNIU",
-		"ETHERTYPE_UBNMC",
-		"ETHERTYPE_VALID",
-		"ETHERTYPE_VARIAN",
-		"ETHERTYPE_VAXELN",
-		"ETHERTYPE_VEECO",
-		"ETHERTYPE_VEXP",
-		"ETHERTYPE_VGLAB",
-		"ETHERTYPE_VINES",
-		"ETHERTYPE_VINESECHO",
-		"ETHERTYPE_VINESLOOP",
-		"ETHERTYPE_VITAL",
-		"ETHERTYPE_VLAN",
-		"ETHERTYPE_VLTLMAN",
-		"ETHERTYPE_VPROD",
-		"ETHERTYPE_VURESERVED",
-		"ETHERTYPE_WATERLOO",
-		"ETHERTYPE_WELLFLEET",
-		"ETHERTYPE_X25",
-		"ETHERTYPE_X75",
-		"ETHERTYPE_XNSSM",
-		"ETHERTYPE_XTP",
-		"ETHER_ADDR_LEN",
-		"ETHER_ALIGN",
-		"ETHER_CRC_LEN",
-		"ETHER_CRC_POLY_BE",
-		"ETHER_CRC_POLY_LE",
-		"ETHER_HDR_LEN",
-		"ETHER_MAX_DIX_LEN",
-		"ETHER_MAX_LEN",
-		"ETHER_MAX_LEN_JUMBO",
-		"ETHER_MIN_LEN",
-		"ETHER_PPPOE_ENCAP_LEN",
-		"ETHER_TYPE_LEN",
-		"ETHER_VLAN_ENCAP_LEN",
-		"ETH_P_1588",
-		"ETH_P_8021Q",
-		"ETH_P_802_2",
-		"ETH_P_802_3",
-		"ETH_P_AARP",
-		"ETH_P_ALL",
-		"ETH_P_AOE",
-		"ETH_P_ARCNET",
-		"ETH_P_ARP",
-		"ETH_P_ATALK",
-		"ETH_P_ATMFATE",
-		"ETH_P_ATMMPOA",
-		"ETH_P_AX25",
-		"ETH_P_BPQ",
-		"ETH_P_CAIF",
-		"ETH_P_CAN",
-		"ETH_P_CONTROL",
-		"ETH_P_CUST",
-		"ETH_P_DDCMP",
-		"ETH_P_DEC",
-		"ETH_P_DIAG",
-		"ETH_P_DNA_DL",
-		"ETH_P_DNA_RC",
-		"ETH_P_DNA_RT",
-		"ETH_P_DSA",
-		"ETH_P_ECONET",
-		"ETH_P_EDSA",
-		"ETH_P_FCOE",
-		"ETH_P_FIP",
-		"ETH_P_HDLC",
-		"ETH_P_IEEE802154",
-		"ETH_P_IEEEPUP",
-		"ETH_P_IEEEPUPAT",
-		"ETH_P_IP",
-		"ETH_P_IPV6",
-		"ETH_P_IPX",
-		"ETH_P_IRDA",
-		"ETH_P_LAT",
-		"ETH_P_LINK_CTL",
-		"ETH_P_LOCALTALK",
-		"ETH_P_LOOP",
-		"ETH_P_MOBITEX",
-		"ETH_P_MPLS_MC",
-		"ETH_P_MPLS_UC",
-		"ETH_P_PAE",
-		"ETH_P_PAUSE",
-		"ETH_P_PHONET",
-		"ETH_P_PPPTALK",
-		"ETH_P_PPP_DISC",
-		"ETH_P_PPP_MP",
-		"ETH_P_PPP_SES",
-		"ETH_P_PUP",
-		"ETH_P_PUPAT",
-		"ETH_P_RARP",
-		"ETH_P_SCA",
-		"ETH_P_SLOW",
-		"ETH_P_SNAP",
-		"ETH_P_TEB",
-		"ETH_P_TIPC",
-		"ETH_P_TRAILER",
-		"ETH_P_TR_802_2",
-		"ETH_P_WAN_PPP",
-		"ETH_P_WCCP",
-		"ETH_P_X25",
-		"ETIME",
-		"ETIMEDOUT",
-		"ETOOMANYREFS",
-		"ETXTBSY",
-		"EUCLEAN",
-		"EUNATCH",
-		"EUSERS",
-		"EVFILT_AIO",
-		"EVFILT_FS",
-		"EVFILT_LIO",
-		"EVFILT_MACHPORT",
-		"EVFILT_PROC",
-		"EVFILT_READ",
-		"EVFILT_SIGNAL",
-		"EVFILT_SYSCOUNT",
-		"EVFILT_THREADMARKER",
-		"EVFILT_TIMER",
-		"EVFILT_USER",
-		"EVFILT_VM",
-		"EVFILT_VNODE",
-		"EVFILT_WRITE",
-		"EV_ADD",
-		"EV_CLEAR",
-		"EV_DELETE",
-		"EV_DISABLE",
-		"EV_DISPATCH",
-		"EV_DROP",
-		"EV_ENABLE",
-		"EV_EOF",
-		"EV_ERROR",
-		"EV_FLAG0",
-		"EV_FLAG1",
-		"EV_ONESHOT",
-		"EV_OOBAND",
-		"EV_POLL",
-		"EV_RECEIPT",
-		"EV_SYSFLAGS",
-		"EWINDOWS",
-		"EWOULDBLOCK",
-		"EXDEV",
-		"EXFULL",
-		"EXTA",
-		"EXTB",
-		"EXTPROC",
-		"Environ",
-		"EpollCreate",
-		"EpollCreate1",
-		"EpollCtl",
-		"EpollEvent",
-		"EpollWait",
-		"Errno",
-		"EscapeArg",
-		"Exchangedata",
-		"Exec",
-		"Exit",
-		"ExitProcess",
-		"FD_CLOEXEC",
-		"FD_SETSIZE",
-		"FILE_ACTION_ADDED",
-		"FILE_ACTION_MODIFIED",
-		"FILE_ACTION_REMOVED",
-		"FILE_ACTION_RENAMED_NEW_NAME",
-		"FILE_ACTION_RENAMED_OLD_NAME",
-		"FILE_APPEND_DATA",
-		"FILE_ATTRIBUTE_ARCHIVE",
-		"FILE_ATTRIBUTE_DIRECTORY",
-		"FILE_ATTRIBUTE_HIDDEN",
-		"FILE_ATTRIBUTE_NORMAL",
-		"FILE_ATTRIBUTE_READONLY",
-		"FILE_ATTRIBUTE_REPARSE_POINT",
-		"FILE_ATTRIBUTE_SYSTEM",
-		"FILE_BEGIN",
-		"FILE_CURRENT",
-		"FILE_END",
-		"FILE_FLAG_BACKUP_SEMANTICS",
-		"FILE_FLAG_OPEN_REPARSE_POINT",
-		"FILE_FLAG_OVERLAPPED",
-		"FILE_LIST_DIRECTORY",
-		"FILE_MAP_COPY",
-		"FILE_MAP_EXECUTE",
-		"FILE_MAP_READ",
-		"FILE_MAP_WRITE",
-		"FILE_NOTIFY_CHANGE_ATTRIBUTES",
-		"FILE_NOTIFY_CHANGE_CREATION",
-		"FILE_NOTIFY_CHANGE_DIR_NAME",
-		"FILE_NOTIFY_CHANGE_FILE_NAME",
-		"FILE_NOTIFY_CHANGE_LAST_ACCESS",
-		"FILE_NOTIFY_CHANGE_LAST_WRITE",
-		"FILE_NOTIFY_CHANGE_SIZE",
-		"FILE_SHARE_DELETE",
-		"FILE_SHARE_READ",
-		"FILE_SHARE_WRITE",
-		"FILE_SKIP_COMPLETION_PORT_ON_SUCCESS",
-		"FILE_SKIP_SET_EVENT_ON_HANDLE",
-		"FILE_TYPE_CHAR",
-		"FILE_TYPE_DISK",
-		"FILE_TYPE_PIPE",
-		"FILE_TYPE_REMOTE",
-		"FILE_TYPE_UNKNOWN",
-		"FILE_WRITE_ATTRIBUTES",
-		"FLUSHO",
-		"FORMAT_MESSAGE_ALLOCATE_BUFFER",
-		"FORMAT_MESSAGE_ARGUMENT_ARRAY",
-		"FORMAT_MESSAGE_FROM_HMODULE",
-		"FORMAT_MESSAGE_FROM_STRING",
-		"FORMAT_MESSAGE_FROM_SYSTEM",
-		"FORMAT_MESSAGE_IGNORE_INSERTS",
-		"FORMAT_MESSAGE_MAX_WIDTH_MASK",
-		"FSCTL_GET_REPARSE_POINT",
-		"F_ADDFILESIGS",
-		"F_ADDSIGS",
-		"F_ALLOCATEALL",
-		"F_ALLOCATECONTIG",
-		"F_CANCEL",
-		"F_CHKCLEAN",
-		"F_CLOSEM",
-		"F_DUP2FD",
-		"F_DUP2FD_CLOEXEC",
-		"F_DUPFD",
-		"F_DUPFD_CLOEXEC",
-		"F_EXLCK",
-		"F_FLUSH_DATA",
-		"F_FREEZE_FS",
-		"F_FSCTL",
-		"F_FSDIRMASK",
-		"F_FSIN",
-		"F_FSINOUT",
-		"F_FSOUT",
-		"F_FSPRIV",
-		"F_FSVOID",
-		"F_FULLFSYNC",
-		"F_GETFD",
-		"F_GETFL",
-		"F_GETLEASE",
-		"F_GETLK",
-		"F_GETLK64",
-		"F_GETLKPID",
-		"F_GETNOSIGPIPE",
-		"F_GETOWN",
-		"F_GETOWN_EX",
-		"F_GETPATH",
-		"F_GETPATH_MTMINFO",
-		"F_GETPIPE_SZ",
-		"F_GETPROTECTIONCLASS",
-		"F_GETSIG",
-		"F_GLOBAL_NOCACHE",
-		"F_LOCK",
-		"F_LOG2PHYS",
-		"F_LOG2PHYS_EXT",
-		"F_MARKDEPENDENCY",
-		"F_MAXFD",
-		"F_NOCACHE",
-		"F_NODIRECT",
-		"F_NOTIFY",
-		"F_OGETLK",
-		"F_OK",
-		"F_OSETLK",
-		"F_OSETLKW",
-		"F_PARAM_MASK",
-		"F_PARAM_MAX",
-		"F_PATHPKG_CHECK",
-		"F_PEOFPOSMODE",
-		"F_PREALLOCATE",
-		"F_RDADVISE",
-		"F_RDAHEAD",
-		"F_RDLCK",
-		"F_READAHEAD",
-		"F_READBOOTSTRAP",
-		"F_SETBACKINGSTORE",
-		"F_SETFD",
-		"F_SETFL",
-		"F_SETLEASE",
-		"F_SETLK",
-		"F_SETLK64",
-		"F_SETLKW",
-		"F_SETLKW64",
-		"F_SETLK_REMOTE",
-		"F_SETNOSIGPIPE",
-		"F_SETOWN",
-		"F_SETOWN_EX",
-		"F_SETPIPE_SZ",
-		"F_SETPROTECTIONCLASS",
-		"F_SETSIG",
-		"F_SETSIZE",
-		"F_SHLCK",
-		"F_TEST",
-		"F_THAW_FS",
-		"F_TLOCK",
-		"F_ULOCK",
-		"F_UNLCK",
-		"F_UNLCKSYS",
-		"F_VOLPOSMODE",
-		"F_WRITEBOOTSTRAP",
-		"F_WRLCK",
-		"Faccessat",
-		"Fallocate",
-		"Fbootstraptransfer_t",
-		"Fchdir",
-		"Fchflags",
-		"Fchmod",
-		"Fchmodat",
-		"Fchown",
-		"Fchownat",
-		"FcntlFlock",
-		"FdSet",
-		"Fdatasync",
-		"FileNotifyInformation",
-		"Filetime",
-		"FindClose",
-		"FindFirstFile",
-		"FindNextFile",
-		"Flock",
-		"Flock_t",
-		"FlushBpf",
-		"FlushFileBuffers",
-		"FlushViewOfFile",
-		"ForkExec",
-		"ForkLock",
-		"FormatMessage",
-		"Fpathconf",
-		"FreeAddrInfoW",
-		"FreeEnvironmentStrings",
-		"FreeLibrary",
-		"Fsid",
-		"Fstat",
-		"Fstatat",
-		"Fstatfs",
-		"Fstore_t",
-		"Fsync",
-		"Ftruncate",
-		"FullPath",
-		"Futimes",
-		"Futimesat",
-		"GENERIC_ALL",
-		"GENERIC_EXECUTE",
-		"GENERIC_READ",
-		"GENERIC_WRITE",
-		"GUID",
-		"GetAcceptExSockaddrs",
-		"GetAdaptersInfo",
-		"GetAddrInfoW",
-		"GetCommandLine",
-		"GetComputerName",
-		"GetConsoleMode",
-		"GetCurrentDirectory",
-		"GetCurrentProcess",
-		"GetEnvironmentStrings",
-		"GetEnvironmentVariable",
-		"GetExitCodeProcess",
-		"GetFileAttributes",
-		"GetFileAttributesEx",
-		"GetFileExInfoStandard",
-		"GetFileExMaxInfoLevel",
-		"GetFileInformationByHandle",
-		"GetFileType",
-		"GetFullPathName",
-		"GetHostByName",
-		"GetIfEntry",
-		"GetLastError",
-		"GetLengthSid",
-		"GetLongPathName",
-		"GetProcAddress",
-		"GetProcessTimes",
-		"GetProtoByName",
-		"GetQueuedCompletionStatus",
-		"GetServByName",
-		"GetShortPathName",
-		"GetStartupInfo",
-		"GetStdHandle",
-		"GetSystemTimeAsFileTime",
-		"GetTempPath",
-		"GetTimeZoneInformation",
-		"GetTokenInformation",
-		"GetUserNameEx",
-		"GetUserProfileDirectory",
-		"GetVersion",
-		"Getcwd",
-		"Getdents",
-		"Getdirentries",
-		"Getdtablesize",
-		"Getegid",
-		"Getenv",
-		"Geteuid",
-		"Getfsstat",
-		"Getgid",
-		"Getgroups",
-		"Getpagesize",
-		"Getpeername",
-		"Getpgid",
-		"Getpgrp",
-		"Getpid",
-		"Getppid",
-		"Getpriority",
-		"Getrlimit",
-		"Getrusage",
-		"Getsid",
-		"Getsockname",
-		"Getsockopt",
-		"GetsockoptByte",
-		"GetsockoptICMPv6Filter",
-		"GetsockoptIPMreq",
-		"GetsockoptIPMreqn",
-		"GetsockoptIPv6MTUInfo",
-		"GetsockoptIPv6Mreq",
-		"GetsockoptInet4Addr",
-		"GetsockoptInt",
-		"GetsockoptUcred",
-		"Gettid",
-		"Gettimeofday",
-		"Getuid",
-		"Getwd",
-		"Getxattr",
-		"HANDLE_FLAG_INHERIT",
-		"HKEY_CLASSES_ROOT",
-		"HKEY_CURRENT_CONFIG",
-		"HKEY_CURRENT_USER",
-		"HKEY_DYN_DATA",
-		"HKEY_LOCAL_MACHINE",
-		"HKEY_PERFORMANCE_DATA",
-		"HKEY_USERS",
-		"HUPCL",
-		"Handle",
-		"Hostent",
-		"ICANON",
-		"ICMP6_FILTER",
-		"ICMPV6_FILTER",
-		"ICMPv6Filter",
-		"ICRNL",
-		"IEXTEN",
-		"IFAN_ARRIVAL",
-		"IFAN_DEPARTURE",
-		"IFA_ADDRESS",
-		"IFA_ANYCAST",
-		"IFA_BROADCAST",
-		"IFA_CACHEINFO",
-		"IFA_F_DADFAILED",
-		"IFA_F_DEPRECATED",
-		"IFA_F_HOMEADDRESS",
-		"IFA_F_NODAD",
-		"IFA_F_OPTIMISTIC",
-		"IFA_F_PERMANENT",
-		"IFA_F_SECONDARY",
-		"IFA_F_TEMPORARY",
-		"IFA_F_TENTATIVE",
-		"IFA_LABEL",
-		"IFA_LOCAL",
-		"IFA_MAX",
-		"IFA_MULTICAST",
-		"IFA_ROUTE",
-		"IFA_UNSPEC",
-		"IFF_ALLMULTI",
-		"IFF_ALTPHYS",
-		"IFF_AUTOMEDIA",
-		"IFF_BROADCAST",
-		"IFF_CANTCHANGE",
-		"IFF_CANTCONFIG",
-		"IFF_DEBUG",
-		"IFF_DRV_OACTIVE",
-		"IFF_DRV_RUNNING",
-		"IFF_DYING",
-		"IFF_DYNAMIC",
-		"IFF_LINK0",
-		"IFF_LINK1",
-		"IFF_LINK2",
-		"IFF_LOOPBACK",
-		"IFF_MASTER",
-		"IFF_MONITOR",
-		"IFF_MULTICAST",
-		"IFF_NOARP",
-		"IFF_NOTRAILERS",
-		"IFF_NO_PI",
-		"IFF_OACTIVE",
-		"IFF_ONE_QUEUE",
-		"IFF_POINTOPOINT",
-		"IFF_POINTTOPOINT",
-		"IFF_PORTSEL",
-		"IFF_PPROMISC",
-		"IFF_PROMISC",
-		"IFF_RENAMING",
-		"IFF_RUNNING",
-		"IFF_SIMPLEX",
-		"IFF_SLAVE",
-		"IFF_SMART",
-		"IFF_STATICARP",
-		"IFF_TAP",
-		"IFF_TUN",
-		"IFF_TUN_EXCL",
-		"IFF_UP",
-		"IFF_VNET_HDR",
-		"IFLA_ADDRESS",
-		"IFLA_BROADCAST",
-		"IFLA_COST",
-		"IFLA_IFALIAS",
-		"IFLA_IFNAME",
-		"IFLA_LINK",
-		"IFLA_LINKINFO",
-		"IFLA_LINKMODE",
-		"IFLA_MAP",
-		"IFLA_MASTER",
-		"IFLA_MAX",
-		"IFLA_MTU",
-		"IFLA_NET_NS_PID",
-		"IFLA_OPERSTATE",
-		"IFLA_PRIORITY",
-		"IFLA_PROTINFO",
-		"IFLA_QDISC",
-		"IFLA_STATS",
-		"IFLA_TXQLEN",
-		"IFLA_UNSPEC",
-		"IFLA_WEIGHT",
-		"IFLA_WIRELESS",
-		"IFNAMSIZ",
-		"IFT_1822",
-		"IFT_A12MPPSWITCH",
-		"IFT_AAL2",
-		"IFT_AAL5",
-		"IFT_ADSL",
-		"IFT_AFLANE8023",
-		"IFT_AFLANE8025",
-		"IFT_ARAP",
-		"IFT_ARCNET",
-		"IFT_ARCNETPLUS",
-		"IFT_ASYNC",
-		"IFT_ATM",
-		"IFT_ATMDXI",
-		"IFT_ATMFUNI",
-		"IFT_ATMIMA",
-		"IFT_ATMLOGICAL",
-		"IFT_ATMRADIO",
-		"IFT_ATMSUBINTERFACE",
-		"IFT_ATMVCIENDPT",
-		"IFT_ATMVIRTUAL",
-		"IFT_BGPPOLICYACCOUNTING",
-		"IFT_BLUETOOTH",
-		"IFT_BRIDGE",
-		"IFT_BSC",
-		"IFT_CARP",
-		"IFT_CCTEMUL",
-		"IFT_CELLULAR",
-		"IFT_CEPT",
-		"IFT_CES",
-		"IFT_CHANNEL",
-		"IFT_CNR",
-		"IFT_COFFEE",
-		"IFT_COMPOSITELINK",
-		"IFT_DCN",
-		"IFT_DIGITALPOWERLINE",
-		"IFT_DIGITALWRAPPEROVERHEADCHANNEL",
-		"IFT_DLSW",
-		"IFT_DOCSCABLEDOWNSTREAM",
-		"IFT_DOCSCABLEMACLAYER",
-		"IFT_DOCSCABLEUPSTREAM",
-		"IFT_DOCSCABLEUPSTREAMCHANNEL",
-		"IFT_DS0",
-		"IFT_DS0BUNDLE",
-		"IFT_DS1FDL",
-		"IFT_DS3",
-		"IFT_DTM",
-		"IFT_DUMMY",
-		"IFT_DVBASILN",
-		"IFT_DVBASIOUT",
-		"IFT_DVBRCCDOWNSTREAM",
-		"IFT_DVBRCCMACLAYER",
-		"IFT_DVBRCCUPSTREAM",
-		"IFT_ECONET",
-		"IFT_ENC",
-		"IFT_EON",
-		"IFT_EPLRS",
-		"IFT_ESCON",
-		"IFT_ETHER",
-		"IFT_FAITH",
-		"IFT_FAST",
-		"IFT_FASTETHER",
-		"IFT_FASTETHERFX",
-		"IFT_FDDI",
-		"IFT_FIBRECHANNEL",
-		"IFT_FRAMERELAYINTERCONNECT",
-		"IFT_FRAMERELAYMPI",
-		"IFT_FRDLCIENDPT",
-		"IFT_FRELAY",
-		"IFT_FRELAYDCE",
-		"IFT_FRF16MFRBUNDLE",
-		"IFT_FRFORWARD",
-		"IFT_G703AT2MB",
-		"IFT_G703AT64K",
-		"IFT_GIF",
-		"IFT_GIGABITETHERNET",
-		"IFT_GR303IDT",
-		"IFT_GR303RDT",
-		"IFT_H323GATEKEEPER",
-		"IFT_H323PROXY",
-		"IFT_HDH1822",
-		"IFT_HDLC",
-		"IFT_HDSL2",
-		"IFT_HIPERLAN2",
-		"IFT_HIPPI",
-		"IFT_HIPPIINTERFACE",
-		"IFT_HOSTPAD",
-		"IFT_HSSI",
-		"IFT_HY",
-		"IFT_IBM370PARCHAN",
-		"IFT_IDSL",
-		"IFT_IEEE1394",
-		"IFT_IEEE80211",
-		"IFT_IEEE80212",
-		"IFT_IEEE8023ADLAG",
-		"IFT_IFGSN",
-		"IFT_IMT",
-		"IFT_INFINIBAND",
-		"IFT_INTERLEAVE",
-		"IFT_IP",
-		"IFT_IPFORWARD",
-		"IFT_IPOVERATM",
-		"IFT_IPOVERCDLC",
-		"IFT_IPOVERCLAW",
-		"IFT_IPSWITCH",
-		"IFT_IPXIP",
-		"IFT_ISDN",
-		"IFT_ISDNBASIC",
-		"IFT_ISDNPRIMARY",
-		"IFT_ISDNS",
-		"IFT_ISDNU",
-		"IFT_ISO88022LLC",
-		"IFT_ISO88023",
-		"IFT_ISO88024",
-		"IFT_ISO88025",
-		"IFT_ISO88025CRFPINT",
-		"IFT_ISO88025DTR",
-		"IFT_ISO88025FIBER",
-		"IFT_ISO88026",
-		"IFT_ISUP",
-		"IFT_L2VLAN",
-		"IFT_L3IPVLAN",
-		"IFT_L3IPXVLAN",
-		"IFT_LAPB",
-		"IFT_LAPD",
-		"IFT_LAPF",
-		"IFT_LINEGROUP",
-		"IFT_LOCALTALK",
-		"IFT_LOOP",
-		"IFT_MEDIAMAILOVERIP",
-		"IFT_MFSIGLINK",
-		"IFT_MIOX25",
-		"IFT_MODEM",
-		"IFT_MPC",
-		"IFT_MPLS",
-		"IFT_MPLSTUNNEL",
-		"IFT_MSDSL",
-		"IFT_MVL",
-		"IFT_MYRINET",
-		"IFT_NFAS",
-		"IFT_NSIP",
-		"IFT_OPTICALCHANNEL",
-		"IFT_OPTICALTRANSPORT",
-		"IFT_OTHER",
-		"IFT_P10",
-		"IFT_P80",
-		"IFT_PARA",
-		"IFT_PDP",
-		"IFT_PFLOG",
-		"IFT_PFLOW",
-		"IFT_PFSYNC",
-		"IFT_PLC",
-		"IFT_PON155",
-		"IFT_PON622",
-		"IFT_POS",
-		"IFT_PPP",
-		"IFT_PPPMULTILINKBUNDLE",
-		"IFT_PROPATM",
-		"IFT_PROPBWAP2MP",
-		"IFT_PROPCNLS",
-		"IFT_PROPDOCSWIRELESSDOWNSTREAM",
-		"IFT_PROPDOCSWIRELESSMACLAYER",
-		"IFT_PROPDOCSWIRELESSUPSTREAM",
-		"IFT_PROPMUX",
-		"IFT_PROPVIRTUAL",
-		"IFT_PROPWIRELESSP2P",
-		"IFT_PTPSERIAL",
-		"IFT_PVC",
-		"IFT_Q2931",
-		"IFT_QLLC",
-		"IFT_RADIOMAC",
-		"IFT_RADSL",
-		"IFT_REACHDSL",
-		"IFT_RFC1483",
-		"IFT_RS232",
-		"IFT_RSRB",
-		"IFT_SDLC",
-		"IFT_SDSL",
-		"IFT_SHDSL",
-		"IFT_SIP",
-		"IFT_SIPSIG",
-		"IFT_SIPTG",
-		"IFT_SLIP",
-		"IFT_SMDSDXI",
-		"IFT_SMDSICIP",
-		"IFT_SONET",
-		"IFT_SONETOVERHEADCHANNEL",
-		"IFT_SONETPATH",
-		"IFT_SONETVT",
-		"IFT_SRP",
-		"IFT_SS7SIGLINK",
-		"IFT_STACKTOSTACK",
-		"IFT_STARLAN",
-		"IFT_STF",
-		"IFT_T1",
-		"IFT_TDLC",
-		"IFT_TELINK",
-		"IFT_TERMPAD",
-		"IFT_TR008",
-		"IFT_TRANSPHDLC",
-		"IFT_TUNNEL",
-		"IFT_ULTRA",
-		"IFT_USB",
-		"IFT_V11",
-		"IFT_V35",
-		"IFT_V36",
-		"IFT_V37",
-		"IFT_VDSL",
-		"IFT_VIRTUALIPADDRESS",
-		"IFT_VIRTUALTG",
-		"IFT_VOICEDID",
-		"IFT_VOICEEM",
-		"IFT_VOICEEMFGD",
-		"IFT_VOICEENCAP",
-		"IFT_VOICEFGDEANA",
-		"IFT_VOICEFXO",
-		"IFT_VOICEFXS",
-		"IFT_VOICEOVERATM",
-		"IFT_VOICEOVERCABLE",
-		"IFT_VOICEOVERFRAMERELAY",
-		"IFT_VOICEOVERIP",
-		"IFT_X213",
-		"IFT_X25",
-		"IFT_X25DDN",
-		"IFT_X25HUNTGROUP",
-		"IFT_X25MLP",
-		"IFT_X25PLE",
-		"IFT_XETHER",
-		"IGNBRK",
-		"IGNCR",
-		"IGNORE",
-		"IGNPAR",
-		"IMAXBEL",
-		"INFINITE",
-		"INLCR",
-		"INPCK",
-		"INVALID_FILE_ATTRIBUTES",
-		"IN_ACCESS",
-		"IN_ALL_EVENTS",
-		"IN_ATTRIB",
-		"IN_CLASSA_HOST",
-		"IN_CLASSA_MAX",
-		"IN_CLASSA_NET",
-		"IN_CLASSA_NSHIFT",
-		"IN_CLASSB_HOST",
-		"IN_CLASSB_MAX",
-		"IN_CLASSB_NET",
-		"IN_CLASSB_NSHIFT",
-		"IN_CLASSC_HOST",
-		"IN_CLASSC_NET",
-		"IN_CLASSC_NSHIFT",
-		"IN_CLASSD_HOST",
-		"IN_CLASSD_NET",
-		"IN_CLASSD_NSHIFT",
-		"IN_CLOEXEC",
-		"IN_CLOSE",
-		"IN_CLOSE_NOWRITE",
-		"IN_CLOSE_WRITE",
-		"IN_CREATE",
-		"IN_DELETE",
-		"IN_DELETE_SELF",
-		"IN_DONT_FOLLOW",
-		"IN_EXCL_UNLINK",
-		"IN_IGNORED",
-		"IN_ISDIR",
-		"IN_LINKLOCALNETNUM",
-		"IN_LOOPBACKNET",
-		"IN_MASK_ADD",
-		"IN_MODIFY",
-		"IN_MOVE",
-		"IN_MOVED_FROM",
-		"IN_MOVED_TO",
-		"IN_MOVE_SELF",
-		"IN_NONBLOCK",
-		"IN_ONESHOT",
-		"IN_ONLYDIR",
-		"IN_OPEN",
-		"IN_Q_OVERFLOW",
-		"IN_RFC3021_HOST",
-		"IN_RFC3021_MASK",
-		"IN_RFC3021_NET",
-		"IN_RFC3021_NSHIFT",
-		"IN_UNMOUNT",
-		"IOC_IN",
-		"IOC_INOUT",
-		"IOC_OUT",
-		"IOC_VENDOR",
-		"IOC_WS2",
-		"IO_REPARSE_TAG_SYMLINK",
-		"IPMreq",
-		"IPMreqn",
-		"IPPROTO_3PC",
-		"IPPROTO_ADFS",
-		"IPPROTO_AH",
-		"IPPROTO_AHIP",
-		"IPPROTO_APES",
-		"IPPROTO_ARGUS",
-		"IPPROTO_AX25",
-		"IPPROTO_BHA",
-		"IPPROTO_BLT",
-		"IPPROTO_BRSATMON",
-		"IPPROTO_CARP",
-		"IPPROTO_CFTP",
-		"IPPROTO_CHAOS",
-		"IPPROTO_CMTP",
-		"IPPROTO_COMP",
-		"IPPROTO_CPHB",
-		"IPPROTO_CPNX",
-		"IPPROTO_DCCP",
-		"IPPROTO_DDP",
-		"IPPROTO_DGP",
-		"IPPROTO_DIVERT",
-		"IPPROTO_DIVERT_INIT",
-		"IPPROTO_DIVERT_RESP",
-		"IPPROTO_DONE",
-		"IPPROTO_DSTOPTS",
-		"IPPROTO_EGP",
-		"IPPROTO_EMCON",
-		"IPPROTO_ENCAP",
-		"IPPROTO_EON",
-		"IPPROTO_ESP",
-		"IPPROTO_ETHERIP",
-		"IPPROTO_FRAGMENT",
-		"IPPROTO_GGP",
-		"IPPROTO_GMTP",
-		"IPPROTO_GRE",
-		"IPPROTO_HELLO",
-		"IPPROTO_HMP",
-		"IPPROTO_HOPOPTS",
-		"IPPROTO_ICMP",
-		"IPPROTO_ICMPV6",
-		"IPPROTO_IDP",
-		"IPPROTO_IDPR",
-		"IPPROTO_IDRP",
-		"IPPROTO_IGMP",
-		"IPPROTO_IGP",
-		"IPPROTO_IGRP",
-		"IPPROTO_IL",
-		"IPPROTO_INLSP",
-		"IPPROTO_INP",
-		"IPPROTO_IP",
-		"IPPROTO_IPCOMP",
-		"IPPROTO_IPCV",
-		"IPPROTO_IPEIP",
-		"IPPROTO_IPIP",
-		"IPPROTO_IPPC",
-		"IPPROTO_IPV4",
-		"IPPROTO_IPV6",
-		"IPPROTO_IPV6_ICMP",
-		"IPPROTO_IRTP",
-		"IPPROTO_KRYPTOLAN",
-		"IPPROTO_LARP",
-		"IPPROTO_LEAF1",
-		"IPPROTO_LEAF2",
-		"IPPROTO_MAX",
-		"IPPROTO_MAXID",
-		"IPPROTO_MEAS",
-		"IPPROTO_MH",
-		"IPPROTO_MHRP",
-		"IPPROTO_MICP",
-		"IPPROTO_MOBILE",
-		"IPPROTO_MPLS",
-		"IPPROTO_MTP",
-		"IPPROTO_MUX",
-		"IPPROTO_ND",
-		"IPPROTO_NHRP",
-		"IPPROTO_NONE",
-		"IPPROTO_NSP",
-		"IPPROTO_NVPII",
-		"IPPROTO_OLD_DIVERT",
-		"IPPROTO_OSPFIGP",
-		"IPPROTO_PFSYNC",
-		"IPPROTO_PGM",
-		"IPPROTO_PIGP",
-		"IPPROTO_PIM",
-		"IPPROTO_PRM",
-		"IPPROTO_PUP",
-		"IPPROTO_PVP",
-		"IPPROTO_RAW",
-		"IPPROTO_RCCMON",
-		"IPPROTO_RDP",
-		"IPPROTO_ROUTING",
-		"IPPROTO_RSVP",
-		"IPPROTO_RVD",
-		"IPPROTO_SATEXPAK",
-		"IPPROTO_SATMON",
-		"IPPROTO_SCCSP",
-		"IPPROTO_SCTP",
-		"IPPROTO_SDRP",
-		"IPPROTO_SEND",
-		"IPPROTO_SEP",
-		"IPPROTO_SKIP",
-		"IPPROTO_SPACER",
-		"IPPROTO_SRPC",
-		"IPPROTO_ST",
-		"IPPROTO_SVMTP",
-		"IPPROTO_SWIPE",
-		"IPPROTO_TCF",
-		"IPPROTO_TCP",
-		"IPPROTO_TLSP",
-		"IPPROTO_TP",
-		"IPPROTO_TPXX",
-		"IPPROTO_TRUNK1",
-		"IPPROTO_TRUNK2",
-		"IPPROTO_TTP",
-		"IPPROTO_UDP",
-		"IPPROTO_UDPLITE",
-		"IPPROTO_VINES",
-		"IPPROTO_VISA",
-		"IPPROTO_VMTP",
-		"IPPROTO_VRRP",
-		"IPPROTO_WBEXPAK",
-		"IPPROTO_WBMON",
-		"IPPROTO_WSN",
-		"IPPROTO_XNET",
-		"IPPROTO_XTP",
-		"IPV6_2292DSTOPTS",
-		"IPV6_2292HOPLIMIT",
-		"IPV6_2292HOPOPTS",
-		"IPV6_2292NEXTHOP",
-		"IPV6_2292PKTINFO",
-		"IPV6_2292PKTOPTIONS",
-		"IPV6_2292RTHDR",
-		"IPV6_ADDRFORM",
-		"IPV6_ADD_MEMBERSHIP",
-		"IPV6_AUTHHDR",
-		"IPV6_AUTH_LEVEL",
-		"IPV6_AUTOFLOWLABEL",
-		"IPV6_BINDANY",
-		"IPV6_BINDV6ONLY",
-		"IPV6_BOUND_IF",
-		"IPV6_CHECKSUM",
-		"IPV6_DEFAULT_MULTICAST_HOPS",
-		"IPV6_DEFAULT_MULTICAST_LOOP",
-		"IPV6_DEFHLIM",
-		"IPV6_DONTFRAG",
-		"IPV6_DROP_MEMBERSHIP",
-		"IPV6_DSTOPTS",
-		"IPV6_ESP_NETWORK_LEVEL",
-		"IPV6_ESP_TRANS_LEVEL",
-		"IPV6_FAITH",
-		"IPV6_FLOWINFO_MASK",
-		"IPV6_FLOWLABEL_MASK",
-		"IPV6_FRAGTTL",
-		"IPV6_FW_ADD",
-		"IPV6_FW_DEL",
-		"IPV6_FW_FLUSH",
-		"IPV6_FW_GET",
-		"IPV6_FW_ZERO",
-		"IPV6_HLIMDEC",
-		"IPV6_HOPLIMIT",
-		"IPV6_HOPOPTS",
-		"IPV6_IPCOMP_LEVEL",
-		"IPV6_IPSEC_POLICY",
-		"IPV6_JOIN_ANYCAST",
-		"IPV6_JOIN_GROUP",
-		"IPV6_LEAVE_ANYCAST",
-		"IPV6_LEAVE_GROUP",
-		"IPV6_MAXHLIM",
-		"IPV6_MAXOPTHDR",
-		"IPV6_MAXPACKET",
-		"IPV6_MAX_GROUP_SRC_FILTER",
-		"IPV6_MAX_MEMBERSHIPS",
-		"IPV6_MAX_SOCK_SRC_FILTER",
-		"IPV6_MIN_MEMBERSHIPS",
-		"IPV6_MMTU",
-		"IPV6_MSFILTER",
-		"IPV6_MTU",
-		"IPV6_MTU_DISCOVER",
-		"IPV6_MULTICAST_HOPS",
-		"IPV6_MULTICAST_IF",
-		"IPV6_MULTICAST_LOOP",
-		"IPV6_NEXTHOP",
-		"IPV6_OPTIONS",
-		"IPV6_PATHMTU",
-		"IPV6_PIPEX",
-		"IPV6_PKTINFO",
-		"IPV6_PMTUDISC_DO",
-		"IPV6_PMTUDISC_DONT",
-		"IPV6_PMTUDISC_PROBE",
-		"IPV6_PMTUDISC_WANT",
-		"IPV6_PORTRANGE",
-		"IPV6_PORTRANGE_DEFAULT",
-		"IPV6_PORTRANGE_HIGH",
-		"IPV6_PORTRANGE_LOW",
-		"IPV6_PREFER_TEMPADDR",
-		"IPV6_RECVDSTOPTS",
-		"IPV6_RECVDSTPORT",
-		"IPV6_RECVERR",
-		"IPV6_RECVHOPLIMIT",
-		"IPV6_RECVHOPOPTS",
-		"IPV6_RECVPATHMTU",
-		"IPV6_RECVPKTINFO",
-		"IPV6_RECVRTHDR",
-		"IPV6_RECVTCLASS",
-		"IPV6_ROUTER_ALERT",
-		"IPV6_RTABLE",
-		"IPV6_RTHDR",
-		"IPV6_RTHDRDSTOPTS",
-		"IPV6_RTHDR_LOOSE",
-		"IPV6_RTHDR_STRICT",
-		"IPV6_RTHDR_TYPE_0",
-		"IPV6_RXDSTOPTS",
-		"IPV6_RXHOPOPTS",
-		"IPV6_SOCKOPT_RESERVED1",
-		"IPV6_TCLASS",
-		"IPV6_UNICAST_HOPS",
-		"IPV6_USE_MIN_MTU",
-		"IPV6_V6ONLY",
-		"IPV6_VERSION",
-		"IPV6_VERSION_MASK",
-		"IPV6_XFRM_POLICY",
-		"IP_ADD_MEMBERSHIP",
-		"IP_ADD_SOURCE_MEMBERSHIP",
-		"IP_AUTH_LEVEL",
-		"IP_BINDANY",
-		"IP_BLOCK_SOURCE",
-		"IP_BOUND_IF",
-		"IP_DEFAULT_MULTICAST_LOOP",
-		"IP_DEFAULT_MULTICAST_TTL",
-		"IP_DF",
-		"IP_DIVERTFL",
-		"IP_DONTFRAG",
-		"IP_DROP_MEMBERSHIP",
-		"IP_DROP_SOURCE_MEMBERSHIP",
-		"IP_DUMMYNET3",
-		"IP_DUMMYNET_CONFIGURE",
-		"IP_DUMMYNET_DEL",
-		"IP_DUMMYNET_FLUSH",
-		"IP_DUMMYNET_GET",
-		"IP_EF",
-		"IP_ERRORMTU",
-		"IP_ESP_NETWORK_LEVEL",
-		"IP_ESP_TRANS_LEVEL",
-		"IP_FAITH",
-		"IP_FREEBIND",
-		"IP_FW3",
-		"IP_FW_ADD",
-		"IP_FW_DEL",
-		"IP_FW_FLUSH",
-		"IP_FW_GET",
-		"IP_FW_NAT_CFG",
-		"IP_FW_NAT_DEL",
-		"IP_FW_NAT_GET_CONFIG",
-		"IP_FW_NAT_GET_LOG",
-		"IP_FW_RESETLOG",
-		"IP_FW_TABLE_ADD",
-		"IP_FW_TABLE_DEL",
-		"IP_FW_TABLE_FLUSH",
-		"IP_FW_TABLE_GETSIZE",
-		"IP_FW_TABLE_LIST",
-		"IP_FW_ZERO",
-		"IP_HDRINCL",
-		"IP_IPCOMP_LEVEL",
-		"IP_IPSECFLOWINFO",
-		"IP_IPSEC_LOCAL_AUTH",
-		"IP_IPSEC_LOCAL_CRED",
-		"IP_IPSEC_LOCAL_ID",
-		"IP_IPSEC_POLICY",
-		"IP_IPSEC_REMOTE_AUTH",
-		"IP_IPSEC_REMOTE_CRED",
-		"IP_IPSEC_REMOTE_ID",
-		"IP_MAXPACKET",
-		"IP_MAX_GROUP_SRC_FILTER",
-		"IP_MAX_MEMBERSHIPS",
-		"IP_MAX_SOCK_MUTE_FILTER",
-		"IP_MAX_SOCK_SRC_FILTER",
-		"IP_MAX_SOURCE_FILTER",
-		"IP_MF",
-		"IP_MINFRAGSIZE",
-		"IP_MINTTL",
-		"IP_MIN_MEMBERSHIPS",
-		"IP_MSFILTER",
-		"IP_MSS",
-		"IP_MTU",
-		"IP_MTU_DISCOVER",
-		"IP_MULTICAST_IF",
-		"IP_MULTICAST_IFINDEX",
-		"IP_MULTICAST_LOOP",
-		"IP_MULTICAST_TTL",
-		"IP_MULTICAST_VIF",
-		"IP_NAT__XXX",
-		"IP_OFFMASK",
-		"IP_OLD_FW_ADD",
-		"IP_OLD_FW_DEL",
-		"IP_OLD_FW_FLUSH",
-		"IP_OLD_FW_GET",
-		"IP_OLD_FW_RESETLOG",
-		"IP_OLD_FW_ZERO",
-		"IP_ONESBCAST",
-		"IP_OPTIONS",
-		"IP_ORIGDSTADDR",
-		"IP_PASSSEC",
-		"IP_PIPEX",
-		"IP_PKTINFO",
-		"IP_PKTOPTIONS",
-		"IP_PMTUDISC",
-		"IP_PMTUDISC_DO",
-		"IP_PMTUDISC_DONT",
-		"IP_PMTUDISC_PROBE",
-		"IP_PMTUDISC_WANT",
-		"IP_PORTRANGE",
-		"IP_PORTRANGE_DEFAULT",
-		"IP_PORTRANGE_HIGH",
-		"IP_PORTRANGE_LOW",
-		"IP_RECVDSTADDR",
-		"IP_RECVDSTPORT",
-		"IP_RECVERR",
-		"IP_RECVIF",
-		"IP_RECVOPTS",
-		"IP_RECVORIGDSTADDR",
-		"IP_RECVPKTINFO",
-		"IP_RECVRETOPTS",
-		"IP_RECVRTABLE",
-		"IP_RECVTOS",
-		"IP_RECVTTL",
-		"IP_RETOPTS",
-		"IP_RF",
-		"IP_ROUTER_ALERT",
-		"IP_RSVP_OFF",
-		"IP_RSVP_ON",
-		"IP_RSVP_VIF_OFF",
-		"IP_RSVP_VIF_ON",
-		"IP_RTABLE",
-		"IP_SENDSRCADDR",
-		"IP_STRIPHDR",
-		"IP_TOS",
-		"IP_TRAFFIC_MGT_BACKGROUND",
-		"IP_TRANSPARENT",
-		"IP_TTL",
-		"IP_UNBLOCK_SOURCE",
-		"IP_XFRM_POLICY",
-		"IPv6MTUInfo",
-		"IPv6Mreq",
-		"ISIG",
-		"ISTRIP",
-		"IUCLC",
-		"IUTF8",
-		"IXANY",
-		"IXOFF",
-		"IXON",
-		"IfAddrmsg",
-		"IfAnnounceMsghdr",
-		"IfData",
-		"IfInfomsg",
-		"IfMsghdr",
-		"IfaMsghdr",
-		"IfmaMsghdr",
-		"IfmaMsghdr2",
-		"ImplementsGetwd",
-		"Inet4Pktinfo",
-		"Inet6Pktinfo",
-		"InotifyAddWatch",
-		"InotifyEvent",
-		"InotifyInit",
-		"InotifyInit1",
-		"InotifyRmWatch",
-		"InterfaceAddrMessage",
-		"InterfaceAnnounceMessage",
-		"InterfaceInfo",
-		"InterfaceMessage",
-		"InterfaceMulticastAddrMessage",
-		"InvalidHandle",
-		"Ioperm",
-		"Iopl",
-		"Iovec",
-		"IpAdapterInfo",
-		"IpAddrString",
-		"IpAddressString",
-		"IpMaskString",
-		"Issetugid",
-		"KEY_ALL_ACCESS",
-		"KEY_CREATE_LINK",
-		"KEY_CREATE_SUB_KEY",
-		"KEY_ENUMERATE_SUB_KEYS",
-		"KEY_EXECUTE",
-		"KEY_NOTIFY",
-		"KEY_QUERY_VALUE",
-		"KEY_READ",
-		"KEY_SET_VALUE",
-		"KEY_WOW64_32KEY",
-		"KEY_WOW64_64KEY",
-		"KEY_WRITE",
-		"Kevent",
-		"Kevent_t",
-		"Kill",
-		"Klogctl",
-		"Kqueue",
-		"LANG_ENGLISH",
-		"LAYERED_PROTOCOL",
-		"LCNT_OVERLOAD_FLUSH",
-		"LINUX_REBOOT_CMD_CAD_OFF",
-		"LINUX_REBOOT_CMD_CAD_ON",
-		"LINUX_REBOOT_CMD_HALT",
-		"LINUX_REBOOT_CMD_KEXEC",
-		"LINUX_REBOOT_CMD_POWER_OFF",
-		"LINUX_REBOOT_CMD_RESTART",
-		"LINUX_REBOOT_CMD_RESTART2",
-		"LINUX_REBOOT_CMD_SW_SUSPEND",
-		"LINUX_REBOOT_MAGIC1",
-		"LINUX_REBOOT_MAGIC2",
-		"LOCK_EX",
-		"LOCK_NB",
-		"LOCK_SH",
-		"LOCK_UN",
-		"LazyDLL",
-		"LazyProc",
-		"Lchown",
-		"Linger",
-		"Link",
-		"Listen",
-		"Listxattr",
-		"LoadCancelIoEx",
-		"LoadConnectEx",
-		"LoadCreateSymbolicLink",
-		"LoadDLL",
-		"LoadGetAddrInfo",
-		"LoadLibrary",
-		"LoadSetFileCompletionNotificationModes",
-		"LocalFree",
-		"Log2phys_t",
-		"LookupAccountName",
-		"LookupAccountSid",
-		"LookupSID",
-		"LsfJump",
-		"LsfSocket",
-		"LsfStmt",
-		"Lstat",
-		"MADV_AUTOSYNC",
-		"MADV_CAN_REUSE",
-		"MADV_CORE",
-		"MADV_DOFORK",
-		"MADV_DONTFORK",
-		"MADV_DONTNEED",
-		"MADV_FREE",
-		"MADV_FREE_REUSABLE",
-		"MADV_FREE_REUSE",
-		"MADV_HUGEPAGE",
-		"MADV_HWPOISON",
-		"MADV_MERGEABLE",
-		"MADV_NOCORE",
-		"MADV_NOHUGEPAGE",
-		"MADV_NORMAL",
-		"MADV_NOSYNC",
-		"MADV_PROTECT",
-		"MADV_RANDOM",
-		"MADV_REMOVE",
-		"MADV_SEQUENTIAL",
-		"MADV_SPACEAVAIL",
-		"MADV_UNMERGEABLE",
-		"MADV_WILLNEED",
-		"MADV_ZERO_WIRED_PAGES",
-		"MAP_32BIT",
-		"MAP_ALIGNED_SUPER",
-		"MAP_ALIGNMENT_16MB",
-		"MAP_ALIGNMENT_1TB",
-		"MAP_ALIGNMENT_256TB",
-		"MAP_ALIGNMENT_4GB",
-		"MAP_ALIGNMENT_64KB",
-		"MAP_ALIGNMENT_64PB",
-		"MAP_ALIGNMENT_MASK",
-		"MAP_ALIGNMENT_SHIFT",
-		"MAP_ANON",
-		"MAP_ANONYMOUS",
-		"MAP_COPY",
-		"MAP_DENYWRITE",
-		"MAP_EXECUTABLE",
-		"MAP_FILE",
-		"MAP_FIXED",
-		"MAP_FLAGMASK",
-		"MAP_GROWSDOWN",
-		"MAP_HASSEMAPHORE",
-		"MAP_HUGETLB",
-		"MAP_INHERIT",
-		"MAP_INHERIT_COPY",
-		"MAP_INHERIT_DEFAULT",
-		"MAP_INHERIT_DONATE_COPY",
-		"MAP_INHERIT_NONE",
-		"MAP_INHERIT_SHARE",
-		"MAP_JIT",
-		"MAP_LOCKED",
-		"MAP_NOCACHE",
-		"MAP_NOCORE",
-		"MAP_NOEXTEND",
-		"MAP_NONBLOCK",
-		"MAP_NORESERVE",
-		"MAP_NOSYNC",
-		"MAP_POPULATE",
-		"MAP_PREFAULT_READ",
-		"MAP_PRIVATE",
-		"MAP_RENAME",
-		"MAP_RESERVED0080",
-		"MAP_RESERVED0100",
-		"MAP_SHARED",
-		"MAP_STACK",
-		"MAP_TRYFIXED",
-		"MAP_TYPE",
-		"MAP_WIRED",
-		"MAXIMUM_REPARSE_DATA_BUFFER_SIZE",
-		"MAXLEN_IFDESCR",
-		"MAXLEN_PHYSADDR",
-		"MAX_ADAPTER_ADDRESS_LENGTH",
-		"MAX_ADAPTER_DESCRIPTION_LENGTH",
-		"MAX_ADAPTER_NAME_LENGTH",
-		"MAX_COMPUTERNAME_LENGTH",
-		"MAX_INTERFACE_NAME_LEN",
-		"MAX_LONG_PATH",
-		"MAX_PATH",
-		"MAX_PROTOCOL_CHAIN",
-		"MCL_CURRENT",
-		"MCL_FUTURE",
-		"MNT_DETACH",
-		"MNT_EXPIRE",
-		"MNT_FORCE",
-		"MSG_BCAST",
-		"MSG_CMSG_CLOEXEC",
-		"MSG_COMPAT",
-		"MSG_CONFIRM",
-		"MSG_CONTROLMBUF",
-		"MSG_CTRUNC",
-		"MSG_DONTROUTE",
-		"MSG_DONTWAIT",
-		"MSG_EOF",
-		"MSG_EOR",
-		"MSG_ERRQUEUE",
-		"MSG_FASTOPEN",
-		"MSG_FIN",
-		"MSG_FLUSH",
-		"MSG_HAVEMORE",
-		"MSG_HOLD",
-		"MSG_IOVUSRSPACE",
-		"MSG_LENUSRSPACE",
-		"MSG_MCAST",
-		"MSG_MORE",
-		"MSG_NAMEMBUF",
-		"MSG_NBIO",
-		"MSG_NEEDSA",
-		"MSG_NOSIGNAL",
-		"MSG_NOTIFICATION",
-		"MSG_OOB",
-		"MSG_PEEK",
-		"MSG_PROXY",
-		"MSG_RCVMORE",
-		"MSG_RST",
-		"MSG_SEND",
-		"MSG_SYN",
-		"MSG_TRUNC",
-		"MSG_TRYHARD",
-		"MSG_USERFLAGS",
-		"MSG_WAITALL",
-		"MSG_WAITFORONE",
-		"MSG_WAITSTREAM",
-		"MS_ACTIVE",
-		"MS_ASYNC",
-		"MS_BIND",
-		"MS_DEACTIVATE",
-		"MS_DIRSYNC",
-		"MS_INVALIDATE",
-		"MS_I_VERSION",
-		"MS_KERNMOUNT",
-		"MS_KILLPAGES",
-		"MS_MANDLOCK",
-		"MS_MGC_MSK",
-		"MS_MGC_VAL",
-		"MS_MOVE",
-		"MS_NOATIME",
-		"MS_NODEV",
-		"MS_NODIRATIME",
-		"MS_NOEXEC",
-		"MS_NOSUID",
-		"MS_NOUSER",
-		"MS_POSIXACL",
-		"MS_PRIVATE",
-		"MS_RDONLY",
-		"MS_REC",
-		"MS_RELATIME",
-		"MS_REMOUNT",
-		"MS_RMT_MASK",
-		"MS_SHARED",
-		"MS_SILENT",
-		"MS_SLAVE",
-		"MS_STRICTATIME",
-		"MS_SYNC",
-		"MS_SYNCHRONOUS",
-		"MS_UNBINDABLE",
-		"Madvise",
-		"MapViewOfFile",
-		"MaxTokenInfoClass",
-		"Mclpool",
-		"MibIfRow",
-		"Mkdir",
-		"Mkdirat",
-		"Mkfifo",
-		"Mknod",
-		"Mknodat",
-		"Mlock",
-		"Mlockall",
-		"Mmap",
-		"Mount",
-		"MoveFile",
-		"Mprotect",
-		"Msghdr",
-		"Munlock",
-		"Munlockall",
-		"Munmap",
-		"MustLoadDLL",
-		"NAME_MAX",
-		"NETLINK_ADD_MEMBERSHIP",
-		"NETLINK_AUDIT",
-		"NETLINK_BROADCAST_ERROR",
-		"NETLINK_CONNECTOR",
-		"NETLINK_DNRTMSG",
-		"NETLINK_DROP_MEMBERSHIP",
-		"NETLINK_ECRYPTFS",
-		"NETLINK_FIB_LOOKUP",
-		"NETLINK_FIREWALL",
-		"NETLINK_GENERIC",
-		"NETLINK_INET_DIAG",
-		"NETLINK_IP6_FW",
-		"NETLINK_ISCSI",
-		"NETLINK_KOBJECT_UEVENT",
-		"NETLINK_NETFILTER",
-		"NETLINK_NFLOG",
-		"NETLINK_NO_ENOBUFS",
-		"NETLINK_PKTINFO",
-		"NETLINK_RDMA",
-		"NETLINK_ROUTE",
-		"NETLINK_SCSITRANSPORT",
-		"NETLINK_SELINUX",
-		"NETLINK_UNUSED",
-		"NETLINK_USERSOCK",
-		"NETLINK_XFRM",
-		"NET_RT_DUMP",
-		"NET_RT_DUMP2",
-		"NET_RT_FLAGS",
-		"NET_RT_IFLIST",
-		"NET_RT_IFLIST2",
-		"NET_RT_IFLISTL",
-		"NET_RT_IFMALIST",
-		"NET_RT_MAXID",
-		"NET_RT_OIFLIST",
-		"NET_RT_OOIFLIST",
-		"NET_RT_STAT",
-		"NET_RT_STATS",
-		"NET_RT_TABLE",
-		"NET_RT_TRASH",
-		"NLA_ALIGNTO",
-		"NLA_F_NESTED",
-		"NLA_F_NET_BYTEORDER",
-		"NLA_HDRLEN",
-		"NLMSG_ALIGNTO",
-		"NLMSG_DONE",
-		"NLMSG_ERROR",
-		"NLMSG_HDRLEN",
-		"NLMSG_MIN_TYPE",
-		"NLMSG_NOOP",
-		"NLMSG_OVERRUN",
-		"NLM_F_ACK",
-		"NLM_F_APPEND",
-		"NLM_F_ATOMIC",
-		"NLM_F_CREATE",
-		"NLM_F_DUMP",
-		"NLM_F_ECHO",
-		"NLM_F_EXCL",
-		"NLM_F_MATCH",
-		"NLM_F_MULTI",
-		"NLM_F_REPLACE",
-		"NLM_F_REQUEST",
-		"NLM_F_ROOT",
-		"NOFLSH",
-		"NOTE_ABSOLUTE",
-		"NOTE_ATTRIB",
-		"NOTE_CHILD",
-		"NOTE_DELETE",
-		"NOTE_EOF",
-		"NOTE_EXEC",
-		"NOTE_EXIT",
-		"NOTE_EXITSTATUS",
-		"NOTE_EXTEND",
-		"NOTE_FFAND",
-		"NOTE_FFCOPY",
-		"NOTE_FFCTRLMASK",
-		"NOTE_FFLAGSMASK",
-		"NOTE_FFNOP",
-		"NOTE_FFOR",
-		"NOTE_FORK",
-		"NOTE_LINK",
-		"NOTE_LOWAT",
-		"NOTE_NONE",
-		"NOTE_NSECONDS",
-		"NOTE_PCTRLMASK",
-		"NOTE_PDATAMASK",
-		"NOTE_REAP",
-		"NOTE_RENAME",
-		"NOTE_RESOURCEEND",
-		"NOTE_REVOKE",
-		"NOTE_SECONDS",
-		"NOTE_SIGNAL",
-		"NOTE_TRACK",
-		"NOTE_TRACKERR",
-		"NOTE_TRIGGER",
-		"NOTE_TRUNCATE",
-		"NOTE_USECONDS",
-		"NOTE_VM_ERROR",
-		"NOTE_VM_PRESSURE",
-		"NOTE_VM_PRESSURE_SUDDEN_TERMINATE",
-		"NOTE_VM_PRESSURE_TERMINATE",
-		"NOTE_WRITE",
-		"NameCanonical",
-		"NameCanonicalEx",
-		"NameDisplay",
-		"NameDnsDomain",
-		"NameFullyQualifiedDN",
-		"NameSamCompatible",
-		"NameServicePrincipal",
-		"NameUniqueId",
-		"NameUnknown",
-		"NameUserPrincipal",
-		"Nanosleep",
-		"NetApiBufferFree",
-		"NetGetJoinInformation",
-		"NetSetupDomainName",
-		"NetSetupUnjoined",
-		"NetSetupUnknownStatus",
-		"NetSetupWorkgroupName",
-		"NetUserGetInfo",
-		"NetlinkMessage",
-		"NetlinkRIB",
-		"NetlinkRouteAttr",
-		"NetlinkRouteRequest",
-		"NewCallback",
-		"NewCallbackCDecl",
-		"NewLazyDLL",
-		"NlAttr",
-		"NlMsgerr",
-		"NlMsghdr",
-		"NsecToFiletime",
-		"NsecToTimespec",
-		"NsecToTimeval",
-		"Ntohs",
-		"OCRNL",
-		"OFDEL",
-		"OFILL",
-		"OFIOGETBMAP",
-		"OID_PKIX_KP_SERVER_AUTH",
-		"OID_SERVER_GATED_CRYPTO",
-		"OID_SGC_NETSCAPE",
-		"OLCUC",
-		"ONLCR",
-		"ONLRET",
-		"ONOCR",
-		"ONOEOT",
-		"OPEN_ALWAYS",
-		"OPEN_EXISTING",
-		"OPOST",
-		"O_ACCMODE",
-		"O_ALERT",
-		"O_ALT_IO",
-		"O_APPEND",
-		"O_ASYNC",
-		"O_CLOEXEC",
-		"O_CREAT",
-		"O_DIRECT",
-		"O_DIRECTORY",
-		"O_DSYNC",
-		"O_EVTONLY",
-		"O_EXCL",
-		"O_EXEC",
-		"O_EXLOCK",
-		"O_FSYNC",
-		"O_LARGEFILE",
-		"O_NDELAY",
-		"O_NOATIME",
-		"O_NOCTTY",
-		"O_NOFOLLOW",
-		"O_NONBLOCK",
-		"O_NOSIGPIPE",
-		"O_POPUP",
-		"O_RDONLY",
-		"O_RDWR",
-		"O_RSYNC",
-		"O_SHLOCK",
-		"O_SYMLINK",
-		"O_SYNC",
-		"O_TRUNC",
-		"O_TTY_INIT",
-		"O_WRONLY",
-		"Open",
-		"OpenCurrentProcessToken",
-		"OpenProcess",
-		"OpenProcessToken",
-		"Openat",
-		"Overlapped",
-		"PACKET_ADD_MEMBERSHIP",
-		"PACKET_BROADCAST",
-		"PACKET_DROP_MEMBERSHIP",
-		"PACKET_FASTROUTE",
-		"PACKET_HOST",
-		"PACKET_LOOPBACK",
-		"PACKET_MR_ALLMULTI",
-		"PACKET_MR_MULTICAST",
-		"PACKET_MR_PROMISC",
-		"PACKET_MULTICAST",
-		"PACKET_OTHERHOST",
-		"PACKET_OUTGOING",
-		"PACKET_RECV_OUTPUT",
-		"PACKET_RX_RING",
-		"PACKET_STATISTICS",
-		"PAGE_EXECUTE_READ",
-		"PAGE_EXECUTE_READWRITE",
-		"PAGE_EXECUTE_WRITECOPY",
-		"PAGE_READONLY",
-		"PAGE_READWRITE",
-		"PAGE_WRITECOPY",
-		"PARENB",
-		"PARMRK",
-		"PARODD",
-		"PENDIN",
-		"PFL_HIDDEN",
-		"PFL_MATCHES_PROTOCOL_ZERO",
-		"PFL_MULTIPLE_PROTO_ENTRIES",
-		"PFL_NETWORKDIRECT_PROVIDER",
-		"PFL_RECOMMENDED_PROTO_ENTRY",
-		"PF_FLUSH",
-		"PKCS_7_ASN_ENCODING",
-		"PMC5_PIPELINE_FLUSH",
-		"PRIO_PGRP",
-		"PRIO_PROCESS",
-		"PRIO_USER",
-		"PRI_IOFLUSH",
-		"PROCESS_QUERY_INFORMATION",
-		"PROCESS_TERMINATE",
-		"PROT_EXEC",
-		"PROT_GROWSDOWN",
-		"PROT_GROWSUP",
-		"PROT_NONE",
-		"PROT_READ",
-		"PROT_WRITE",
-		"PROV_DH_SCHANNEL",
-		"PROV_DSS",
-		"PROV_DSS_DH",
-		"PROV_EC_ECDSA_FULL",
-		"PROV_EC_ECDSA_SIG",
-		"PROV_EC_ECNRA_FULL",
-		"PROV_EC_ECNRA_SIG",
-		"PROV_FORTEZZA",
-		"PROV_INTEL_SEC",
-		"PROV_MS_EXCHANGE",
-		"PROV_REPLACE_OWF",
-		"PROV_RNG",
-		"PROV_RSA_AES",
-		"PROV_RSA_FULL",
-		"PROV_RSA_SCHANNEL",
-		"PROV_RSA_SIG",
-		"PROV_SPYRUS_LYNKS",
-		"PROV_SSL",
-		"PR_CAPBSET_DROP",
-		"PR_CAPBSET_READ",
-		"PR_CLEAR_SECCOMP_FILTER",
-		"PR_ENDIAN_BIG",
-		"PR_ENDIAN_LITTLE",
-		"PR_ENDIAN_PPC_LITTLE",
-		"PR_FPEMU_NOPRINT",
-		"PR_FPEMU_SIGFPE",
-		"PR_FP_EXC_ASYNC",
-		"PR_FP_EXC_DISABLED",
-		"PR_FP_EXC_DIV",
-		"PR_FP_EXC_INV",
-		"PR_FP_EXC_NONRECOV",
-		"PR_FP_EXC_OVF",
-		"PR_FP_EXC_PRECISE",
-		"PR_FP_EXC_RES",
-		"PR_FP_EXC_SW_ENABLE",
-		"PR_FP_EXC_UND",
-		"PR_GET_DUMPABLE",
-		"PR_GET_ENDIAN",
-		"PR_GET_FPEMU",
-		"PR_GET_FPEXC",
-		"PR_GET_KEEPCAPS",
-		"PR_GET_NAME",
-		"PR_GET_PDEATHSIG",
-		"PR_GET_SECCOMP",
-		"PR_GET_SECCOMP_FILTER",
-		"PR_GET_SECUREBITS",
-		"PR_GET_TIMERSLACK",
-		"PR_GET_TIMING",
-		"PR_GET_TSC",
-		"PR_GET_UNALIGN",
-		"PR_MCE_KILL",
-		"PR_MCE_KILL_CLEAR",
-		"PR_MCE_KILL_DEFAULT",
-		"PR_MCE_KILL_EARLY",
-		"PR_MCE_KILL_GET",
-		"PR_MCE_KILL_LATE",
-		"PR_MCE_KILL_SET",
-		"PR_SECCOMP_FILTER_EVENT",
-		"PR_SECCOMP_FILTER_SYSCALL",
-		"PR_SET_DUMPABLE",
-		"PR_SET_ENDIAN",
-		"PR_SET_FPEMU",
-		"PR_SET_FPEXC",
-		"PR_SET_KEEPCAPS",
-		"PR_SET_NAME",
-		"PR_SET_PDEATHSIG",
-		"PR_SET_PTRACER",
-		"PR_SET_SECCOMP",
-		"PR_SET_SECCOMP_FILTER",
-		"PR_SET_SECUREBITS",
-		"PR_SET_TIMERSLACK",
-		"PR_SET_TIMING",
-		"PR_SET_TSC",
-		"PR_SET_UNALIGN",
-		"PR_TASK_PERF_EVENTS_DISABLE",
-		"PR_TASK_PERF_EVENTS_ENABLE",
-		"PR_TIMING_STATISTICAL",
-		"PR_TIMING_TIMESTAMP",
-		"PR_TSC_ENABLE",
-		"PR_TSC_SIGSEGV",
-		"PR_UNALIGN_NOPRINT",
-		"PR_UNALIGN_SIGBUS",
-		"PTRACE_ARCH_PRCTL",
-		"PTRACE_ATTACH",
-		"PTRACE_CONT",
-		"PTRACE_DETACH",
-		"PTRACE_EVENT_CLONE",
-		"PTRACE_EVENT_EXEC",
-		"PTRACE_EVENT_EXIT",
-		"PTRACE_EVENT_FORK",
-		"PTRACE_EVENT_VFORK",
-		"PTRACE_EVENT_VFORK_DONE",
-		"PTRACE_GETCRUNCHREGS",
-		"PTRACE_GETEVENTMSG",
-		"PTRACE_GETFPREGS",
-		"PTRACE_GETFPXREGS",
-		"PTRACE_GETHBPREGS",
-		"PTRACE_GETREGS",
-		"PTRACE_GETREGSET",
-		"PTRACE_GETSIGINFO",
-		"PTRACE_GETVFPREGS",
-		"PTRACE_GETWMMXREGS",
-		"PTRACE_GET_THREAD_AREA",
-		"PTRACE_KILL",
-		"PTRACE_OLDSETOPTIONS",
-		"PTRACE_O_MASK",
-		"PTRACE_O_TRACECLONE",
-		"PTRACE_O_TRACEEXEC",
-		"PTRACE_O_TRACEEXIT",
-		"PTRACE_O_TRACEFORK",
-		"PTRACE_O_TRACESYSGOOD",
-		"PTRACE_O_TRACEVFORK",
-		"PTRACE_O_TRACEVFORKDONE",
-		"PTRACE_PEEKDATA",
-		"PTRACE_PEEKTEXT",
-		"PTRACE_PEEKUSR",
-		"PTRACE_POKEDATA",
-		"PTRACE_POKETEXT",
-		"PTRACE_POKEUSR",
-		"PTRACE_SETCRUNCHREGS",
-		"PTRACE_SETFPREGS",
-		"PTRACE_SETFPXREGS",
-		"PTRACE_SETHBPREGS",
-		"PTRACE_SETOPTIONS",
-		"PTRACE_SETREGS",
-		"PTRACE_SETREGSET",
-		"PTRACE_SETSIGINFO",
-		"PTRACE_SETVFPREGS",
-		"PTRACE_SETWMMXREGS",
-		"PTRACE_SET_SYSCALL",
-		"PTRACE_SET_THREAD_AREA",
-		"PTRACE_SINGLEBLOCK",
-		"PTRACE_SINGLESTEP",
-		"PTRACE_SYSCALL",
-		"PTRACE_SYSEMU",
-		"PTRACE_SYSEMU_SINGLESTEP",
-		"PTRACE_TRACEME",
-		"PT_ATTACH",
-		"PT_ATTACHEXC",
-		"PT_CONTINUE",
-		"PT_DATA_ADDR",
-		"PT_DENY_ATTACH",
-		"PT_DETACH",
-		"PT_FIRSTMACH",
-		"PT_FORCEQUOTA",
-		"PT_KILL",
-		"PT_MASK",
-		"PT_READ_D",
-		"PT_READ_I",
-		"PT_READ_U",
-		"PT_SIGEXC",
-		"PT_STEP",
-		"PT_TEXT_ADDR",
-		"PT_TEXT_END_ADDR",
-		"PT_THUPDATE",
-		"PT_TRACE_ME",
-		"PT_WRITE_D",
-		"PT_WRITE_I",
-		"PT_WRITE_U",
-		"ParseDirent",
-		"ParseNetlinkMessage",
-		"ParseNetlinkRouteAttr",
-		"ParseRoutingMessage",
-		"ParseRoutingSockaddr",
-		"ParseSocketControlMessage",
-		"ParseUnixCredentials",
-		"ParseUnixRights",
-		"PathMax",
-		"Pathconf",
-		"Pause",
-		"Pipe",
-		"Pipe2",
-		"PivotRoot",
-		"Pointer",
-		"PostQueuedCompletionStatus",
-		"Pread",
-		"Proc",
-		"ProcAttr",
-		"Process32First",
-		"Process32Next",
-		"ProcessEntry32",
-		"ProcessInformation",
-		"Protoent",
-		"PtraceAttach",
-		"PtraceCont",
-		"PtraceDetach",
-		"PtraceGetEventMsg",
-		"PtraceGetRegs",
-		"PtracePeekData",
-		"PtracePeekText",
-		"PtracePokeData",
-		"PtracePokeText",
-		"PtraceRegs",
-		"PtraceSetOptions",
-		"PtraceSetRegs",
-		"PtraceSingleStep",
-		"PtraceSyscall",
-		"Pwrite",
-		"REG_BINARY",
-		"REG_DWORD",
-		"REG_DWORD_BIG_ENDIAN",
-		"REG_DWORD_LITTLE_ENDIAN",
-		"REG_EXPAND_SZ",
-		"REG_FULL_RESOURCE_DESCRIPTOR",
-		"REG_LINK",
-		"REG_MULTI_SZ",
-		"REG_NONE",
-		"REG_QWORD",
-		"REG_QWORD_LITTLE_ENDIAN",
-		"REG_RESOURCE_LIST",
-		"REG_RESOURCE_REQUIREMENTS_LIST",
-		"REG_SZ",
-		"RLIMIT_AS",
-		"RLIMIT_CORE",
-		"RLIMIT_CPU",
-		"RLIMIT_DATA",
-		"RLIMIT_FSIZE",
-		"RLIMIT_NOFILE",
-		"RLIMIT_STACK",
-		"RLIM_INFINITY",
-		"RTAX_ADVMSS",
-		"RTAX_AUTHOR",
-		"RTAX_BRD",
-		"RTAX_CWND",
-		"RTAX_DST",
-		"RTAX_FEATURES",
-		"RTAX_FEATURE_ALLFRAG",
-		"RTAX_FEATURE_ECN",
-		"RTAX_FEATURE_SACK",
-		"RTAX_FEATURE_TIMESTAMP",
-		"RTAX_GATEWAY",
-		"RTAX_GENMASK",
-		"RTAX_HOPLIMIT",
-		"RTAX_IFA",
-		"RTAX_IFP",
-		"RTAX_INITCWND",
-		"RTAX_INITRWND",
-		"RTAX_LABEL",
-		"RTAX_LOCK",
-		"RTAX_MAX",
-		"RTAX_MTU",
-		"RTAX_NETMASK",
-		"RTAX_REORDERING",
-		"RTAX_RTO_MIN",
-		"RTAX_RTT",
-		"RTAX_RTTVAR",
-		"RTAX_SRC",
-		"RTAX_SRCMASK",
-		"RTAX_SSTHRESH",
-		"RTAX_TAG",
-		"RTAX_UNSPEC",
-		"RTAX_WINDOW",
-		"RTA_ALIGNTO",
-		"RTA_AUTHOR",
-		"RTA_BRD",
-		"RTA_CACHEINFO",
-		"RTA_DST",
-		"RTA_FLOW",
-		"RTA_GATEWAY",
-		"RTA_GENMASK",
-		"RTA_IFA",
-		"RTA_IFP",
-		"RTA_IIF",
-		"RTA_LABEL",
-		"RTA_MAX",
-		"RTA_METRICS",
-		"RTA_MULTIPATH",
-		"RTA_NETMASK",
-		"RTA_OIF",
-		"RTA_PREFSRC",
-		"RTA_PRIORITY",
-		"RTA_SRC",
-		"RTA_SRCMASK",
-		"RTA_TABLE",
-		"RTA_TAG",
-		"RTA_UNSPEC",
-		"RTCF_DIRECTSRC",
-		"RTCF_DOREDIRECT",
-		"RTCF_LOG",
-		"RTCF_MASQ",
-		"RTCF_NAT",
-		"RTCF_VALVE",
-		"RTF_ADDRCLASSMASK",
-		"RTF_ADDRCONF",
-		"RTF_ALLONLINK",
-		"RTF_ANNOUNCE",
-		"RTF_BLACKHOLE",
-		"RTF_BROADCAST",
-		"RTF_CACHE",
-		"RTF_CLONED",
-		"RTF_CLONING",
-		"RTF_CONDEMNED",
-		"RTF_DEFAULT",
-		"RTF_DELCLONE",
-		"RTF_DONE",
-		"RTF_DYNAMIC",
-		"RTF_FLOW",
-		"RTF_FMASK",
-		"RTF_GATEWAY",
-		"RTF_GWFLAG_COMPAT",
-		"RTF_HOST",
-		"RTF_IFREF",
-		"RTF_IFSCOPE",
-		"RTF_INTERFACE",
-		"RTF_IRTT",
-		"RTF_LINKRT",
-		"RTF_LLDATA",
-		"RTF_LLINFO",
-		"RTF_LOCAL",
-		"RTF_MASK",
-		"RTF_MODIFIED",
-		"RTF_MPATH",
-		"RTF_MPLS",
-		"RTF_MSS",
-		"RTF_MTU",
-		"RTF_MULTICAST",
-		"RTF_NAT",
-		"RTF_NOFORWARD",
-		"RTF_NONEXTHOP",
-		"RTF_NOPMTUDISC",
-		"RTF_PERMANENT_ARP",
-		"RTF_PINNED",
-		"RTF_POLICY",
-		"RTF_PRCLONING",
-		"RTF_PROTO1",
-		"RTF_PROTO2",
-		"RTF_PROTO3",
-		"RTF_REINSTATE",
-		"RTF_REJECT",
-		"RTF_RNH_LOCKED",
-		"RTF_SOURCE",
-		"RTF_SRC",
-		"RTF_STATIC",
-		"RTF_STICKY",
-		"RTF_THROW",
-		"RTF_TUNNEL",
-		"RTF_UP",
-		"RTF_USETRAILERS",
-		"RTF_WASCLONED",
-		"RTF_WINDOW",
-		"RTF_XRESOLVE",
-		"RTM_ADD",
-		"RTM_BASE",
-		"RTM_CHANGE",
-		"RTM_CHGADDR",
-		"RTM_DELACTION",
-		"RTM_DELADDR",
-		"RTM_DELADDRLABEL",
-		"RTM_DELETE",
-		"RTM_DELLINK",
-		"RTM_DELMADDR",
-		"RTM_DELNEIGH",
-		"RTM_DELQDISC",
-		"RTM_DELROUTE",
-		"RTM_DELRULE",
-		"RTM_DELTCLASS",
-		"RTM_DELTFILTER",
-		"RTM_DESYNC",
-		"RTM_F_CLONED",
-		"RTM_F_EQUALIZE",
-		"RTM_F_NOTIFY",
-		"RTM_F_PREFIX",
-		"RTM_GET",
-		"RTM_GET2",
-		"RTM_GETACTION",
-		"RTM_GETADDR",
-		"RTM_GETADDRLABEL",
-		"RTM_GETANYCAST",
-		"RTM_GETDCB",
-		"RTM_GETLINK",
-		"RTM_GETMULTICAST",
-		"RTM_GETNEIGH",
-		"RTM_GETNEIGHTBL",
-		"RTM_GETQDISC",
-		"RTM_GETROUTE",
-		"RTM_GETRULE",
-		"RTM_GETTCLASS",
-		"RTM_GETTFILTER",
-		"RTM_IEEE80211",
-		"RTM_IFANNOUNCE",
-		"RTM_IFINFO",
-		"RTM_IFINFO2",
-		"RTM_LLINFO_UPD",
-		"RTM_LOCK",
-		"RTM_LOSING",
-		"RTM_MAX",
-		"RTM_MAXSIZE",
-		"RTM_MISS",
-		"RTM_NEWACTION",
-		"RTM_NEWADDR",
-		"RTM_NEWADDRLABEL",
-		"RTM_NEWLINK",
-		"RTM_NEWMADDR",
-		"RTM_NEWMADDR2",
-		"RTM_NEWNDUSEROPT",
-		"RTM_NEWNEIGH",
-		"RTM_NEWNEIGHTBL",
-		"RTM_NEWPREFIX",
-		"RTM_NEWQDISC",
-		"RTM_NEWROUTE",
-		"RTM_NEWRULE",
-		"RTM_NEWTCLASS",
-		"RTM_NEWTFILTER",
-		"RTM_NR_FAMILIES",
-		"RTM_NR_MSGTYPES",
-		"RTM_OIFINFO",
-		"RTM_OLDADD",
-		"RTM_OLDDEL",
-		"RTM_OOIFINFO",
-		"RTM_REDIRECT",
-		"RTM_RESOLVE",
-		"RTM_RTTUNIT",
-		"RTM_SETDCB",
-		"RTM_SETGATE",
-		"RTM_SETLINK",
-		"RTM_SETNEIGHTBL",
-		"RTM_VERSION",
-		"RTNH_ALIGNTO",
-		"RTNH_F_DEAD",
-		"RTNH_F_ONLINK",
-		"RTNH_F_PERVASIVE",
-		"RTNLGRP_IPV4_IFADDR",
-		"RTNLGRP_IPV4_MROUTE",
-		"RTNLGRP_IPV4_ROUTE",
-		"RTNLGRP_IPV4_RULE",
-		"RTNLGRP_IPV6_IFADDR",
-		"RTNLGRP_IPV6_IFINFO",
-		"RTNLGRP_IPV6_MROUTE",
-		"RTNLGRP_IPV6_PREFIX",
-		"RTNLGRP_IPV6_ROUTE",
-		"RTNLGRP_IPV6_RULE",
-		"RTNLGRP_LINK",
-		"RTNLGRP_ND_USEROPT",
-		"RTNLGRP_NEIGH",
-		"RTNLGRP_NONE",
-		"RTNLGRP_NOTIFY",
-		"RTNLGRP_TC",
-		"RTN_ANYCAST",
-		"RTN_BLACKHOLE",
-		"RTN_BROADCAST",
-		"RTN_LOCAL",
-		"RTN_MAX",
-		"RTN_MULTICAST",
-		"RTN_NAT",
-		"RTN_PROHIBIT",
-		"RTN_THROW",
-		"RTN_UNICAST",
-		"RTN_UNREACHABLE",
-		"RTN_UNSPEC",
-		"RTN_XRESOLVE",
-		"RTPROT_BIRD",
-		"RTPROT_BOOT",
-		"RTPROT_DHCP",
-		"RTPROT_DNROUTED",
-		"RTPROT_GATED",
-		"RTPROT_KERNEL",
-		"RTPROT_MRT",
-		"RTPROT_NTK",
-		"RTPROT_RA",
-		"RTPROT_REDIRECT",
-		"RTPROT_STATIC",
-		"RTPROT_UNSPEC",
-		"RTPROT_XORP",
-		"RTPROT_ZEBRA",
-		"RTV_EXPIRE",
-		"RTV_HOPCOUNT",
-		"RTV_MTU",
-		"RTV_RPIPE",
-		"RTV_RTT",
-		"RTV_RTTVAR",
-		"RTV_SPIPE",
-		"RTV_SSTHRESH",
-		"RTV_WEIGHT",
-		"RT_CACHING_CONTEXT",
-		"RT_CLASS_DEFAULT",
-		"RT_CLASS_LOCAL",
-		"RT_CLASS_MAIN",
-		"RT_CLASS_MAX",
-		"RT_CLASS_UNSPEC",
-		"RT_DEFAULT_FIB",
-		"RT_NORTREF",
-		"RT_SCOPE_HOST",
-		"RT_SCOPE_LINK",
-		"RT_SCOPE_NOWHERE",
-		"RT_SCOPE_SITE",
-		"RT_SCOPE_UNIVERSE",
-		"RT_TABLEID_MAX",
-		"RT_TABLE_COMPAT",
-		"RT_TABLE_DEFAULT",
-		"RT_TABLE_LOCAL",
-		"RT_TABLE_MAIN",
-		"RT_TABLE_MAX",
-		"RT_TABLE_UNSPEC",
-		"RUSAGE_CHILDREN",
-		"RUSAGE_SELF",
-		"RUSAGE_THREAD",
-		"Radvisory_t",
-		"RawConn",
-		"RawSockaddr",
-		"RawSockaddrAny",
-		"RawSockaddrDatalink",
-		"RawSockaddrInet4",
-		"RawSockaddrInet6",
-		"RawSockaddrLinklayer",
-		"RawSockaddrNetlink",
-		"RawSockaddrUnix",
-		"RawSyscall",
-		"RawSyscall6",
-		"Read",
-		"ReadConsole",
-		"ReadDirectoryChanges",
-		"ReadDirent",
-		"ReadFile",
-		"Readlink",
-		"Reboot",
-		"Recvfrom",
-		"Recvmsg",
-		"RegCloseKey",
-		"RegEnumKeyEx",
-		"RegOpenKeyEx",
-		"RegQueryInfoKey",
-		"RegQueryValueEx",
-		"RemoveDirectory",
-		"Removexattr",
-		"Rename",
-		"Renameat",
-		"Revoke",
-		"Rlimit",
-		"Rmdir",
-		"RouteMessage",
-		"RouteRIB",
-		"RoutingMessage",
-		"RtAttr",
-		"RtGenmsg",
-		"RtMetrics",
-		"RtMsg",
-		"RtMsghdr",
-		"RtNexthop",
-		"Rusage",
-		"SCM_BINTIME",
-		"SCM_CREDENTIALS",
-		"SCM_CREDS",
-		"SCM_RIGHTS",
-		"SCM_TIMESTAMP",
-		"SCM_TIMESTAMPING",
-		"SCM_TIMESTAMPNS",
-		"SCM_TIMESTAMP_MONOTONIC",
-		"SHUT_RD",
-		"SHUT_RDWR",
-		"SHUT_WR",
-		"SID",
-		"SIDAndAttributes",
-		"SIGABRT",
-		"SIGALRM",
-		"SIGBUS",
-		"SIGCHLD",
-		"SIGCLD",
-		"SIGCONT",
-		"SIGEMT",
-		"SIGFPE",
-		"SIGHUP",
-		"SIGILL",
-		"SIGINFO",
-		"SIGINT",
-		"SIGIO",
-		"SIGIOT",
-		"SIGKILL",
-		"SIGLIBRT",
-		"SIGLWP",
-		"SIGPIPE",
-		"SIGPOLL",
-		"SIGPROF",
-		"SIGPWR",
-		"SIGQUIT",
-		"SIGSEGV",
-		"SIGSTKFLT",
-		"SIGSTOP",
-		"SIGSYS",
-		"SIGTERM",
-		"SIGTHR",
-		"SIGTRAP",
-		"SIGTSTP",
-		"SIGTTIN",
-		"SIGTTOU",
-		"SIGUNUSED",
-		"SIGURG",
-		"SIGUSR1",
-		"SIGUSR2",
-		"SIGVTALRM",
-		"SIGWINCH",
-		"SIGXCPU",
-		"SIGXFSZ",
-		"SIOCADDDLCI",
-		"SIOCADDMULTI",
-		"SIOCADDRT",
-		"SIOCAIFADDR",
-		"SIOCAIFGROUP",
-		"SIOCALIFADDR",
-		"SIOCARPIPLL",
-		"SIOCATMARK",
-		"SIOCAUTOADDR",
-		"SIOCAUTONETMASK",
-		"SIOCBRDGADD",
-		"SIOCBRDGADDS",
-		"SIOCBRDGARL",
-		"SIOCBRDGDADDR",
-		"SIOCBRDGDEL",
-		"SIOCBRDGDELS",
-		"SIOCBRDGFLUSH",
-		"SIOCBRDGFRL",
-		"SIOCBRDGGCACHE",
-		"SIOCBRDGGFD",
-		"SIOCBRDGGHT",
-		"SIOCBRDGGIFFLGS",
-		"SIOCBRDGGMA",
-		"SIOCBRDGGPARAM",
-		"SIOCBRDGGPRI",
-		"SIOCBRDGGRL",
-		"SIOCBRDGGSIFS",
-		"SIOCBRDGGTO",
-		"SIOCBRDGIFS",
-		"SIOCBRDGRTS",
-		"SIOCBRDGSADDR",
-		"SIOCBRDGSCACHE",
-		"SIOCBRDGSFD",
-		"SIOCBRDGSHT",
-		"SIOCBRDGSIFCOST",
-		"SIOCBRDGSIFFLGS",
-		"SIOCBRDGSIFPRIO",
-		"SIOCBRDGSMA",
-		"SIOCBRDGSPRI",
-		"SIOCBRDGSPROTO",
-		"SIOCBRDGSTO",
-		"SIOCBRDGSTXHC",
-		"SIOCDARP",
-		"SIOCDELDLCI",
-		"SIOCDELMULTI",
-		"SIOCDELRT",
-		"SIOCDEVPRIVATE",
-		"SIOCDIFADDR",
-		"SIOCDIFGROUP",
-		"SIOCDIFPHYADDR",
-		"SIOCDLIFADDR",
-		"SIOCDRARP",
-		"SIOCGARP",
-		"SIOCGDRVSPEC",
-		"SIOCGETKALIVE",
-		"SIOCGETLABEL",
-		"SIOCGETPFLOW",
-		"SIOCGETPFSYNC",
-		"SIOCGETSGCNT",
-		"SIOCGETVIFCNT",
-		"SIOCGETVLAN",
-		"SIOCGHIWAT",
-		"SIOCGIFADDR",
-		"SIOCGIFADDRPREF",
-		"SIOCGIFALIAS",
-		"SIOCGIFALTMTU",
-		"SIOCGIFASYNCMAP",
-		"SIOCGIFBOND",
-		"SIOCGIFBR",
-		"SIOCGIFBRDADDR",
-		"SIOCGIFCAP",
-		"SIOCGIFCONF",
-		"SIOCGIFCOUNT",
-		"SIOCGIFDATA",
-		"SIOCGIFDESCR",
-		"SIOCGIFDEVMTU",
-		"SIOCGIFDLT",
-		"SIOCGIFDSTADDR",
-		"SIOCGIFENCAP",
-		"SIOCGIFFIB",
-		"SIOCGIFFLAGS",
-		"SIOCGIFGATTR",
-		"SIOCGIFGENERIC",
-		"SIOCGIFGMEMB",
-		"SIOCGIFGROUP",
-		"SIOCGIFHARDMTU",
-		"SIOCGIFHWADDR",
-		"SIOCGIFINDEX",
-		"SIOCGIFKPI",
-		"SIOCGIFMAC",
-		"SIOCGIFMAP",
-		"SIOCGIFMEDIA",
-		"SIOCGIFMEM",
-		"SIOCGIFMETRIC",
-		"SIOCGIFMTU",
-		"SIOCGIFNAME",
-		"SIOCGIFNETMASK",
-		"SIOCGIFPDSTADDR",
-		"SIOCGIFPFLAGS",
-		"SIOCGIFPHYS",
-		"SIOCGIFPRIORITY",
-		"SIOCGIFPSRCADDR",
-		"SIOCGIFRDOMAIN",
-		"SIOCGIFRTLABEL",
-		"SIOCGIFSLAVE",
-		"SIOCGIFSTATUS",
-		"SIOCGIFTIMESLOT",
-		"SIOCGIFTXQLEN",
-		"SIOCGIFVLAN",
-		"SIOCGIFWAKEFLAGS",
-		"SIOCGIFXFLAGS",
-		"SIOCGLIFADDR",
-		"SIOCGLIFPHYADDR",
-		"SIOCGLIFPHYRTABLE",
-		"SIOCGLIFPHYTTL",
-		"SIOCGLINKSTR",
-		"SIOCGLOWAT",
-		"SIOCGPGRP",
-		"SIOCGPRIVATE_0",
-		"SIOCGPRIVATE_1",
-		"SIOCGRARP",
-		"SIOCGSPPPPARAMS",
-		"SIOCGSTAMP",
-		"SIOCGSTAMPNS",
-		"SIOCGVH",
-		"SIOCGVNETID",
-		"SIOCIFCREATE",
-		"SIOCIFCREATE2",
-		"SIOCIFDESTROY",
-		"SIOCIFGCLONERS",
-		"SIOCINITIFADDR",
-		"SIOCPROTOPRIVATE",
-		"SIOCRSLVMULTI",
-		"SIOCRTMSG",
-		"SIOCSARP",
-		"SIOCSDRVSPEC",
-		"SIOCSETKALIVE",
-		"SIOCSETLABEL",
-		"SIOCSETPFLOW",
-		"SIOCSETPFSYNC",
-		"SIOCSETVLAN",
-		"SIOCSHIWAT",
-		"SIOCSIFADDR",
-		"SIOCSIFADDRPREF",
-		"SIOCSIFALTMTU",
-		"SIOCSIFASYNCMAP",
-		"SIOCSIFBOND",
-		"SIOCSIFBR",
-		"SIOCSIFBRDADDR",
-		"SIOCSIFCAP",
-		"SIOCSIFDESCR",
-		"SIOCSIFDSTADDR",
-		"SIOCSIFENCAP",
-		"SIOCSIFFIB",
-		"SIOCSIFFLAGS",
-		"SIOCSIFGATTR",
-		"SIOCSIFGENERIC",
-		"SIOCSIFHWADDR",
-		"SIOCSIFHWBROADCAST",
-		"SIOCSIFKPI",
-		"SIOCSIFLINK",
-		"SIOCSIFLLADDR",
-		"SIOCSIFMAC",
-		"SIOCSIFMAP",
-		"SIOCSIFMEDIA",
-		"SIOCSIFMEM",
-		"SIOCSIFMETRIC",
-		"SIOCSIFMTU",
-		"SIOCSIFNAME",
-		"SIOCSIFNETMASK",
-		"SIOCSIFPFLAGS",
-		"SIOCSIFPHYADDR",
-		"SIOCSIFPHYS",
-		"SIOCSIFPRIORITY",
-		"SIOCSIFRDOMAIN",
-		"SIOCSIFRTLABEL",
-		"SIOCSIFRVNET",
-		"SIOCSIFSLAVE",
-		"SIOCSIFTIMESLOT",
-		"SIOCSIFTXQLEN",
-		"SIOCSIFVLAN",
-		"SIOCSIFVNET",
-		"SIOCSIFXFLAGS",
-		"SIOCSLIFPHYADDR",
-		"SIOCSLIFPHYRTABLE",
-		"SIOCSLIFPHYTTL",
-		"SIOCSLINKSTR",
-		"SIOCSLOWAT",
-		"SIOCSPGRP",
-		"SIOCSRARP",
-		"SIOCSSPPPPARAMS",
-		"SIOCSVH",
-		"SIOCSVNETID",
-		"SIOCZIFDATA",
-		"SIO_GET_EXTENSION_FUNCTION_POINTER",
-		"SIO_GET_INTERFACE_LIST",
-		"SIO_KEEPALIVE_VALS",
-		"SIO_UDP_CONNRESET",
-		"SOCK_CLOEXEC",
-		"SOCK_DCCP",
-		"SOCK_DGRAM",
-		"SOCK_FLAGS_MASK",
-		"SOCK_MAXADDRLEN",
-		"SOCK_NONBLOCK",
-		"SOCK_NOSIGPIPE",
-		"SOCK_PACKET",
-		"SOCK_RAW",
-		"SOCK_RDM",
-		"SOCK_SEQPACKET",
-		"SOCK_STREAM",
-		"SOL_AAL",
-		"SOL_ATM",
-		"SOL_DECNET",
-		"SOL_ICMPV6",
-		"SOL_IP",
-		"SOL_IPV6",
-		"SOL_IRDA",
-		"SOL_PACKET",
-		"SOL_RAW",
-		"SOL_SOCKET",
-		"SOL_TCP",
-		"SOL_X25",
-		"SOMAXCONN",
-		"SO_ACCEPTCONN",
-		"SO_ACCEPTFILTER",
-		"SO_ATTACH_FILTER",
-		"SO_BINDANY",
-		"SO_BINDTODEVICE",
-		"SO_BINTIME",
-		"SO_BROADCAST",
-		"SO_BSDCOMPAT",
-		"SO_DEBUG",
-		"SO_DETACH_FILTER",
-		"SO_DOMAIN",
-		"SO_DONTROUTE",
-		"SO_DONTTRUNC",
-		"SO_ERROR",
-		"SO_KEEPALIVE",
-		"SO_LABEL",
-		"SO_LINGER",
-		"SO_LINGER_SEC",
-		"SO_LISTENINCQLEN",
-		"SO_LISTENQLEN",
-		"SO_LISTENQLIMIT",
-		"SO_MARK",
-		"SO_NETPROC",
-		"SO_NKE",
-		"SO_NOADDRERR",
-		"SO_NOHEADER",
-		"SO_NOSIGPIPE",
-		"SO_NOTIFYCONFLICT",
-		"SO_NO_CHECK",
-		"SO_NO_DDP",
-		"SO_NO_OFFLOAD",
-		"SO_NP_EXTENSIONS",
-		"SO_NREAD",
-		"SO_NWRITE",
-		"SO_OOBINLINE",
-		"SO_OVERFLOWED",
-		"SO_PASSCRED",
-		"SO_PASSSEC",
-		"SO_PEERCRED",
-		"SO_PEERLABEL",
-		"SO_PEERNAME",
-		"SO_PEERSEC",
-		"SO_PRIORITY",
-		"SO_PROTOCOL",
-		"SO_PROTOTYPE",
-		"SO_RANDOMPORT",
-		"SO_RCVBUF",
-		"SO_RCVBUFFORCE",
-		"SO_RCVLOWAT",
-		"SO_RCVTIMEO",
-		"SO_RESTRICTIONS",
-		"SO_RESTRICT_DENYIN",
-		"SO_RESTRICT_DENYOUT",
-		"SO_RESTRICT_DENYSET",
-		"SO_REUSEADDR",
-		"SO_REUSEPORT",
-		"SO_REUSESHAREUID",
-		"SO_RTABLE",
-		"SO_RXQ_OVFL",
-		"SO_SECURITY_AUTHENTICATION",
-		"SO_SECURITY_ENCRYPTION_NETWORK",
-		"SO_SECURITY_ENCRYPTION_TRANSPORT",
-		"SO_SETFIB",
-		"SO_SNDBUF",
-		"SO_SNDBUFFORCE",
-		"SO_SNDLOWAT",
-		"SO_SNDTIMEO",
-		"SO_SPLICE",
-		"SO_TIMESTAMP",
-		"SO_TIMESTAMPING",
-		"SO_TIMESTAMPNS",
-		"SO_TIMESTAMP_MONOTONIC",
-		"SO_TYPE",
-		"SO_UPCALLCLOSEWAIT",
-		"SO_UPDATE_ACCEPT_CONTEXT",
-		"SO_UPDATE_CONNECT_CONTEXT",
-		"SO_USELOOPBACK",
-		"SO_USER_COOKIE",
-		"SO_VENDOR",
-		"SO_WANTMORE",
-		"SO_WANTOOBFLAG",
-		"SSLExtraCertChainPolicyPara",
-		"STANDARD_RIGHTS_ALL",
-		"STANDARD_RIGHTS_EXECUTE",
-		"STANDARD_RIGHTS_READ",
-		"STANDARD_RIGHTS_REQUIRED",
-		"STANDARD_RIGHTS_WRITE",
-		"STARTF_USESHOWWINDOW",
-		"STARTF_USESTDHANDLES",
-		"STD_ERROR_HANDLE",
-		"STD_INPUT_HANDLE",
-		"STD_OUTPUT_HANDLE",
-		"SUBLANG_ENGLISH_US",
-		"SW_FORCEMINIMIZE",
-		"SW_HIDE",
-		"SW_MAXIMIZE",
-		"SW_MINIMIZE",
-		"SW_NORMAL",
-		"SW_RESTORE",
-		"SW_SHOW",
-		"SW_SHOWDEFAULT",
-		"SW_SHOWMAXIMIZED",
-		"SW_SHOWMINIMIZED",
-		"SW_SHOWMINNOACTIVE",
-		"SW_SHOWNA",
-		"SW_SHOWNOACTIVATE",
-		"SW_SHOWNORMAL",
-		"SYMBOLIC_LINK_FLAG_DIRECTORY",
-		"SYNCHRONIZE",
-		"SYSCTL_VERSION",
-		"SYSCTL_VERS_0",
-		"SYSCTL_VERS_1",
-		"SYSCTL_VERS_MASK",
-		"SYS_ABORT2",
-		"SYS_ACCEPT",
-		"SYS_ACCEPT4",
-		"SYS_ACCEPT_NOCANCEL",
-		"SYS_ACCESS",
-		"SYS_ACCESS_EXTENDED",
-		"SYS_ACCT",
-		"SYS_ADD_KEY",
-		"SYS_ADD_PROFIL",
-		"SYS_ADJFREQ",
-		"SYS_ADJTIME",
-		"SYS_ADJTIMEX",
-		"SYS_AFS_SYSCALL",
-		"SYS_AIO_CANCEL",
-		"SYS_AIO_ERROR",
-		"SYS_AIO_FSYNC",
-		"SYS_AIO_READ",
-		"SYS_AIO_RETURN",
-		"SYS_AIO_SUSPEND",
-		"SYS_AIO_SUSPEND_NOCANCEL",
-		"SYS_AIO_WRITE",
-		"SYS_ALARM",
-		"SYS_ARCH_PRCTL",
-		"SYS_ARM_FADVISE64_64",
-		"SYS_ARM_SYNC_FILE_RANGE",
-		"SYS_ATGETMSG",
-		"SYS_ATPGETREQ",
-		"SYS_ATPGETRSP",
-		"SYS_ATPSNDREQ",
-		"SYS_ATPSNDRSP",
-		"SYS_ATPUTMSG",
-		"SYS_ATSOCKET",
-		"SYS_AUDIT",
-		"SYS_AUDITCTL",
-		"SYS_AUDITON",
-		"SYS_AUDIT_SESSION_JOIN",
-		"SYS_AUDIT_SESSION_PORT",
-		"SYS_AUDIT_SESSION_SELF",
-		"SYS_BDFLUSH",
-		"SYS_BIND",
-		"SYS_BINDAT",
-		"SYS_BREAK",
-		"SYS_BRK",
-		"SYS_BSDTHREAD_CREATE",
-		"SYS_BSDTHREAD_REGISTER",
-		"SYS_BSDTHREAD_TERMINATE",
-		"SYS_CAPGET",
-		"SYS_CAPSET",
-		"SYS_CAP_ENTER",
-		"SYS_CAP_FCNTLS_GET",
-		"SYS_CAP_FCNTLS_LIMIT",
-		"SYS_CAP_GETMODE",
-		"SYS_CAP_GETRIGHTS",
-		"SYS_CAP_IOCTLS_GET",
-		"SYS_CAP_IOCTLS_LIMIT",
-		"SYS_CAP_NEW",
-		"SYS_CAP_RIGHTS_GET",
-		"SYS_CAP_RIGHTS_LIMIT",
-		"SYS_CHDIR",
-		"SYS_CHFLAGS",
-		"SYS_CHFLAGSAT",
-		"SYS_CHMOD",
-		"SYS_CHMOD_EXTENDED",
-		"SYS_CHOWN",
-		"SYS_CHOWN32",
-		"SYS_CHROOT",
-		"SYS_CHUD",
-		"SYS_CLOCK_ADJTIME",
-		"SYS_CLOCK_GETCPUCLOCKID2",
-		"SYS_CLOCK_GETRES",
-		"SYS_CLOCK_GETTIME",
-		"SYS_CLOCK_NANOSLEEP",
-		"SYS_CLOCK_SETTIME",
-		"SYS_CLONE",
-		"SYS_CLOSE",
-		"SYS_CLOSEFROM",
-		"SYS_CLOSE_NOCANCEL",
-		"SYS_CONNECT",
-		"SYS_CONNECTAT",
-		"SYS_CONNECT_NOCANCEL",
-		"SYS_COPYFILE",
-		"SYS_CPUSET",
-		"SYS_CPUSET_GETAFFINITY",
-		"SYS_CPUSET_GETID",
-		"SYS_CPUSET_SETAFFINITY",
-		"SYS_CPUSET_SETID",
-		"SYS_CREAT",
-		"SYS_CREATE_MODULE",
-		"SYS_CSOPS",
-		"SYS_DELETE",
-		"SYS_DELETE_MODULE",
-		"SYS_DUP",
-		"SYS_DUP2",
-		"SYS_DUP3",
-		"SYS_EACCESS",
-		"SYS_EPOLL_CREATE",
-		"SYS_EPOLL_CREATE1",
-		"SYS_EPOLL_CTL",
-		"SYS_EPOLL_CTL_OLD",
-		"SYS_EPOLL_PWAIT",
-		"SYS_EPOLL_WAIT",
-		"SYS_EPOLL_WAIT_OLD",
-		"SYS_EVENTFD",
-		"SYS_EVENTFD2",
-		"SYS_EXCHANGEDATA",
-		"SYS_EXECVE",
-		"SYS_EXIT",
-		"SYS_EXIT_GROUP",
-		"SYS_EXTATTRCTL",
-		"SYS_EXTATTR_DELETE_FD",
-		"SYS_EXTATTR_DELETE_FILE",
-		"SYS_EXTATTR_DELETE_LINK",
-		"SYS_EXTATTR_GET_FD",
-		"SYS_EXTATTR_GET_FILE",
-		"SYS_EXTATTR_GET_LINK",
-		"SYS_EXTATTR_LIST_FD",
-		"SYS_EXTATTR_LIST_FILE",
-		"SYS_EXTATTR_LIST_LINK",
-		"SYS_EXTATTR_SET_FD",
-		"SYS_EXTATTR_SET_FILE",
-		"SYS_EXTATTR_SET_LINK",
-		"SYS_FACCESSAT",
-		"SYS_FADVISE64",
-		"SYS_FADVISE64_64",
-		"SYS_FALLOCATE",
-		"SYS_FANOTIFY_INIT",
-		"SYS_FANOTIFY_MARK",
-		"SYS_FCHDIR",
-		"SYS_FCHFLAGS",
-		"SYS_FCHMOD",
-		"SYS_FCHMODAT",
-		"SYS_FCHMOD_EXTENDED",
-		"SYS_FCHOWN",
-		"SYS_FCHOWN32",
-		"SYS_FCHOWNAT",
-		"SYS_FCHROOT",
-		"SYS_FCNTL",
-		"SYS_FCNTL64",
-		"SYS_FCNTL_NOCANCEL",
-		"SYS_FDATASYNC",
-		"SYS_FEXECVE",
-		"SYS_FFCLOCK_GETCOUNTER",
-		"SYS_FFCLOCK_GETESTIMATE",
-		"SYS_FFCLOCK_SETESTIMATE",
-		"SYS_FFSCTL",
-		"SYS_FGETATTRLIST",
-		"SYS_FGETXATTR",
-		"SYS_FHOPEN",
-		"SYS_FHSTAT",
-		"SYS_FHSTATFS",
-		"SYS_FILEPORT_MAKEFD",
-		"SYS_FILEPORT_MAKEPORT",
-		"SYS_FKTRACE",
-		"SYS_FLISTXATTR",
-		"SYS_FLOCK",
-		"SYS_FORK",
-		"SYS_FPATHCONF",
-		"SYS_FREEBSD6_FTRUNCATE",
-		"SYS_FREEBSD6_LSEEK",
-		"SYS_FREEBSD6_MMAP",
-		"SYS_FREEBSD6_PREAD",
-		"SYS_FREEBSD6_PWRITE",
-		"SYS_FREEBSD6_TRUNCATE",
-		"SYS_FREMOVEXATTR",
-		"SYS_FSCTL",
-		"SYS_FSETATTRLIST",
-		"SYS_FSETXATTR",
-		"SYS_FSGETPATH",
-		"SYS_FSTAT",
-		"SYS_FSTAT64",
-		"SYS_FSTAT64_EXTENDED",
-		"SYS_FSTATAT",
-		"SYS_FSTATAT64",
-		"SYS_FSTATFS",
-		"SYS_FSTATFS64",
-		"SYS_FSTATV",
-		"SYS_FSTATVFS1",
-		"SYS_FSTAT_EXTENDED",
-		"SYS_FSYNC",
-		"SYS_FSYNC_NOCANCEL",
-		"SYS_FSYNC_RANGE",
-		"SYS_FTIME",
-		"SYS_FTRUNCATE",
-		"SYS_FTRUNCATE64",
-		"SYS_FUTEX",
-		"SYS_FUTIMENS",
-		"SYS_FUTIMES",
-		"SYS_FUTIMESAT",
-		"SYS_GETATTRLIST",
-		"SYS_GETAUDIT",
-		"SYS_GETAUDIT_ADDR",
-		"SYS_GETAUID",
-		"SYS_GETCONTEXT",
-		"SYS_GETCPU",
-		"SYS_GETCWD",
-		"SYS_GETDENTS",
-		"SYS_GETDENTS64",
-		"SYS_GETDIRENTRIES",
-		"SYS_GETDIRENTRIES64",
-		"SYS_GETDIRENTRIESATTR",
-		"SYS_GETDTABLECOUNT",
-		"SYS_GETDTABLESIZE",
-		"SYS_GETEGID",
-		"SYS_GETEGID32",
-		"SYS_GETEUID",
-		"SYS_GETEUID32",
-		"SYS_GETFH",
-		"SYS_GETFSSTAT",
-		"SYS_GETFSSTAT64",
-		"SYS_GETGID",
-		"SYS_GETGID32",
-		"SYS_GETGROUPS",
-		"SYS_GETGROUPS32",
-		"SYS_GETHOSTUUID",
-		"SYS_GETITIMER",
-		"SYS_GETLCID",
-		"SYS_GETLOGIN",
-		"SYS_GETLOGINCLASS",
-		"SYS_GETPEERNAME",
-		"SYS_GETPGID",
-		"SYS_GETPGRP",
-		"SYS_GETPID",
-		"SYS_GETPMSG",
-		"SYS_GETPPID",
-		"SYS_GETPRIORITY",
-		"SYS_GETRESGID",
-		"SYS_GETRESGID32",
-		"SYS_GETRESUID",
-		"SYS_GETRESUID32",
-		"SYS_GETRLIMIT",
-		"SYS_GETRTABLE",
-		"SYS_GETRUSAGE",
-		"SYS_GETSGROUPS",
-		"SYS_GETSID",
-		"SYS_GETSOCKNAME",
-		"SYS_GETSOCKOPT",
-		"SYS_GETTHRID",
-		"SYS_GETTID",
-		"SYS_GETTIMEOFDAY",
-		"SYS_GETUID",
-		"SYS_GETUID32",
-		"SYS_GETVFSSTAT",
-		"SYS_GETWGROUPS",
-		"SYS_GETXATTR",
-		"SYS_GET_KERNEL_SYMS",
-		"SYS_GET_MEMPOLICY",
-		"SYS_GET_ROBUST_LIST",
-		"SYS_GET_THREAD_AREA",
-		"SYS_GTTY",
-		"SYS_IDENTITYSVC",
-		"SYS_IDLE",
-		"SYS_INITGROUPS",
-		"SYS_INIT_MODULE",
-		"SYS_INOTIFY_ADD_WATCH",
-		"SYS_INOTIFY_INIT",
-		"SYS_INOTIFY_INIT1",
-		"SYS_INOTIFY_RM_WATCH",
-		"SYS_IOCTL",
-		"SYS_IOPERM",
-		"SYS_IOPL",
-		"SYS_IOPOLICYSYS",
-		"SYS_IOPRIO_GET",
-		"SYS_IOPRIO_SET",
-		"SYS_IO_CANCEL",
-		"SYS_IO_DESTROY",
-		"SYS_IO_GETEVENTS",
-		"SYS_IO_SETUP",
-		"SYS_IO_SUBMIT",
-		"SYS_IPC",
-		"SYS_ISSETUGID",
-		"SYS_JAIL",
-		"SYS_JAIL_ATTACH",
-		"SYS_JAIL_GET",
-		"SYS_JAIL_REMOVE",
-		"SYS_JAIL_SET",
-		"SYS_KDEBUG_TRACE",
-		"SYS_KENV",
-		"SYS_KEVENT",
-		"SYS_KEVENT64",
-		"SYS_KEXEC_LOAD",
-		"SYS_KEYCTL",
-		"SYS_KILL",
-		"SYS_KLDFIND",
-		"SYS_KLDFIRSTMOD",
-		"SYS_KLDLOAD",
-		"SYS_KLDNEXT",
-		"SYS_KLDSTAT",
-		"SYS_KLDSYM",
-		"SYS_KLDUNLOAD",
-		"SYS_KLDUNLOADF",
-		"SYS_KQUEUE",
-		"SYS_KQUEUE1",
-		"SYS_KTIMER_CREATE",
-		"SYS_KTIMER_DELETE",
-		"SYS_KTIMER_GETOVERRUN",
-		"SYS_KTIMER_GETTIME",
-		"SYS_KTIMER_SETTIME",
-		"SYS_KTRACE",
-		"SYS_LCHFLAGS",
-		"SYS_LCHMOD",
-		"SYS_LCHOWN",
-		"SYS_LCHOWN32",
-		"SYS_LGETFH",
-		"SYS_LGETXATTR",
-		"SYS_LINK",
-		"SYS_LINKAT",
-		"SYS_LIO_LISTIO",
-		"SYS_LISTEN",
-		"SYS_LISTXATTR",
-		"SYS_LLISTXATTR",
-		"SYS_LOCK",
-		"SYS_LOOKUP_DCOOKIE",
-		"SYS_LPATHCONF",
-		"SYS_LREMOVEXATTR",
-		"SYS_LSEEK",
-		"SYS_LSETXATTR",
-		"SYS_LSTAT",
-		"SYS_LSTAT64",
-		"SYS_LSTAT64_EXTENDED",
-		"SYS_LSTATV",
-		"SYS_LSTAT_EXTENDED",
-		"SYS_LUTIMES",
-		"SYS_MAC_SYSCALL",
-		"SYS_MADVISE",
-		"SYS_MADVISE1",
-		"SYS_MAXSYSCALL",
-		"SYS_MBIND",
-		"SYS_MIGRATE_PAGES",
-		"SYS_MINCORE",
-		"SYS_MINHERIT",
-		"SYS_MKCOMPLEX",
-		"SYS_MKDIR",
-		"SYS_MKDIRAT",
-		"SYS_MKDIR_EXTENDED",
-		"SYS_MKFIFO",
-		"SYS_MKFIFOAT",
-		"SYS_MKFIFO_EXTENDED",
-		"SYS_MKNOD",
-		"SYS_MKNODAT",
-		"SYS_MLOCK",
-		"SYS_MLOCKALL",
-		"SYS_MMAP",
-		"SYS_MMAP2",
-		"SYS_MODCTL",
-		"SYS_MODFIND",
-		"SYS_MODFNEXT",
-		"SYS_MODIFY_LDT",
-		"SYS_MODNEXT",
-		"SYS_MODSTAT",
-		"SYS_MODWATCH",
-		"SYS_MOUNT",
-		"SYS_MOVE_PAGES",
-		"SYS_MPROTECT",
-		"SYS_MPX",
-		"SYS_MQUERY",
-		"SYS_MQ_GETSETATTR",
-		"SYS_MQ_NOTIFY",
-		"SYS_MQ_OPEN",
-		"SYS_MQ_TIMEDRECEIVE",
-		"SYS_MQ_TIMEDSEND",
-		"SYS_MQ_UNLINK",
-		"SYS_MREMAP",
-		"SYS_MSGCTL",
-		"SYS_MSGGET",
-		"SYS_MSGRCV",
-		"SYS_MSGRCV_NOCANCEL",
-		"SYS_MSGSND",
-		"SYS_MSGSND_NOCANCEL",
-		"SYS_MSGSYS",
-		"SYS_MSYNC",
-		"SYS_MSYNC_NOCANCEL",
-		"SYS_MUNLOCK",
-		"SYS_MUNLOCKALL",
-		"SYS_MUNMAP",
-		"SYS_NAME_TO_HANDLE_AT",
-		"SYS_NANOSLEEP",
-		"SYS_NEWFSTATAT",
-		"SYS_NFSCLNT",
-		"SYS_NFSSERVCTL",
-		"SYS_NFSSVC",
-		"SYS_NFSTAT",
-		"SYS_NICE",
-		"SYS_NLSTAT",
-		"SYS_NMOUNT",
-		"SYS_NSTAT",
-		"SYS_NTP_ADJTIME",
-		"SYS_NTP_GETTIME",
-		"SYS_OABI_SYSCALL_BASE",
-		"SYS_OBREAK",
-		"SYS_OLDFSTAT",
-		"SYS_OLDLSTAT",
-		"SYS_OLDOLDUNAME",
-		"SYS_OLDSTAT",
-		"SYS_OLDUNAME",
-		"SYS_OPEN",
-		"SYS_OPENAT",
-		"SYS_OPENBSD_POLL",
-		"SYS_OPEN_BY_HANDLE_AT",
-		"SYS_OPEN_EXTENDED",
-		"SYS_OPEN_NOCANCEL",
-		"SYS_OVADVISE",
-		"SYS_PACCEPT",
-		"SYS_PATHCONF",
-		"SYS_PAUSE",
-		"SYS_PCICONFIG_IOBASE",
-		"SYS_PCICONFIG_READ",
-		"SYS_PCICONFIG_WRITE",
-		"SYS_PDFORK",
-		"SYS_PDGETPID",
-		"SYS_PDKILL",
-		"SYS_PERF_EVENT_OPEN",
-		"SYS_PERSONALITY",
-		"SYS_PID_HIBERNATE",
-		"SYS_PID_RESUME",
-		"SYS_PID_SHUTDOWN_SOCKETS",
-		"SYS_PID_SUSPEND",
-		"SYS_PIPE",
-		"SYS_PIPE2",
-		"SYS_PIVOT_ROOT",
-		"SYS_PMC_CONTROL",
-		"SYS_PMC_GET_INFO",
-		"SYS_POLL",
-		"SYS_POLLTS",
-		"SYS_POLL_NOCANCEL",
-		"SYS_POSIX_FADVISE",
-		"SYS_POSIX_FALLOCATE",
-		"SYS_POSIX_OPENPT",
-		"SYS_POSIX_SPAWN",
-		"SYS_PPOLL",
-		"SYS_PRCTL",
-		"SYS_PREAD",
-		"SYS_PREAD64",
-		"SYS_PREADV",
-		"SYS_PREAD_NOCANCEL",
-		"SYS_PRLIMIT64",
-		"SYS_PROCCTL",
-		"SYS_PROCESS_POLICY",
-		"SYS_PROCESS_VM_READV",
-		"SYS_PROCESS_VM_WRITEV",
-		"SYS_PROC_INFO",
-		"SYS_PROF",
-		"SYS_PROFIL",
-		"SYS_PSELECT",
-		"SYS_PSELECT6",
-		"SYS_PSET_ASSIGN",
-		"SYS_PSET_CREATE",
-		"SYS_PSET_DESTROY",
-		"SYS_PSYNCH_CVBROAD",
-		"SYS_PSYNCH_CVCLRPREPOST",
-		"SYS_PSYNCH_CVSIGNAL",
-		"SYS_PSYNCH_CVWAIT",
-		"SYS_PSYNCH_MUTEXDROP",
-		"SYS_PSYNCH_MUTEXWAIT",
-		"SYS_PSYNCH_RW_DOWNGRADE",
-		"SYS_PSYNCH_RW_LONGRDLOCK",
-		"SYS_PSYNCH_RW_RDLOCK",
-		"SYS_PSYNCH_RW_UNLOCK",
-		"SYS_PSYNCH_RW_UNLOCK2",
-		"SYS_PSYNCH_RW_UPGRADE",
-		"SYS_PSYNCH_RW_WRLOCK",
-		"SYS_PSYNCH_RW_YIELDWRLOCK",
-		"SYS_PTRACE",
-		"SYS_PUTPMSG",
-		"SYS_PWRITE",
-		"SYS_PWRITE64",
-		"SYS_PWRITEV",
-		"SYS_PWRITE_NOCANCEL",
-		"SYS_QUERY_MODULE",
-		"SYS_QUOTACTL",
-		"SYS_RASCTL",
-		"SYS_RCTL_ADD_RULE",
-		"SYS_RCTL_GET_LIMITS",
-		"SYS_RCTL_GET_RACCT",
-		"SYS_RCTL_GET_RULES",
-		"SYS_RCTL_REMOVE_RULE",
-		"SYS_READ",
-		"SYS_READAHEAD",
-		"SYS_READDIR",
-		"SYS_READLINK",
-		"SYS_READLINKAT",
-		"SYS_READV",
-		"SYS_READV_NOCANCEL",
-		"SYS_READ_NOCANCEL",
-		"SYS_REBOOT",
-		"SYS_RECV",
-		"SYS_RECVFROM",
-		"SYS_RECVFROM_NOCANCEL",
-		"SYS_RECVMMSG",
-		"SYS_RECVMSG",
-		"SYS_RECVMSG_NOCANCEL",
-		"SYS_REMAP_FILE_PAGES",
-		"SYS_REMOVEXATTR",
-		"SYS_RENAME",
-		"SYS_RENAMEAT",
-		"SYS_REQUEST_KEY",
-		"SYS_RESTART_SYSCALL",
-		"SYS_REVOKE",
-		"SYS_RFORK",
-		"SYS_RMDIR",
-		"SYS_RTPRIO",
-		"SYS_RTPRIO_THREAD",
-		"SYS_RT_SIGACTION",
-		"SYS_RT_SIGPENDING",
-		"SYS_RT_SIGPROCMASK",
-		"SYS_RT_SIGQUEUEINFO",
-		"SYS_RT_SIGRETURN",
-		"SYS_RT_SIGSUSPEND",
-		"SYS_RT_SIGTIMEDWAIT",
-		"SYS_RT_TGSIGQUEUEINFO",
-		"SYS_SBRK",
-		"SYS_SCHED_GETAFFINITY",
-		"SYS_SCHED_GETPARAM",
-		"SYS_SCHED_GETSCHEDULER",
-		"SYS_SCHED_GET_PRIORITY_MAX",
-		"SYS_SCHED_GET_PRIORITY_MIN",
-		"SYS_SCHED_RR_GET_INTERVAL",
-		"SYS_SCHED_SETAFFINITY",
-		"SYS_SCHED_SETPARAM",
-		"SYS_SCHED_SETSCHEDULER",
-		"SYS_SCHED_YIELD",
-		"SYS_SCTP_GENERIC_RECVMSG",
-		"SYS_SCTP_GENERIC_SENDMSG",
-		"SYS_SCTP_GENERIC_SENDMSG_IOV",
-		"SYS_SCTP_PEELOFF",
-		"SYS_SEARCHFS",
-		"SYS_SECURITY",
-		"SYS_SELECT",
-		"SYS_SELECT_NOCANCEL",
-		"SYS_SEMCONFIG",
-		"SYS_SEMCTL",
-		"SYS_SEMGET",
-		"SYS_SEMOP",
-		"SYS_SEMSYS",
-		"SYS_SEMTIMEDOP",
-		"SYS_SEM_CLOSE",
-		"SYS_SEM_DESTROY",
-		"SYS_SEM_GETVALUE",
-		"SYS_SEM_INIT",
-		"SYS_SEM_OPEN",
-		"SYS_SEM_POST",
-		"SYS_SEM_TRYWAIT",
-		"SYS_SEM_UNLINK",
-		"SYS_SEM_WAIT",
-		"SYS_SEM_WAIT_NOCANCEL",
-		"SYS_SEND",
-		"SYS_SENDFILE",
-		"SYS_SENDFILE64",
-		"SYS_SENDMMSG",
-		"SYS_SENDMSG",
-		"SYS_SENDMSG_NOCANCEL",
-		"SYS_SENDTO",
-		"SYS_SENDTO_NOCANCEL",
-		"SYS_SETATTRLIST",
-		"SYS_SETAUDIT",
-		"SYS_SETAUDIT_ADDR",
-		"SYS_SETAUID",
-		"SYS_SETCONTEXT",
-		"SYS_SETDOMAINNAME",
-		"SYS_SETEGID",
-		"SYS_SETEUID",
-		"SYS_SETFIB",
-		"SYS_SETFSGID",
-		"SYS_SETFSGID32",
-		"SYS_SETFSUID",
-		"SYS_SETFSUID32",
-		"SYS_SETGID",
-		"SYS_SETGID32",
-		"SYS_SETGROUPS",
-		"SYS_SETGROUPS32",
-		"SYS_SETHOSTNAME",
-		"SYS_SETITIMER",
-		"SYS_SETLCID",
-		"SYS_SETLOGIN",
-		"SYS_SETLOGINCLASS",
-		"SYS_SETNS",
-		"SYS_SETPGID",
-		"SYS_SETPRIORITY",
-		"SYS_SETPRIVEXEC",
-		"SYS_SETREGID",
-		"SYS_SETREGID32",
-		"SYS_SETRESGID",
-		"SYS_SETRESGID32",
-		"SYS_SETRESUID",
-		"SYS_SETRESUID32",
-		"SYS_SETREUID",
-		"SYS_SETREUID32",
-		"SYS_SETRLIMIT",
-		"SYS_SETRTABLE",
-		"SYS_SETSGROUPS",
-		"SYS_SETSID",
-		"SYS_SETSOCKOPT",
-		"SYS_SETTID",
-		"SYS_SETTID_WITH_PID",
-		"SYS_SETTIMEOFDAY",
-		"SYS_SETUID",
-		"SYS_SETUID32",
-		"SYS_SETWGROUPS",
-		"SYS_SETXATTR",
-		"SYS_SET_MEMPOLICY",
-		"SYS_SET_ROBUST_LIST",
-		"SYS_SET_THREAD_AREA",
-		"SYS_SET_TID_ADDRESS",
-		"SYS_SGETMASK",
-		"SYS_SHARED_REGION_CHECK_NP",
-		"SYS_SHARED_REGION_MAP_AND_SLIDE_NP",
-		"SYS_SHMAT",
-		"SYS_SHMCTL",
-		"SYS_SHMDT",
-		"SYS_SHMGET",
-		"SYS_SHMSYS",
-		"SYS_SHM_OPEN",
-		"SYS_SHM_UNLINK",
-		"SYS_SHUTDOWN",
-		"SYS_SIGACTION",
-		"SYS_SIGALTSTACK",
-		"SYS_SIGNAL",
-		"SYS_SIGNALFD",
-		"SYS_SIGNALFD4",
-		"SYS_SIGPENDING",
-		"SYS_SIGPROCMASK",
-		"SYS_SIGQUEUE",
-		"SYS_SIGQUEUEINFO",
-		"SYS_SIGRETURN",
-		"SYS_SIGSUSPEND",
-		"SYS_SIGSUSPEND_NOCANCEL",
-		"SYS_SIGTIMEDWAIT",
-		"SYS_SIGWAIT",
-		"SYS_SIGWAITINFO",
-		"SYS_SOCKET",
-		"SYS_SOCKETCALL",
-		"SYS_SOCKETPAIR",
-		"SYS_SPLICE",
-		"SYS_SSETMASK",
-		"SYS_SSTK",
-		"SYS_STACK_SNAPSHOT",
-		"SYS_STAT",
-		"SYS_STAT64",
-		"SYS_STAT64_EXTENDED",
-		"SYS_STATFS",
-		"SYS_STATFS64",
-		"SYS_STATV",
-		"SYS_STATVFS1",
-		"SYS_STAT_EXTENDED",
-		"SYS_STIME",
-		"SYS_STTY",
-		"SYS_SWAPCONTEXT",
-		"SYS_SWAPCTL",
-		"SYS_SWAPOFF",
-		"SYS_SWAPON",
-		"SYS_SYMLINK",
-		"SYS_SYMLINKAT",
-		"SYS_SYNC",
-		"SYS_SYNCFS",
-		"SYS_SYNC_FILE_RANGE",
-		"SYS_SYSARCH",
-		"SYS_SYSCALL",
-		"SYS_SYSCALL_BASE",
-		"SYS_SYSFS",
-		"SYS_SYSINFO",
-		"SYS_SYSLOG",
-		"SYS_TEE",
-		"SYS_TGKILL",
-		"SYS_THREAD_SELFID",
-		"SYS_THR_CREATE",
-		"SYS_THR_EXIT",
-		"SYS_THR_KILL",
-		"SYS_THR_KILL2",
-		"SYS_THR_NEW",
-		"SYS_THR_SELF",
-		"SYS_THR_SET_NAME",
-		"SYS_THR_SUSPEND",
-		"SYS_THR_WAKE",
-		"SYS_TIME",
-		"SYS_TIMERFD_CREATE",
-		"SYS_TIMERFD_GETTIME",
-		"SYS_TIMERFD_SETTIME",
-		"SYS_TIMER_CREATE",
-		"SYS_TIMER_DELETE",
-		"SYS_TIMER_GETOVERRUN",
-		"SYS_TIMER_GETTIME",
-		"SYS_TIMER_SETTIME",
-		"SYS_TIMES",
-		"SYS_TKILL",
-		"SYS_TRUNCATE",
-		"SYS_TRUNCATE64",
-		"SYS_TUXCALL",
-		"SYS_UGETRLIMIT",
-		"SYS_ULIMIT",
-		"SYS_UMASK",
-		"SYS_UMASK_EXTENDED",
-		"SYS_UMOUNT",
-		"SYS_UMOUNT2",
-		"SYS_UNAME",
-		"SYS_UNDELETE",
-		"SYS_UNLINK",
-		"SYS_UNLINKAT",
-		"SYS_UNMOUNT",
-		"SYS_UNSHARE",
-		"SYS_USELIB",
-		"SYS_USTAT",
-		"SYS_UTIME",
-		"SYS_UTIMENSAT",
-		"SYS_UTIMES",
-		"SYS_UTRACE",
-		"SYS_UUIDGEN",
-		"SYS_VADVISE",
-		"SYS_VFORK",
-		"SYS_VHANGUP",
-		"SYS_VM86",
-		"SYS_VM86OLD",
-		"SYS_VMSPLICE",
-		"SYS_VM_PRESSURE_MONITOR",
-		"SYS_VSERVER",
-		"SYS_WAIT4",
-		"SYS_WAIT4_NOCANCEL",
-		"SYS_WAIT6",
-		"SYS_WAITEVENT",
-		"SYS_WAITID",
-		"SYS_WAITID_NOCANCEL",
-		"SYS_WAITPID",
-		"SYS_WATCHEVENT",
-		"SYS_WORKQ_KERNRETURN",
-		"SYS_WORKQ_OPEN",
-		"SYS_WRITE",
-		"SYS_WRITEV",
-		"SYS_WRITEV_NOCANCEL",
-		"SYS_WRITE_NOCANCEL",
-		"SYS_YIELD",
-		"SYS__LLSEEK",
-		"SYS__LWP_CONTINUE",
-		"SYS__LWP_CREATE",
-		"SYS__LWP_CTL",
-		"SYS__LWP_DETACH",
-		"SYS__LWP_EXIT",
-		"SYS__LWP_GETNAME",
-		"SYS__LWP_GETPRIVATE",
-		"SYS__LWP_KILL",
-		"SYS__LWP_PARK",
-		"SYS__LWP_SELF",
-		"SYS__LWP_SETNAME",
-		"SYS__LWP_SETPRIVATE",
-		"SYS__LWP_SUSPEND",
-		"SYS__LWP_UNPARK",
-		"SYS__LWP_UNPARK_ALL",
-		"SYS__LWP_WAIT",
-		"SYS__LWP_WAKEUP",
-		"SYS__NEWSELECT",
-		"SYS__PSET_BIND",
-		"SYS__SCHED_GETAFFINITY",
-		"SYS__SCHED_GETPARAM",
-		"SYS__SCHED_SETAFFINITY",
-		"SYS__SCHED_SETPARAM",
-		"SYS__SYSCTL",
-		"SYS__UMTX_LOCK",
-		"SYS__UMTX_OP",
-		"SYS__UMTX_UNLOCK",
-		"SYS___ACL_ACLCHECK_FD",
-		"SYS___ACL_ACLCHECK_FILE",
-		"SYS___ACL_ACLCHECK_LINK",
-		"SYS___ACL_DELETE_FD",
-		"SYS___ACL_DELETE_FILE",
-		"SYS___ACL_DELETE_LINK",
-		"SYS___ACL_GET_FD",
-		"SYS___ACL_GET_FILE",
-		"SYS___ACL_GET_LINK",
-		"SYS___ACL_SET_FD",
-		"SYS___ACL_SET_FILE",
-		"SYS___ACL_SET_LINK",
-		"SYS___CLONE",
-		"SYS___DISABLE_THREADSIGNAL",
-		"SYS___GETCWD",
-		"SYS___GETLOGIN",
-		"SYS___GET_TCB",
-		"SYS___MAC_EXECVE",
-		"SYS___MAC_GETFSSTAT",
-		"SYS___MAC_GET_FD",
-		"SYS___MAC_GET_FILE",
-		"SYS___MAC_GET_LCID",
-		"SYS___MAC_GET_LCTX",
-		"SYS___MAC_GET_LINK",
-		"SYS___MAC_GET_MOUNT",
-		"SYS___MAC_GET_PID",
-		"SYS___MAC_GET_PROC",
-		"SYS___MAC_MOUNT",
-		"SYS___MAC_SET_FD",
-		"SYS___MAC_SET_FILE",
-		"SYS___MAC_SET_LCTX",
-		"SYS___MAC_SET_LINK",
-		"SYS___MAC_SET_PROC",
-		"SYS___MAC_SYSCALL",
-		"SYS___OLD_SEMWAIT_SIGNAL",
-		"SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL",
-		"SYS___POSIX_CHOWN",
-		"SYS___POSIX_FCHOWN",
-		"SYS___POSIX_LCHOWN",
-		"SYS___POSIX_RENAME",
-		"SYS___PTHREAD_CANCELED",
-		"SYS___PTHREAD_CHDIR",
-		"SYS___PTHREAD_FCHDIR",
-		"SYS___PTHREAD_KILL",
-		"SYS___PTHREAD_MARKCANCEL",
-		"SYS___PTHREAD_SIGMASK",
-		"SYS___QUOTACTL",
-		"SYS___SEMCTL",
-		"SYS___SEMWAIT_SIGNAL",
-		"SYS___SEMWAIT_SIGNAL_NOCANCEL",
-		"SYS___SETLOGIN",
-		"SYS___SETUGID",
-		"SYS___SET_TCB",
-		"SYS___SIGACTION_SIGTRAMP",
-		"SYS___SIGTIMEDWAIT",
-		"SYS___SIGWAIT",
-		"SYS___SIGWAIT_NOCANCEL",
-		"SYS___SYSCTL",
-		"SYS___TFORK",
-		"SYS___THREXIT",
-		"SYS___THRSIGDIVERT",
-		"SYS___THRSLEEP",
-		"SYS___THRWAKEUP",
-		"S_ARCH1",
-		"S_ARCH2",
-		"S_BLKSIZE",
-		"S_IEXEC",
-		"S_IFBLK",
-		"S_IFCHR",
-		"S_IFDIR",
-		"S_IFIFO",
-		"S_IFLNK",
-		"S_IFMT",
-		"S_IFREG",
-		"S_IFSOCK",
-		"S_IFWHT",
-		"S_IREAD",
-		"S_IRGRP",
-		"S_IROTH",
-		"S_IRUSR",
-		"S_IRWXG",
-		"S_IRWXO",
-		"S_IRWXU",
-		"S_ISGID",
-		"S_ISTXT",
-		"S_ISUID",
-		"S_ISVTX",
-		"S_IWGRP",
-		"S_IWOTH",
-		"S_IWRITE",
-		"S_IWUSR",
-		"S_IXGRP",
-		"S_IXOTH",
-		"S_IXUSR",
-		"S_LOGIN_SET",
-		"SecurityAttributes",
-		"Seek",
-		"Select",
-		"Sendfile",
-		"Sendmsg",
-		"SendmsgN",
-		"Sendto",
-		"Servent",
-		"SetBpf",
-		"SetBpfBuflen",
-		"SetBpfDatalink",
-		"SetBpfHeadercmpl",
-		"SetBpfImmediate",
-		"SetBpfInterface",
-		"SetBpfPromisc",
-		"SetBpfTimeout",
-		"SetCurrentDirectory",
-		"SetEndOfFile",
-		"SetEnvironmentVariable",
-		"SetFileAttributes",
-		"SetFileCompletionNotificationModes",
-		"SetFilePointer",
-		"SetFileTime",
-		"SetHandleInformation",
-		"SetKevent",
-		"SetLsfPromisc",
-		"SetNonblock",
-		"Setdomainname",
-		"Setegid",
-		"Setenv",
-		"Seteuid",
-		"Setfsgid",
-		"Setfsuid",
-		"Setgid",
-		"Setgroups",
-		"Sethostname",
-		"Setlogin",
-		"Setpgid",
-		"Setpriority",
-		"Setprivexec",
-		"Setregid",
-		"Setresgid",
-		"Setresuid",
-		"Setreuid",
-		"Setrlimit",
-		"Setsid",
-		"Setsockopt",
-		"SetsockoptByte",
-		"SetsockoptICMPv6Filter",
-		"SetsockoptIPMreq",
-		"SetsockoptIPMreqn",
-		"SetsockoptIPv6Mreq",
-		"SetsockoptInet4Addr",
-		"SetsockoptInt",
-		"SetsockoptLinger",
-		"SetsockoptString",
-		"SetsockoptTimeval",
-		"Settimeofday",
-		"Setuid",
-		"Setxattr",
-		"Shutdown",
-		"SidTypeAlias",
-		"SidTypeComputer",
-		"SidTypeDeletedAccount",
-		"SidTypeDomain",
-		"SidTypeGroup",
-		"SidTypeInvalid",
-		"SidTypeLabel",
-		"SidTypeUnknown",
-		"SidTypeUser",
-		"SidTypeWellKnownGroup",
-		"Signal",
-		"SizeofBpfHdr",
-		"SizeofBpfInsn",
-		"SizeofBpfProgram",
-		"SizeofBpfStat",
-		"SizeofBpfVersion",
-		"SizeofBpfZbuf",
-		"SizeofBpfZbufHeader",
-		"SizeofCmsghdr",
-		"SizeofICMPv6Filter",
-		"SizeofIPMreq",
-		"SizeofIPMreqn",
-		"SizeofIPv6MTUInfo",
-		"SizeofIPv6Mreq",
-		"SizeofIfAddrmsg",
-		"SizeofIfAnnounceMsghdr",
-		"SizeofIfData",
-		"SizeofIfInfomsg",
-		"SizeofIfMsghdr",
-		"SizeofIfaMsghdr",
-		"SizeofIfmaMsghdr",
-		"SizeofIfmaMsghdr2",
-		"SizeofInet4Pktinfo",
-		"SizeofInet6Pktinfo",
-		"SizeofInotifyEvent",
-		"SizeofLinger",
-		"SizeofMsghdr",
-		"SizeofNlAttr",
-		"SizeofNlMsgerr",
-		"SizeofNlMsghdr",
-		"SizeofRtAttr",
-		"SizeofRtGenmsg",
-		"SizeofRtMetrics",
-		"SizeofRtMsg",
-		"SizeofRtMsghdr",
-		"SizeofRtNexthop",
-		"SizeofSockFilter",
-		"SizeofSockFprog",
-		"SizeofSockaddrAny",
-		"SizeofSockaddrDatalink",
-		"SizeofSockaddrInet4",
-		"SizeofSockaddrInet6",
-		"SizeofSockaddrLinklayer",
-		"SizeofSockaddrNetlink",
-		"SizeofSockaddrUnix",
-		"SizeofTCPInfo",
-		"SizeofUcred",
-		"SlicePtrFromStrings",
-		"SockFilter",
-		"SockFprog",
-		"Sockaddr",
-		"SockaddrDatalink",
-		"SockaddrGen",
-		"SockaddrInet4",
-		"SockaddrInet6",
-		"SockaddrLinklayer",
-		"SockaddrNetlink",
-		"SockaddrUnix",
-		"Socket",
-		"SocketControlMessage",
-		"SocketDisableIPv6",
-		"Socketpair",
-		"Splice",
-		"StartProcess",
-		"StartupInfo",
-		"Stat",
-		"Stat_t",
-		"Statfs",
-		"Statfs_t",
-		"Stderr",
-		"Stdin",
-		"Stdout",
-		"StringBytePtr",
-		"StringByteSlice",
-		"StringSlicePtr",
-		"StringToSid",
-		"StringToUTF16",
-		"StringToUTF16Ptr",
-		"Symlink",
-		"Sync",
-		"SyncFileRange",
-		"SysProcAttr",
-		"SysProcIDMap",
-		"Syscall",
-		"Syscall12",
-		"Syscall15",
-		"Syscall18",
-		"Syscall6",
-		"Syscall9",
-		"Sysctl",
-		"SysctlUint32",
-		"Sysctlnode",
-		"Sysinfo",
-		"Sysinfo_t",
-		"Systemtime",
-		"TCGETS",
-		"TCIFLUSH",
-		"TCIOFLUSH",
-		"TCOFLUSH",
-		"TCPInfo",
-		"TCPKeepalive",
-		"TCP_CA_NAME_MAX",
-		"TCP_CONGCTL",
-		"TCP_CONGESTION",
-		"TCP_CONNECTIONTIMEOUT",
-		"TCP_CORK",
-		"TCP_DEFER_ACCEPT",
-		"TCP_INFO",
-		"TCP_KEEPALIVE",
-		"TCP_KEEPCNT",
-		"TCP_KEEPIDLE",
-		"TCP_KEEPINIT",
-		"TCP_KEEPINTVL",
-		"TCP_LINGER2",
-		"TCP_MAXBURST",
-		"TCP_MAXHLEN",
-		"TCP_MAXOLEN",
-		"TCP_MAXSEG",
-		"TCP_MAXWIN",
-		"TCP_MAX_SACK",
-		"TCP_MAX_WINSHIFT",
-		"TCP_MD5SIG",
-		"TCP_MD5SIG_MAXKEYLEN",
-		"TCP_MINMSS",
-		"TCP_MINMSSOVERLOAD",
-		"TCP_MSS",
-		"TCP_NODELAY",
-		"TCP_NOOPT",
-		"TCP_NOPUSH",
-		"TCP_NSTATES",
-		"TCP_QUICKACK",
-		"TCP_RXT_CONNDROPTIME",
-		"TCP_RXT_FINDROP",
-		"TCP_SACK_ENABLE",
-		"TCP_SYNCNT",
-		"TCP_VENDOR",
-		"TCP_WINDOW_CLAMP",
-		"TCSAFLUSH",
-		"TCSETS",
-		"TF_DISCONNECT",
-		"TF_REUSE_SOCKET",
-		"TF_USE_DEFAULT_WORKER",
-		"TF_USE_KERNEL_APC",
-		"TF_USE_SYSTEM_THREAD",
-		"TF_WRITE_BEHIND",
-		"TH32CS_INHERIT",
-		"TH32CS_SNAPALL",
-		"TH32CS_SNAPHEAPLIST",
-		"TH32CS_SNAPMODULE",
-		"TH32CS_SNAPMODULE32",
-		"TH32CS_SNAPPROCESS",
-		"TH32CS_SNAPTHREAD",
-		"TIME_ZONE_ID_DAYLIGHT",
-		"TIME_ZONE_ID_STANDARD",
-		"TIME_ZONE_ID_UNKNOWN",
-		"TIOCCBRK",
-		"TIOCCDTR",
-		"TIOCCONS",
-		"TIOCDCDTIMESTAMP",
-		"TIOCDRAIN",
-		"TIOCDSIMICROCODE",
-		"TIOCEXCL",
-		"TIOCEXT",
-		"TIOCFLAG_CDTRCTS",
-		"TIOCFLAG_CLOCAL",
-		"TIOCFLAG_CRTSCTS",
-		"TIOCFLAG_MDMBUF",
-		"TIOCFLAG_PPS",
-		"TIOCFLAG_SOFTCAR",
-		"TIOCFLUSH",
-		"TIOCGDEV",
-		"TIOCGDRAINWAIT",
-		"TIOCGETA",
-		"TIOCGETD",
-		"TIOCGFLAGS",
-		"TIOCGICOUNT",
-		"TIOCGLCKTRMIOS",
-		"TIOCGLINED",
-		"TIOCGPGRP",
-		"TIOCGPTN",
-		"TIOCGQSIZE",
-		"TIOCGRANTPT",
-		"TIOCGRS485",
-		"TIOCGSERIAL",
-		"TIOCGSID",
-		"TIOCGSIZE",
-		"TIOCGSOFTCAR",
-		"TIOCGTSTAMP",
-		"TIOCGWINSZ",
-		"TIOCINQ",
-		"TIOCIXOFF",
-		"TIOCIXON",
-		"TIOCLINUX",
-		"TIOCMBIC",
-		"TIOCMBIS",
-		"TIOCMGDTRWAIT",
-		"TIOCMGET",
-		"TIOCMIWAIT",
-		"TIOCMODG",
-		"TIOCMODS",
-		"TIOCMSDTRWAIT",
-		"TIOCMSET",
-		"TIOCM_CAR",
-		"TIOCM_CD",
-		"TIOCM_CTS",
-		"TIOCM_DCD",
-		"TIOCM_DSR",
-		"TIOCM_DTR",
-		"TIOCM_LE",
-		"TIOCM_RI",
-		"TIOCM_RNG",
-		"TIOCM_RTS",
-		"TIOCM_SR",
-		"TIOCM_ST",
-		"TIOCNOTTY",
-		"TIOCNXCL",
-		"TIOCOUTQ",
-		"TIOCPKT",
-		"TIOCPKT_DATA",
-		"TIOCPKT_DOSTOP",
-		"TIOCPKT_FLUSHREAD",
-		"TIOCPKT_FLUSHWRITE",
-		"TIOCPKT_IOCTL",
-		"TIOCPKT_NOSTOP",
-		"TIOCPKT_START",
-		"TIOCPKT_STOP",
-		"TIOCPTMASTER",
-		"TIOCPTMGET",
-		"TIOCPTSNAME",
-		"TIOCPTYGNAME",
-		"TIOCPTYGRANT",
-		"TIOCPTYUNLK",
-		"TIOCRCVFRAME",
-		"TIOCREMOTE",
-		"TIOCSBRK",
-		"TIOCSCONS",
-		"TIOCSCTTY",
-		"TIOCSDRAINWAIT",
-		"TIOCSDTR",
-		"TIOCSERCONFIG",
-		"TIOCSERGETLSR",
-		"TIOCSERGETMULTI",
-		"TIOCSERGSTRUCT",
-		"TIOCSERGWILD",
-		"TIOCSERSETMULTI",
-		"TIOCSERSWILD",
-		"TIOCSER_TEMT",
-		"TIOCSETA",
-		"TIOCSETAF",
-		"TIOCSETAW",
-		"TIOCSETD",
-		"TIOCSFLAGS",
-		"TIOCSIG",
-		"TIOCSLCKTRMIOS",
-		"TIOCSLINED",
-		"TIOCSPGRP",
-		"TIOCSPTLCK",
-		"TIOCSQSIZE",
-		"TIOCSRS485",
-		"TIOCSSERIAL",
-		"TIOCSSIZE",
-		"TIOCSSOFTCAR",
-		"TIOCSTART",
-		"TIOCSTAT",
-		"TIOCSTI",
-		"TIOCSTOP",
-		"TIOCSTSTAMP",
-		"TIOCSWINSZ",
-		"TIOCTIMESTAMP",
-		"TIOCUCNTL",
-		"TIOCVHANGUP",
-		"TIOCXMTFRAME",
-		"TOKEN_ADJUST_DEFAULT",
-		"TOKEN_ADJUST_GROUPS",
-		"TOKEN_ADJUST_PRIVILEGES",
-		"TOKEN_ADJUST_SESSIONID",
-		"TOKEN_ALL_ACCESS",
-		"TOKEN_ASSIGN_PRIMARY",
-		"TOKEN_DUPLICATE",
-		"TOKEN_EXECUTE",
-		"TOKEN_IMPERSONATE",
-		"TOKEN_QUERY",
-		"TOKEN_QUERY_SOURCE",
-		"TOKEN_READ",
-		"TOKEN_WRITE",
-		"TOSTOP",
-		"TRUNCATE_EXISTING",
-		"TUNATTACHFILTER",
-		"TUNDETACHFILTER",
-		"TUNGETFEATURES",
-		"TUNGETIFF",
-		"TUNGETSNDBUF",
-		"TUNGETVNETHDRSZ",
-		"TUNSETDEBUG",
-		"TUNSETGROUP",
-		"TUNSETIFF",
-		"TUNSETLINK",
-		"TUNSETNOCSUM",
-		"TUNSETOFFLOAD",
-		"TUNSETOWNER",
-		"TUNSETPERSIST",
-		"TUNSETSNDBUF",
-		"TUNSETTXFILTER",
-		"TUNSETVNETHDRSZ",
-		"Tee",
-		"TerminateProcess",
-		"Termios",
-		"Tgkill",
-		"Time",
-		"Time_t",
-		"Times",
-		"Timespec",
-		"TimespecToNsec",
-		"Timeval",
-		"Timeval32",
-		"TimevalToNsec",
-		"Timex",
-		"Timezoneinformation",
-		"Tms",
-		"Token",
-		"TokenAccessInformation",
-		"TokenAuditPolicy",
-		"TokenDefaultDacl",
-		"TokenElevation",
-		"TokenElevationType",
-		"TokenGroups",
-		"TokenGroupsAndPrivileges",
-		"TokenHasRestrictions",
-		"TokenImpersonationLevel",
-		"TokenIntegrityLevel",
-		"TokenLinkedToken",
-		"TokenLogonSid",
-		"TokenMandatoryPolicy",
-		"TokenOrigin",
-		"TokenOwner",
-		"TokenPrimaryGroup",
-		"TokenPrivileges",
-		"TokenRestrictedSids",
-		"TokenSandBoxInert",
-		"TokenSessionId",
-		"TokenSessionReference",
-		"TokenSource",
-		"TokenStatistics",
-		"TokenType",
-		"TokenUIAccess",
-		"TokenUser",
-		"TokenVirtualizationAllowed",
-		"TokenVirtualizationEnabled",
-		"Tokenprimarygroup",
-		"Tokenuser",
-		"TranslateAccountName",
-		"TranslateName",
-		"TransmitFile",
-		"TransmitFileBuffers",
-		"Truncate",
-		"UNIX_PATH_MAX",
-		"USAGE_MATCH_TYPE_AND",
-		"USAGE_MATCH_TYPE_OR",
-		"UTF16FromString",
-		"UTF16PtrFromString",
-		"UTF16ToString",
-		"Ucred",
-		"Umask",
-		"Uname",
-		"Undelete",
-		"UnixCredentials",
-		"UnixRights",
-		"Unlink",
-		"Unlinkat",
-		"UnmapViewOfFile",
-		"Unmount",
-		"Unsetenv",
-		"Unshare",
-		"UserInfo10",
-		"Ustat",
-		"Ustat_t",
-		"Utimbuf",
-		"Utime",
-		"Utimes",
-		"UtimesNano",
-		"Utsname",
-		"VDISCARD",
-		"VDSUSP",
-		"VEOF",
-		"VEOL",
-		"VEOL2",
-		"VERASE",
-		"VERASE2",
-		"VINTR",
-		"VKILL",
-		"VLNEXT",
-		"VMIN",
-		"VQUIT",
-		"VREPRINT",
-		"VSTART",
-		"VSTATUS",
-		"VSTOP",
-		"VSUSP",
-		"VSWTC",
-		"VT0",
-		"VT1",
-		"VTDLY",
-		"VTIME",
-		"VWERASE",
-		"VirtualLock",
-		"VirtualUnlock",
-		"WAIT_ABANDONED",
-		"WAIT_FAILED",
-		"WAIT_OBJECT_0",
-		"WAIT_TIMEOUT",
-		"WALL",
-		"WALLSIG",
-		"WALTSIG",
-		"WCLONE",
-		"WCONTINUED",
-		"WCOREFLAG",
-		"WEXITED",
-		"WLINUXCLONE",
-		"WNOHANG",
-		"WNOTHREAD",
-		"WNOWAIT",
-		"WNOZOMBIE",
-		"WOPTSCHECKED",
-		"WORDSIZE",
-		"WSABuf",
-		"WSACleanup",
-		"WSADESCRIPTION_LEN",
-		"WSAData",
-		"WSAEACCES",
-		"WSAECONNABORTED",
-		"WSAECONNRESET",
-		"WSAEnumProtocols",
-		"WSAID_CONNECTEX",
-		"WSAIoctl",
-		"WSAPROTOCOL_LEN",
-		"WSAProtocolChain",
-		"WSAProtocolInfo",
-		"WSARecv",
-		"WSARecvFrom",
-		"WSASYS_STATUS_LEN",
-		"WSASend",
-		"WSASendTo",
-		"WSASendto",
-		"WSAStartup",
-		"WSTOPPED",
-		"WTRAPPED",
-		"WUNTRACED",
-		"Wait4",
-		"WaitForSingleObject",
-		"WaitStatus",
-		"Win32FileAttributeData",
-		"Win32finddata",
-		"Write",
-		"WriteConsole",
-		"WriteFile",
-		"X509_ASN_ENCODING",
-		"XCASE",
-		"XP1_CONNECTIONLESS",
-		"XP1_CONNECT_DATA",
-		"XP1_DISCONNECT_DATA",
-		"XP1_EXPEDITED_DATA",
-		"XP1_GRACEFUL_CLOSE",
-		"XP1_GUARANTEED_DELIVERY",
-		"XP1_GUARANTEED_ORDER",
-		"XP1_IFS_HANDLES",
-		"XP1_MESSAGE_ORIENTED",
-		"XP1_MULTIPOINT_CONTROL_PLANE",
-		"XP1_MULTIPOINT_DATA_PLANE",
-		"XP1_PARTIAL_MESSAGE",
-		"XP1_PSEUDO_STREAM",
-		"XP1_QOS_SUPPORTED",
-		"XP1_SAN_SUPPORT_SDP",
-		"XP1_SUPPORT_BROADCAST",
-		"XP1_SUPPORT_MULTIPOINT",
-		"XP1_UNI_RECV",
-		"XP1_UNI_SEND",
-	},
-	"syscall/js": []string{
-		"CopyBytesToGo",
-		"CopyBytesToJS",
-		"Error",
-		"Func",
-		"FuncOf",
-		"Global",
-		"Null",
-		"Type",
-		"TypeBoolean",
-		"TypeFunction",
-		"TypeNull",
-		"TypeNumber",
-		"TypeObject",
-		"TypeString",
-		"TypeSymbol",
-		"TypeUndefined",
-		"Undefined",
-		"Value",
-		"ValueError",
-		"ValueOf",
-		"Wrapper",
-	},
-	"testing": []string{
-		"AllocsPerRun",
-		"B",
-		"Benchmark",
-		"BenchmarkResult",
-		"Cover",
-		"CoverBlock",
-		"CoverMode",
-		"Coverage",
-		"Init",
-		"InternalBenchmark",
-		"InternalExample",
-		"InternalTest",
-		"M",
-		"Main",
-		"MainStart",
-		"PB",
-		"RegisterCover",
-		"RunBenchmarks",
-		"RunExamples",
-		"RunTests",
-		"Short",
-		"T",
-		"TB",
-		"Verbose",
-	},
-	"testing/fstest": []string{
-		"MapFS",
-		"MapFile",
-		"TestFS",
-	},
-	"testing/iotest": []string{
-		"DataErrReader",
-		"ErrReader",
-		"ErrTimeout",
-		"HalfReader",
-		"NewReadLogger",
-		"NewWriteLogger",
-		"OneByteReader",
-		"TestReader",
-		"TimeoutReader",
-		"TruncateWriter",
-	},
-	"testing/quick": []string{
-		"Check",
-		"CheckEqual",
-		"CheckEqualError",
-		"CheckError",
-		"Config",
-		"Generator",
-		"SetupError",
-		"Value",
-	},
-	"text/scanner": []string{
-		"Char",
-		"Comment",
-		"EOF",
-		"Float",
-		"GoTokens",
-		"GoWhitespace",
-		"Ident",
-		"Int",
-		"Position",
-		"RawString",
-		"ScanChars",
-		"ScanComments",
-		"ScanFloats",
-		"ScanIdents",
-		"ScanInts",
-		"ScanRawStrings",
-		"ScanStrings",
-		"Scanner",
-		"SkipComments",
-		"String",
-		"TokenString",
-	},
-	"text/tabwriter": []string{
-		"AlignRight",
-		"Debug",
-		"DiscardEmptyColumns",
-		"Escape",
-		"FilterHTML",
-		"NewWriter",
-		"StripEscape",
-		"TabIndent",
-		"Writer",
-	},
-	"text/template": []string{
-		"ExecError",
-		"FuncMap",
-		"HTMLEscape",
-		"HTMLEscapeString",
-		"HTMLEscaper",
-		"IsTrue",
-		"JSEscape",
-		"JSEscapeString",
-		"JSEscaper",
-		"Must",
-		"New",
-		"ParseFS",
-		"ParseFiles",
-		"ParseGlob",
-		"Template",
-		"URLQueryEscaper",
-	},
-	"text/template/parse": []string{
-		"ActionNode",
-		"BoolNode",
-		"BranchNode",
-		"ChainNode",
-		"CommandNode",
-		"CommentNode",
-		"DotNode",
-		"FieldNode",
-		"IdentifierNode",
-		"IfNode",
-		"IsEmptyTree",
-		"ListNode",
-		"Mode",
-		"New",
-		"NewIdentifier",
-		"NilNode",
-		"Node",
-		"NodeAction",
-		"NodeBool",
-		"NodeChain",
-		"NodeCommand",
-		"NodeComment",
-		"NodeDot",
-		"NodeField",
-		"NodeIdentifier",
-		"NodeIf",
-		"NodeList",
-		"NodeNil",
-		"NodeNumber",
-		"NodePipe",
-		"NodeRange",
-		"NodeString",
-		"NodeTemplate",
-		"NodeText",
-		"NodeType",
-		"NodeVariable",
-		"NodeWith",
-		"NumberNode",
-		"Parse",
-		"ParseComments",
-		"PipeNode",
-		"Pos",
-		"RangeNode",
-		"StringNode",
-		"TemplateNode",
-		"TextNode",
-		"Tree",
-		"VariableNode",
-		"WithNode",
-	},
-	"time": []string{
-		"ANSIC",
-		"After",
-		"AfterFunc",
-		"April",
-		"August",
-		"Date",
-		"December",
-		"Duration",
-		"February",
-		"FixedZone",
-		"Friday",
-		"Hour",
-		"January",
-		"July",
-		"June",
-		"Kitchen",
-		"LoadLocation",
-		"LoadLocationFromTZData",
-		"Local",
-		"Location",
-		"March",
-		"May",
-		"Microsecond",
-		"Millisecond",
-		"Minute",
-		"Monday",
-		"Month",
-		"Nanosecond",
-		"NewTicker",
-		"NewTimer",
-		"November",
-		"Now",
-		"October",
-		"Parse",
-		"ParseDuration",
-		"ParseError",
-		"ParseInLocation",
-		"RFC1123",
-		"RFC1123Z",
-		"RFC3339",
-		"RFC3339Nano",
-		"RFC822",
-		"RFC822Z",
-		"RFC850",
-		"RubyDate",
-		"Saturday",
-		"Second",
-		"September",
-		"Since",
-		"Sleep",
-		"Stamp",
-		"StampMicro",
-		"StampMilli",
-		"StampNano",
-		"Sunday",
-		"Thursday",
-		"Tick",
-		"Ticker",
-		"Time",
-		"Timer",
-		"Tuesday",
-		"UTC",
-		"Unix",
-		"UnixDate",
-		"Until",
-		"Wednesday",
-		"Weekday",
-	},
-	"unicode": []string{
-		"ASCII_Hex_Digit",
-		"Adlam",
-		"Ahom",
-		"Anatolian_Hieroglyphs",
-		"Arabic",
-		"Armenian",
-		"Avestan",
-		"AzeriCase",
-		"Balinese",
-		"Bamum",
-		"Bassa_Vah",
-		"Batak",
-		"Bengali",
-		"Bhaiksuki",
-		"Bidi_Control",
-		"Bopomofo",
-		"Brahmi",
-		"Braille",
-		"Buginese",
-		"Buhid",
-		"C",
-		"Canadian_Aboriginal",
-		"Carian",
-		"CaseRange",
-		"CaseRanges",
-		"Categories",
-		"Caucasian_Albanian",
-		"Cc",
-		"Cf",
-		"Chakma",
-		"Cham",
-		"Cherokee",
-		"Chorasmian",
-		"Co",
-		"Common",
-		"Coptic",
-		"Cs",
-		"Cuneiform",
-		"Cypriot",
-		"Cyrillic",
-		"Dash",
-		"Deprecated",
-		"Deseret",
-		"Devanagari",
-		"Diacritic",
-		"Digit",
-		"Dives_Akuru",
-		"Dogra",
-		"Duployan",
-		"Egyptian_Hieroglyphs",
-		"Elbasan",
-		"Elymaic",
-		"Ethiopic",
-		"Extender",
-		"FoldCategory",
-		"FoldScript",
-		"Georgian",
-		"Glagolitic",
-		"Gothic",
-		"Grantha",
-		"GraphicRanges",
-		"Greek",
-		"Gujarati",
-		"Gunjala_Gondi",
-		"Gurmukhi",
-		"Han",
-		"Hangul",
-		"Hanifi_Rohingya",
-		"Hanunoo",
-		"Hatran",
-		"Hebrew",
-		"Hex_Digit",
-		"Hiragana",
-		"Hyphen",
-		"IDS_Binary_Operator",
-		"IDS_Trinary_Operator",
-		"Ideographic",
-		"Imperial_Aramaic",
-		"In",
-		"Inherited",
-		"Inscriptional_Pahlavi",
-		"Inscriptional_Parthian",
-		"Is",
-		"IsControl",
-		"IsDigit",
-		"IsGraphic",
-		"IsLetter",
-		"IsLower",
-		"IsMark",
-		"IsNumber",
-		"IsOneOf",
-		"IsPrint",
-		"IsPunct",
-		"IsSpace",
-		"IsSymbol",
-		"IsTitle",
-		"IsUpper",
-		"Javanese",
-		"Join_Control",
-		"Kaithi",
-		"Kannada",
-		"Katakana",
-		"Kayah_Li",
-		"Kharoshthi",
-		"Khitan_Small_Script",
-		"Khmer",
-		"Khojki",
-		"Khudawadi",
-		"L",
-		"Lao",
-		"Latin",
-		"Lepcha",
-		"Letter",
-		"Limbu",
-		"Linear_A",
-		"Linear_B",
-		"Lisu",
-		"Ll",
-		"Lm",
-		"Lo",
-		"Logical_Order_Exception",
-		"Lower",
-		"LowerCase",
-		"Lt",
-		"Lu",
-		"Lycian",
-		"Lydian",
-		"M",
-		"Mahajani",
-		"Makasar",
-		"Malayalam",
-		"Mandaic",
-		"Manichaean",
-		"Marchen",
-		"Mark",
-		"Masaram_Gondi",
-		"MaxASCII",
-		"MaxCase",
-		"MaxLatin1",
-		"MaxRune",
-		"Mc",
-		"Me",
-		"Medefaidrin",
-		"Meetei_Mayek",
-		"Mende_Kikakui",
-		"Meroitic_Cursive",
-		"Meroitic_Hieroglyphs",
-		"Miao",
-		"Mn",
-		"Modi",
-		"Mongolian",
-		"Mro",
-		"Multani",
-		"Myanmar",
-		"N",
-		"Nabataean",
-		"Nandinagari",
-		"Nd",
-		"New_Tai_Lue",
-		"Newa",
-		"Nko",
-		"Nl",
-		"No",
-		"Noncharacter_Code_Point",
-		"Number",
-		"Nushu",
-		"Nyiakeng_Puachue_Hmong",
-		"Ogham",
-		"Ol_Chiki",
-		"Old_Hungarian",
-		"Old_Italic",
-		"Old_North_Arabian",
-		"Old_Permic",
-		"Old_Persian",
-		"Old_Sogdian",
-		"Old_South_Arabian",
-		"Old_Turkic",
-		"Oriya",
-		"Osage",
-		"Osmanya",
-		"Other",
-		"Other_Alphabetic",
-		"Other_Default_Ignorable_Code_Point",
-		"Other_Grapheme_Extend",
-		"Other_ID_Continue",
-		"Other_ID_Start",
-		"Other_Lowercase",
-		"Other_Math",
-		"Other_Uppercase",
-		"P",
-		"Pahawh_Hmong",
-		"Palmyrene",
-		"Pattern_Syntax",
-		"Pattern_White_Space",
-		"Pau_Cin_Hau",
-		"Pc",
-		"Pd",
-		"Pe",
-		"Pf",
-		"Phags_Pa",
-		"Phoenician",
-		"Pi",
-		"Po",
-		"Prepended_Concatenation_Mark",
-		"PrintRanges",
-		"Properties",
-		"Ps",
-		"Psalter_Pahlavi",
-		"Punct",
-		"Quotation_Mark",
-		"Radical",
-		"Range16",
-		"Range32",
-		"RangeTable",
-		"Regional_Indicator",
-		"Rejang",
-		"ReplacementChar",
-		"Runic",
-		"S",
-		"STerm",
-		"Samaritan",
-		"Saurashtra",
-		"Sc",
-		"Scripts",
-		"Sentence_Terminal",
-		"Sharada",
-		"Shavian",
-		"Siddham",
-		"SignWriting",
-		"SimpleFold",
-		"Sinhala",
-		"Sk",
-		"Sm",
-		"So",
-		"Soft_Dotted",
-		"Sogdian",
-		"Sora_Sompeng",
-		"Soyombo",
-		"Space",
-		"SpecialCase",
-		"Sundanese",
-		"Syloti_Nagri",
-		"Symbol",
-		"Syriac",
-		"Tagalog",
-		"Tagbanwa",
-		"Tai_Le",
-		"Tai_Tham",
-		"Tai_Viet",
-		"Takri",
-		"Tamil",
-		"Tangut",
-		"Telugu",
-		"Terminal_Punctuation",
-		"Thaana",
-		"Thai",
-		"Tibetan",
-		"Tifinagh",
-		"Tirhuta",
-		"Title",
-		"TitleCase",
-		"To",
-		"ToLower",
-		"ToTitle",
-		"ToUpper",
-		"TurkishCase",
-		"Ugaritic",
-		"Unified_Ideograph",
-		"Upper",
-		"UpperCase",
-		"UpperLower",
-		"Vai",
-		"Variation_Selector",
-		"Version",
-		"Wancho",
-		"Warang_Citi",
-		"White_Space",
-		"Yezidi",
-		"Yi",
-		"Z",
-		"Zanabazar_Square",
-		"Zl",
-		"Zp",
-		"Zs",
-	},
-	"unicode/utf16": []string{
-		"Decode",
-		"DecodeRune",
-		"Encode",
-		"EncodeRune",
-		"IsSurrogate",
-	},
-	"unicode/utf8": []string{
-		"DecodeLastRune",
-		"DecodeLastRuneInString",
-		"DecodeRune",
-		"DecodeRuneInString",
-		"EncodeRune",
-		"FullRune",
-		"FullRuneInString",
-		"MaxRune",
-		"RuneCount",
-		"RuneCountInString",
-		"RuneError",
-		"RuneLen",
-		"RuneSelf",
-		"RuneStart",
-		"UTFMax",
-		"Valid",
-		"ValidRune",
-		"ValidString",
-	},
-	"unsafe": []string{
-		"Alignof",
-		"ArbitraryType",
-		"Offsetof",
-		"Pointer",
-		"Sizeof",
-	},
-}

+ 0 - 11
vendor/golang.org/x/tools/internal/typeparams/doc.go

@@ -1,11 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package typeparams provides functions to work indirectly with type parameter
-// data stored in go/ast and go/types objects, while these API are guarded by a
-// build constraint.
-//
-// This package exists to make it easier for tools to work with generic code,
-// while also compiling against older Go versions.
-package typeparams

+ 0 - 90
vendor/golang.org/x/tools/internal/typeparams/notypeparams.go

@@ -1,90 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !typeparams || !go1.17
-// +build !typeparams !go1.17
-
-package typeparams
-
-import (
-	"go/ast"
-	"go/types"
-)
-
-// NOTE: doc comments must be kept in sync with typeparams.go.
-
-// Enabled reports whether type parameters are enabled in the current build
-// environment.
-const Enabled = false
-
-// UnpackIndex extracts all index expressions from e. For non-generic code this
-// is always one expression: e.Index, but may be more than one expression for
-// generic type instantiation.
-func UnpackIndex(e *ast.IndexExpr) []ast.Expr {
-	return []ast.Expr{e.Index}
-}
-
-// IsListExpr reports whether n is an *ast.ListExpr, which is a new node type
-// introduced to hold type arguments for generic type instantiation.
-func IsListExpr(n ast.Node) bool {
-	return false
-}
-
-// ForTypeDecl extracts the (possibly nil) type parameter node list from n.
-func ForTypeDecl(*ast.TypeSpec) *ast.FieldList {
-	return nil
-}
-
-// ForFuncDecl extracts the (possibly nil) type parameter node list from n.
-func ForFuncDecl(*ast.FuncDecl) *ast.FieldList {
-	return nil
-}
-
-// ForSignature extracts the (possibly empty) type parameter object list from
-// sig.
-func ForSignature(*types.Signature) []*types.TypeName {
-	return nil
-}
-
-// HasTypeSet reports if iface has a type set.
-func HasTypeSet(*types.Interface) bool {
-	return false
-}
-
-// IsComparable reports if iface is the comparable interface.
-func IsComparable(*types.Interface) bool {
-	return false
-}
-
-// IsConstraint reports whether iface may only be used as a type parameter
-// constraint (i.e. has a type set or is the comparable interface).
-func IsConstraint(*types.Interface) bool {
-	return false
-}
-
-// ForNamed extracts the (possibly empty) type parameter object list from
-// named.
-func ForNamed(*types.Named) []*types.TypeName {
-	return nil
-}
-
-// NamedTArgs extracts the (possibly empty) type argument list from named.
-func NamedTArgs(*types.Named) []types.Type {
-	return nil
-}
-
-// InitInferred initializes info to record inferred type information.
-func InitInferred(*types.Info) {
-}
-
-// GetInferred extracts inferred type information from info for e.
-//
-// The expression e may have an inferred type if it is an *ast.IndexExpr
-// representing partial instantiation of a generic function type for which type
-// arguments have been inferred using constraint type inference, or if it is an
-// *ast.CallExpr for which type type arguments have be inferred using both
-// constraint type inference and function argument inference.
-func GetInferred(*types.Info, ast.Expr) ([]types.Type, *types.Signature) {
-	return nil, nil
-}

+ 0 - 105
vendor/golang.org/x/tools/internal/typeparams/typeparams.go

@@ -1,105 +0,0 @@
-// Copyright 2021 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build typeparams && go1.17
-// +build typeparams,go1.17
-
-package typeparams
-
-import (
-	"go/ast"
-	"go/types"
-)
-
-// NOTE: doc comments must be kept in sync with notypeparams.go.
-
-// Enabled reports whether type parameters are enabled in the current build
-// environment.
-const Enabled = true
-
-// UnpackIndex extracts all index expressions from e. For non-generic code this
-// is always one expression: e.Index, but may be more than one expression for
-// generic type instantiation.
-func UnpackIndex(e *ast.IndexExpr) []ast.Expr {
-	if x, _ := e.Index.(*ast.ListExpr); x != nil {
-		return x.ElemList
-	}
-	if e.Index != nil {
-		return []ast.Expr{e.Index}
-	}
-	return nil
-}
-
-// IsListExpr reports whether n is an *ast.ListExpr, which is a new node type
-// introduced to hold type arguments for generic type instantiation.
-func IsListExpr(n ast.Node) bool {
-	_, ok := n.(*ast.ListExpr)
-	return ok
-}
-
-// ForTypeDecl extracts the (possibly nil) type parameter node list from n.
-func ForTypeDecl(n *ast.TypeSpec) *ast.FieldList {
-	return n.TParams
-}
-
-// ForFuncDecl extracts the (possibly nil) type parameter node list from n.
-func ForFuncDecl(n *ast.FuncDecl) *ast.FieldList {
-	if n.Type != nil {
-		return n.Type.TParams
-	}
-	return nil
-}
-
-// ForSignature extracts the (possibly empty) type parameter object list from
-// sig.
-func ForSignature(sig *types.Signature) []*types.TypeName {
-	return sig.TParams()
-}
-
-// HasTypeSet reports if iface has a type set.
-func HasTypeSet(iface *types.Interface) bool {
-	return iface.HasTypeList()
-}
-
-// IsComparable reports if iface is the comparable interface.
-func IsComparable(iface *types.Interface) bool {
-	return iface.IsComparable()
-}
-
-// IsConstraint reports whether iface may only be used as a type parameter
-// constraint (i.e. has a type set or is the comparable interface).
-func IsConstraint(iface *types.Interface) bool {
-	return iface.IsConstraint()
-}
-
-// ForNamed extracts the (possibly empty) type parameter object list from
-// named.
-func ForNamed(named *types.Named) []*types.TypeName {
-	return named.TParams()
-}
-
-// NamedTArgs extracts the (possibly empty) type argument list from named.
-func NamedTArgs(named *types.Named) []types.Type {
-	return named.TArgs()
-}
-
-// InitInferred initializes info to record inferred type information.
-func InitInferred(info *types.Info) {
-	info.Inferred = make(map[ast.Expr]types.Inferred)
-}
-
-// GetInferred extracts inferred type information from info for e.
-//
-// The expression e may have an inferred type if it is an *ast.IndexExpr
-// representing partial instantiation of a generic function type for which type
-// arguments have been inferred using constraint type inference, or if it is an
-// *ast.CallExpr for which type type arguments have be inferred using both
-// constraint type inference and function argument inference.
-func GetInferred(info *types.Info, e ast.Expr) ([]types.Type, *types.Signature) {
-	if info.Inferred == nil {
-		return nil, nil
-	}
-	inf := info.Inferred[e]
-	return inf.TArgs, inf.Sig
-}

+ 43 - 30
vendor/google.golang.org/api/internal/creds.go

@@ -7,6 +7,7 @@ package internal
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io/ioutil"
 
@@ -62,56 +63,68 @@ const (
 	serviceAccountKey = "service_account"
 )
 
-// credentialsFromJSON returns a google.Credentials based on the input.
+// credentialsFromJSON returns a google.Credentials from the JSON data
 //
-// - A self-signed JWT auth flow will be executed if: the data file is a service
-//   account, no user are scopes provided, an audience is provided, a user
-//   specified endpoint is not provided, and credentials will not be
-//   impersonated.
+// - A self-signed JWT flow will be executed if the following conditions are
+// met:
+//   (1) At least one of the following is true:
+//       (a) No scope is provided
+//       (b) Scope for self-signed JWT flow is enabled
+//       (c) Audiences are explicitly provided by users
+//   (2) No service account impersontation
 //
-// - Otherwise, executes a stanard OAuth 2.0 flow.
+// - Otherwise, executes standard OAuth 2.0 flow
+// More details: google.aip.dev/auth/4111
 func credentialsFromJSON(ctx context.Context, data []byte, ds *DialSettings) (*google.Credentials, error) {
+	// By default, a standard OAuth 2.0 token source is created
 	cred, err := google.CredentialsFromJSON(ctx, data, ds.GetScopes()...)
 	if err != nil {
 		return nil, err
 	}
-	// Standard OAuth 2.0 Flow
-	if len(data) == 0 ||
-		len(ds.Scopes) > 0 ||
-		(ds.DefaultAudience == "" && len(ds.Audiences) == 0) ||
-		ds.ImpersonationConfig != nil ||
-		ds.Endpoint != "" {
-		return cred, nil
-	}
 
-	// Check if JSON is a service account and if so create a self-signed JWT.
-	var f struct {
-		Type string `json:"type"`
-		// The rest JSON fields are omitted because they are not used.
-	}
-	if err := json.Unmarshal(cred.JSON, &f); err != nil {
+	// Override the token source to use self-signed JWT if conditions are met
+	isJWTFlow, err := isSelfSignedJWTFlow(data, ds)
+	if err != nil {
 		return nil, err
 	}
-	if f.Type == serviceAccountKey {
-		ts, err := selfSignedJWTTokenSource(data, ds.DefaultAudience, ds.Audiences)
+	if isJWTFlow {
+		ts, err := selfSignedJWTTokenSource(data, ds)
 		if err != nil {
 			return nil, err
 		}
 		cred.TokenSource = ts
 	}
+
 	return cred, err
 }
 
-func selfSignedJWTTokenSource(data []byte, defaultAudience string, audiences []string) (oauth2.TokenSource, error) {
-	audience := defaultAudience
-	if len(audiences) > 0 {
-		// TODO(shinfan): Update golang oauth to support multiple audiences.
-		if len(audiences) > 1 {
-			return nil, fmt.Errorf("multiple audiences support is not implemented")
+func isSelfSignedJWTFlow(data []byte, ds *DialSettings) (bool, error) {
+	if (ds.EnableJwtWithScope || ds.HasCustomAudience()) &&
+		ds.ImpersonationConfig == nil {
+		// Check if JSON is a service account and if so create a self-signed JWT.
+		var f struct {
+			Type string `json:"type"`
+			// The rest JSON fields are omitted because they are not used.
 		}
-		audience = audiences[0]
+		if err := json.Unmarshal(data, &f); err != nil {
+			return false, err
+		}
+		return f.Type == serviceAccountKey, nil
+	}
+	return false, nil
+}
+
+func selfSignedJWTTokenSource(data []byte, ds *DialSettings) (oauth2.TokenSource, error) {
+	if len(ds.GetScopes()) > 0 && !ds.HasCustomAudience() {
+		// Scopes are preferred in self-signed JWT unless the scope is not available
+		// or a custom audience is used.
+		return google.JWTAccessTokenSourceWithScope(data, ds.GetScopes()...)
+	} else if ds.GetAudience() != "" {
+		// Fallback to audience if scope is not provided
+		return google.JWTAccessTokenSourceFromJSON(data, ds.GetAudience())
+	} else {
+		return nil, errors.New("neither scopes or audience are available for the self-signed JWT")
 	}
-	return google.JWTAccessTokenSourceFromJSON(data, audience)
 }
 
 // QuotaProjectFromCreds returns the quota project from the JSON blob in the provided credentials.

+ 14 - 0
vendor/google.golang.org/api/internal/settings.go

@@ -24,6 +24,7 @@ type DialSettings struct {
 	DefaultMTLSEndpoint string
 	Scopes              []string
 	DefaultScopes       []string
+	EnableJwtWithScope  bool
 	TokenSource         oauth2.TokenSource
 	Credentials         *google.Credentials
 	CredentialsFile     string // if set, Token Source is ignored.
@@ -60,6 +61,19 @@ func (ds *DialSettings) GetScopes() []string {
 	return ds.DefaultScopes
 }
 
+// GetAudience returns the user-provided audience, if set, or else falls back to the default audience.
+func (ds *DialSettings) GetAudience() string {
+	if ds.HasCustomAudience() {
+		return ds.Audiences[0]
+	}
+	return ds.DefaultAudience
+}
+
+// HasCustomAudience returns true if a custom audience is provided by users.
+func (ds *DialSettings) HasCustomAudience() bool {
+	return len(ds.Audiences) > 0
+}
+
 // Validate reports an error if ds is invalid.
 func (ds *DialSettings) Validate() error {
 	if ds.SkipValidation {

+ 12 - 0
vendor/google.golang.org/api/option/internaloption/internaloption.go

@@ -94,3 +94,15 @@ func (w withDefaultScopes) Apply(o *internal.DialSettings) {
 	o.DefaultScopes = make([]string, len(w))
 	copy(o.DefaultScopes, w)
 }
+
+// EnableJwtWithScope returns a ClientOption that specifies if scope can be used
+// with self-signed JWT.
+func EnableJwtWithScope() option.ClientOption {
+	return enableJwtWithScope(true)
+}
+
+type enableJwtWithScope bool
+
+func (w enableJwtWithScope) Apply(o *internal.DialSettings) {
+	o.EnableJwtWithScope = bool(w)
+}

+ 0 - 2
vendor/google.golang.org/api/transport/internal/dca/dca.go

@@ -68,8 +68,6 @@ func GetClientCertificateSourceAndEndpoint(settings *internal.DialSettings) (cer
 func getClientCertificateSource(settings *internal.DialSettings) (cert.Source, error) {
 	if !isClientCertificateEnabled() {
 		return nil, nil
-	} else if settings.HTTPClient != nil {
-		return nil, nil // HTTPClient is incompatible with ClientCertificateSource
 	} else if settings.ClientCertSource != nil {
 		return settings.ClientCertSource, nil
 	} else {

+ 0 - 168
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init.go

@@ -1,168 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package internal_gengo
-
-import (
-	"unicode"
-	"unicode/utf8"
-
-	"google.golang.org/protobuf/compiler/protogen"
-	"google.golang.org/protobuf/encoding/protowire"
-
-	"google.golang.org/protobuf/types/descriptorpb"
-)
-
-type fileInfo struct {
-	*protogen.File
-
-	allEnums      []*enumInfo
-	allMessages   []*messageInfo
-	allExtensions []*extensionInfo
-
-	allEnumsByPtr         map[*enumInfo]int    // value is index into allEnums
-	allMessagesByPtr      map[*messageInfo]int // value is index into allMessages
-	allMessageFieldsByPtr map[*messageInfo]*structFields
-
-	// needRawDesc specifies whether the generator should emit logic to provide
-	// the legacy raw descriptor in GZIP'd form.
-	// This is updated by enum and message generation logic as necessary,
-	// and checked at the end of file generation.
-	needRawDesc bool
-}
-
-type structFields struct {
-	count      int
-	unexported map[int]string
-}
-
-func (sf *structFields) append(name string) {
-	if r, _ := utf8.DecodeRuneInString(name); !unicode.IsUpper(r) {
-		if sf.unexported == nil {
-			sf.unexported = make(map[int]string)
-		}
-		sf.unexported[sf.count] = name
-	}
-	sf.count++
-}
-
-func newFileInfo(file *protogen.File) *fileInfo {
-	f := &fileInfo{File: file}
-
-	// Collect all enums, messages, and extensions in "flattened ordering".
-	// See filetype.TypeBuilder.
-	var walkMessages func([]*protogen.Message, func(*protogen.Message))
-	walkMessages = func(messages []*protogen.Message, f func(*protogen.Message)) {
-		for _, m := range messages {
-			f(m)
-			walkMessages(m.Messages, f)
-		}
-	}
-	initEnumInfos := func(enums []*protogen.Enum) {
-		for _, enum := range enums {
-			f.allEnums = append(f.allEnums, newEnumInfo(f, enum))
-		}
-	}
-	initMessageInfos := func(messages []*protogen.Message) {
-		for _, message := range messages {
-			f.allMessages = append(f.allMessages, newMessageInfo(f, message))
-		}
-	}
-	initExtensionInfos := func(extensions []*protogen.Extension) {
-		for _, extension := range extensions {
-			f.allExtensions = append(f.allExtensions, newExtensionInfo(f, extension))
-		}
-	}
-	initEnumInfos(f.Enums)
-	initMessageInfos(f.Messages)
-	initExtensionInfos(f.Extensions)
-	walkMessages(f.Messages, func(m *protogen.Message) {
-		initEnumInfos(m.Enums)
-		initMessageInfos(m.Messages)
-		initExtensionInfos(m.Extensions)
-	})
-
-	// Derive a reverse mapping of enum and message pointers to their index
-	// in allEnums and allMessages.
-	if len(f.allEnums) > 0 {
-		f.allEnumsByPtr = make(map[*enumInfo]int)
-		for i, e := range f.allEnums {
-			f.allEnumsByPtr[e] = i
-		}
-	}
-	if len(f.allMessages) > 0 {
-		f.allMessagesByPtr = make(map[*messageInfo]int)
-		f.allMessageFieldsByPtr = make(map[*messageInfo]*structFields)
-		for i, m := range f.allMessages {
-			f.allMessagesByPtr[m] = i
-			f.allMessageFieldsByPtr[m] = new(structFields)
-		}
-	}
-
-	return f
-}
-
-type enumInfo struct {
-	*protogen.Enum
-
-	genJSONMethod    bool
-	genRawDescMethod bool
-}
-
-func newEnumInfo(f *fileInfo, enum *protogen.Enum) *enumInfo {
-	e := &enumInfo{Enum: enum}
-	e.genJSONMethod = true
-	e.genRawDescMethod = true
-	return e
-}
-
-type messageInfo struct {
-	*protogen.Message
-
-	genRawDescMethod  bool
-	genExtRangeMethod bool
-
-	isTracked bool
-	hasWeak   bool
-}
-
-func newMessageInfo(f *fileInfo, message *protogen.Message) *messageInfo {
-	m := &messageInfo{Message: message}
-	m.genRawDescMethod = true
-	m.genExtRangeMethod = true
-	m.isTracked = isTrackedMessage(m)
-	for _, field := range m.Fields {
-		m.hasWeak = m.hasWeak || field.Desc.IsWeak()
-	}
-	return m
-}
-
-// isTrackedMessage reports whether field tracking is enabled on the message.
-func isTrackedMessage(m *messageInfo) (tracked bool) {
-	const trackFieldUse_fieldNumber = 37383685
-
-	// Decode the option from unknown fields to avoid a dependency on the
-	// annotation proto from protoc-gen-go.
-	b := m.Desc.Options().(*descriptorpb.MessageOptions).ProtoReflect().GetUnknown()
-	for len(b) > 0 {
-		num, typ, n := protowire.ConsumeTag(b)
-		b = b[n:]
-		if num == trackFieldUse_fieldNumber && typ == protowire.VarintType {
-			v, _ := protowire.ConsumeVarint(b)
-			tracked = protowire.DecodeBool(v)
-		}
-		m := protowire.ConsumeFieldValue(num, typ, b)
-		b = b[m:]
-	}
-	return tracked
-}
-
-type extensionInfo struct {
-	*protogen.Extension
-}
-
-func newExtensionInfo(f *fileInfo, extension *protogen.Extension) *extensionInfo {
-	x := &extensionInfo{Extension: extension}
-	return x
-}

+ 0 - 884
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/main.go

@@ -1,884 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package internal_gengo is internal to the protobuf module.
-package internal_gengo
-
-import (
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/token"
-	"math"
-	"strconv"
-	"strings"
-	"unicode"
-	"unicode/utf8"
-
-	"google.golang.org/protobuf/compiler/protogen"
-	"google.golang.org/protobuf/internal/encoding/tag"
-	"google.golang.org/protobuf/internal/genid"
-	"google.golang.org/protobuf/internal/version"
-	"google.golang.org/protobuf/reflect/protoreflect"
-	"google.golang.org/protobuf/runtime/protoimpl"
-
-	"google.golang.org/protobuf/types/descriptorpb"
-	"google.golang.org/protobuf/types/pluginpb"
-)
-
-// SupportedFeatures reports the set of supported protobuf language features.
-var SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL)
-
-// GenerateVersionMarkers specifies whether to generate version markers.
-var GenerateVersionMarkers = true
-
-// Standard library dependencies.
-const (
-	base64Package  = protogen.GoImportPath("encoding/base64")
-	mathPackage    = protogen.GoImportPath("math")
-	reflectPackage = protogen.GoImportPath("reflect")
-	sortPackage    = protogen.GoImportPath("sort")
-	stringsPackage = protogen.GoImportPath("strings")
-	syncPackage    = protogen.GoImportPath("sync")
-	timePackage    = protogen.GoImportPath("time")
-	utf8Package    = protogen.GoImportPath("unicode/utf8")
-)
-
-// Protobuf library dependencies.
-//
-// These are declared as an interface type so that they can be more easily
-// patched to support unique build environments that impose restrictions
-// on the dependencies of generated source code.
-var (
-	protoPackage         goImportPath = protogen.GoImportPath("google.golang.org/protobuf/proto")
-	protoifacePackage    goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoiface")
-	protoimplPackage     goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoimpl")
-	protojsonPackage     goImportPath = protogen.GoImportPath("google.golang.org/protobuf/encoding/protojson")
-	protoreflectPackage  goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoreflect")
-	protoregistryPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoregistry")
-)
-
-type goImportPath interface {
-	String() string
-	Ident(string) protogen.GoIdent
-}
-
-// GenerateFile generates the contents of a .pb.go file.
-func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.GeneratedFile {
-	filename := file.GeneratedFilenamePrefix + ".pb.go"
-	g := gen.NewGeneratedFile(filename, file.GoImportPath)
-	f := newFileInfo(file)
-
-	genStandaloneComments(g, f, int32(genid.FileDescriptorProto_Syntax_field_number))
-	genGeneratedHeader(gen, g, f)
-	genStandaloneComments(g, f, int32(genid.FileDescriptorProto_Package_field_number))
-
-	packageDoc := genPackageKnownComment(f)
-	g.P(packageDoc, "package ", f.GoPackageName)
-	g.P()
-
-	// Emit a static check that enforces a minimum version of the proto package.
-	if GenerateVersionMarkers {
-		g.P("const (")
-		g.P("// Verify that this generated code is sufficiently up-to-date.")
-		g.P("_ = ", protoimplPackage.Ident("EnforceVersion"), "(", protoimpl.GenVersion, " - ", protoimplPackage.Ident("MinVersion"), ")")
-		g.P("// Verify that runtime/protoimpl is sufficiently up-to-date.")
-		g.P("_ = ", protoimplPackage.Ident("EnforceVersion"), "(", protoimplPackage.Ident("MaxVersion"), " - ", protoimpl.GenVersion, ")")
-		g.P(")")
-		g.P()
-	}
-
-	for i, imps := 0, f.Desc.Imports(); i < imps.Len(); i++ {
-		genImport(gen, g, f, imps.Get(i))
-	}
-	for _, enum := range f.allEnums {
-		genEnum(g, f, enum)
-	}
-	for _, message := range f.allMessages {
-		genMessage(g, f, message)
-	}
-	genExtensions(g, f)
-
-	genReflectFileDescriptor(gen, g, f)
-
-	return g
-}
-
-// genStandaloneComments prints all leading comments for a FileDescriptorProto
-// location identified by the field number n.
-func genStandaloneComments(g *protogen.GeneratedFile, f *fileInfo, n int32) {
-	loc := f.Desc.SourceLocations().ByPath(protoreflect.SourcePath{n})
-	for _, s := range loc.LeadingDetachedComments {
-		g.P(protogen.Comments(s))
-		g.P()
-	}
-	if s := loc.LeadingComments; s != "" {
-		g.P(protogen.Comments(s))
-		g.P()
-	}
-}
-
-func genGeneratedHeader(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
-	g.P("// Code generated by protoc-gen-go. DO NOT EDIT.")
-
-	if GenerateVersionMarkers {
-		g.P("// versions:")
-		protocGenGoVersion := version.String()
-		protocVersion := "(unknown)"
-		if v := gen.Request.GetCompilerVersion(); v != nil {
-			protocVersion = fmt.Sprintf("v%v.%v.%v", v.GetMajor(), v.GetMinor(), v.GetPatch())
-			if s := v.GetSuffix(); s != "" {
-				protocVersion += "-" + s
-			}
-		}
-		g.P("// \tprotoc-gen-go ", protocGenGoVersion)
-		g.P("// \tprotoc        ", protocVersion)
-	}
-
-	if f.Proto.GetOptions().GetDeprecated() {
-		g.P("// ", f.Desc.Path(), " is a deprecated file.")
-	} else {
-		g.P("// source: ", f.Desc.Path())
-	}
-	g.P()
-}
-
-func genImport(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, imp protoreflect.FileImport) {
-	impFile, ok := gen.FilesByPath[imp.Path()]
-	if !ok {
-		return
-	}
-	if impFile.GoImportPath == f.GoImportPath {
-		// Don't generate imports or aliases for types in the same Go package.
-		return
-	}
-	// Generate imports for all non-weak dependencies, even if they are not
-	// referenced, because other code and tools depend on having the
-	// full transitive closure of protocol buffer types in the binary.
-	if !imp.IsWeak {
-		g.Import(impFile.GoImportPath)
-	}
-	if !imp.IsPublic {
-		return
-	}
-
-	// Generate public imports by generating the imported file, parsing it,
-	// and extracting every symbol that should receive a forwarding declaration.
-	impGen := GenerateFile(gen, impFile)
-	impGen.Skip()
-	b, err := impGen.Content()
-	if err != nil {
-		gen.Error(err)
-		return
-	}
-	fset := token.NewFileSet()
-	astFile, err := parser.ParseFile(fset, "", b, parser.ParseComments)
-	if err != nil {
-		gen.Error(err)
-		return
-	}
-	genForward := func(tok token.Token, name string, expr ast.Expr) {
-		// Don't import unexported symbols.
-		r, _ := utf8.DecodeRuneInString(name)
-		if !unicode.IsUpper(r) {
-			return
-		}
-		// Don't import the FileDescriptor.
-		if name == impFile.GoDescriptorIdent.GoName {
-			return
-		}
-		// Don't import decls referencing a symbol defined in another package.
-		// i.e., don't import decls which are themselves public imports:
-		//
-		//	type T = somepackage.T
-		if _, ok := expr.(*ast.SelectorExpr); ok {
-			return
-		}
-		g.P(tok, " ", name, " = ", impFile.GoImportPath.Ident(name))
-	}
-	g.P("// Symbols defined in public import of ", imp.Path(), ".")
-	g.P()
-	for _, decl := range astFile.Decls {
-		switch decl := decl.(type) {
-		case *ast.GenDecl:
-			for _, spec := range decl.Specs {
-				switch spec := spec.(type) {
-				case *ast.TypeSpec:
-					genForward(decl.Tok, spec.Name.Name, spec.Type)
-				case *ast.ValueSpec:
-					for i, name := range spec.Names {
-						var expr ast.Expr
-						if i < len(spec.Values) {
-							expr = spec.Values[i]
-						}
-						genForward(decl.Tok, name.Name, expr)
-					}
-				case *ast.ImportSpec:
-				default:
-					panic(fmt.Sprintf("can't generate forward for spec type %T", spec))
-				}
-			}
-		}
-	}
-	g.P()
-}
-
-func genEnum(g *protogen.GeneratedFile, f *fileInfo, e *enumInfo) {
-	// Enum type declaration.
-	g.Annotate(e.GoIdent.GoName, e.Location)
-	leadingComments := appendDeprecationSuffix(e.Comments.Leading,
-		e.Desc.Options().(*descriptorpb.EnumOptions).GetDeprecated())
-	g.P(leadingComments,
-		"type ", e.GoIdent, " int32")
-
-	// Enum value constants.
-	g.P("const (")
-	for _, value := range e.Values {
-		g.Annotate(value.GoIdent.GoName, value.Location)
-		leadingComments := appendDeprecationSuffix(value.Comments.Leading,
-			value.Desc.Options().(*descriptorpb.EnumValueOptions).GetDeprecated())
-		g.P(leadingComments,
-			value.GoIdent, " ", e.GoIdent, " = ", value.Desc.Number(),
-			trailingComment(value.Comments.Trailing))
-	}
-	g.P(")")
-	g.P()
-
-	// Enum value maps.
-	g.P("// Enum value maps for ", e.GoIdent, ".")
-	g.P("var (")
-	g.P(e.GoIdent.GoName+"_name", " = map[int32]string{")
-	for _, value := range e.Values {
-		duplicate := ""
-		if value.Desc != e.Desc.Values().ByNumber(value.Desc.Number()) {
-			duplicate = "// Duplicate value: "
-		}
-		g.P(duplicate, value.Desc.Number(), ": ", strconv.Quote(string(value.Desc.Name())), ",")
-	}
-	g.P("}")
-	g.P(e.GoIdent.GoName+"_value", " = map[string]int32{")
-	for _, value := range e.Values {
-		g.P(strconv.Quote(string(value.Desc.Name())), ": ", value.Desc.Number(), ",")
-	}
-	g.P("}")
-	g.P(")")
-	g.P()
-
-	// Enum method.
-	//
-	// NOTE: A pointer value is needed to represent presence in proto2.
-	// Since a proto2 message can reference a proto3 enum, it is useful to
-	// always generate this method (even on proto3 enums) to support that case.
-	g.P("func (x ", e.GoIdent, ") Enum() *", e.GoIdent, " {")
-	g.P("p := new(", e.GoIdent, ")")
-	g.P("*p = x")
-	g.P("return p")
-	g.P("}")
-	g.P()
-
-	// String method.
-	g.P("func (x ", e.GoIdent, ") String() string {")
-	g.P("return ", protoimplPackage.Ident("X"), ".EnumStringOf(x.Descriptor(), ", protoreflectPackage.Ident("EnumNumber"), "(x))")
-	g.P("}")
-	g.P()
-
-	genEnumReflectMethods(g, f, e)
-
-	// UnmarshalJSON method.
-	if e.genJSONMethod && e.Desc.Syntax() == protoreflect.Proto2 {
-		g.P("// Deprecated: Do not use.")
-		g.P("func (x *", e.GoIdent, ") UnmarshalJSON(b []byte) error {")
-		g.P("num, err := ", protoimplPackage.Ident("X"), ".UnmarshalJSONEnum(x.Descriptor(), b)")
-		g.P("if err != nil {")
-		g.P("return err")
-		g.P("}")
-		g.P("*x = ", e.GoIdent, "(num)")
-		g.P("return nil")
-		g.P("}")
-		g.P()
-	}
-
-	// EnumDescriptor method.
-	if e.genRawDescMethod {
-		var indexes []string
-		for i := 1; i < len(e.Location.Path); i += 2 {
-			indexes = append(indexes, strconv.Itoa(int(e.Location.Path[i])))
-		}
-		g.P("// Deprecated: Use ", e.GoIdent, ".Descriptor instead.")
-		g.P("func (", e.GoIdent, ") EnumDescriptor() ([]byte, []int) {")
-		g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}")
-		g.P("}")
-		g.P()
-		f.needRawDesc = true
-	}
-}
-
-func genMessage(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	if m.Desc.IsMapEntry() {
-		return
-	}
-
-	// Message type declaration.
-	g.Annotate(m.GoIdent.GoName, m.Location)
-	leadingComments := appendDeprecationSuffix(m.Comments.Leading,
-		m.Desc.Options().(*descriptorpb.MessageOptions).GetDeprecated())
-	g.P(leadingComments,
-		"type ", m.GoIdent, " struct {")
-	genMessageFields(g, f, m)
-	g.P("}")
-	g.P()
-
-	genMessageKnownFunctions(g, f, m)
-	genMessageDefaultDecls(g, f, m)
-	genMessageMethods(g, f, m)
-	genMessageOneofWrapperTypes(g, f, m)
-}
-
-func genMessageFields(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	sf := f.allMessageFieldsByPtr[m]
-	genMessageInternalFields(g, f, m, sf)
-	for _, field := range m.Fields {
-		genMessageField(g, f, m, field, sf)
-	}
-}
-
-func genMessageInternalFields(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, sf *structFields) {
-	g.P(genid.State_goname, " ", protoimplPackage.Ident("MessageState"))
-	sf.append(genid.State_goname)
-	g.P(genid.SizeCache_goname, " ", protoimplPackage.Ident("SizeCache"))
-	sf.append(genid.SizeCache_goname)
-	if m.hasWeak {
-		g.P(genid.WeakFields_goname, " ", protoimplPackage.Ident("WeakFields"))
-		sf.append(genid.WeakFields_goname)
-	}
-	g.P(genid.UnknownFields_goname, " ", protoimplPackage.Ident("UnknownFields"))
-	sf.append(genid.UnknownFields_goname)
-	if m.Desc.ExtensionRanges().Len() > 0 {
-		g.P(genid.ExtensionFields_goname, " ", protoimplPackage.Ident("ExtensionFields"))
-		sf.append(genid.ExtensionFields_goname)
-	}
-	if sf.count > 0 {
-		g.P()
-	}
-}
-
-func genMessageField(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, field *protogen.Field, sf *structFields) {
-	if oneof := field.Oneof; oneof != nil && !oneof.Desc.IsSynthetic() {
-		// It would be a bit simpler to iterate over the oneofs below,
-		// but generating the field here keeps the contents of the Go
-		// struct in the same order as the contents of the source
-		// .proto file.
-		if oneof.Fields[0] != field {
-			return // only generate for first appearance
-		}
-
-		tags := structTags{
-			{"protobuf_oneof", string(oneof.Desc.Name())},
-		}
-		if m.isTracked {
-			tags = append(tags, gotrackTags...)
-		}
-
-		g.Annotate(m.GoIdent.GoName+"."+oneof.GoName, oneof.Location)
-		leadingComments := oneof.Comments.Leading
-		if leadingComments != "" {
-			leadingComments += "\n"
-		}
-		ss := []string{fmt.Sprintf(" Types that are assignable to %s:\n", oneof.GoName)}
-		for _, field := range oneof.Fields {
-			ss = append(ss, "\t*"+field.GoIdent.GoName+"\n")
-		}
-		leadingComments += protogen.Comments(strings.Join(ss, ""))
-		g.P(leadingComments,
-			oneof.GoName, " ", oneofInterfaceName(oneof), tags)
-		sf.append(oneof.GoName)
-		return
-	}
-	goType, pointer := fieldGoType(g, f, field)
-	if pointer {
-		goType = "*" + goType
-	}
-	tags := structTags{
-		{"protobuf", fieldProtobufTagValue(field)},
-		{"json", fieldJSONTagValue(field)},
-	}
-	if field.Desc.IsMap() {
-		key := field.Message.Fields[0]
-		val := field.Message.Fields[1]
-		tags = append(tags, structTags{
-			{"protobuf_key", fieldProtobufTagValue(key)},
-			{"protobuf_val", fieldProtobufTagValue(val)},
-		}...)
-	}
-	if m.isTracked {
-		tags = append(tags, gotrackTags...)
-	}
-
-	name := field.GoName
-	if field.Desc.IsWeak() {
-		name = genid.WeakFieldPrefix_goname + name
-	}
-	g.Annotate(m.GoIdent.GoName+"."+name, field.Location)
-	leadingComments := appendDeprecationSuffix(field.Comments.Leading,
-		field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
-	g.P(leadingComments,
-		name, " ", goType, tags,
-		trailingComment(field.Comments.Trailing))
-	sf.append(field.GoName)
-}
-
-// genMessageDefaultDecls generates consts and vars holding the default
-// values of fields.
-func genMessageDefaultDecls(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	var consts, vars []string
-	for _, field := range m.Fields {
-		if !field.Desc.HasDefault() {
-			continue
-		}
-		name := "Default_" + m.GoIdent.GoName + "_" + field.GoName
-		goType, _ := fieldGoType(g, f, field)
-		defVal := field.Desc.Default()
-		switch field.Desc.Kind() {
-		case protoreflect.StringKind:
-			consts = append(consts, fmt.Sprintf("%s = %s(%q)", name, goType, defVal.String()))
-		case protoreflect.BytesKind:
-			vars = append(vars, fmt.Sprintf("%s = %s(%q)", name, goType, defVal.Bytes()))
-		case protoreflect.EnumKind:
-			idx := field.Desc.DefaultEnumValue().Index()
-			val := field.Enum.Values[idx]
-			if val.GoIdent.GoImportPath == f.GoImportPath {
-				consts = append(consts, fmt.Sprintf("%s = %s", name, g.QualifiedGoIdent(val.GoIdent)))
-			} else {
-				// If the enum value is declared in a different Go package,
-				// reference it by number since the name may not be correct.
-				// See https://github.com/golang/protobuf/issues/513.
-				consts = append(consts, fmt.Sprintf("%s = %s(%d) // %s",
-					name, g.QualifiedGoIdent(field.Enum.GoIdent), val.Desc.Number(), g.QualifiedGoIdent(val.GoIdent)))
-			}
-		case protoreflect.FloatKind, protoreflect.DoubleKind:
-			if f := defVal.Float(); math.IsNaN(f) || math.IsInf(f, 0) {
-				var fn, arg string
-				switch f := defVal.Float(); {
-				case math.IsInf(f, -1):
-					fn, arg = g.QualifiedGoIdent(mathPackage.Ident("Inf")), "-1"
-				case math.IsInf(f, +1):
-					fn, arg = g.QualifiedGoIdent(mathPackage.Ident("Inf")), "+1"
-				case math.IsNaN(f):
-					fn, arg = g.QualifiedGoIdent(mathPackage.Ident("NaN")), ""
-				}
-				vars = append(vars, fmt.Sprintf("%s = %s(%s(%s))", name, goType, fn, arg))
-			} else {
-				consts = append(consts, fmt.Sprintf("%s = %s(%v)", name, goType, f))
-			}
-		default:
-			consts = append(consts, fmt.Sprintf("%s = %s(%v)", name, goType, defVal.Interface()))
-		}
-	}
-	if len(consts) > 0 {
-		g.P("// Default values for ", m.GoIdent, " fields.")
-		g.P("const (")
-		for _, s := range consts {
-			g.P(s)
-		}
-		g.P(")")
-	}
-	if len(vars) > 0 {
-		g.P("// Default values for ", m.GoIdent, " fields.")
-		g.P("var (")
-		for _, s := range vars {
-			g.P(s)
-		}
-		g.P(")")
-	}
-	g.P()
-}
-
-func genMessageMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	genMessageBaseMethods(g, f, m)
-	genMessageGetterMethods(g, f, m)
-	genMessageSetterMethods(g, f, m)
-}
-
-func genMessageBaseMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	// Reset method.
-	g.P("func (x *", m.GoIdent, ") Reset() {")
-	g.P("*x = ", m.GoIdent, "{}")
-	g.P("if ", protoimplPackage.Ident("UnsafeEnabled"), " {")
-	g.P("mi := &", messageTypesVarName(f), "[", f.allMessagesByPtr[m], "]")
-	g.P("ms := ", protoimplPackage.Ident("X"), ".MessageStateOf(", protoimplPackage.Ident("Pointer"), "(x))")
-	g.P("ms.StoreMessageInfo(mi)")
-	g.P("}")
-	g.P("}")
-	g.P()
-
-	// String method.
-	g.P("func (x *", m.GoIdent, ") String() string {")
-	g.P("return ", protoimplPackage.Ident("X"), ".MessageStringOf(x)")
-	g.P("}")
-	g.P()
-
-	// ProtoMessage method.
-	g.P("func (*", m.GoIdent, ") ProtoMessage() {}")
-	g.P()
-
-	// ProtoReflect method.
-	genMessageReflectMethods(g, f, m)
-
-	// Descriptor method.
-	if m.genRawDescMethod {
-		var indexes []string
-		for i := 1; i < len(m.Location.Path); i += 2 {
-			indexes = append(indexes, strconv.Itoa(int(m.Location.Path[i])))
-		}
-		g.P("// Deprecated: Use ", m.GoIdent, ".ProtoReflect.Descriptor instead.")
-		g.P("func (*", m.GoIdent, ") Descriptor() ([]byte, []int) {")
-		g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}")
-		g.P("}")
-		g.P()
-		f.needRawDesc = true
-	}
-}
-
-func genMessageGetterMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	for _, field := range m.Fields {
-		genNoInterfacePragma(g, m.isTracked)
-
-		// Getter for parent oneof.
-		if oneof := field.Oneof; oneof != nil && oneof.Fields[0] == field && !oneof.Desc.IsSynthetic() {
-			g.Annotate(m.GoIdent.GoName+".Get"+oneof.GoName, oneof.Location)
-			g.P("func (m *", m.GoIdent.GoName, ") Get", oneof.GoName, "() ", oneofInterfaceName(oneof), " {")
-			g.P("if m != nil {")
-			g.P("return m.", oneof.GoName)
-			g.P("}")
-			g.P("return nil")
-			g.P("}")
-			g.P()
-		}
-
-		// Getter for message field.
-		goType, pointer := fieldGoType(g, f, field)
-		defaultValue := fieldDefaultValue(g, f, m, field)
-		g.Annotate(m.GoIdent.GoName+".Get"+field.GoName, field.Location)
-		leadingComments := appendDeprecationSuffix("",
-			field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
-		switch {
-		case field.Desc.IsWeak():
-			g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", protoPackage.Ident("Message"), "{")
-			g.P("var w ", protoimplPackage.Ident("WeakFields"))
-			g.P("if x != nil {")
-			g.P("w = x.", genid.WeakFields_goname)
-			if m.isTracked {
-				g.P("_ = x.", genid.WeakFieldPrefix_goname+field.GoName)
-			}
-			g.P("}")
-			g.P("return ", protoimplPackage.Ident("X"), ".GetWeak(w, ", field.Desc.Number(), ", ", strconv.Quote(string(field.Message.Desc.FullName())), ")")
-			g.P("}")
-		case field.Oneof != nil && !field.Oneof.Desc.IsSynthetic():
-			g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", goType, " {")
-			g.P("if x, ok := x.Get", field.Oneof.GoName, "().(*", field.GoIdent, "); ok {")
-			g.P("return x.", field.GoName)
-			g.P("}")
-			g.P("return ", defaultValue)
-			g.P("}")
-		default:
-			g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", goType, " {")
-			if !field.Desc.HasPresence() || defaultValue == "nil" {
-				g.P("if x != nil {")
-			} else {
-				g.P("if x != nil && x.", field.GoName, " != nil {")
-			}
-			star := ""
-			if pointer {
-				star = "*"
-			}
-			g.P("return ", star, " x.", field.GoName)
-			g.P("}")
-			g.P("return ", defaultValue)
-			g.P("}")
-		}
-		g.P()
-	}
-}
-
-func genMessageSetterMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	for _, field := range m.Fields {
-		if !field.Desc.IsWeak() {
-			continue
-		}
-
-		genNoInterfacePragma(g, m.isTracked)
-
-		g.Annotate(m.GoIdent.GoName+".Set"+field.GoName, field.Location)
-		leadingComments := appendDeprecationSuffix("",
-			field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
-		g.P(leadingComments, "func (x *", m.GoIdent, ") Set", field.GoName, "(v ", protoPackage.Ident("Message"), ") {")
-		g.P("var w *", protoimplPackage.Ident("WeakFields"))
-		g.P("if x != nil {")
-		g.P("w = &x.", genid.WeakFields_goname)
-		if m.isTracked {
-			g.P("_ = x.", genid.WeakFieldPrefix_goname+field.GoName)
-		}
-		g.P("}")
-		g.P(protoimplPackage.Ident("X"), ".SetWeak(w, ", field.Desc.Number(), ", ", strconv.Quote(string(field.Message.Desc.FullName())), ", v)")
-		g.P("}")
-		g.P()
-	}
-}
-
-// fieldGoType returns the Go type used for a field.
-//
-// If it returns pointer=true, the struct field is a pointer to the type.
-func fieldGoType(g *protogen.GeneratedFile, f *fileInfo, field *protogen.Field) (goType string, pointer bool) {
-	if field.Desc.IsWeak() {
-		return "struct{}", false
-	}
-
-	pointer = field.Desc.HasPresence()
-	switch field.Desc.Kind() {
-	case protoreflect.BoolKind:
-		goType = "bool"
-	case protoreflect.EnumKind:
-		goType = g.QualifiedGoIdent(field.Enum.GoIdent)
-	case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
-		goType = "int32"
-	case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
-		goType = "uint32"
-	case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
-		goType = "int64"
-	case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
-		goType = "uint64"
-	case protoreflect.FloatKind:
-		goType = "float32"
-	case protoreflect.DoubleKind:
-		goType = "float64"
-	case protoreflect.StringKind:
-		goType = "string"
-	case protoreflect.BytesKind:
-		goType = "[]byte"
-		pointer = false // rely on nullability of slices for presence
-	case protoreflect.MessageKind, protoreflect.GroupKind:
-		goType = "*" + g.QualifiedGoIdent(field.Message.GoIdent)
-		pointer = false // pointer captured as part of the type
-	}
-	switch {
-	case field.Desc.IsList():
-		return "[]" + goType, false
-	case field.Desc.IsMap():
-		keyType, _ := fieldGoType(g, f, field.Message.Fields[0])
-		valType, _ := fieldGoType(g, f, field.Message.Fields[1])
-		return fmt.Sprintf("map[%v]%v", keyType, valType), false
-	}
-	return goType, pointer
-}
-
-func fieldProtobufTagValue(field *protogen.Field) string {
-	var enumName string
-	if field.Desc.Kind() == protoreflect.EnumKind {
-		enumName = protoimpl.X.LegacyEnumName(field.Enum.Desc)
-	}
-	return tag.Marshal(field.Desc, enumName)
-}
-
-func fieldDefaultValue(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, field *protogen.Field) string {
-	if field.Desc.IsList() {
-		return "nil"
-	}
-	if field.Desc.HasDefault() {
-		defVarName := "Default_" + m.GoIdent.GoName + "_" + field.GoName
-		if field.Desc.Kind() == protoreflect.BytesKind {
-			return "append([]byte(nil), " + defVarName + "...)"
-		}
-		return defVarName
-	}
-	switch field.Desc.Kind() {
-	case protoreflect.BoolKind:
-		return "false"
-	case protoreflect.StringKind:
-		return `""`
-	case protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.BytesKind:
-		return "nil"
-	case protoreflect.EnumKind:
-		val := field.Enum.Values[0]
-		if val.GoIdent.GoImportPath == f.GoImportPath {
-			return g.QualifiedGoIdent(val.GoIdent)
-		} else {
-			// If the enum value is declared in a different Go package,
-			// reference it by number since the name may not be correct.
-			// See https://github.com/golang/protobuf/issues/513.
-			return g.QualifiedGoIdent(field.Enum.GoIdent) + "(" + strconv.FormatInt(int64(val.Desc.Number()), 10) + ")"
-		}
-	default:
-		return "0"
-	}
-}
-
-func fieldJSONTagValue(field *protogen.Field) string {
-	return string(field.Desc.Name()) + ",omitempty"
-}
-
-func genExtensions(g *protogen.GeneratedFile, f *fileInfo) {
-	if len(f.allExtensions) == 0 {
-		return
-	}
-
-	g.P("var ", extensionTypesVarName(f), " = []", protoimplPackage.Ident("ExtensionInfo"), "{")
-	for _, x := range f.allExtensions {
-		g.P("{")
-		g.P("ExtendedType: (*", x.Extendee.GoIdent, ")(nil),")
-		goType, pointer := fieldGoType(g, f, x.Extension)
-		if pointer {
-			goType = "*" + goType
-		}
-		g.P("ExtensionType: (", goType, ")(nil),")
-		g.P("Field: ", x.Desc.Number(), ",")
-		g.P("Name: ", strconv.Quote(string(x.Desc.FullName())), ",")
-		g.P("Tag: ", strconv.Quote(fieldProtobufTagValue(x.Extension)), ",")
-		g.P("Filename: ", strconv.Quote(f.Desc.Path()), ",")
-		g.P("},")
-	}
-	g.P("}")
-	g.P()
-
-	// Group extensions by the target message.
-	var orderedTargets []protogen.GoIdent
-	allExtensionsByTarget := make(map[protogen.GoIdent][]*extensionInfo)
-	allExtensionsByPtr := make(map[*extensionInfo]int)
-	for i, x := range f.allExtensions {
-		target := x.Extendee.GoIdent
-		if len(allExtensionsByTarget[target]) == 0 {
-			orderedTargets = append(orderedTargets, target)
-		}
-		allExtensionsByTarget[target] = append(allExtensionsByTarget[target], x)
-		allExtensionsByPtr[x] = i
-	}
-	for _, target := range orderedTargets {
-		g.P("// Extension fields to ", target, ".")
-		g.P("var (")
-		for _, x := range allExtensionsByTarget[target] {
-			xd := x.Desc
-			typeName := xd.Kind().String()
-			switch xd.Kind() {
-			case protoreflect.EnumKind:
-				typeName = string(xd.Enum().FullName())
-			case protoreflect.MessageKind, protoreflect.GroupKind:
-				typeName = string(xd.Message().FullName())
-			}
-			fieldName := string(xd.Name())
-
-			leadingComments := x.Comments.Leading
-			if leadingComments != "" {
-				leadingComments += "\n"
-			}
-			leadingComments += protogen.Comments(fmt.Sprintf(" %v %v %v = %v;\n",
-				xd.Cardinality(), typeName, fieldName, xd.Number()))
-			leadingComments = appendDeprecationSuffix(leadingComments,
-				x.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
-			g.P(leadingComments,
-				"E_", x.GoIdent, " = &", extensionTypesVarName(f), "[", allExtensionsByPtr[x], "]",
-				trailingComment(x.Comments.Trailing))
-		}
-		g.P(")")
-		g.P()
-	}
-}
-
-// genMessageOneofWrapperTypes generates the oneof wrapper types and
-// associates the types with the parent message type.
-func genMessageOneofWrapperTypes(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	for _, oneof := range m.Oneofs {
-		if oneof.Desc.IsSynthetic() {
-			continue
-		}
-		ifName := oneofInterfaceName(oneof)
-		g.P("type ", ifName, " interface {")
-		g.P(ifName, "()")
-		g.P("}")
-		g.P()
-		for _, field := range oneof.Fields {
-			g.Annotate(field.GoIdent.GoName, field.Location)
-			g.Annotate(field.GoIdent.GoName+"."+field.GoName, field.Location)
-			g.P("type ", field.GoIdent, " struct {")
-			goType, _ := fieldGoType(g, f, field)
-			tags := structTags{
-				{"protobuf", fieldProtobufTagValue(field)},
-			}
-			if m.isTracked {
-				tags = append(tags, gotrackTags...)
-			}
-			leadingComments := appendDeprecationSuffix(field.Comments.Leading,
-				field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated())
-			g.P(leadingComments,
-				field.GoName, " ", goType, tags,
-				trailingComment(field.Comments.Trailing))
-			g.P("}")
-			g.P()
-		}
-		for _, field := range oneof.Fields {
-			g.P("func (*", field.GoIdent, ") ", ifName, "() {}")
-			g.P()
-		}
-	}
-}
-
-// oneofInterfaceName returns the name of the interface type implemented by
-// the oneof field value types.
-func oneofInterfaceName(oneof *protogen.Oneof) string {
-	return "is" + oneof.GoIdent.GoName
-}
-
-// genNoInterfacePragma generates a standalone "nointerface" pragma to
-// decorate methods with field-tracking support.
-func genNoInterfacePragma(g *protogen.GeneratedFile, tracked bool) {
-	if tracked {
-		g.P("//go:nointerface")
-		g.P()
-	}
-}
-
-var gotrackTags = structTags{{"go", "track"}}
-
-// structTags is a data structure for build idiomatic Go struct tags.
-// Each [2]string is a key-value pair, where value is the unescaped string.
-//
-// Example: structTags{{"key", "value"}}.String() -> `key:"value"`
-type structTags [][2]string
-
-func (tags structTags) String() string {
-	if len(tags) == 0 {
-		return ""
-	}
-	var ss []string
-	for _, tag := range tags {
-		// NOTE: When quoting the value, we need to make sure the backtick
-		// character does not appear. Convert all cases to the escaped hex form.
-		key := tag[0]
-		val := strings.Replace(strconv.Quote(tag[1]), "`", `\x60`, -1)
-		ss = append(ss, fmt.Sprintf("%s:%s", key, val))
-	}
-	return "`" + strings.Join(ss, " ") + "`"
-}
-
-// appendDeprecationSuffix optionally appends a deprecation notice as a suffix.
-func appendDeprecationSuffix(prefix protogen.Comments, deprecated bool) protogen.Comments {
-	if !deprecated {
-		return prefix
-	}
-	if prefix != "" {
-		prefix += "\n"
-	}
-	return prefix + " Deprecated: Do not use.\n"
-}
-
-// trailingComment is like protogen.Comments, but lacks a trailing newline.
-type trailingComment protogen.Comments
-
-func (c trailingComment) String() string {
-	s := strings.TrimSuffix(protogen.Comments(c).String(), "\n")
-	if strings.Contains(s, "\n") {
-		// We don't support multi-lined trailing comments as it is unclear
-		// how to best render them in the generated code.
-		return ""
-	}
-	return s
-}

+ 0 - 351
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/reflect.go

@@ -1,351 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package internal_gengo
-
-import (
-	"fmt"
-	"math"
-	"strings"
-	"unicode/utf8"
-
-	"google.golang.org/protobuf/compiler/protogen"
-	"google.golang.org/protobuf/proto"
-	"google.golang.org/protobuf/reflect/protoreflect"
-
-	"google.golang.org/protobuf/types/descriptorpb"
-)
-
-func genReflectFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
-	g.P("var ", f.GoDescriptorIdent, " ", protoreflectPackage.Ident("FileDescriptor"))
-	g.P()
-
-	genFileDescriptor(gen, g, f)
-	if len(f.allEnums) > 0 {
-		g.P("var ", enumTypesVarName(f), " = make([]", protoimplPackage.Ident("EnumInfo"), ",", len(f.allEnums), ")")
-	}
-	if len(f.allMessages) > 0 {
-		g.P("var ", messageTypesVarName(f), " = make([]", protoimplPackage.Ident("MessageInfo"), ",", len(f.allMessages), ")")
-	}
-
-	// Generate a unique list of Go types for all declarations and dependencies,
-	// and the associated index into the type list for all dependencies.
-	var goTypes []string
-	var depIdxs []string
-	seen := map[protoreflect.FullName]int{}
-	genDep := func(name protoreflect.FullName, depSource string) {
-		if depSource != "" {
-			line := fmt.Sprintf("%d, // %d: %s -> %s", seen[name], len(depIdxs), depSource, name)
-			depIdxs = append(depIdxs, line)
-		}
-	}
-	genEnum := func(e *protogen.Enum, depSource string) {
-		if e != nil {
-			name := e.Desc.FullName()
-			if _, ok := seen[name]; !ok {
-				line := fmt.Sprintf("(%s)(0), // %d: %s", g.QualifiedGoIdent(e.GoIdent), len(goTypes), name)
-				goTypes = append(goTypes, line)
-				seen[name] = len(seen)
-			}
-			if depSource != "" {
-				genDep(name, depSource)
-			}
-		}
-	}
-	genMessage := func(m *protogen.Message, depSource string) {
-		if m != nil {
-			name := m.Desc.FullName()
-			if _, ok := seen[name]; !ok {
-				line := fmt.Sprintf("(*%s)(nil), // %d: %s", g.QualifiedGoIdent(m.GoIdent), len(goTypes), name)
-				if m.Desc.IsMapEntry() {
-					// Map entry messages have no associated Go type.
-					line = fmt.Sprintf("nil, // %d: %s", len(goTypes), name)
-				}
-				goTypes = append(goTypes, line)
-				seen[name] = len(seen)
-			}
-			if depSource != "" {
-				genDep(name, depSource)
-			}
-		}
-	}
-
-	// This ordering is significant.
-	// See filetype.TypeBuilder.DependencyIndexes.
-	type offsetEntry struct {
-		start int
-		name  string
-	}
-	var depOffsets []offsetEntry
-	for _, enum := range f.allEnums {
-		genEnum(enum.Enum, "")
-	}
-	for _, message := range f.allMessages {
-		genMessage(message.Message, "")
-	}
-	depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "field type_name"})
-	for _, message := range f.allMessages {
-		for _, field := range message.Fields {
-			if field.Desc.IsWeak() {
-				continue
-			}
-			source := string(field.Desc.FullName())
-			genEnum(field.Enum, source+":type_name")
-			genMessage(field.Message, source+":type_name")
-		}
-	}
-	depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "extension extendee"})
-	for _, extension := range f.allExtensions {
-		source := string(extension.Desc.FullName())
-		genMessage(extension.Extendee, source+":extendee")
-	}
-	depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "extension type_name"})
-	for _, extension := range f.allExtensions {
-		source := string(extension.Desc.FullName())
-		genEnum(extension.Enum, source+":type_name")
-		genMessage(extension.Message, source+":type_name")
-	}
-	depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "method input_type"})
-	for _, service := range f.Services {
-		for _, method := range service.Methods {
-			source := string(method.Desc.FullName())
-			genMessage(method.Input, source+":input_type")
-		}
-	}
-	depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "method output_type"})
-	for _, service := range f.Services {
-		for _, method := range service.Methods {
-			source := string(method.Desc.FullName())
-			genMessage(method.Output, source+":output_type")
-		}
-	}
-	depOffsets = append(depOffsets, offsetEntry{len(depIdxs), ""})
-	for i := len(depOffsets) - 2; i >= 0; i-- {
-		curr, next := depOffsets[i], depOffsets[i+1]
-		depIdxs = append(depIdxs, fmt.Sprintf("%d, // [%d:%d] is the sub-list for %s",
-			curr.start, curr.start, next.start, curr.name))
-	}
-	if len(depIdxs) > math.MaxInt32 {
-		panic("too many dependencies") // sanity check
-	}
-
-	g.P("var ", goTypesVarName(f), " = []interface{}{")
-	for _, s := range goTypes {
-		g.P(s)
-	}
-	g.P("}")
-
-	g.P("var ", depIdxsVarName(f), " = []int32{")
-	for _, s := range depIdxs {
-		g.P(s)
-	}
-	g.P("}")
-
-	g.P("func init() { ", initFuncName(f.File), "() }")
-
-	g.P("func ", initFuncName(f.File), "() {")
-	g.P("if ", f.GoDescriptorIdent, " != nil {")
-	g.P("return")
-	g.P("}")
-
-	// Ensure that initialization functions for different files in the same Go
-	// package run in the correct order: Call the init funcs for every .proto file
-	// imported by this one that is in the same Go package.
-	for i, imps := 0, f.Desc.Imports(); i < imps.Len(); i++ {
-		impFile := gen.FilesByPath[imps.Get(i).Path()]
-		if impFile.GoImportPath != f.GoImportPath {
-			continue
-		}
-		g.P(initFuncName(impFile), "()")
-	}
-
-	if len(f.allMessages) > 0 {
-		// Populate MessageInfo.Exporters.
-		g.P("if !", protoimplPackage.Ident("UnsafeEnabled"), " {")
-		for _, message := range f.allMessages {
-			if sf := f.allMessageFieldsByPtr[message]; len(sf.unexported) > 0 {
-				idx := f.allMessagesByPtr[message]
-				typesVar := messageTypesVarName(f)
-
-				g.P(typesVar, "[", idx, "].Exporter = func(v interface{}, i int) interface{} {")
-				g.P("switch v := v.(*", message.GoIdent, "); i {")
-				for i := 0; i < sf.count; i++ {
-					if name := sf.unexported[i]; name != "" {
-						g.P("case ", i, ": return &v.", name)
-					}
-				}
-				g.P("default: return nil")
-				g.P("}")
-				g.P("}")
-			}
-		}
-		g.P("}")
-
-		// Populate MessageInfo.OneofWrappers.
-		for _, message := range f.allMessages {
-			if len(message.Oneofs) > 0 {
-				idx := f.allMessagesByPtr[message]
-				typesVar := messageTypesVarName(f)
-
-				// Associate the wrapper types by directly passing them to the MessageInfo.
-				g.P(typesVar, "[", idx, "].OneofWrappers = []interface{} {")
-				for _, oneof := range message.Oneofs {
-					if !oneof.Desc.IsSynthetic() {
-						for _, field := range oneof.Fields {
-							g.P("(*", field.GoIdent, ")(nil),")
-						}
-					}
-				}
-				g.P("}")
-			}
-		}
-	}
-
-	g.P("type x struct{}")
-	g.P("out := ", protoimplPackage.Ident("TypeBuilder"), "{")
-	g.P("File: ", protoimplPackage.Ident("DescBuilder"), "{")
-	g.P("GoPackagePath: ", reflectPackage.Ident("TypeOf"), "(x{}).PkgPath(),")
-	g.P("RawDescriptor: ", rawDescVarName(f), ",")
-	g.P("NumEnums: ", len(f.allEnums), ",")
-	g.P("NumMessages: ", len(f.allMessages), ",")
-	g.P("NumExtensions: ", len(f.allExtensions), ",")
-	g.P("NumServices: ", len(f.Services), ",")
-	g.P("},")
-	g.P("GoTypes: ", goTypesVarName(f), ",")
-	g.P("DependencyIndexes: ", depIdxsVarName(f), ",")
-	if len(f.allEnums) > 0 {
-		g.P("EnumInfos: ", enumTypesVarName(f), ",")
-	}
-	if len(f.allMessages) > 0 {
-		g.P("MessageInfos: ", messageTypesVarName(f), ",")
-	}
-	if len(f.allExtensions) > 0 {
-		g.P("ExtensionInfos: ", extensionTypesVarName(f), ",")
-	}
-	g.P("}.Build()")
-	g.P(f.GoDescriptorIdent, " = out.File")
-
-	// Set inputs to nil to allow GC to reclaim resources.
-	g.P(rawDescVarName(f), " = nil")
-	g.P(goTypesVarName(f), " = nil")
-	g.P(depIdxsVarName(f), " = nil")
-	g.P("}")
-}
-
-func genFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) {
-	descProto := proto.Clone(f.Proto).(*descriptorpb.FileDescriptorProto)
-	descProto.SourceCodeInfo = nil // drop source code information
-
-	b, err := proto.MarshalOptions{AllowPartial: true, Deterministic: true}.Marshal(descProto)
-	if err != nil {
-		gen.Error(err)
-		return
-	}
-
-	g.P("var ", rawDescVarName(f), " = []byte{")
-	for len(b) > 0 {
-		n := 16
-		if n > len(b) {
-			n = len(b)
-		}
-
-		s := ""
-		for _, c := range b[:n] {
-			s += fmt.Sprintf("0x%02x,", c)
-		}
-		g.P(s)
-
-		b = b[n:]
-	}
-	g.P("}")
-	g.P()
-
-	if f.needRawDesc {
-		onceVar := rawDescVarName(f) + "Once"
-		dataVar := rawDescVarName(f) + "Data"
-		g.P("var (")
-		g.P(onceVar, " ", syncPackage.Ident("Once"))
-		g.P(dataVar, " = ", rawDescVarName(f))
-		g.P(")")
-		g.P()
-
-		g.P("func ", rawDescVarName(f), "GZIP() []byte {")
-		g.P(onceVar, ".Do(func() {")
-		g.P(dataVar, " = ", protoimplPackage.Ident("X"), ".CompressGZIP(", dataVar, ")")
-		g.P("})")
-		g.P("return ", dataVar)
-		g.P("}")
-		g.P()
-	}
-}
-
-func genEnumReflectMethods(g *protogen.GeneratedFile, f *fileInfo, e *enumInfo) {
-	idx := f.allEnumsByPtr[e]
-	typesVar := enumTypesVarName(f)
-
-	// Descriptor method.
-	g.P("func (", e.GoIdent, ") Descriptor() ", protoreflectPackage.Ident("EnumDescriptor"), " {")
-	g.P("return ", typesVar, "[", idx, "].Descriptor()")
-	g.P("}")
-	g.P()
-
-	// Type method.
-	g.P("func (", e.GoIdent, ") Type() ", protoreflectPackage.Ident("EnumType"), " {")
-	g.P("return &", typesVar, "[", idx, "]")
-	g.P("}")
-	g.P()
-
-	// Number method.
-	g.P("func (x ", e.GoIdent, ") Number() ", protoreflectPackage.Ident("EnumNumber"), " {")
-	g.P("return ", protoreflectPackage.Ident("EnumNumber"), "(x)")
-	g.P("}")
-	g.P()
-}
-
-func genMessageReflectMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	idx := f.allMessagesByPtr[m]
-	typesVar := messageTypesVarName(f)
-
-	// ProtoReflect method.
-	g.P("func (x *", m.GoIdent, ") ProtoReflect() ", protoreflectPackage.Ident("Message"), " {")
-	g.P("mi := &", typesVar, "[", idx, "]")
-	g.P("if ", protoimplPackage.Ident("UnsafeEnabled"), " && x != nil {")
-	g.P("ms := ", protoimplPackage.Ident("X"), ".MessageStateOf(", protoimplPackage.Ident("Pointer"), "(x))")
-	g.P("if ms.LoadMessageInfo() == nil {")
-	g.P("ms.StoreMessageInfo(mi)")
-	g.P("}")
-	g.P("return ms")
-	g.P("}")
-	g.P("return mi.MessageOf(x)")
-	g.P("}")
-	g.P()
-}
-
-func fileVarName(f *protogen.File, suffix string) string {
-	prefix := f.GoDescriptorIdent.GoName
-	_, n := utf8.DecodeRuneInString(prefix)
-	prefix = strings.ToLower(prefix[:n]) + prefix[n:]
-	return prefix + "_" + suffix
-}
-func rawDescVarName(f *fileInfo) string {
-	return fileVarName(f.File, "rawDesc")
-}
-func goTypesVarName(f *fileInfo) string {
-	return fileVarName(f.File, "goTypes")
-}
-func depIdxsVarName(f *fileInfo) string {
-	return fileVarName(f.File, "depIdxs")
-}
-func enumTypesVarName(f *fileInfo) string {
-	return fileVarName(f.File, "enumTypes")
-}
-func messageTypesVarName(f *fileInfo) string {
-	return fileVarName(f.File, "msgTypes")
-}
-func extensionTypesVarName(f *fileInfo) string {
-	return fileVarName(f.File, "extTypes")
-}
-func initFuncName(f *protogen.File) string {
-	return fileVarName(f, "init")
-}

+ 0 - 1080
vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go

@@ -1,1080 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package internal_gengo
-
-import (
-	"strings"
-
-	"google.golang.org/protobuf/compiler/protogen"
-	"google.golang.org/protobuf/internal/genid"
-)
-
-// Specialized support for well-known types are hard-coded into the generator
-// as opposed to being injected in adjacent .go sources in the generated package
-// in order to support specialized build systems like Bazel that always generate
-// dynamically from the source .proto files.
-
-func genPackageKnownComment(f *fileInfo) protogen.Comments {
-	switch f.Desc.Path() {
-	case genid.File_google_protobuf_any_proto:
-		return ` Package anypb contains generated types for ` + genid.File_google_protobuf_any_proto + `.
-
- The Any message is a dynamic representation of any other message value.
- It is functionally a tuple of the full name of the remote message type and
- the serialized bytes of the remote message value.
-
-
- Constructing an Any
-
- An Any message containing another message value is constructed using New:
-
-	any, err := anypb.New(m)
-	if err != nil {
-		... // handle error
-	}
-	... // make use of any
-
-
- Unmarshaling an Any
-
- With a populated Any message, the underlying message can be serialized into
- a remote concrete message value in a few ways.
-
- If the exact concrete type is known, then a new (or pre-existing) instance
- of that message can be passed to the UnmarshalTo method:
-
-	m := new(foopb.MyMessage)
-	if err := any.UnmarshalTo(m); err != nil {
-		... // handle error
-	}
-	... // make use of m
-
- If the exact concrete type is not known, then the UnmarshalNew method can be
- used to unmarshal the contents into a new instance of the remote message type:
-
-	m, err := any.UnmarshalNew()
-	if err != nil {
-		... // handle error
-	}
-	... // make use of m
-
- UnmarshalNew uses the global type registry to resolve the message type and
- construct a new instance of that message to unmarshal into. In order for a
- message type to appear in the global registry, the Go type representing that
- protobuf message type must be linked into the Go binary. For messages
- generated by protoc-gen-go, this is achieved through an import of the
- generated Go package representing a .proto file.
-
- A common pattern with UnmarshalNew is to use a type switch with the resulting
- proto.Message value:
-
-	switch m := m.(type) {
-	case *foopb.MyMessage:
-		... // make use of m as a *foopb.MyMessage
-	case *barpb.OtherMessage:
-		... // make use of m as a *barpb.OtherMessage
-	case *bazpb.SomeMessage:
-		... // make use of m as a *bazpb.SomeMessage
-	}
-
- This pattern ensures that the generated packages containing the message types
- listed in the case clauses are linked into the Go binary and therefore also
- registered in the global registry.
-
-
- Type checking an Any
-
- In order to type check whether an Any message represents some other message,
- then use the MessageIs method:
-
-	if any.MessageIs((*foopb.MyMessage)(nil)) {
-		... // make use of any, knowing that it contains a foopb.MyMessage
-	}
-
- The MessageIs method can also be used with an allocated instance of the target
- message type if the intention is to unmarshal into it if the type matches:
-
-	m := new(foopb.MyMessage)
-	if any.MessageIs(m) {
-		if err := any.UnmarshalTo(m); err != nil {
-			... // handle error
-		}
-		... // make use of m
-	}
-
-`
-	case genid.File_google_protobuf_timestamp_proto:
-		return ` Package timestamppb contains generated types for ` + genid.File_google_protobuf_timestamp_proto + `.
-
- The Timestamp message represents a timestamp,
- an instant in time since the Unix epoch (January 1st, 1970).
-
-
- Conversion to a Go Time
-
- The AsTime method can be used to convert a Timestamp message to a
- standard Go time.Time value in UTC:
-
-	t := ts.AsTime()
-	... // make use of t as a time.Time
-
- Converting to a time.Time is a common operation so that the extensive
- set of time-based operations provided by the time package can be leveraged.
- See https://golang.org/pkg/time for more information.
-
- The AsTime method performs the conversion on a best-effort basis. Timestamps
- with denormal values (e.g., nanoseconds beyond 0 and 99999999, inclusive)
- are normalized during the conversion to a time.Time. To manually check for
- invalid Timestamps per the documented limitations in timestamp.proto,
- additionally call the CheckValid method:
-
-	if err := ts.CheckValid(); err != nil {
-		... // handle error
-	}
-
-
- Conversion from a Go Time
-
- The timestamppb.New function can be used to construct a Timestamp message
- from a standard Go time.Time value:
-
-	ts := timestamppb.New(t)
-	... // make use of ts as a *timestamppb.Timestamp
-
- In order to construct a Timestamp representing the current time, use Now:
-
-	ts := timestamppb.Now()
-	... // make use of ts as a *timestamppb.Timestamp
-
-`
-	case genid.File_google_protobuf_duration_proto:
-		return ` Package durationpb contains generated types for ` + genid.File_google_protobuf_duration_proto + `.
-
- The Duration message represents a signed span of time.
-
-
- Conversion to a Go Duration
-
- The AsDuration method can be used to convert a Duration message to a
- standard Go time.Duration value:
-
-	d := dur.AsDuration()
-	... // make use of d as a time.Duration
-
- Converting to a time.Duration is a common operation so that the extensive
- set of time-based operations provided by the time package can be leveraged.
- See https://golang.org/pkg/time for more information.
-
- The AsDuration method performs the conversion on a best-effort basis.
- Durations with denormal values (e.g., nanoseconds beyond -99999999 and
- +99999999, inclusive; or seconds and nanoseconds with opposite signs)
- are normalized during the conversion to a time.Duration. To manually check for
- invalid Duration per the documented limitations in duration.proto,
- additionally call the CheckValid method:
-
-	if err := dur.CheckValid(); err != nil {
-		... // handle error
-	}
-
- Note that the documented limitations in duration.proto does not protect a
- Duration from overflowing the representable range of a time.Duration in Go.
- The AsDuration method uses saturation arithmetic such that an overflow clamps
- the resulting value to the closest representable value (e.g., math.MaxInt64
- for positive overflow and math.MinInt64 for negative overflow).
-
-
- Conversion from a Go Duration
-
- The durationpb.New function can be used to construct a Duration message
- from a standard Go time.Duration value:
-
-	dur := durationpb.New(d)
-	... // make use of d as a *durationpb.Duration
-
-`
-	case genid.File_google_protobuf_struct_proto:
-		return ` Package structpb contains generated types for ` + genid.File_google_protobuf_struct_proto + `.
-
- The messages (i.e., Value, Struct, and ListValue) defined in struct.proto are
- used to represent arbitrary JSON. The Value message represents a JSON value,
- the Struct message represents a JSON object, and the ListValue message
- represents a JSON array. See https://json.org for more information.
-
- The Value, Struct, and ListValue types have generated MarshalJSON and
- UnmarshalJSON methods such that they serialize JSON equivalent to what the
- messages themselves represent. Use of these types with the
- "google.golang.org/protobuf/encoding/protojson" package
- ensures that they will be serialized as their JSON equivalent.
-
-
- Conversion to and from a Go interface
-
- The standard Go "encoding/json" package has functionality to serialize
- arbitrary types to a large degree. The Value.AsInterface, Struct.AsMap, and
- ListValue.AsSlice methods can convert the protobuf message representation into
- a form represented by interface{}, map[string]interface{}, and []interface{}.
- This form can be used with other packages that operate on such data structures
- and also directly with the standard json package.
-
- In order to convert the interface{}, map[string]interface{}, and []interface{}
- forms back as Value, Struct, and ListValue messages, use the NewStruct,
- NewList, and NewValue constructor functions.
-
-
- Example usage
-
- Consider the following example JSON object:
-
-	{
-		"firstName": "John",
-		"lastName": "Smith",
-		"isAlive": true,
-		"age": 27,
-		"address": {
-			"streetAddress": "21 2nd Street",
-			"city": "New York",
-			"state": "NY",
-			"postalCode": "10021-3100"
-		},
-		"phoneNumbers": [
-			{
-				"type": "home",
-				"number": "212 555-1234"
-			},
-			{
-				"type": "office",
-				"number": "646 555-4567"
-			}
-		],
-		"children": [],
-		"spouse": null
-	}
-
- To construct a Value message representing the above JSON object:
-
-	m, err := structpb.NewValue(map[string]interface{}{
-		"firstName": "John",
-		"lastName":  "Smith",
-		"isAlive":   true,
-		"age":       27,
-		"address": map[string]interface{}{
-			"streetAddress": "21 2nd Street",
-			"city":          "New York",
-			"state":         "NY",
-			"postalCode":    "10021-3100",
-		},
-		"phoneNumbers": []interface{}{
-			map[string]interface{}{
-				"type":   "home",
-				"number": "212 555-1234",
-			},
-			map[string]interface{}{
-				"type":   "office",
-				"number": "646 555-4567",
-			},
-		},
-		"children": []interface{}{},
-		"spouse":   nil,
-	})
-	if err != nil {
-		... // handle error
-	}
-	... // make use of m as a *structpb.Value
-
-`
-	case genid.File_google_protobuf_field_mask_proto:
-		return ` Package fieldmaskpb contains generated types for ` + genid.File_google_protobuf_field_mask_proto + `.
-
- The FieldMask message represents a set of symbolic field paths.
- The paths are specific to some target message type,
- which is not stored within the FieldMask message itself.
-
-
- Constructing a FieldMask
-
- The New function is used construct a FieldMask:
-
-	var messageType *descriptorpb.DescriptorProto
-	fm, err := fieldmaskpb.New(messageType, "field.name", "field.number")
-	if err != nil {
-		... // handle error
-	}
-	... // make use of fm
-
- The "field.name" and "field.number" paths are valid paths according to the
- google.protobuf.DescriptorProto message. Use of a path that does not correlate
- to valid fields reachable from DescriptorProto would result in an error.
-
- Once a FieldMask message has been constructed,
- the Append method can be used to insert additional paths to the path set:
-
-	var messageType *descriptorpb.DescriptorProto
-	if err := fm.Append(messageType, "options"); err != nil {
-		... // handle error
-	}
-
-
- Type checking a FieldMask
-
- In order to verify that a FieldMask represents a set of fields that are
- reachable from some target message type, use the IsValid method:
-
-	var messageType *descriptorpb.DescriptorProto
-	if fm.IsValid(messageType) {
-		... // make use of fm
-	}
-
- IsValid needs to be passed the target message type as an input since the
- FieldMask message itself does not store the message type that the set of paths
- are for.
-`
-	default:
-		return ""
-	}
-}
-
-func genMessageKnownFunctions(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) {
-	switch m.Desc.FullName() {
-	case genid.Any_message_fullname:
-		g.P("// New marshals src into a new Any instance.")
-		g.P("func New(src ", protoPackage.Ident("Message"), ") (*Any, error) {")
-		g.P("	dst := new(Any)")
-		g.P("	if err := dst.MarshalFrom(src); err != nil {")
-		g.P("		return nil, err")
-		g.P("	}")
-		g.P("	return dst, nil")
-		g.P("}")
-		g.P()
-
-		g.P("// MarshalFrom marshals src into dst as the underlying message")
-		g.P("// using the provided marshal options.")
-		g.P("//")
-		g.P("// If no options are specified, call dst.MarshalFrom instead.")
-		g.P("func MarshalFrom(dst *Any, src ", protoPackage.Ident("Message"), ", opts ", protoPackage.Ident("MarshalOptions"), ") error {")
-		g.P("	const urlPrefix = \"type.googleapis.com/\"")
-		g.P("	if src == nil {")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"invalid nil source message\")")
-		g.P("	}")
-		g.P("	b, err := opts.Marshal(src)")
-		g.P("	if err != nil {")
-		g.P("		return err")
-		g.P("	}")
-		g.P("	dst.TypeUrl = urlPrefix + string(src.ProtoReflect().Descriptor().FullName())")
-		g.P("	dst.Value = b")
-		g.P("	return nil")
-		g.P("}")
-		g.P()
-
-		g.P("// UnmarshalTo unmarshals the underlying message from src into dst")
-		g.P("// using the provided unmarshal options.")
-		g.P("// It reports an error if dst is not of the right message type.")
-		g.P("//")
-		g.P("// If no options are specified, call src.UnmarshalTo instead.")
-		g.P("func UnmarshalTo(src *Any, dst ", protoPackage.Ident("Message"), ", opts ", protoPackage.Ident("UnmarshalOptions"), ") error {")
-		g.P("	if src == nil {")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"invalid nil source message\")")
-		g.P("	}")
-		g.P("	if !src.MessageIs(dst) {")
-		g.P("		got := dst.ProtoReflect().Descriptor().FullName()")
-		g.P("		want := src.MessageName()")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"mismatched message type: got %q, want %q\", got, want)")
-		g.P("	}")
-		g.P("	return opts.Unmarshal(src.GetValue(), dst)")
-		g.P("}")
-		g.P()
-
-		g.P("// UnmarshalNew unmarshals the underlying message from src into dst,")
-		g.P("// which is newly created message using a type resolved from the type URL.")
-		g.P("// The message type is resolved according to opt.Resolver,")
-		g.P("// which should implement protoregistry.MessageTypeResolver.")
-		g.P("// It reports an error if the underlying message type could not be resolved.")
-		g.P("//")
-		g.P("// If no options are specified, call src.UnmarshalNew instead.")
-		g.P("func UnmarshalNew(src *Any, opts ", protoPackage.Ident("UnmarshalOptions"), ") (dst ", protoPackage.Ident("Message"), ", err error) {")
-		g.P("	if src.GetTypeUrl() == \"\" {")
-		g.P("		return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid empty type URL\")")
-		g.P("	}")
-		g.P("	if opts.Resolver == nil {")
-		g.P("		opts.Resolver = ", protoregistryPackage.Ident("GlobalTypes"))
-		g.P("	}")
-		g.P("	r, ok := opts.Resolver.(", protoregistryPackage.Ident("MessageTypeResolver"), ")")
-		g.P("	if !ok {")
-		g.P("		return nil, ", protoregistryPackage.Ident("NotFound"))
-		g.P("	}")
-		g.P("	mt, err := r.FindMessageByURL(src.GetTypeUrl())")
-		g.P("	if err != nil {")
-		g.P("		if err == ", protoregistryPackage.Ident("NotFound"), " {")
-		g.P("			return nil, err")
-		g.P("		}")
-		g.P("		return nil, ", protoimplPackage.Ident("X"), ".NewError(\"could not resolve %q: %v\", src.GetTypeUrl(), err)")
-		g.P("	}")
-		g.P("	dst = mt.New().Interface()")
-		g.P("	return dst, opts.Unmarshal(src.GetValue(), dst)")
-		g.P("}")
-		g.P()
-
-		g.P("// MessageIs reports whether the underlying message is of the same type as m.")
-		g.P("func (x *Any) MessageIs(m ", protoPackage.Ident("Message"), ") bool {")
-		g.P("	if m == nil {")
-		g.P("		return false")
-		g.P("	}")
-		g.P("	url := x.GetTypeUrl()")
-		g.P("	name := string(m.ProtoReflect().Descriptor().FullName())")
-		g.P("	if !", stringsPackage.Ident("HasSuffix"), "(url, name) {")
-		g.P("		return false")
-		g.P("	}")
-		g.P("	return len(url) == len(name) || url[len(url)-len(name)-1] == '/'")
-		g.P("}")
-		g.P()
-
-		g.P("// MessageName reports the full name of the underlying message,")
-		g.P("// returning an empty string if invalid.")
-		g.P("func (x *Any) MessageName() ", protoreflectPackage.Ident("FullName"), " {")
-		g.P("	url := x.GetTypeUrl()")
-		g.P("	name := ", protoreflectPackage.Ident("FullName"), "(url)")
-		g.P("	if i := ", stringsPackage.Ident("LastIndexByte"), "(url, '/'); i >= 0 {")
-		g.P("		name = name[i+len(\"/\"):]")
-		g.P("	}")
-		g.P("	if !name.IsValid() {")
-		g.P("		return \"\"")
-		g.P("	}")
-		g.P("	return name")
-		g.P("}")
-		g.P()
-
-		g.P("// MarshalFrom marshals m into x as the underlying message.")
-		g.P("func (x *Any) MarshalFrom(m ", protoPackage.Ident("Message"), ") error {")
-		g.P("	return MarshalFrom(x, m, ", protoPackage.Ident("MarshalOptions"), "{})")
-		g.P("}")
-		g.P()
-
-		g.P("// UnmarshalTo unmarshals the contents of the underlying message of x into m.")
-		g.P("// It resets m before performing the unmarshal operation.")
-		g.P("// It reports an error if m is not of the right message type.")
-		g.P("func (x *Any) UnmarshalTo(m ", protoPackage.Ident("Message"), ") error {")
-		g.P("	return UnmarshalTo(x, m, ", protoPackage.Ident("UnmarshalOptions"), "{})")
-		g.P("}")
-		g.P()
-
-		g.P("// UnmarshalNew unmarshals the contents of the underlying message of x into")
-		g.P("// a newly allocated message of the specified type.")
-		g.P("// It reports an error if the underlying message type could not be resolved.")
-		g.P("func (x *Any) UnmarshalNew() (", protoPackage.Ident("Message"), ", error) {")
-		g.P("	return UnmarshalNew(x, ", protoPackage.Ident("UnmarshalOptions"), "{})")
-		g.P("}")
-		g.P()
-
-	case genid.Timestamp_message_fullname:
-		g.P("// Now constructs a new Timestamp from the current time.")
-		g.P("func Now() *Timestamp {")
-		g.P("	return New(", timePackage.Ident("Now"), "())")
-		g.P("}")
-		g.P()
-
-		g.P("// New constructs a new Timestamp from the provided time.Time.")
-		g.P("func New(t ", timePackage.Ident("Time"), ") *Timestamp {")
-		g.P("	return &Timestamp{Seconds: int64(t.Unix()), Nanos: int32(t.Nanosecond())}")
-		g.P("}")
-		g.P()
-
-		g.P("// AsTime converts x to a time.Time.")
-		g.P("func (x *Timestamp) AsTime() ", timePackage.Ident("Time"), " {")
-		g.P("	return ", timePackage.Ident("Unix"), "(int64(x.GetSeconds()), int64(x.GetNanos())).UTC()")
-		g.P("}")
-		g.P()
-
-		g.P("// IsValid reports whether the timestamp is valid.")
-		g.P("// It is equivalent to CheckValid == nil.")
-		g.P("func (x *Timestamp) IsValid() bool {")
-		g.P("	return x.check() == 0")
-		g.P("}")
-		g.P()
-
-		g.P("// CheckValid returns an error if the timestamp is invalid.")
-		g.P("// In particular, it checks whether the value represents a date that is")
-		g.P("// in the range of 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.")
-		g.P("// An error is reported for a nil Timestamp.")
-		g.P("func (x *Timestamp) CheckValid() error {")
-		g.P("	switch x.check() {")
-		g.P("	case invalidNil:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"invalid nil Timestamp\")")
-		g.P("	case invalidUnderflow:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"timestamp (%v) before 0001-01-01\", x)")
-		g.P("	case invalidOverflow:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"timestamp (%v) after 9999-12-31\", x)")
-		g.P("	case invalidNanos:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"timestamp (%v) has out-of-range nanos\", x)")
-		g.P("	default:")
-		g.P("		return nil")
-		g.P("	}")
-		g.P("}")
-		g.P()
-
-		g.P("const (")
-		g.P("	_ = iota")
-		g.P("	invalidNil")
-		g.P("	invalidUnderflow")
-		g.P("	invalidOverflow")
-		g.P("	invalidNanos")
-		g.P(")")
-		g.P()
-
-		g.P("func (x *Timestamp) check() uint {")
-		g.P("	const minTimestamp = -62135596800  // Seconds between 1970-01-01T00:00:00Z and 0001-01-01T00:00:00Z, inclusive")
-		g.P("	const maxTimestamp = +253402300799 // Seconds between 1970-01-01T00:00:00Z and 9999-12-31T23:59:59Z, inclusive")
-		g.P("	secs := x.GetSeconds()")
-		g.P("	nanos := x.GetNanos()")
-		g.P("	switch {")
-		g.P("	case x == nil:")
-		g.P("		return invalidNil")
-		g.P("	case secs < minTimestamp:")
-		g.P("		return invalidUnderflow")
-		g.P("	case secs > maxTimestamp:")
-		g.P("		return invalidOverflow")
-		g.P("	case nanos < 0 || nanos >= 1e9:")
-		g.P("		return invalidNanos")
-		g.P("	default:")
-		g.P("		return 0")
-		g.P("	}")
-		g.P("}")
-		g.P()
-
-	case genid.Duration_message_fullname:
-		g.P("// New constructs a new Duration from the provided time.Duration.")
-		g.P("func New(d ", timePackage.Ident("Duration"), ") *Duration {")
-		g.P("	nanos := d.Nanoseconds()")
-		g.P("	secs := nanos / 1e9")
-		g.P("	nanos -= secs * 1e9")
-		g.P("	return &Duration{Seconds: int64(secs), Nanos: int32(nanos)}")
-		g.P("}")
-		g.P()
-
-		g.P("// AsDuration converts x to a time.Duration,")
-		g.P("// returning the closest duration value in the event of overflow.")
-		g.P("func (x *Duration) AsDuration() ", timePackage.Ident("Duration"), " {")
-		g.P("	secs := x.GetSeconds()")
-		g.P("	nanos := x.GetNanos()")
-		g.P("	d := ", timePackage.Ident("Duration"), "(secs) * ", timePackage.Ident("Second"))
-		g.P("	overflow := d/", timePackage.Ident("Second"), " != ", timePackage.Ident("Duration"), "(secs)")
-		g.P("	d += ", timePackage.Ident("Duration"), "(nanos) * ", timePackage.Ident("Nanosecond"))
-		g.P("	overflow = overflow || (secs < 0 && nanos < 0 && d > 0)")
-		g.P("	overflow = overflow || (secs > 0 && nanos > 0 && d < 0)")
-		g.P("	if overflow {")
-		g.P("		switch {")
-		g.P("		case secs < 0:")
-		g.P("			return ", timePackage.Ident("Duration"), "(", mathPackage.Ident("MinInt64"), ")")
-		g.P("		case secs > 0:")
-		g.P("			return ", timePackage.Ident("Duration"), "(", mathPackage.Ident("MaxInt64"), ")")
-		g.P("		}")
-		g.P("	}")
-		g.P("	return d")
-		g.P("}")
-		g.P()
-
-		g.P("// IsValid reports whether the duration is valid.")
-		g.P("// It is equivalent to CheckValid == nil.")
-		g.P("func (x *Duration) IsValid() bool {")
-		g.P("	return x.check() == 0")
-		g.P("}")
-		g.P()
-
-		g.P("// CheckValid returns an error if the duration is invalid.")
-		g.P("// In particular, it checks whether the value is within the range of")
-		g.P("// -10000 years to +10000 years inclusive.")
-		g.P("// An error is reported for a nil Duration.")
-		g.P("func (x *Duration) CheckValid() error {")
-		g.P("	switch x.check() {")
-		g.P("	case invalidNil:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"invalid nil Duration\")")
-		g.P("	case invalidUnderflow:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"duration (%v) exceeds -10000 years\", x)")
-		g.P("	case invalidOverflow:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"duration (%v) exceeds +10000 years\", x)")
-		g.P("	case invalidNanosRange:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"duration (%v) has out-of-range nanos\", x)")
-		g.P("	case invalidNanosSign:")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"duration (%v) has seconds and nanos with different signs\", x)")
-		g.P("	default:")
-		g.P("		return nil")
-		g.P("	}")
-		g.P("}")
-		g.P()
-
-		g.P("const (")
-		g.P("	_ = iota")
-		g.P("	invalidNil")
-		g.P("	invalidUnderflow")
-		g.P("	invalidOverflow")
-		g.P("	invalidNanosRange")
-		g.P("	invalidNanosSign")
-		g.P(")")
-		g.P()
-
-		g.P("func (x *Duration) check() uint {")
-		g.P("	const absDuration = 315576000000 // 10000yr * 365.25day/yr * 24hr/day * 60min/hr * 60sec/min")
-		g.P("	secs := x.GetSeconds()")
-		g.P("	nanos := x.GetNanos()")
-		g.P("	switch {")
-		g.P("	case x == nil:")
-		g.P("		return invalidNil")
-		g.P("	case secs < -absDuration:")
-		g.P("		return invalidUnderflow")
-		g.P("	case secs > +absDuration:")
-		g.P("		return invalidOverflow")
-		g.P("	case nanos <= -1e9 || nanos >= +1e9:")
-		g.P("		return invalidNanosRange")
-		g.P("	case (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0):")
-		g.P("		return invalidNanosSign")
-		g.P("	default:")
-		g.P("		return 0")
-		g.P("	}")
-		g.P("}")
-		g.P()
-
-	case genid.Struct_message_fullname:
-		g.P("// NewStruct constructs a Struct from a general-purpose Go map.")
-		g.P("// The map keys must be valid UTF-8.")
-		g.P("// The map values are converted using NewValue.")
-		g.P("func NewStruct(v map[string]interface{}) (*Struct, error) {")
-		g.P("	x := &Struct{Fields: make(map[string]*Value, len(v))}")
-		g.P("	for k, v := range v {")
-		g.P("		if !", utf8Package.Ident("ValidString"), "(k) {")
-		g.P("			return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid UTF-8 in string: %q\", k)")
-		g.P("		}")
-		g.P("		var err error")
-		g.P("		x.Fields[k], err = NewValue(v)")
-		g.P("		if err != nil {")
-		g.P("			return nil, err")
-		g.P("		}")
-		g.P("	}")
-		g.P("	return x, nil")
-		g.P("}")
-		g.P()
-
-		g.P("// AsMap converts x to a general-purpose Go map.")
-		g.P("// The map values are converted by calling Value.AsInterface.")
-		g.P("func (x *Struct) AsMap() map[string]interface{} {")
-		g.P("	vs := make(map[string]interface{})")
-		g.P("	for k, v := range x.GetFields() {")
-		g.P("		vs[k] = v.AsInterface()")
-		g.P("	}")
-		g.P("	return vs")
-		g.P("}")
-		g.P()
-
-		g.P("func (x *Struct) MarshalJSON() ([]byte, error) {")
-		g.P("	return ", protojsonPackage.Ident("Marshal"), "(x)")
-		g.P("}")
-		g.P()
-
-		g.P("func (x *Struct) UnmarshalJSON(b []byte) error {")
-		g.P("	return ", protojsonPackage.Ident("Unmarshal"), "(b, x)")
-		g.P("}")
-		g.P()
-
-	case genid.ListValue_message_fullname:
-		g.P("// NewList constructs a ListValue from a general-purpose Go slice.")
-		g.P("// The slice elements are converted using NewValue.")
-		g.P("func NewList(v []interface{}) (*ListValue, error) {")
-		g.P("	x := &ListValue{Values: make([]*Value, len(v))}")
-		g.P("	for i, v := range v {")
-		g.P("		var err error")
-		g.P("		x.Values[i], err = NewValue(v)")
-		g.P("		if err != nil {")
-		g.P("			return nil, err")
-		g.P("		}")
-		g.P("	}")
-		g.P("	return x, nil")
-		g.P("}")
-		g.P()
-
-		g.P("// AsSlice converts x to a general-purpose Go slice.")
-		g.P("// The slice elements are converted by calling Value.AsInterface.")
-		g.P("func (x *ListValue) AsSlice() []interface{} {")
-		g.P("	vs := make([]interface{}, len(x.GetValues()))")
-		g.P("	for i, v := range x.GetValues() {")
-		g.P("		vs[i] = v.AsInterface()")
-		g.P("	}")
-		g.P("	return vs")
-		g.P("}")
-		g.P()
-
-		g.P("func (x *ListValue) MarshalJSON() ([]byte, error) {")
-		g.P("	return ", protojsonPackage.Ident("Marshal"), "(x)")
-		g.P("}")
-		g.P()
-
-		g.P("func (x *ListValue) UnmarshalJSON(b []byte) error {")
-		g.P("	return ", protojsonPackage.Ident("Unmarshal"), "(b, x)")
-		g.P("}")
-		g.P()
-
-	case genid.Value_message_fullname:
-		g.P("// NewValue constructs a Value from a general-purpose Go interface.")
-		g.P("//")
-		g.P("//	╔════════════════════════╤════════════════════════════════════════════╗")
-		g.P("//	║ Go type                │ Conversion                                 ║")
-		g.P("//	╠════════════════════════╪════════════════════════════════════════════╣")
-		g.P("//	║ nil                    │ stored as NullValue                        ║")
-		g.P("//	║ bool                   │ stored as BoolValue                        ║")
-		g.P("//	║ int, int32, int64      │ stored as NumberValue                      ║")
-		g.P("//	║ uint, uint32, uint64   │ stored as NumberValue                      ║")
-		g.P("//	║ float32, float64       │ stored as NumberValue                      ║")
-		g.P("//	║ string                 │ stored as StringValue; must be valid UTF-8 ║")
-		g.P("//	║ []byte                 │ stored as StringValue; base64-encoded      ║")
-		g.P("//	║ map[string]interface{} │ stored as StructValue                      ║")
-		g.P("//	║ []interface{}          │ stored as ListValue                        ║")
-		g.P("//	╚════════════════════════╧════════════════════════════════════════════╝")
-		g.P("//")
-		g.P("// When converting an int64 or uint64 to a NumberValue, numeric precision loss")
-		g.P("// is possible since they are stored as a float64.")
-		g.P("func NewValue(v interface{}) (*Value, error) {")
-		g.P("	switch v := v.(type) {")
-		g.P("	case nil:")
-		g.P("		return NewNullValue(), nil")
-		g.P("	case bool:")
-		g.P("		return NewBoolValue(v), nil")
-		g.P("	case int:")
-		g.P("		return NewNumberValue(float64(v)), nil")
-		g.P("	case int32:")
-		g.P("		return NewNumberValue(float64(v)), nil")
-		g.P("	case int64:")
-		g.P("		return NewNumberValue(float64(v)), nil")
-		g.P("	case uint:")
-		g.P("		return NewNumberValue(float64(v)), nil")
-		g.P("	case uint32:")
-		g.P("		return NewNumberValue(float64(v)), nil")
-		g.P("	case uint64:")
-		g.P("		return NewNumberValue(float64(v)), nil")
-		g.P("	case float32:")
-		g.P("		return NewNumberValue(float64(v)), nil")
-		g.P("	case float64:")
-		g.P("		return NewNumberValue(float64(v)), nil")
-		g.P("	case string:")
-		g.P("		if !", utf8Package.Ident("ValidString"), "(v) {")
-		g.P("			return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid UTF-8 in string: %q\", v)")
-		g.P("		}")
-		g.P("		return NewStringValue(v), nil")
-		g.P("	case []byte:")
-		g.P("		s := ", base64Package.Ident("StdEncoding"), ".EncodeToString(v)")
-		g.P("		return NewStringValue(s), nil")
-		g.P("	case map[string]interface{}:")
-		g.P("		v2, err := NewStruct(v)")
-		g.P("		if err != nil {")
-		g.P("			return nil, err")
-		g.P("		}")
-		g.P("		return NewStructValue(v2), nil")
-		g.P("	case []interface{}:")
-		g.P("		v2, err := NewList(v)")
-		g.P("		if err != nil {")
-		g.P("			return nil, err")
-		g.P("		}")
-		g.P("		return NewListValue(v2), nil")
-		g.P("	default:")
-		g.P("		return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid type: %T\", v)")
-		g.P("	}")
-		g.P("}")
-		g.P()
-
-		g.P("// NewNullValue constructs a new null Value.")
-		g.P("func NewNullValue() *Value {")
-		g.P("	return &Value{Kind: &Value_NullValue{NullValue: NullValue_NULL_VALUE}}")
-		g.P("}")
-		g.P()
-
-		g.P("// NewBoolValue constructs a new boolean Value.")
-		g.P("func NewBoolValue(v bool) *Value {")
-		g.P("	return &Value{Kind: &Value_BoolValue{BoolValue: v}}")
-		g.P("}")
-		g.P()
-
-		g.P("// NewNumberValue constructs a new number Value.")
-		g.P("func NewNumberValue(v float64) *Value {")
-		g.P("	return &Value{Kind: &Value_NumberValue{NumberValue: v}}")
-		g.P("}")
-		g.P()
-
-		g.P("// NewStringValue constructs a new string Value.")
-		g.P("func NewStringValue(v string) *Value {")
-		g.P("	return &Value{Kind: &Value_StringValue{StringValue: v}}")
-		g.P("}")
-		g.P()
-
-		g.P("// NewStructValue constructs a new struct Value.")
-		g.P("func NewStructValue(v *Struct) *Value {")
-		g.P("	return &Value{Kind: &Value_StructValue{StructValue: v}}")
-		g.P("}")
-		g.P()
-
-		g.P("// NewListValue constructs a new list Value.")
-		g.P("func NewListValue(v *ListValue) *Value {")
-		g.P("	return &Value{Kind: &Value_ListValue{ListValue: v}}")
-		g.P("}")
-		g.P()
-
-		g.P("// AsInterface converts x to a general-purpose Go interface.")
-		g.P("//")
-		g.P("// Calling Value.MarshalJSON and \"encoding/json\".Marshal on this output produce")
-		g.P("// semantically equivalent JSON (assuming no errors occur).")
-		g.P("//")
-		g.P("// Floating-point values (i.e., \"NaN\", \"Infinity\", and \"-Infinity\") are")
-		g.P("// converted as strings to remain compatible with MarshalJSON.")
-		g.P("func (x *Value) AsInterface() interface{} {")
-		g.P("	switch v := x.GetKind().(type) {")
-		g.P("	case *Value_NumberValue:")
-		g.P("		if v != nil {")
-		g.P("			switch {")
-		g.P("			case ", mathPackage.Ident("IsNaN"), "(v.NumberValue):")
-		g.P("				return \"NaN\"")
-		g.P("			case ", mathPackage.Ident("IsInf"), "(v.NumberValue, +1):")
-		g.P("				return \"Infinity\"")
-		g.P("			case ", mathPackage.Ident("IsInf"), "(v.NumberValue, -1):")
-		g.P("				return \"-Infinity\"")
-		g.P("			default:")
-		g.P("				return v.NumberValue")
-		g.P("			}")
-		g.P("		}")
-		g.P("	case *Value_StringValue:")
-		g.P("		if v != nil {")
-		g.P("			return v.StringValue")
-		g.P("		}")
-		g.P("	case *Value_BoolValue:")
-		g.P("		if v != nil {")
-		g.P("			return v.BoolValue")
-		g.P("		}")
-		g.P("	case *Value_StructValue:")
-		g.P("		if v != nil {")
-		g.P("			return v.StructValue.AsMap()")
-		g.P("		}")
-		g.P("	case *Value_ListValue:")
-		g.P("		if v != nil {")
-		g.P("			return v.ListValue.AsSlice()")
-		g.P("		}")
-		g.P("	}")
-		g.P("	return nil")
-		g.P("}")
-		g.P()
-
-		g.P("func (x *Value) MarshalJSON() ([]byte, error) {")
-		g.P("	return ", protojsonPackage.Ident("Marshal"), "(x)")
-		g.P("}")
-		g.P()
-
-		g.P("func (x *Value) UnmarshalJSON(b []byte) error {")
-		g.P("	return ", protojsonPackage.Ident("Unmarshal"), "(b, x)")
-		g.P("}")
-		g.P()
-
-	case genid.FieldMask_message_fullname:
-		g.P("// New constructs a field mask from a list of paths and verifies that")
-		g.P("// each one is valid according to the specified message type.")
-		g.P("func New(m ", protoPackage.Ident("Message"), ", paths ...string) (*FieldMask, error) {")
-		g.P("	x := new(FieldMask)")
-		g.P("	return x, x.Append(m, paths...)")
-		g.P("}")
-		g.P()
-
-		g.P("// Union returns the union of all the paths in the input field masks.")
-		g.P("func Union(mx *FieldMask, my *FieldMask, ms ...*FieldMask) *FieldMask {")
-		g.P("	var out []string")
-		g.P("	out = append(out, mx.GetPaths()...)")
-		g.P("	out = append(out, my.GetPaths()...)")
-		g.P("	for _, m := range ms {")
-		g.P("		out = append(out, m.GetPaths()...)")
-		g.P("	}")
-		g.P("	return &FieldMask{Paths: normalizePaths(out)}")
-		g.P("}")
-		g.P()
-
-		g.P("// Intersect returns the intersection of all the paths in the input field masks.")
-		g.P("func Intersect(mx *FieldMask, my *FieldMask, ms ...*FieldMask) *FieldMask {")
-		g.P("	var ss1, ss2 []string // reused buffers for performance")
-		g.P("	intersect := func(out, in []string) []string {")
-		g.P("		ss1 = normalizePaths(append(ss1[:0], in...))")
-		g.P("		ss2 = normalizePaths(append(ss2[:0], out...))")
-		g.P("		out = out[:0]")
-		g.P("		for i1, i2 := 0, 0; i1 < len(ss1) && i2 < len(ss2); {")
-		g.P("			switch s1, s2 := ss1[i1], ss2[i2]; {")
-		g.P("			case hasPathPrefix(s1, s2):")
-		g.P("				out = append(out, s1)")
-		g.P("				i1++")
-		g.P("			case hasPathPrefix(s2, s1):")
-		g.P("				out = append(out, s2)")
-		g.P("				i2++")
-		g.P("			case lessPath(s1, s2):")
-		g.P("				i1++")
-		g.P("			case lessPath(s2, s1):")
-		g.P("				i2++")
-		g.P("			}")
-		g.P("		}")
-		g.P("		return out")
-		g.P("	}")
-		g.P()
-		g.P("	out := Union(mx, my, ms...).GetPaths()")
-		g.P("	out = intersect(out, mx.GetPaths())")
-		g.P("	out = intersect(out, my.GetPaths())")
-		g.P("	for _, m := range ms {")
-		g.P("		out = intersect(out, m.GetPaths())")
-		g.P("	}")
-		g.P("	return &FieldMask{Paths: normalizePaths(out)}")
-		g.P("}")
-		g.P()
-
-		g.P("// IsValid reports whether all the paths are syntactically valid and")
-		g.P("// refer to known fields in the specified message type.")
-		g.P("// It reports false for a nil FieldMask.")
-		g.P("func (x *FieldMask) IsValid(m ", protoPackage.Ident("Message"), ") bool {")
-		g.P("	paths := x.GetPaths()")
-		g.P("	return x != nil && numValidPaths(m, paths) == len(paths)")
-		g.P("}")
-		g.P()
-
-		g.P("// Append appends a list of paths to the mask and verifies that each one")
-		g.P("// is valid according to the specified message type.")
-		g.P("// An invalid path is not appended and breaks insertion of subsequent paths.")
-		g.P("func (x *FieldMask) Append(m ", protoPackage.Ident("Message"), ", paths ...string) error {")
-		g.P("	numValid := numValidPaths(m, paths)")
-		g.P("	x.Paths = append(x.Paths, paths[:numValid]...)")
-		g.P("	paths = paths[numValid:]")
-		g.P("	if len(paths) > 0 {")
-		g.P("		name := m.ProtoReflect().Descriptor().FullName()")
-		g.P("		return ", protoimplPackage.Ident("X"), ".NewError(\"invalid path %q for message %q\", paths[0], name)")
-		g.P("	}")
-		g.P("	return nil")
-		g.P("}")
-		g.P()
-
-		g.P("func numValidPaths(m ", protoPackage.Ident("Message"), ", paths []string) int {")
-		g.P("	md0 := m.ProtoReflect().Descriptor()")
-		g.P("	for i, path := range paths {")
-		g.P("		md := md0")
-		g.P("		if !rangeFields(path, func(field string) bool {")
-		g.P("			// Search the field within the message.")
-		g.P("			if md == nil {")
-		g.P("				return false // not within a message")
-		g.P("			}")
-		g.P("			fd := md.Fields().ByName(", protoreflectPackage.Ident("Name"), "(field))")
-		g.P("			// The real field name of a group is the message name.")
-		g.P("			if fd == nil {")
-		g.P("				gd := md.Fields().ByName(", protoreflectPackage.Ident("Name"), "(", stringsPackage.Ident("ToLower"), "(field)))")
-		g.P("				if gd != nil && gd.Kind() == ", protoreflectPackage.Ident("GroupKind"), " && string(gd.Message().Name()) == field {")
-		g.P("					fd = gd")
-		g.P("				}")
-		g.P("			} else if fd.Kind() == ", protoreflectPackage.Ident("GroupKind"), " && string(fd.Message().Name()) != field {")
-		g.P("				fd = nil")
-		g.P("			}")
-		g.P("			if fd == nil {")
-		g.P("				return false // message has does not have this field")
-		g.P("			}")
-		g.P()
-		g.P("			// Identify the next message to search within.")
-		g.P("			md = fd.Message() // may be nil")
-		g.P()
-		g.P("			// Repeated fields are only allowed at the last postion.")
-		g.P("			if fd.IsList() || fd.IsMap() {")
-		g.P("				md = nil")
-		g.P("			}")
-		g.P()
-		g.P("			return true")
-		g.P("		}) {")
-		g.P("			return i")
-		g.P("		}")
-		g.P("	}")
-		g.P("	return len(paths)")
-		g.P("}")
-		g.P()
-
-		g.P("// Normalize converts the mask to its canonical form where all paths are sorted")
-		g.P("// and redundant paths are removed.")
-		g.P("func (x *FieldMask) Normalize() {")
-		g.P("	x.Paths = normalizePaths(x.Paths)")
-		g.P("}")
-		g.P()
-		g.P("func normalizePaths(paths []string) []string {")
-		g.P("	", sortPackage.Ident("Slice"), "(paths, func(i, j int) bool {")
-		g.P("		return lessPath(paths[i], paths[j])")
-		g.P("	})")
-		g.P()
-		g.P("	// Elide any path that is a prefix match on the previous.")
-		g.P("	out := paths[:0]")
-		g.P("	for _, path := range paths {")
-		g.P("		if len(out) > 0 && hasPathPrefix(path, out[len(out)-1]) {")
-		g.P("			continue")
-		g.P("		}")
-		g.P("		out = append(out, path)")
-		g.P("	}")
-		g.P("	return out")
-		g.P("}")
-		g.P()
-
-		g.P("// hasPathPrefix is like strings.HasPrefix, but further checks for either")
-		g.P("// an exact matche or that the prefix is delimited by a dot.")
-		g.P("func hasPathPrefix(path, prefix string) bool {")
-		g.P("	return ", stringsPackage.Ident("HasPrefix"), "(path, prefix) && (len(path) == len(prefix) || path[len(prefix)] == '.')")
-		g.P("}")
-		g.P()
-
-		g.P("// lessPath is a lexicographical comparison where dot is specially treated")
-		g.P("// as the smallest symbol.")
-		g.P("func lessPath(x, y string) bool {")
-		g.P("	for i := 0; i < len(x) && i < len(y); i++ {")
-		g.P("		if x[i] != y[i] {")
-		g.P("			return (x[i] - '.') < (y[i] - '.')")
-		g.P("		}")
-		g.P("	}")
-		g.P("	return len(x) < len(y)")
-		g.P("}")
-		g.P()
-
-		g.P("// rangeFields is like strings.Split(path, \".\"), but avoids allocations by")
-		g.P("// iterating over each field in place and calling a iterator function.")
-		g.P("func rangeFields(path string, f func(field string) bool) bool {")
-		g.P("	for {")
-		g.P("		var field string")
-		g.P("		if i := ", stringsPackage.Ident("IndexByte"), "(path, '.'); i >= 0 {")
-		g.P("			field, path = path[:i], path[i:]")
-		g.P("		} else {")
-		g.P("			field, path = path, \"\"")
-		g.P("		}")
-		g.P()
-		g.P("		if !f(field) {")
-		g.P("			return false")
-		g.P("		}")
-		g.P()
-		g.P("		if len(path) == 0 {")
-		g.P("			return true")
-		g.P("		}")
-		g.P("		path = ", stringsPackage.Ident("TrimPrefix"), "(path, \".\")")
-		g.P("	}")
-		g.P("}")
-		g.P()
-
-	case genid.BoolValue_message_fullname,
-		genid.Int32Value_message_fullname,
-		genid.Int64Value_message_fullname,
-		genid.UInt32Value_message_fullname,
-		genid.UInt64Value_message_fullname,
-		genid.FloatValue_message_fullname,
-		genid.DoubleValue_message_fullname,
-		genid.StringValue_message_fullname,
-		genid.BytesValue_message_fullname:
-		funcName := strings.TrimSuffix(m.GoIdent.GoName, "Value")
-		typeName := strings.ToLower(funcName)
-		switch typeName {
-		case "float":
-			typeName = "float32"
-		case "double":
-			typeName = "float64"
-		case "bytes":
-			typeName = "[]byte"
-		}
-
-		g.P("// ", funcName, " stores v in a new ", m.GoIdent, " and returns a pointer to it.")
-		g.P("func ", funcName, "(v ", typeName, ") *", m.GoIdent, " {")
-		g.P("	return &", m.GoIdent, "{Value: v}")
-		g.P("}")
-		g.P()
-	}
-}

+ 0 - 1261
vendor/google.golang.org/protobuf/compiler/protogen/protogen.go

@@ -1,1261 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package protogen provides support for writing protoc plugins.
-//
-// Plugins for protoc, the Protocol Buffer compiler,
-// are programs which read a CodeGeneratorRequest message from standard input
-// and write a CodeGeneratorResponse message to standard output.
-// This package provides support for writing plugins which generate Go code.
-package protogen
-
-import (
-	"bufio"
-	"bytes"
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/printer"
-	"go/token"
-	"go/types"
-	"io/ioutil"
-	"os"
-	"path"
-	"path/filepath"
-	"sort"
-	"strconv"
-	"strings"
-
-	"google.golang.org/protobuf/encoding/prototext"
-	"google.golang.org/protobuf/internal/genid"
-	"google.golang.org/protobuf/internal/strs"
-	"google.golang.org/protobuf/proto"
-	"google.golang.org/protobuf/reflect/protodesc"
-	"google.golang.org/protobuf/reflect/protoreflect"
-	"google.golang.org/protobuf/reflect/protoregistry"
-
-	"google.golang.org/protobuf/types/descriptorpb"
-	"google.golang.org/protobuf/types/pluginpb"
-)
-
-const goPackageDocURL = "https://developers.google.com/protocol-buffers/docs/reference/go-generated#package"
-
-// Run executes a function as a protoc plugin.
-//
-// It reads a CodeGeneratorRequest message from os.Stdin, invokes the plugin
-// function, and writes a CodeGeneratorResponse message to os.Stdout.
-//
-// If a failure occurs while reading or writing, Run prints an error to
-// os.Stderr and calls os.Exit(1).
-func (opts Options) Run(f func(*Plugin) error) {
-	if err := run(opts, f); err != nil {
-		fmt.Fprintf(os.Stderr, "%s: %v\n", filepath.Base(os.Args[0]), err)
-		os.Exit(1)
-	}
-}
-
-func run(opts Options, f func(*Plugin) error) error {
-	if len(os.Args) > 1 {
-		return fmt.Errorf("unknown argument %q (this program should be run by protoc, not directly)", os.Args[1])
-	}
-	in, err := ioutil.ReadAll(os.Stdin)
-	if err != nil {
-		return err
-	}
-	req := &pluginpb.CodeGeneratorRequest{}
-	if err := proto.Unmarshal(in, req); err != nil {
-		return err
-	}
-	gen, err := opts.New(req)
-	if err != nil {
-		return err
-	}
-	if err := f(gen); err != nil {
-		// Errors from the plugin function are reported by setting the
-		// error field in the CodeGeneratorResponse.
-		//
-		// In contrast, errors that indicate a problem in protoc
-		// itself (unparsable input, I/O errors, etc.) are reported
-		// to stderr.
-		gen.Error(err)
-	}
-	resp := gen.Response()
-	out, err := proto.Marshal(resp)
-	if err != nil {
-		return err
-	}
-	if _, err := os.Stdout.Write(out); err != nil {
-		return err
-	}
-	return nil
-}
-
-// A Plugin is a protoc plugin invocation.
-type Plugin struct {
-	// Request is the CodeGeneratorRequest provided by protoc.
-	Request *pluginpb.CodeGeneratorRequest
-
-	// Files is the set of files to generate and everything they import.
-	// Files appear in topological order, so each file appears before any
-	// file that imports it.
-	Files       []*File
-	FilesByPath map[string]*File
-
-	// SupportedFeatures is the set of protobuf language features supported by
-	// this generator plugin. See the documentation for
-	// google.protobuf.CodeGeneratorResponse.supported_features for details.
-	SupportedFeatures uint64
-
-	fileReg        *protoregistry.Files
-	enumsByName    map[protoreflect.FullName]*Enum
-	messagesByName map[protoreflect.FullName]*Message
-	annotateCode   bool
-	pathType       pathType
-	module         string
-	genFiles       []*GeneratedFile
-	opts           Options
-	err            error
-}
-
-type Options struct {
-	// If ParamFunc is non-nil, it will be called with each unknown
-	// generator parameter.
-	//
-	// Plugins for protoc can accept parameters from the command line,
-	// passed in the --<lang>_out protoc, separated from the output
-	// directory with a colon; e.g.,
-	//
-	//   --go_out=<param1>=<value1>,<param2>=<value2>:<output_directory>
-	//
-	// Parameters passed in this fashion as a comma-separated list of
-	// key=value pairs will be passed to the ParamFunc.
-	//
-	// The (flag.FlagSet).Set method matches this function signature,
-	// so parameters can be converted into flags as in the following:
-	//
-	//   var flags flag.FlagSet
-	//   value := flags.Bool("param", false, "")
-	//   opts := &protogen.Options{
-	//     ParamFunc: flags.Set,
-	//   }
-	//   protogen.Run(opts, func(p *protogen.Plugin) error {
-	//     if *value { ... }
-	//   })
-	ParamFunc func(name, value string) error
-
-	// ImportRewriteFunc is called with the import path of each package
-	// imported by a generated file. It returns the import path to use
-	// for this package.
-	ImportRewriteFunc func(GoImportPath) GoImportPath
-}
-
-// New returns a new Plugin.
-func (opts Options) New(req *pluginpb.CodeGeneratorRequest) (*Plugin, error) {
-	gen := &Plugin{
-		Request:        req,
-		FilesByPath:    make(map[string]*File),
-		fileReg:        new(protoregistry.Files),
-		enumsByName:    make(map[protoreflect.FullName]*Enum),
-		messagesByName: make(map[protoreflect.FullName]*Message),
-		opts:           opts,
-	}
-
-	packageNames := make(map[string]GoPackageName) // filename -> package name
-	importPaths := make(map[string]GoImportPath)   // filename -> import path
-	for _, param := range strings.Split(req.GetParameter(), ",") {
-		var value string
-		if i := strings.Index(param, "="); i >= 0 {
-			value = param[i+1:]
-			param = param[0:i]
-		}
-		switch param {
-		case "":
-			// Ignore.
-		case "module":
-			gen.module = value
-		case "paths":
-			switch value {
-			case "import":
-				gen.pathType = pathTypeImport
-			case "source_relative":
-				gen.pathType = pathTypeSourceRelative
-			default:
-				return nil, fmt.Errorf(`unknown path type %q: want "import" or "source_relative"`, value)
-			}
-		case "annotate_code":
-			switch value {
-			case "true", "":
-				gen.annotateCode = true
-			case "false":
-			default:
-				return nil, fmt.Errorf(`bad value for parameter %q: want "true" or "false"`, param)
-			}
-		default:
-			if param[0] == 'M' {
-				impPath, pkgName := splitImportPathAndPackageName(value)
-				if pkgName != "" {
-					packageNames[param[1:]] = pkgName
-				}
-				if impPath != "" {
-					importPaths[param[1:]] = impPath
-				}
-				continue
-			}
-			if opts.ParamFunc != nil {
-				if err := opts.ParamFunc(param, value); err != nil {
-					return nil, err
-				}
-			}
-		}
-	}
-	// When the module= option is provided, we strip the module name
-	// prefix from generated files. This only makes sense if generated
-	// filenames are based on the import path.
-	if gen.module != "" && gen.pathType == pathTypeSourceRelative {
-		return nil, fmt.Errorf("cannot use module= with paths=source_relative")
-	}
-
-	// Figure out the import path and package name for each file.
-	//
-	// The rules here are complicated and have grown organically over time.
-	// Interactions between different ways of specifying package information
-	// may be surprising.
-	//
-	// The recommended approach is to include a go_package option in every
-	// .proto source file specifying the full import path of the Go package
-	// associated with this file.
-	//
-	//     option go_package = "google.golang.org/protobuf/types/known/anypb";
-	//
-	// Alternatively, build systems which want to exert full control over
-	// import paths may specify M<filename>=<import_path> flags.
-	for _, fdesc := range gen.Request.ProtoFile {
-		// The "M" command-line flags take precedence over
-		// the "go_package" option in the .proto source file.
-		filename := fdesc.GetName()
-		impPath, pkgName := splitImportPathAndPackageName(fdesc.GetOptions().GetGoPackage())
-		if importPaths[filename] == "" && impPath != "" {
-			importPaths[filename] = impPath
-		}
-		if packageNames[filename] == "" && pkgName != "" {
-			packageNames[filename] = pkgName
-		}
-		switch {
-		case importPaths[filename] == "":
-			// The import path must be specified one way or another.
-			return nil, fmt.Errorf(
-				"unable to determine Go import path for %q\n\n"+
-					"Please specify either:\n"+
-					"\t• a \"go_package\" option in the .proto source file, or\n"+
-					"\t• a \"M\" argument on the command line.\n\n"+
-					"See %v for more information.\n",
-				fdesc.GetName(), goPackageDocURL)
-		case !strings.Contains(string(importPaths[filename]), ".") &&
-			!strings.Contains(string(importPaths[filename]), "/"):
-			// Check that import paths contain at least a dot or slash to avoid
-			// a common mistake where import path is confused with package name.
-			return nil, fmt.Errorf(
-				"invalid Go import path %q for %q\n\n"+
-					"The import path must contain at least one period ('.') or forward slash ('/') character.\n\n"+
-					"See %v for more information.\n",
-				string(importPaths[filename]), fdesc.GetName(), goPackageDocURL)
-		case packageNames[filename] == "":
-			// If the package name is not explicitly specified,
-			// then derive a reasonable package name from the import path.
-			//
-			// NOTE: The package name is derived first from the import path in
-			// the "go_package" option (if present) before trying the "M" flag.
-			// The inverted order for this is because the primary use of the "M"
-			// flag is by build systems that have full control over the
-			// import paths all packages, where it is generally expected that
-			// the Go package name still be identical for the Go toolchain and
-			// for custom build systems like Bazel.
-			if impPath == "" {
-				impPath = importPaths[filename]
-			}
-			packageNames[filename] = cleanPackageName(path.Base(string(impPath)))
-		}
-	}
-
-	// Consistency check: Every file with the same Go import path should have
-	// the same Go package name.
-	packageFiles := make(map[GoImportPath][]string)
-	for filename, importPath := range importPaths {
-		if _, ok := packageNames[filename]; !ok {
-			// Skip files mentioned in a M<file>=<import_path> parameter
-			// but which do not appear in the CodeGeneratorRequest.
-			continue
-		}
-		packageFiles[importPath] = append(packageFiles[importPath], filename)
-	}
-	for importPath, filenames := range packageFiles {
-		for i := 1; i < len(filenames); i++ {
-			if a, b := packageNames[filenames[0]], packageNames[filenames[i]]; a != b {
-				return nil, fmt.Errorf("Go package %v has inconsistent names %v (%v) and %v (%v)",
-					importPath, a, filenames[0], b, filenames[i])
-			}
-		}
-	}
-
-	for _, fdesc := range gen.Request.ProtoFile {
-		filename := fdesc.GetName()
-		if gen.FilesByPath[filename] != nil {
-			return nil, fmt.Errorf("duplicate file name: %q", filename)
-		}
-		f, err := newFile(gen, fdesc, packageNames[filename], importPaths[filename])
-		if err != nil {
-			return nil, err
-		}
-		gen.Files = append(gen.Files, f)
-		gen.FilesByPath[filename] = f
-	}
-	for _, filename := range gen.Request.FileToGenerate {
-		f, ok := gen.FilesByPath[filename]
-		if !ok {
-			return nil, fmt.Errorf("no descriptor for generated file: %v", filename)
-		}
-		f.Generate = true
-	}
-	return gen, nil
-}
-
-// Error records an error in code generation. The generator will report the
-// error back to protoc and will not produce output.
-func (gen *Plugin) Error(err error) {
-	if gen.err == nil {
-		gen.err = err
-	}
-}
-
-// Response returns the generator output.
-func (gen *Plugin) Response() *pluginpb.CodeGeneratorResponse {
-	resp := &pluginpb.CodeGeneratorResponse{}
-	if gen.err != nil {
-		resp.Error = proto.String(gen.err.Error())
-		return resp
-	}
-	for _, g := range gen.genFiles {
-		if g.skip {
-			continue
-		}
-		content, err := g.Content()
-		if err != nil {
-			return &pluginpb.CodeGeneratorResponse{
-				Error: proto.String(err.Error()),
-			}
-		}
-		filename := g.filename
-		if gen.module != "" {
-			trim := gen.module + "/"
-			if !strings.HasPrefix(filename, trim) {
-				return &pluginpb.CodeGeneratorResponse{
-					Error: proto.String(fmt.Sprintf("%v: generated file does not match prefix %q", filename, gen.module)),
-				}
-			}
-			filename = strings.TrimPrefix(filename, trim)
-		}
-		resp.File = append(resp.File, &pluginpb.CodeGeneratorResponse_File{
-			Name:    proto.String(filename),
-			Content: proto.String(string(content)),
-		})
-		if gen.annotateCode && strings.HasSuffix(g.filename, ".go") {
-			meta, err := g.metaFile(content)
-			if err != nil {
-				return &pluginpb.CodeGeneratorResponse{
-					Error: proto.String(err.Error()),
-				}
-			}
-			resp.File = append(resp.File, &pluginpb.CodeGeneratorResponse_File{
-				Name:    proto.String(filename + ".meta"),
-				Content: proto.String(meta),
-			})
-		}
-	}
-	if gen.SupportedFeatures > 0 {
-		resp.SupportedFeatures = proto.Uint64(gen.SupportedFeatures)
-	}
-	return resp
-}
-
-// A File describes a .proto source file.
-type File struct {
-	Desc  protoreflect.FileDescriptor
-	Proto *descriptorpb.FileDescriptorProto
-
-	GoDescriptorIdent GoIdent       // name of Go variable for the file descriptor
-	GoPackageName     GoPackageName // name of this file's Go package
-	GoImportPath      GoImportPath  // import path of this file's Go package
-
-	Enums      []*Enum      // top-level enum declarations
-	Messages   []*Message   // top-level message declarations
-	Extensions []*Extension // top-level extension declarations
-	Services   []*Service   // top-level service declarations
-
-	Generate bool // true if we should generate code for this file
-
-	// GeneratedFilenamePrefix is used to construct filenames for generated
-	// files associated with this source file.
-	//
-	// For example, the source file "dir/foo.proto" might have a filename prefix
-	// of "dir/foo". Appending ".pb.go" produces an output file of "dir/foo.pb.go".
-	GeneratedFilenamePrefix string
-
-	location Location
-}
-
-func newFile(gen *Plugin, p *descriptorpb.FileDescriptorProto, packageName GoPackageName, importPath GoImportPath) (*File, error) {
-	desc, err := protodesc.NewFile(p, gen.fileReg)
-	if err != nil {
-		return nil, fmt.Errorf("invalid FileDescriptorProto %q: %v", p.GetName(), err)
-	}
-	if err := gen.fileReg.RegisterFile(desc); err != nil {
-		return nil, fmt.Errorf("cannot register descriptor %q: %v", p.GetName(), err)
-	}
-	f := &File{
-		Desc:          desc,
-		Proto:         p,
-		GoPackageName: packageName,
-		GoImportPath:  importPath,
-		location:      Location{SourceFile: desc.Path()},
-	}
-
-	// Determine the prefix for generated Go files.
-	prefix := p.GetName()
-	if ext := path.Ext(prefix); ext == ".proto" || ext == ".protodevel" {
-		prefix = prefix[:len(prefix)-len(ext)]
-	}
-	switch gen.pathType {
-	case pathTypeImport:
-		// If paths=import, the output filename is derived from the Go import path.
-		prefix = path.Join(string(f.GoImportPath), path.Base(prefix))
-	case pathTypeSourceRelative:
-		// If paths=source_relative, the output filename is derived from
-		// the input filename.
-	}
-	f.GoDescriptorIdent = GoIdent{
-		GoName:       "File_" + strs.GoSanitized(p.GetName()),
-		GoImportPath: f.GoImportPath,
-	}
-	f.GeneratedFilenamePrefix = prefix
-
-	for i, eds := 0, desc.Enums(); i < eds.Len(); i++ {
-		f.Enums = append(f.Enums, newEnum(gen, f, nil, eds.Get(i)))
-	}
-	for i, mds := 0, desc.Messages(); i < mds.Len(); i++ {
-		f.Messages = append(f.Messages, newMessage(gen, f, nil, mds.Get(i)))
-	}
-	for i, xds := 0, desc.Extensions(); i < xds.Len(); i++ {
-		f.Extensions = append(f.Extensions, newField(gen, f, nil, xds.Get(i)))
-	}
-	for i, sds := 0, desc.Services(); i < sds.Len(); i++ {
-		f.Services = append(f.Services, newService(gen, f, sds.Get(i)))
-	}
-	for _, message := range f.Messages {
-		if err := message.resolveDependencies(gen); err != nil {
-			return nil, err
-		}
-	}
-	for _, extension := range f.Extensions {
-		if err := extension.resolveDependencies(gen); err != nil {
-			return nil, err
-		}
-	}
-	for _, service := range f.Services {
-		for _, method := range service.Methods {
-			if err := method.resolveDependencies(gen); err != nil {
-				return nil, err
-			}
-		}
-	}
-	return f, nil
-}
-
-// splitImportPathAndPackageName splits off the optional Go package name
-// from the Go import path when seperated by a ';' delimiter.
-func splitImportPathAndPackageName(s string) (GoImportPath, GoPackageName) {
-	if i := strings.Index(s, ";"); i >= 0 {
-		return GoImportPath(s[:i]), GoPackageName(s[i+1:])
-	}
-	return GoImportPath(s), ""
-}
-
-// An Enum describes an enum.
-type Enum struct {
-	Desc protoreflect.EnumDescriptor
-
-	GoIdent GoIdent // name of the generated Go type
-
-	Values []*EnumValue // enum value declarations
-
-	Location Location   // location of this enum
-	Comments CommentSet // comments associated with this enum
-}
-
-func newEnum(gen *Plugin, f *File, parent *Message, desc protoreflect.EnumDescriptor) *Enum {
-	var loc Location
-	if parent != nil {
-		loc = parent.Location.appendPath(genid.DescriptorProto_EnumType_field_number, desc.Index())
-	} else {
-		loc = f.location.appendPath(genid.FileDescriptorProto_EnumType_field_number, desc.Index())
-	}
-	enum := &Enum{
-		Desc:     desc,
-		GoIdent:  newGoIdent(f, desc),
-		Location: loc,
-		Comments: makeCommentSet(f.Desc.SourceLocations().ByDescriptor(desc)),
-	}
-	gen.enumsByName[desc.FullName()] = enum
-	for i, vds := 0, enum.Desc.Values(); i < vds.Len(); i++ {
-		enum.Values = append(enum.Values, newEnumValue(gen, f, parent, enum, vds.Get(i)))
-	}
-	return enum
-}
-
-// An EnumValue describes an enum value.
-type EnumValue struct {
-	Desc protoreflect.EnumValueDescriptor
-
-	GoIdent GoIdent // name of the generated Go declaration
-
-	Parent *Enum // enum in which this value is declared
-
-	Location Location   // location of this enum value
-	Comments CommentSet // comments associated with this enum value
-}
-
-func newEnumValue(gen *Plugin, f *File, message *Message, enum *Enum, desc protoreflect.EnumValueDescriptor) *EnumValue {
-	// A top-level enum value's name is: EnumName_ValueName
-	// An enum value contained in a message is: MessageName_ValueName
-	//
-	// For historical reasons, enum value names are not camel-cased.
-	parentIdent := enum.GoIdent
-	if message != nil {
-		parentIdent = message.GoIdent
-	}
-	name := parentIdent.GoName + "_" + string(desc.Name())
-	loc := enum.Location.appendPath(genid.EnumDescriptorProto_Value_field_number, desc.Index())
-	return &EnumValue{
-		Desc:     desc,
-		GoIdent:  f.GoImportPath.Ident(name),
-		Parent:   enum,
-		Location: loc,
-		Comments: makeCommentSet(f.Desc.SourceLocations().ByDescriptor(desc)),
-	}
-}
-
-// A Message describes a message.
-type Message struct {
-	Desc protoreflect.MessageDescriptor
-
-	GoIdent GoIdent // name of the generated Go type
-
-	Fields []*Field // message field declarations
-	Oneofs []*Oneof // message oneof declarations
-
-	Enums      []*Enum      // nested enum declarations
-	Messages   []*Message   // nested message declarations
-	Extensions []*Extension // nested extension declarations
-
-	Location Location   // location of this message
-	Comments CommentSet // comments associated with this message
-}
-
-func newMessage(gen *Plugin, f *File, parent *Message, desc protoreflect.MessageDescriptor) *Message {
-	var loc Location
-	if parent != nil {
-		loc = parent.Location.appendPath(genid.DescriptorProto_NestedType_field_number, desc.Index())
-	} else {
-		loc = f.location.appendPath(genid.FileDescriptorProto_MessageType_field_number, desc.Index())
-	}
-	message := &Message{
-		Desc:     desc,
-		GoIdent:  newGoIdent(f, desc),
-		Location: loc,
-		Comments: makeCommentSet(f.Desc.SourceLocations().ByDescriptor(desc)),
-	}
-	gen.messagesByName[desc.FullName()] = message
-	for i, eds := 0, desc.Enums(); i < eds.Len(); i++ {
-		message.Enums = append(message.Enums, newEnum(gen, f, message, eds.Get(i)))
-	}
-	for i, mds := 0, desc.Messages(); i < mds.Len(); i++ {
-		message.Messages = append(message.Messages, newMessage(gen, f, message, mds.Get(i)))
-	}
-	for i, fds := 0, desc.Fields(); i < fds.Len(); i++ {
-		message.Fields = append(message.Fields, newField(gen, f, message, fds.Get(i)))
-	}
-	for i, ods := 0, desc.Oneofs(); i < ods.Len(); i++ {
-		message.Oneofs = append(message.Oneofs, newOneof(gen, f, message, ods.Get(i)))
-	}
-	for i, xds := 0, desc.Extensions(); i < xds.Len(); i++ {
-		message.Extensions = append(message.Extensions, newField(gen, f, message, xds.Get(i)))
-	}
-
-	// Resolve local references between fields and oneofs.
-	for _, field := range message.Fields {
-		if od := field.Desc.ContainingOneof(); od != nil {
-			oneof := message.Oneofs[od.Index()]
-			field.Oneof = oneof
-			oneof.Fields = append(oneof.Fields, field)
-		}
-	}
-
-	// Field name conflict resolution.
-	//
-	// We assume well-known method names that may be attached to a generated
-	// message type, as well as a 'Get*' method for each field. For each
-	// field in turn, we add _s to its name until there are no conflicts.
-	//
-	// Any change to the following set of method names is a potential
-	// incompatible API change because it may change generated field names.
-	//
-	// TODO: If we ever support a 'go_name' option to set the Go name of a
-	// field, we should consider dropping this entirely. The conflict
-	// resolution algorithm is subtle and surprising (changing the order
-	// in which fields appear in the .proto source file can change the
-	// names of fields in generated code), and does not adapt well to
-	// adding new per-field methods such as setters.
-	usedNames := map[string]bool{
-		"Reset":               true,
-		"String":              true,
-		"ProtoMessage":        true,
-		"Marshal":             true,
-		"Unmarshal":           true,
-		"ExtensionRangeArray": true,
-		"ExtensionMap":        true,
-		"Descriptor":          true,
-	}
-	makeNameUnique := func(name string, hasGetter bool) string {
-		for usedNames[name] || (hasGetter && usedNames["Get"+name]) {
-			name += "_"
-		}
-		usedNames[name] = true
-		usedNames["Get"+name] = hasGetter
-		return name
-	}
-	for _, field := range message.Fields {
-		field.GoName = makeNameUnique(field.GoName, true)
-		field.GoIdent.GoName = message.GoIdent.GoName + "_" + field.GoName
-		if field.Oneof != nil && field.Oneof.Fields[0] == field {
-			// Make the name for a oneof unique as well. For historical reasons,
-			// this assumes that a getter method is not generated for oneofs.
-			// This is incorrect, but fixing it breaks existing code.
-			field.Oneof.GoName = makeNameUnique(field.Oneof.GoName, false)
-			field.Oneof.GoIdent.GoName = message.GoIdent.GoName + "_" + field.Oneof.GoName
-		}
-	}
-
-	// Oneof field name conflict resolution.
-	//
-	// This conflict resolution is incomplete as it does not consider collisions
-	// with other oneof field types, but fixing it breaks existing code.
-	for _, field := range message.Fields {
-		if field.Oneof != nil {
-		Loop:
-			for {
-				for _, nestedMessage := range message.Messages {
-					if nestedMessage.GoIdent == field.GoIdent {
-						field.GoIdent.GoName += "_"
-						continue Loop
-					}
-				}
-				for _, nestedEnum := range message.Enums {
-					if nestedEnum.GoIdent == field.GoIdent {
-						field.GoIdent.GoName += "_"
-						continue Loop
-					}
-				}
-				break Loop
-			}
-		}
-	}
-
-	return message
-}
-
-func (message *Message) resolveDependencies(gen *Plugin) error {
-	for _, field := range message.Fields {
-		if err := field.resolveDependencies(gen); err != nil {
-			return err
-		}
-	}
-	for _, message := range message.Messages {
-		if err := message.resolveDependencies(gen); err != nil {
-			return err
-		}
-	}
-	for _, extension := range message.Extensions {
-		if err := extension.resolveDependencies(gen); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// A Field describes a message field.
-type Field struct {
-	Desc protoreflect.FieldDescriptor
-
-	// GoName is the base name of this field's Go field and methods.
-	// For code generated by protoc-gen-go, this means a field named
-	// '{{GoName}}' and a getter method named 'Get{{GoName}}'.
-	GoName string // e.g., "FieldName"
-
-	// GoIdent is the base name of a top-level declaration for this field.
-	// For code generated by protoc-gen-go, this means a wrapper type named
-	// '{{GoIdent}}' for members fields of a oneof, and a variable named
-	// 'E_{{GoIdent}}' for extension fields.
-	GoIdent GoIdent // e.g., "MessageName_FieldName"
-
-	Parent   *Message // message in which this field is declared; nil if top-level extension
-	Oneof    *Oneof   // containing oneof; nil if not part of a oneof
-	Extendee *Message // extended message for extension fields; nil otherwise
-
-	Enum    *Enum    // type for enum fields; nil otherwise
-	Message *Message // type for message or group fields; nil otherwise
-
-	Location Location   // location of this field
-	Comments CommentSet // comments associated with this field
-}
-
-func newField(gen *Plugin, f *File, message *Message, desc protoreflect.FieldDescriptor) *Field {
-	var loc Location
-	switch {
-	case desc.IsExtension() && message == nil:
-		loc = f.location.appendPath(genid.FileDescriptorProto_Extension_field_number, desc.Index())
-	case desc.IsExtension() && message != nil:
-		loc = message.Location.appendPath(genid.DescriptorProto_Extension_field_number, desc.Index())
-	default:
-		loc = message.Location.appendPath(genid.DescriptorProto_Field_field_number, desc.Index())
-	}
-	camelCased := strs.GoCamelCase(string(desc.Name()))
-	var parentPrefix string
-	if message != nil {
-		parentPrefix = message.GoIdent.GoName + "_"
-	}
-	field := &Field{
-		Desc:   desc,
-		GoName: camelCased,
-		GoIdent: GoIdent{
-			GoImportPath: f.GoImportPath,
-			GoName:       parentPrefix + camelCased,
-		},
-		Parent:   message,
-		Location: loc,
-		Comments: makeCommentSet(f.Desc.SourceLocations().ByDescriptor(desc)),
-	}
-	return field
-}
-
-func (field *Field) resolveDependencies(gen *Plugin) error {
-	desc := field.Desc
-	switch desc.Kind() {
-	case protoreflect.EnumKind:
-		name := field.Desc.Enum().FullName()
-		enum, ok := gen.enumsByName[name]
-		if !ok {
-			return fmt.Errorf("field %v: no descriptor for enum %v", desc.FullName(), name)
-		}
-		field.Enum = enum
-	case protoreflect.MessageKind, protoreflect.GroupKind:
-		name := desc.Message().FullName()
-		message, ok := gen.messagesByName[name]
-		if !ok {
-			return fmt.Errorf("field %v: no descriptor for type %v", desc.FullName(), name)
-		}
-		field.Message = message
-	}
-	if desc.IsExtension() {
-		name := desc.ContainingMessage().FullName()
-		message, ok := gen.messagesByName[name]
-		if !ok {
-			return fmt.Errorf("field %v: no descriptor for type %v", desc.FullName(), name)
-		}
-		field.Extendee = message
-	}
-	return nil
-}
-
-// A Oneof describes a message oneof.
-type Oneof struct {
-	Desc protoreflect.OneofDescriptor
-
-	// GoName is the base name of this oneof's Go field and methods.
-	// For code generated by protoc-gen-go, this means a field named
-	// '{{GoName}}' and a getter method named 'Get{{GoName}}'.
-	GoName string // e.g., "OneofName"
-
-	// GoIdent is the base name of a top-level declaration for this oneof.
-	GoIdent GoIdent // e.g., "MessageName_OneofName"
-
-	Parent *Message // message in which this oneof is declared
-
-	Fields []*Field // fields that are part of this oneof
-
-	Location Location   // location of this oneof
-	Comments CommentSet // comments associated with this oneof
-}
-
-func newOneof(gen *Plugin, f *File, message *Message, desc protoreflect.OneofDescriptor) *Oneof {
-	loc := message.Location.appendPath(genid.DescriptorProto_OneofDecl_field_number, desc.Index())
-	camelCased := strs.GoCamelCase(string(desc.Name()))
-	parentPrefix := message.GoIdent.GoName + "_"
-	return &Oneof{
-		Desc:   desc,
-		Parent: message,
-		GoName: camelCased,
-		GoIdent: GoIdent{
-			GoImportPath: f.GoImportPath,
-			GoName:       parentPrefix + camelCased,
-		},
-		Location: loc,
-		Comments: makeCommentSet(f.Desc.SourceLocations().ByDescriptor(desc)),
-	}
-}
-
-// Extension is an alias of Field for documentation.
-type Extension = Field
-
-// A Service describes a service.
-type Service struct {
-	Desc protoreflect.ServiceDescriptor
-
-	GoName string
-
-	Methods []*Method // service method declarations
-
-	Location Location   // location of this service
-	Comments CommentSet // comments associated with this service
-}
-
-func newService(gen *Plugin, f *File, desc protoreflect.ServiceDescriptor) *Service {
-	loc := f.location.appendPath(genid.FileDescriptorProto_Service_field_number, desc.Index())
-	service := &Service{
-		Desc:     desc,
-		GoName:   strs.GoCamelCase(string(desc.Name())),
-		Location: loc,
-		Comments: makeCommentSet(f.Desc.SourceLocations().ByDescriptor(desc)),
-	}
-	for i, mds := 0, desc.Methods(); i < mds.Len(); i++ {
-		service.Methods = append(service.Methods, newMethod(gen, f, service, mds.Get(i)))
-	}
-	return service
-}
-
-// A Method describes a method in a service.
-type Method struct {
-	Desc protoreflect.MethodDescriptor
-
-	GoName string
-
-	Parent *Service // service in which this method is declared
-
-	Input  *Message
-	Output *Message
-
-	Location Location   // location of this method
-	Comments CommentSet // comments associated with this method
-}
-
-func newMethod(gen *Plugin, f *File, service *Service, desc protoreflect.MethodDescriptor) *Method {
-	loc := service.Location.appendPath(genid.ServiceDescriptorProto_Method_field_number, desc.Index())
-	method := &Method{
-		Desc:     desc,
-		GoName:   strs.GoCamelCase(string(desc.Name())),
-		Parent:   service,
-		Location: loc,
-		Comments: makeCommentSet(f.Desc.SourceLocations().ByDescriptor(desc)),
-	}
-	return method
-}
-
-func (method *Method) resolveDependencies(gen *Plugin) error {
-	desc := method.Desc
-
-	inName := desc.Input().FullName()
-	in, ok := gen.messagesByName[inName]
-	if !ok {
-		return fmt.Errorf("method %v: no descriptor for type %v", desc.FullName(), inName)
-	}
-	method.Input = in
-
-	outName := desc.Output().FullName()
-	out, ok := gen.messagesByName[outName]
-	if !ok {
-		return fmt.Errorf("method %v: no descriptor for type %v", desc.FullName(), outName)
-	}
-	method.Output = out
-
-	return nil
-}
-
-// A GeneratedFile is a generated file.
-type GeneratedFile struct {
-	gen              *Plugin
-	skip             bool
-	filename         string
-	goImportPath     GoImportPath
-	buf              bytes.Buffer
-	packageNames     map[GoImportPath]GoPackageName
-	usedPackageNames map[GoPackageName]bool
-	manualImports    map[GoImportPath]bool
-	annotations      map[string][]Location
-}
-
-// NewGeneratedFile creates a new generated file with the given filename
-// and import path.
-func (gen *Plugin) NewGeneratedFile(filename string, goImportPath GoImportPath) *GeneratedFile {
-	g := &GeneratedFile{
-		gen:              gen,
-		filename:         filename,
-		goImportPath:     goImportPath,
-		packageNames:     make(map[GoImportPath]GoPackageName),
-		usedPackageNames: make(map[GoPackageName]bool),
-		manualImports:    make(map[GoImportPath]bool),
-		annotations:      make(map[string][]Location),
-	}
-
-	// All predeclared identifiers in Go are already used.
-	for _, s := range types.Universe.Names() {
-		g.usedPackageNames[GoPackageName(s)] = true
-	}
-
-	gen.genFiles = append(gen.genFiles, g)
-	return g
-}
-
-// P prints a line to the generated output. It converts each parameter to a
-// string following the same rules as fmt.Print. It never inserts spaces
-// between parameters.
-func (g *GeneratedFile) P(v ...interface{}) {
-	for _, x := range v {
-		switch x := x.(type) {
-		case GoIdent:
-			fmt.Fprint(&g.buf, g.QualifiedGoIdent(x))
-		default:
-			fmt.Fprint(&g.buf, x)
-		}
-	}
-	fmt.Fprintln(&g.buf)
-}
-
-// QualifiedGoIdent returns the string to use for a Go identifier.
-//
-// If the identifier is from a different Go package than the generated file,
-// the returned name will be qualified (package.name) and an import statement
-// for the identifier's package will be included in the file.
-func (g *GeneratedFile) QualifiedGoIdent(ident GoIdent) string {
-	if ident.GoImportPath == g.goImportPath {
-		return ident.GoName
-	}
-	if packageName, ok := g.packageNames[ident.GoImportPath]; ok {
-		return string(packageName) + "." + ident.GoName
-	}
-	packageName := cleanPackageName(path.Base(string(ident.GoImportPath)))
-	for i, orig := 1, packageName; g.usedPackageNames[packageName]; i++ {
-		packageName = orig + GoPackageName(strconv.Itoa(i))
-	}
-	g.packageNames[ident.GoImportPath] = packageName
-	g.usedPackageNames[packageName] = true
-	return string(packageName) + "." + ident.GoName
-}
-
-// Import ensures a package is imported by the generated file.
-//
-// Packages referenced by QualifiedGoIdent are automatically imported.
-// Explicitly importing a package with Import is generally only necessary
-// when the import will be blank (import _ "package").
-func (g *GeneratedFile) Import(importPath GoImportPath) {
-	g.manualImports[importPath] = true
-}
-
-// Write implements io.Writer.
-func (g *GeneratedFile) Write(p []byte) (n int, err error) {
-	return g.buf.Write(p)
-}
-
-// Skip removes the generated file from the plugin output.
-func (g *GeneratedFile) Skip() {
-	g.skip = true
-}
-
-// Unskip reverts a previous call to Skip, re-including the generated file in
-// the plugin output.
-func (g *GeneratedFile) Unskip() {
-	g.skip = false
-}
-
-// Annotate associates a symbol in a generated Go file with a location in a
-// source .proto file.
-//
-// The symbol may refer to a type, constant, variable, function, method, or
-// struct field.  The "T.sel" syntax is used to identify the method or field
-// 'sel' on type 'T'.
-func (g *GeneratedFile) Annotate(symbol string, loc Location) {
-	g.annotations[symbol] = append(g.annotations[symbol], loc)
-}
-
-// Content returns the contents of the generated file.
-func (g *GeneratedFile) Content() ([]byte, error) {
-	if !strings.HasSuffix(g.filename, ".go") {
-		return g.buf.Bytes(), nil
-	}
-
-	// Reformat generated code.
-	original := g.buf.Bytes()
-	fset := token.NewFileSet()
-	file, err := parser.ParseFile(fset, "", original, parser.ParseComments)
-	if err != nil {
-		// Print out the bad code with line numbers.
-		// This should never happen in practice, but it can while changing generated code
-		// so consider this a debugging aid.
-		var src bytes.Buffer
-		s := bufio.NewScanner(bytes.NewReader(original))
-		for line := 1; s.Scan(); line++ {
-			fmt.Fprintf(&src, "%5d\t%s\n", line, s.Bytes())
-		}
-		return nil, fmt.Errorf("%v: unparsable Go source: %v\n%v", g.filename, err, src.String())
-	}
-
-	// Collect a sorted list of all imports.
-	var importPaths [][2]string
-	rewriteImport := func(importPath string) string {
-		if f := g.gen.opts.ImportRewriteFunc; f != nil {
-			return string(f(GoImportPath(importPath)))
-		}
-		return importPath
-	}
-	for importPath := range g.packageNames {
-		pkgName := string(g.packageNames[GoImportPath(importPath)])
-		pkgPath := rewriteImport(string(importPath))
-		importPaths = append(importPaths, [2]string{pkgName, pkgPath})
-	}
-	for importPath := range g.manualImports {
-		if _, ok := g.packageNames[importPath]; !ok {
-			pkgPath := rewriteImport(string(importPath))
-			importPaths = append(importPaths, [2]string{"_", pkgPath})
-		}
-	}
-	sort.Slice(importPaths, func(i, j int) bool {
-		return importPaths[i][1] < importPaths[j][1]
-	})
-
-	// Modify the AST to include a new import block.
-	if len(importPaths) > 0 {
-		// Insert block after package statement or
-		// possible comment attached to the end of the package statement.
-		pos := file.Package
-		tokFile := fset.File(file.Package)
-		pkgLine := tokFile.Line(file.Package)
-		for _, c := range file.Comments {
-			if tokFile.Line(c.Pos()) > pkgLine {
-				break
-			}
-			pos = c.End()
-		}
-
-		// Construct the import block.
-		impDecl := &ast.GenDecl{
-			Tok:    token.IMPORT,
-			TokPos: pos,
-			Lparen: pos,
-			Rparen: pos,
-		}
-		for _, importPath := range importPaths {
-			impDecl.Specs = append(impDecl.Specs, &ast.ImportSpec{
-				Name: &ast.Ident{
-					Name:    importPath[0],
-					NamePos: pos,
-				},
-				Path: &ast.BasicLit{
-					Kind:     token.STRING,
-					Value:    strconv.Quote(importPath[1]),
-					ValuePos: pos,
-				},
-				EndPos: pos,
-			})
-		}
-		file.Decls = append([]ast.Decl{impDecl}, file.Decls...)
-	}
-
-	var out bytes.Buffer
-	if err = (&printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}).Fprint(&out, fset, file); err != nil {
-		return nil, fmt.Errorf("%v: can not reformat Go source: %v", g.filename, err)
-	}
-	return out.Bytes(), nil
-}
-
-// metaFile returns the contents of the file's metadata file, which is a
-// text formatted string of the google.protobuf.GeneratedCodeInfo.
-func (g *GeneratedFile) metaFile(content []byte) (string, error) {
-	fset := token.NewFileSet()
-	astFile, err := parser.ParseFile(fset, "", content, 0)
-	if err != nil {
-		return "", err
-	}
-	info := &descriptorpb.GeneratedCodeInfo{}
-
-	seenAnnotations := make(map[string]bool)
-	annotate := func(s string, ident *ast.Ident) {
-		seenAnnotations[s] = true
-		for _, loc := range g.annotations[s] {
-			info.Annotation = append(info.Annotation, &descriptorpb.GeneratedCodeInfo_Annotation{
-				SourceFile: proto.String(loc.SourceFile),
-				Path:       loc.Path,
-				Begin:      proto.Int32(int32(fset.Position(ident.Pos()).Offset)),
-				End:        proto.Int32(int32(fset.Position(ident.End()).Offset)),
-			})
-		}
-	}
-	for _, decl := range astFile.Decls {
-		switch decl := decl.(type) {
-		case *ast.GenDecl:
-			for _, spec := range decl.Specs {
-				switch spec := spec.(type) {
-				case *ast.TypeSpec:
-					annotate(spec.Name.Name, spec.Name)
-					switch st := spec.Type.(type) {
-					case *ast.StructType:
-						for _, field := range st.Fields.List {
-							for _, name := range field.Names {
-								annotate(spec.Name.Name+"."+name.Name, name)
-							}
-						}
-					case *ast.InterfaceType:
-						for _, field := range st.Methods.List {
-							for _, name := range field.Names {
-								annotate(spec.Name.Name+"."+name.Name, name)
-							}
-						}
-					}
-				case *ast.ValueSpec:
-					for _, name := range spec.Names {
-						annotate(name.Name, name)
-					}
-				}
-			}
-		case *ast.FuncDecl:
-			if decl.Recv == nil {
-				annotate(decl.Name.Name, decl.Name)
-			} else {
-				recv := decl.Recv.List[0].Type
-				if s, ok := recv.(*ast.StarExpr); ok {
-					recv = s.X
-				}
-				if id, ok := recv.(*ast.Ident); ok {
-					annotate(id.Name+"."+decl.Name.Name, decl.Name)
-				}
-			}
-		}
-	}
-	for a := range g.annotations {
-		if !seenAnnotations[a] {
-			return "", fmt.Errorf("%v: no symbol matching annotation %q", g.filename, a)
-		}
-	}
-
-	b, err := prototext.Marshal(info)
-	if err != nil {
-		return "", err
-	}
-	return string(b), nil
-}
-
-// A GoIdent is a Go identifier, consisting of a name and import path.
-// The name is a single identifier and may not be a dot-qualified selector.
-type GoIdent struct {
-	GoName       string
-	GoImportPath GoImportPath
-}
-
-func (id GoIdent) String() string { return fmt.Sprintf("%q.%v", id.GoImportPath, id.GoName) }
-
-// newGoIdent returns the Go identifier for a descriptor.
-func newGoIdent(f *File, d protoreflect.Descriptor) GoIdent {
-	name := strings.TrimPrefix(string(d.FullName()), string(f.Desc.Package())+".")
-	return GoIdent{
-		GoName:       strs.GoCamelCase(name),
-		GoImportPath: f.GoImportPath,
-	}
-}
-
-// A GoImportPath is the import path of a Go package.
-// For example: "google.golang.org/protobuf/compiler/protogen"
-type GoImportPath string
-
-func (p GoImportPath) String() string { return strconv.Quote(string(p)) }
-
-// Ident returns a GoIdent with s as the GoName and p as the GoImportPath.
-func (p GoImportPath) Ident(s string) GoIdent {
-	return GoIdent{GoName: s, GoImportPath: p}
-}
-
-// A GoPackageName is the name of a Go package. e.g., "protobuf".
-type GoPackageName string
-
-// cleanPackageName converts a string to a valid Go package name.
-func cleanPackageName(name string) GoPackageName {
-	return GoPackageName(strs.GoSanitized(name))
-}
-
-type pathType int
-
-const (
-	pathTypeImport pathType = iota
-	pathTypeSourceRelative
-)
-
-// A Location is a location in a .proto source file.
-//
-// See the google.protobuf.SourceCodeInfo documentation in descriptor.proto
-// for details.
-type Location struct {
-	SourceFile string
-	Path       protoreflect.SourcePath
-}
-
-// appendPath add elements to a Location's path, returning a new Location.
-func (loc Location) appendPath(num protoreflect.FieldNumber, idx int) Location {
-	loc.Path = append(protoreflect.SourcePath(nil), loc.Path...) // make copy
-	loc.Path = append(loc.Path, int32(num), int32(idx))
-	return loc
-}
-
-// CommentSet is a set of leading and trailing comments associated
-// with a .proto descriptor declaration.
-type CommentSet struct {
-	LeadingDetached []Comments
-	Leading         Comments
-	Trailing        Comments
-}
-
-func makeCommentSet(loc protoreflect.SourceLocation) CommentSet {
-	var leadingDetached []Comments
-	for _, s := range loc.LeadingDetachedComments {
-		leadingDetached = append(leadingDetached, Comments(s))
-	}
-	return CommentSet{
-		LeadingDetached: leadingDetached,
-		Leading:         Comments(loc.LeadingComments),
-		Trailing:        Comments(loc.TrailingComments),
-	}
-}
-
-// Comments is a comments string as provided by protoc.
-type Comments string
-
-// String formats the comments by inserting // to the start of each line,
-// ensuring that there is a trailing newline.
-// An empty comment is formatted as an empty string.
-func (c Comments) String() string {
-	if c == "" {
-		return ""
-	}
-	var b []byte
-	for _, line := range strings.Split(strings.TrimSuffix(string(c), "\n"), "\n") {
-		b = append(b, "//"...)
-		b = append(b, line...)
-		b = append(b, "\n"...)
-	}
-	return string(b)
-}

+ 0 - 653
vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go

@@ -1,653 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: kenton@google.com (Kenton Varda)
-//
-// WARNING:  The plugin interface is currently EXPERIMENTAL and is subject to
-//   change.
-//
-// protoc (aka the Protocol Compiler) can be extended via plugins.  A plugin is
-// just a program that reads a CodeGeneratorRequest from stdin and writes a
-// CodeGeneratorResponse to stdout.
-//
-// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead
-// of dealing with the raw protocol defined here.
-//
-// A plugin executable needs only to be placed somewhere in the path.  The
-// plugin should be named "protoc-gen-$NAME", and will then be used when the
-// flag "--${NAME}_out" is passed to protoc.
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: google/protobuf/compiler/plugin.proto
-
-package pluginpb
-
-import (
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-	descriptorpb "google.golang.org/protobuf/types/descriptorpb"
-	reflect "reflect"
-	sync "sync"
-)
-
-// Sync with code_generator.h.
-type CodeGeneratorResponse_Feature int32
-
-const (
-	CodeGeneratorResponse_FEATURE_NONE            CodeGeneratorResponse_Feature = 0
-	CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL CodeGeneratorResponse_Feature = 1
-)
-
-// Enum value maps for CodeGeneratorResponse_Feature.
-var (
-	CodeGeneratorResponse_Feature_name = map[int32]string{
-		0: "FEATURE_NONE",
-		1: "FEATURE_PROTO3_OPTIONAL",
-	}
-	CodeGeneratorResponse_Feature_value = map[string]int32{
-		"FEATURE_NONE":            0,
-		"FEATURE_PROTO3_OPTIONAL": 1,
-	}
-)
-
-func (x CodeGeneratorResponse_Feature) Enum() *CodeGeneratorResponse_Feature {
-	p := new(CodeGeneratorResponse_Feature)
-	*p = x
-	return p
-}
-
-func (x CodeGeneratorResponse_Feature) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (CodeGeneratorResponse_Feature) Descriptor() protoreflect.EnumDescriptor {
-	return file_google_protobuf_compiler_plugin_proto_enumTypes[0].Descriptor()
-}
-
-func (CodeGeneratorResponse_Feature) Type() protoreflect.EnumType {
-	return &file_google_protobuf_compiler_plugin_proto_enumTypes[0]
-}
-
-func (x CodeGeneratorResponse_Feature) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Do not use.
-func (x *CodeGeneratorResponse_Feature) UnmarshalJSON(b []byte) error {
-	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
-	if err != nil {
-		return err
-	}
-	*x = CodeGeneratorResponse_Feature(num)
-	return nil
-}
-
-// Deprecated: Use CodeGeneratorResponse_Feature.Descriptor instead.
-func (CodeGeneratorResponse_Feature) EnumDescriptor() ([]byte, []int) {
-	return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2, 0}
-}
-
-// The version number of protocol compiler.
-type Version struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Major *int32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"`
-	Minor *int32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"`
-	Patch *int32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"`
-	// A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
-	// be empty for mainline stable releases.
-	Suffix *string `protobuf:"bytes,4,opt,name=suffix" json:"suffix,omitempty"`
-}
-
-func (x *Version) Reset() {
-	*x = Version{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Version) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Version) ProtoMessage() {}
-
-func (x *Version) ProtoReflect() protoreflect.Message {
-	mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Version.ProtoReflect.Descriptor instead.
-func (*Version) Descriptor() ([]byte, []int) {
-	return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *Version) GetMajor() int32 {
-	if x != nil && x.Major != nil {
-		return *x.Major
-	}
-	return 0
-}
-
-func (x *Version) GetMinor() int32 {
-	if x != nil && x.Minor != nil {
-		return *x.Minor
-	}
-	return 0
-}
-
-func (x *Version) GetPatch() int32 {
-	if x != nil && x.Patch != nil {
-		return *x.Patch
-	}
-	return 0
-}
-
-func (x *Version) GetSuffix() string {
-	if x != nil && x.Suffix != nil {
-		return *x.Suffix
-	}
-	return ""
-}
-
-// An encoded CodeGeneratorRequest is written to the plugin's stdin.
-type CodeGeneratorRequest struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	// The .proto files that were explicitly listed on the command-line.  The
-	// code generator should generate code only for these files.  Each file's
-	// descriptor will be included in proto_file, below.
-	FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate,json=fileToGenerate" json:"file_to_generate,omitempty"`
-	// The generator parameter passed on the command-line.
-	Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"`
-	// FileDescriptorProtos for all files in files_to_generate and everything
-	// they import.  The files will appear in topological order, so each file
-	// appears before any file that imports it.
-	//
-	// protoc guarantees that all proto_files will be written after
-	// the fields above, even though this is not technically guaranteed by the
-	// protobuf wire format.  This theoretically could allow a plugin to stream
-	// in the FileDescriptorProtos and handle them one by one rather than read
-	// the entire set into memory at once.  However, as of this writing, this
-	// is not similarly optimized on protoc's end -- it will store all fields in
-	// memory at once before sending them to the plugin.
-	//
-	// Type names of fields and extensions in the FileDescriptorProto are always
-	// fully qualified.
-	ProtoFile []*descriptorpb.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file,json=protoFile" json:"proto_file,omitempty"`
-	// The version number of protocol compiler.
-	CompilerVersion *Version `protobuf:"bytes,3,opt,name=compiler_version,json=compilerVersion" json:"compiler_version,omitempty"`
-}
-
-func (x *CodeGeneratorRequest) Reset() {
-	*x = CodeGeneratorRequest{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *CodeGeneratorRequest) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*CodeGeneratorRequest) ProtoMessage() {}
-
-func (x *CodeGeneratorRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use CodeGeneratorRequest.ProtoReflect.Descriptor instead.
-func (*CodeGeneratorRequest) Descriptor() ([]byte, []int) {
-	return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *CodeGeneratorRequest) GetFileToGenerate() []string {
-	if x != nil {
-		return x.FileToGenerate
-	}
-	return nil
-}
-
-func (x *CodeGeneratorRequest) GetParameter() string {
-	if x != nil && x.Parameter != nil {
-		return *x.Parameter
-	}
-	return ""
-}
-
-func (x *CodeGeneratorRequest) GetProtoFile() []*descriptorpb.FileDescriptorProto {
-	if x != nil {
-		return x.ProtoFile
-	}
-	return nil
-}
-
-func (x *CodeGeneratorRequest) GetCompilerVersion() *Version {
-	if x != nil {
-		return x.CompilerVersion
-	}
-	return nil
-}
-
-// The plugin writes an encoded CodeGeneratorResponse to stdout.
-type CodeGeneratorResponse struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	// Error message.  If non-empty, code generation failed.  The plugin process
-	// should exit with status code zero even if it reports an error in this way.
-	//
-	// This should be used to indicate errors in .proto files which prevent the
-	// code generator from generating correct code.  Errors which indicate a
-	// problem in protoc itself -- such as the input CodeGeneratorRequest being
-	// unparseable -- should be reported by writing a message to stderr and
-	// exiting with a non-zero status code.
-	Error *string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"`
-	// A bitmask of supported features that the code generator supports.
-	// This is a bitwise "or" of values from the Feature enum.
-	SupportedFeatures *uint64                       `protobuf:"varint,2,opt,name=supported_features,json=supportedFeatures" json:"supported_features,omitempty"`
-	File              []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"`
-}
-
-func (x *CodeGeneratorResponse) Reset() {
-	*x = CodeGeneratorResponse{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *CodeGeneratorResponse) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*CodeGeneratorResponse) ProtoMessage() {}
-
-func (x *CodeGeneratorResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use CodeGeneratorResponse.ProtoReflect.Descriptor instead.
-func (*CodeGeneratorResponse) Descriptor() ([]byte, []int) {
-	return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *CodeGeneratorResponse) GetError() string {
-	if x != nil && x.Error != nil {
-		return *x.Error
-	}
-	return ""
-}
-
-func (x *CodeGeneratorResponse) GetSupportedFeatures() uint64 {
-	if x != nil && x.SupportedFeatures != nil {
-		return *x.SupportedFeatures
-	}
-	return 0
-}
-
-func (x *CodeGeneratorResponse) GetFile() []*CodeGeneratorResponse_File {
-	if x != nil {
-		return x.File
-	}
-	return nil
-}
-
-// Represents a single generated file.
-type CodeGeneratorResponse_File struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	// The file name, relative to the output directory.  The name must not
-	// contain "." or ".." components and must be relative, not be absolute (so,
-	// the file cannot lie outside the output directory).  "/" must be used as
-	// the path separator, not "\".
-	//
-	// If the name is omitted, the content will be appended to the previous
-	// file.  This allows the generator to break large files into small chunks,
-	// and allows the generated text to be streamed back to protoc so that large
-	// files need not reside completely in memory at one time.  Note that as of
-	// this writing protoc does not optimize for this -- it will read the entire
-	// CodeGeneratorResponse before writing files to disk.
-	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	// If non-empty, indicates that the named file should already exist, and the
-	// content here is to be inserted into that file at a defined insertion
-	// point.  This feature allows a code generator to extend the output
-	// produced by another code generator.  The original generator may provide
-	// insertion points by placing special annotations in the file that look
-	// like:
-	//   @@protoc_insertion_point(NAME)
-	// The annotation can have arbitrary text before and after it on the line,
-	// which allows it to be placed in a comment.  NAME should be replaced with
-	// an identifier naming the point -- this is what other generators will use
-	// as the insertion_point.  Code inserted at this point will be placed
-	// immediately above the line containing the insertion point (thus multiple
-	// insertions to the same point will come out in the order they were added).
-	// The double-@ is intended to make it unlikely that the generated code
-	// could contain things that look like insertion points by accident.
-	//
-	// For example, the C++ code generator places the following line in the
-	// .pb.h files that it generates:
-	//   // @@protoc_insertion_point(namespace_scope)
-	// This line appears within the scope of the file's package namespace, but
-	// outside of any particular class.  Another plugin can then specify the
-	// insertion_point "namespace_scope" to generate additional classes or
-	// other declarations that should be placed in this scope.
-	//
-	// Note that if the line containing the insertion point begins with
-	// whitespace, the same whitespace will be added to every line of the
-	// inserted text.  This is useful for languages like Python, where
-	// indentation matters.  In these languages, the insertion point comment
-	// should be indented the same amount as any inserted code will need to be
-	// in order to work correctly in that context.
-	//
-	// The code generator that generates the initial file and the one which
-	// inserts into it must both run as part of a single invocation of protoc.
-	// Code generators are executed in the order in which they appear on the
-	// command line.
-	//
-	// If |insertion_point| is present, |name| must also be present.
-	InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point,json=insertionPoint" json:"insertion_point,omitempty"`
-	// The file contents.
-	Content *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"`
-	// Information describing the file content being inserted. If an insertion
-	// point is used, this information will be appropriately offset and inserted
-	// into the code generation metadata for the generated files.
-	GeneratedCodeInfo *descriptorpb.GeneratedCodeInfo `protobuf:"bytes,16,opt,name=generated_code_info,json=generatedCodeInfo" json:"generated_code_info,omitempty"`
-}
-
-func (x *CodeGeneratorResponse_File) Reset() {
-	*x = CodeGeneratorResponse_File{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *CodeGeneratorResponse_File) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*CodeGeneratorResponse_File) ProtoMessage() {}
-
-func (x *CodeGeneratorResponse_File) ProtoReflect() protoreflect.Message {
-	mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use CodeGeneratorResponse_File.ProtoReflect.Descriptor instead.
-func (*CodeGeneratorResponse_File) Descriptor() ([]byte, []int) {
-	return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2, 0}
-}
-
-func (x *CodeGeneratorResponse_File) GetName() string {
-	if x != nil && x.Name != nil {
-		return *x.Name
-	}
-	return ""
-}
-
-func (x *CodeGeneratorResponse_File) GetInsertionPoint() string {
-	if x != nil && x.InsertionPoint != nil {
-		return *x.InsertionPoint
-	}
-	return ""
-}
-
-func (x *CodeGeneratorResponse_File) GetContent() string {
-	if x != nil && x.Content != nil {
-		return *x.Content
-	}
-	return ""
-}
-
-func (x *CodeGeneratorResponse_File) GetGeneratedCodeInfo() *descriptorpb.GeneratedCodeInfo {
-	if x != nil {
-		return x.GeneratedCodeInfo
-	}
-	return nil
-}
-
-var File_google_protobuf_compiler_plugin_proto protoreflect.FileDescriptor
-
-var file_google_protobuf_compiler_plugin_proto_rawDesc = []byte{
-	0x0a, 0x25, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
-	0x66, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69,
-	0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
-	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,
-	0x72, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
-	0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14,
-	0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d,
-	0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61,
-	0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68,
-	0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x22, 0xf1, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x64,
-	0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x67, 0x65, 0x6e,
-	0x65, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69, 0x6c,
-	0x65, 0x54, 0x6f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70,
-	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
-	0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x0a, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e,
-	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
-	0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72,
-	0x6f, 0x74, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x4c,
-	0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69,
-	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69,
-	0x6c, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x63, 0x6f, 0x6d,
-	0x70, 0x69, 0x6c, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x03, 0x0a,
-	0x15, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2d, 0x0a, 0x12,
-	0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72,
-	0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,
-	0x74, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x04, 0x66,
-	0x69, 0x6c, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
-	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70,
-	0x69, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
-	0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52,
-	0x04, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0xb1, 0x01, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12,
-	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
-	0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
-	0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x73,
-	0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f,
-	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x13, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
-	0x65, 0x64, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x10, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f,
-	0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,
-	0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x38, 0x0a, 0x07, 0x46, 0x65, 0x61,
-	0x74, 0x75, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f,
-	0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52,
-	0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x33, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41,
-	0x4c, 0x10, 0x01, 0x42, 0x57, 0x0a, 0x1c, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
-	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69,
-	0x6c, 0x65, 0x72, 0x42, 0x0c, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f,
-	0x73, 0x5a, 0x29, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67,
-	0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79,
-	0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x70, 0x62,
-}
-
-var (
-	file_google_protobuf_compiler_plugin_proto_rawDescOnce sync.Once
-	file_google_protobuf_compiler_plugin_proto_rawDescData = file_google_protobuf_compiler_plugin_proto_rawDesc
-)
-
-func file_google_protobuf_compiler_plugin_proto_rawDescGZIP() []byte {
-	file_google_protobuf_compiler_plugin_proto_rawDescOnce.Do(func() {
-		file_google_protobuf_compiler_plugin_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_compiler_plugin_proto_rawDescData)
-	})
-	return file_google_protobuf_compiler_plugin_proto_rawDescData
-}
-
-var file_google_protobuf_compiler_plugin_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_google_protobuf_compiler_plugin_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
-var file_google_protobuf_compiler_plugin_proto_goTypes = []interface{}{
-	(CodeGeneratorResponse_Feature)(0),       // 0: google.protobuf.compiler.CodeGeneratorResponse.Feature
-	(*Version)(nil),                          // 1: google.protobuf.compiler.Version
-	(*CodeGeneratorRequest)(nil),             // 2: google.protobuf.compiler.CodeGeneratorRequest
-	(*CodeGeneratorResponse)(nil),            // 3: google.protobuf.compiler.CodeGeneratorResponse
-	(*CodeGeneratorResponse_File)(nil),       // 4: google.protobuf.compiler.CodeGeneratorResponse.File
-	(*descriptorpb.FileDescriptorProto)(nil), // 5: google.protobuf.FileDescriptorProto
-	(*descriptorpb.GeneratedCodeInfo)(nil),   // 6: google.protobuf.GeneratedCodeInfo
-}
-var file_google_protobuf_compiler_plugin_proto_depIdxs = []int32{
-	5, // 0: google.protobuf.compiler.CodeGeneratorRequest.proto_file:type_name -> google.protobuf.FileDescriptorProto
-	1, // 1: google.protobuf.compiler.CodeGeneratorRequest.compiler_version:type_name -> google.protobuf.compiler.Version
-	4, // 2: google.protobuf.compiler.CodeGeneratorResponse.file:type_name -> google.protobuf.compiler.CodeGeneratorResponse.File
-	6, // 3: google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info:type_name -> google.protobuf.GeneratedCodeInfo
-	4, // [4:4] is the sub-list for method output_type
-	4, // [4:4] is the sub-list for method input_type
-	4, // [4:4] is the sub-list for extension type_name
-	4, // [4:4] is the sub-list for extension extendee
-	0, // [0:4] is the sub-list for field type_name
-}
-
-func init() { file_google_protobuf_compiler_plugin_proto_init() }
-func file_google_protobuf_compiler_plugin_proto_init() {
-	if File_google_protobuf_compiler_plugin_proto != nil {
-		return
-	}
-	if !protoimpl.UnsafeEnabled {
-		file_google_protobuf_compiler_plugin_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Version); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_protobuf_compiler_plugin_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CodeGeneratorRequest); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_protobuf_compiler_plugin_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CodeGeneratorResponse); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_google_protobuf_compiler_plugin_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CodeGeneratorResponse_File); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
-	type x struct{}
-	out := protoimpl.TypeBuilder{
-		File: protoimpl.DescBuilder{
-			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_google_protobuf_compiler_plugin_proto_rawDesc,
-			NumEnums:      1,
-			NumMessages:   4,
-			NumExtensions: 0,
-			NumServices:   0,
-		},
-		GoTypes:           file_google_protobuf_compiler_plugin_proto_goTypes,
-		DependencyIndexes: file_google_protobuf_compiler_plugin_proto_depIdxs,
-		EnumInfos:         file_google_protobuf_compiler_plugin_proto_enumTypes,
-		MessageInfos:      file_google_protobuf_compiler_plugin_proto_msgTypes,
-	}.Build()
-	File_google_protobuf_compiler_plugin_proto = out.File
-	file_google_protobuf_compiler_plugin_proto_rawDesc = nil
-	file_google_protobuf_compiler_plugin_proto_goTypes = nil
-	file_google_protobuf_compiler_plugin_proto_depIdxs = nil
-}

+ 2 - 35
vendor/modules.txt

@@ -1,4 +1,4 @@
-# cloud.google.com/go v0.81.0
+# cloud.google.com/go v0.92.0
 ## explicit; go 1.11
 cloud.google.com/go
 cloud.google.com/go/compute/metadata
@@ -400,10 +400,8 @@ github.com/golang/gddo/httputil/header
 github.com/golang/groupcache/lru
 # github.com/golang/protobuf v1.5.2
 ## explicit; go 1.9
-github.com/golang/protobuf/internal/gengogrpc
 github.com/golang/protobuf/jsonpb
 github.com/golang/protobuf/proto
-github.com/golang/protobuf/protoc-gen-go
 github.com/golang/protobuf/protoc-gen-go/descriptor
 github.com/golang/protobuf/ptypes
 github.com/golang/protobuf/ptypes/any
@@ -493,11 +491,6 @@ github.com/ishidawataru/sctp
 # github.com/jmespath/go-jmespath v0.3.0
 ## explicit; go 1.14
 github.com/jmespath/go-jmespath
-# github.com/jstemmer/go-junit-report v0.9.1
-## explicit; go 1.2
-github.com/jstemmer/go-junit-report
-github.com/jstemmer/go-junit-report/formatter
-github.com/jstemmer/go-junit-report/parser
 # github.com/klauspost/compress v1.14.3
 ## explicit; go 1.15
 github.com/klauspost/compress
@@ -820,14 +813,6 @@ golang.org/x/crypto/pkcs12/internal/rc2
 golang.org/x/crypto/salsa20/salsa
 golang.org/x/crypto/ssh
 golang.org/x/crypto/ssh/internal/bcrypt_pbkdf
-# golang.org/x/lint v0.0.0-20210508222113-6edffad5e616
-## explicit; go 1.11
-golang.org/x/lint
-golang.org/x/lint/golint
-# golang.org/x/mod v0.4.2
-## explicit; go 1.12
-golang.org/x/mod/module
-golang.org/x/mod/semver
 # golang.org/x/net v0.0.0-20211216030914-fe4d6282115f
 ## explicit; go 1.17
 golang.org/x/net/bpf
@@ -882,26 +867,11 @@ golang.org/x/text/unicode/norm
 # golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11
 ## explicit
 golang.org/x/time/rate
-# golang.org/x/tools v0.1.5
-## explicit; go 1.17
-golang.org/x/tools/cmd/goimports
-golang.org/x/tools/go/ast/astutil
-golang.org/x/tools/go/gcexportdata
-golang.org/x/tools/go/internal/gcimporter
-golang.org/x/tools/internal/event
-golang.org/x/tools/internal/event/core
-golang.org/x/tools/internal/event/keys
-golang.org/x/tools/internal/event/label
-golang.org/x/tools/internal/fastwalk
-golang.org/x/tools/internal/gocommand
-golang.org/x/tools/internal/gopathwalk
-golang.org/x/tools/internal/imports
-golang.org/x/tools/internal/typeparams
 # golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
 ## explicit; go 1.11
 golang.org/x/xerrors
 golang.org/x/xerrors/internal
-# google.golang.org/api v0.46.0
+# google.golang.org/api v0.54.0
 ## explicit; go 1.11
 google.golang.org/api/internal
 google.golang.org/api/internal/impersonate
@@ -1000,8 +970,6 @@ google.golang.org/grpc/status
 google.golang.org/grpc/tap
 # google.golang.org/protobuf v1.27.1
 ## explicit; go 1.9
-google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo
-google.golang.org/protobuf/compiler/protogen
 google.golang.org/protobuf/encoding/protojson
 google.golang.org/protobuf/encoding/prototext
 google.golang.org/protobuf/encoding/protowire
@@ -1038,7 +1006,6 @@ google.golang.org/protobuf/types/known/fieldmaskpb
 google.golang.org/protobuf/types/known/structpb
 google.golang.org/protobuf/types/known/timestamppb
 google.golang.org/protobuf/types/known/wrapperspb
-google.golang.org/protobuf/types/pluginpb
 # gotest.tools/v3 v3.1.0
 ## explicit; go 1.11
 gotest.tools/v3/assert