func RemoveDuplicates(elements []string) []string {
	encountered := map[string]bool{}
	result := []string{}
	for v := range elements {
		if encountered[elements[v]] == true {
		} else {
			encountered[elements[v]] = true
			result = append(result, elements[v])
		}
	}
	return result
}
RemoveDuplicates removes duplicate items from a list
package utils
import (
	"archive/zip"
	"bytes"
	"context"
	"crypto/sha256"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"os"
	"os/exec"
	"path/filepath"
	"regexp"
	"strings"
	"github.com/parnurzeal/gorequest"
)
var AppHelpTemplate = `Usage: {{.Name}} {{if .Flags}}[OPTIONS] {{end}}COMMAND [arg...]
{{.Usage}}
Version: {{.Version}}{{if or .Author .Email}}
Author:{{if .Author}}
  {{.Author}}{{if .Email}} - <{{.Email}}>{{end}}{{else}}
  {{.Email}}{{end}}{{end}}
{{if .Flags}}
Options:
  {{range .Flags}}{{.}}
  {{end}}{{end}}
Commands:
  {{range .Commands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}}
  {{end}}
Run '{{.Name}} COMMAND --help' for more information on a command.
`
var camelingRegex = regexp.MustCompile("[0-9A-Za-z]+")
func CamelCase(src string) string {
	byteSrc := []byte(src)
	chunks := camelingRegex.FindAll(byteSrc, -1)
	for idx, val := range chunks {
		if idx > 0 {
			chunks[idx] = bytes.Title(val)
		}
	}
	return string(bytes.Join(chunks, nil))
}
func Getopt(name, dfault string) string {
	value := os.Getenv(name)
	if value == "" {
		value = dfault
	}
	return value
}
func Getopts(userInput, envVar, dfault string) string {
	if len(strings.TrimSpace(userInput)) > 0 {
		return userInput
	}
	value := os.Getenv(envVar)
	if value == "" {
		value = dfault
	}
	return value
}
func Assert(err error) {
	if err != nil {
		log.Fatal(err)
	}
}
func GetSHA256(name string) string {
	dat, err := ioutil.ReadFile(name)
	Assert(err)
	h256 := sha256.New()
	_, err = h256.Write(dat)
	Assert(err)
	return fmt.Sprintf("%x", h256.Sum(nil))
}
func RunCommand(ctx context.Context, cmd string, args ...string) (string, error) {
	var c *exec.Cmd
	if ctx != nil {
		c = exec.CommandContext(ctx, cmd, args...)
	} else {
		c = exec.Command(cmd, args...)
	}
	output, err := c.Output()
	if err != nil {
		return string(output), err
	}
	if ctx != nil {
		if ctx.Err() == context.DeadlineExceeded {
			return "", fmt.Errorf("command %s timed out", cmd)
		}
	}
	return string(output), nil
}
func printStatus(resp gorequest.Response, body string, errs []error) {
	fmt.Println(resp.Status)
}