diff --git a/cloudstack/provider.go b/cloudstack/provider.go
index 36d4c73..534e03a 100644
--- a/cloudstack/provider.go
+++ b/cloudstack/provider.go
@@ -89,6 +89,7 @@
 			"cloudstack_firewall":             resourceCloudStackFirewall(),
 			"cloudstack_instance":             resourceCloudStackInstance(),
 			"cloudstack_ipaddress":            resourceCloudStackIPAddress(),
+			"cloudstack_kubernetes_cluster":   resourceCloudStackKubernetesCluster(),
 			"cloudstack_loadbalancer_rule":    resourceCloudStackLoadBalancerRule(),
 			"cloudstack_network":              resourceCloudStackNetwork(),
 			"cloudstack_network_acl":          resourceCloudStackNetworkACL(),
diff --git a/cloudstack/resource_cloudstack_kubernetes_cluster.go b/cloudstack/resource_cloudstack_kubernetes_cluster.go
new file mode 100644
index 0000000..bdb0dbd
--- /dev/null
+++ b/cloudstack/resource_cloudstack_kubernetes_cluster.go
@@ -0,0 +1,343 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package cloudstack
+
+import (
+	"fmt"
+	"log"
+	"strings"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+	"github.com/hashicorp/terraform/helper/schema"
+)
+
+func resourceCloudStackKubernetesCluster() *schema.Resource {
+	return &schema.Resource{
+		Create: resourceCloudStackKubernetesClusterCreate,
+		Read:   resourceCloudStackKubernetesClusterRead,
+		Update: resourceCloudStackKubernetesClusterUpdate,
+		Delete: resourceCloudStackKubernetesClusterDelete,
+		Importer: &schema.ResourceImporter{
+			State: importStatePassthrough,
+		},
+
+		Schema: map[string]*schema.Schema{
+			"name": {
+				Type:     schema.TypeString,
+				Required: true,
+				ForceNew: true,
+			},
+
+			"zone": {
+				Type:     schema.TypeString,
+				Required: true,
+				ForceNew: true,
+			},
+
+			"kubernetes_version": {
+				Type:     schema.TypeString,
+				Required: true,
+			},
+
+			"service_offering": {
+				Type:     schema.TypeString,
+				Required: true,
+			},
+
+			// Begin optional params
+			"size": {
+				Type:     schema.TypeInt,
+				Optional: true,
+				Default:  1,
+			},
+
+			"autoscaling_enabled": {
+				Type:     schema.TypeBool,
+				Optional: true,
+			},
+
+			"min_size": {
+				Type:     schema.TypeInt,
+				Optional: true,
+			},
+
+			"max_size": {
+				Type:     schema.TypeInt,
+				Optional: true,
+			},
+
+			"control_nodes_size": {
+				Type:     schema.TypeInt,
+				Optional: true,
+				Computed: true,
+				ForceNew: true, // For now
+			},
+
+			"description": {
+				Type:     schema.TypeString,
+				Optional: true,
+				Computed: true,
+			},
+
+			"keypair": {
+				Type:     schema.TypeString,
+				Optional: true,
+				ForceNew: true,
+			},
+
+			"network_id": {
+				Type:     schema.TypeString,
+				Optional: true,
+				Computed: true,
+				ForceNew: true,
+			},
+
+			"ip_address": {
+				Type:     schema.TypeString,
+				Computed: true,
+			},
+
+			"state": {
+				Type:     schema.TypeString,
+				Optional: true,
+				Computed: true,
+				// Default:  "Running",
+			},
+
+			"project": {
+				Type:     schema.TypeString,
+				Optional: true,
+				ForceNew: true,
+			},
+		},
+	}
+}
+
+func resourceCloudStackKubernetesClusterCreate(d *schema.ResourceData, meta interface{}) error {
+	cs := meta.(*cloudstack.CloudStackClient)
+
+	// State is always Running when created
+	if state, ok := d.GetOk("state"); ok {
+		if state.(string) != "Running" {
+			return fmt.Errorf("State must be 'Running' when first creating a cluster")
+		}
+	}
+
+	name := d.Get("name").(string)
+	size := int64(d.Get("size").(int))
+	serviceOfferingID, e := retrieveID(cs, "service_offering", d.Get("service_offering").(string))
+	if e != nil {
+		return e.Error()
+	}
+	zoneID, e := retrieveID(cs, "zone", d.Get("zone").(string))
+	if e != nil {
+		return e.Error()
+	}
+	kubernetesVersionID, e := retrieveID(cs, "kubernetes_version", d.Get("kubernetes_version").(string))
+	if e != nil {
+		return e.Error()
+	}
+
+	// Create a new parameter struct
+	p := cs.Kubernetes.NewCreateKubernetesClusterParams(name, kubernetesVersionID, name, serviceOfferingID, size, zoneID)
+
+	// Set optional params
+	if description, ok := d.GetOk("description"); ok {
+		p.SetDescription(description.(string))
+	}
+	if keypair, ok := d.GetOk("keypair"); ok {
+		p.SetKeypair(keypair.(string))
+	}
+	if networkID, ok := d.GetOk("network_id"); ok {
+		p.SetNetworkid(networkID.(string))
+	}
+	if controlNodesSize, ok := d.GetOk("control_nodes_size"); ok {
+		p.SetControlnodes(int64(controlNodesSize.(int)))
+	}
+
+	// If there is a project supplied, we retrieve and set the project id
+	if err := setProjectid(p, cs, d); err != nil {
+		return err
+	}
+
+	log.Printf("[DEBUG] Creating Kubernetes Cluster %s", name)
+	r, err := cs.Kubernetes.CreateKubernetesCluster(p)
+	if err != nil {
+		return err
+	}
+
+	log.Printf("[DEBUG] Kubernetes Cluster %s successfully created", name)
+	d.SetId(r.Id)
+
+	if _, ok := d.GetOk("autoscaling_enabled"); ok {
+		err = autoscaleKubernetesCluster(d, meta)
+		if err != nil {
+			return err
+		}
+	}
+
+	return resourceCloudStackKubernetesClusterRead(d, meta)
+}
+
+func resourceCloudStackKubernetesClusterRead(d *schema.ResourceData, meta interface{}) error {
+	cs := meta.(*cloudstack.CloudStackClient)
+
+	log.Printf("[DEBUG] Retrieving Kubernetes Cluster %s", d.Get("name").(string))
+
+	// Get the Kubernetes Cluster details
+	cluster, count, err := cs.Kubernetes.GetKubernetesClusterByID(
+		d.Id(),
+		cloudstack.WithProject(d.Get("project").(string)),
+	)
+	if err != nil {
+		if count == 0 {
+			log.Printf("[DEBUG] Kubernetes Cluster %s does not longer exist", d.Get("name").(string))
+			d.SetId("")
+			return nil
+		}
+
+		return err
+	}
+
+	// Update the config
+	d.SetId(cluster.Id)
+	d.Set("name", cluster.Name)
+	d.Set("description", cluster.Description)
+	d.Set("control_nodes_size", cluster.Controlnodes)
+	d.Set("size", cluster.Size)
+	d.Set("autoscaling_enabled", cluster.Autoscalingenabled)
+	d.Set("min_size", cluster.Minsize)
+	d.Set("max_size", cluster.Maxsize)
+	d.Set("keypair", cluster.Keypair)
+	d.Set("network_id", cluster.Networkid)
+	d.Set("ip_address", cluster.Ipaddress)
+	d.Set("state", cluster.State)
+
+	setValueOrID(d, "kubernetes_version", cluster.Kubernetesversionname, cluster.Kubernetesversionid)
+	setValueOrID(d, "service_offering", cluster.Serviceofferingname, cluster.Serviceofferingid)
+	setValueOrID(d, "project", cluster.Project, cluster.Projectid)
+	setValueOrID(d, "zone", cluster.Zonename, cluster.Zoneid)
+
+	return nil
+}
+
+func autoscaleKubernetesCluster(d *schema.ResourceData, meta interface{}) error {
+	cs := meta.(*cloudstack.CloudStackClient)
+	p := cs.Kubernetes.NewScaleKubernetesClusterParams(d.Id())
+	p.SetAutoscalingenabled(d.Get("autoscaling_enabled").(bool))
+	p.SetMinsize(int64(d.Get("min_size").(int)))
+	p.SetMaxsize(int64(d.Get("max_size").(int)))
+	_, err := cs.Kubernetes.ScaleKubernetesCluster(p)
+	return err
+}
+
+func resourceCloudStackKubernetesClusterUpdate(d *schema.ResourceData, meta interface{}) error {
+	cs := meta.(*cloudstack.CloudStackClient)
+	d.Partial(true)
+
+	if d.HasChange("service_offering") || d.HasChange("size") {
+		p := cs.Kubernetes.NewScaleKubernetesClusterParams(d.Id())
+		serviceOfferingID, e := retrieveID(cs, "service_offering", d.Get("service_offering").(string))
+		if e != nil {
+			return e.Error()
+		}
+		p.SetServiceofferingid(serviceOfferingID)
+		p.SetSize(int64(d.Get("size").(int)))
+		_, err := cs.Kubernetes.ScaleKubernetesCluster(p)
+		if err != nil {
+			return fmt.Errorf(
+				"Error Scaling Kubernetes Cluster %s: %s", d.Id(), err)
+		}
+		d.SetPartial("service_offering")
+		d.SetPartial("size")
+	}
+
+	if d.HasChange("autoscaling_enabled") || d.HasChange("min_size") || d.HasChange("max_size") {
+		err := autoscaleKubernetesCluster(d, meta)
+		if err != nil {
+			return err
+		}
+		d.SetPartial("autoscaling_enabled")
+		d.SetPartial("min_size")
+		d.SetPartial("max_size")
+	}
+
+	if d.HasChange("kubernetes_version") {
+		kubernetesVersionID, e := retrieveID(cs, "kubernetes_version", d.Get("kubernetes_version").(string))
+		if e != nil {
+			return e.Error()
+		}
+		p := cs.Kubernetes.NewUpgradeKubernetesClusterParams(d.Id(), kubernetesVersionID)
+		_, err := cs.Kubernetes.UpgradeKubernetesCluster(p)
+		if err != nil {
+			return fmt.Errorf(
+				"Error Upgrading Kubernetes Cluster %s: %s", d.Id(), err)
+		}
+		d.SetPartial("kubernetes_version")
+	}
+
+	if d.HasChange("state") {
+		state := d.Get("state").(string)
+		switch state {
+		case "Running":
+			p := cs.Kubernetes.NewStartKubernetesClusterParams(d.Id())
+			_, err := cs.Kubernetes.StartKubernetesCluster(p)
+			if err != nil {
+				return fmt.Errorf(
+					"Error Starting Kubernetes Cluster %s: %s", d.Id(), err)
+			}
+		case "Stopped":
+			p := cs.Kubernetes.NewStopKubernetesClusterParams(d.Id())
+			_, err := cs.Kubernetes.StopKubernetesCluster(p)
+			if err != nil {
+				return fmt.Errorf(
+					"Error Stopping Kubernetes Cluster %s: %s", d.Id(), err)
+			}
+		default:
+			return fmt.Errorf("State must either be 'Running' or 'Stopped'")
+		}
+		d.SetPartial("state")
+	}
+
+	d.Partial(false)
+	return resourceCloudStackKubernetesClusterRead(d, meta)
+}
+
+func resourceCloudStackKubernetesClusterDelete(d *schema.ResourceData, meta interface{}) error {
+	cs := meta.(*cloudstack.CloudStackClient)
+
+	// Create a new parameter struct
+	p := cs.Kubernetes.NewDeleteKubernetesClusterParams(d.Id())
+
+	// Delete the Kubernetes Cluster
+	_, err := cs.Kubernetes.DeleteKubernetesCluster(p)
+	if err != nil {
+		// This is a very poor way to be told the ID does no longer exist :(
+		if strings.Contains(err.Error(), fmt.Sprintf(
+			"Invalid parameter id value=%s due to incorrect long value format, "+
+				"or entity does not exist", d.Id())) {
+			return nil
+		}
+
+		return fmt.Errorf("Error deleting Kubernetes Cluster: %s", err)
+	}
+
+	return nil
+}
diff --git a/cloudstack/resources.go b/cloudstack/resources.go
index 8b0404c..1b29958 100644
--- a/cloudstack/resources.go
+++ b/cloudstack/resources.go
@@ -70,12 +70,14 @@
 	switch name {
 	case "disk_offering":
 		id, _, err = cs.DiskOffering.GetDiskOfferingID(value)
-	case "service_offering":
-		id, _, err = cs.ServiceOffering.GetServiceOfferingID(value)
+	case "kubernetes_version":
+		id, _, err = cs.Kubernetes.GetKubernetesSupportedVersionID(value)
 	case "network_offering":
 		id, _, err = cs.NetworkOffering.GetNetworkOfferingID(value)
 	case "project":
 		id, _, err = cs.Project.GetProjectID(value)
+	case "service_offering":
+		id, _, err = cs.ServiceOffering.GetServiceOfferingID(value)
 	case "vpc_offering":
 		id, _, err = cs.VPC.GetVPCOfferingID(value)
 	case "zone":
diff --git a/go.mod b/go.mod
index e681d5c..d91a136 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,7 @@
 module github.com/terraform-providers/terraform-provider-cloudstack
 
 require (
-	github.com/apache/cloudstack-go/v2 v2.11.0
+	github.com/apache/cloudstack-go/v2 v2.13.1
 	github.com/go-ini/ini v1.40.0
 	github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e // indirect
 	github.com/hashicorp/go-multierror v1.0.0
diff --git a/go.sum b/go.sum
index cdfa7d3..45648b4 100644
--- a/go.sum
+++ b/go.sum
@@ -24,6 +24,8 @@
 github.com/antchfx/xquery v0.0.0-20180515051857-ad5b8c7a47b0/go.mod h1:LzD22aAzDP8/dyiCKFp31He4m2GPjl0AFyzDtZzUu9M=
 github.com/apache/cloudstack-go/v2 v2.11.0 h1:IHekkdpeN/i4LY0/FkJX/PUR19ZthLza7eooz00T6fs=
 github.com/apache/cloudstack-go/v2 v2.11.0/go.mod h1:/u2vUqwD9endDgacTn4d2XxxVtu648f9edcYsM9wKGg=
+github.com/apache/cloudstack-go/v2 v2.13.1 h1:UHhNJ+5coUsgk9D5WBbqbY8hYfJ1bXgNxaSg2uGz4Ns=
+github.com/apache/cloudstack-go/v2 v2.13.1/go.mod h1:aosD8Svfu5nhH5Sp4zcsVV1hT5UGt3mTgRXM8YqTKe0=
 github.com/apparentlymart/go-cidr v1.0.0 h1:lGDvXx8Lv9QHjrAVP7jyzleG4F9+FkRhJcEsDFxeb8w=
 github.com/apparentlymart/go-cidr v1.0.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc=
 github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
@@ -88,6 +90,8 @@
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
+github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
 github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.0 h1:kbxbvI4Un1LUWKxufD+BiE6AEExYYgkQLQmLFqA1LFk=
@@ -309,6 +313,7 @@
 github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
 github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xlab/treeprint v0.0.0-20161029104018-1d6e34225557/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/zclconf/go-cty v0.0.0-20181129180422-88fbe721e0f8/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s=
 github.com/zclconf/go-cty v0.0.0-20190426224007-b18a157db9e2/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s=
 github.com/zclconf/go-cty v0.0.0-20190516203816-4fecf87372ec h1:MSeYjmyjucsFbecMTxg63ASg23lcSARP/kr9sClTFfk=
@@ -333,6 +338,7 @@
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -345,6 +351,8 @@
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190502183928-7f726cade0ab/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI=
 golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -372,13 +380,16 @@
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211004093028-2c5d950f24ef h1:fPxZ3Umkct3LZ8gK9nbk+DWDJ9fstZa2grBn+lWVKPs=
 golang.org/x/sys v0.0.0-20211004093028-2c5d950f24ef/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 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/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -387,6 +398,11 @@
 golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
 google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
 google.golang.org/api v0.1.0 h1:K6z2u68e86TPdSdefXdzvXgR1zEMa+459vBSfWYAZkI=
