diff --git a/vendor/google.golang.org/genproto/protobuf/api/api.pb.go b/vendor/google.golang.org/genproto/protobuf/api/api.pb.go
index c82cc0e..51c7092 100644
--- a/vendor/google.golang.org/genproto/protobuf/api/api.pb.go
+++ b/vendor/google.golang.org/genproto/protobuf/api/api.pb.go
@@ -1,16 +1,13 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: google/protobuf/api.proto
 
-package api
+package api // import "google.golang.org/genproto/protobuf/api"
 
-import (
-	fmt "fmt"
-	math "math"
-
-	proto "github.com/golang/protobuf/proto"
-	ptype "google.golang.org/genproto/protobuf/ptype"
-	source_context "google.golang.org/genproto/protobuf/source_context"
-)
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import ptype "google.golang.org/genproto/protobuf/ptype"
+import source_context "google.golang.org/genproto/protobuf/source_context"
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -21,7 +18,7 @@
 // is compatible with the proto package it is being compiled against.
 // A compilation error at this line likely means your copy of the
 // proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 
 // Api is a light-weight descriptor for an API Interface.
 //
@@ -78,17 +75,16 @@
 func (m *Api) String() string { return proto.CompactTextString(m) }
 func (*Api) ProtoMessage()    {}
 func (*Api) Descriptor() ([]byte, []int) {
-	return fileDescriptor_a2ec32096296c143, []int{0}
+	return fileDescriptor_api_3a57081c831903d2, []int{0}
 }
-
 func (m *Api) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Api.Unmarshal(m, b)
 }
 func (m *Api) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Api.Marshal(b, m, deterministic)
 }
-func (m *Api) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Api.Merge(m, src)
+func (dst *Api) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Api.Merge(dst, src)
 }
 func (m *Api) XXX_Size() int {
 	return xxx_messageInfo_Api.Size(m)
@@ -173,17 +169,16 @@
 func (m *Method) String() string { return proto.CompactTextString(m) }
 func (*Method) ProtoMessage()    {}
 func (*Method) Descriptor() ([]byte, []int) {
-	return fileDescriptor_a2ec32096296c143, []int{1}
+	return fileDescriptor_api_3a57081c831903d2, []int{1}
 }
-
 func (m *Method) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Method.Unmarshal(m, b)
 }
 func (m *Method) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Method.Marshal(b, m, deterministic)
 }
-func (m *Method) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Method.Merge(m, src)
+func (dst *Method) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Method.Merge(dst, src)
 }
 func (m *Method) XXX_Size() int {
 	return xxx_messageInfo_Method.Size(m)
@@ -336,17 +331,16 @@
 func (m *Mixin) String() string { return proto.CompactTextString(m) }
 func (*Mixin) ProtoMessage()    {}
 func (*Mixin) Descriptor() ([]byte, []int) {
-	return fileDescriptor_a2ec32096296c143, []int{2}
+	return fileDescriptor_api_3a57081c831903d2, []int{2}
 }
-
 func (m *Mixin) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Mixin.Unmarshal(m, b)
 }
 func (m *Mixin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Mixin.Marshal(b, m, deterministic)
 }
-func (m *Mixin) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Mixin.Merge(m, src)
+func (dst *Mixin) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Mixin.Merge(dst, src)
 }
 func (m *Mixin) XXX_Size() int {
 	return xxx_messageInfo_Mixin.Size(m)
@@ -377,9 +371,9 @@
 	proto.RegisterType((*Mixin)(nil), "google.protobuf.Mixin")
 }
 
-func init() { proto.RegisterFile("google/protobuf/api.proto", fileDescriptor_a2ec32096296c143) }
+func init() { proto.RegisterFile("google/protobuf/api.proto", fileDescriptor_api_3a57081c831903d2) }
 
-var fileDescriptor_a2ec32096296c143 = []byte{
+var fileDescriptor_api_3a57081c831903d2 = []byte{
 	// 432 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xcf, 0x8e, 0xd3, 0x30,
 	0x10, 0xc6, 0x95, 0xa4, 0x4d, 0x17, 0xaf, 0xe8, 0x82, 0x91, 0xc0, 0xf4, 0xb0, 0x8a, 0x56, 0x1c,
diff --git a/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go b/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go
index a0889f0..8688669 100644
--- a/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go
+++ b/vendor/google.golang.org/genproto/protobuf/field_mask/field_mask.pb.go
@@ -1,14 +1,11 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: google/protobuf/field_mask.proto
 
-package field_mask
+package field_mask // import "google.golang.org/genproto/protobuf/field_mask"
 
-import (
-	fmt "fmt"
-	math "math"
-
-	proto "github.com/golang/protobuf/proto"
-)
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -19,7 +16,7 @@
 // is compatible with the proto package it is being compiled against.
 // A compilation error at this line likely means your copy of the
 // proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 
 // `FieldMask` represents a set of symbolic field paths, for example:
 //
@@ -232,17 +229,16 @@
 func (m *FieldMask) String() string { return proto.CompactTextString(m) }
 func (*FieldMask) ProtoMessage()    {}
 func (*FieldMask) Descriptor() ([]byte, []int) {
-	return fileDescriptor_5158202634f0da48, []int{0}
+	return fileDescriptor_field_mask_02a8b0c0831edcce, []int{0}
 }
-
 func (m *FieldMask) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_FieldMask.Unmarshal(m, b)
 }
 func (m *FieldMask) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_FieldMask.Marshal(b, m, deterministic)
 }
-func (m *FieldMask) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_FieldMask.Merge(m, src)
+func (dst *FieldMask) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FieldMask.Merge(dst, src)
 }
 func (m *FieldMask) XXX_Size() int {
 	return xxx_messageInfo_FieldMask.Size(m)
@@ -264,9 +260,11 @@
 	proto.RegisterType((*FieldMask)(nil), "google.protobuf.FieldMask")
 }
 
-func init() { proto.RegisterFile("google/protobuf/field_mask.proto", fileDescriptor_5158202634f0da48) }
+func init() {
+	proto.RegisterFile("google/protobuf/field_mask.proto", fileDescriptor_field_mask_02a8b0c0831edcce)
+}
 
-var fileDescriptor_5158202634f0da48 = []byte{
+var fileDescriptor_field_mask_02a8b0c0831edcce = []byte{
 	// 175 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xcf, 0xcf, 0x4f,
 	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcb, 0x4c, 0xcd,
diff --git a/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go b/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go
index 03ab0f6..519faab 100644
--- a/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go
+++ b/vendor/google.golang.org/genproto/protobuf/ptype/type.pb.go
@@ -1,16 +1,13 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: google/protobuf/type.proto
 
-package ptype
+package ptype // import "google.golang.org/genproto/protobuf/ptype"
 
-import (
-	fmt "fmt"
-	math "math"
-
-	proto "github.com/golang/protobuf/proto"
-	any "github.com/golang/protobuf/ptypes/any"
-	source_context "google.golang.org/genproto/protobuf/source_context"
-)
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import any "github.com/golang/protobuf/ptypes/any"
+import source_context "google.golang.org/genproto/protobuf/source_context"
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -21,7 +18,7 @@
 // is compatible with the proto package it is being compiled against.
 // A compilation error at this line likely means your copy of the
 // proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 
 // The syntax in which a protocol buffer element is defined.
 type Syntax int32
@@ -37,7 +34,6 @@
 	0: "SYNTAX_PROTO2",
 	1: "SYNTAX_PROTO3",
 }
-
 var Syntax_value = map[string]int32{
 	"SYNTAX_PROTO2": 0,
 	"SYNTAX_PROTO3": 1,
@@ -46,9 +42,8 @@
 func (x Syntax) String() string {
 	return proto.EnumName(Syntax_name, int32(x))
 }
-
 func (Syntax) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_dd271cc1e348c538, []int{0}
+	return fileDescriptor_type_de958d9f8682c896, []int{0}
 }
 
 // Basic field types.
@@ -116,7 +111,6 @@
 	17: "TYPE_SINT32",
 	18: "TYPE_SINT64",
 }
-
 var Field_Kind_value = map[string]int32{
 	"TYPE_UNKNOWN":  0,
 	"TYPE_DOUBLE":   1,
@@ -142,9 +136,8 @@
 func (x Field_Kind) String() string {
 	return proto.EnumName(Field_Kind_name, int32(x))
 }
-
 func (Field_Kind) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_dd271cc1e348c538, []int{1, 0}
+	return fileDescriptor_type_de958d9f8682c896, []int{1, 0}
 }
 
 // Whether a field is optional, required, or repeated.
@@ -167,7 +160,6 @@
 	2: "CARDINALITY_REQUIRED",
 	3: "CARDINALITY_REPEATED",
 }
-
 var Field_Cardinality_value = map[string]int32{
 	"CARDINALITY_UNKNOWN":  0,
 	"CARDINALITY_OPTIONAL": 1,
@@ -178,9 +170,8 @@
 func (x Field_Cardinality) String() string {
 	return proto.EnumName(Field_Cardinality_name, int32(x))
 }
-
 func (Field_Cardinality) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_dd271cc1e348c538, []int{1, 1}
+	return fileDescriptor_type_de958d9f8682c896, []int{1, 1}
 }
 
 // A protocol buffer message type.
@@ -206,17 +197,16 @@
 func (m *Type) String() string { return proto.CompactTextString(m) }
 func (*Type) ProtoMessage()    {}
 func (*Type) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd271cc1e348c538, []int{0}
+	return fileDescriptor_type_de958d9f8682c896, []int{0}
 }
-
 func (m *Type) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Type.Unmarshal(m, b)
 }
 func (m *Type) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Type.Marshal(b, m, deterministic)
 }
-func (m *Type) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Type.Merge(m, src)
+func (dst *Type) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Type.Merge(dst, src)
 }
 func (m *Type) XXX_Size() int {
 	return xxx_messageInfo_Type.Size(m)
@@ -302,17 +292,16 @@
 func (m *Field) String() string { return proto.CompactTextString(m) }
 func (*Field) ProtoMessage()    {}
 func (*Field) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd271cc1e348c538, []int{1}
+	return fileDescriptor_type_de958d9f8682c896, []int{1}
 }
-
 func (m *Field) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Field.Unmarshal(m, b)
 }
 func (m *Field) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Field.Marshal(b, m, deterministic)
 }
-func (m *Field) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Field.Merge(m, src)
+func (dst *Field) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Field.Merge(dst, src)
 }
 func (m *Field) XXX_Size() int {
 	return xxx_messageInfo_Field.Size(m)
@@ -414,17 +403,16 @@
 func (m *Enum) String() string { return proto.CompactTextString(m) }
 func (*Enum) ProtoMessage()    {}
 func (*Enum) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd271cc1e348c538, []int{2}
+	return fileDescriptor_type_de958d9f8682c896, []int{2}
 }
-
 func (m *Enum) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Enum.Unmarshal(m, b)
 }
 func (m *Enum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Enum.Marshal(b, m, deterministic)
 }
-func (m *Enum) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Enum.Merge(m, src)
+func (dst *Enum) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Enum.Merge(dst, src)
 }
 func (m *Enum) XXX_Size() int {
 	return xxx_messageInfo_Enum.Size(m)
@@ -487,17 +475,16 @@
 func (m *EnumValue) String() string { return proto.CompactTextString(m) }
 func (*EnumValue) ProtoMessage()    {}
 func (*EnumValue) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd271cc1e348c538, []int{3}
+	return fileDescriptor_type_de958d9f8682c896, []int{3}
 }
-
 func (m *EnumValue) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_EnumValue.Unmarshal(m, b)
 }
 func (m *EnumValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_EnumValue.Marshal(b, m, deterministic)
 }
-func (m *EnumValue) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_EnumValue.Merge(m, src)
+func (dst *EnumValue) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnumValue.Merge(dst, src)
 }
 func (m *EnumValue) XXX_Size() int {
 	return xxx_messageInfo_EnumValue.Size(m)
@@ -551,17 +538,16 @@
 func (m *Option) String() string { return proto.CompactTextString(m) }
 func (*Option) ProtoMessage()    {}
 func (*Option) Descriptor() ([]byte, []int) {
-	return fileDescriptor_dd271cc1e348c538, []int{4}
+	return fileDescriptor_type_de958d9f8682c896, []int{4}
 }
-
 func (m *Option) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_Option.Unmarshal(m, b)
 }
 func (m *Option) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_Option.Marshal(b, m, deterministic)
 }
-func (m *Option) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Option.Merge(m, src)
+func (dst *Option) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Option.Merge(dst, src)
 }
 func (m *Option) XXX_Size() int {
 	return xxx_messageInfo_Option.Size(m)
@@ -587,19 +573,19 @@
 }
 
 func init() {
-	proto.RegisterEnum("google.protobuf.Syntax", Syntax_name, Syntax_value)
-	proto.RegisterEnum("google.protobuf.Field_Kind", Field_Kind_name, Field_Kind_value)
-	proto.RegisterEnum("google.protobuf.Field_Cardinality", Field_Cardinality_name, Field_Cardinality_value)
 	proto.RegisterType((*Type)(nil), "google.protobuf.Type")
 	proto.RegisterType((*Field)(nil), "google.protobuf.Field")
 	proto.RegisterType((*Enum)(nil), "google.protobuf.Enum")
 	proto.RegisterType((*EnumValue)(nil), "google.protobuf.EnumValue")
 	proto.RegisterType((*Option)(nil), "google.protobuf.Option")
+	proto.RegisterEnum("google.protobuf.Syntax", Syntax_name, Syntax_value)
+	proto.RegisterEnum("google.protobuf.Field_Kind", Field_Kind_name, Field_Kind_value)
+	proto.RegisterEnum("google.protobuf.Field_Cardinality", Field_Cardinality_name, Field_Cardinality_value)
 }
 
-func init() { proto.RegisterFile("google/protobuf/type.proto", fileDescriptor_dd271cc1e348c538) }
+func init() { proto.RegisterFile("google/protobuf/type.proto", fileDescriptor_type_de958d9f8682c896) }
 
-var fileDescriptor_dd271cc1e348c538 = []byte{
+var fileDescriptor_type_de958d9f8682c896 = []byte{
 	// 810 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x8e, 0xda, 0x56,
 	0x14, 0x8e, 0x8d, 0xf1, 0xe0, 0xc3, 0xc0, 0xdc, 0xdc, 0x44, 0x89, 0x33, 0x91, 0x52, 0x44, 0xbb,
diff --git a/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go b/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go
index fe44f7e..c073ffb 100644
--- a/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go
+++ b/vendor/google.golang.org/genproto/protobuf/source_context/source_context.pb.go
@@ -1,14 +1,11 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // source: google/protobuf/source_context.proto
 
-package source_context
+package source_context // import "google.golang.org/genproto/protobuf/source_context"
 
-import (
-	fmt "fmt"
-	math "math"
-
-	proto "github.com/golang/protobuf/proto"
-)
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
@@ -19,7 +16,7 @@
 // is compatible with the proto package it is being compiled against.
 // A compilation error at this line likely means your copy of the
 // proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 
 // `SourceContext` represents information about the source of a
 // protobuf element, like the file in which it is defined.
@@ -36,17 +33,16 @@
 func (m *SourceContext) String() string { return proto.CompactTextString(m) }
 func (*SourceContext) ProtoMessage()    {}
 func (*SourceContext) Descriptor() ([]byte, []int) {
-	return fileDescriptor_b686cdb126d509db, []int{0}
+	return fileDescriptor_source_context_4ade4e806de19b22, []int{0}
 }
-
 func (m *SourceContext) XXX_Unmarshal(b []byte) error {
 	return xxx_messageInfo_SourceContext.Unmarshal(m, b)
 }
 func (m *SourceContext) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 	return xxx_messageInfo_SourceContext.Marshal(b, m, deterministic)
 }
-func (m *SourceContext) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_SourceContext.Merge(m, src)
+func (dst *SourceContext) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SourceContext.Merge(dst, src)
 }
 func (m *SourceContext) XXX_Size() int {
 	return xxx_messageInfo_SourceContext.Size(m)
@@ -69,10 +65,10 @@
 }
 
 func init() {
-	proto.RegisterFile("google/protobuf/source_context.proto", fileDescriptor_b686cdb126d509db)
+	proto.RegisterFile("google/protobuf/source_context.proto", fileDescriptor_source_context_4ade4e806de19b22)
 }
 
-var fileDescriptor_b686cdb126d509db = []byte{
+var fileDescriptor_source_context_4ade4e806de19b22 = []byte{
 	// 184 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x49, 0xcf, 0xcf, 0x4f,
 	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xce, 0x2f, 0x2d,
