Repository: go-swagger/go-swagger
Pull request #2313 (2020-06-13 21:15:50)

update to errors that carry the value
Signed-off-by: Ivan Porto Carrero <ivan@flanders.co.nz>


Patch:
diff --git a/examples/authentication/restapi/operations/auth_sample_api.go b/examples/authentication/restapi/operations/auth_sample_api.go
index f08b3f65..911f3619 100644
--- a/examples/authentication/restapi/operations/auth_sample_api.go
+++ b/examples/authentication/restapi/operations/auth_sample_api.go
@@ -313,3 +313,15 @@ func (o *AuthSampleAPI) RegisterConsumer(mediaType string, consumer runtime.Cons
 func (o *AuthSampleAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *AuthSampleAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/composed-auth/restapi/operations/add_order_parameters.go b/examples/composed-auth/restapi/operations/add_order_parameters.go
index df36d91c..002b4e33 100644
--- a/examples/composed-auth/restapi/operations/add_order_parameters.go
+++ b/examples/composed-auth/restapi/operations/add_order_parameters.go
@@ -53,7 +53,7 @@ func (o *AddOrderParams) BindRequest(r *http.Request, route *middleware.MatchedR
 		var body models.Order
 		if err := route.Consumer.Consume(r.Body, &body); err != nil {
 			if err == io.EOF {
-				res = append(res, errors.Required("order", "body"))
+				res = append(res, errors.Required("order", "body", ""))
 			} else {
 				res = append(res, errors.NewParseError("order", "body", "", err))
 			}
@@ -68,7 +68,7 @@ func (o *AddOrderParams) BindRequest(r *http.Request, route *middleware.MatchedR
 			}
 		}
 	} else {
-		res = append(res, errors.Required("order", "body"))
+		res = append(res, errors.Required("order", "body", ""))
 	}
 	if len(res) > 0 {
 		return errors.CompositeValidationError(res...)
diff --git a/examples/composed-auth/restapi/operations/multi_auth_example_api.go b/examples/composed-auth/restapi/operations/multi_auth_example_api.go
index 46a920d5..01feea03 100644
--- a/examples/composed-auth/restapi/operations/multi_auth_example_api.go
+++ b/examples/composed-auth/restapi/operations/multi_auth_example_api.go
@@ -422,3 +422,15 @@ func (o *MultiAuthExampleAPI) RegisterConsumer(mediaType string, consumer runtim
 func (o *MultiAuthExampleAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *MultiAuthExampleAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/contributed-templates/stratoscale/restapi/configure_petstore.go b/examples/contributed-templates/stratoscale/restapi/configure_petstore.go
index c86d8747..6f30769d 100644
--- a/examples/contributed-templates/stratoscale/restapi/configure_petstore.go
+++ b/examples/contributed-templates/stratoscale/restapi/configure_petstore.go
@@ -24,25 +24,41 @@ const AuthKey contextKey = "Auth"
 
 //go:generate mockery -name PetAPI -inpkg
 
-// PetAPI
+/* PetAPI  */
 type PetAPI interface {
+	/* PetCreate Add a new pet to the store */
 	PetCreate(ctx context.Context, params pet.PetCreateParams) middleware.Responder
+
+	/* PetDelete Deletes a pet */
 	PetDelete(ctx context.Context, params pet.PetDeleteParams) middleware.Responder
+
+	/* PetGet Get pet by it's ID */
 	PetGet(ctx context.Context, params pet.PetGetParams) middleware.Responder
+
+	/* PetList List pets */
 	PetList(ctx context.Context, params pet.PetListParams) middleware.Responder
+
+	/* PetUpdate Update an existing pet */
 	PetUpdate(ctx context.Context, params pet.PetUpdateParams) middleware.Responder
+
+	/* PetUploadImage uploads an image */
 	PetUploadImage(ctx context.Context, params pet.PetUploadImageParams) middleware.Responder
 }
 
 //go:generate mockery -name StoreAPI -inpkg
 
-// StoreAPI
+/* StoreAPI  */
 type StoreAPI interface {
+	/* InventoryGet Returns pet inventories by status */
 	InventoryGet(ctx context.Context, params store.InventoryGetParams) middleware.Responder
+
+	/* OrderCreate Place an order for a pet */
 	OrderCreate(ctx context.Context, params store.OrderCreateParams) middleware.Responder
-	// OrderDelete is For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors
+
+	/* OrderDelete Delete purchase order by ID */
 	OrderDelete(ctx context.Context, params store.OrderDeleteParams) middleware.Responder
-	// OrderGet is For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions
+
+	/* OrderGet Find purchase order by ID */
 	OrderGet(ctx context.Context, params store.OrderGetParams) middleware.Responder
 }
 
diff --git a/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_create_parameters.go b/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_create_parameters.go
index 845ec9d5..32ce25c2 100644
--- a/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_create_parameters.go
+++ b/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_create_parameters.go
@@ -53,7 +53,7 @@ func (o *PetCreateParams) BindRequest(r *http.Request, route *middleware.Matched
 		var body models.Pet
 		if err := route.Consumer.Consume(r.Body, &body); err != nil {
 			if err == io.EOF {
-				res = append(res, errors.Required("body", "body"))
+				res = append(res, errors.Required("body", "body", ""))
 			} else {
 				res = append(res, errors.NewParseError("body", "body", "", err))
 			}
@@ -68,7 +68,7 @@ func (o *PetCreateParams) BindRequest(r *http.Request, route *middleware.Matched
 			}
 		}
 	} else {
-		res = append(res, errors.Required("body", "body"))
+		res = append(res, errors.Required("body", "body", ""))
 	}
 	if len(res) > 0 {
 		return errors.CompositeValidationError(res...)
diff --git a/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_list_parameters.go b/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_list_parameters.go
index d90daf6b..3e1869b6 100644
--- a/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_list_parameters.go
+++ b/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_list_parameters.go
@@ -67,14 +67,14 @@ func (o *PetListParams) BindRequest(r *http.Request, route *middleware.MatchedRo
 // Arrays are parsed according to CollectionFormat: "multi" (defaults to "csv" when empty).
 func (o *PetListParams) bindStatus(rawData []string, hasKey bool, formats strfmt.Registry) error {
 	if !hasKey {
-		return errors.Required("status", "query")
+		return errors.Required("status", "query", rawData)
 	}
 
 	// CollectionFormat: multi
 	statusIC := rawData
 
 	if len(statusIC) == 0 {
-		return errors.Required("status", "query")
+		return errors.Required("status", "query", statusIC)
 	}
 
 	var statusIR []string
diff --git a/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_update_parameters.go b/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_update_parameters.go
index 3e5d4922..be660e4c 100644
--- a/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_update_parameters.go
+++ b/examples/contributed-templates/stratoscale/restapi/operations/pet/pet_update_parameters.go
@@ -53,7 +53,7 @@ func (o *PetUpdateParams) BindRequest(r *http.Request, route *middleware.Matched
 		var body models.Pet
 		if err := route.Consumer.Consume(r.Body, &body); err != nil {
 			if err == io.EOF {
-				res = append(res, errors.Required("body", "body"))
+				res = append(res, errors.Required("body", "body", ""))
 			} else {
 				res = append(res, errors.NewParseError("body", "body", "", err))
 			}
@@ -68,7 +68,7 @@ func (o *PetUpdateParams) BindRequest(r *http.Request, route *middleware.Matched
 			}
 		}
 	} else {
-		res = append(res, errors.Required("body", "body"))
+		res = append(res, errors.Required("body", "body", ""))
 	}
 	if len(res) > 0 {
 		return errors.CompositeValidationError(res...)
diff --git a/examples/contributed-templates/stratoscale/restapi/operations/petstore_api.go b/examples/contributed-templates/stratoscale/restapi/operations/petstore_api.go
index e7fe3bc6..6f78115c 100644
--- a/examples/contributed-templates/stratoscale/restapi/operations/petstore_api.go
+++ b/examples/contributed-templates/stratoscale/restapi/operations/petstore_api.go
@@ -407,3 +407,15 @@ func (o *PetstoreAPI) RegisterConsumer(mediaType string, consumer runtime.Consum
 func (o *PetstoreAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *PetstoreAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/contributed-templates/stratoscale/restapi/operations/store/order_create_parameters.go b/examples/contributed-templates/stratoscale/restapi/operations/store/order_create_parameters.go
index c740be2f..5dc66d43 100644
--- a/examples/contributed-templates/stratoscale/restapi/operations/store/order_create_parameters.go
+++ b/examples/contributed-templates/stratoscale/restapi/operations/store/order_create_parameters.go
@@ -53,7 +53,7 @@ func (o *OrderCreateParams) BindRequest(r *http.Request, route *middleware.Match
 		var body models.Order
 		if err := route.Consumer.Consume(r.Body, &body); err != nil {
 			if err == io.EOF {
-				res = append(res, errors.Required("body", "body"))
+				res = append(res, errors.Required("body", "body", ""))
 			} else {
 				res = append(res, errors.NewParseError("body", "body", "", err))
 			}
@@ -68,7 +68,7 @@ func (o *OrderCreateParams) BindRequest(r *http.Request, route *middleware.Match
 			}
 		}
 	} else {
-		res = append(res, errors.Required("body", "body"))
+		res = append(res, errors.Required("body", "body", ""))
 	}
 	if len(res) > 0 {
 		return errors.CompositeValidationError(res...)
diff --git a/examples/contributed-templates/stratoscale/restapi/server.go b/examples/contributed-templates/stratoscale/restapi/server.go
index 25454121..77b66a09 100644
--- a/examples/contributed-templates/stratoscale/restapi/server.go
+++ b/examples/contributed-templates/stratoscale/restapi/server.go
@@ -2,4 +2,4 @@
 
 package restapi
 
-// this file is intentionally empty. otherwise go-swagger will generate a server witch we don't want
+// this file is intentionally empty. Otherwise go-swagger will generate a server which we don't want
diff --git a/examples/generated/restapi/operations/pet/delete_pet_parameters.go b/examples/generated/restapi/operations/pet/delete_pet_parameters.go
index 071ca6e8..4146f17b 100644
--- a/examples/generated/restapi/operations/pet/delete_pet_parameters.go
+++ b/examples/generated/restapi/operations/pet/delete_pet_parameters.go
@@ -70,7 +70,7 @@ func (o *DeletePetParams) BindRequest(r *http.Request, route *middleware.Matched
 // bindAPIKey binds and validates parameter APIKey from header.
 func (o *DeletePetParams) bindAPIKey(rawData []string, hasKey bool, formats strfmt.Registry) error {
 	if !hasKey {
-		return errors.Required("api_key", "header")
+		return errors.Required("api_key", "header", rawData)
 	}
 	var raw string
 	if len(rawData) > 0 {
diff --git a/examples/generated/restapi/operations/pet/update_pet_with_form_parameters.go b/examples/generated/restapi/operations/pet/update_pet_with_form_parameters.go
index fb0c57a3..f7f09b4f 100644
--- a/examples/generated/restapi/operations/pet/update_pet_with_form_parameters.go
+++ b/examples/generated/restapi/operations/pet/update_pet_with_form_parameters.go
@@ -90,7 +90,7 @@ func (o *UpdatePetWithFormParams) BindRequest(r *http.Request, route *middleware
 // bindName binds and validates parameter Name from formData.
 func (o *UpdatePetWithFormParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
 	if !hasKey {
-		return errors.Required("name", "formData")
+		return errors.Required("name", "formData", rawData)
 	}
 	var raw string
 	if len(rawData) > 0 {
@@ -126,7 +126,7 @@ func (o *UpdatePetWithFormParams) bindPetID(rawData []string, hasKey bool, forma
 // bindStatus binds and validates parameter Status from formData.
 func (o *UpdatePetWithFormParams) bindStatus(rawData []string, hasKey bool, formats strfmt.Registry) error {
 	if !hasKey {
-		return errors.Required("status", "formData")
+		return errors.Required("status", "formData", rawData)
 	}
 	var raw string
 	if len(rawData) > 0 {
diff --git a/examples/generated/restapi/operations/petstore_api.go b/examples/generated/restapi/operations/petstore_api.go
index 85ffae80..9a1144f8 100644
--- a/examples/generated/restapi/operations/petstore_api.go
+++ b/examples/generated/restapi/operations/petstore_api.go
@@ -549,3 +549,15 @@ func (o *PetstoreAPI) RegisterConsumer(mediaType string, consumer runtime.Consum
 func (o *PetstoreAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *PetstoreAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/oauth2/restapi/operations/oauth_sample_api.go b/examples/oauth2/restapi/operations/oauth_sample_api.go
index 18cb305e..053d0212 100644
--- a/examples/oauth2/restapi/operations/oauth_sample_api.go
+++ b/examples/oauth2/restapi/operations/oauth_sample_api.go
@@ -335,3 +335,15 @@ func (o *OauthSampleAPI) RegisterConsumer(mediaType string, consumer runtime.Con
 func (o *OauthSampleAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *OauthSampleAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/stream-server/restapi/operations/countdown_api.go b/examples/stream-server/restapi/operations/countdown_api.go
index 78fdf8ff..ec7a6ce2 100644
--- a/examples/stream-server/restapi/operations/countdown_api.go
+++ b/examples/stream-server/restapi/operations/countdown_api.go
@@ -269,3 +269,15 @@ func (o *CountdownAPI) RegisterConsumer(mediaType string, consumer runtime.Consu
 func (o *CountdownAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *CountdownAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/task-tracker/restapi/operations/task_tracker_api.go b/examples/task-tracker/restapi/operations/task_tracker_api.go
index 301a62b0..85c1cc9f 100644
--- a/examples/task-tracker/restapi/operations/task_tracker_api.go
+++ b/examples/task-tracker/restapi/operations/task_tracker_api.go
@@ -412,3 +412,15 @@ func (o *TaskTrackerAPI) RegisterConsumer(mediaType string, consumer runtime.Con
 func (o *TaskTrackerAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *TaskTrackerAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/task-tracker/restapi/operations/tasks/create_task_parameters.go b/examples/task-tracker/restapi/operations/tasks/create_task_parameters.go
index b332164e..5211c733 100644
--- a/examples/task-tracker/restapi/operations/tasks/create_task_parameters.go
+++ b/examples/task-tracker/restapi/operations/tasks/create_task_parameters.go
@@ -53,7 +53,7 @@ func (o *CreateTaskParams) BindRequest(r *http.Request, route *middleware.Matche
 		var body models.Task
 		if err := route.Consumer.Consume(r.Body, &body); err != nil {
 			if err == io.EOF {
-				res = append(res, errors.Required("body", "body"))
+				res = append(res, errors.Required("body", "body", ""))
 			} else {
 				res = append(res, errors.NewParseError("body", "body", "", err))
 			}
@@ -68,7 +68,7 @@ func (o *CreateTaskParams) BindRequest(r *http.Request, route *middleware.Matche
 			}
 		}
 	} else {
-		res = append(res, errors.Required("body", "body"))
+		res = append(res, errors.Required("body", "body", ""))
 	}
 	if len(res) > 0 {
 		return errors.CompositeValidationError(res...)
diff --git a/examples/task-tracker/restapi/operations/tasks/update_task_parameters.go b/examples/task-tracker/restapi/operations/tasks/update_task_parameters.go
index 76415819..1b2edb93 100644
--- a/examples/task-tracker/restapi/operations/tasks/update_task_parameters.go
+++ b/examples/task-tracker/restapi/operations/tasks/update_task_parameters.go
@@ -60,7 +60,7 @@ func (o *UpdateTaskParams) BindRequest(r *http.Request, route *middleware.Matche
 		var body models.Task
 		if err := route.Consumer.Consume(r.Body, &body); err != nil {
 			if err == io.EOF {
-				res = append(res, errors.Required("body", "body"))
+				res = append(res, errors.Required("body", "body", ""))
 			} else {
 				res = append(res, errors.NewParseError("body", "body", "", err))
 			}
@@ -75,7 +75,7 @@ func (o *UpdateTaskParams) BindRequest(r *http.Request, route *middleware.Matche
 			}
 		}
 	} else {
-		res = append(res, errors.Required("body", "body"))
+		res = append(res, errors.Required("body", "body", ""))
 	}
 	rID, rhkID, _ := route.Params.GetOK("id")
 	if err := o.bindID(rID, rhkID, route.Formats); err != nil {
diff --git a/examples/todo-list/restapi/operations/todo_list_api.go b/examples/todo-list/restapi/operations/todo_list_api.go
index 0321a647..bfb48664 100644
--- a/examples/todo-list/restapi/operations/todo_list_api.go
+++ b/examples/todo-list/restapi/operations/todo_list_api.go
@@ -337,3 +337,15 @@ func (o *TodoListAPI) RegisterConsumer(mediaType string, consumer runtime.Consum
 func (o *TodoListAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *TodoListAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/todo-list/restapi/operations/todos/find_parameters.go b/examples/todo-list/restapi/operations/todos/find_parameters.go
index a2a1828e..2e741def 100644
--- a/examples/todo-list/restapi/operations/todos/find_parameters.go
+++ b/examples/todo-list/restapi/operations/todos/find_parameters.go
@@ -92,7 +92,7 @@ func (o *FindParams) BindRequest(r *http.Request, route *middleware.MatchedRoute
 // bindXRateLimit binds and validates parameter XRateLimit from header.
 func (o *FindParams) bindXRateLimit(rawData []string, hasKey bool, formats strfmt.Registry) error {
 	if !hasKey {
-		return errors.Required("X-Rate-Limit", "header")
+		return errors.Required("X-Rate-Limit", "header", rawData)
 	}
 	var raw string
 	if len(rawData) > 0 {
@@ -117,7 +117,7 @@ func (o *FindParams) bindXRateLimit(rawData []string, hasKey bool, formats strfm
 // bindLimit binds and validates parameter Limit from formData.
 func (o *FindParams) bindLimit(rawData []string, hasKey bool, formats strfmt.Registry) error {
 	if !hasKey {
-		return errors.Required("limit", "formData")
+		return errors.Required("limit", "formData", rawData)
 	}
 	var raw string
 	if len(rawData) > 0 {
@@ -144,7 +144,7 @@ func (o *FindParams) bindLimit(rawData []string, hasKey bool, formats strfmt.Reg
 // Arrays are parsed according to CollectionFormat: "multi" (defaults to "csv" when empty).
 func (o *FindParams) bindTags(rawData []string, hasKey bool, formats strfmt.Registry) error {
 	if !hasKey {
-		return errors.Required("tags", "formData")
+		return errors.Required("tags", "formData", rawData)
 	}
 
 	// CollectionFormat: multi
diff --git a/examples/tutorials/custom-server/gen/restapi/operations/greeter_api.go b/examples/tutorials/custom-server/gen/restapi/operations/greeter_api.go
index 62eea7e0..34207533 100644
--- a/examples/tutorials/custom-server/gen/restapi/operations/greeter_api.go
+++ b/examples/tutorials/custom-server/gen/restapi/operations/greeter_api.go
@@ -269,3 +269,15 @@ func (o *GreeterAPI) RegisterConsumer(mediaType string, consumer runtime.Consume
 func (o *GreeterAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *GreeterAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/tutorials/todo-list/server-1/restapi/operations/todo_list_api.go b/examples/tutorials/todo-list/server-1/restapi/operations/todo_list_api.go
index e9581c61..af3c38c9 100644
--- a/examples/tutorials/todo-list/server-1/restapi/operations/todo_list_api.go
+++ b/examples/tutorials/todo-list/server-1/restapi/operations/todo_list_api.go
@@ -271,3 +271,15 @@ func (o *TodoListAPI) RegisterConsumer(mediaType string, consumer runtime.Consum
 func (o *TodoListAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *TodoListAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/tutorials/todo-list/server-2/restapi/operations/todo_list_api.go b/examples/tutorials/todo-list/server-2/restapi/operations/todo_list_api.go
index bc63c1d5..68d68b76 100644
--- a/examples/tutorials/todo-list/server-2/restapi/operations/todo_list_api.go
+++ b/examples/tutorials/todo-list/server-2/restapi/operations/todo_list_api.go
@@ -307,3 +307,15 @@ func (o *TodoListAPI) RegisterConsumer(mediaType string, consumer runtime.Consum
 func (o *TodoListAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *TodoListAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/examples/tutorials/todo-list/server-complete/restapi/operations/todo_list_api.go b/examples/tutorials/todo-list/server-complete/restapi/operations/todo_list_api.go
index 3b53bde0..9e2587bc 100644
--- a/examples/tutorials/todo-list/server-complete/restapi/operations/todo_list_api.go
+++ b/examples/tutorials/todo-list/server-complete/restapi/operations/todo_list_api.go
@@ -307,3 +307,15 @@ func (o *TodoListAPI) RegisterConsumer(mediaType string, consumer runtime.Consum
 func (o *TodoListAPI) RegisterProducer(mediaType string, producer runtime.Producer) {
 	o.customProducers[mediaType] = producer
 }
+
+// AddMiddlewareFor adds a http middleware to existing handler
+func (o *TodoListAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) {
+	um := strings.ToUpper(method)
+	if path == "/" {
+		path = ""
+	}
+	o.Init()
+	if h, ok := o.handlers[um][path]; ok {
+		o.handlers[method][path] = builder(h)
+	}
+}
diff --git a/generator/bindata.go b/generator/bindata.go
index 21263854..89461f8d 100644
--- a/generator/bindata.go
+++ b/generator/bindata.go
@@ -30,7 +30,7 @@
 // templates/server/doc.gotmpl (1.52kB)
 // templates/server/main.gotmpl (5.965kB)
 // templates/server/operation.gotmpl (3.64kB)
-// templates/server/parameter.gotmpl (28.525kB)
+// templates/server/parameter.gotmpl (28.716kB)
 // templates/server/responses.gotmpl (11.271kB)
 // templates/server/server.gotmpl (23.049kB)
 // templates/server/urlbuilder.gotmpl (7.641kB)
@@ -58,7 +58,7 @@ import (
 func bindataRead(data []byte, name string) ([]byte, error) {
 	gz, err := gzip.NewReader(bytes.NewBuffer(data))
 	if err != nil {
-		return nil, fmt.Errorf("read %q: %v", name, err)
+		return nil, fmt.Errorf("read %q: %w", name, err)
 	}
 
 	var buf bytes.Buffer
@@ -66,7 +66,7 @@ func bindataRead(data []byte, name string) ([]byte, error) {
 	clErr := gz.Close()
 
 	if err != nil {
-		return nil, fmt.Errorf("read %q: %v", name, err)
+		return nil, fmt.Errorf("read %q: %w", name, err)
 	}
 	if clErr != nil {
 		return nil, err
@@ -707,7 +707,7 @@ func templatesServerOperationGotmpl() (*asset, error) {
 	return a, nil
 }
 
-var _templatesServerParameterGotmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3d\x5b\x73\xdb\x36\xba\xcf\xab\x5f\xf1\xad\xce\x69\x86\xf4\xc8\x64\xcf\x9e\xce\x3e\xb8\x75\x67\x12\xdb\x6d\x3c\x6d\x2e\x27\x4e\xfb\x70\xb2\x99\x2d\x2c\x42\x12\x36\x24\xc1\x00\x90\x1d\x1d\x0d\xff\xfb\x19\xdc\x48\x80\x04\x29\x2a\x71\xd3\x76\xba\xfb\xb0\xb5\x88\xdb\x77\x01\xbe\x3b\x90\xfd\x1e\x32\xbc\x22\x25\x86\xf9\x2d\x29\xb3\x8a\x91\x82\x08\x72\x87\x2b\xc4\x50\x31\x87\xba\xde\xef\xd3\x13\x40\x25\xe0\xa2\x12\x3b\x10\x98\x0b\x3d\x80\x08\x42\x4b\x10\x54\x7f\x12\xb8\xa8\x72\x24\x30\x30\x5c\x51\xc8\x70\x85\xcb\x0c\x97\x4b\x82\x39\x30\xcc\x69\xbe\x55\xbd\x4f\xe1\xf2\x05\x3c\x7f\xf1\x1a\x2e\x9e\x3e\x7e\xfe\xfd\x15\xbc\x7e\x7a\x7d\x03\x27\x69\x5d\xcf\xf6\x7b\xc0\x65\x06\x75\x3d\x9b\xb9\x10\xd1\x6c\x77\x87\x72\x92\x21\x41\x99\x04\x66\x06\xb0\xdf\x9f\x02\x59\x41\xf2\x14\xf1\x67\x34\xc3\xf9\x13\x9a\xed\x5e\x4a\x60\xb9\x6e\x4f\x53\x30\x43\x30\xc8\xf1\x40\x6f\xff\x85\x97\x42\xa1\x91\xe1\x1c\xaf\x65\x83\xe9\x61\x30\x28\xe4\x3c\xa6\x9f\x06\x07\xe4\x12\x98\x31\x38\x3b\x57\x93\x24\x3f\x9b\x29\x23\x46\xb7\x02\x27\xdf\x51\x56\x20\xc1\xe3\xaf\x55\xa7\xbf\x9e\x43\x49\x72\xd8\xcf\x00\x40\xa2\x0b\xe7\x80\x2a\x49\x81\x88\x61\xbe\x90\x5d\xe2\x19\x40\x3d\xd3\xd3\xe6\xb8\x94\xdf\x63\x38\x3f\x87\x2f\xcd\xa0\xfd\x1e\x92\x57\x78\x89\xc9\x1d\x66\xcf\x51\x81\xa1\xae\x93\xfd\x1e\x2a\xc4\x97\x28\x27\xff\x87\x21\x31\x5f\xe1\x5c\xf6\x25\x2b\x40\x65\x06\x51\x49\x05\x24\x37\xcb\x0d\x2e\x50\x72\xcd\x9f\x20\x8e\x5f\xef\x2a\x1c\x43\x72\xcd\x9f\x6f\xf3\x1c\xdd\xe6\x72\xcc\xa3\x86\xb8\x12\x15\x05\x89\x26\x23\xce\x39\xb6\x73\x49\x7a\xde\x90\xa2\xca\xb1\x43\x50\x8f\xc8\xd7\x02\x6b\x1a\x1b\x88\x15\x1b\x28\x6b\x00\x90\x13\xe4\x64\x89\x7f\x6e\x68\xcb\x5b\xe0\xe4\x58\xd9\xc3\x6d\xec\xb1\x0b\x31\x86\x76\x40\x57\x2e\xdf\x78\xb3\x9a\xd9\x1f\xce\xe2\x63\x2b\x9b\x9e\x9f\x9b\xb4\x66\xc5\xe6\x38\xcc\xb9\x04\x4c\x1d\x26\x67\x23\x27\x2e\x22\x76\xdf\x3b\x88\x29\x86\x8c\x91\x4e\x81\x17\x39\xc4\xd7\xbd\xae\xf9\x75\x29\x30\x5b\xa1\x25\xee\xb5\xdc\x08\x86\x51\x11\xc7\x7a\xe9\x15\x65\x8a\x32\xd7\x65\x86\x3f\xfc\x8c\x98\xc4\xff\xec\x1c\x18\x2a\xd7\xe6\xd8\xec\x1b\x6c\x3c\x5a\xdb\xe9\x1c\x22\xa8\x8e\x44\x73\xed\x4d\x67\xd2\xb7\x72\x97\xb7\x87\x63\x70\xc2\x57\xf8\xfd\x96\x30\x9c\xb5\x7c\x1b\x38\x49\x94\xb5\x9d\x23\xb9\xd8\xc5\x86\xe4\x59\xf2\x12\x89\x0d\xd4\xf5\x42\x22\x55\x31\x52\x8a\x15\xcc\xbf\x78\x3f\xb7\xcd\x3f\xd2\xa5\x3e\xed\x75\x1d\xc7\xcd\x02\xb7\x0c\xa3\x77\x1e\x5c\xea\x44\x34\x20\x2c\x69\x29\x48\xb9\xc5\x7e\x97\x76\x1b\xd6\xb3\xe0\x67\x5f\x74\xf4\x28\x72\x84\x2c\x19\x91\x26\x3e\xfc\xb5\x95\x2f\x0e\x81\xdd\x1d\x3c\x78\x42\x7e\x37\xf2\x68\xe0\x94\xb7\x0c\x49\x53\x28\xa9\x2b\xb8\xe5\x16\x26\x4a\x26\x91\x12\xc4\x86\x70\x50\x67\x6d\xf6\xf9\x8f\xbc\x7f\x8a\x8f\x97\xac\xcf\x50\x35\x26\x01\x0e\x9d\xfd\xc7\x59\xa6\x94\x31\xca\x5f\x32\x5a\x61\x26\x08\x0e\x8b\x82\x81\x8e\xbe\x64\x70\x05\x72\x81\xaa\x80\x38\xb6\xb2\xe3\x07\xbc\x3b\x46\x72\x04\x57\xef\x9e\xfb\xf6\xec\x58\x20\xbc\xd3\x2e\xa7\xf3\x0e\x7c\x4f\x02\x48\xee\xe8\x3d\x33\x9f\x37\x9c\x9a\x20\x16\x16\x66\x27\xa8\x4d\x70\xcd\x1f\x97\xb4\xdc\x15\x74\xcb\xcd\x1a\x06\x87\xef\xa9\xdc\x12\x50\xd7\x91\xb7\x0b\xde\x78\xe4\x78\x3b\x38\x53\xdc\x8c\x1a\x3a\xed\x62\xcb\x4a\xd9\x32\x26\x5f\x82\x9b\x64\x80\xb7\xcd\xc6\x8d\x0c\x38\xcf\x50\x25\xbf\xbd\xb8\xc3\x8c\x91\x0c\xc7\x21\xf9\xdd\x62\x72\x50\x7a\x4f\x62\xea\x74\x61\x3e\x28\xc6\x3f\x4e\x80\x7f\x8a\x08\xbf\x43\x39\x2c\x80\xbe\x83\xb3\xf3\x00\x61\xbe\x96\x2d\x3d\xaa\x28\x86\x1c\x41\x74\x67\xa9\xbf\x86\x08\xed\x31\xbd\x73\x38\x8e\x52\x23\x13\x94\x49\x88\xa2\xf5\x43\x20\x58\x8f\xd1\xfe\xf7\x65\x14\x4f\xd2\x39\x4a\xd5\x14\xa8\xfa\x6d\x15\x8d\xaf\x67\x82\x3a\xc6\x37\x96\xdb\x95\xaf\xf9\x63\x69\x68\xc7\x2e\xf7\xe2\x21\x6d\xd3\xd3\x09\xa4\xcc\xa5\x6f\x66\x60\xfa\xbc\x14\x68\x0f\x40\x68\x5d\x0b\xa2\xbf\xfe\xf5\x25\xd4\xb5\xa4\xca\x27\xb9\x6e\xde\xde\xb0\x58\x48\x1d\x6c\x88\xf9\x29\x64\x34\x84\x69\xa6\xaa\x6b\xe5\x08\xb5\x9a\xac\x40\x55\xeb\x1f\xff\x49\x69\x3e\x70\x20\x99\x55\x35\xb4\xfc\x4d\x77\x66\x73\x36\xfd\xa3\xd9\xd5\xd8\x9e\x59\x16\xc6\x88\x96\xb0\xc6\x25\x66\x64\x09\xc4\x76\xfd\x0d\xd0\x09\xc8\x1a\xfd\xc3\x35\x76\x9d\x50\x4d\xc8\xcf\xd5\x71\x1d\x13\x25\x78\x46\x4a\x1d\x41\x48\x9e\xa1\x0f\x4d\x2c\xc1\xc8\xf9\x25\x2a\xb0\x87\xc5\x8d\xfc\x71\x76\x2e\x49\xf0\xf7\xaf\x22\xa9\x1d\xba\x48\x75\xa4\xd8\x53\xc4\x2f\x09\x5f\x32\x52\x90\x52\x2e\xde\x4a\xb7\x86\xe0\xed\x27\x63\xf1\x76\xa8\x70\xd2\x50\xa1\x5d\x4b\x1b\x8a\xc6\xe6\xde\x20\xfe\x92\xe1\x15\xf9\x00\x52\xf9\x6e\xf1\xd5\x87\x8a\x61\xce\x25\xd7\xe6\x34\x99\x2b\x0b\xba\x35\x48\xbb\x5d\xea\xfa\xa2\x3d\xd2\xb2\x5b\xbf\x43\x6b\x1e\xc6\x4e\x44\xcc\x88\x87\x86\x80\x75\x3d\x4b\x53\xed\xbd\xcb\xdf\x97\xb8\x52\x46\x53\x61\xda\xcf\x54\x93\xdb\x3b\x60\x54\xdb\xe6\xc9\x56\xd7\x62\x90\x4d\x8b\xee\x7a\xfd\x63\xee\xd8\xb5\x75\x00\x31\x67\x3f\x04\x11\x33\xed\x06\x31\xa7\x77\x08\x31\xd3\xfc\x40\x88\x35\xf3\x1d\x8f\xd6\x4f\x25\x79\xbf\xc5\xa3\x98\x6d\xdb\x2e\x67\x20\xd8\x16\x87\x30\x72\xe6\x39\x0e\xa9\xdf\xfa\xb8\xc0\x81\xf3\x02\x0f\x79\x60\x8e\x64\xce\x55\xb9\x2d\x86\xb8\x22\xdb\xf4\x5e\xb3\xbd\x02\x5c\x91\x4d\x17\x88\xe3\xc8\x48\xc7\x69\x6c\x99\x1d\x36\xc7\x1e\x90\x33\xa7\x5e\xc0\x5c\xb3\xe6\xd4\xb7\x0a\x27\x32\xca\x1b\x36\xc6\x2e\xab\xe5\x2e\xb6\x5c\xd0\x42\xeb\x7d\x81\xa5\xcb\x94\xdc\x08\x46\xca\x75\x14\x7b\xc0\x39\xba\xf2\xd4\x53\x96\xbd\xe9\x4f\x25\xb7\x1d\x4c\x8e\x5f\xc4\xa3\x88\xf9\x65\x39\xd2\x70\xec\x3f\xee\xe6\x86\xef\xa7\xed\x31\x4a\xae\xb9\xe2\xf7\x35\xd4\xf5\x0a\xe5\x1c\xb7\xfb\x52\x9e\xda\x69\xbb\x50\x9a\x34\xde\x3e\x6c\xb5\xe8\x69\xa3\x46\x97\x12\xb5\xa1\x94\xc7\x05\x2d\xef\x30\xd3\x98\x7a\x4c\xc4\x90\xdc\xdc\xa3\xf5\x1a\x33\x4d\x0c\x98\xcf\x1b\xeb\xa2\xb7\xbd\x75\x97\xb3\xde\x3e\xf5\x67\xe8\x07\xa8\x95\xa2\xbe\x43\xac\x94\x12\x32\xc0\xfd\x85\x6b\x27\xba\xa0\x46\xe3\xe3\x7e\x8e\x5b\x2b\xb3\x63\x1a\x5a\xda\x51\xc6\x93\xeb\x52\x91\x45\x9a\x2f\x47\x88\xc1\xb9\xec\xda\x44\x6d\xe6\x8b\x03\x38\xc4\x43\xd9\x91\xfe\x66\x33\xa6\xd5\x3b\x52\xbd\x44\x8c\xe3\xd8\xa6\xca\x2a\xc4\x38\x29\xd7\x40\x38\xf0\x77\xa4\xaa\x70\xa6\xbc\x46\xae\xbc\x33\x6d\xef\xeb\xa8\xa5\x49\x34\x7d\x22\x8b\xee\x24\x0e\x0d\xe9\x57\xda\xd0\x4e\x14\x48\xd1\xa1\xe1\x8b\xdf\x13\x63\x14\x22\xae\xe1\x3f\x06\x9a\xc4\xf5\x24\x52\x43\x92\xe8\x64\xbf\x37\x33\x99\xe0\x50\x88\x7b\x54\x92\xff\xc3\x0b\x9d\xe3\xeb\x7b\x67\x26\x3d\x98\x91\x25\x12\x38\x03\x41\xa1\xc4\x5c\xfe\xa5\x18\x56\x69\x87\xda\x70\xec\x30\x68\x07\xe8\xda\xf3\xaa\xfa\x7d\xda\xe8\x8e\x61\x69\x0c\x01\xe7\x89\xac\xe0\x0e\x9b\x20\x95\x6c\x4d\xa2\x13\xc3\x94\x16\xbb\xd8\x0b\x55\x19\xd6\xdd\xe1\x66\x01\x69\xf0\xb8\x7c\x8b\x9d\xb8\x58\x47\x7a\xf5\x1d\x9b\x87\x20\x45\x57\xc4\xb4\xb9\xb3\x4a\x87\x14\x77\xc1\xf4\x99\xef\x87\xb4\x12\xb4\x40\x55\xb7\xbf\x2b\x44\x5b\x2b\x65\x38\xae\x6e\xf5\x8b\x13\x41\xb7\x9f\xdc\x58\xb9\xe7\xd1\xab\x29\xe4\x41\xb7\x91\xa1\x96\x50\xba\x5f\x81\x2a\xa9\x67\x7d\x6f\x8f\x9f\xc1\x92\x56\x3b\x29\x2f\x50\x9e\x03\xce\x71\x81\x4b\x15\x64\x1f\x14\xbc\x43\xca\xf7\x95\xa4\x76\x81\xde\x69\x66\x36\x27\x6b\x61\x7c\xa7\x61\xa5\xad\x8e\x4c\x2f\xa6\xaf\xad\xfa\xa1\x41\x3f\xb7\x21\xff\xc1\x6e\x75\x7d\xd1\x04\xf2\x7c\xbd\x6d\xc3\x1c\x4e\x86\x56\x37\x0d\xc2\xd8\xdd\x49\x83\x70\x75\xdc\xed\x86\xd1\xc3\xf9\x61\xdd\xf9\x50\xc2\x56\x1b\x4f\xf5\x68\x44\x3e\x34\xc7\x2d\x29\x33\xdc\x9b\xc0\x0b\xdd\x59\xaa\x98\x2c\xd0\xaf\x48\x13\x07\xc2\xc0\x29\x19\x00\x31\x98\x74\xb0\x30\x07\xb2\xc0\x93\x40\xea\xe5\x15\x7c\x86\x05\x12\x08\xbe\xce\xf9\xb4\x0c\xb0\xbb\xe8\xa1\x84\xc1\xb4\x7c\x41\x77\x03\x74\xcd\xb8\x00\x6d\xdd\x3c\xe7\x84\xd3\xfd\x66\xbf\x37\x87\x53\xa5\x65\x26\x0d\x6a\x83\x2f\xfe\xc9\x73\xb7\x5c\x5d\x5f\xbf\xda\xef\x6d\xe0\x6a\x58\xac\x0e\xc9\x62\xcf\x40\xbd\xe6\x2f\x6d\xfd\x90\x83\x5c\x4b\x96\x56\xf0\x35\xfd\x9a\x62\x88\x5e\xbc\xe9\x90\xe9\xd5\x7a\x3f\xf6\xf7\x13\xc4\xf1\xdf\xbf\x8a\x07\x3c\x36\x3d\xfe\xc5\x2a\xda\xef\xd5\x66\x31\x56\x48\xb3\x33\x94\x15\x22\x3f\x78\x66\x92\x35\x1a\xfb\xd2\xad\xf1\x35\x16\xd6\xec\x3a\xe0\x84\x86\x71\x74\xe4\xa1\x32\x42\x94\xec\xf0\xb4\x8a\x31\x3b\x8e\x28\x2c\xf1\xe4\x8b\x27\x59\x46\x35\xc1\x71\x12\xe5\xa0\x3c\x39\x3e\x74\x68\xa5\x65\x5d\xcf\xee\x10\x9b\xa8\xf6\x3c\x75\x37\x33\x8a\xac\x95\x25\xcf\x31\xce\xb8\xaa\xbf\x30\x51\x04\xa7\x16\xa3\x75\xe3\xfe\xe9\xe7\x8a\x27\x48\x30\x57\x01\x1e\xec\xae\x35\xe1\x90\x1e\x54\x7c\x67\x78\xb9\x65\x5c\x9e\x1c\xa7\x60\x8e\xae\x74\x51\x94\xaa\x71\xf0\xad\x50\xbf\xce\x43\x4f\xd9\x78\x23\x96\xdd\xc6\xb9\x30\x0b\xba\x2e\xc6\x05\xcd\x73\xbc\x94\x8b\x38\xce\x86\x55\x39\x9d\xb6\x61\xb9\x35\x51\x47\xb5\x48\xbb\x10\x4e\xa2\x73\xcb\x22\x7e\x8f\xd6\xc9\x4d\x95\x13\xf1\x64\xa7\xe1\x8a\x26\xcd\x30\xa4\x11\x02\x58\xc6\x6e\x9a\xe5\x28\x2b\xe2\x68\x1b\xc2\xa3\xa5\x49\x80\xf6\xd1\x19\x36\xda\xe0\x5b\x37\x4f\x7a\x8c\xe9\x31\xe5\x4c\x35\x19\x99\x49\xdd\xa7\x1d\x99\x29\xda\x08\x1c\x75\x14\xf2\xc5\x3b\x7d\xb5\xc0\xd4\x9e\xb5\xb4\xaf\x49\x69\x7c\xeb\xa8\xa2\x9c\x13\x69\x98\xdc\x13\xb1\x71\x9d\xb8\xd8\x95\xa6\x0f\x6b\x62\xf9\x7b\x60\x82\x85\xf5\x47\xe2\x84\x63\x2b\x29\xaa\x97\xb4\x3c\xd5\xf5\x9a\x8f\x1e\xa9\x1f\x92\xfe\x42\x0a\xe1\x86\x09\x5d\x41\x15\xb6\x1c\x27\x14\xa6\xfc\x19\x4c\xca\x40\xed\xdb\x74\x73\xf2\x0f\xb7\x91\x34\xa2\x6e\x14\x34\x4d\xe1\x82\x66\x58\xe7\x3e\x55\x0c\xe6\x76\x07\x6b\x7a\xca\xb5\x31\xf6\xb5\xad\x1c\xbf\xba\xbc\x7e\x9d\xcc\x66\x36\x8e\x7f\x41\xab\x1d\x23\xeb\x8d\x80\xd3\xba\xd6\xda\x6e\x49\x0b\xe9\x44\x77\xda\x9c\x78\xeb\xac\x42\xcb\x77\xc8\xb8\xae\x2f\xcd\xdf\xb2\x21\x4d\xe1\xf5\x86\x70\x58\x11\x29\x38\x10\xf7\x81\x11\x1b\x0c\x06\x1a\x10\x94\xe6\x89\xec\x7f\x95\x11\x21\xbd\x77\xd1\x8c\x2b\xd4\x8a\x15\xa3\x77\x18\x56\x5b\xa1\xa6\xda\xe0\x12\x76\x74\x0b\x0c\x9f\xb2\x6d\xe9\xcd\x64\x97\x50\x60\xa3\x32\x9b\xcd\x48\x51\x51\x26\x20\x9a\x01\xcc\x57\x85\x98\xcb\xff\x12\xaa\xfe\x53\x62\x91\x6e\x84\xa8\xe6\x33\xf9\x6b\x4d\xc4\x66\x7b\x9b\x2c\x69\x91\xae\xe9\x29\xad\x70\x89\x2a\x92\xea\xed\x3c\x1f\xee\xc0\xb6\xa5\x20\x05\x3e\xdc\x23\xe5\xd2\x24\x21\x62\x37\xa1\x6b\x41\xb2\x2c\xc7\xf7\x88\x8d\xcd\xcb\x05\xb3\x08\x0d\x74\xb8\x47\xeb\x91\x66\x6b\xca\xcf\x75\x99\x25\x68\x4a\x71\x48\x2e\xf1\x0a\x6d\x73\x71\x6d\x7e\xdb\x98\x49\xd3\xee\x34\xc4\x8a\xcd\xcf\xf1\x7d\x30\x79\x6e\x2a\x67\x96\x0c\x23\x81\x39\x20\x28\xf1\x3d\x8c\xf5\xd4\x55\x91\x76\x37\xea\x8f\xca\x52\xa0\x05\x36\x50\x71\x95\x75\x48\x53\xad\x8a\x24\xef\x33\xdd\xa0\x43\x9e\xd2\xb4\x23\x82\xa8\xd9\xb3\xc4\x9a\x3b\x66\x48\x49\xbb\x9d\xb5\xd1\x9c\x49\x29\xcb\x2b\xbc\x4c\x5c\xa3\x7a\xb5\x2d\x97\x07\x50\x8b\xe2\x51\x74\xf6\x07\x30\x31\x21\x67\xa6\x76\x67\x9a\x3a\xa0\x6b\xf5\x8a\x05\x66\x5c\x23\xea\xc3\xad\x19\xa2\x0d\xe6\xc4\xaf\x4f\x02\x6b\x21\x3e\x45\xdc\x2c\xe4\xe4\x82\xda\x76\xa3\x27\xbe\x23\x39\x56\x13\x74\x2c\xc8\xeb\xcb\xba\xb6\xc3\xcf\xbd\x9a\xb6\xae\x3b\xd9\xfa\xa8\x43\xbe\x65\xc4\x95\x6b\x77\x41\x4b\x81\x48\xc9\x21\xf9\x5f\xcc\x28\xcc\xa3\x7f\xcc\x9d\xa4\xa5\xfa\x66\x6d\x10\xb5\xb3\xad\xfe\xb3\x34\x61\xb6\x3c\x85\xc3\x4f\x65\x81\x18\xdf\xa0\xfc\x35\xfe\x20\xa4\xcb\x88\x93\x75\x02\x97\x48\xe0\x85\xfa\x7f\x79\x88\x16\x70\xb9\x65\x5a\xa3\x34\xaa\xd3\xc7\xa1\x13\xd4\x1e\x47\x64\x0c\x07\x05\x77\x13\x34\x8f\xfa\x19\x30\x4b\x49\x65\x13\x8f\x20\x28\xd0\x3b\xcc\x41\x2f\x75\x34\xd4\x56\xf5\x77\x40\x8f\xb5\xbc\x3e\x06\x3c\x86\xd7\xdb\x1c\x31\x58\x53\x68\x6e\x30\xf5\x81\x3d\x00\x5f\xa3\xbe\x4c\xaa\x31\x3d\x81\x4b\xaa\xb6\x9d\xb3\xcd\x57\x8c\x16\xd0\x58\x97\x99\x3d\x18\xa4\xb4\x09\x03\xe3\xaf\x9d\xa4\x9d\x4d\x1c\xda\x8b\x56\x4d\x3a\x8c\x1c\xce\x6d\x76\xf7\x5c\x03\x94\xde\x32\x5c\x48\x35\xb2\xde\xe9\xd3\xd7\xd9\x6f\x21\xd4\x7b\xe8\xfb\x3a\xfc\xf4\xc8\x15\xff\xc5\x69\x99\x34\xcb\x4e\x5b\x72\x80\x08\x91\xe3\xd2\x1e\xdc\x1d\x72\x3e\x45\xf3\x6b\x87\xd3\xce\x06\x99\xbe\x3f\xce\xac\x2b\xa1\x43\x30\x07\x76\x4e\xc7\xda\x73\x4d\xc4\xce\x16\xd5\x37\xe8\xf2\x1c\xa8\xd8\x60\x06\x4b\xc4\x31\x87\x48\x09\x00\xae\x2a\xb3\x62\x78\xc3\x37\x74\x9b\x67\x6a\xb3\xd1\xe5\x72\xcb\xde\x8e\x2e\xe9\x97\x05\x1f\x0d\x8b\x84\xc0\x56\x85\x0d\x1e\x8a\xee\x1a\xc1\x88\x67\xa8\x40\x0c\x20\x56\xe6\x59\x57\xd8\x07\xa5\xbc\x39\x67\x4b\xc4\xd8\x0e\x68\xe9\xef\xdb\xc1\x0d\xe7\x1d\x2e\xa7\xfa\xe4\x13\x65\xbb\x15\xed\x21\x9d\x92\xf8\x27\xea\xcd\xdb\xdb\x9d\xe8\x67\x58\x1d\xb9\x14\xb7\xe0\x85\x04\x4c\x4f\xbd\x51\x06\xd1\xd1\x52\x21\x0e\x9c\x5a\x67\xe6\x36\x0a\xda\x39\x9d\x06\xfc\x5f\xf6\xfb\x06\x7c\x3e\x87\x48\xf6\x6a\x90\x88\xeb\xfa\x97\x78\x01\x8f\x7c\x82\x40\x43\x91\xb1\x4a\xf3\x34\x85\x0a\x95\x64\xc9\x25\x08\xd2\x4e\x21\x2b\x62\x9c\x25\x22\x85\xa5\xb2\xe4\xbc\x11\x05\x5f\xab\x04\x76\x21\x92\x1b\x0d\x53\x34\x37\xfd\x7c\x53\x42\xa5\xaa\x1a\x63\x03\x7a\xd0\x9d\xc1\x17\x77\xf3\x45\xaf\xb0\x5d\x81\x13\x15\x7c\xed\x7e\xee\x70\xc1\xad\x18\xe9\x67\xe0\x6c\xab\x17\xd0\x6c\x7b\x18\x6f\x72\xc4\xba\xda\x87\x4c\xa0\xfe\xa9\x68\xbd\x3a\xaf\xa2\x56\x62\xf6\xeb\x17\x75\x3d\x72\x8b\xba\x82\x6c\x5f\xb4\xd4\x70\xbc\x2a\x90\xde\x9c\xa9\xa6\x1a\x36\xab\xed\x99\x93\xc2\x50\x1a\xc2\xb7\x74\x5b\x66\x36\xae\xa9\x6b\xeb\x95\x57\xb6\xd9\x16\xa8\xf4\x8a\x5a\x69\x85\xb5\x69\x24\xd7\x10\xbb\x8a\x2c\x51\x9e\x2b\x9f\x8c\x63\x40\x0c\x03\xbd\x95\x53\xe3\x4c\x2b\x68\x04\xd2\x4d\x52\x3e\x3d\xe6\x62\x96\xa6\x72\x98\x71\xb9\xce\x1c\x4b\x55\x6a\x38\xb3\xc4\x4c\xa9\x83\x31\xf0\xb9\x60\xdb\xa5\x80\xbd\x49\xe8\x3e\x7d\xfd\xfa\x25\x98\x15\x40\x17\x16\xcc\x40\x7d\xb5\x1f\x4f\x5c\x20\xe0\x17\x79\xba\xce\xe6\xa7\xf3\x5f\x66\x61\x6b\x38\x3d\x31\x9b\xe1\x12\x4b\x26\x56\xa2\x71\xb2\x6f\x73\xba\x7c\xd7\xf8\xb5\xbd\x66\xb7\x0a\xaf\x13\xe8\xb0\xbf\x74\x79\x61\xb7\xef\x33\xf4\x81\x14\xba\xc4\x0d\xc0\xfc\xb0\xbb\x2c\xb9\xfa\xb0\xcc\xb7\x9c\xdc\xe1\xb6\xd7\x37\x1e\xe7\x9d\xe1\xbd\x89\x49\xe9\x4c\xac\x7f\x04\x26\x6e\x7a\x7d\xdb\x99\xb8\x69\xe8\x4d\xbc\xcd\x05\xa9\x72\xfc\x62\x65\xe6\x36\xbf\xe1\xc5\xca\x94\x87\xba\x1d\x02\xf8\xfe\x88\xcb\xb5\x8a\xea\x68\x8c\x41\xff\x6e\x4a\x4b\x9b\xe6\x00\x46\xde\x50\x52\xfa\x43\x9d\xe6\xee\xd0\x97\x4a\x56\x97\x7a\xa0\xf9\x71\x66\x82\x0f\xb6\x25\x00\xa9\x53\x23\x2d\x01\x0d\x97\xc0\x06\xc0\x74\xc7\x91\x12\xc2\x35\xc1\xdd\x71\x9d\x62\x55\x00\xfd\x21\xbc\x6d\x9c\xc0\xd7\x0c\xe0\xda\x20\xe3\x7c\xed\x0e\x08\x27\x14\xda\xaf\xe0\xe5\x20\xfa\x9d\xbb\xf3\x75\xa5\xa5\xf9\xe1\x17\x4c\xf5\x2c\x9f\x56\x56\x9f\xa4\x33\xcf\xab\x34\xa6\x90\xb6\x9c\x3a\xd7\x18\x3e\x73\x25\xad\x63\xd7\xba\xe6\x5c\xbf\xcc\xff\xc8\x22\xff\x4e\x27\x0b\xc8\xc8\xe2\xbe\xea\xab\xad\x80\x7f\x42\xca\xcc\x8a\xb4\x5b\x2a\x36\x70\x4b\xca\x8c\x2b\x40\x6c\x7c\x86\x03\x52\x9e\x2f\xe6\x62\x01\x44\x00\xe2\x7c\x5b\x60\x0e\x62\x83\x04\x2c\x75\x25\x16\x88\x0d\x29\xd7\x1c\x94\xc5\xad\xe4\x1a\x02\x93\x59\x91\xf0\x46\xda\xe1\x4c\x5e\xe1\x35\xe1\x82\xed\x62\x1d\xa6\x75\xae\x44\xa4\xa9\x5b\x57\x67\x43\x29\x02\xee\x49\x9e\xc3\x96\x63\x65\x2d\xaa\x58\x5c\x81\xc5\x86\x66\x20\x35\x06\x4f\x8c\x2e\x78\x4d\x01\x97\x7c\xcb\xba\xc1\x98\x85\x0e\xce\x69\x49\x5f\x6c\xb9\x80\x0d\xba\xc3\x70\x8b\x71\xe9\xc6\x69\xb4\xcb\x73\x30\xd4\x72\x8b\x57\x94\xe1\x0d\x2a\xb3\x44\x07\x67\xa2\xc0\x35\x0e\x38\x19\x99\x24\x76\xe9\x1d\x31\x5f\xa5\x2c\x40\x5d\xaf\x81\x93\x36\xfa\x96\x3c\x43\x62\xb9\xc1\xd9\x2b\xd9\x60\x89\xb6\x37\x41\x1b\x86\x39\xbc\x79\xab\xbe\xcd\x06\xae\x94\xb8\xea\xeb\x1c\x6c\x37\x73\xe6\xfe\x67\x8b\x59\x7b\xb9\xec\x3d\x57\x39\x50\x1d\x00\xd4\xc1\x61\x1e\xb1\xe4\xa7\x57\x3f\x26\xaa\x63\x14\x3b\xe9\x34\x6f\x1e\x79\xae\x9b\x69\x5a\x1b\x95\xe9\xb2\x45\x2d\xc1\x11\x13\xb2\x5b\xf4\xdf\x7f\x83\x6f\xbe\x81\xbf\x7d\xd9\xb5\x36\xff\xf2\x97\xb6\x32\x51\xd1\xe4\x8a\xb1\xe7\x54\x34\x83\x7b\x57\x1f\xdd\x58\xff\x73\x7c\x1f\x7d\xf5\xe5\x97\x8b\x79\xcf\x54\xac\x1b\x63\xdd\x07\x4a\xc1\x32\x7e\xb7\x72\xe2\x02\xb3\xbf\xd4\x3e\x25\x14\xe5\xdc\x90\xd8\x2a\x0b\x53\x56\x76\x8e\x83\xd6\xd7\x80\x41\x31\xeb\x84\xce\x5c\x17\xa1\x29\x6c\x6e\x99\x2a\x79\x1a\xdc\x8a\x0b\x78\xbf\x79\x37\xd0\xf2\x4f\x09\xea\x7b\x9e\x7c\x8f\xc5\x8b\x1f\xba\x75\x84\xe3\x77\xc7\xa4\xe0\x08\x08\xdc\xe8\x78\x20\x3e\xed\x96\x99\xef\xa1\x49\xf0\x2d\x39\xd8\xd0\x7a\xe3\xe4\xd0\xe0\x98\x10\xea\x03\x12\xe6\x78\x70\x1e\x92\x30\x4f\x31\xca\x30\xb3\xa4\xf9\x48\x0c\x12\x3d\xcb\x1b\x75\x64\x2f\x50\x49\x4b\x69\xc9\xeb\x8f\x3f\xe0\x9d\x47\xa7\xb7\x0b\x65\x7d\x3c\x2c\x16\x8d\xec\x71\xee\x06\x98\x16\x3f\xb0\xdc\xbb\x12\x14\xbe\x28\xa4\x41\x5f\xb4\xe2\x42\x2e\x20\xa7\x1a\x60\xb9\x85\xdb\x1e\x3f\xd7\xf7\x7a\xd4\x15\x68\xcf\x08\xe7\xa4\x5c\xcb\xe9\xda\x43\x3f\x8c\xb1\x2b\x79\x60\xce\x30\xca\x48\xb9\xd6\x59\xa9\x2f\xde\xc3\x0a\x91\x5c\x3a\x02\x52\x24\x75\x33\x9a\x91\x8f\x57\x6c\xcb\xf9\x9d\xbb\xf6\x21\x88\x7d\x69\x79\x1e\x04\xdc\xb0\x48\x25\x33\x4e\x69\xa5\x6b\x64\x75\x33\xdc\x6e\x05\xd0\x4a\xbf\x1f\xa0\xe1\x6c\x7c\xb3\x59\xc7\x2f\xef\x2e\x76\xe4\xc6\x3b\x96\xa1\xa1\x5d\xd6\x77\xb0\xd2\xb4\xef\x60\x59\xb2\xfe\xa3\xd4\xaf\x67\x69\xe0\x87\x77\xa8\xc6\xea\xf8\x1b\xef\x8f\xac\x7e\x50\xbb\xe3\x12\x09\x74\x16\xc4\x67\x01\x1a\xa3\x70\xab\x6e\xab\xdd\xb2\x7b\x63\x75\xae\xb2\x01\x99\xb2\xca\xc6\xa5\xdf\x2a\x7b\x50\xa1\xf7\x31\x70\x7c\xfa\xad\xe3\x46\xc3\xa6\x27\xea\xcf\xa4\x95\x0e\xed\x2d\x80\x4e\x1f\xa5\x65\xb5\x8e\x75\xfa\x0c\xc5\xfe\xfe\xad\x80\xff\xad\x80\xff\x74\x0a\xd8\x44\xe9\x5b\x25\xfc\x67\x96\x33\x01\x3b\xbe\x93\xcd\x68\x1e\xf3\x68\x42\x14\xa7\xb6\x5e\xd0\x4a\xff\xa7\x88\xeb\x87\x16\xe2\xce\x65\x8b\x8e\xab\xef\x16\x6d\x4e\x55\x31\x2c\x79\xe2\xbd\x6e\xe0\xd4\x35\x65\x78\x85\x99\xe9\x90\x5c\xe4\x94\xe3\x28\x0e\xdc\x13\xe8\x05\x25\x9c\x4f\x57\x1f\x2a\xca\x44\x5b\x91\x75\x4b\xb3\x9d\x7b\x87\x50\x50\x53\x9b\xa3\x00\x4a\xd4\x6b\x59\xbc\x2d\xd7\x69\xb3\x19\xfb\x3d\x64\x8c\x56\xb6\xa9\x2d\x06\xee\xbd\xab\xa1\xea\x37\x1b\x6a\x47\x1a\x7c\xcb\xc6\x0b\x5a\xf2\x6d\x81\x8d\xaf\x16\xba\xf7\xe6\x92\xb7\x5f\x4f\xd6\x5a\x41\x84\x26\x57\x2f\xbe\x73\x06\xa9\xef\x1f\xff\xe0\xd1\xac\x9b\xad\xe8\xe4\xe2\x46\xde\xf5\xe9\xf2\xed\x0e\xb1\xe6\xcd\x11\xa7\x6a\x1a\xbc\x64\x91\x4f\x0f\xfb\x47\x43\xae\x47\x72\x82\x21\x5f\xf8\xa3\xe8\x33\xe9\x71\xa8\x83\xf6\xea\x94\x37\xa3\x3c\x73\x2b\x40\xca\x71\xcb\x5a\x85\x02\xae\xe4\xcf\x4f\x05\x68\x01\xf3\x79\xdf\xc2\x1e\x22\x5d\x9f\xf3\x03\x69\xaa\x1e\x82\x7e\x1d\x61\xe7\x3d\xd5\x64\xa4\x04\xd1\xaf\x80\x76\x40\x72\xe7\xff\x3c\x7c\x0b\x40\x37\xfc\xc3\x7d\x4b\xaa\x2d\x91\xf6\xa3\x33\x17\xb4\xa8\x28\x27\xc2\x29\xe5\xd6\x4c\x65\x98\x27\x49\x62\xd7\x34\x83\x4a\x92\xcf\xcc\x65\x98\xff\x5c\xe6\x88\x73\x25\x8f\xce\xce\x21\xea\x08\xcd\xd8\xa4\x04\x83\x61\x18\x7b\xd7\xc3\xf5\x32\x67\x69\x0a\x03\xea\xc8\x44\x55\x7d\x9f\x48\x1d\x5a\xd5\xdc\x84\x31\x37\x18\x68\x99\xef\x80\x6f\x2b\x23\x4d\xdd\x9b\x23\xb4\x54\x33\x70\x95\x21\x6b\x53\x14\x52\x34\x37\xb9\x8e\x03\x81\x49\x07\xe5\x36\x26\x39\xa8\x43\x55\x01\xa4\x0d\xc1\x29\x9b\x79\x01\x1b\x65\x5b\xc0\x89\xff\xdd\xb8\x59\x4e\x84\x12\xdc\x37\x65\x5b\x60\xbb\x49\x1b\x00\xae\xde\xe6\xd0\x36\x00\xc9\x71\x72\x83\xf1\xbb\xe8\xcb\x85\x14\x2b\xf2\xcf\xab\x32\xd3\x67\x2a\xd4\x78\x23\x10\x13\xf1\x50\xc5\xad\x97\xe8\x69\xc5\xa2\x5c\x10\xbe\x51\xaf\x81\xb4\x8d\x9e\xf8\x72\x77\xd7\xd5\x87\x25\xc6\x19\x37\x39\xac\xe3\x9e\xec\xf0\xf2\x48\x0b\x50\x6f\x0d\xc4\xe3\x55\xc2\x5e\x5e\xab\x03\xf3\xb7\xe6\x05\x93\xc9\x30\xeb\x84\xde\xb1\x30\x3b\x0c\x3a\x0c\xb3\x77\xaa\xfc\x72\x20\x7b\x8d\xab\xb1\x7a\x7c\x34\xf5\x73\x5b\xa3\x15\x1e\x53\xce\x94\x9f\xa9\x08\x1c\x2e\x9d\x42\xee\xa4\xb4\x0e\x05\xf0\x8f\x3a\x27\x0c\xdd\x4b\x87\x1d\xde\xbc\xd5\xc5\x28\x0b\xd8\x20\xfe\x03\xde\xc1\x2d\xa5\x79\x73\x9d\x0c\x06\x72\x20\xfb\xbe\xa1\x65\xf3\x4b\x8d\xef\x14\xf7\xd5\x08\x59\xc1\x5f\xcd\x32\x43\xdb\xe0\x23\x4d\x93\x01\x55\xa4\x52\x0e\xe8\xde\x54\x07\x5a\x18\x94\x74\xd6\xf8\xbb\x12\x5a\x01\x83\xee\xa5\xd5\xa9\x1b\xdf\xb8\x1d\x4f\xff\xeb\xad\x59\x49\xe7\xde\xdb\xa8\x8b\xe6\x47\x57\x61\x86\x9d\xeb\x34\x85\xc7\x79\x4e\xef\xaf\x8a\x4a\xec\x54\x58\x5d\x8f\xef\x7c\x0c\x24\x1c\x7d\xaf\x34\x4d\xe1\x65\xb3\x6d\x08\x57\xc5\xde\x24\xd3\x55\xe2\x4b\x5a\xea\xec\x91\x7a\x2e\x50\x6e\x24\xb1\xc1\xda\xa2\xf2\x2f\x17\x41\x20\xb1\x18\x64\x9f\x6e\xec\xc0\x18\xb7\x9e\xc0\xd0\x7b\xa9\xe6\x7a\xe2\xf4\xb3\xcc\xd0\x7d\xd8\x87\xe9\x3c\x02\x00\xd0\xf3\xe9\x22\xe8\x62\x00\xb1\xba\x4b\xaf\x81\xb7\x20\xc5\x63\x78\x28\xee\x9f\xc3\x7c\x0e\x7b\xc9\x62\xfd\xde\xbc\xc9\xeb\x55\x88\x73\xa7\x84\xce\xd1\x71\x83\xf5\x33\x69\x6a\xd3\xc2\x76\x92\x36\x93\x57\x31\x7c\x47\xe8\x96\xe7\x3b\x2f\xa9\x77\xbb\x33\x29\xbd\xc0\x61\x8e\x3a\x77\xc3\x1c\x31\xe6\x53\xa5\xcf\x61\xef\x31\x14\xff\xbd\x8e\xde\x53\x29\x92\x07\xbf\xe2\xab\x1b\xdd\xc6\xf6\x99\x00\x30\x2b\x1b\x1f\x34\xf4\x9a\xc3\x79\x38\x6a\xdd\x20\xad\x50\x0b\x56\xbd\xf5\xc5\x74\x9a\x7a\x39\xff\x87\x7e\xd8\x04\xfe\x08\x74\xf4\x9e\x8f\xec\x96\x11\xf8\xb6\x62\xeb\xc6\x5b\x51\x61\x39\xe0\xa7\xf0\x9d\x27\x51\x1c\xa0\x9c\x5a\x44\xc9\x94\xa1\xc7\xb4\x0e\x32\x98\xa1\xfb\xc1\x8d\x6e\x0e\xa1\x7f\x39\xf2\xa3\xdf\x8e\x8c\x06\x6f\x54\x8f\xc8\xa3\x4e\x25\x9e\xb5\x30\x06\x8a\xbc\x8f\x37\x15\xf4\x75\xb7\xe9\x06\x83\x36\xd1\x1f\xeb\x7a\x70\x69\x81\x57\x72\xf3\x66\x80\x96\x4b\xca\x54\x6a\x46\x50\xe8\xdf\xc3\x9d\x0f\x14\xc1\xcc\x21\x6a\xca\xcd\x05\x85\xf9\x92\xdf\xcd\xf5\xd5\x22\x25\x2a\xe3\xdf\xa5\x85\xd2\x71\x1e\x7b\x36\xc8\x03\xd8\x1f\xe3\xc2\x17\xbf\x0f\x10\x73\xae\x7c\x91\xb9\xd1\x3d\xea\xea\x59\xf0\x36\x74\xb0\x6c\x69\xda\x7d\xef\xb3\xc6\x90\xe9\x48\xc4\xd3\xe6\x0e\xcd\xfb\xbb\x70\xe0\xad\xb1\x97\x86\xad\xa5\xa1\xa1\x61\xeb\x09\x4e\x41\xd9\x4f\xd6\x7a\xfa\x55\xb0\x0d\x5c\xcf\x1e\x80\x32\x70\x9f\xf2\xe0\x55\x6c\xb3\x97\x54\x50\xf1\x90\x65\x34\x7e\xa5\x3a\x78\x99\xda\x79\x75\xfa\x81\x77\xa4\x8e\xbd\x7d\x0c\x34\x81\x6b\x51\xbf\x85\x69\x13\x2e\xfd\x1f\xbf\x71\xde\x6c\x9d\x41\x2d\x73\xf8\x06\xaa\xef\xe4\x8c\xfe\x0b\x16\x9f\x4d\xc7\xb8\xff\xcc\x43\x40\xcb\x74\x1e\x47\x30\x45\xfd\x81\xca\xc1\x8e\xa6\x8c\x75\x27\xcf\x18\xe8\x22\x1b\x1b\x85\x35\x82\x90\xba\x45\x41\xb0\x0a\xfb\x74\x5f\xa5\x0a\x68\xad\x8f\x51\x17\x13\xc8\x39\xa6\x13\xa6\xbf\xee\x75\x80\xbe\x1d\x8d\xee\x46\x0c\x54\x3a\xd6\x79\x4f\xd9\x54\xff\xa9\x7f\x2d\xc4\x79\x73\xbb\x7b\x5d\x71\xe0\xc1\x95\x36\x95\x11\x7a\x61\xbd\xa9\x00\xf5\xff\x91\xa4\x38\xd0\xa0\x1e\x07\xf7\x82\xb6\xfe\x3f\x60\xd4\xd9\xd7\xe3\x9c\x96\x13\xba\x86\x49\x19\x46\xed\x81\x39\xac\xf2\x4c\x13\x35\x3f\x04\x9e\xb7\xf1\x2e\x5b\x1c\x38\xd5\xee\xff\xa6\xbc\xad\x71\xe0\xae\x12\x84\x5e\xf3\x18\x59\x74\xb2\xd6\x0b\xcb\xb8\xee\x5c\x13\x84\xa5\xd7\xff\xd3\xc5\xe6\x00\x15\x86\x1f\x06\xfa\xd5\x31\x1f\x7e\x21\xe8\xc1\x51\x0f\x3d\xc2\x70\x9c\xf0\x09\x10\xb0\x27\x8f\x82\xd1\xd8\xf0\x8b\xe9\xf6\xaf\xff\x0f\x00\x00\xff\xff\xe5\x1f\x8c\x22\x6d\x6f\x00\x00")
+var _templatesServerParameterGotmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3d\x5b\x73\xdb\x36\xba\xcf\xab\x5f\xf1\xad\xce\xd9\x0c\xe9\x91\xc9\x9e\x3d\x9d\x7d\x70\xeb\xce\x24\xb6\xdb\x78\xda\x5c\x4e\x92\xf6\xe1\x64\x33\x5b\x58\x84\x24\x6c\x48\x82\x01\x20\x3b\x3a\x1a\xfe\xf7\x33\xb8\x91\x00\x09\x52\x54\xec\xa6\xed\xb4\xfb\xb0\xb5\x88\xdb\x77\x01\xbe\x3b\x90\xfd\x1e\x32\xbc\x22\x25\x86\xf9\x0d\x29\xb3\x8a\x91\x82\x08\x72\x8b\x2b\xc4\x50\x31\x87\xba\xde\xef\xd3\x13\x40\x25\xe0\xa2\x12\x3b\x10\x98\x0b\x3d\x80\x08\x42\x4b\x10\x54\x7f\x12\xb8\xa8\x72\x24\x30\x30\x5c\x51\xc8\x70\x85\xcb\x0c\x97\x4b\x82\x39\x30\xcc\x69\xbe\x55\xbd\x4f\xe1\xf2\x05\x3c\x7f\xf1\x06\x2e\x9e\x3e\x7e\xfe\xdd\x15\xbc\x79\x7a\xfd\x1a\x4e\xd2\xba\x9e\xed\xf7\x80\xcb\x0c\xea\x7a\x36\x73\x21\xa2\xd9\xee\x16\xe5\x24\x43\x82\x32\x09\xcc\x0c\x60\xbf\x3f\x05\xb2\x82\xe4\x29\xe2\xcf\x68\x86\xf3\x27\x34\xdb\xbd\x94\xc0\x72\xdd\x9e\xa6\x60\x86\x60\x90\xe3\x81\xde\xfc\x1b\x2f\x85\x42\x23\xc3\x39\x5e\xcb\x06\xd3\xc3\x60\x50\xc8\x79\x4c\x3f\x0d\x0e\xc8\x25\x30\x63\x70\x76\xae\x26\x49\x7e\x32\x53\x46\x8c\x6e\x05\x4e\xbe\xa5\xac\x40\x82\xc7\x5f\xa9\x4e\x7f\x3d\x87\x92\xe4\xb0\x9f\x01\x80\x44\x17\xce\x01\x55\x92\x02\x11\xc3\x7c\x21\xbb\xc4\x33\x80\x7a\xa6\xa7\xcd\x71\x29\xbf\xc7\x70\x7e\x0e\x5f\x98\x41\xfb\x3d\x24\xaf\xf0\x12\x93\x5b\xcc\x9e\xa3\x02\x43\x5d\x27\xfb\x3d\x54\x88\x2f\x51\x4e\xfe\x0f\x43\x62\xbe\xc2\xb9\xec\x4b\x56\x80\xca\x0c\xa2\x92\x0a\x48\x5e\x2f\x37\xb8\x40\xc9\x35\x7f\x82\x38\x7e\xb3\xab\x70\x0c\xc9\x35\x7f\xbe\xcd\x73\x74\x93\xcb\x31\x8f\x1a\xe2\x4a\x54\x14\x24\x9a\x8c\x38\xe7\xd8\xce\x25\xe9\xf9\x9a\x14\x55\x8e\x1d\x82\x7a\x44\xbe\x16\x58\xd3\xd8\x40\xac\xd8\x40\x59\x03\x80\x9c\x20\x27\x4b\xfc\x53\x43\x5b\xde\x02\x27\xc7\xca\x1e\x6e\x63\x8f\x5d\x88\x31\xb4\x03\xba\x72\xf9\xc6\x9b\xd5\xcc\xfe\x70\x16\x1f\x5b\xd9\xf4\xfc\xdc\xa4\x35\x2b\x36\xc7\x61\xce\x25\x60\xea\x30\x39\x1b\x39\x71\x11\xb1\xfb\xde\x41\x4c\x31\x64\x8c\x74\x0a\xbc\xc8\x21\xbe\xee\x75\xcd\xaf\x4b\x81\xd9\x0a\x2d\x71\xaf\xe5\xb5\x60\x18\x15\x71\xac\x97\x5e\x51\xa6\x28\x73\x5d\x66\xf8\xe3\x4f\x88\x49\xfc\xcf\xce\x81\xa1\x72\x6d\x8e\xcd\xbe\xc1\xc6\xa3\xb5\x9d\xce\x21\x82\xea\x48\x34\xd7\xde\x76\x26\x7d\x27\x77\x79\x7b\x38\x06\x27\x7c\x85\x3f\x6c\x09\xc3\x59\xcb\xb7\x81\x93\x44\x59\xdb\x39\x92\x8b\x5d\x6c\x48\x9e\x25\x2f\x91\xd8\x40\x5d\x2f\x24\x52\x15\x23\xa5\x58\xc1\xfc\x6f\x1f\xe6\xb6\xf9\x07\xba\xd4\xa7\x5d\x76\x09\xc2\x19\xc7\xcd\xba\x37\x0c\xa3\xf7\x1e\xb8\xea\xa0\x34\x90\x2d\x69\x29\x48\xb9\xc5\x7e\x97\x76\x77\xd6\xb3\xe0\x67\x5f\xa2\xf4\x00\x38\x42\xc4\x8c\x08\x19\x1f\xfe\xda\x8a\x1d\x87\xee\xee\xc6\x1e\x3c\x38\xbf\x19\x31\x35\x70\xf8\x5b\x86\xa4\x29\x94\xd4\x95\xe7\x72\x67\x13\x25\xaa\x48\x09\x62\x43\x38\xa8\x23\x38\xfb\xfc\x92\xc0\x3f\xdc\xc7\x0b\xdc\x67\xa8\x1a\x13\x0c\x87\x44\xc2\xe3\x2c\x53\x3a\x1a\xe5\x2f\x19\xad\x30\x13\x04\x87\x25\xc4\x40\x47\x5f\x60\xb8\x72\xba\x40\x55\x40\x4a\x5b\x91\xf2\x3d\xde\x1d\x23\x50\x82\xab\x77\xc5\x41\x7b\x76\x2c\x10\x9e\x10\x90\xd3\x79\x72\xa0\x27\x18\x24\x77\xf4\x9e\x99\xcf\x1b\x4e\x4d\x92\x16\x7a\x7a\xb5\x09\xae\xf9\xe3\x92\x96\xbb\x82\x6e\xb9\x59\xc3\xe0\xf0\x1d\x95\x5b\x02\xea\x3a\xf2\x76\xc1\x5b\x8f\x1c\xef\x06\x67\x8a\x9b\x51\x43\xa7\x5d\x6c\x59\x29\x5b\xc6\xe4\x4b\x70\x93\x0c\xf0\xb6\xd9\xb8\x91\x01\xe7\x19\xaa\xe4\xb7\x17\xb7\x98\x31\x92\xe1\x38\x24\xd6\x5b\x4c\x0e\x0a\xf5\x49\x4c\x9d\x2e\xe3\x07\xa5\x7b\x58\xae\xb7\x80\x1e\x21\xd5\xef\x23\xd7\x6f\x51\x0e\x0b\xa0\xef\xe1\xec\x3c\x00\xc4\x57\xb2\xa5\x47\x2a\xc5\xa5\x23\x38\xe1\x2c\xf5\xd7\x10\xf5\xbd\x9d\xd0\x39\x31\x47\xe9\x96\x09\x1a\x26\x44\xd1\xfa\x21\x10\xac\xc7\x68\xff\xdb\x32\xa0\x27\x29\x22\xa5\x7f\x0a\x54\xfd\xba\xda\xc7\x57\x3e\x41\xc5\xe3\x1b\xd6\xed\xca\xd7\xfc\xb1\x34\xca\x63\x97\x7b\xf1\x90\x0a\xea\x29\x0a\x52\xe6\xd2\x8f\x33\x30\x7d\x5e\x0a\xb4\x07\x20\xb4\xae\x05\xd1\x5f\xff\xfa\x12\xea\x5a\x52\xe5\x5e\x6e\x9e\xb7\x37\x2c\x16\x52\x31\x1b\x62\xde\x87\x8c\x86\x30\xcd\x54\x75\xad\x9c\xa6\x56\xbd\x15\xa8\x6a\x7d\xe9\x3f\x28\xcd\x07\x0e\x24\xb3\xfa\x87\x96\xbf\xea\xce\x6c\xce\xa6\x7f\x34\xbb\x6a\xdc\xb3\xd5\xc2\x18\xd1\x12\xd6\xb8\xc4\x8c\x2c\x81\xd8\xae\xbf\x02\x3a\x01\x59\xa3\x7f\xb8\x16\xb0\x13\xd6\x09\xf9\xc4\x3a\x06\x64\x22\x0a\xcf\x48\xa9\xa3\x0d\xc9\x33\xf4\xb1\x89\x3b\x18\x39\xbf\x44\x05\xf6\xb0\x78\x2d\x7f\x9c\x9d\x4b\x12\xfc\xe3\xcb\x48\x6a\x87\x2e\x52\x1d\x29\xf6\x14\xf1\x4b\xc2\x97\x8c\x14\xa4\x94\x8b\xb7\xd2\xad\x21\x78\xfb\xc9\x98\xc1\x1d\x2a\x9c\x34\x54\x68\xd7\xd2\xd6\xa3\x31\xc4\x37\x88\xbf\x64\x78\x45\x3e\x82\x54\xbe\x5b\x7c\xf5\xb1\x62\x98\x73\xc9\xb5\x39\x4d\xe6\xca\xac\x6e\xad\xd4\x6e\x97\xba\xbe\x68\x8f\xb4\xec\xd6\xef\xd0\xda\x8c\xb1\x13\x3d\x33\xe2\xa1\x21\x60\x5d\xcf\xd2\x54\x7b\xfa\xf2\xf7\x25\xae\x94\x25\x55\x98\xf6\x33\xd5\xe4\xf6\x0e\x58\xda\xb6\xf9\x08\x53\x6c\x88\x4d\x8b\xee\x7a\xfd\x63\xee\x18\xbb\x75\x00\x31\x67\x3f\x04\x11\x33\xed\x06\x31\xa7\x77\x08\x31\xd3\xfc\x40\x88\x35\xf3\x1d\x8f\xd6\x8f\x25\xf9\xb0\xc5\xa3\x98\x6d\xdb\x2e\x67\x20\xd8\x16\x87\x30\x72\xe6\x39\x0e\xa9\x5f\xfb\xb8\xc0\x81\xf3\x02\x0f\x79\x60\x8e\x64\xce\x55\xb9\x2d\x86\xb8\x22\xdb\xf4\x5e\xb3\xbd\x02\x5c\x91\x4d\x17\x88\xe3\xc8\x48\xc7\x69\x6c\x99\x1d\x36\xc7\x1e\x90\x33\xa7\x5e\x70\x5d\xb3\xe6\xd4\xb7\x0a\x27\x32\xca\x1b\x36\xc6\x2e\xab\xe5\x2e\xb6\x5c\xd0\x42\xeb\x7d\x81\xa5\xcb\x94\xbc\x16\x8c\x94\xeb\x28\xf6\x80\x73\x74\xe5\xa9\xa7\x2c\x7b\xd3\x9f\x4a\x6e\x3b\x98\x1c\xbf\x88\x47\x11\xf3\xcb\x72\xa4\xe1\xd8\x7f\xdc\xce\x0d\xdf\x4f\xdb\x63\x94\x5c\x73\xc5\xef\x6b\xa8\xeb\x15\xca\x39\x6e\xf7\xa5\x3c\xb5\xd3\x76\xa1\x34\x69\xbc\x7d\xd8\x6a\xd1\xd3\x46\x8d\x2e\x25\x6a\x43\xe9\x91\x0b\x5a\xde\x62\xa6\x31\xf5\x98\x88\x21\x79\x7d\x87\xd6\x6b\xcc\x34\x31\x60\x3e\x6f\xac\x8b\xde\xf6\xd6\x5d\xce\x7a\xfb\xd4\x9f\xa1\x1f\xcc\x56\x8a\xfa\x16\xb1\x52\x4a\xc8\x00\xf7\x17\xae\x9d\xe8\x82\x1a\x8d\x8f\xfb\x29\x6e\xad\xcc\x8e\x69\x68\x69\x47\x19\x4f\xae\x4b\x45\x16\x69\xbe\x1c\x21\x06\xe7\xb2\x6b\x13\xca\x99\x2f\x0e\xe0\x10\x0f\x65\x52\xfa\x9b\xcd\x98\x56\xef\x49\xf5\x12\x31\x8e\x63\x9b\x56\xab\x10\xe3\xa4\x5c\x03\xe1\xc0\xdf\x93\xaa\xc2\x99\xf2\x1a\xb9\xf2\xce\xb4\xbd\xaf\x43\x99\x26\x29\x75\x4f\x16\xdd\x4a\x1c\x1a\xd2\xaf\xb4\xa1\x9d\x28\x90\xa2\x43\xc3\x17\xbf\x25\xc6\x28\x44\x5c\xc3\x7f\x0c\x34\x89\xeb\x49\xa4\x86\x24\xd1\xc9\x7e\x6f\x66\x52\x86\x53\x98\x7b\x54\x92\xff\xe3\x0b\x9d\x0f\xec\x7b\x67\x26\x95\x98\x91\x25\x12\x38\x03\x41\xa1\xc4\x5c\xfe\xa5\x18\x56\x69\x87\xda\x70\xec\x30\x68\x07\xe8\xda\xf3\xaa\xfa\x7d\xda\xe8\x8e\x61\x69\x0c\x01\xe7\x89\xac\xe0\x16\x9b\x20\x95\x6c\x4d\xa2\x13\xc3\x94\x16\xbb\xd8\x0b\x55\x19\xd6\xdd\xe2\x66\x01\x69\xf0\xb8\x7c\x8b\x9d\xb8\x58\x47\x7a\xf5\x1d\x9b\x87\x20\x45\x57\xc4\xb4\x79\xb6\x4a\xc7\x19\x77\xc1\x54\x9b\xef\x87\xb4\x12\xb4\x40\x55\xb7\xbf\x2b\x44\x5b\x2b\x65\x38\xd8\x6e\xf5\x8b\x13\x56\xb7\x9f\xdc\x00\xba\xe7\xd1\xab\x29\xe4\x41\xb7\x91\xa1\x96\x50\xba\x5f\x81\x2a\xa9\x67\x7d\x6f\x8f\x9f\xc1\x92\x56\x3b\x29\x2f\x50\x9e\x03\xce\x71\x81\x4b\x15\x79\x1f\x14\xbc\x43\xca\xf7\x95\xa4\x76\x81\xde\x6b\x66\x36\x27\x6b\x61\x7c\xa7\x61\xa5\xad\x8e\x4c\x2f\xd0\xaf\xad\xfa\xa1\x41\x3f\xb5\x79\x80\xc1\x6e\x75\x7d\xd1\x04\xf2\x7c\xbd\x6d\xc3\x1c\x4e\x36\x57\x37\x0d\xc2\xd8\xdd\x49\x83\x70\x75\xdc\xed\x86\xd1\xc3\xb9\x64\xdd\xf9\x50\x72\x57\x1b\x4f\xf5\x68\x98\x3e\x34\xc7\x0d\x29\x33\xdc\x9b\xc0\x0b\xdd\x59\xaa\x98\xd4\xd0\x2f\x48\x13\x07\xc2\xc0\x29\x19\x00\x31\x98\x89\xb0\x30\x07\x32\xc6\x93\x40\xea\x25\x1b\x7c\x86\x05\xb2\x0a\xbe\xce\xb9\x67\xb6\x78\x12\x8c\xb1\x0b\xdb\xa1\xbc\xc2\xb4\xb4\x42\x77\x9f\x74\xad\xbd\x00\x0b\xdc\x1c\xe9\x04\x21\xf0\x76\xbf\x37\x67\x58\xa5\x74\x26\x0d\x6a\x63\x34\xfe\x01\x75\x77\x66\x5d\x5f\xbf\xda\xef\x6d\x7c\x6b\x58\xfa\x0e\x89\x6c\xcf\x8e\xbd\xe6\x2f\x6d\x49\x92\x83\x5c\x4b\x96\x56\x3e\x36\xfd\x9a\xfa\x8a\x5e\x58\xea\x90\x85\xd6\x3a\x49\xf6\xf7\x13\xc4\xf1\x3f\xbe\x8c\x07\x1c\x3b\x3d\xfe\xc5\x2a\xda\xef\xd5\x9e\x32\xc6\x4a\xb3\x81\x94\xb1\x22\x3f\x78\xd6\x94\xb5\x2d\xfb\x42\xb0\x71\x49\x16\xd6\x3a\x3b\xe0\xab\x86\x71\x74\xc4\xa6\xb2\x55\x94\x88\xf1\x94\x8f\xb1\x4e\x8e\xa8\x55\xf1\xc4\x90\x27\x80\x46\x15\xc6\x71\x82\xe7\xa0\xd8\x39\x3e\xc2\x68\x85\x6a\x5d\xcf\x6e\x11\x9b\xa8\x1d\x3d\xad\x38\x33\xfa\xae\x15\x39\xcf\x31\xce\xb8\xaa\xdd\x30\xc1\x06\xa7\x8e\xa3\xf5\xf6\xfe\xe5\xe7\x99\x27\x08\x3a\x57\x4f\x1e\xec\xae\x15\xe6\x90\xba\x54\x7c\x67\x78\xb9\x65\x5c\x9e\x1c\xa7\x06\x8f\xae\x74\x9d\x95\xaa\x8f\xf0\x8d\x55\xbf\x46\x44\x4f\xd9\x38\x2d\x96\xdd\xc6\x07\x31\x0b\xba\x9e\xc8\x05\xcd\x73\xbc\x94\x8b\x38\x3e\x89\xd5\x4c\x9d\xb6\x61\xb9\x35\x51\x95\xb5\x48\xbb\x10\x4e\xa2\x73\xcb\x22\x7e\x87\xd6\xc9\xeb\x2a\x27\xe2\xc9\x4e\xc3\x15\x4d\x9a\x61\x48\x71\x04\xb0\x8c\xdd\x6c\xcc\x51\xc6\xc6\xd1\xa6\x86\x47\x4b\x93\x27\xed\xa3\x33\x6c\xdb\xc1\x37\x6e\x3a\xf5\x18\x0b\x65\xca\x99\x6a\x12\x37\x93\xba\x4f\x3b\x32\x53\xb4\x11\x38\xea\x28\xe4\xb2\x77\xfa\x6a\x81\xa9\x1d\x70\x69\x86\x93\xd2\xb8\xe0\x51\x45\x39\x27\xd2\x7e\xb9\x23\x62\xe3\xfa\x7a\xb1\x2b\x4d\x1f\xd6\x12\xf3\xf7\xc0\x04\x43\xec\xf7\xc4\x09\xc7\x56\x52\x54\x2f\x69\x79\xaa\x4b\x40\x1f\x3d\x52\x3f\x24\xfd\x85\x14\xc2\x0d\x13\xba\x82\x2a\x6c\x60\x4e\x28\x6a\xf9\xd3\xf2\x04\x2f\x6d\xea\x4b\xa8\xe9\x56\xe7\xef\x6e\xbf\x69\x44\xdd\x98\x6a\x9a\xc2\x05\xcd\xb0\xce\xa4\xaa\x88\xce\xcd\x0e\xd6\xf4\x94\x6b\x9b\xed\x2b\x5b\xb3\x7e\x75\x79\xfd\x26\x99\xcd\x6c\x56\xe0\x82\x56\x3b\x46\xd6\x1b\x01\xa7\x75\xad\x95\xe2\x92\x16\xd2\x25\xef\xb4\x39\xd1\xdb\x59\x85\x96\xef\x91\x71\x84\x5f\x9a\xbf\x65\x43\x9a\xc2\x9b\x0d\xe1\xb0\x22\x52\xbe\x20\xee\x03\x23\x36\x18\x0c\x34\x20\x28\xcd\x13\xd9\xff\x2a\x23\x82\x94\x6b\x5d\x62\xa2\xc6\x15\x6a\xc5\x8a\xd1\x5b\x0c\xab\xad\x50\x53\x6d\x70\x09\x3b\xba\x05\x86\x4f\xd9\xb6\xf4\x66\xb2\x4b\x28\xb0\x51\x99\xcd\x66\xa4\xa8\x28\x13\x10\xcd\x00\xe6\xab\x42\xcc\xe5\x7f\x09\x55\xff\x29\xb1\x48\x37\x42\x54\xf3\x99\xfc\xb5\x26\x62\xb3\xbd\x49\x96\xb4\x48\xd7\xf4\x94\x56\xb8\x44\x15\x49\xf5\xae\x9f\x0f\x77\x60\xdb\x52\x90\x02\x1f\xee\x91\x72\x69\xb9\x10\xb1\x9b\xd0\xb5\x20\x59\x96\xe3\x3b\xc4\xc6\xe6\xe5\x82\x59\x84\x06\x3a\xdc\xa1\xf5\x48\xb3\xb5\xf8\xe7\xba\x92\x13\x34\xa5\x38\x24\x97\x78\x85\xb6\xb9\xb8\x36\xbf\x6d\x04\xa6\x69\x77\x1a\x62\xc5\xe6\xe7\xf8\x2e\x98\x8a\x37\x75\x38\x4b\x86\x91\xc0\x1c\x10\x94\xf8\x0e\xc6\x7a\xea\xc2\x4b\xbb\x1b\xf5\x47\x65\x50\xd0\x02\x1b\xa8\xb8\xca\x61\xa4\xa9\xd6\x58\x92\xf7\x99\x6e\xd0\x01\x54\x69\x01\x12\x41\xd4\xec\x59\x62\xad\x22\x33\xa4\xa4\xdd\xce\xda\xb6\xce\xa4\x30\xe6\x15\x5e\x26\xae\xed\xbd\xda\x96\xcb\x03\xa8\x45\xf1\x28\x3a\xfb\x03\x98\x98\x00\x36\x53\xbb\x33\x4d\x1d\xd0\xb5\x16\xc6\x02\x33\xae\x11\xf5\xe1\xd6\x0c\xd1\x76\x75\xe2\x57\x3b\x81\x35\x24\x9f\x22\x6e\x16\x72\x32\x4b\x6d\xbb\x51\x27\xdf\x92\x1c\xab\x09\x3a\x86\xe6\xf5\x65\x5d\xdb\xe1\xe7\x5e\x85\x5c\xd7\xeb\x6c\x5d\xd9\x21\x17\x34\xe2\xca\x03\xbc\xa0\xa5\x40\xa4\xe4\x90\xfc\x2f\x66\x14\xe6\xd1\x3f\xe7\x4e\x0a\x54\x7d\xb3\xa6\x8a\xda\xd9\x56\x4d\x5a\x9a\x30\x5b\xec\xc2\xe1\xc7\xb2\x40\x8c\x6f\x50\xfe\x06\x7f\x14\xd2\xb3\xc4\xc9\x3a\x81\x4b\x24\xf0\x42\xfd\xbf\x3c\x44\x0b\xb8\xdc\x32\xad\x78\x1a\x0d\xeb\xe3\xd0\x09\x91\x8f\x23\x32\x86\x83\x82\xbb\x09\xc1\x47\xfd\x7c\x9a\xa5\xa4\x32\x9d\x47\x10\x14\xe8\x3d\xe6\xa0\x97\x3a\x1a\x6a\x6b\x21\x74\x40\x8f\xb5\xbc\x3e\x06\x3c\x86\xd7\xdb\x1c\x31\x58\x53\x68\xee\x4e\xf5\x81\x3d\x00\x5f\xa3\xbe\x4c\xe2\x32\x3d\x81\x4b\xaa\xb6\x9d\xb3\xcd\x57\x8c\x16\xd0\x18\xa1\x99\x3d\x18\xa4\xb4\xe9\x07\xe3\xd6\x9d\xa4\x9d\x4d\x1c\xda\x8b\x56\x4d\x3a\x8c\x1c\xce\x94\x76\xf7\x5c\x03\x94\xde\x32\x5c\x48\x35\xb2\xde\xe9\xd3\xd7\xd9\x6f\x21\xd4\x7b\xe8\xfb\x3a\xfc\xf4\xc8\x15\xff\xcd\x69\x99\x34\xcb\x4e\x5b\x72\x80\x08\x91\xe3\xf9\x1e\xdc\x1d\x72\x3e\x45\xf3\x6b\x87\xd3\xce\x06\x99\xbe\x3f\xce\xac\xc7\xa1\x23\x35\x07\x76\x4e\xc7\xda\x73\x2d\xc9\xce\x16\xd5\x77\xf7\xf2\x1c\xa8\xd8\x60\x06\x4b\xc4\x31\x87\x48\x09\x00\xae\xea\xbc\x62\x78\xcb\x37\x74\x9b\x67\x6a\xb3\xd1\xe5\x72\xcb\xde\x8d\x2e\xe9\x17\x19\x1f\x0d\x8b\x84\xc0\xd6\x98\x0d\x1e\x8a\xee\x1a\xc1\xc0\x68\xa8\xdc\x0c\x20\x56\xe6\x59\x57\xd8\x07\xa5\xbc\x39\x67\x4b\xc4\xd8\x0e\x68\xe9\xef\xdb\xc1\x0d\xe7\x1d\x2e\xa7\x96\xe5\x9e\xb2\xdd\x8a\xf6\x90\x4e\x49\xfc\x13\xf5\xf6\xdd\xcd\x4e\xf4\xf3\xb5\x8e\x5c\x8a\x5b\xf0\x42\x02\xa6\xa7\xde\x28\x83\xe8\x68\xa9\x10\x07\x4e\xad\x33\x73\x1b\x2c\xed\x9c\x4e\x03\xfe\xcf\xfb\x7d\x03\x3e\x9f\x43\x24\x7b\x35\x48\xc4\x75\xfd\x73\xbc\x80\x47\x3e\x41\xa0\xa1\xc8\x58\xdd\x7a\x9a\x42\x85\x4a\xb2\xe4\x12\x04\x69\xa7\x90\x15\x31\x3e\x15\x91\xc2\x52\x59\x72\xde\x88\x82\xaf\x55\x3a\xbc\x10\xc9\x6b\x0d\x53\x34\x37\xfd\x7c\x53\x42\x25\xbe\x1a\x63\x03\x7a\xd0\x9d\xc1\xdf\x6e\xe7\x8b\x5e\x99\xbc\x02\x27\x2a\xf8\xda\xfd\xdc\xe1\x82\x5b\x7f\xd2\xcf\xe7\xd9\x56\x2f\xee\xd9\xf6\x30\x4e\xe7\x88\x75\xb5\x0f\x99\x40\xfd\x53\xd1\x7a\x75\x5e\x7d\xae\xc4\xec\x97\x2f\x11\x7b\xe4\x96\x88\x05\xd9\xbe\x68\xa9\xe1\x78\x55\x20\xbd\x39\x53\x9b\x35\x6c\x56\xdb\x33\x27\x85\xa1\x34\x84\x6f\xe8\xb6\xcc\x6c\xf8\x53\x57\xea\x2b\xaf\x6c\xb3\x2d\x50\xe9\x95\xc8\xd2\x0a\x6b\xd3\x48\xae\x21\x76\x15\x59\xa2\x3c\x57\x3e\x19\xc7\x80\x18\x06\x7a\x23\xa7\xc6\x99\x56\xd0\x08\xa4\x9b\xa4\x5c\x7f\xcc\xc5\x2c\x4d\xe5\x30\xe3\x72\x9d\x39\x96\xaa\xd4\x70\x66\x89\x99\x52\x07\x63\xe0\x73\xc1\xb6\x4b\x01\x7b\x93\x1e\x7e\xfa\xe6\xcd\x4b\x30\x2b\x80\x2e\x53\x98\x81\xfa\x6a\x3f\x9e\xb8\x40\xc0\xcf\xf2\x74\x9d\xcd\x4f\xe7\x3f\xcf\xc2\xd6\x70\x7a\x62\x36\xc3\x25\x96\x4c\xac\x44\xe3\x64\xdf\xe4\x74\xf9\xbe\xf1\x6b\x7b\xcd\x6e\x4d\x5f\x27\x1e\x62\x7f\xe9\x62\xc5\x6e\xdf\x67\xe8\x23\x29\x74\xc1\x1c\x80\xf9\x61\x77\x59\x72\xf5\x71\x99\x6f\x39\xb9\xc5\x6d\xaf\xaf\x3d\xce\x3b\xc3\x7b\x13\x93\xd2\x99\x58\xff\x08\x4c\xdc\xf4\xfa\xa6\x33\x71\xd3\xd0\x9b\x78\x9b\x0b\x52\xe5\xf8\xc5\xca\xcc\x6d\x7e\xc3\x8b\x95\x29\x36\x75\x3b\x04\xf0\xfd\x01\x97\x6b\x15\xfc\xd1\x18\x83\xfe\xdd\x14\xaa\x36\xcd\x01\x8c\xbc\xa1\xa4\xf4\x87\x3a\xcd\xdd\xa1\x2f\x95\xac\x2e\xf5\x40\xf3\xe3\xcc\x04\x1f\x6c\x4b\x00\x52\xa7\xe2\x5a\x02\x1a\x2e\xa8\x0d\x80\xe9\x8e\x23\x25\x84\x2b\x8c\xbb\xe3\x3a\xa5\xaf\x00\xfa\x43\x78\xdb\x38\xf1\xb1\x19\xc0\xb5\x41\xc6\xf9\xda\x1d\x10\xce\x3b\xb4\x5f\xc1\x4b\x55\xf4\x3b\x77\xe7\xeb\x4a\x4b\xf3\xc3\x2f\xbf\xea\x59\x3e\xad\xac\x3e\x49\x67\x9e\x57\x69\x4c\x21\x6d\x39\x75\x2e\x45\x7c\xe6\xba\x5c\xc7\xae\x75\xcd\xb9\xfe\xa5\x81\x23\xaf\x0c\x74\x3a\x59\x40\x46\x16\xf7\x55\x5f\x6d\x05\xfc\x13\x52\x66\x56\xa4\xdd\x50\xb1\x81\x1b\x52\x66\x5c\x01\x62\xe3\x33\x1c\x90\xf2\x7c\x31\x17\x0b\x20\x02\x10\xe7\xdb\x02\x73\x10\x1b\x24\x60\xa9\xeb\xba\x40\x6c\x48\xb9\xe6\xa0\x2c\x6e\x25\xd7\x10\x98\x04\x8c\x84\x37\xd2\x0e\x67\xf2\x0a\xaf\x09\x17\x6c\x17\xeb\x68\xae\x73\xc1\x22\x4d\xdd\x2a\x3d\x1b\x4a\x11\x70\x47\xf2\x1c\xb6\x1c\x2b\x6b\x51\xc5\xe2\x0a\x2c\x36\x34\x03\xa9\x31\x78\x62\x74\xc1\x1b\x0a\xb8\xe4\x5b\xd6\x0d\xc6\x2c\x74\x70\x4e\x4b\xfa\x62\xcb\x05\x6c\xd0\x2d\x86\x1b\x8c\x4b\x37\x4e\xa3\x5d\x9e\x83\xa1\x96\x1b\xbc\xa2\x0c\x6f\x50\x99\x25\x3a\x38\x13\x05\x2e\x85\xc0\xc9\xc8\x24\xb1\x4b\xef\x88\xf9\x2a\x65\x01\xea\xb2\x0e\x9c\xb4\xd1\xb7\xe4\x19\x12\xcb\x0d\xce\x5e\xc9\x06\x4b\xb4\xbd\x09\xda\x30\xcc\xe1\xed\x3b\xf5\x6d\x36\x70\x41\xc5\x55\x5f\xe7\x60\xbb\x99\x33\xf7\x3f\x5b\xcc\xda\xab\x6a\x1f\xb8\x4a\x95\xea\x00\xa0\x0e\x0e\xf3\x88\x25\x3f\xbe\xfa\x21\x51\x1d\xa3\xd8\xc9\xba\x79\xf3\xc8\x73\xdd\x4c\xd3\xda\xa8\x4c\x17\x41\x6a\x09\x8e\x98\x90\xdd\xa2\xff\xfe\x3b\x7c\xfd\x35\xfc\xfd\x8b\xae\xb5\xf9\x97\xbf\xb4\x75\x8e\x8a\x26\x57\x8c\x3d\xa7\xa2\x19\xdc\xbb\x48\xe9\xa6\x04\x9e\xe3\xbb\xe8\xcb\x2f\xbe\x58\xcc\x7b\xa6\x62\xdd\x18\xeb\x3e\x50\x0a\x96\xf1\x9b\x9a\x13\x17\x98\xfd\xa5\xf6\x29\xa1\x28\xe7\x86\xc4\x56\x59\x98\xb2\xb2\x73\x1c\xb4\xbe\x06\x0c\x8a\x59\x27\x74\xe6\xba\x08\x4d\x99\x74\xcb\x54\xc9\xd3\xe0\x56\x5c\xc0\x87\xcd\xfb\x81\x96\x7f\x49\x50\x3f\xf0\xe4\x3b\x2c\x5e\x7c\xdf\xad\x4a\x1c\xbf\x89\x26\x05\x47\x40\xe0\x46\xc7\x03\x71\xbf\x3b\x6b\xbe\x87\x26\xc1\xb7\xe4\x60\x43\xeb\x8d\x93\x43\x83\x63\x42\xa8\x0f\x48\x98\xe3\xc1\x79\x48\xc2\x3c\xc5\x28\xc3\xcc\x92\xe6\x13\x31\x48\xf4\x2c\x6f\xd5\x91\xbd\x40\x25\x2d\xa5\x25\xaf\x3f\x7e\x8f\x77\x1e\x9d\xde\x2d\x94\xf5\xf1\xb0\x58\x34\xb2\xc7\xb9\x69\x60\x5a\xfc\xc0\x72\xef\x82\x51\xf8\xda\x91\x06\x7d\xd1\x8a\x0b\xb9\x80\x9c\x6a\x80\xe5\x16\x6e\x7b\xfc\x5c\xdf\xeb\x51\x57\xa0\x3d\x23\x9c\x93\x72\x2d\xa7\x6b\x0f\xfd\x30\xc6\xae\xe4\x81\x39\xc3\x28\x23\xe5\x5a\x67\xa5\xfe\xf6\x01\x56\x88\xe4\xd2\x11\x90\x22\xa9\x9b\xf8\x8c\x7c\xbc\x62\x7b\x39\xc0\xb9\xb9\x1f\x82\xd8\x97\x96\xe7\x41\xc0\x0d\x8b\x54\x32\xe3\x94\x56\xba\xe2\x56\x37\xc3\xcd\x56\x00\xad\xf4\x13\x05\x1a\xce\xc6\x37\x9b\x75\xfc\xf2\xee\x62\x47\x6e\xbc\x63\x19\x1a\xda\x65\x7d\x07\x2b\x4d\xfb\x0e\x96\x25\xeb\x3f\x4b\xfd\x6e\x97\x06\x7e\x78\x87\x6a\xac\x8e\xbf\x3f\xff\xc8\xea\x07\xb5\x3b\x2e\x91\x40\x67\x41\x7c\x16\xa0\x31\x0a\xb7\xea\xb6\xda\x2d\xe2\x37\x56\xe7\x2a\x1b\x90\x29\xab\x6c\x5c\xfa\xad\xb2\x07\x15\x7a\x9f\x02\xc7\xfd\xef\x30\x37\x1a\x36\x3d\x51\x7f\x26\xad\x74\x68\xef\x14\x74\xfa\x28\x2d\xab\x75\xac\xd3\x67\x28\xf6\xf7\xa7\x02\xfe\x53\x01\xff\xe1\x14\xb0\x89\xd2\xb7\x4a\xf8\x8f\x2c\x67\x02\x76\x7c\x27\x9b\xd1\x3c\x0d\xd2\x84\x28\x4e\x6d\x59\xa1\x95\xfe\x4f\x11\xd7\xcf\x36\xc4\x9d\xab\x1b\x1d\x57\xdf\xad\xed\x9c\xaa\x62\x58\xf2\xc4\x7b\x2b\xc1\xa9\x6b\xca\xf0\x0a\x33\xd3\x21\xb9\xc8\x29\xc7\x51\x1c\xb8\x75\xd0\x0b\x4a\x38\x9f\xae\x3e\x56\x94\x89\xb6\x70\xeb\x86\x66\x3b\xf7\x46\xa2\xa0\xa6\x36\x47\x01\x94\xa8\x07\xb9\x78\x5b\xae\xd3\x66\x33\xf6\x7b\xc8\x18\xad\x6c\x53\x5b\x33\xdc\x7b\xa5\x43\x95\x79\x36\xd4\x8e\x34\xf8\x96\x8d\x17\xb4\xe4\xdb\x02\x1b\x5f\x2d\x74\x8b\xce\x25\x6f\xbf\xec\xac\xb5\x82\x08\x4d\xae\x5e\x7c\xeb\x0c\x52\xdf\xef\xf1\xa6\xd2\x7c\x6e\x89\xeb\xdf\x81\x71\xf2\x71\x23\x2f\x05\x75\x79\x77\x8b\x58\xf3\x8a\x89\x53\x60\x0d\x5e\xc2\xc8\xa7\x89\xfd\xa3\x21\xd9\x23\x39\xc1\x90\x3f\xfc\x49\x34\x9a\xf4\x06\xd5\x41\x9b\xf5\x10\x19\x1b\x3a\xba\x66\x57\x80\x9c\xe3\x16\xb6\x0a\x09\x5c\xc9\x9f\x0f\x01\x54\xdf\xd2\x1e\x22\x5f\x9f\xfb\x03\xe9\xaa\x1e\x82\x7e\x3d\x61\xe7\x45\xd7\x64\xa4\x14\xd1\x2f\x98\x76\x40\x72\xe7\xff\x7c\xbc\x0b\x40\x38\xfc\xc3\x7d\xa5\xaa\xad\xaa\xf6\x23\x35\x17\xb4\xa8\x28\x27\xc2\xa9\xfe\xd6\x8c\x65\x98\x27\x49\x62\xd7\x34\x83\x4a\x92\xcf\xcc\xfd\x99\xff\x5c\xe6\x88\x73\x25\x9b\xce\xce\x21\xea\x08\xd0\xd8\xa4\x07\x83\x21\x19\x7b\x3d\xc4\xf5\x38\x67\x69\x0a\x03\xaa\xc9\x44\x58\x7d\xff\x48\x1d\x5e\xd5\xdc\x84\x34\x37\x18\x68\x99\xef\x80\x6f\x2b\x23\x59\xdd\xcb\x26\xb4\x54\x33\x70\x95\x2d\x6b\xd3\x15\x52\x4c\x37\x79\x8f\x03\x41\x4a\x07\xe5\x36\x3e\x39\xa8\x4f\x55\x31\xa4\x0d\xc7\x29\xfb\x79\x01\x1b\x65\x67\xc0\x89\xff\xdd\xb8\x5c\x4e\xb4\x12\xdc\x97\x6d\x5b\x60\xbb\x09\x1c\x00\xae\x5e\xfd\xd0\xf6\x00\xc9\x71\xf2\x1a\xe3\xf7\xd1\x17\x0b\x29\x5e\xe4\x9f\x57\x65\xa6\xcf\x55\xa8\xf1\xb5\x40\x4c\xc4\x43\xd5\xb7\x5e\xd2\xa7\x15\x8f\x72\x41\xf8\x5a\xbd\x33\xd2\x36\x7a\x62\xcc\xdd\x5d\x57\x1f\x97\x18\x67\xdc\xe4\xb3\x8e\x7b\x0c\xc4\xcb\x29\x2d\x40\xbd\x62\x10\x8f\x57\x0c\x7b\x39\xae\x0e\xcc\xdf\x98\xb7\x51\x26\xc3\xac\x93\x7b\xc7\xc2\xec\x30\xe8\x30\xcc\xde\xa9\xf2\x4b\x83\xec\xcd\xaf\xc6\x02\xf2\xd1\xd4\x0f\x79\x8d\x56\x7b\x4c\x39\x53\x7e\xd6\x22\x70\xb8\x74\x3a\xb9\x93\xde\x3a\x14\xcc\x3f\xea\x9c\x30\x74\x27\x9d\x77\x78\xfb\x4e\x17\xa6\x2c\x60\x83\xf8\xf7\x78\x07\x37\x94\xe6\xcd\x0d\x34\x18\xc8\x87\xec\xfb\x46\x97\xcd\x35\x35\x7e\x54\xdc\x57\x25\x64\x05\x7f\x35\xcb\x0c\x6d\x83\x4f\x30\x53\x0c\x2a\x2e\xc3\x7b\x2c\x57\x79\x08\x74\x67\x4a\x06\x2d\x30\x4a\x4c\x9b\xd1\x8e\xa8\x56\x50\xa1\x3b\x69\x8a\xea\xc6\xb7\x6e\xc7\xd3\xff\x7a\x67\x56\xd2\x09\xf9\x36\x14\xa3\x19\xd3\xd5\x9e\x61\x8f\x3b\x4d\xe1\x71\x9e\xd3\xbb\xab\xa2\x12\x3b\x15\x6b\xd7\xe3\x3b\x1f\x03\x59\x48\xdf\x55\x4d\x53\x78\xd9\xec\x1f\xc2\x55\x05\x38\xc9\x74\xe9\xf8\x92\x96\x3a\xa5\xa4\x5e\x24\x94\x3b\x4a\x6c\xb0\x36\xb1\xfc\x8b\x49\x10\xc8\x36\x06\xf9\xa8\x1b\x3b\x30\xc6\xad\x7b\x30\xf4\x4e\xab\xb9\xda\x78\x14\x4f\xc3\x8e\x4d\xe7\x9d\x01\x80\x9e\xa3\x17\x41\x17\x03\x88\xd5\x75\x7d\x0d\xbc\x05\x29\x1e\xc3\x43\x71\xff\x1c\xe6\x73\xd8\x4b\x16\xeb\xe7\xef\x4d\xb2\xaf\x42\x9c\x3b\x75\x75\x8e\xb2\x1b\x2c\xaa\x49\x53\x9b\x2b\xb6\x93\xb4\xe9\xbd\x8a\xe1\x5b\x42\xb7\x3c\xdf\x79\x99\xbe\x9b\x9d\xc9\xf3\x05\x4e\x75\xd4\xb9\x57\xe6\xc8\x33\x9f\x2a\x7d\x0e\x7b\xef\xad\xf8\x4f\x82\xf4\x5e\x63\x91\x3c\xf8\x05\x1f\xf6\xe8\x36\xb6\x2f\x11\x80\x59\xd9\x38\xa6\xa1\x07\x23\xce\xc3\xa1\xec\x06\x69\x85\x5a\xb0\x14\xae\x2f\xaf\xd3\xd4\x2b\x04\x78\xe8\xb7\x53\xe0\xf7\x40\x47\xef\x85\xca\x6e\x6d\x81\x6f\x34\xb6\xbe\xbd\x15\x15\x96\x03\x7e\x5e\xdf\x79\x75\xc5\x01\xca\x29\x50\x94\x4c\x19\x7a\xaf\xeb\x20\x83\x19\xba\x1b\xdc\xe8\xe6\x10\xfa\x17\x2b\x3f\xf9\x79\xca\x68\xf0\x36\xf6\x88\x3c\xea\x94\xe7\x59\x53\x63\xa0\xf2\xfb\x78\x9b\x41\x5f\x95\x9b\x6e\x39\x68\x5b\xfd\xb1\x2e\x12\x97\xa6\x78\x25\x37\x6f\x06\x68\xb9\xa4\x4c\xe5\x6b\x04\x85\xfe\x1d\xde\xf9\x40\x65\xcc\x1c\xa2\xa6\x06\x5d\x50\x98\x2f\xf9\xed\x5c\xdf\x37\x52\xa2\x32\xfe\x4d\x9a\x2a\x1d\x4f\xb2\x67\x8c\x3c\xa4\x21\x32\x2e\x85\xf1\x87\x00\x55\xe7\xca\x3b\x99\x1b\x25\xa4\x2e\xa6\x05\xaf\x54\x07\x8b\x9a\xa6\x5d\x1a\x3f\x6b\x2c\x9a\x8e\x68\x3c\x6d\x6e\xd8\x7c\xb8\x0d\x87\xe5\x1a\xc3\x69\xd8\x6c\x1a\x1a\x1a\x36\xa3\xe0\x14\x94\x21\x65\xcd\xa8\x5f\x04\xdb\xc0\x1d\xef\x01\x28\x03\x97\x32\x0f\xde\xe7\x36\x9b\x4a\x85\x1c\x0f\x99\x48\xe3\xf7\xb2\x83\x37\xb2\x9d\x17\xae\xef\xbd\x35\xa7\x2d\x19\x30\xaa\xd4\x39\x39\x1a\xe8\xc0\xdd\xaa\x5f\xc3\x14\x0a\xdf\x1f\x18\xbf\xdd\xde\xec\xb0\x41\xad\x74\xf8\x1a\xab\xef\x1d\x8d\xfe\x4b\x1b\x9f\x4d\x27\xb9\xff\x1c\x45\x40\x2b\x75\x1e\x62\x30\x37\x03\x02\xe5\x87\x1d\xcd\x1a\xeb\x4e\x9e\xf1\xd0\x45\x36\x36\x0a\x6e\x04\x21\x75\x15\x83\x60\x15\x2f\xea\x3e\x94\x15\xd0\x72\x9f\xa2\x5e\x26\x90\x73\x4c\x87\x4c\x7f\x70\xec\x00\x7d\x3b\x16\x80\x1b\x6a\x50\x39\x5d\xe7\x89\x67\x53\x42\xa8\xfe\x55\x13\xe7\x19\xf0\xee\x9d\xc7\x81\xc7\x5d\xda\x7c\x48\xe8\xd1\xf7\xa6\x8c\xd4\xff\x37\x9e\xe2\x40\x83\x7a\xaf\xdc\x8b\xf8\xfa\xff\xfe\x52\x67\x5f\x8f\x73\x5a\x4e\xe8\x1a\x32\x65\x18\xb5\x07\xe6\xb0\x4a\x56\x4d\xb4\x14\x20\xf0\x94\x8e\x77\x63\xe3\xc0\xa9\x76\xff\x37\xe5\x1d\x8f\x03\x17\x9e\x20\xf4\x72\xc8\xc8\xa2\x93\x95\x63\x58\xc6\x75\xe7\x9a\x20\x2c\xbd\xfe\xf7\x17\x9b\x03\x54\x18\x7e\x84\xe8\x17\xc7\x7c\xf8\x35\xa2\x07\x47\x3d\xf4\x92\xc3\x71\xc2\x27\x40\xc0\x9e\x3c\x0a\x86\x71\xc3\x8f\xb8\xdb\xbf\xfe\x3f\x00\x00\xff\xff\x0b\x31\xa8\x41\x2c\x70\x00\x00")
 
 func templatesServerParameterGotmplBytes() ([]byte, error) {
 	return bindataRead(
@@ -722,8 +722,8 @@ func templatesServerParameterGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/parameter.gotmpl", size: 28525, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xce, 0xdb, 0x28, 0x16, 0xd7, 0xc8, 0x88, 0x3e, 0x78, 0x29, 0x56, 0xf2, 0xd8, 0x96, 0x12, 0x85, 0xe5, 0x5a, 0x3a, 0x1b, 0x7b, 0xf8, 0xe5, 0xe0, 0xa2, 0x60, 0xd, 0x7d, 0x5f, 0x68, 0x63, 0x5a}}
+	info := bindataFileInfo{name: "templates/server/parameter.gotmpl", size: 28716, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
+	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfb, 0xdf, 0x90, 0xdc, 0x5, 0x6d, 0x4, 0xa4, 0x79, 0x5f, 0x5c, 0x86, 0x82, 0x60, 0x89, 0xc9, 0x42, 0xb5, 0xfe, 0xa8, 0x35, 0x50, 0x8e, 0xd6, 0x4e, 0xb9, 0x11, 0x62, 0xf2, 0x75, 0x39, 0x9b}}
 	return a, nil
 }
 
@@ -978,84 +978,49 @@ func AssetNames() []string {
 
 // _bindata is a table, holding each asset generator, mapped to its name.
 var _bindata = map[string]func() (*asset, error){
-	"templates/client/client.gotmpl": templatesClientClientGotmpl,
-
-	"templates/client/facade.gotmpl": templatesClientFacadeGotmpl,
-
-	"templates/client/parameter.gotmpl": templatesClientParameterGotmpl,
-
-	"templates/client/response.gotmpl": templatesClientResponseGotmpl,
-
-	"templates/contrib/stratoscale/client/client.gotmpl": templatesContribStratoscaleClientClientGotmpl,
-
-	"templates/contrib/stratoscale/client/facade.gotmpl": templatesContribStratoscaleClientFacadeGotmpl,
-
-	"templates/contrib/stratoscale/server/configureapi.gotmpl": templatesContribStratoscaleServerConfigureapiGotmpl,
-
-	"templates/contrib/stratoscale/server/server.gotmpl": templatesContribStratoscaleServerServerGotmpl,
-
-	"templates/docstring.gotmpl": templatesDocstringGotmpl,
-
-	"templates/header.gotmpl": templatesHeaderGotmpl,
-
-	"templates/model.gotmpl": templatesModelGotmpl,
-
-	"templates/modelvalidator.gotmpl": templatesModelvalidatorGotmpl,
-
-	"templates/schema.gotmpl": templatesSchemaGotmpl,
-
-	"templates/schemabody.gotmpl": templatesSchemabodyGotmpl,
-
-	"templates/schemapolymorphic.gotmpl": templatesSchemapolymorphicGotmpl,
-
-	"templates/schematype.gotmpl": templatesSchematypeGotmpl,
-
-	"templates/schemavalidator.gotmpl": templatesSchemavalidatorGotmpl,
-
+	"templates/client/client.gotmpl":                              templatesClientClientGotmpl,
+	"templates/client/facade.gotmpl":                              templatesClientFacadeGotmpl,
+	"templates/client/parameter.gotmpl":                           templatesClientParameterGotmpl,
+	"templates/client/response.gotmpl":                            templatesClientResponseGotmpl,
+	"templates/contrib/stratoscale/client/client.gotmpl":          templatesContribStratoscaleClientClientGotmpl,
+	"templates/contrib/stratoscale/client/facade.gotmpl":          templatesContribStratoscaleClientFacadeGotmpl,
+	"templates/contrib/stratoscale/server/configureapi.gotmpl":    templatesContribStratoscaleServerConfigureapiGotmpl,
+	"templates/contrib/stratoscale/server/server.gotmpl":          templatesContribStratoscaleServerServerGotmpl,
+	"templates/docstring.gotmpl":                                  templatesDocstringGotmpl,
+	"templates/header.gotmpl":                                     templatesHeaderGotmpl,
+	"templates/model.gotmpl":                                      templatesModelGotmpl,
+	"templates/modelvalidator.gotmpl":                             templatesModelvalidatorGotmpl,
+	"templates/schema.gotmpl":                                     templatesSchemaGotmpl,
+	"templates/schemabody.gotmpl":                                 templatesSchemabodyGotmpl,
+	"templates/schemapolymorphic.gotmpl":                          templatesSchemapolymorphicGotmpl,
+	"templates/schematype.gotmpl":                                 templatesSchematypeGotmpl,
+	"templates/schemavalidator.gotmpl":                            templatesSchemavalidatorGotmpl,
 	"templates/serializers/additionalpropertiesserializer.gotmpl": templatesSerializersAdditionalpropertiesserializerGotmpl,
-
-	"templates/serializers/aliasedserializer.gotmpl": templatesSerializersAliasedserializerGotmpl,
-
-	"templates/serializers/allofserializer.gotmpl": templatesSerializersAllofserializerGotmpl,
-
-	"templates/serializers/basetypeserializer.gotmpl": templatesSerializersBasetypeserializerGotmpl,
-
-	"templates/serializers/marshalbinaryserializer.gotmpl": templatesSerializersMarshalbinaryserializerGotmpl,
-
-	"templates/serializers/schemaserializer.gotmpl": templatesSerializersSchemaserializerGotmpl,
-
-	"templates/serializers/subtypeserializer.gotmpl": templatesSerializersSubtypeserializerGotmpl,
-
-	"templates/serializers/tupleserializer.gotmpl": templatesSerializersTupleserializerGotmpl,
-
-	"templates/server/builder.gotmpl": templatesServerBuilderGotmpl,
-
-	"templates/server/configureapi.gotmpl": templatesServerConfigureapiGotmpl,
-
-	"templates/server/doc.gotmpl": templatesServerDocGotmpl,
-
-	"templates/server/main.gotmpl": templatesServerMainGotmpl,
-
-	"templates/server/operation.gotmpl": templatesServerOperationGotmpl,
-
-	"templates/server/parameter.gotmpl": templatesServerParameterGotmpl,
-
-	"templates/server/responses.gotmpl": templatesServerResponsesGotmpl,
-
-	"templates/server/server.gotmpl": templatesServerServerGotmpl,
-
-	"templates/server/urlbuilder.gotmpl": templatesServerUrlbuilderGotmpl,
-
-	"templates/structfield.gotmpl": templatesStructfieldGotmpl,
-
-	"templates/swagger_json_embed.gotmpl": templatesSwagger_json_embedGotmpl,
-
-	"templates/validation/customformat.gotmpl": templatesValidationCustomformatGotmpl,
-
-	"templates/validation/primitive.gotmpl": templatesValidationPrimitiveGotmpl,
-
-	"templates/validation/structfield.gotmpl": templatesValidationStructfieldGotmpl,
-}
+	"templates/serializers/aliasedserializer.gotmpl":              templatesSerializersAliasedserializerGotmpl,
+	"templates/serializers/allofserializer.gotmpl":                templatesSerializersAllofserializerGotmpl,
+	"templates/serializers/basetypeserializer.gotmpl":             templatesSerializersBasetypeserializerGotmpl,
+	"templates/serializers/marshalbinaryserializer.gotmpl":        templatesSerializersMarshalbinaryserializerGotmpl,
+	"templates/serializers/schemaserializer.gotmpl":               templatesSerializersSchemaserializerGotmpl,
+	"templates/serializers/subtypeserializer.gotmpl":              templatesSerializersSubtypeserializerGotmpl,
+	"templates/serializers/tupleserializer.gotmpl":                templatesSerializersTupleserializerGotmpl,
+	"templates/server/builder.gotmpl":                             templatesServerBuilderGotmpl,
+	"templates/server/configureapi.gotmpl":                        templatesServerConfigureapiGotmpl,
+	"templates/server/doc.gotmpl":                                 templatesServerDocGotmpl,
+	"templates/server/main.gotmpl":                                templatesServerMainGotmpl,
+	"templates/server/operation.gotmpl":                           templatesServerOperationGotmpl,
+	"templates/server/parameter.gotmpl":                           templatesServerParameterGotmpl,
+	"templates/server/responses.gotmpl":                           templatesServerResponsesGotmpl,
+	"templates/server/server.gotmpl":                              templatesServerServerGotmpl,
+	"templates/server/urlbuilder.gotmpl":                          templatesServerUrlbuilderGotmpl,
+	"templates/structfield.gotmpl":                                templatesStructfieldGotmpl,
+	"templates/swagger_json_embed.gotmpl":                         templatesSwagger_json_embedGotmpl,
+	"templates/validation/customformat.gotmpl":                    templatesValidationCustomformatGotmpl,
+	"templates/validation/primitive.gotmpl":                       templatesValidationPrimitiveGotmpl,
+	"templates/validation/structfield.gotmpl":                     templatesValidationStructfieldGotmpl,
+}
+
+// AssetDebug is true if the assets were built with the debug flag enabled.
+const AssetDebug = false
 
 // AssetDir returns the file names below a certain
 // directory embedded in the file by go-bindata.
diff --git a/generator/templates/server/parameter.gotmpl b/generator/templates/server/parameter.gotmpl
index ae3d1f62..b5399bc4 100644
--- a/generator/templates/server/parameter.gotmpl
+++ b/generator/templates/server/parameter.gotmpl
@@ -26,7 +26,7 @@
       {{- if .Schema.Items.IsNullable }}
     if body[{{ .IndexVar }}] == nil {
         {{- if .Schema.Items.Required }}
-        res = append(res, errors.Required({{ .Child.Path }}, {{ printf "%q" .Child.Location }}))
+        res = append(res, errors.Required({{ .Child.Path }}, {{ printf "%q" .Child.Location }}, body[{{ .IndexVar }}]))
         break
         {{- else }}
       continue
@@ -62,7 +62,7 @@
       {{- if and .Schema.AdditionalProperties.IsNullable (not .IsMapNullOverride) }}
     if body[{{ .KeyVar }}] == nil {
         {{- if .Schema.AdditionalProperties.Required }}
-        res = append(res, errors.Required({{ .Path }}, {{ printf "%q" .Location }}))
+        res = append(res, errors.Required({{ .Path }}, {{ printf "%q" .Location }}, body[{{ .KeyVar }}]))
         break
         {{- else }}
         continue
@@ -208,7 +208,7 @@ if err := validate.EnumCase(
       {{- if and .Child.IsNullable }}
     if {{ varname .Child.ValueExpression }}V == nil {
        {{- if .Child.Required }}
-       return errors.Required({{ .Child.Path }}, {{ printf "%q" .Child.Location }})
+       return errors.Required({{ .Child.Path }}, {{ printf "%q" .Child.Location }}, {{ varname .Child.ValueExpression }}V)
        {{- else }}
         continue
        {{- end }}
@@ -260,7 +260,7 @@ for {{ if .Child.NeedsIndex }}{{ .IndexVar }}{{ else }}_{{ end }}, {{ varname .C
     {{- if and .Child.IsNullable (not .IsMapNullOverride) }}
     if {{ varname .Child.ValueExpression }}V == nil {
        {{- if .Child.Required }}
-       return errors.Required({{ .Child.Path }}, {{ printf "%q" .Child.Location }})
+       return errors.Required({{ .Child.Path }}, {{ printf "%q" .Child.Location }}, {{ varname .Child.ValueExpression }}V)
        {{- else }}
         continue
        {{- end }}
@@ -453,7 +453,7 @@ func ({{ .ReceiverName }} *{{ pascalize .Name }}Params) BindRequest(r *http.Requ
     if err != nil {
         {{- if .Required }}
       if err == io.EOF {
-        err = errors.Required({{ .Path }}, {{ printf "%q" .Location }})
+        err = errors.Required({{ .Path }}, {{ printf "%q" .Location }}, "")
       }
         {{- end }}
     res = append(res, err)
@@ -462,7 +462,7 @@ func ({{ .ReceiverName }} *{{ pascalize .Name }}Params) BindRequest(r *http.Requ
     if err := route.Consumer.Consume(r.Body, &body); err != nil {
         {{- if .Required }}
       if err == io.EOF {
-        res = append(res, errors.Required({{ printf "%q" (camelize .Name) }}, {{ printf "%q" .Location }}))
+        res = append(res, errors.Required({{ printf "%q" (camelize .Name) }}, {{ printf "%q" .Location }}, ""))
       } else {
         {{- end }}
       res = append(res, errors.NewParseError({{ printf "%q" (camelize .Name) }}, {{ printf "%q" .Location }}, "", err))
@@ -476,7 +476,7 @@ func ({{ .ReceiverName }} *{{ pascalize .Name }}Params) BindRequest(r *http.Requ
     {{- end }}
   }
     {{- if .Required }} else {
-    res = append(res, errors.Required({{ printf "%q" (camelize .Name) }}, {{ printf "%q" .Location }}))
+    res = append(res, errors.Required({{ printf "%q" (camelize .Name) }}, {{ printf "%q" .Location }}, ""))
   }
     {{- end }}
   {{- end }}
@@ -516,7 +516,7 @@ func ({{ .ReceiverName }} *{{ $className }}Params) bind{{ pascalize .ID }}(file
 func ({{ .ReceiverName }} *{{ $className }}Params) bind{{ pascalize .ID }}(rawData []string, hasKey bool, formats strfmt.Registry) error {
       {{- if and (not .IsPathParam) .Required }}
     if !hasKey {
-        return errors.Required({{ .Path }}, {{ printf "%q" .Location }})
+        return errors.Required({{ .Path }}, {{ printf "%q" .Location }}, rawData)
     }
       {{- end }}
     var raw string
@@ -561,7 +561,7 @@ func ({{ .ReceiverName }} *{{ $className }}Params) bind{{ pascalize .ID }}(rawDa
 // Arrays are parsed according to CollectionFormat: "{{ .CollectionFormat }}" (defaults to "csv" when empty).
 func ({{ .ReceiverName }} *{{ $className }}Params) bind{{ pascalize .ID }}(rawData []string, hasKey bool, formats strfmt.Registry) error {
       {{if .Required }}if !hasKey {
-    return errors.Required({{ .Path }}, {{ printf "%q" .Location }})
+    return errors.Required({{ .Path }}, {{ printf "%q" .Location }}, rawData)
   }
       {{ end }}
       {{ if eq .CollectionFormat "multi" -}}
@@ -577,7 +577,7 @@ func ({{ .ReceiverName }} *{{ $className }}Params) bind{{ pascalize .ID }}(rawDa
   {{ varname .Child.ValueExpression }}C := swag.SplitByFormat(qv{{ pascalize .Name }}, {{ printf "%q" .CollectionFormat }}){{ end }}
       {{if and .Required (not .AllowEmptyValue) }}
   if len({{ varname .Child.ValueExpression }}C) == 0 {
-    return errors.Required({{ .Path }}, {{ printf "%q" .Location }})
+    return errors.Required({{ .Path }}, {{ printf "%q" .Location }}, {{ varname .Child.ValueExpression }}C)
   }
       {{ else }}if len({{ varname .Child.ValueExpression }}C) == 0 { {{ if .HasDefault }}
     // Default values have been previously initialized by New{{ $className }}Params(){{ end }}
diff --git a/go.mod b/go.mod
index a16dd160..f5baaf30 100644
--- a/go.mod
+++ b/go.mod
@@ -1,8 +1,6 @@
 module github.com/go-swagger/go-swagger
 
-go 1.13
-
-replace github.com/golang/lint => golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3
+go 1.14
 
 require (
 	github.com/corbym/gocrest v1.0.3
@@ -11,39 +9,38 @@ require (
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/fsnotify/fsnotify v1.4.9 // indirect
 	github.com/go-openapi/analysis v0.19.10
-	github.com/go-openapi/errors v0.19.4
+	github.com/go-openapi/errors v0.19.6
 	github.com/go-openapi/inflect v0.19.0
 	github.com/go-openapi/loads v0.19.5
-	github.com/go-openapi/runtime v0.19.12
-	github.com/go-openapi/spec v0.19.7
+	github.com/go-openapi/runtime v0.19.16
+	github.com/go-openapi/spec v0.19.8
 	github.com/go-openapi/strfmt v0.19.5
-	github.com/go-openapi/swag v0.19.8
-	github.com/go-openapi/validate v0.19.8
+	github.com/go-openapi/swag v0.19.9
+	github.com/go-openapi/validate v0.19.10
 	github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013
-	github.com/golang/protobuf v1.3.5 // indirect
-	github.com/google/go-cmp v0.3.1 // indirect
+	github.com/golang/protobuf v1.4.2 // indirect
 	github.com/gorilla/handlers v1.4.2
 	github.com/jessevdk/go-flags v1.4.0
 	github.com/kr/pretty v0.2.0
-	github.com/kr/text v0.2.0 // indirect
-	github.com/pelletier/go-toml v1.6.0 // indirect
+	github.com/pelletier/go-toml v1.8.0 // indirect
 	github.com/pkg/errors v0.9.1
 	github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect
 	github.com/spf13/afero v1.2.2 // indirect
 	github.com/spf13/cast v1.3.1 // indirect
 	github.com/spf13/jwalterweatherman v1.1.0 // indirect
 	github.com/spf13/pflag v1.0.5
-	github.com/spf13/viper v1.6.2
-	github.com/stretchr/testify v1.4.0
+	github.com/spf13/viper v1.7.0
+	github.com/stretchr/testify v1.6.1
 	github.com/toqueteos/webbrowser v1.2.0
-	go.mongodb.org/mongo-driver v1.3.1 // indirect
-	golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 // indirect
-	golang.org/x/net v0.0.0-20200301022130-244492dfa37a
+	golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 // indirect
+	golang.org/x/mod v0.3.0 // indirect
+	golang.org/x/net v0.0.0-20200602114024-627f9648deb9
 	golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
-	golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 // indirect
-	golang.org/x/tools v0.0.0-20200313205530-4303120df7d8
-	google.golang.org/appengine v1.6.5 // indirect
-	gopkg.in/ini.v1 v1.54.0 // indirect
-	gopkg.in/square/go-jose.v2 v2.4.1 // indirect
-	gopkg.in/yaml.v2 v2.2.8
+	golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
+	golang.org/x/tools v0.0.0-20200612220849-54c614fe050c
+	google.golang.org/appengine v1.6.6 // indirect
+	google.golang.org/protobuf v1.24.0 // indirect
+	gopkg.in/ini.v1 v1.57.0 // indirect
+	gopkg.in/square/go-jose.v2 v2.5.1 // indirect
+	gopkg.in/yaml.v2 v2.3.0
 )
diff --git a/go.sum b/go.sum
index cd7ff7ea..09eca2b3 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,19 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
@@ -12,23 +24,30 @@ github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4Rq
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
-github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0=
 github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
+github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY=
+github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/corbym/gocrest v1.0.3 h1:gwEdq6RkTmq+09CTuM29DfKOCtZ7G7bcyxs3IZ6EVdU=
 github.com/corbym/gocrest v1.0.3/go.mod h1:maVFL5lbdS2PgfOQgGRWDYTeunSWQeiEgoNdTABShCs=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
-github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk=
 github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
-github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -41,14 +60,17 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8
 github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
 github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is=
 github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
@@ -62,12 +84,10 @@ github.com/go-openapi/analysis v0.19.10 h1:5BHISBAXOc/aJK25irLZnx2D3s6WyYaY9D4gm
 github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ=
 github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
 github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY=
 github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/errors v0.19.3 h1:7MGZI1ibQDLasvAz8HuhvYk9eNJbJkCOXWsSjjMS+Zc=
 github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/errors v0.19.4 h1:fSGwO1tSYHFu70NKaWJt5Qh0qoBRtCm/mXS1yhf+0W0=
-github.com/go-openapi/errors v0.19.4/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
+github.com/go-openapi/errors v0.19.6 h1:xZMThgv5SQ7SMbWtKFkCf9bBdvR2iEyw9k3zGZONuys=
+github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M=
 github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4=
 github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4=
 github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
@@ -86,38 +106,28 @@ github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf
 github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
 github.com/go-openapi/loads v0.19.0 h1:wCOBNscACI8L93tt5tvB2zOMkJ098XCw3fP0BY2ybDA=
 github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.2 h1:rf5ArTHmIJxyV5Oiks+Su0mUens1+AjpkPoWr5xFRcI=
 github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
-github.com/go-openapi/loads v0.19.3 h1:jwIoahqCmaA5OBoc/B+1+Mu2L0Gr8xYQnbeyQEo/7b0=
 github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI=
-github.com/go-openapi/loads v0.19.4 h1:5I4CCSqoWzT+82bBkNIvmLc0UOsoKKQ4Fz+3VxOB7SY=
-github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk=
 github.com/go-openapi/loads v0.19.5 h1:jZVYWawIQiA1NBnHla28ktg6hrcfTHsCE+3QLVRBIls=
 github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY=
 github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
-github.com/go-openapi/runtime v0.19.0 h1:sU6pp4dSV2sGlNKKyHxZzi1m1kG4WnYtWcJ+HYbygjE=
 github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
-github.com/go-openapi/runtime v0.19.4 h1:csnOgcgAiuGoM/Po7PEpKDoNulCcF3FGbSnbHfxgjMI=
 github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
-github.com/go-openapi/runtime v0.19.12 h1:5lQlCr1HL0ZVRPL+0PHKhRpMCSPMV2qF842rhQx8CYY=
-github.com/go-openapi/runtime v0.19.12/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo=
+github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo=
+github.com/go-openapi/runtime v0.19.16 h1:tQMAY5s5BfmmCC31+ufDCsGrr8iO1A8UIdYfDo5ADvs=
+github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98=
 github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
 github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE=
 github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
-github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc=
 github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
 github.com/go-openapi/spec v0.19.6 h1:rMMMj8cV38KVXK7SFc+I2MWClbEfbK705+j+dyqun5g=
 github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
-github.com/go-openapi/spec v0.19.7 h1:0xWSeMd35y5avQAThZR2PkEuqSosoS5t6gDH4L8n11M=
-github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
+github.com/go-openapi/spec v0.19.8 h1:qAdZLh1r6QF/hI/gTq+TJTvsQUodZsM7KLqkAJdiJNg=
+github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
 github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
 github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.19.0 h1:0Dn9qy1G9+UJfRU7TR8bmdGxb4uifB7HNrJjOnV0yPk=
 github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
-github.com/go-openapi/strfmt v0.19.2 h1:clPGfBnJohokno0e+d7hs6Yocrzjlgz6EsQSDncCRnE=
 github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
-github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA=
 github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
 github.com/go-openapi/strfmt v0.19.4 h1:eRvaqAhpL0IL6Trh5fDsGnGhiXndzHFuA05w6sXH6/g=
 github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk=
@@ -131,17 +141,13 @@ github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tF
 github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 github.com/go-openapi/swag v0.19.7 h1:VRuXN2EnMSsZdauzdss6JBC29YotDqG59BZ+tdlIL1s=
 github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
-github.com/go-openapi/swag v0.19.8 h1:vfK6jLhs7OI4tAXkvkooviaE1JEPcw3mutyegLHHjmk=
-github.com/go-openapi/swag v0.19.8/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
+github.com/go-openapi/swag v0.19.9 h1:1IxuqvBUU3S2Bi4YC7tlP9SJF1gVpCvqN0T2Qof4azE=
+github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
 github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
-github.com/go-openapi/validate v0.19.2 h1:ky5l57HjyVRrsJfd2+Ro5Z9PjGuKbsmftwyMtk8H7js=
 github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
-github.com/go-openapi/validate v0.19.3 h1:PAH/2DylwWcIU1s0Y7k3yNmeAgWOcKrNE2Q7Ww/kCg4=
 github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo=
-github.com/go-openapi/validate v0.19.7 h1:fR4tP2xc+25pdo5Qvv4v6g+5QKFgNg8nrifTE7V8ibA=
-github.com/go-openapi/validate v0.19.7/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
-github.com/go-openapi/validate v0.19.8 h1:YFzsdWIDfVuLvIOF+ZmKjVg1MbPJ1QgY9PihMwei1ys=
-github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
+github.com/go-openapi/validate v0.19.10 h1:tG3SZ5DC5KF4cyt7nqLVcQXGj5A7mpaYkAcNPlDK+Yk=
+github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8=
 github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013 h1:l9rI6sNaZgNC0LnF3MiE+qTmyBA/tZAg1rtyrGbUMK0=
@@ -175,35 +181,74 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
 github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
-github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
+github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
+github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
+github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
+github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
+github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
 github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
 github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
 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=
@@ -234,35 +279,51 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM=
-github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
 github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8=
 github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
 github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
 github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
+github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
+github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
+github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
+github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
-github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4=
-github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
+github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw=
+github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
 github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU=
 github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
 github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -272,6 +333,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
 github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
@@ -298,16 +361,17 @@ github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.6.2 h1:7aKfF+e8/k68gda3LOjo5RxiUqddoFxVq4BKBPrxk5E=
-github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k=
+github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=
+github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
 github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
@@ -315,52 +379,75 @@ github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhV
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/toqueteos/webbrowser v1.2.0 h1:tVP/gpK69Fx+qMJKsLE7TD8LuGWPnEV71wBN9rrstGQ=
 github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM=
-github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
 github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
 github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
 github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
-github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.mongodb.org/mongo-driver v1.0.3 h1:GKoji1ld3tw2aC+GX1wbr/J2fX13yNacEYoJ8Nhr0yU=
 go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.1 h1:Sq1fR+0c58RME5EoqKdjkiQAmPjmfHlZOoRI6fTUOcs=
 go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
 go.mongodb.org/mongo-driver v1.3.0 h1:ew6uUIeJOo+qdUUv7LxFCUhtWmVv7ZV/Xuy4FAUsw2E=
 go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
-go.mongodb.org/mongo-driver v1.3.1 h1:op56IfTQiaY2679w922KVWa3qcHdml2K/Io8ayAOUEQ=
-go.mongodb.org/mongo-driver v1.3.1/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
+go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCdE=
+go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU=
 golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 h1:QmwruyY+bKbDDL0BaglrbZABEali68eoMFhTZpCjYVA=
-golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM=
+golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+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=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
 golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
+golang.org/x/mod v0.3.0/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=
 golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -369,9 +456,11 @@ golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k
 golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
-golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM=
+golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -381,67 +470,123 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f h1:25KHgbfyiSm6vwQLbM3zZIe1v9p/3ea4Rz+nnM5K/i4=
 golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So=
-golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200610111108-226ff32320da h1:bGb80FudwxpeucJUjPYJXuJ8Hk91vNtfvrymzwiei38=
+golang.org/x/sys v0.0.0-20200610111108-226ff32320da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59 h1:QjA/9ArTfVTLfEhClDCG7SGrZkZixxWpwNCDiwJfh88=
 golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200313205530-4303120df7d8 h1:gkI/wGGwpcG5W4hLCzZNGxA4wzWBGGDStRI1MrjDl2Q=
-golang.org/x/tools v0.0.0-20200313205530-4303120df7d8/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/tools v0.0.0-20200612220849-54c614fe050c h1:g6oFfz6Cmw68izP3xsdud3Oxu145IPkeFzyRg58AKHM=
+golang.org/x/tools v0.0.0-20200612220849-54c614fe050c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
 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.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
-google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
+google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
 gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/ini.v1 v1.54.0 h1:oM5ElzbIi7gwLnNbPX2M25ED1vSAK3B6dex50eS/6Fs=
-gopkg.in/ini.v1 v1.54.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww=
+gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
-gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y=
-gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w=
+gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
@@ -449,4 +594,14 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo=
+gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=


Test patch:
diff --git a/generator/client_test.go b/generator/client_test.go
index aef34efb..e309c91b 100644
--- a/generator/client_test.go
+++ b/generator/client_test.go
@@ -148,6 +148,7 @@ func assertImports(t testing.TB, baseImport, code string) {
 
 func TestClient(t *testing.T) {
 	log.SetOutput(ioutil.Discard)
+
 	base := os.Getenv("GOPATH")
 	if base == "" {
 		base = "."
diff --git a/generator/parameter_test.go b/generator/parameter_test.go
index 1808b69c..88ee86a5 100644
--- a/generator/parameter_test.go
+++ b/generator/parameter_test.go
@@ -1287,7 +1287,7 @@ func TestGenParameter_Issue909(t *testing.T) {
 				`if err := validate.FormatOf(fmt.Sprintf("%s.%v", "isAnOption2", i), "query", "uuid", isAnOption2I.String(), formats); err != nil {`,
 				`isAnOption2IR = append(isAnOption2IR, isAnOption2I)`,
 				`o.IsAnOption2 = isAnOption2IR`,
-				`return errors.Required("notAnOption1", "query")`,
+				`return errors.Required("notAnOption1", "query", notAnOption1IC)`,
 				`notAnOption1IC := swag.SplitByFormat(qvNotAnOption1, "csv")`,
 				`var notAnOption1IR []strfmt.DateTime`,
 				`for i, notAnOption1IV := range notAnOption1IC {`,
@@ -1425,7 +1425,7 @@ func TestGenParameter_Issue909(t *testing.T) {
 				`if err := o.validateIsAnOption4(formats); err != nil {`,
 				`isAnOption4Size := int64(len(o.IsAnOption4))`,
 				`if err := validate.MaxItems("isAnOption4", "query", isAnOption4Size, 4); err != nil {`,
-				`return errors.Required("notAnOption1", "query")`,
+				`return errors.Required("notAnOption1", "query", notAnOption1IC)`,
 				`notAnOption1IC := swag.SplitByFormat(qvNotAnOption1, "")`,
 				`var notAnOption1IR [][]strfmt.DateTime`,
 				`for i, notAnOption1IV := range notAnOption1IC {`,
@@ -1541,7 +1541,7 @@ func TestGenParameter_Issue1237(t *testing.T) {
 				`var body models.Sg`,
 				`if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`if err == io.EOF {`,
-				`res = append(res, errors.Required("body", "body"))`,
+				`res = append(res, errors.Required("body", "body", ""))`,
 				`} else {`,
 				`res = append(res, errors.NewParseError("body", "body", "", err))`,
 				`if err := body.Validate(route.Formats); err != nil {`,
@@ -1990,14 +1990,14 @@ func TestGenParameter_Issue1536(t *testing.T) {
 				`		var body []interface{`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("maxRecords", "body")`,
+				`				res = append(res, errors.Required("maxRecords", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("maxRecords", "body", "", err)`,
 				`		} else {`,
 				`			o.MaxRecords = body`,
 				`			if err := o.validateMaxRecordsBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("maxRecords", "body")`,
+				`		res = append(res, errors.Required("maxRecords", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetRecordsMaxParams) validateMaxRecordsBody(formats strfmt.Registry) error {`,
 				`	maxRecordsSize := int64(len(o.MaxRecords)`,
@@ -2021,14 +2021,14 @@ func TestGenParameter_Issue1536(t *testing.T) {
 				`		var body []interface{`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("records", "body")`,
+				`				res = append(res, errors.Required("records", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("records", "body", "", err)`,
 				`		} else {`,
 				`			o.Records = body`,
 				// fixed: no validation has to be carried on
 				`	} else {`,
-				`		res = append(res, errors.Required("records", "body")`,
+				`		res = append(res, errors.Required("records", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -2379,13 +2379,13 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string]models.ModelInterface`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfInterface", "body")`,
+				`				res = append(res, errors.Required("mapOfInterface", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfInterface", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfInterface = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfInterface", "body")`,
+				`		res = append(res, errors.Required("mapOfInterface", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -2406,13 +2406,13 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body []interface{`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("arrayOfInterface", "body")`,
+				`				res = append(res, errors.Required("arrayOfInterface", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("arrayOfInterface", "body", "", err)`,
 				`		} else {`,
 				`			o.ArrayOfInterface = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("arrayOfInterface", "body")`,
+				`		res = append(res, errors.Required("arrayOfInterface", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -2433,7 +2433,7 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string]models.ModelArrayWithMax`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfArrayWithMax", "body")`,
+				`				res = append(res, errors.Required("mapOfArrayWithMax", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfArrayWithMax", "body", "", err)`,
 				`		} else {`,
@@ -2444,7 +2444,7 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`			if len(res) == 0 {`,
 				`				o.MapOfArrayWithMax = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfArrayWithMax", "body")`,
+				`		res = append(res, errors.Required("mapOfArrayWithMax", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -2465,14 +2465,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body [][]string`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("arrayOfarraySimple", "body")`,
+				`				res = append(res, errors.Required("arrayOfarraySimple", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("arrayOfarraySimple", "body", "", err)`,
 				`		} else {`,
 				`			o.ArrayOfarraySimple = body`,
 				`			if err := o.validateArrayOfarraySimpleBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("arrayOfarraySimple", "body")`,
+				`		res = append(res, errors.Required("arrayOfarraySimple", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetArrayNestedSimpleParams) validateArrayOfarraySimpleBody(formats strfmt.Registry) error {`,
 				`	arrayOfarraySimpleIC := o.ArrayOfarraySimple`,
@@ -2506,14 +2506,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string]strfmt.UUID`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfFormat", "body")`,
+				`				res = append(res, errors.Required("mapOfFormat", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfFormat", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfFormat = body`,
 				`			if err := o.validateMapOfFormatBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfFormat", "body")`,
+				`		res = append(res, errors.Required("mapOfFormat", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapOfFormatParams) validateMapOfFormatBody(formats strfmt.Registry) error {`,
 				`	mapOfFormatIC := o.MapOfFormat`,
@@ -2542,14 +2542,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body []map[string][]int32`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("arrayOfMap", "body")`,
+				`				res = append(res, errors.Required("arrayOfMap", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("arrayOfMap", "body", "", err)`,
 				`		} else {`,
 				`			o.ArrayOfMap = body`,
 				`			if err := o.validateArrayOfMapBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("arrayOfMap", "body")`,
+				`		res = append(res, errors.Required("arrayOfMap", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetArrayOfMapParams) validateArrayOfMapBody(formats strfmt.Registry) error {`,
 				`	arrayOfMapSize := int64(len(o.ArrayOfMap)`,
@@ -2588,13 +2588,13 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string][]*int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfAnonArrayWithXNullable", "body")`,
+				`				res = append(res, errors.Required("mapOfAnonArrayWithXNullable", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfAnonArrayWithXNullable", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfAnonArrayWithXNullable = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfAnonArrayWithXNullable", "body")`,
+				`		res = append(res, errors.Required("mapOfAnonArrayWithXNullable", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -2615,14 +2615,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body [][]*models.ModelObject`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("arrayOfarray", "body")`,
+				`				res = append(res, errors.Required("arrayOfarray", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("arrayOfarray", "body", "", err)`,
 				`		} else {`,
 				`			o.ArrayOfarray = body`,
 				`			if err := o.validateArrayOfarrayBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("arrayOfarray", "body")`,
+				`		res = append(res, errors.Required("arrayOfarray", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetArrayNestedParams) validateArrayOfarrayBody(formats strfmt.Registry) error {`,
 				`	arrayOfarrayIC := o.ArrayOfarray`,
@@ -2661,7 +2661,7 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string]models.ModelArray`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfArray", "body")`,
+				`				res = append(res, errors.Required("mapOfArray", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfArray", "body", "", err)`,
 				`		} else {`,
@@ -2673,7 +2673,7 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`			if len(res) == 0 {`,
 				`				o.MapOfArray = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfArray", "body")`,
+				`		res = append(res, errors.Required("mapOfArray", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -2694,14 +2694,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string][]*int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfAnonArrayWithNullable", "body")`,
+				`				res = append(res, errors.Required("mapOfAnonArrayWithNullable", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfAnonArrayWithNullable", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfAnonArrayWithNullable = body`,
 				`			if err := o.validateMapOfAnonArrayWithNullableBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfAnonArrayWithNullable", "body")`,
+				`		res = append(res, errors.Required("mapOfAnonArrayWithNullable", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapAnonArrayWithNullableParams) validateMapOfAnonArrayWithNullableBody(formats strfmt.Registry) error {`,
 				`	mapOfAnonArrayWithNullableIC := o.MapOfAnonArrayWithNullable`,
@@ -2734,14 +2734,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string][]int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfAnonArray", "body")`,
+				`				res = append(res, errors.Required("mapOfAnonArray", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfAnonArray", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfAnonArray = body`,
 				`			if err := o.validateMapOfAnonArrayBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfAnonArray", "body")`,
+				`		res = append(res, errors.Required("mapOfAnonArray", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapOfAnonArrayParams) validateMapOfAnonArrayBody(formats strfmt.Registry) error {`,
 				`	mapOfAnonArrayIC := o.MapOfAnonArray`,
@@ -2774,14 +2774,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string]map[string][]int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfAnonMap", "body")`,
+				`				res = append(res, errors.Required("mapOfAnonMap", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfAnonMap", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfAnonMap = body`,
 				`			if err := o.validateMapOfAnonMapBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfAnonMap", "body")`,
+				`		res = append(res, errors.Required("mapOfAnonMap", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapOfAnonMapParams) validateMapOfAnonMapBody(formats strfmt.Registry) error {`,
 				`	mapOfAnonMapIC := o.MapOfAnonMap`,
@@ -2818,14 +2818,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string][]int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfAnonArray", "body")`,
+				`				res = append(res, errors.Required("mapOfAnonArray", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfAnonArray", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfAnonArray = body`,
 				`			if err := o.validateMapOfAnonArrayBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfAnonArray", "body")`,
+				`		res = append(res, errors.Required("mapOfAnonArray", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapAnonArrayParams) validateMapOfAnonArrayBody(formats strfmt.Registry) error {`,
 				`	mapOfAnonArrayIC := o.MapOfAnonArray`,
@@ -2858,14 +2858,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string]int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfPrimitive", "body")`,
+				`				res = append(res, errors.Required("mapOfPrimitive", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfPrimitive", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfPrimitive = body`,
 				`			if err := o.validateMapOfPrimitiveBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfPrimitive", "body")`,
+				`		res = append(res, errors.Required("mapOfPrimitive", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapOfPrimitiveParams) validateMapOfPrimitiveBody(formats strfmt.Registry) error {`,
 				`	mapOfPrimitiveIC := o.MapOfPrimitive`,
@@ -2894,7 +2894,7 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body []*models.ModelObject`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("arrayOfObject", "body")`,
+				`				res = append(res, errors.Required("arrayOfObject", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("arrayOfObject", "body", "", err)`,
 				`		} else {`,
@@ -2905,7 +2905,7 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`			if len(res) == 0 {`,
 				`				o.ArrayOfObject = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("arrayOfObject", "body")`,
+				`		res = append(res, errors.Required("arrayOfObject", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -2929,7 +2929,7 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string]models.ModelObject`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfObject", "body")`,
+				`				res = append(res, errors.Required("mapOfObject", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfObject", "body", "", err)`,
 				`		} else {`,
@@ -2941,7 +2941,7 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`			if len(res) == 0 {`,
 				`				o.MapOfObject = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfObject", "body")`,
+				`		res = append(res, errors.Required("mapOfObject", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -2962,14 +2962,14 @@ func TestGenParameter_Issue1536_Maps(t *testing.T) {
 				`		var body map[string]map[string]models.ModelArrayWithMax`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfMap", "body")`,
+				`				res = append(res, errors.Required("mapOfMap", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfMap", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfMap = body`,
 				`			if err := o.validateMapOfMapBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfMap", "body")`,
+				`		res = append(res, errors.Required("mapOfMap", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapOfMapParams) validateMapOfMapBody(formats strfmt.Registry) error {`,
 				`	mapOfMapIC := o.MapOfMap`,
@@ -3014,14 +3014,14 @@ func TestGenParameter_Issue1536_MapsWithExpand(t *testing.T) {
 				`		var body map[string][]map[string]int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfArrayOfMap", "body")`,
+				`				res = append(res, errors.Required("mapOfArrayOfMap", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfArrayOfMap", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfArrayOfMap = body`,
 				`			if err := o.validateMapOfArrayOfMapBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfArrayOfMap", "body")`,
+				`		res = append(res, errors.Required("mapOfArrayOfMap", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapOfArrayOfMapParams) validateMapOfArrayOfMapBody(formats strfmt.Registry) error {`,
 				`	mapOfArrayOfMapIC := o.MapOfArrayOfMap`,
@@ -3059,14 +3059,14 @@ func TestGenParameter_Issue1536_MapsWithExpand(t *testing.T) {
 				`		var body map[string][]GetMapOfArrayOfNullableMapParamsBodyItems0`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfArrayOfNullableMap", "body")`,
+				`				res = append(res, errors.Required("mapOfArrayOfNullableMap", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfArrayOfNullableMap", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfArrayOfNullableMap = body`,
 				`			if err := o.validateMapOfArrayOfNullableMapBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfArrayOfNullableMap", "body")`,
+				`		res = append(res, errors.Required("mapOfArrayOfNullableMap", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapOfArrayOfNullableMapParams) validateMapOfArrayOfNullableMapBody(formats strfmt.Registry) error {`,
 				`	mapOfArrayOfNullableMapIC := o.MapOfArrayOfNullableMap`,
@@ -3103,14 +3103,14 @@ func TestGenParameter_Issue1536_MapsWithExpand(t *testing.T) {
 				`		var body map[string][][]GetMapArrayOfArrayParamsBodyItems0`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfArrayOfArray", "body")`,
+				`				res = append(res, errors.Required("mapOfArrayOfArray", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfArrayOfArray", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfArrayOfArray = body`,
 				`			if err := o.validateMapOfArrayOfArrayBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfArrayOfArray", "body")`,
+				`		res = append(res, errors.Required("mapOfArrayOfArray", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapArrayOfArrayParams) validateMapOfArrayOfArrayBody(formats strfmt.Registry) error {`,
 				`	mapOfArrayOfArrayIC := o.MapOfArrayOfArray`,
@@ -3152,14 +3152,14 @@ func TestGenParameter_Issue1536_MapsWithExpand(t *testing.T) {
 				`		var body map[string][][]*int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfAnonArrayWithNestedNullable", "body")`,
+				`				res = append(res, errors.Required("mapOfAnonArrayWithNestedNullable", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfAnonArrayWithNestedNullable", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfAnonArrayWithNestedNullable = body`,
 				`			if err := o.validateMapOfAnonArrayWithNestedNullableBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfAnonArrayWithNestedNullable", "body")`,
+				`		res = append(res, errors.Required("mapOfAnonArrayWithNestedNullable", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetMapAnonArrayWithNestedNullableParams) validateMapOfAnonArrayWithNestedNullableBody(formats strfmt.Registry) error {`,
 				`	mapOfAnonArrayWithNestedNullableIC := o.MapOfAnonArrayWithNestedNullable`,
@@ -3197,13 +3197,13 @@ func TestGenParameter_Issue1536_MapsWithExpand(t *testing.T) {
 				`		var body map[string]map[string]int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfModelMap", "body")`,
+				`				res = append(res, errors.Required("mapOfModelMap", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfModelMap", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfModelMap = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfModelMap", "body")`,
+				`		res = append(res, errors.Required("mapOfModelMap", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -3224,13 +3224,13 @@ func TestGenParameter_Issue1536_MapsWithExpand(t *testing.T) {
 				`		var body map[string]map[string]*int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("mapOfModelMapNullable", "body")`,
+				`				res = append(res, errors.Required("mapOfModelMapNullable", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("mapOfModelMapNullable", "body", "", err)`,
 				`		} else {`,
 				`			o.MapOfModelMapNullable = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("mapOfModelMapNullable", "body")`,
+				`		res = append(res, errors.Required("mapOfModelMapNullable", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -3264,13 +3264,13 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body map[string]map[string]map[string]*bool`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedMap04", "body")`,
+				`				res = append(res, errors.Required("nestedMap04", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedMap04", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedMap04 = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedMap04", "body")`,
+				`		res = append(res, errors.Required("nestedMap04", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -3291,14 +3291,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body []map[string][]map[string]strfmt.Date`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedSliceAndMap01", "body")`,
+				`				res = append(res, errors.Required("nestedSliceAndMap01", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedSliceAndMap01", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedSliceAndMap01 = body`,
 				`			if err := o.validateNestedSliceAndMap01Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedSliceAndMap01", "body")`,
+				`		res = append(res, errors.Required("nestedSliceAndMap01", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedSliceAndMap01Params) validateNestedSliceAndMap01Body(formats strfmt.Registry) error {`,
 				`	if err := validate.UniqueItems("nestedSliceAndMap01", "body", o.NestedSliceAndMap01); err != nil {`,
@@ -3341,14 +3341,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body map[string][]map[string][]map[string]*int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedMapAndSlice02", "body")`,
+				`				res = append(res, errors.Required("nestedMapAndSlice02", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedMapAndSlice02", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedMapAndSlice02 = body`,
 				`			if err := o.validateNestedMapAndSlice02Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedMapAndSlice02", "body")`,
+				`		res = append(res, errors.Required("nestedMapAndSlice02", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedMapAndSlice02Params) validateNestedMapAndSlice02Body(formats strfmt.Registry) error {`,
 				`	nestedMapAndSlice02IC := o.NestedMapAndSlice02`,
@@ -3396,14 +3396,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body []map[string][]map[string]string`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedSliceAndMap03", "body")`,
+				`				res = append(res, errors.Required("nestedSliceAndMap03", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedSliceAndMap03", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedSliceAndMap03 = body`,
 				`			if err := o.validateNestedSliceAndMap03Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedSliceAndMap03", "body")`,
+				`		res = append(res, errors.Required("nestedSliceAndMap03", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedSliceAndMap03Params) validateNestedSliceAndMap03Body(formats strfmt.Registry) error {`,
 				`	if err := validate.UniqueItems("nestedSliceAndMap03", "body", o.NestedSliceAndMap03); err != nil {`,
@@ -3445,13 +3445,13 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body [][][]string`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedArray03", "body")`,
+				`				res = append(res, errors.Required("nestedArray03", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedArray03", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedArray03 = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedArray03", "body")`,
+				`		res = append(res, errors.Required("nestedArray03", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -3472,14 +3472,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body [][][]string`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedArray03", "body")`,
+				`				res = append(res, errors.Required("nestedArray03", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedArray03", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedArray03 = body`,
 				`			if err := o.validateNestedArray03Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedArray03", "body")`,
+				`		res = append(res, errors.Required("nestedArray03", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedArray04Params) validateNestedArray03Body(formats strfmt.Registry) error {`,
 				`	if err := validate.UniqueItems("nestedArray03", "body", o.NestedArray03); err != nil {`,
@@ -3520,14 +3520,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body map[string][]map[string][]map[string]strfmt.Date`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedMapAndSlice01", "body")`,
+				`				res = append(res, errors.Required("nestedMapAndSlice01", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedMapAndSlice01", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedMapAndSlice01 = body`,
 				`			if err := o.validateNestedMapAndSlice01Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedMapAndSlice01", "body")`,
+				`		res = append(res, errors.Required("nestedMapAndSlice01", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedMapAndSlice01Params) validateNestedMapAndSlice01Body(formats strfmt.Registry) error {`,
 				`	nestedMapAndSlice01IC := o.NestedMapAndSlice01`,
@@ -3598,14 +3598,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body map[string]map[string]map[string]*string`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedMap02", "body")`,
+				`				res = append(res, errors.Required("nestedMap02", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedMap02", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedMap02 = body`,
 				`			if err := o.validateNestedMap02Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedMap02", "body")`,
+				`		res = append(res, errors.Required("nestedMap02", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedMap02Params) validateNestedMap02Body(formats strfmt.Registry) error {`,
 				`	nestedMap02IC := o.NestedMap02`,
@@ -3643,14 +3643,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body map[string][]map[string][]map[string]int64`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedMapAndSlice03", "body")`,
+				`				res = append(res, errors.Required("nestedMapAndSlice03", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedMapAndSlice03", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedMapAndSlice03 = body`,
 				`			if err := o.validateNestedMapAndSlice03Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedMapAndSlice03", "body")`,
+				`		res = append(res, errors.Required("nestedMapAndSlice03", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedMapAndSlice03Params) validateNestedMapAndSlice03Body(formats strfmt.Registry) error {`,
 				`	nestedMapAndSlice03IC := o.NestedMapAndSlice03`,
@@ -3696,14 +3696,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body []map[string][]map[string]*string`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedSliceAndMap02", "body")`,
+				`				res = append(res, errors.Required("nestedSliceAndMap02", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedSliceAndMap02", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedSliceAndMap02 = body`,
 				`			if err := o.validateNestedSliceAndMap02Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedSliceAndMap02", "body")`,
+				`		res = append(res, errors.Required("nestedSliceAndMap02", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedSliceAndMap02Params) validateNestedSliceAndMap02Body(formats strfmt.Registry) error {`,
 				`	if err := validate.UniqueItems("nestedSliceAndMap02", "body", o.NestedSliceAndMap02); err != nil {`,
@@ -3747,14 +3747,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body map[string]map[string]map[string]strfmt.Date`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedMap01", "body")`,
+				`				res = append(res, errors.Required("nestedMap01", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedMap01", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedMap01 = body`,
 				`			if err := o.validateNestedMap01Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedMap01", "body")`,
+				`		res = append(res, errors.Required("nestedMap01", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedMap01Params) validateNestedMap01Body(formats strfmt.Registry) error {`,
 				`	nestedMap01IC := o.NestedMap01`,
@@ -3791,13 +3791,13 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body map[string]map[string]map[string]string`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedMap03", "body")`,
+				`				res = append(res, errors.Required("nestedMap03", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedMap03", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedMap03 = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedMap03", "body")`,
+				`		res = append(res, errors.Required("nestedMap03", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -3818,14 +3818,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body [][][]strfmt.Date`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedArray01", "body")`,
+				`				res = append(res, errors.Required("nestedArray01", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedArray01", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedArray01 = body`,
 				`			if err := o.validateNestedArray01Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedArray01", "body")`,
+				`		res = append(res, errors.Required("nestedArray01", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedArray01Params) validateNestedArray01Body(formats strfmt.Registry) error {`,
 				`	nestedArray01Size := int64(len(o.NestedArray01)`,
@@ -3870,14 +3870,14 @@ func TestGenParameter_Issue1536_MoreMaps(t *testing.T) {
 				`		var body [][][]*string`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nestedArray01", "body")`,
+				`				res = append(res, errors.Required("nestedArray01", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nestedArray01", "body", "", err)`,
 				`		} else {`,
 				`			o.NestedArray01 = body`,
 				`			if err := o.validateNestedArray01Body(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nestedArray01", "body")`,
+				`		res = append(res, errors.Required("nestedArray01", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetNestedArray02Params) validateNestedArray01Body(formats strfmt.Registry) error {`,
 				`	nestedArray01Size := int64(len(o.NestedArray01)`,
@@ -4076,7 +4076,7 @@ func TestGenParameter_Issue1548_base64(t *testing.T) {
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *MyMethodParams) bindByteInQuery(rawData []string, hasKey bool, formats strfmt.Registry) error {`,
 				`	if !hasKey {`,
-				`		return errors.Required("byteInQuery", "query"`,
+				`		return errors.Required("byteInQuery", "query", rawData`,
 				`	var raw string`,
 				`	if len(rawData) > 0 {`,
 				`		raw = rawData[len(rawData)-1]`,
@@ -4155,13 +4155,13 @@ func TestGenParameter_1572(t *testing.T) {
 				`		var body interface{`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("interfaceBody", "body")`,
+				`				res = append(res, errors.Required("interfaceBody", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("interfaceBody", "body", "", err)`,
 				`		} else {`,
 				`			o.InterfaceBody = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("interfaceBody", "body")`,
+				`		res = append(res, errors.Required("interfaceBody", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -4182,13 +4182,13 @@ func TestGenParameter_1572(t *testing.T) {
 				`		var body interface{`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("nullBody", "body")`,
+				`				res = append(res, errors.Required("nullBody", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("nullBody", "body", "", err)`,
 				`		} else {`,
 				`			o.NullBody = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("nullBody", "body")`,
+				`		res = append(res, errors.Required("nullBody", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},
@@ -4209,14 +4209,14 @@ func TestGenParameter_1572(t *testing.T) {
 				`		var body uint32`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("primitiveBody", "body")`,
+				`				res = append(res, errors.Required("primitiveBody", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("primitiveBody", "body", "", err)`,
 				`		} else {`,
 				`			o.PrimitiveBody = body`,
 				`			if err := o.validatePrimitiveBodyBody(route.Formats); err != nil {`,
 				`	} else {`,
-				`		res = append(res, errors.Required("primitiveBody", "body")`,
+				`		res = append(res, errors.Required("primitiveBody", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 				`func (o *GetPrimitiveParams) validatePrimitiveBodyBody(formats strfmt.Registry) error {`,
 				`	if err := validate.MaximumInt("primitiveBody", "body", int64(o.PrimitiveBody), 100, false); err != nil {`,
@@ -4239,13 +4239,13 @@ func TestGenParameter_1572(t *testing.T) {
 				`		var body map[string]models.ModelInterface`,
 				`		if err := route.Consumer.Consume(r.Body, &body); err != nil {`,
 				`			if err == io.EOF {`,
-				`				res = append(res, errors.Required("interfaceBody", "body")`,
+				`				res = append(res, errors.Required("interfaceBody", "body", "")`,
 				`			} else {`,
 				`				res = append(res, errors.NewParseError("interfaceBody", "body", "", err)`,
 				`		} else {`,
 				`			o.InterfaceBody = body`,
 				`	} else {`,
-				`		res = append(res, errors.Required("interfaceBody", "body")`,
+				`		res = append(res, errors.Required("interfaceBody", "body", "")`,
 				`		return errors.CompositeValidationError(res...`,
 			},
 		},