You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ut...@apache.org on 2019/06/26 17:34:17 UTC

[mynewt-newt] branch master updated (358cfcb -> 9cbd050)

This is an automated email from the ASF dual-hosted git repository.

utzig pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git.


    from 358cfcb  build.sh: Remove module write-protection before rm
     new 53f9e0c  Add support for signing images with ed25519
     new 2c05273  Remove all remaining vendored stuff
     new 1ab7ad3  Update go module dependencies
     new 2efa3a0  Update build script for go 1.12 and go modules
     new 8a9da9e  Remove GO111MODULE env from travis-ci
     new 9cbd050  Update travis for go 1.12

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .travis.yml                                        |    5 +-
 artifact/image/create.go                           |   23 +-
 artifact/image/image.go                            |    5 +-
 artifact/sec/key.go                                |   96 +-
 build.sh                                           |   11 +-
 go.mod                                             |   14 +-
 go.sum                                             |   56 +-
 .../github.com/NickBall/go-aes-key-wrap/.gitignore |   14 -
 .../NickBall/go-aes-key-wrap/.travis.yml           |    7 -
 vendor/github.com/NickBall/go-aes-key-wrap/LICENSE |   21 -
 .../github.com/NickBall/go-aes-key-wrap/README.md  |    4 -
 .../github.com/NickBall/go-aes-key-wrap/keywrap.go |  111 -
 .../NickBall/go-aes-key-wrap/keywrap_test.go       |   97 -
 .../github.com/inconshreveable/mousetrap/LICENSE   |   13 -
 .../github.com/inconshreveable/mousetrap/README.md |   23 -
 .../inconshreveable/mousetrap/trap_others.go       |   15 -
 .../inconshreveable/mousetrap/trap_windows.go      |   98 -
 .../inconshreveable/mousetrap/trap_windows_1.4.go  |   46 -
 vendor/github.com/sirupsen/logrus/.gitignore       |    1 -
 vendor/github.com/sirupsen/logrus/.travis.yml      |   15 -
 vendor/github.com/sirupsen/logrus/CHANGELOG.md     |  123 -
 vendor/github.com/sirupsen/logrus/LICENSE          |   21 -
 vendor/github.com/sirupsen/logrus/README.md        |  511 ----
 vendor/github.com/sirupsen/logrus/alt_exit.go      |   64 -
 vendor/github.com/sirupsen/logrus/alt_exit_test.go |   83 -
 vendor/github.com/sirupsen/logrus/appveyor.yml     |   14 -
 vendor/github.com/sirupsen/logrus/doc.go           |   26 -
 vendor/github.com/sirupsen/logrus/entry.go         |  288 ---
 vendor/github.com/sirupsen/logrus/entry_test.go    |  115 -
 .../sirupsen/logrus/example_basic_test.go          |   69 -
 .../sirupsen/logrus/example_hook_test.go           |   35 -
 vendor/github.com/sirupsen/logrus/exported.go      |  193 --
 vendor/github.com/sirupsen/logrus/formatter.go     |   45 -
 .../sirupsen/logrus/formatter_bench_test.go        |  101 -
 vendor/github.com/sirupsen/logrus/hook_test.go     |  144 --
 vendor/github.com/sirupsen/logrus/hooks.go         |   34 -
 .../github.com/sirupsen/logrus/json_formatter.go   |   79 -
 .../sirupsen/logrus/json_formatter_test.go         |  199 --
 vendor/github.com/sirupsen/logrus/logger.go        |  323 ---
 .../sirupsen/logrus/logger_bench_test.go           |   61 -
 vendor/github.com/sirupsen/logrus/logrus.go        |  143 --
 vendor/github.com/sirupsen/logrus/logrus_test.go   |  386 ---
 vendor/github.com/sirupsen/logrus/terminal_bsd.go  |   10 -
 .../sirupsen/logrus/terminal_check_appengine.go    |   11 -
 .../sirupsen/logrus/terminal_check_notappengine.go |   19 -
 .../github.com/sirupsen/logrus/terminal_linux.go   |   14 -
 .../github.com/sirupsen/logrus/text_formatter.go   |  178 --
 .../sirupsen/logrus/text_formatter_test.go         |  141 -
 vendor/github.com/sirupsen/logrus/writer.go        |   62 -
 vendor/github.com/spf13/cast/.gitignore            |   25 -
 vendor/github.com/spf13/cast/.travis.yml           |   14 -
 vendor/github.com/spf13/cast/LICENSE               |   21 -
 vendor/github.com/spf13/cast/Makefile              |   38 -
 vendor/github.com/spf13/cast/README.md             |   75 -
 vendor/github.com/spf13/cast/cast.go               |  159 --
 vendor/github.com/spf13/cast/cast_test.go          | 1208 ---------
 vendor/github.com/spf13/cast/caste.go              | 1166 ---------
 vendor/github.com/spf13/cobra/.gitignore           |   36 -
 vendor/github.com/spf13/cobra/.mailmap             |    3 -
 vendor/github.com/spf13/cobra/.travis.yml          |   21 -
 vendor/github.com/spf13/cobra/LICENSE.txt          |  174 --
 vendor/github.com/spf13/cobra/README.md            |  736 ------
 vendor/github.com/spf13/cobra/args.go              |   89 -
 vendor/github.com/spf13/cobra/args_test.go         |  241 --
 vendor/github.com/spf13/cobra/bash_completions.go  |  584 -----
 vendor/github.com/spf13/cobra/bash_completions.md  |  221 --
 .../spf13/cobra/bash_completions_test.go           |  217 --
 vendor/github.com/spf13/cobra/cobra.go             |  200 --
 vendor/github.com/spf13/cobra/cobra_test.go        |   22 -
 vendor/github.com/spf13/cobra/command.go           | 1517 -----------
 vendor/github.com/spf13/cobra/command_notwin.go    |    5 -
 vendor/github.com/spf13/cobra/command_test.go      | 1733 -------------
 vendor/github.com/spf13/cobra/command_win.go       |   20 -
 vendor/github.com/spf13/cobra/zsh_completions.go   |  126 -
 .../github.com/spf13/cobra/zsh_completions_test.go |   89 -
 vendor/github.com/spf13/pflag/.gitignore           |    2 -
 vendor/github.com/spf13/pflag/.travis.yml          |   21 -
 vendor/github.com/spf13/pflag/LICENSE              |   28 -
 vendor/github.com/spf13/pflag/README.md            |  296 ---
 vendor/github.com/spf13/pflag/bool.go              |   94 -
 vendor/github.com/spf13/pflag/bool_slice.go        |  147 --
 vendor/github.com/spf13/pflag/bool_slice_test.go   |  215 --
 vendor/github.com/spf13/pflag/bool_test.go         |  179 --
 vendor/github.com/spf13/pflag/bytes.go             |  105 -
 vendor/github.com/spf13/pflag/bytes_test.go        |   72 -
 vendor/github.com/spf13/pflag/count.go             |   96 -
 vendor/github.com/spf13/pflag/count_test.go        |   56 -
 vendor/github.com/spf13/pflag/duration.go          |   86 -
 vendor/github.com/spf13/pflag/duration_slice.go    |  128 -
 .../github.com/spf13/pflag/duration_slice_test.go  |  165 --
 vendor/github.com/spf13/pflag/example_test.go      |   36 -
 vendor/github.com/spf13/pflag/export_test.go       |   29 -
 vendor/github.com/spf13/pflag/flag.go              | 1223 ---------
 vendor/github.com/spf13/pflag/flag_test.go         | 1259 ---------
 vendor/github.com/spf13/pflag/float32.go           |   88 -
 vendor/github.com/spf13/pflag/float64.go           |   84 -
 vendor/github.com/spf13/pflag/golangflag.go        |  105 -
 vendor/github.com/spf13/pflag/golangflag_test.go   |   47 -
 vendor/github.com/spf13/pflag/int.go               |   84 -
 vendor/github.com/spf13/pflag/int16.go             |   88 -
 vendor/github.com/spf13/pflag/int32.go             |   88 -
 vendor/github.com/spf13/pflag/int64.go             |   84 -
 vendor/github.com/spf13/pflag/int8.go              |   88 -
 vendor/github.com/spf13/pflag/int_slice.go         |  128 -
 vendor/github.com/spf13/pflag/int_slice_test.go    |  165 --
 vendor/github.com/spf13/pflag/ip.go                |   94 -
 vendor/github.com/spf13/pflag/ip_slice.go          |  148 --
 vendor/github.com/spf13/pflag/ip_slice_test.go     |  222 --
 vendor/github.com/spf13/pflag/ip_test.go           |   63 -
 vendor/github.com/spf13/pflag/ipmask.go            |  122 -
 vendor/github.com/spf13/pflag/ipnet.go             |   98 -
 vendor/github.com/spf13/pflag/ipnet_test.go        |   70 -
 vendor/github.com/spf13/pflag/printusage_test.go   |   74 -
 vendor/github.com/spf13/pflag/string.go            |   80 -
 vendor/github.com/spf13/pflag/string_array.go      |  103 -
 vendor/github.com/spf13/pflag/string_array_test.go |  233 --
 vendor/github.com/spf13/pflag/string_slice.go      |  149 --
 vendor/github.com/spf13/pflag/string_slice_test.go |  253 --
 vendor/github.com/spf13/pflag/uint.go              |   88 -
 vendor/github.com/spf13/pflag/uint16.go            |   88 -
 vendor/github.com/spf13/pflag/uint32.go            |   88 -
 vendor/github.com/spf13/pflag/uint64.go            |   88 -
 vendor/github.com/spf13/pflag/uint8.go             |   88 -
 vendor/github.com/spf13/pflag/uint_slice.go        |  126 -
 vendor/github.com/spf13/pflag/uint_slice_test.go   |  161 --
 vendor/golang.org/x/crypto/.gitattributes          |   10 -
 vendor/golang.org/x/crypto/.gitignore              |    2 -
 vendor/golang.org/x/crypto/AUTHORS                 |    3 -
 vendor/golang.org/x/crypto/CONTRIBUTING.md         |   26 -
 vendor/golang.org/x/crypto/CONTRIBUTORS            |    3 -
 vendor/golang.org/x/crypto/LICENSE                 |   27 -
 vendor/golang.org/x/crypto/PATENTS                 |   22 -
 vendor/golang.org/x/crypto/README.md               |   21 -
 vendor/golang.org/x/crypto/codereview.cfg          |    1 -
 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go        |   77 -
 vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go   |  176 --
 vendor/golang.org/x/crypto/ssh/benchmark_test.go   |  123 -
 vendor/golang.org/x/crypto/ssh/buffer.go           |   97 -
 vendor/golang.org/x/crypto/ssh/buffer_test.go      |   87 -
 vendor/golang.org/x/crypto/ssh/certs.go            |  521 ----
 vendor/golang.org/x/crypto/ssh/certs_test.go       |  335 ---
 vendor/golang.org/x/crypto/ssh/channel.go          |  633 -----
 vendor/golang.org/x/crypto/ssh/cipher.go           |  770 ------
 vendor/golang.org/x/crypto/ssh/cipher_test.go      |  131 -
 vendor/golang.org/x/crypto/ssh/client.go           |  278 --
 vendor/golang.org/x/crypto/ssh/client_auth.go      |  525 ----
 vendor/golang.org/x/crypto/ssh/client_auth_test.go |  628 -----
 vendor/golang.org/x/crypto/ssh/client_test.go      |  166 --
 vendor/golang.org/x/crypto/ssh/common.go           |  383 ---
 vendor/golang.org/x/crypto/ssh/connection.go       |  143 --
 vendor/golang.org/x/crypto/ssh/doc.go              |   21 -
 vendor/golang.org/x/crypto/ssh/example_test.go     |  320 ---
 vendor/golang.org/x/crypto/ssh/handshake.go        |  646 -----
 vendor/golang.org/x/crypto/ssh/handshake_test.go   |  559 ----
 vendor/golang.org/x/crypto/ssh/kex.go              |  540 ----
 vendor/golang.org/x/crypto/ssh/kex_test.go         |   50 -
 vendor/golang.org/x/crypto/ssh/keys.go             | 1032 --------
 vendor/golang.org/x/crypto/ssh/keys_test.go        |  500 ----
 vendor/golang.org/x/crypto/ssh/mac.go              |   61 -
 vendor/golang.org/x/crypto/ssh/mempipe_test.go     |  110 -
 vendor/golang.org/x/crypto/ssh/messages.go         |  766 ------
 vendor/golang.org/x/crypto/ssh/messages_test.go    |  288 ---
 vendor/golang.org/x/crypto/ssh/mux.go              |  330 ---
 vendor/golang.org/x/crypto/ssh/mux_test.go         |  501 ----
 vendor/golang.org/x/crypto/ssh/server.go           |  593 -----
 vendor/golang.org/x/crypto/ssh/session.go          |  647 -----
 vendor/golang.org/x/crypto/ssh/session_test.go     |  774 ------
 vendor/golang.org/x/crypto/ssh/streamlocal.go      |  116 -
 vendor/golang.org/x/crypto/ssh/tcpip.go            |  474 ----
 vendor/golang.org/x/crypto/ssh/tcpip_test.go       |   20 -
 .../golang.org/x/crypto/ssh/terminal/terminal.go   |  951 -------
 .../x/crypto/ssh/terminal/terminal_test.go         |  358 ---
 vendor/golang.org/x/crypto/ssh/terminal/util.go    |  114 -
 .../golang.org/x/crypto/ssh/terminal/util_bsd.go   |   12 -
 .../golang.org/x/crypto/ssh/terminal/util_linux.go |   10 -
 .../golang.org/x/crypto/ssh/terminal/util_plan9.go |   58 -
 .../x/crypto/ssh/terminal/util_solaris.go          |  124 -
 .../x/crypto/ssh/terminal/util_windows.go          |  103 -
 vendor/golang.org/x/crypto/ssh/testdata_test.go    |   63 -
 vendor/golang.org/x/crypto/ssh/transport.go        |  353 ---
 vendor/golang.org/x/crypto/ssh/transport_test.go   |  113 -
 vendor/golang.org/x/sys/.gitattributes             |   10 -
 vendor/golang.org/x/sys/.gitignore                 |    2 -
 vendor/golang.org/x/sys/AUTHORS                    |    3 -
 vendor/golang.org/x/sys/CONTRIBUTING.md            |   26 -
 vendor/golang.org/x/sys/CONTRIBUTORS               |    3 -
 vendor/golang.org/x/sys/LICENSE                    |   27 -
 vendor/golang.org/x/sys/PATENTS                    |   22 -
 vendor/golang.org/x/sys/README.md                  |   18 -
 vendor/golang.org/x/sys/codereview.cfg             |    1 -
 vendor/golang.org/x/sys/unix/.gitignore            |    2 -
 vendor/golang.org/x/sys/unix/README.md             |  173 --
 vendor/golang.org/x/sys/unix/affinity_linux.go     |  124 -
 vendor/golang.org/x/sys/unix/asm_darwin_386.s      |   29 -
 vendor/golang.org/x/sys/unix/asm_darwin_amd64.s    |   29 -
 vendor/golang.org/x/sys/unix/asm_darwin_arm.s      |   30 -
 vendor/golang.org/x/sys/unix/asm_darwin_arm64.s    |   30 -
 vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s |   29 -
 vendor/golang.org/x/sys/unix/asm_freebsd_386.s     |   29 -
 vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s   |   29 -
 vendor/golang.org/x/sys/unix/asm_freebsd_arm.s     |   29 -
 vendor/golang.org/x/sys/unix/asm_linux_386.s       |   65 -
 vendor/golang.org/x/sys/unix/asm_linux_amd64.s     |   57 -
 vendor/golang.org/x/sys/unix/asm_linux_arm.s       |   56 -
 vendor/golang.org/x/sys/unix/asm_linux_arm64.s     |   52 -
 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s   |   56 -
 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s     |   54 -
 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s    |   56 -
 vendor/golang.org/x/sys/unix/asm_linux_s390x.s     |   56 -
 vendor/golang.org/x/sys/unix/asm_netbsd_386.s      |   29 -
 vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s    |   29 -
 vendor/golang.org/x/sys/unix/asm_netbsd_arm.s      |   29 -
 vendor/golang.org/x/sys/unix/asm_openbsd_386.s     |   29 -
 vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s   |   29 -
 vendor/golang.org/x/sys/unix/asm_openbsd_arm.s     |   29 -
 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s   |   17 -
 vendor/golang.org/x/sys/unix/bluetooth_linux.go    |   35 -
 vendor/golang.org/x/sys/unix/cap_freebsd.go        |  195 --
 vendor/golang.org/x/sys/unix/constants.go          |   13 -
 vendor/golang.org/x/sys/unix/creds_test.go         |  134 -
 vendor/golang.org/x/sys/unix/dev_darwin.go         |   24 -
 vendor/golang.org/x/sys/unix/dev_dragonfly.go      |   30 -
 vendor/golang.org/x/sys/unix/dev_freebsd.go        |   30 -
 vendor/golang.org/x/sys/unix/dev_linux.go          |   42 -
 vendor/golang.org/x/sys/unix/dev_linux_test.go     |   56 -
 vendor/golang.org/x/sys/unix/dev_netbsd.go         |   29 -
 vendor/golang.org/x/sys/unix/dev_openbsd.go        |   29 -
 vendor/golang.org/x/sys/unix/dirent.go             |   17 -
 vendor/golang.org/x/sys/unix/endian_big.go         |    9 -
 vendor/golang.org/x/sys/unix/endian_little.go      |    9 -
 vendor/golang.org/x/sys/unix/env_unix.go           |   31 -
 vendor/golang.org/x/sys/unix/errors_freebsd_386.go |  227 --
 .../golang.org/x/sys/unix/errors_freebsd_amd64.go  |  227 --
 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go |  226 --
 vendor/golang.org/x/sys/unix/example_test.go       |   19 -
 vendor/golang.org/x/sys/unix/export_test.go        |    9 -
 vendor/golang.org/x/sys/unix/fcntl.go              |   32 -
 vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go  |   13 -
 vendor/golang.org/x/sys/unix/gccgo.go              |   61 -
 vendor/golang.org/x/sys/unix/gccgo_c.c             |   38 -
 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go  |   20 -
 vendor/golang.org/x/sys/unix/mkall.sh              |  188 --
 vendor/golang.org/x/sys/unix/mkerrors.sh           |  604 -----
 vendor/golang.org/x/sys/unix/mkpost.go             |   98 -
 vendor/golang.org/x/sys/unix/mksyscall.pl          |  341 ---
 vendor/golang.org/x/sys/unix/mksyscall_solaris.pl  |  289 ---
 vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl   |  264 --
 vendor/golang.org/x/sys/unix/mksysnum_darwin.pl    |   39 -
 vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl |   50 -
 vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl   |   50 -
 vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl    |   58 -
 vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl   |   50 -
 vendor/golang.org/x/sys/unix/mmap_unix_test.go     |   35 -
 vendor/golang.org/x/sys/unix/openbsd_pledge.go     |   38 -
 vendor/golang.org/x/sys/unix/openbsd_test.go       |  113 -
 vendor/golang.org/x/sys/unix/pagesize_unix.go      |   15 -
 vendor/golang.org/x/sys/unix/race.go               |   30 -
 vendor/golang.org/x/sys/unix/race0.go              |   25 -
 vendor/golang.org/x/sys/unix/sockcmsg_linux.go     |   36 -
 vendor/golang.org/x/sys/unix/sockcmsg_unix.go      |  104 -
 vendor/golang.org/x/sys/unix/str.go                |   26 -
 vendor/golang.org/x/sys/unix/syscall.go            |   54 -
 vendor/golang.org/x/sys/unix/syscall_bsd.go        |  624 -----
 vendor/golang.org/x/sys/unix/syscall_bsd_test.go   |   93 -
 vendor/golang.org/x/sys/unix/syscall_darwin.go     |  680 -----
 vendor/golang.org/x/sys/unix/syscall_darwin_386.go |   68 -
 .../golang.org/x/sys/unix/syscall_darwin_amd64.go  |   68 -
 vendor/golang.org/x/sys/unix/syscall_darwin_arm.go |   66 -
 .../golang.org/x/sys/unix/syscall_darwin_arm64.go  |   68 -
 .../golang.org/x/sys/unix/syscall_darwin_test.go   |   19 -
 vendor/golang.org/x/sys/unix/syscall_dragonfly.go  |  523 ----
 .../x/sys/unix/syscall_dragonfly_amd64.go          |   52 -
 vendor/golang.org/x/sys/unix/syscall_freebsd.go    |  756 ------
 .../golang.org/x/sys/unix/syscall_freebsd_386.go   |   52 -
 .../golang.org/x/sys/unix/syscall_freebsd_amd64.go |   52 -
 .../golang.org/x/sys/unix/syscall_freebsd_arm.go   |   52 -
 .../golang.org/x/sys/unix/syscall_freebsd_test.go  |  312 ---
 vendor/golang.org/x/sys/unix/syscall_linux.go      | 1474 -----------
 vendor/golang.org/x/sys/unix/syscall_linux_386.go  |  385 ---
 .../golang.org/x/sys/unix/syscall_linux_amd64.go   |  162 --
 .../x/sys/unix/syscall_linux_amd64_gc.go           |   13 -
 vendor/golang.org/x/sys/unix/syscall_linux_arm.go  |  259 --
 .../golang.org/x/sys/unix/syscall_linux_arm64.go   |  212 --
 vendor/golang.org/x/sys/unix/syscall_linux_gc.go   |   14 -
 .../golang.org/x/sys/unix/syscall_linux_gc_386.go  |   16 -
 .../x/sys/unix/syscall_linux_gccgo_386.go          |   30 -
 .../x/sys/unix/syscall_linux_gccgo_arm.go          |   20 -
 .../golang.org/x/sys/unix/syscall_linux_mips64x.go |  214 --
 .../golang.org/x/sys/unix/syscall_linux_mipsx.go   |  234 --
 .../golang.org/x/sys/unix/syscall_linux_ppc64x.go  |  131 -
 .../golang.org/x/sys/unix/syscall_linux_s390x.go   |  324 ---
 .../golang.org/x/sys/unix/syscall_linux_sparc64.go |  146 --
 vendor/golang.org/x/sys/unix/syscall_linux_test.go |  421 ---
 vendor/golang.org/x/sys/unix/syscall_netbsd.go     |  568 ----
 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go |   33 -
 .../golang.org/x/sys/unix/syscall_netbsd_amd64.go  |   33 -
 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go |   33 -
 vendor/golang.org/x/sys/unix/syscall_openbsd.go    |  368 ---
 .../golang.org/x/sys/unix/syscall_openbsd_386.go   |   33 -
 .../golang.org/x/sys/unix/syscall_openbsd_amd64.go |   37 -
 .../golang.org/x/sys/unix/syscall_openbsd_arm.go   |   33 -
 vendor/golang.org/x/sys/unix/syscall_solaris.go    |  730 ------
 .../golang.org/x/sys/unix/syscall_solaris_amd64.go |   23 -
 .../golang.org/x/sys/unix/syscall_solaris_test.go  |   55 -
 vendor/golang.org/x/sys/unix/syscall_test.go       |   60 -
 vendor/golang.org/x/sys/unix/syscall_unix.go       |  394 ---
 vendor/golang.org/x/sys/unix/syscall_unix_gc.go    |   15 -
 vendor/golang.org/x/sys/unix/syscall_unix_test.go  |  657 -----
 vendor/golang.org/x/sys/unix/timestruct.go         |   82 -
 vendor/golang.org/x/sys/unix/timestruct_test.go    |   54 -
 vendor/golang.org/x/sys/unix/types_darwin.go       |  277 --
 vendor/golang.org/x/sys/unix/types_dragonfly.go    |  280 --
 vendor/golang.org/x/sys/unix/types_freebsd.go      |  402 ---
 vendor/golang.org/x/sys/unix/types_netbsd.go       |  281 --
 vendor/golang.org/x/sys/unix/types_openbsd.go      |  282 --
 vendor/golang.org/x/sys/unix/types_solaris.go      |  283 --
 vendor/golang.org/x/sys/unix/xattr_test.go         |  119 -
 vendor/golang.org/x/sys/unix/zerrors_darwin_386.go | 1783 -------------
 .../golang.org/x/sys/unix/zerrors_darwin_amd64.go  | 1783 -------------
 vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go | 1783 -------------
 .../golang.org/x/sys/unix/zerrors_darwin_arm64.go  | 1783 -------------
 .../x/sys/unix/zerrors_dragonfly_amd64.go          | 1586 ------------
 .../golang.org/x/sys/unix/zerrors_freebsd_386.go   | 1764 -------------
 .../golang.org/x/sys/unix/zerrors_freebsd_amd64.go | 1765 -------------
 .../golang.org/x/sys/unix/zerrors_freebsd_arm.go   | 1773 -------------
 vendor/golang.org/x/sys/unix/zerrors_linux_386.go  | 2602 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_amd64.go   | 2602 -------------------
 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go  | 2608 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_arm64.go   | 2593 -------------------
 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go | 2610 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_mips64.go  | 2610 -------------------
 .../x/sys/unix/zerrors_linux_mips64le.go           | 2610 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_mipsle.go  | 2610 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_ppc64.go   | 2663 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_ppc64le.go | 2663 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_s390x.go   | 2662 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_sparc64.go | 2142 ----------------
 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go | 1728 -------------
 .../golang.org/x/sys/unix/zerrors_netbsd_amd64.go  | 1718 -------------
 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go | 1707 -------------
 .../golang.org/x/sys/unix/zerrors_openbsd_386.go   | 1600 ------------
 .../golang.org/x/sys/unix/zerrors_openbsd_amd64.go | 1706 -------------
 .../golang.org/x/sys/unix/zerrors_openbsd_arm.go   | 1602 ------------
 .../golang.org/x/sys/unix/zerrors_solaris_amd64.go | 1497 -----------
 vendor/golang.org/x/sys/unix/zptrace386_linux.go   |   80 -
 vendor/golang.org/x/sys/unix/zptracearm_linux.go   |   41 -
 vendor/golang.org/x/sys/unix/zptracemips_linux.go  |   50 -
 .../golang.org/x/sys/unix/zptracemipsle_linux.go   |   50 -
 .../golang.org/x/sys/unix/zsyscall_darwin_386.go   | 1712 -------------
 .../golang.org/x/sys/unix/zsyscall_darwin_amd64.go | 1712 -------------
 .../golang.org/x/sys/unix/zsyscall_darwin_arm.go   | 1712 -------------
 .../golang.org/x/sys/unix/zsyscall_darwin_arm64.go | 1712 -------------
 .../x/sys/unix/zsyscall_dragonfly_amd64.go         | 1508 -----------
 .../golang.org/x/sys/unix/zsyscall_freebsd_386.go  | 1937 --------------
 .../x/sys/unix/zsyscall_freebsd_amd64.go           | 1937 --------------
 .../golang.org/x/sys/unix/zsyscall_freebsd_arm.go  | 1937 --------------
 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go | 2010 ---------------
 .../golang.org/x/sys/unix/zsyscall_linux_amd64.go  | 2177 ----------------
 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go | 2112 ---------------
 .../golang.org/x/sys/unix/zsyscall_linux_arm64.go  | 2019 ---------------
 .../golang.org/x/sys/unix/zsyscall_linux_mips.go   | 2178 ----------------
 .../golang.org/x/sys/unix/zsyscall_linux_mips64.go | 2161 ----------------
 .../x/sys/unix/zsyscall_linux_mips64le.go          | 2161 ----------------
 .../golang.org/x/sys/unix/zsyscall_linux_mipsle.go | 2178 ----------------
 .../golang.org/x/sys/unix/zsyscall_linux_ppc64.go  | 2224 ----------------
 .../x/sys/unix/zsyscall_linux_ppc64le.go           | 2224 ----------------
 .../golang.org/x/sys/unix/zsyscall_linux_s390x.go  | 1994 ---------------
 .../x/sys/unix/zsyscall_linux_sparc64.go           | 2172 ----------------
 .../golang.org/x/sys/unix/zsyscall_netbsd_386.go   | 1439 -----------
 .../golang.org/x/sys/unix/zsyscall_netbsd_amd64.go | 1439 -----------
 .../golang.org/x/sys/unix/zsyscall_netbsd_arm.go   | 1439 -----------
 .../golang.org/x/sys/unix/zsyscall_openbsd_386.go  | 1508 -----------
 .../x/sys/unix/zsyscall_openbsd_amd64.go           | 1508 -----------
 .../golang.org/x/sys/unix/zsyscall_openbsd_arm.go  | 1508 -----------
 .../x/sys/unix/zsyscall_solaris_amd64.go           | 1697 ------------
 .../golang.org/x/sys/unix/zsysctl_openbsd_386.go   |  270 --
 .../golang.org/x/sys/unix/zsysctl_openbsd_amd64.go |  257 --
 .../golang.org/x/sys/unix/zsysctl_openbsd_arm.go   |  270 --
 vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go |  436 ----
 .../golang.org/x/sys/unix/zsysnum_darwin_amd64.go  |  436 ----
 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go |  436 ----
 .../golang.org/x/sys/unix/zsysnum_darwin_arm64.go  |  436 ----
 .../x/sys/unix/zsysnum_dragonfly_amd64.go          |  315 ---
 .../golang.org/x/sys/unix/zsysnum_freebsd_386.go   |  353 ---
 .../golang.org/x/sys/unix/zsysnum_freebsd_amd64.go |  353 ---
 .../golang.org/x/sys/unix/zsysnum_freebsd_arm.go   |  353 ---
 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go  |  390 ---
 .../golang.org/x/sys/unix/zsysnum_linux_amd64.go   |  342 ---
 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go  |  362 ---
 .../golang.org/x/sys/unix/zsysnum_linux_arm64.go   |  286 ---
 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go |  375 ---
 .../golang.org/x/sys/unix/zsysnum_linux_mips64.go  |  335 ---
 .../x/sys/unix/zsysnum_linux_mips64le.go           |  335 ---
 .../golang.org/x/sys/unix/zsysnum_linux_mipsle.go  |  375 ---
 .../golang.org/x/sys/unix/zsysnum_linux_ppc64.go   |  373 ---
 .../golang.org/x/sys/unix/zsysnum_linux_ppc64le.go |  373 ---
 .../golang.org/x/sys/unix/zsysnum_linux_s390x.go   |  335 ---
 .../golang.org/x/sys/unix/zsysnum_linux_sparc64.go |  348 ---
 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go |  274 --
 .../golang.org/x/sys/unix/zsysnum_netbsd_amd64.go  |  274 --
 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go |  274 --
 .../golang.org/x/sys/unix/zsysnum_openbsd_386.go   |  207 --
 .../golang.org/x/sys/unix/zsysnum_openbsd_amd64.go |  217 --
 .../golang.org/x/sys/unix/zsysnum_openbsd_arm.go   |  213 --
 vendor/golang.org/x/sys/unix/ztypes_darwin_386.go  |  489 ----
 .../golang.org/x/sys/unix/ztypes_darwin_amd64.go   |  499 ----
 vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go  |  490 ----
 .../golang.org/x/sys/unix/ztypes_darwin_arm64.go   |  499 ----
 .../x/sys/unix/ztypes_dragonfly_amd64.go           |  486 ----
 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go |  553 ----
 .../golang.org/x/sys/unix/ztypes_freebsd_amd64.go  |  556 ----
 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go |  556 ----
 vendor/golang.org/x/sys/unix/ztypes_linux_386.go   | 1846 -------------
 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go | 1866 --------------
 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go   | 1835 -------------
 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go | 1845 -------------
 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go  | 1840 -------------
 .../golang.org/x/sys/unix/ztypes_linux_mips64.go   | 1847 -------------
 .../golang.org/x/sys/unix/ztypes_linux_mips64le.go | 1847 -------------
 .../golang.org/x/sys/unix/ztypes_linux_mipsle.go   | 1840 -------------
 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go | 1855 --------------
 .../golang.org/x/sys/unix/ztypes_linux_ppc64le.go  | 1855 --------------
 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go | 1872 --------------
 .../golang.org/x/sys/unix/ztypes_linux_sparc64.go  |  690 -----
 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go  |  448 ----
 .../golang.org/x/sys/unix/ztypes_netbsd_amd64.go   |  455 ----
 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go  |  453 ----
 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go |  484 ----
 .../golang.org/x/sys/unix/ztypes_openbsd_amd64.go  |  484 ----
 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go |  477 ----
 .../golang.org/x/sys/unix/ztypes_solaris_amd64.go  |  459 ----
 vendor/golang.org/x/sys/windows/asm_windows_386.s  |   13 -
 .../golang.org/x/sys/windows/asm_windows_amd64.s   |   13 -
 vendor/golang.org/x/sys/windows/dll_windows.go     |  378 ---
 vendor/golang.org/x/sys/windows/env_windows.go     |   29 -
 vendor/golang.org/x/sys/windows/eventlog.go        |   20 -
 vendor/golang.org/x/sys/windows/exec_windows.go    |   97 -
 vendor/golang.org/x/sys/windows/memory_windows.go  |   26 -
 vendor/golang.org/x/sys/windows/mksyscall.go       |    7 -
 vendor/golang.org/x/sys/windows/race.go            |   30 -
 vendor/golang.org/x/sys/windows/race0.go           |   25 -
 .../golang.org/x/sys/windows/security_windows.go   |  478 ----
 vendor/golang.org/x/sys/windows/service.go         |  183 --
 vendor/golang.org/x/sys/windows/str.go             |   22 -
 vendor/golang.org/x/sys/windows/syscall.go         |   74 -
 vendor/golang.org/x/sys/windows/syscall_test.go    |   53 -
 vendor/golang.org/x/sys/windows/syscall_windows.go | 1153 ---------
 .../x/sys/windows/syscall_windows_test.go          |  113 -
 vendor/golang.org/x/sys/windows/types_windows.go   | 1366 ----------
 .../golang.org/x/sys/windows/types_windows_386.go  |   22 -
 .../x/sys/windows/types_windows_amd64.go           |   22 -
 .../golang.org/x/sys/windows/zsyscall_windows.go   | 2700 --------------------
 452 files changed, 168 insertions(+), 206220 deletions(-)
 delete mode 100644 vendor/github.com/NickBall/go-aes-key-wrap/.gitignore
 delete mode 100644 vendor/github.com/NickBall/go-aes-key-wrap/.travis.yml
 delete mode 100644 vendor/github.com/NickBall/go-aes-key-wrap/LICENSE
 delete mode 100644 vendor/github.com/NickBall/go-aes-key-wrap/README.md
 delete mode 100644 vendor/github.com/NickBall/go-aes-key-wrap/keywrap.go
 delete mode 100644 vendor/github.com/NickBall/go-aes-key-wrap/keywrap_test.go
 delete mode 100644 vendor/github.com/inconshreveable/mousetrap/LICENSE
 delete mode 100644 vendor/github.com/inconshreveable/mousetrap/README.md
 delete mode 100644 vendor/github.com/inconshreveable/mousetrap/trap_others.go
 delete mode 100644 vendor/github.com/inconshreveable/mousetrap/trap_windows.go
 delete mode 100644 vendor/github.com/inconshreveable/mousetrap/trap_windows_1.4.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/.gitignore
 delete mode 100644 vendor/github.com/sirupsen/logrus/.travis.yml
 delete mode 100644 vendor/github.com/sirupsen/logrus/CHANGELOG.md
 delete mode 100644 vendor/github.com/sirupsen/logrus/LICENSE
 delete mode 100644 vendor/github.com/sirupsen/logrus/README.md
 delete mode 100644 vendor/github.com/sirupsen/logrus/alt_exit.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/alt_exit_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/appveyor.yml
 delete mode 100644 vendor/github.com/sirupsen/logrus/doc.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/entry.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/entry_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/example_basic_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/example_hook_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/exported.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/formatter.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/formatter_bench_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/hook_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/hooks.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/json_formatter.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/json_formatter_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/logger.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/logger_bench_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/logrus.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/logrus_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_bsd.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_check_appengine.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/terminal_linux.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/text_formatter.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/text_formatter_test.go
 delete mode 100644 vendor/github.com/sirupsen/logrus/writer.go
 delete mode 100644 vendor/github.com/spf13/cast/.gitignore
 delete mode 100644 vendor/github.com/spf13/cast/.travis.yml
 delete mode 100644 vendor/github.com/spf13/cast/LICENSE
 delete mode 100644 vendor/github.com/spf13/cast/Makefile
 delete mode 100644 vendor/github.com/spf13/cast/README.md
 delete mode 100644 vendor/github.com/spf13/cast/cast.go
 delete mode 100644 vendor/github.com/spf13/cast/cast_test.go
 delete mode 100644 vendor/github.com/spf13/cast/caste.go
 delete mode 100644 vendor/github.com/spf13/cobra/.gitignore
 delete mode 100644 vendor/github.com/spf13/cobra/.mailmap
 delete mode 100644 vendor/github.com/spf13/cobra/.travis.yml
 delete mode 100644 vendor/github.com/spf13/cobra/LICENSE.txt
 delete mode 100644 vendor/github.com/spf13/cobra/README.md
 delete mode 100644 vendor/github.com/spf13/cobra/args.go
 delete mode 100644 vendor/github.com/spf13/cobra/args_test.go
 delete mode 100644 vendor/github.com/spf13/cobra/bash_completions.go
 delete mode 100644 vendor/github.com/spf13/cobra/bash_completions.md
 delete mode 100644 vendor/github.com/spf13/cobra/bash_completions_test.go
 delete mode 100644 vendor/github.com/spf13/cobra/cobra.go
 delete mode 100644 vendor/github.com/spf13/cobra/cobra_test.go
 delete mode 100644 vendor/github.com/spf13/cobra/command.go
 delete mode 100644 vendor/github.com/spf13/cobra/command_notwin.go
 delete mode 100644 vendor/github.com/spf13/cobra/command_test.go
 delete mode 100644 vendor/github.com/spf13/cobra/command_win.go
 delete mode 100644 vendor/github.com/spf13/cobra/zsh_completions.go
 delete mode 100644 vendor/github.com/spf13/cobra/zsh_completions_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/.gitignore
 delete mode 100644 vendor/github.com/spf13/pflag/.travis.yml
 delete mode 100644 vendor/github.com/spf13/pflag/LICENSE
 delete mode 100644 vendor/github.com/spf13/pflag/README.md
 delete mode 100644 vendor/github.com/spf13/pflag/bool.go
 delete mode 100644 vendor/github.com/spf13/pflag/bool_slice.go
 delete mode 100644 vendor/github.com/spf13/pflag/bool_slice_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/bool_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/bytes.go
 delete mode 100644 vendor/github.com/spf13/pflag/bytes_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/count.go
 delete mode 100644 vendor/github.com/spf13/pflag/count_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/duration.go
 delete mode 100644 vendor/github.com/spf13/pflag/duration_slice.go
 delete mode 100644 vendor/github.com/spf13/pflag/duration_slice_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/example_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/export_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/flag.go
 delete mode 100644 vendor/github.com/spf13/pflag/flag_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/float32.go
 delete mode 100644 vendor/github.com/spf13/pflag/float64.go
 delete mode 100644 vendor/github.com/spf13/pflag/golangflag.go
 delete mode 100644 vendor/github.com/spf13/pflag/golangflag_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/int.go
 delete mode 100644 vendor/github.com/spf13/pflag/int16.go
 delete mode 100644 vendor/github.com/spf13/pflag/int32.go
 delete mode 100644 vendor/github.com/spf13/pflag/int64.go
 delete mode 100644 vendor/github.com/spf13/pflag/int8.go
 delete mode 100644 vendor/github.com/spf13/pflag/int_slice.go
 delete mode 100644 vendor/github.com/spf13/pflag/int_slice_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/ip.go
 delete mode 100644 vendor/github.com/spf13/pflag/ip_slice.go
 delete mode 100644 vendor/github.com/spf13/pflag/ip_slice_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/ip_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/ipmask.go
 delete mode 100644 vendor/github.com/spf13/pflag/ipnet.go
 delete mode 100644 vendor/github.com/spf13/pflag/ipnet_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/printusage_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/string.go
 delete mode 100644 vendor/github.com/spf13/pflag/string_array.go
 delete mode 100644 vendor/github.com/spf13/pflag/string_array_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/string_slice.go
 delete mode 100644 vendor/github.com/spf13/pflag/string_slice_test.go
 delete mode 100644 vendor/github.com/spf13/pflag/uint.go
 delete mode 100644 vendor/github.com/spf13/pflag/uint16.go
 delete mode 100644 vendor/github.com/spf13/pflag/uint32.go
 delete mode 100644 vendor/github.com/spf13/pflag/uint64.go
 delete mode 100644 vendor/github.com/spf13/pflag/uint8.go
 delete mode 100644 vendor/github.com/spf13/pflag/uint_slice.go
 delete mode 100644 vendor/github.com/spf13/pflag/uint_slice_test.go
 delete mode 100644 vendor/golang.org/x/crypto/.gitattributes
 delete mode 100644 vendor/golang.org/x/crypto/.gitignore
 delete mode 100644 vendor/golang.org/x/crypto/AUTHORS
 delete mode 100644 vendor/golang.org/x/crypto/CONTRIBUTING.md
 delete mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS
 delete mode 100644 vendor/golang.org/x/crypto/LICENSE
 delete mode 100644 vendor/golang.org/x/crypto/PATENTS
 delete mode 100644 vendor/golang.org/x/crypto/README.md
 delete mode 100644 vendor/golang.org/x/crypto/codereview.cfg
 delete mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go
 delete mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/benchmark_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/buffer.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/buffer_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/certs.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/certs_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/channel.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/cipher.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/cipher_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/client.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/client_auth.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/client_auth_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/client_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/common.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/connection.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/doc.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/example_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/handshake.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/handshake_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/kex.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/kex_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/keys.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/keys_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/mac.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/mempipe_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/messages.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/messages_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/mux.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/mux_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/server.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/session.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/session_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/streamlocal.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/tcpip.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/tcpip_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_linux.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_windows.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/testdata_test.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/transport.go
 delete mode 100644 vendor/golang.org/x/crypto/ssh/transport_test.go
 delete mode 100644 vendor/golang.org/x/sys/.gitattributes
 delete mode 100644 vendor/golang.org/x/sys/.gitignore
 delete mode 100644 vendor/golang.org/x/sys/AUTHORS
 delete mode 100644 vendor/golang.org/x/sys/CONTRIBUTING.md
 delete mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS
 delete mode 100644 vendor/golang.org/x/sys/LICENSE
 delete mode 100644 vendor/golang.org/x/sys/PATENTS
 delete mode 100644 vendor/golang.org/x/sys/README.md
 delete mode 100644 vendor/golang.org/x/sys/codereview.cfg
 delete mode 100644 vendor/golang.org/x/sys/unix/.gitignore
 delete mode 100644 vendor/golang.org/x/sys/unix/README.md
 delete mode 100644 vendor/golang.org/x/sys/unix/affinity_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_386.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_amd64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_386.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_arm.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_386.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_amd64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_s390x.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_386.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_arm.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_386.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_arm.s
 delete mode 100644 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s
 delete mode 100644 vendor/golang.org/x/sys/unix/bluetooth_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/cap_freebsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/constants.go
 delete mode 100644 vendor/golang.org/x/sys/unix/creds_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/dev_darwin.go
 delete mode 100644 vendor/golang.org/x/sys/unix/dev_dragonfly.go
 delete mode 100644 vendor/golang.org/x/sys/unix/dev_freebsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/dev_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/dev_linux_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/dev_netbsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/dev_openbsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/dirent.go
 delete mode 100644 vendor/golang.org/x/sys/unix/endian_big.go
 delete mode 100644 vendor/golang.org/x/sys/unix/endian_little.go
 delete mode 100644 vendor/golang.org/x/sys/unix/env_unix.go
 delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/example_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/export_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/fcntl.go
 delete mode 100644 vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go
 delete mode 100644 vendor/golang.org/x/sys/unix/gccgo.go
 delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_c.c
 delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go
 delete mode 100755 vendor/golang.org/x/sys/unix/mkall.sh
 delete mode 100755 vendor/golang.org/x/sys/unix/mkerrors.sh
 delete mode 100644 vendor/golang.org/x/sys/unix/mkpost.go
 delete mode 100755 vendor/golang.org/x/sys/unix/mksyscall.pl
 delete mode 100755 vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
 delete mode 100755 vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl
 delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_darwin.pl
 delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl
 delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl
 delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl
 delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl
 delete mode 100644 vendor/golang.org/x/sys/unix/mmap_unix_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/openbsd_pledge.go
 delete mode 100644 vendor/golang.org/x/sys/unix/openbsd_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/pagesize_unix.go
 delete mode 100644 vendor/golang.org/x/sys/unix/race.go
 delete mode 100644 vendor/golang.org/x/sys/unix/race0.go
 delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix.go
 delete mode 100644 vendor/golang.org/x/sys/unix/str.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/timestruct.go
 delete mode 100644 vendor/golang.org/x/sys/unix/timestruct_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/types_darwin.go
 delete mode 100644 vendor/golang.org/x/sys/unix/types_dragonfly.go
 delete mode 100644 vendor/golang.org/x/sys/unix/types_freebsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/types_netbsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/types_openbsd.go
 delete mode 100644 vendor/golang.org/x/sys/unix/types_solaris.go
 delete mode 100644 vendor/golang.org/x/sys/unix/xattr_test.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zptrace386_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zptracearm_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zptracemips_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zptracemipsle_linux.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
 delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/windows/asm_windows_386.s
 delete mode 100644 vendor/golang.org/x/sys/windows/asm_windows_amd64.s
 delete mode 100644 vendor/golang.org/x/sys/windows/dll_windows.go
 delete mode 100644 vendor/golang.org/x/sys/windows/env_windows.go
 delete mode 100644 vendor/golang.org/x/sys/windows/eventlog.go
 delete mode 100644 vendor/golang.org/x/sys/windows/exec_windows.go
 delete mode 100644 vendor/golang.org/x/sys/windows/memory_windows.go
 delete mode 100644 vendor/golang.org/x/sys/windows/mksyscall.go
 delete mode 100644 vendor/golang.org/x/sys/windows/race.go
 delete mode 100644 vendor/golang.org/x/sys/windows/race0.go
 delete mode 100644 vendor/golang.org/x/sys/windows/security_windows.go
 delete mode 100644 vendor/golang.org/x/sys/windows/service.go
 delete mode 100644 vendor/golang.org/x/sys/windows/str.go
 delete mode 100644 vendor/golang.org/x/sys/windows/syscall.go
 delete mode 100644 vendor/golang.org/x/sys/windows/syscall_test.go
 delete mode 100644 vendor/golang.org/x/sys/windows/syscall_windows.go
 delete mode 100644 vendor/golang.org/x/sys/windows/syscall_windows_test.go
 delete mode 100644 vendor/golang.org/x/sys/windows/types_windows.go
 delete mode 100644 vendor/golang.org/x/sys/windows/types_windows_386.go
 delete mode 100644 vendor/golang.org/x/sys/windows/types_windows_amd64.go
 delete mode 100644 vendor/golang.org/x/sys/windows/zsyscall_windows.go


[mynewt-newt] 06/06: Update travis for go 1.12

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 9cbd050009bb8a444c83e271959baa079eb491fd
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Wed Jun 26 07:03:17 2019 -0300

    Update travis for go 1.12
---
 .travis.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.travis.yml b/.travis.yml
index 6a16105..0e43d65 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -26,7 +26,7 @@ _addons: &addon_conf
       - linux-libc-dev:i386
 
 go:
-  - "1.11"
+  - "1.12"
 
 git:
   depth: false


[mynewt-newt] 03/06: Update go module dependencies

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 1ab7ad33178a6cf0146fb6394b67b64c6685a476
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Mon Jun 24 09:18:16 2019 -0300

    Update go module dependencies
---
 go.mod | 14 +++++++-------
 go.sum | 56 ++++++++++++++++++++++++++++++++++++++++++++------------
 2 files changed, 51 insertions(+), 19 deletions(-)

diff --git a/go.mod b/go.mod
index 2dde13b..234932b 100644
--- a/go.mod
+++ b/go.mod
@@ -1,12 +1,12 @@
 module mynewt.apache.org/newt
 
+go 1.12
+
 require (
 	github.com/NickBall/go-aes-key-wrap v0.0.0-20170929221519-1c3aa3e4dfc5
-	github.com/inconshreveable/mousetrap v1.0.0
-	github.com/sirupsen/logrus v1.0.5
-	github.com/spf13/cast v1.2.0
-	github.com/spf13/cobra v0.0.3
-	github.com/spf13/pflag v1.0.1
-	golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8
-	golang.org/x/sys v0.0.0-20180707002001-3c6ecd8f22c6
+	github.com/sirupsen/logrus v1.4.2
+	github.com/spf13/cast v1.3.0
+	github.com/spf13/cobra v0.0.5
+	github.com/spf13/pflag v1.0.3
+	golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
 )
diff --git a/go.sum b/go.sum
index b8cc3de..7152003 100644
--- a/go.sum
+++ b/go.sum
@@ -1,15 +1,47 @@
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/NickBall/go-aes-key-wrap v0.0.0-20170929221519-1c3aa3e4dfc5 h1:5BIUS5hwyLM298mOf8e8TEgD3cCYqc86uaJdQCYZo/o=
 github.com/NickBall/go-aes-key-wrap v0.0.0-20170929221519-1c3aa3e4dfc5/go.mod h1:w5D10RxC0NmPYxmQ438CC1S07zaC1zpvuNW7s5sUk2Q=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/sirupsen/logrus v1.0.5 h1:8c8b5uO0zS4X6RPl/sd1ENwSkIc0/H2PaHxE3udaE8I=
-github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
-github.com/spf13/cast v1.2.0 h1:HHl1DSRbEQN2i8tJmtS6ViPyHx35+p51amrdsiTCrkg=
-github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
-github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
-github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
-github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8 h1:h7zdf0RiEvWbYBKIx4b+q41xoUVnMmvsGZnIVE5syG8=
-golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/sys v0.0.0-20180707002001-3c6ecd8f22c6 h1:Cz4Qko2XI4t1PQc1ntprOvCDgdAh1ErauyEFKlFYTxw=
-golang.org/x/sys v0.0.0-20180707002001-3c6ecd8f22c6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/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-20190621222207-cc06ce4a13d4 h1:ydJNl0ENAG67pFbB+9tfhiL2pYqLhfoaZFw/cjLhY4A=
+golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=


[mynewt-newt] 01/06: Add support for signing images with ed25519

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 53f9e0ca5a28efbcfe8aa2202a49ad64111b7d20
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Thu May 9 12:35:43 2019 -0300

    Add support for signing images with ed25519
---
 artifact/image/create.go | 23 +++++++++++-
 artifact/image/image.go  |  5 ++-
 artifact/sec/key.go      | 96 +++++++++++++++++++++++++++++++++++++++++++-----
 3 files changed, 111 insertions(+), 13 deletions(-)

diff --git a/artifact/image/create.go b/artifact/image/create.go
index cbbc410..fbe88d9 100644
--- a/artifact/image/create.go
+++ b/artifact/image/create.go
@@ -29,6 +29,7 @@ import (
 	"encoding/asn1"
 	"encoding/binary"
 	"encoding/hex"
+	"golang.org/x/crypto/ed25519"
 	"io/ioutil"
 	"math/big"
 
@@ -80,7 +81,7 @@ func sigTlvType(key sec.SignKey) uint8 {
 		default:
 			return 0
 		}
-	} else {
+	} else if key.Ec != nil {
 		switch key.Ec.Curve.Params().Name {
 		case "P-224":
 			return IMAGE_TLV_ECDSA224
@@ -89,6 +90,10 @@ func sigTlvType(key sec.SignKey) uint8 {
 		default:
 			return 0
 		}
+	} else if key.Ed25519 != nil {
+		return IMAGE_TLV_ED25519
+	} else {
+		panic("invalid key; neither RSA nor ECC nor ED25519")
 	}
 }
 
@@ -153,13 +158,27 @@ func GenerateSigEc(key sec.SignKey, hash []byte) ([]byte, error) {
 	return signature, nil
 }
 
+func GenerateSigEd25519(key sec.SignKey, hash []byte) ([]byte, error) {
+	sig := ed25519.Sign(*key.Ed25519, hash)
+
+	if len(sig) != ed25519.SignatureSize {
+		return nil, util.FmtNewtError("Something is really wrong\n")
+	}
+
+	return sig, nil
+}
+
 func GenerateSig(key sec.SignKey, hash []byte) ([]byte, error) {
 	key.AssertValid()
 
 	if key.Rsa != nil {
 		return GenerateSigRsa(key, hash)
-	} else {
+	} else if key.Ec != nil {
 		return GenerateSigEc(key, hash)
+	} else if key.Ed25519 != nil {
+		return GenerateSigEd25519(key, hash)
+	} else {
+		panic("invalid key; neither RSA nor ECC nor ED25519")
 	}
 }
 
diff --git a/artifact/image/image.go b/artifact/image/image.go
index 9855223..ab57b36 100644
--- a/artifact/image/image.go
+++ b/artifact/image/image.go
@@ -64,6 +64,7 @@ const (
 	IMAGE_TLV_ECDSA224 = 0x21
 	IMAGE_TLV_ECDSA256 = 0x22
 	IMAGE_TLV_RSA3072  = 0x23
+	IMAGE_TLV_ED25519  = 0x24
 	IMAGE_TLV_ENC_RSA  = 0x30
 	IMAGE_TLV_ENC_KEK  = 0x31
 )
@@ -75,6 +76,7 @@ var imageTlvTypeNameMap = map[uint8]string{
 	IMAGE_TLV_ECDSA224: "ECDSA224",
 	IMAGE_TLV_ECDSA256: "ECDSA256",
 	IMAGE_TLV_RSA3072:  "RSA3072",
+	IMAGE_TLV_ED25519:  "ED25519",
 	IMAGE_TLV_ENC_RSA:  "ENC_RSA",
 	IMAGE_TLV_ENC_KEK:  "ENC_KEK",
 }
@@ -141,7 +143,8 @@ func ImageTlvTypeIsSig(tlvType uint8) bool {
 	return tlvType == IMAGE_TLV_RSA2048 ||
 		tlvType == IMAGE_TLV_RSA3072 ||
 		tlvType == IMAGE_TLV_ECDSA224 ||
-		tlvType == IMAGE_TLV_ECDSA256
+		tlvType == IMAGE_TLV_ECDSA256 ||
+		tlvType == IMAGE_TLV_ED25519
 }
 
 func ParseVersion(versStr string) (ImageVersion, error) {
diff --git a/artifact/sec/key.go b/artifact/sec/key.go
index 9d073bd..5914b20 100644
--- a/artifact/sec/key.go
+++ b/artifact/sec/key.go
@@ -27,9 +27,11 @@ import (
 	"crypto/rsa"
 	"crypto/sha256"
 	"crypto/x509"
+	"crypto/x509/pkix"
 	"encoding/asn1"
 	"encoding/base64"
 	"encoding/pem"
+	"golang.org/x/crypto/ed25519"
 	"io/ioutil"
 
 	keywrap "github.com/NickBall/go-aes-key-wrap"
@@ -39,8 +41,56 @@ import (
 
 type SignKey struct {
 	// Only one of these members is non-nil.
-	Rsa *rsa.PrivateKey
-	Ec  *ecdsa.PrivateKey
+	Rsa     *rsa.PrivateKey
+	Ec      *ecdsa.PrivateKey
+	Ed25519 *ed25519.PrivateKey
+}
+
+type ed25519Pkcs struct {
+	Version int
+	Algo    pkix.AlgorithmIdentifier
+	SeedKey []byte
+}
+
+var oidPrivateKeyEd25519 = asn1.ObjectIdentifier{1, 3, 101, 112}
+
+// Parse an ed25519 PKCS#8 certificate
+func parseEd25519Pkcs8(der []byte) (key *ed25519.PrivateKey, err error) {
+	var privKey ed25519Pkcs
+	if _, err := asn1.Unmarshal(der, &privKey); err != nil {
+		return nil, util.FmtNewtError("Error parsing ASN1 key")
+	}
+	switch {
+	case privKey.Algo.Algorithm.Equal(oidPrivateKeyEd25519):
+		// ASN1 header (type+length) + seed
+		if len(privKey.SeedKey) != ed25519.SeedSize+2 {
+			return nil, util.FmtNewtError("Unexpected size for Ed25519 private key")
+		}
+		key := ed25519.NewKeyFromSeed(privKey.SeedKey[2:])
+		return &key, nil
+	default:
+		return nil, util.FmtNewtError("x509: PKCS#8 wrapping contained private key with unknown algorithm: %v", privKey.Algo.Algorithm)
+	}
+}
+
+type pkixPublicKey struct {
+	Algo      pkix.AlgorithmIdentifier
+	BitString asn1.BitString
+}
+
+func marshalEd25519(pubbytes []uint8) []uint8 {
+	pkix := pkixPublicKey{
+		Algo: pkix.AlgorithmIdentifier{
+			Algorithm: oidPrivateKeyEd25519,
+		},
+		BitString: asn1.BitString{
+			Bytes:     pubbytes,
+			BitLength: 8 * len(pubbytes),
+		},
+	}
+
+	ret, _ := asn1.Marshal(pkix)
+	return ret
 }
 
 func ParsePrivateKey(keyBytes []byte) (interface{}, error) {
@@ -83,8 +133,13 @@ func ParsePrivateKey(keyBytes []byte) (interface{}, error) {
 		// the key itself.
 		privKey, err = x509.ParsePKCS8PrivateKey(block.Bytes)
 		if err != nil {
-			return nil, util.FmtNewtError(
-				"Private key parsing failed: %s", err)
+			var _privKey interface{}
+			_privKey, err = parseEd25519Pkcs8(block.Bytes)
+			if err != nil {
+				return nil, util.FmtNewtError(
+					"Private key parsing failed: %s", err)
+			}
+			privKey = _privKey
 		}
 	}
 	if block != nil && block.Type == "ENCRYPTED PRIVATE KEY" {
@@ -118,6 +173,8 @@ func BuildPrivateKey(keyBytes []byte) (SignKey, error) {
 		key.Rsa = priv
 	case *ecdsa.PrivateKey:
 		key.Ec = priv
+	case *ed25519.PrivateKey:
+		key.Ed25519 = priv
 	default:
 		return key, util.NewNewtError("Unknown private key format")
 	}
@@ -151,12 +208,22 @@ func ReadKeys(filenames []string) ([]SignKey, error) {
 }
 
 func (key *SignKey) AssertValid() {
-	if key.Rsa == nil && key.Ec == nil {
-		panic("invalid key; neither RSA nor ECC")
+	if key.Rsa == nil && key.Ec == nil && key.Ed25519 == nil {
+		panic("invalid key; neither RSA nor ECC nor ED25519")
 	}
 
-	if key.Rsa != nil && key.Ec != nil {
-		panic("invalid key; neither RSA nor ECC")
+	total := 0
+	if key.Rsa != nil {
+		total++
+	}
+	if key.Ec != nil {
+		total++
+	}
+	if key.Ed25519 != nil {
+		total++
+	}
+	if total != 1 {
+		panic("invalid key; neither RSA nor ECC nor ED25519")
 	}
 }
 
@@ -167,7 +234,7 @@ func (key *SignKey) PubBytes() ([]uint8, error) {
 
 	if key.Rsa != nil {
 		pubkey, _ = asn1.Marshal(key.Rsa.PublicKey)
-	} else {
+	} else if key.Ec != nil {
 		switch key.Ec.Curve.Params().Name {
 		case "P-224":
 			fallthrough
@@ -176,6 +243,11 @@ func (key *SignKey) PubBytes() ([]uint8, error) {
 		default:
 			return nil, util.NewNewtError("Unsupported ECC curve")
 		}
+	} else if key.Ed25519 != nil {
+		bytes := key.Ed25519.Public().(ed25519.PublicKey)
+		pubkey = marshalEd25519(bytes)
+	} else {
+		panic("invalid key; neither RSA nor ECC nor ED25519")
 	}
 
 	return pubkey, nil
@@ -192,7 +264,7 @@ func (key *SignKey) SigLen() uint16 {
 	if key.Rsa != nil {
 		pubk := key.Rsa.Public().(*rsa.PublicKey)
 		return uint16(pubk.Size())
-	} else {
+	} else if key.Ec != nil {
 		switch key.Ec.Curve.Params().Name {
 		case "P-224":
 			return 68
@@ -201,6 +273,10 @@ func (key *SignKey) SigLen() uint16 {
 		default:
 			return 0
 		}
+	} else if key.Ed25519 != nil {
+		return ed25519.SignatureSize
+	} else {
+		panic("invalid key; neither RSA nor ECC nor ED25519")
 	}
 }
 


[mynewt-newt] 05/06: Remove GO111MODULE env from travis-ci

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 8a9da9e9775c0664204680385e72c01d9f487dde
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Mon Jun 24 09:20:51 2019 -0300

    Remove GO111MODULE env from travis-ci
---
 .travis.yml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index fff286a..6a16105 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -39,9 +39,6 @@ matrix:
     - os: osx
       osx_image: xcode9.2
 
-env:
-  - GO111MODULE=on
-
 before_install:
   - printenv
   - export GOPATH=$HOME/gopath


[mynewt-newt] 04/06: Update build script for go 1.12 and go modules

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 2efa3a0c73f9ca5a2511dfd5bb1eb90dc74fe597
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Mon Jun 24 09:18:48 2019 -0300

    Update build script for go 1.12 and go modules
---
 build.sh | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/build.sh b/build.sh
index 691e6ad..d2e2504 100755
--- a/build.sh
+++ b/build.sh
@@ -26,7 +26,7 @@ expandpath() {
     )
 }
 
-### Ensure >= go1.10 is installed.
+### Ensure >= go1.12 is installed.
 go_ver_str="$(go version | cut -d ' ' -f 3)"
 go_ver="${go_ver_str#go}"
 
@@ -49,9 +49,9 @@ then
     go_min=0
 fi
 
-if [ ! "$go_maj" -gt 1 ] && [ ! "$go_min" -ge 10 ]
+if [ ! "$go_maj" -gt 1 ] && [ ! "$go_min" -ge 12 ]
 then
-    printf "* Error: go 1.10 or later is required (detected version: %s)\n" \
+    printf "* Error: go 1.12 or later is required (detected version: %s)\n" \
         "$go_maj"."$go_min".X
     exit 1
 fi
@@ -88,9 +88,8 @@ DATE="$(date +%F_%R)"
     fi
 
     printf "Building newt.  This may take a minute...\n"
-    GOPATH="$godir" GO15VENDOREXPERIMENT=1 go install -ldflags "$EXTRA_OPTS"
-
-    mv "$godir"/bin/newt "$dstfile"
+    unset GOPATH
+    go build -ldflags "$EXTRA_OPTS"
 
     printf "Successfully built executable: %s\n" "$dstfile"
 )


[mynewt-newt] 02/06: Remove all remaining vendored stuff

Posted by ut...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

utzig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 2c05273079f93c1a3b711f481e7cb6095722c341
Author: Fabio Utzig <ut...@apache.org>
AuthorDate: Mon Jun 24 08:50:41 2019 -0300

    Remove all remaining vendored stuff
---
 .../github.com/NickBall/go-aes-key-wrap/.gitignore |   14 -
 .../NickBall/go-aes-key-wrap/.travis.yml           |    7 -
 vendor/github.com/NickBall/go-aes-key-wrap/LICENSE |   21 -
 .../github.com/NickBall/go-aes-key-wrap/README.md  |    4 -
 .../github.com/NickBall/go-aes-key-wrap/keywrap.go |  111 -
 .../NickBall/go-aes-key-wrap/keywrap_test.go       |   97 -
 .../github.com/inconshreveable/mousetrap/LICENSE   |   13 -
 .../github.com/inconshreveable/mousetrap/README.md |   23 -
 .../inconshreveable/mousetrap/trap_others.go       |   15 -
 .../inconshreveable/mousetrap/trap_windows.go      |   98 -
 .../inconshreveable/mousetrap/trap_windows_1.4.go  |   46 -
 vendor/github.com/sirupsen/logrus/.gitignore       |    1 -
 vendor/github.com/sirupsen/logrus/.travis.yml      |   15 -
 vendor/github.com/sirupsen/logrus/CHANGELOG.md     |  123 -
 vendor/github.com/sirupsen/logrus/LICENSE          |   21 -
 vendor/github.com/sirupsen/logrus/README.md        |  511 ----
 vendor/github.com/sirupsen/logrus/alt_exit.go      |   64 -
 vendor/github.com/sirupsen/logrus/alt_exit_test.go |   83 -
 vendor/github.com/sirupsen/logrus/appveyor.yml     |   14 -
 vendor/github.com/sirupsen/logrus/doc.go           |   26 -
 vendor/github.com/sirupsen/logrus/entry.go         |  288 ---
 vendor/github.com/sirupsen/logrus/entry_test.go    |  115 -
 .../sirupsen/logrus/example_basic_test.go          |   69 -
 .../sirupsen/logrus/example_hook_test.go           |   35 -
 vendor/github.com/sirupsen/logrus/exported.go      |  193 --
 vendor/github.com/sirupsen/logrus/formatter.go     |   45 -
 .../sirupsen/logrus/formatter_bench_test.go        |  101 -
 vendor/github.com/sirupsen/logrus/hook_test.go     |  144 --
 vendor/github.com/sirupsen/logrus/hooks.go         |   34 -
 .../github.com/sirupsen/logrus/json_formatter.go   |   79 -
 .../sirupsen/logrus/json_formatter_test.go         |  199 --
 vendor/github.com/sirupsen/logrus/logger.go        |  323 ---
 .../sirupsen/logrus/logger_bench_test.go           |   61 -
 vendor/github.com/sirupsen/logrus/logrus.go        |  143 --
 vendor/github.com/sirupsen/logrus/logrus_test.go   |  386 ---
 vendor/github.com/sirupsen/logrus/terminal_bsd.go  |   10 -
 .../sirupsen/logrus/terminal_check_appengine.go    |   11 -
 .../sirupsen/logrus/terminal_check_notappengine.go |   19 -
 .../github.com/sirupsen/logrus/terminal_linux.go   |   14 -
 .../github.com/sirupsen/logrus/text_formatter.go   |  178 --
 .../sirupsen/logrus/text_formatter_test.go         |  141 -
 vendor/github.com/sirupsen/logrus/writer.go        |   62 -
 vendor/github.com/spf13/cast/.gitignore            |   25 -
 vendor/github.com/spf13/cast/.travis.yml           |   14 -
 vendor/github.com/spf13/cast/LICENSE               |   21 -
 vendor/github.com/spf13/cast/Makefile              |   38 -
 vendor/github.com/spf13/cast/README.md             |   75 -
 vendor/github.com/spf13/cast/cast.go               |  159 --
 vendor/github.com/spf13/cast/cast_test.go          | 1208 ---------
 vendor/github.com/spf13/cast/caste.go              | 1166 ---------
 vendor/github.com/spf13/cobra/.gitignore           |   36 -
 vendor/github.com/spf13/cobra/.mailmap             |    3 -
 vendor/github.com/spf13/cobra/.travis.yml          |   21 -
 vendor/github.com/spf13/cobra/LICENSE.txt          |  174 --
 vendor/github.com/spf13/cobra/README.md            |  736 ------
 vendor/github.com/spf13/cobra/args.go              |   89 -
 vendor/github.com/spf13/cobra/args_test.go         |  241 --
 vendor/github.com/spf13/cobra/bash_completions.go  |  584 -----
 vendor/github.com/spf13/cobra/bash_completions.md  |  221 --
 .../spf13/cobra/bash_completions_test.go           |  217 --
 vendor/github.com/spf13/cobra/cobra.go             |  200 --
 vendor/github.com/spf13/cobra/cobra_test.go        |   22 -
 vendor/github.com/spf13/cobra/command.go           | 1517 -----------
 vendor/github.com/spf13/cobra/command_notwin.go    |    5 -
 vendor/github.com/spf13/cobra/command_test.go      | 1733 -------------
 vendor/github.com/spf13/cobra/command_win.go       |   20 -
 vendor/github.com/spf13/cobra/zsh_completions.go   |  126 -
 .../github.com/spf13/cobra/zsh_completions_test.go |   89 -
 vendor/github.com/spf13/pflag/.gitignore           |    2 -
 vendor/github.com/spf13/pflag/.travis.yml          |   21 -
 vendor/github.com/spf13/pflag/LICENSE              |   28 -
 vendor/github.com/spf13/pflag/README.md            |  296 ---
 vendor/github.com/spf13/pflag/bool.go              |   94 -
 vendor/github.com/spf13/pflag/bool_slice.go        |  147 --
 vendor/github.com/spf13/pflag/bool_slice_test.go   |  215 --
 vendor/github.com/spf13/pflag/bool_test.go         |  179 --
 vendor/github.com/spf13/pflag/bytes.go             |  105 -
 vendor/github.com/spf13/pflag/bytes_test.go        |   72 -
 vendor/github.com/spf13/pflag/count.go             |   96 -
 vendor/github.com/spf13/pflag/count_test.go        |   56 -
 vendor/github.com/spf13/pflag/duration.go          |   86 -
 vendor/github.com/spf13/pflag/duration_slice.go    |  128 -
 .../github.com/spf13/pflag/duration_slice_test.go  |  165 --
 vendor/github.com/spf13/pflag/example_test.go      |   36 -
 vendor/github.com/spf13/pflag/export_test.go       |   29 -
 vendor/github.com/spf13/pflag/flag.go              | 1223 ---------
 vendor/github.com/spf13/pflag/flag_test.go         | 1259 ---------
 vendor/github.com/spf13/pflag/float32.go           |   88 -
 vendor/github.com/spf13/pflag/float64.go           |   84 -
 vendor/github.com/spf13/pflag/golangflag.go        |  105 -
 vendor/github.com/spf13/pflag/golangflag_test.go   |   47 -
 vendor/github.com/spf13/pflag/int.go               |   84 -
 vendor/github.com/spf13/pflag/int16.go             |   88 -
 vendor/github.com/spf13/pflag/int32.go             |   88 -
 vendor/github.com/spf13/pflag/int64.go             |   84 -
 vendor/github.com/spf13/pflag/int8.go              |   88 -
 vendor/github.com/spf13/pflag/int_slice.go         |  128 -
 vendor/github.com/spf13/pflag/int_slice_test.go    |  165 --
 vendor/github.com/spf13/pflag/ip.go                |   94 -
 vendor/github.com/spf13/pflag/ip_slice.go          |  148 --
 vendor/github.com/spf13/pflag/ip_slice_test.go     |  222 --
 vendor/github.com/spf13/pflag/ip_test.go           |   63 -
 vendor/github.com/spf13/pflag/ipmask.go            |  122 -
 vendor/github.com/spf13/pflag/ipnet.go             |   98 -
 vendor/github.com/spf13/pflag/ipnet_test.go        |   70 -
 vendor/github.com/spf13/pflag/printusage_test.go   |   74 -
 vendor/github.com/spf13/pflag/string.go            |   80 -
 vendor/github.com/spf13/pflag/string_array.go      |  103 -
 vendor/github.com/spf13/pflag/string_array_test.go |  233 --
 vendor/github.com/spf13/pflag/string_slice.go      |  149 --
 vendor/github.com/spf13/pflag/string_slice_test.go |  253 --
 vendor/github.com/spf13/pflag/uint.go              |   88 -
 vendor/github.com/spf13/pflag/uint16.go            |   88 -
 vendor/github.com/spf13/pflag/uint32.go            |   88 -
 vendor/github.com/spf13/pflag/uint64.go            |   88 -
 vendor/github.com/spf13/pflag/uint8.go             |   88 -
 vendor/github.com/spf13/pflag/uint_slice.go        |  126 -
 vendor/github.com/spf13/pflag/uint_slice_test.go   |  161 --
 vendor/golang.org/x/crypto/.gitattributes          |   10 -
 vendor/golang.org/x/crypto/.gitignore              |    2 -
 vendor/golang.org/x/crypto/AUTHORS                 |    3 -
 vendor/golang.org/x/crypto/CONTRIBUTING.md         |   26 -
 vendor/golang.org/x/crypto/CONTRIBUTORS            |    3 -
 vendor/golang.org/x/crypto/LICENSE                 |   27 -
 vendor/golang.org/x/crypto/PATENTS                 |   22 -
 vendor/golang.org/x/crypto/README.md               |   21 -
 vendor/golang.org/x/crypto/codereview.cfg          |    1 -
 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go        |   77 -
 vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go   |  176 --
 vendor/golang.org/x/crypto/ssh/benchmark_test.go   |  123 -
 vendor/golang.org/x/crypto/ssh/buffer.go           |   97 -
 vendor/golang.org/x/crypto/ssh/buffer_test.go      |   87 -
 vendor/golang.org/x/crypto/ssh/certs.go            |  521 ----
 vendor/golang.org/x/crypto/ssh/certs_test.go       |  335 ---
 vendor/golang.org/x/crypto/ssh/channel.go          |  633 -----
 vendor/golang.org/x/crypto/ssh/cipher.go           |  770 ------
 vendor/golang.org/x/crypto/ssh/cipher_test.go      |  131 -
 vendor/golang.org/x/crypto/ssh/client.go           |  278 --
 vendor/golang.org/x/crypto/ssh/client_auth.go      |  525 ----
 vendor/golang.org/x/crypto/ssh/client_auth_test.go |  628 -----
 vendor/golang.org/x/crypto/ssh/client_test.go      |  166 --
 vendor/golang.org/x/crypto/ssh/common.go           |  383 ---
 vendor/golang.org/x/crypto/ssh/connection.go       |  143 --
 vendor/golang.org/x/crypto/ssh/doc.go              |   21 -
 vendor/golang.org/x/crypto/ssh/example_test.go     |  320 ---
 vendor/golang.org/x/crypto/ssh/handshake.go        |  646 -----
 vendor/golang.org/x/crypto/ssh/handshake_test.go   |  559 ----
 vendor/golang.org/x/crypto/ssh/kex.go              |  540 ----
 vendor/golang.org/x/crypto/ssh/kex_test.go         |   50 -
 vendor/golang.org/x/crypto/ssh/keys.go             | 1032 --------
 vendor/golang.org/x/crypto/ssh/keys_test.go        |  500 ----
 vendor/golang.org/x/crypto/ssh/mac.go              |   61 -
 vendor/golang.org/x/crypto/ssh/mempipe_test.go     |  110 -
 vendor/golang.org/x/crypto/ssh/messages.go         |  766 ------
 vendor/golang.org/x/crypto/ssh/messages_test.go    |  288 ---
 vendor/golang.org/x/crypto/ssh/mux.go              |  330 ---
 vendor/golang.org/x/crypto/ssh/mux_test.go         |  501 ----
 vendor/golang.org/x/crypto/ssh/server.go           |  593 -----
 vendor/golang.org/x/crypto/ssh/session.go          |  647 -----
 vendor/golang.org/x/crypto/ssh/session_test.go     |  774 ------
 vendor/golang.org/x/crypto/ssh/streamlocal.go      |  116 -
 vendor/golang.org/x/crypto/ssh/tcpip.go            |  474 ----
 vendor/golang.org/x/crypto/ssh/tcpip_test.go       |   20 -
 .../golang.org/x/crypto/ssh/terminal/terminal.go   |  951 -------
 .../x/crypto/ssh/terminal/terminal_test.go         |  358 ---
 vendor/golang.org/x/crypto/ssh/terminal/util.go    |  114 -
 .../golang.org/x/crypto/ssh/terminal/util_bsd.go   |   12 -
 .../golang.org/x/crypto/ssh/terminal/util_linux.go |   10 -
 .../golang.org/x/crypto/ssh/terminal/util_plan9.go |   58 -
 .../x/crypto/ssh/terminal/util_solaris.go          |  124 -
 .../x/crypto/ssh/terminal/util_windows.go          |  103 -
 vendor/golang.org/x/crypto/ssh/testdata_test.go    |   63 -
 vendor/golang.org/x/crypto/ssh/transport.go        |  353 ---
 vendor/golang.org/x/crypto/ssh/transport_test.go   |  113 -
 vendor/golang.org/x/sys/.gitattributes             |   10 -
 vendor/golang.org/x/sys/.gitignore                 |    2 -
 vendor/golang.org/x/sys/AUTHORS                    |    3 -
 vendor/golang.org/x/sys/CONTRIBUTING.md            |   26 -
 vendor/golang.org/x/sys/CONTRIBUTORS               |    3 -
 vendor/golang.org/x/sys/LICENSE                    |   27 -
 vendor/golang.org/x/sys/PATENTS                    |   22 -
 vendor/golang.org/x/sys/README.md                  |   18 -
 vendor/golang.org/x/sys/codereview.cfg             |    1 -
 vendor/golang.org/x/sys/unix/.gitignore            |    2 -
 vendor/golang.org/x/sys/unix/README.md             |  173 --
 vendor/golang.org/x/sys/unix/affinity_linux.go     |  124 -
 vendor/golang.org/x/sys/unix/asm_darwin_386.s      |   29 -
 vendor/golang.org/x/sys/unix/asm_darwin_amd64.s    |   29 -
 vendor/golang.org/x/sys/unix/asm_darwin_arm.s      |   30 -
 vendor/golang.org/x/sys/unix/asm_darwin_arm64.s    |   30 -
 vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s |   29 -
 vendor/golang.org/x/sys/unix/asm_freebsd_386.s     |   29 -
 vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s   |   29 -
 vendor/golang.org/x/sys/unix/asm_freebsd_arm.s     |   29 -
 vendor/golang.org/x/sys/unix/asm_linux_386.s       |   65 -
 vendor/golang.org/x/sys/unix/asm_linux_amd64.s     |   57 -
 vendor/golang.org/x/sys/unix/asm_linux_arm.s       |   56 -
 vendor/golang.org/x/sys/unix/asm_linux_arm64.s     |   52 -
 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s   |   56 -
 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s     |   54 -
 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s    |   56 -
 vendor/golang.org/x/sys/unix/asm_linux_s390x.s     |   56 -
 vendor/golang.org/x/sys/unix/asm_netbsd_386.s      |   29 -
 vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s    |   29 -
 vendor/golang.org/x/sys/unix/asm_netbsd_arm.s      |   29 -
 vendor/golang.org/x/sys/unix/asm_openbsd_386.s     |   29 -
 vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s   |   29 -
 vendor/golang.org/x/sys/unix/asm_openbsd_arm.s     |   29 -
 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s   |   17 -
 vendor/golang.org/x/sys/unix/bluetooth_linux.go    |   35 -
 vendor/golang.org/x/sys/unix/cap_freebsd.go        |  195 --
 vendor/golang.org/x/sys/unix/constants.go          |   13 -
 vendor/golang.org/x/sys/unix/creds_test.go         |  134 -
 vendor/golang.org/x/sys/unix/dev_darwin.go         |   24 -
 vendor/golang.org/x/sys/unix/dev_dragonfly.go      |   30 -
 vendor/golang.org/x/sys/unix/dev_freebsd.go        |   30 -
 vendor/golang.org/x/sys/unix/dev_linux.go          |   42 -
 vendor/golang.org/x/sys/unix/dev_linux_test.go     |   56 -
 vendor/golang.org/x/sys/unix/dev_netbsd.go         |   29 -
 vendor/golang.org/x/sys/unix/dev_openbsd.go        |   29 -
 vendor/golang.org/x/sys/unix/dirent.go             |   17 -
 vendor/golang.org/x/sys/unix/endian_big.go         |    9 -
 vendor/golang.org/x/sys/unix/endian_little.go      |    9 -
 vendor/golang.org/x/sys/unix/env_unix.go           |   31 -
 vendor/golang.org/x/sys/unix/errors_freebsd_386.go |  227 --
 .../golang.org/x/sys/unix/errors_freebsd_amd64.go  |  227 --
 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go |  226 --
 vendor/golang.org/x/sys/unix/example_test.go       |   19 -
 vendor/golang.org/x/sys/unix/export_test.go        |    9 -
 vendor/golang.org/x/sys/unix/fcntl.go              |   32 -
 vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go  |   13 -
 vendor/golang.org/x/sys/unix/gccgo.go              |   61 -
 vendor/golang.org/x/sys/unix/gccgo_c.c             |   38 -
 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go  |   20 -
 vendor/golang.org/x/sys/unix/mkall.sh              |  188 --
 vendor/golang.org/x/sys/unix/mkerrors.sh           |  604 -----
 vendor/golang.org/x/sys/unix/mkpost.go             |   98 -
 vendor/golang.org/x/sys/unix/mksyscall.pl          |  341 ---
 vendor/golang.org/x/sys/unix/mksyscall_solaris.pl  |  289 ---
 vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl   |  264 --
 vendor/golang.org/x/sys/unix/mksysnum_darwin.pl    |   39 -
 vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl |   50 -
 vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl   |   50 -
 vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl    |   58 -
 vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl   |   50 -
 vendor/golang.org/x/sys/unix/mmap_unix_test.go     |   35 -
 vendor/golang.org/x/sys/unix/openbsd_pledge.go     |   38 -
 vendor/golang.org/x/sys/unix/openbsd_test.go       |  113 -
 vendor/golang.org/x/sys/unix/pagesize_unix.go      |   15 -
 vendor/golang.org/x/sys/unix/race.go               |   30 -
 vendor/golang.org/x/sys/unix/race0.go              |   25 -
 vendor/golang.org/x/sys/unix/sockcmsg_linux.go     |   36 -
 vendor/golang.org/x/sys/unix/sockcmsg_unix.go      |  104 -
 vendor/golang.org/x/sys/unix/str.go                |   26 -
 vendor/golang.org/x/sys/unix/syscall.go            |   54 -
 vendor/golang.org/x/sys/unix/syscall_bsd.go        |  624 -----
 vendor/golang.org/x/sys/unix/syscall_bsd_test.go   |   93 -
 vendor/golang.org/x/sys/unix/syscall_darwin.go     |  680 -----
 vendor/golang.org/x/sys/unix/syscall_darwin_386.go |   68 -
 .../golang.org/x/sys/unix/syscall_darwin_amd64.go  |   68 -
 vendor/golang.org/x/sys/unix/syscall_darwin_arm.go |   66 -
 .../golang.org/x/sys/unix/syscall_darwin_arm64.go  |   68 -
 .../golang.org/x/sys/unix/syscall_darwin_test.go   |   19 -
 vendor/golang.org/x/sys/unix/syscall_dragonfly.go  |  523 ----
 .../x/sys/unix/syscall_dragonfly_amd64.go          |   52 -
 vendor/golang.org/x/sys/unix/syscall_freebsd.go    |  756 ------
 .../golang.org/x/sys/unix/syscall_freebsd_386.go   |   52 -
 .../golang.org/x/sys/unix/syscall_freebsd_amd64.go |   52 -
 .../golang.org/x/sys/unix/syscall_freebsd_arm.go   |   52 -
 .../golang.org/x/sys/unix/syscall_freebsd_test.go  |  312 ---
 vendor/golang.org/x/sys/unix/syscall_linux.go      | 1474 -----------
 vendor/golang.org/x/sys/unix/syscall_linux_386.go  |  385 ---
 .../golang.org/x/sys/unix/syscall_linux_amd64.go   |  162 --
 .../x/sys/unix/syscall_linux_amd64_gc.go           |   13 -
 vendor/golang.org/x/sys/unix/syscall_linux_arm.go  |  259 --
 .../golang.org/x/sys/unix/syscall_linux_arm64.go   |  212 --
 vendor/golang.org/x/sys/unix/syscall_linux_gc.go   |   14 -
 .../golang.org/x/sys/unix/syscall_linux_gc_386.go  |   16 -
 .../x/sys/unix/syscall_linux_gccgo_386.go          |   30 -
 .../x/sys/unix/syscall_linux_gccgo_arm.go          |   20 -
 .../golang.org/x/sys/unix/syscall_linux_mips64x.go |  214 --
 .../golang.org/x/sys/unix/syscall_linux_mipsx.go   |  234 --
 .../golang.org/x/sys/unix/syscall_linux_ppc64x.go  |  131 -
 .../golang.org/x/sys/unix/syscall_linux_s390x.go   |  324 ---
 .../golang.org/x/sys/unix/syscall_linux_sparc64.go |  146 --
 vendor/golang.org/x/sys/unix/syscall_linux_test.go |  421 ---
 vendor/golang.org/x/sys/unix/syscall_netbsd.go     |  568 ----
 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go |   33 -
 .../golang.org/x/sys/unix/syscall_netbsd_amd64.go  |   33 -
 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go |   33 -
 vendor/golang.org/x/sys/unix/syscall_openbsd.go    |  368 ---
 .../golang.org/x/sys/unix/syscall_openbsd_386.go   |   33 -
 .../golang.org/x/sys/unix/syscall_openbsd_amd64.go |   37 -
 .../golang.org/x/sys/unix/syscall_openbsd_arm.go   |   33 -
 vendor/golang.org/x/sys/unix/syscall_solaris.go    |  730 ------
 .../golang.org/x/sys/unix/syscall_solaris_amd64.go |   23 -
 .../golang.org/x/sys/unix/syscall_solaris_test.go  |   55 -
 vendor/golang.org/x/sys/unix/syscall_test.go       |   60 -
 vendor/golang.org/x/sys/unix/syscall_unix.go       |  394 ---
 vendor/golang.org/x/sys/unix/syscall_unix_gc.go    |   15 -
 vendor/golang.org/x/sys/unix/syscall_unix_test.go  |  657 -----
 vendor/golang.org/x/sys/unix/timestruct.go         |   82 -
 vendor/golang.org/x/sys/unix/timestruct_test.go    |   54 -
 vendor/golang.org/x/sys/unix/types_darwin.go       |  277 --
 vendor/golang.org/x/sys/unix/types_dragonfly.go    |  280 --
 vendor/golang.org/x/sys/unix/types_freebsd.go      |  402 ---
 vendor/golang.org/x/sys/unix/types_netbsd.go       |  281 --
 vendor/golang.org/x/sys/unix/types_openbsd.go      |  282 --
 vendor/golang.org/x/sys/unix/types_solaris.go      |  283 --
 vendor/golang.org/x/sys/unix/xattr_test.go         |  119 -
 vendor/golang.org/x/sys/unix/zerrors_darwin_386.go | 1783 -------------
 .../golang.org/x/sys/unix/zerrors_darwin_amd64.go  | 1783 -------------
 vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go | 1783 -------------
 .../golang.org/x/sys/unix/zerrors_darwin_arm64.go  | 1783 -------------
 .../x/sys/unix/zerrors_dragonfly_amd64.go          | 1586 ------------
 .../golang.org/x/sys/unix/zerrors_freebsd_386.go   | 1764 -------------
 .../golang.org/x/sys/unix/zerrors_freebsd_amd64.go | 1765 -------------
 .../golang.org/x/sys/unix/zerrors_freebsd_arm.go   | 1773 -------------
 vendor/golang.org/x/sys/unix/zerrors_linux_386.go  | 2602 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_amd64.go   | 2602 -------------------
 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go  | 2608 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_arm64.go   | 2593 -------------------
 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go | 2610 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_mips64.go  | 2610 -------------------
 .../x/sys/unix/zerrors_linux_mips64le.go           | 2610 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_mipsle.go  | 2610 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_ppc64.go   | 2663 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_ppc64le.go | 2663 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_s390x.go   | 2662 -------------------
 .../golang.org/x/sys/unix/zerrors_linux_sparc64.go | 2142 ----------------
 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go | 1728 -------------
 .../golang.org/x/sys/unix/zerrors_netbsd_amd64.go  | 1718 -------------
 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go | 1707 -------------
 .../golang.org/x/sys/unix/zerrors_openbsd_386.go   | 1600 ------------
 .../golang.org/x/sys/unix/zerrors_openbsd_amd64.go | 1706 -------------
 .../golang.org/x/sys/unix/zerrors_openbsd_arm.go   | 1602 ------------
 .../golang.org/x/sys/unix/zerrors_solaris_amd64.go | 1497 -----------
 vendor/golang.org/x/sys/unix/zptrace386_linux.go   |   80 -
 vendor/golang.org/x/sys/unix/zptracearm_linux.go   |   41 -
 vendor/golang.org/x/sys/unix/zptracemips_linux.go  |   50 -
 .../golang.org/x/sys/unix/zptracemipsle_linux.go   |   50 -
 .../golang.org/x/sys/unix/zsyscall_darwin_386.go   | 1712 -------------
 .../golang.org/x/sys/unix/zsyscall_darwin_amd64.go | 1712 -------------
 .../golang.org/x/sys/unix/zsyscall_darwin_arm.go   | 1712 -------------
 .../golang.org/x/sys/unix/zsyscall_darwin_arm64.go | 1712 -------------
 .../x/sys/unix/zsyscall_dragonfly_amd64.go         | 1508 -----------
 .../golang.org/x/sys/unix/zsyscall_freebsd_386.go  | 1937 --------------
 .../x/sys/unix/zsyscall_freebsd_amd64.go           | 1937 --------------
 .../golang.org/x/sys/unix/zsyscall_freebsd_arm.go  | 1937 --------------
 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go | 2010 ---------------
 .../golang.org/x/sys/unix/zsyscall_linux_amd64.go  | 2177 ----------------
 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go | 2112 ---------------
 .../golang.org/x/sys/unix/zsyscall_linux_arm64.go  | 2019 ---------------
 .../golang.org/x/sys/unix/zsyscall_linux_mips.go   | 2178 ----------------
 .../golang.org/x/sys/unix/zsyscall_linux_mips64.go | 2161 ----------------
 .../x/sys/unix/zsyscall_linux_mips64le.go          | 2161 ----------------
 .../golang.org/x/sys/unix/zsyscall_linux_mipsle.go | 2178 ----------------
 .../golang.org/x/sys/unix/zsyscall_linux_ppc64.go  | 2224 ----------------
 .../x/sys/unix/zsyscall_linux_ppc64le.go           | 2224 ----------------
 .../golang.org/x/sys/unix/zsyscall_linux_s390x.go  | 1994 ---------------
 .../x/sys/unix/zsyscall_linux_sparc64.go           | 2172 ----------------
 .../golang.org/x/sys/unix/zsyscall_netbsd_386.go   | 1439 -----------
 .../golang.org/x/sys/unix/zsyscall_netbsd_amd64.go | 1439 -----------
 .../golang.org/x/sys/unix/zsyscall_netbsd_arm.go   | 1439 -----------
 .../golang.org/x/sys/unix/zsyscall_openbsd_386.go  | 1508 -----------
 .../x/sys/unix/zsyscall_openbsd_amd64.go           | 1508 -----------
 .../golang.org/x/sys/unix/zsyscall_openbsd_arm.go  | 1508 -----------
 .../x/sys/unix/zsyscall_solaris_amd64.go           | 1697 ------------
 .../golang.org/x/sys/unix/zsysctl_openbsd_386.go   |  270 --
 .../golang.org/x/sys/unix/zsysctl_openbsd_amd64.go |  257 --
 .../golang.org/x/sys/unix/zsysctl_openbsd_arm.go   |  270 --
 vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go |  436 ----
 .../golang.org/x/sys/unix/zsysnum_darwin_amd64.go  |  436 ----
 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go |  436 ----
 .../golang.org/x/sys/unix/zsysnum_darwin_arm64.go  |  436 ----
 .../x/sys/unix/zsysnum_dragonfly_amd64.go          |  315 ---
 .../golang.org/x/sys/unix/zsysnum_freebsd_386.go   |  353 ---
 .../golang.org/x/sys/unix/zsysnum_freebsd_amd64.go |  353 ---
 .../golang.org/x/sys/unix/zsysnum_freebsd_arm.go   |  353 ---
 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go  |  390 ---
 .../golang.org/x/sys/unix/zsysnum_linux_amd64.go   |  342 ---
 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go  |  362 ---
 .../golang.org/x/sys/unix/zsysnum_linux_arm64.go   |  286 ---
 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go |  375 ---
 .../golang.org/x/sys/unix/zsysnum_linux_mips64.go  |  335 ---
 .../x/sys/unix/zsysnum_linux_mips64le.go           |  335 ---
 .../golang.org/x/sys/unix/zsysnum_linux_mipsle.go  |  375 ---
 .../golang.org/x/sys/unix/zsysnum_linux_ppc64.go   |  373 ---
 .../golang.org/x/sys/unix/zsysnum_linux_ppc64le.go |  373 ---
 .../golang.org/x/sys/unix/zsysnum_linux_s390x.go   |  335 ---
 .../golang.org/x/sys/unix/zsysnum_linux_sparc64.go |  348 ---
 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go |  274 --
 .../golang.org/x/sys/unix/zsysnum_netbsd_amd64.go  |  274 --
 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go |  274 --
 .../golang.org/x/sys/unix/zsysnum_openbsd_386.go   |  207 --
 .../golang.org/x/sys/unix/zsysnum_openbsd_amd64.go |  217 --
 .../golang.org/x/sys/unix/zsysnum_openbsd_arm.go   |  213 --
 vendor/golang.org/x/sys/unix/ztypes_darwin_386.go  |  489 ----
 .../golang.org/x/sys/unix/ztypes_darwin_amd64.go   |  499 ----
 vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go  |  490 ----
 .../golang.org/x/sys/unix/ztypes_darwin_arm64.go   |  499 ----
 .../x/sys/unix/ztypes_dragonfly_amd64.go           |  486 ----
 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go |  553 ----
 .../golang.org/x/sys/unix/ztypes_freebsd_amd64.go  |  556 ----
 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go |  556 ----
 vendor/golang.org/x/sys/unix/ztypes_linux_386.go   | 1846 -------------
 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go | 1866 --------------
 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go   | 1835 -------------
 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go | 1845 -------------
 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go  | 1840 -------------
 .../golang.org/x/sys/unix/ztypes_linux_mips64.go   | 1847 -------------
 .../golang.org/x/sys/unix/ztypes_linux_mips64le.go | 1847 -------------
 .../golang.org/x/sys/unix/ztypes_linux_mipsle.go   | 1840 -------------
 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go | 1855 --------------
 .../golang.org/x/sys/unix/ztypes_linux_ppc64le.go  | 1855 --------------
 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go | 1872 --------------
 .../golang.org/x/sys/unix/ztypes_linux_sparc64.go  |  690 -----
 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go  |  448 ----
 .../golang.org/x/sys/unix/ztypes_netbsd_amd64.go   |  455 ----
 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go  |  453 ----
 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go |  484 ----
 .../golang.org/x/sys/unix/ztypes_openbsd_amd64.go  |  484 ----
 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go |  477 ----
 .../golang.org/x/sys/unix/ztypes_solaris_amd64.go  |  459 ----
 vendor/golang.org/x/sys/windows/asm_windows_386.s  |   13 -
 .../golang.org/x/sys/windows/asm_windows_amd64.s   |   13 -
 vendor/golang.org/x/sys/windows/dll_windows.go     |  378 ---
 vendor/golang.org/x/sys/windows/env_windows.go     |   29 -
 vendor/golang.org/x/sys/windows/eventlog.go        |   20 -
 vendor/golang.org/x/sys/windows/exec_windows.go    |   97 -
 vendor/golang.org/x/sys/windows/memory_windows.go  |   26 -
 vendor/golang.org/x/sys/windows/mksyscall.go       |    7 -
 vendor/golang.org/x/sys/windows/race.go            |   30 -
 vendor/golang.org/x/sys/windows/race0.go           |   25 -
 .../golang.org/x/sys/windows/security_windows.go   |  478 ----
 vendor/golang.org/x/sys/windows/service.go         |  183 --
 vendor/golang.org/x/sys/windows/str.go             |   22 -
 vendor/golang.org/x/sys/windows/syscall.go         |   74 -
 vendor/golang.org/x/sys/windows/syscall_test.go    |   53 -
 vendor/golang.org/x/sys/windows/syscall_windows.go | 1153 ---------
 .../x/sys/windows/syscall_windows_test.go          |  113 -
 vendor/golang.org/x/sys/windows/types_windows.go   | 1366 ----------
 .../golang.org/x/sys/windows/types_windows_386.go  |   22 -
 .../x/sys/windows/types_windows_amd64.go           |   22 -
 .../golang.org/x/sys/windows/zsyscall_windows.go   | 2700 --------------------
 445 files changed, 206178 deletions(-)

diff --git a/vendor/github.com/NickBall/go-aes-key-wrap/.gitignore b/vendor/github.com/NickBall/go-aes-key-wrap/.gitignore
deleted file mode 100644
index a1338d6..0000000
--- a/vendor/github.com/NickBall/go-aes-key-wrap/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-# Binaries for programs and plugins
-*.exe
-*.dll
-*.so
-*.dylib
-
-# Test binary, build with `go test -c`
-*.test
-
-# Output of the go coverage tool, specifically when used with LiteIDE
-*.out
-
-# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
-.glide/
diff --git a/vendor/github.com/NickBall/go-aes-key-wrap/.travis.yml b/vendor/github.com/NickBall/go-aes-key-wrap/.travis.yml
deleted file mode 100644
index 714bd3d..0000000
--- a/vendor/github.com/NickBall/go-aes-key-wrap/.travis.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-language: go
-go:
-  - 1.x
-script:
-  - go test -race -coverprofile=coverage.txt -covermode=atomic
-after_success:
-  - bash <(curl -s https://codecov.io/bash)
diff --git a/vendor/github.com/NickBall/go-aes-key-wrap/LICENSE b/vendor/github.com/NickBall/go-aes-key-wrap/LICENSE
deleted file mode 100644
index 1ccb4e1..0000000
--- a/vendor/github.com/NickBall/go-aes-key-wrap/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2017 Nick Ball
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/vendor/github.com/NickBall/go-aes-key-wrap/README.md b/vendor/github.com/NickBall/go-aes-key-wrap/README.md
deleted file mode 100644
index d29469e..0000000
--- a/vendor/github.com/NickBall/go-aes-key-wrap/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-[![Build Status](https://travis-ci.org/NickBall/go-aes-key-wrap.svg?branch=master)](https://travis-ci.org/NickBall/go-aes-key-wrap) [![Go Report Card](https://goreportcard.com/badge/github.com/nickball/go-aes-key-wrap)](https://goreportcard.com/report/github.com/nickball/go-aes-key-wrap) [![codecov](https://codecov.io/gh/nickball/go-aes-key-wrap/branch/master/graph/badge.svg)](https://codecov.io/gh/nickball/go-aes-key-wrap)
-
-# go-aes-key-wrap
-Golang implementation of the AES Key Wrap algorithm as specified in RFC 3394
diff --git a/vendor/github.com/NickBall/go-aes-key-wrap/keywrap.go b/vendor/github.com/NickBall/go-aes-key-wrap/keywrap.go
deleted file mode 100644
index 0b90bd3..0000000
--- a/vendor/github.com/NickBall/go-aes-key-wrap/keywrap.go
+++ /dev/null
@@ -1,111 +0,0 @@
-//Package keywrap provides an AES-KW keywrap implementation as defined in RFC-3394
-package keywrap
-
-import (
-	"crypto/cipher"
-	"crypto/subtle"
-	"encoding/binary"
-	"errors"
-)
-
-//defaultIV as specified in RFC-3394
-var defaultIV = []byte{0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6}
-
-//Wrap encrypts the provided key data (cek) with the given AES cipher (and corresponding key), using the AES Key Wrap algorithm (RFC-3394)
-func Wrap(block cipher.Block, cek []byte) ([]byte, error) {
-	if len(cek)%8 != 0 {
-		return nil, errors.New("cek must be in 8-byte blocks")
-	}
-
-	//Initialize variables
-	a := make([]byte, 8)
-	copy(a, defaultIV)
-	n := len(cek) / 8
-
-	//Calculate intermediate
-	r := make([][]byte, n)
-	for i := range r {
-		r[i] = make([]byte, 8)
-		copy(r[i], cek[i*8:])
-	}
-
-	for j := 0; j <= 5; j++ {
-		for i := 1; i <= n; i++ {
-			b := arrConcat(a, r[i-1])
-			block.Encrypt(b, b)
-
-			t := (n * j) + i
-			tBytes := make([]byte, 8)
-			binary.BigEndian.PutUint64(tBytes, uint64(t))
-
-			copy(a, arrXor(b[:len(b)/2], tBytes))
-			copy(r[i-1], b[len(b)/2:])
-		}
-	}
-
-	//Output
-	c := make([]byte, (n+1)*8)
-	copy(c, a)
-	for i := 1; i <= n; i++ {
-		for j := range r[i-1] {
-			c[(i*8)+j] = r[i-1][j]
-		}
-	}
-	return c, nil
-}
-
-//Unwrap decrypts the provided cipher text with the given AES cipher (and corresponding key), using the AES Key Wrap algorithm (RFC-3394).
-//The decrypted cipher text is verified using the default IV and will return an error if validation fails.
-func Unwrap(block cipher.Block, cipherText []byte) ([]byte, error) {
-	//Initialize variables
-	a := make([]byte, 8)
-	n := (len(cipherText) / 8) - 1
-
-	r := make([][]byte, n)
-	for i := range r {
-		r[i] = make([]byte, 8)
-		copy(r[i], cipherText[(i+1)*8:])
-	}
-	copy(a, cipherText[:8])
-
-	//Compute intermediate values
-	for j := 5; j >= 0; j-- {
-		for i := n; i >= 1; i-- {
-			t := (n * j) + i
-			tBytes := make([]byte, 8)
-			binary.BigEndian.PutUint64(tBytes, uint64(t))
-
-			b := arrConcat(arrXor(a, tBytes), r[i-1])
-			block.Decrypt(b, b)
-
-			copy(a, b[:len(b)/2])
-			copy(r[i-1], b[len(b)/2:])
-		}
-	}
-
-	if subtle.ConstantTimeCompare(a, defaultIV) != 1 {
-		return nil, errors.New("integrity check failed - unexpected IV")
-	}
-
-	//Output
-	c := arrConcat(r...)
-	return c, nil
-}
-
-func arrConcat(arrays ...[]byte) []byte {
-	out := make([]byte, len(arrays[0]))
-	copy(out, arrays[0])
-	for _, array := range arrays[1:] {
-		out = append(out, array...)
-	}
-
-	return out
-}
-
-func arrXor(arrL []byte, arrR []byte) []byte {
-	out := make([]byte, len(arrL))
-	for x := range arrL {
-		out[x] = arrL[x] ^ arrR[x]
-	}
-	return out
-}
diff --git a/vendor/github.com/NickBall/go-aes-key-wrap/keywrap_test.go b/vendor/github.com/NickBall/go-aes-key-wrap/keywrap_test.go
deleted file mode 100644
index 24a618f..0000000
--- a/vendor/github.com/NickBall/go-aes-key-wrap/keywrap_test.go
+++ /dev/null
@@ -1,97 +0,0 @@
-package keywrap_test
-
-import (
-  keywrap "github.com/NickBall/go-aes-key-wrap"
-	"crypto/aes"
-	"encoding/hex"
-	"github.com/stretchr/testify/assert"
-	"testing"
-)
-
-type input struct {
-	Case     string
-	Kek      string
-	Data     string
-	Expected string
-}
-
-func TestWrapRfc3394Vectors(t *testing.T) {
-	vectors := []input{
-		{
-			Case:     "4.1 Wrap 128 bits of Key Data with a 128-bit KEK",
-			Kek:      "000102030405060708090A0B0C0D0E0F",
-			Data:     "00112233445566778899AABBCCDDEEFF",
-			Expected: "1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5",
-		},
-		{
-			Case:     "4.2 Wrap 128 bits of Key Data with a 192-bit KEK",
-			Kek:      "000102030405060708090A0B0C0D0E0F1011121314151617",
-			Data:     "00112233445566778899AABBCCDDEEFF",
-			Expected: "96778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D",
-		},
-		{
-			Case:     "4.3 Wrap 128 bits of Key Data with a 256-bit KEK",
-			Kek:      "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F",
-			Data:     "00112233445566778899AABBCCDDEEFF",
-			Expected: "64E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7",
-		},
-		{
-			Case:     "4.4 Wrap 192 bits of Key Data with a 192-bit KEK",
-			Kek:      "000102030405060708090A0B0C0D0E0F1011121314151617",
-			Data:     "00112233445566778899AABBCCDDEEFF0001020304050607",
-			Expected: "031D33264E15D33268F24EC260743EDCE1C6C7DDEE725A936BA814915C6762D2",
-		},
-		{
-			Case:     "4.5 Wrap 192 bits of Key Data with a 256-bit KEK",
-			Kek:      "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F",
-			Data:     "00112233445566778899AABBCCDDEEFF0001020304050607",
-			Expected: "A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1",
-		},
-		{
-			Case:     "4.6 Wrap 256 bits of Key Data with a 256-bit KEK",
-			Kek:      "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F",
-			Data:     "00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F",
-			Expected: "28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21",
-		},
-	}
-
-	for _, v := range vectors {
-		t.Log("Testcase", "\t", v.Case)
-		t.Log("kek", "\t = ", v.Kek)
-		t.Log("data", "\t = ", v.Data)
-		t.Log("exp", "\t = ", v.Expected)
-
-		kek := mustHexDecode(v.Kek)
-		data := mustHexDecode(v.Data)
-		exp := mustHexDecode(v.Expected)
-
-		cipher, err := aes.NewCipher(kek)
-		if !assert.NoError(t, err, "NewCipher should not fail!") {
-			continue
-		}
-
-		actual, err := keywrap.Wrap(cipher, data)
-		if !assert.NoError(t, err, "Wrap should not throw error with valid input") {
-			continue
-		}
-		if !assert.Equal(t, exp, actual, "Wrap Mismatch: Actual wrapped ciphertext should equal expected for test case '%s'", v.Case) {
-			continue
-		}
-
-		actualUnwrapped, err := keywrap.Unwrap(cipher, actual)
-		if !assert.NoError(t, err, "Unwrap should not throw error with valid input") {
-			continue
-		}
-		if !assert.Equal(t, data, actualUnwrapped, "Unwrap Mismatch: Actual unwrapped ciphertext should equal the original data for test case '%s'", v.Case) {
-			continue
-		}
-	}
-}
-
-func mustHexDecode(s string) (b []byte) {
-	b, err := hex.DecodeString(s)
-	if err != nil {
-		panic(err)
-	}
-	return b
-}
diff --git a/vendor/github.com/inconshreveable/mousetrap/LICENSE b/vendor/github.com/inconshreveable/mousetrap/LICENSE
deleted file mode 100644
index 5f0d1fb..0000000
--- a/vendor/github.com/inconshreveable/mousetrap/LICENSE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2014 Alan Shreve
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/vendor/github.com/inconshreveable/mousetrap/README.md b/vendor/github.com/inconshreveable/mousetrap/README.md
deleted file mode 100644
index 7a950d1..0000000
--- a/vendor/github.com/inconshreveable/mousetrap/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# mousetrap
-
-mousetrap is a tiny library that answers a single question.
-
-On a Windows machine, was the process invoked by someone double clicking on
-the executable file while browsing in explorer?
-
-### Motivation
-
-Windows developers unfamiliar with command line tools will often "double-click"
-the executable for a tool. Because most CLI tools print the help and then exit
-when invoked without arguments, this is often very frustrating for those users.
-
-mousetrap provides a way to detect these invocations so that you can provide
-more helpful behavior and instructions on how to run the CLI tool. To see what
-this looks like, both from an organizational and a technical perspective, see
-https://inconshreveable.com/09-09-2014/sweat-the-small-stuff/
-
-### The interface
-
-The library exposes a single interface:
-
-    func StartedByExplorer() (bool)
diff --git a/vendor/github.com/inconshreveable/mousetrap/trap_others.go b/vendor/github.com/inconshreveable/mousetrap/trap_others.go
deleted file mode 100644
index 9d2d8a4..0000000
--- a/vendor/github.com/inconshreveable/mousetrap/trap_others.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build !windows
-
-package mousetrap
-
-// StartedByExplorer returns true if the program was invoked by the user
-// double-clicking on the executable from explorer.exe
-//
-// It is conservative and returns false if any of the internal calls fail.
-// It does not guarantee that the program was run from a terminal. It only can tell you
-// whether it was launched from explorer.exe
-//
-// On non-Windows platforms, it always returns false.
-func StartedByExplorer() bool {
-	return false
-}
diff --git a/vendor/github.com/inconshreveable/mousetrap/trap_windows.go b/vendor/github.com/inconshreveable/mousetrap/trap_windows.go
deleted file mode 100644
index 336142a..0000000
--- a/vendor/github.com/inconshreveable/mousetrap/trap_windows.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// +build windows
-// +build !go1.4
-
-package mousetrap
-
-import (
-	"fmt"
-	"os"
-	"syscall"
-	"unsafe"
-)
-
-const (
-	// defined by the Win32 API
-	th32cs_snapprocess uintptr = 0x2
-)
-
-var (
-	kernel                   = syscall.MustLoadDLL("kernel32.dll")
-	CreateToolhelp32Snapshot = kernel.MustFindProc("CreateToolhelp32Snapshot")
-	Process32First           = kernel.MustFindProc("Process32FirstW")
-	Process32Next            = kernel.MustFindProc("Process32NextW")
-)
-
-// ProcessEntry32 structure defined by the Win32 API
-type processEntry32 struct {
-	dwSize              uint32
-	cntUsage            uint32
-	th32ProcessID       uint32
-	th32DefaultHeapID   int
-	th32ModuleID        uint32
-	cntThreads          uint32
-	th32ParentProcessID uint32
-	pcPriClassBase      int32
-	dwFlags             uint32
-	szExeFile           [syscall.MAX_PATH]uint16
-}
-
-func getProcessEntry(pid int) (pe *processEntry32, err error) {
-	snapshot, _, e1 := CreateToolhelp32Snapshot.Call(th32cs_snapprocess, uintptr(0))
-	if snapshot == uintptr(syscall.InvalidHandle) {
-		err = fmt.Errorf("CreateToolhelp32Snapshot: %v", e1)
-		return
-	}
-	defer syscall.CloseHandle(syscall.Handle(snapshot))
-
-	var processEntry processEntry32
-	processEntry.dwSize = uint32(unsafe.Sizeof(processEntry))
-	ok, _, e1 := Process32First.Call(snapshot, uintptr(unsafe.Pointer(&processEntry)))
-	if ok == 0 {
-		err = fmt.Errorf("Process32First: %v", e1)
-		return
-	}
-
-	for {
-		if processEntry.th32ProcessID == uint32(pid) {
-			pe = &processEntry
-			return
-		}
-
-		ok, _, e1 = Process32Next.Call(snapshot, uintptr(unsafe.Pointer(&processEntry)))
-		if ok == 0 {
-			err = fmt.Errorf("Process32Next: %v", e1)
-			return
-		}
-	}
-}
-
-func getppid() (pid int, err error) {
-	pe, err := getProcessEntry(os.Getpid())
-	if err != nil {
-		return
-	}
-
-	pid = int(pe.th32ParentProcessID)
-	return
-}
-
-// StartedByExplorer returns true if the program was invoked by the user double-clicking
-// on the executable from explorer.exe
-//
-// It is conservative and returns false if any of the internal calls fail.
-// It does not guarantee that the program was run from a terminal. It only can tell you
-// whether it was launched from explorer.exe
-func StartedByExplorer() bool {
-	ppid, err := getppid()
-	if err != nil {
-		return false
-	}
-
-	pe, err := getProcessEntry(ppid)
-	if err != nil {
-		return false
-	}
-
-	name := syscall.UTF16ToString(pe.szExeFile[:])
-	return name == "explorer.exe"
-}
diff --git a/vendor/github.com/inconshreveable/mousetrap/trap_windows_1.4.go b/vendor/github.com/inconshreveable/mousetrap/trap_windows_1.4.go
deleted file mode 100644
index 9a28e57..0000000
--- a/vendor/github.com/inconshreveable/mousetrap/trap_windows_1.4.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// +build windows
-// +build go1.4
-
-package mousetrap
-
-import (
-	"os"
-	"syscall"
-	"unsafe"
-)
-
-func getProcessEntry(pid int) (*syscall.ProcessEntry32, error) {
-	snapshot, err := syscall.CreateToolhelp32Snapshot(syscall.TH32CS_SNAPPROCESS, 0)
-	if err != nil {
-		return nil, err
-	}
-	defer syscall.CloseHandle(snapshot)
-	var procEntry syscall.ProcessEntry32
-	procEntry.Size = uint32(unsafe.Sizeof(procEntry))
-	if err = syscall.Process32First(snapshot, &procEntry); err != nil {
-		return nil, err
-	}
-	for {
-		if procEntry.ProcessID == uint32(pid) {
-			return &procEntry, nil
-		}
-		err = syscall.Process32Next(snapshot, &procEntry)
-		if err != nil {
-			return nil, err
-		}
-	}
-}
-
-// StartedByExplorer returns true if the program was invoked by the user double-clicking
-// on the executable from explorer.exe
-//
-// It is conservative and returns false if any of the internal calls fail.
-// It does not guarantee that the program was run from a terminal. It only can tell you
-// whether it was launched from explorer.exe
-func StartedByExplorer() bool {
-	pe, err := getProcessEntry(os.Getppid())
-	if err != nil {
-		return false
-	}
-	return "explorer.exe" == syscall.UTF16ToString(pe.ExeFile[:])
-}
diff --git a/vendor/github.com/sirupsen/logrus/.gitignore b/vendor/github.com/sirupsen/logrus/.gitignore
deleted file mode 100644
index 66be63a..0000000
--- a/vendor/github.com/sirupsen/logrus/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-logrus
diff --git a/vendor/github.com/sirupsen/logrus/.travis.yml b/vendor/github.com/sirupsen/logrus/.travis.yml
deleted file mode 100644
index a23296a..0000000
--- a/vendor/github.com/sirupsen/logrus/.travis.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-language: go
-go:
-  - 1.6.x
-  - 1.7.x
-  - 1.8.x
-  - tip
-env:
-  - GOMAXPROCS=4 GORACE=halt_on_error=1
-install:
-  - go get github.com/stretchr/testify/assert
-  - go get gopkg.in/gemnasium/logrus-airbrake-hook.v2
-  - go get golang.org/x/sys/unix
-  - go get golang.org/x/sys/windows
-script:
-  - go test -race -v ./...
diff --git a/vendor/github.com/sirupsen/logrus/CHANGELOG.md b/vendor/github.com/sirupsen/logrus/CHANGELOG.md
deleted file mode 100644
index 1bd1deb..0000000
--- a/vendor/github.com/sirupsen/logrus/CHANGELOG.md
+++ /dev/null
@@ -1,123 +0,0 @@
-# 1.0.5
-
-* Fix hooks race (#707)
-* Fix panic deadlock (#695)
-
-# 1.0.4
-
-* Fix race when adding hooks (#612)
-* Fix terminal check in AppEngine (#635)
-
-# 1.0.3
-
-* Replace example files with testable examples
-
-# 1.0.2
-
-* bug: quote non-string values in text formatter (#583)
-* Make (*Logger) SetLevel a public method
-
-# 1.0.1
-
-* bug: fix escaping in text formatter (#575)
-
-# 1.0.0
-
-* Officially changed name to lower-case
-* bug: colors on Windows 10 (#541)
-* bug: fix race in accessing level (#512)
-
-# 0.11.5
-
-* feature: add writer and writerlevel to entry (#372)
-
-# 0.11.4
-
-* bug: fix undefined variable on solaris (#493)
-
-# 0.11.3
-
-* formatter: configure quoting of empty values (#484)
-* formatter: configure quoting character (default is `"`) (#484)
-* bug: fix not importing io correctly in non-linux environments (#481)
-
-# 0.11.2
-
-* bug: fix windows terminal detection (#476)
-
-# 0.11.1
-
-* bug: fix tty detection with custom out (#471)
-
-# 0.11.0
-
-* performance: Use bufferpool to allocate (#370)
-* terminal: terminal detection for app-engine (#343)
-* feature: exit handler (#375)
-
-# 0.10.0
-
-* feature: Add a test hook (#180)
-* feature: `ParseLevel` is now case-insensitive (#326)
-* feature: `FieldLogger` interface that generalizes `Logger` and `Entry` (#308)
-* performance: avoid re-allocations on `WithFields` (#335)
-
-# 0.9.0
-
-* logrus/text_formatter: don't emit empty msg
-* logrus/hooks/airbrake: move out of main repository
-* logrus/hooks/sentry: move out of main repository
-* logrus/hooks/papertrail: move out of main repository
-* logrus/hooks/bugsnag: move out of main repository
-* logrus/core: run tests with `-race`
-* logrus/core: detect TTY based on `stderr`
-* logrus/core: support `WithError` on logger
-* logrus/core: Solaris support
-
-# 0.8.7
-
-* logrus/core: fix possible race (#216)
-* logrus/doc: small typo fixes and doc improvements
-
-
-# 0.8.6
-
-* hooks/raven: allow passing an initialized client
-
-# 0.8.5
-
-* logrus/core: revert #208
-
-# 0.8.4
-
-* formatter/text: fix data race (#218)
-
-# 0.8.3
-
-* logrus/core: fix entry log level (#208)
-* logrus/core: improve performance of text formatter by 40%
-* logrus/core: expose `LevelHooks` type
-* logrus/core: add support for DragonflyBSD and NetBSD
-* formatter/text: print structs more verbosely
-
-# 0.8.2
-
-* logrus: fix more Fatal family functions
-
-# 0.8.1
-
-* logrus: fix not exiting on `Fatalf` and `Fatalln`
-
-# 0.8.0
-
-* logrus: defaults to stderr instead of stdout
-* hooks/sentry: add special field for `*http.Request`
-* formatter/text: ignore Windows for colors
-
-# 0.7.3
-
-* formatter/\*: allow configuration of timestamp layout
-
-# 0.7.2
-
-* formatter/text: Add configuration option for time format (#158)
diff --git a/vendor/github.com/sirupsen/logrus/LICENSE b/vendor/github.com/sirupsen/logrus/LICENSE
deleted file mode 100644
index f090cb4..0000000
--- a/vendor/github.com/sirupsen/logrus/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014 Simon Eskildsen
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/vendor/github.com/sirupsen/logrus/README.md b/vendor/github.com/sirupsen/logrus/README.md
deleted file mode 100644
index f77819b..0000000
--- a/vendor/github.com/sirupsen/logrus/README.md
+++ /dev/null
@@ -1,511 +0,0 @@
-# Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/>&nbsp;[![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus)&nbsp;[![GoDoc](https://godoc.org/github.com/sirupsen/logrus?status.svg)](https://godoc.org/github.com/sirupsen/logrus)
-
-Logrus is a structured logger for Go (golang), completely API compatible with
-the standard library logger.
-
-**Seeing weird case-sensitive problems?** It's in the past been possible to
-import Logrus as both upper- and lower-case. Due to the Go package environment,
-this caused issues in the community and we needed a standard. Some environments
-experienced problems with the upper-case variant, so the lower-case was decided.
-Everything using `logrus` will need to use the lower-case:
-`github.com/sirupsen/logrus`. Any package that isn't, should be changed.
-
-To fix Glide, see [these
-comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437).
-For an in-depth explanation of the casing issue, see [this
-comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276).
-
-**Are you interested in assisting in maintaining Logrus?** Currently I have a
-lot of obligations, and I am unable to provide Logrus with the maintainership it
-needs. If you'd like to help, please reach out to me at `simon at author's
-username dot com`.
-
-Nicely color-coded in development (when a TTY is attached, otherwise just
-plain text):
-
-![Colored](http://i.imgur.com/PY7qMwd.png)
-
-With `log.SetFormatter(&log.JSONFormatter{})`, for easy parsing by logstash
-or Splunk:
-
-```json
-{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the
-ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"}
-
-{"level":"warning","msg":"The group's number increased tremendously!",
-"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"}
-
-{"animal":"walrus","level":"info","msg":"A giant walrus appears!",
-"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"}
-
-{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.",
-"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"}
-
-{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true,
-"time":"2014-03-10 19:57:38.562543128 -0400 EDT"}
-```
-
-With the default `log.SetFormatter(&log.TextFormatter{})` when a TTY is not
-attached, the output is compatible with the
-[logfmt](http://godoc.org/github.com/kr/logfmt) format:
-
-```text
-time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8
-time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
-time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true
-time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4
-time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009
-time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true
-exit status 1
-```
-
-#### Case-sensitivity
-
-The organization's name was changed to lower-case--and this will not be changed
-back. If you are getting import conflicts due to case sensitivity, please use
-the lower-case import: `github.com/sirupsen/logrus`.
-
-#### Example
-
-The simplest way to use Logrus is simply the package-level exported logger:
-
-```go
-package main
-
-import (
-  log "github.com/sirupsen/logrus"
-)
-
-func main() {
-  log.WithFields(log.Fields{
-    "animal": "walrus",
-  }).Info("A walrus appears")
-}
-```
-
-Note that it's completely api-compatible with the stdlib logger, so you can
-replace your `log` imports everywhere with `log "github.com/sirupsen/logrus"`
-and you'll now have the flexibility of Logrus. You can customize it all you
-want:
-
-```go
-package main
-
-import (
-  "os"
-  log "github.com/sirupsen/logrus"
-)
-
-func init() {
-  // Log as JSON instead of the default ASCII formatter.
-  log.SetFormatter(&log.JSONFormatter{})
-
-  // Output to stdout instead of the default stderr
-  // Can be any io.Writer, see below for File example
-  log.SetOutput(os.Stdout)
-
-  // Only log the warning severity or above.
-  log.SetLevel(log.WarnLevel)
-}
-
-func main() {
-  log.WithFields(log.Fields{
-    "animal": "walrus",
-    "size":   10,
-  }).Info("A group of walrus emerges from the ocean")
-
-  log.WithFields(log.Fields{
-    "omg":    true,
-    "number": 122,
-  }).Warn("The group's number increased tremendously!")
-
-  log.WithFields(log.Fields{
-    "omg":    true,
-    "number": 100,
-  }).Fatal("The ice breaks!")
-
-  // A common pattern is to re-use fields between logging statements by re-using
-  // the logrus.Entry returned from WithFields()
-  contextLogger := log.WithFields(log.Fields{
-    "common": "this is a common field",
-    "other": "I also should be logged always",
-  })
-
-  contextLogger.Info("I'll be logged with common and other field")
-  contextLogger.Info("Me too")
-}
-```
-
-For more advanced usage such as logging to multiple locations from the same
-application, you can also create an instance of the `logrus` Logger:
-
-```go
-package main
-
-import (
-  "os"
-  "github.com/sirupsen/logrus"
-)
-
-// Create a new instance of the logger. You can have any number of instances.
-var log = logrus.New()
-
-func main() {
-  // The API for setting attributes is a little different than the package level
-  // exported logger. See Godoc.
-  log.Out = os.Stdout
-
-  // You could set this to any `io.Writer` such as a file
-  // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666)
-  // if err == nil {
-  //  log.Out = file
-  // } else {
-  //  log.Info("Failed to log to file, using default stderr")
-  // }
-
-  log.WithFields(logrus.Fields{
-    "animal": "walrus",
-    "size":   10,
-  }).Info("A group of walrus emerges from the ocean")
-}
-```
-
-#### Fields
-
-Logrus encourages careful, structured logging through logging fields instead of
-long, unparseable error messages. For example, instead of: `log.Fatalf("Failed
-to send event %s to topic %s with key %d")`, you should log the much more
-discoverable:
-
-```go
-log.WithFields(log.Fields{
-  "event": event,
-  "topic": topic,
-  "key": key,
-}).Fatal("Failed to send event")
-```
-
-We've found this API forces you to think about logging in a way that produces
-much more useful logging messages. We've been in countless situations where just
-a single added field to a log statement that was already there would've saved us
-hours. The `WithFields` call is optional.
-
-In general, with Logrus using any of the `printf`-family functions should be
-seen as a hint you should add a field, however, you can still use the
-`printf`-family functions with Logrus.
-
-#### Default Fields
-
-Often it's helpful to have fields _always_ attached to log statements in an
-application or parts of one. For example, you may want to always log the
-`request_id` and `user_ip` in the context of a request. Instead of writing
-`log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})` on
-every line, you can create a `logrus.Entry` to pass around instead:
-
-```go
-requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
-requestLogger.Info("something happened on that request") # will log request_id and user_ip
-requestLogger.Warn("something not great happened")
-```
-
-#### Hooks
-
-You can add hooks for logging levels. For example to send errors to an exception
-tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to
-multiple places simultaneously, e.g. syslog.
-
-Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in
-`init`:
-
-```go
-import (
-  log "github.com/sirupsen/logrus"
-  "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake"
-  logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
-  "log/syslog"
-)
-
-func init() {
-
-  // Use the Airbrake hook to report errors that have Error severity or above to
-  // an exception tracker. You can create custom hooks, see the Hooks section.
-  log.AddHook(airbrake.NewHook(123, "xyz", "production"))
-
-  hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
-  if err != nil {
-    log.Error("Unable to connect to local syslog daemon")
-  } else {
-    log.AddHook(hook)
-  }
-}
-```
-Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the [syslog hook README](hooks/syslog/README.md).
-
-| Hook  | Description |
-| ----- | ----------- |
-| [Airbrake "legacy"](https://github.com/gemnasium/logrus-airbrake-legacy-hook) | Send errors to an exception tracking service compatible with the Airbrake API V2. Uses [`airbrake-go`](https://github.com/tobi/airbrake-go) behind the scenes. |
-| [Airbrake](https://github.com/gemnasium/logrus-airbrake-hook) | Send errors to the Airbrake API V3. Uses the official [`gobrake`](https://github.com/airbrake/gobrake) behind the scenes. |
-| [Amazon Kinesis](https://github.com/evalphobia/logrus_kinesis) | Hook for logging to [Amazon Kinesis](https://aws.amazon.com/kinesis/) |
-| [Amqp-Hook](https://github.com/vladoatanasov/logrus_amqp) | Hook for logging to Amqp broker (Like RabbitMQ) |
-| [Application Insights](https://github.com/jjcollinge/logrus-appinsights) | Hook for logging to [Application Insights](https://azure.microsoft.com/en-us/services/application-insights/)
-| [AzureTableHook](https://github.com/kpfaulkner/azuretablehook/) | Hook for logging to Azure Table Storage|
-| [Bugsnag](https://github.com/Shopify/logrus-bugsnag/blob/master/bugsnag.go) | Send errors to the Bugsnag exception tracking service. |
-| [DeferPanic](https://github.com/deferpanic/dp-logrus) | Hook for logging to DeferPanic |
-| [Discordrus](https://github.com/kz/discordrus) | Hook for logging to [Discord](https://discordapp.com/) |
-| [ElasticSearch](https://github.com/sohlich/elogrus) | Hook for logging to ElasticSearch|
-| [Firehose](https://github.com/beaubrewer/logrus_firehose) | Hook for logging to [Amazon Firehose](https://aws.amazon.com/kinesis/firehose/)
-| [Fluentd](https://github.com/evalphobia/logrus_fluent) | Hook for logging to fluentd |
-| [Go-Slack](https://github.com/multiplay/go-slack) | Hook for logging to [Slack](https://slack.com) |
-| [Graylog](https://github.com/gemnasium/logrus-graylog-hook) | Hook for logging to [Graylog](http://graylog2.org/) |
-| [Hiprus](https://github.com/nubo/hiprus) | Send errors to a channel in hipchat. |
-| [Honeybadger](https://github.com/agonzalezro/logrus_honeybadger) | Hook for sending exceptions to Honeybadger |
-| [InfluxDB](https://github.com/Abramovic/logrus_influxdb) | Hook for logging to influxdb |
-| [Influxus](http://github.com/vlad-doru/influxus) | Hook for concurrently logging to [InfluxDB](http://influxdata.com/) |
-| [Journalhook](https://github.com/wercker/journalhook) | Hook for logging to `systemd-journald` |
-| [KafkaLogrus](https://github.com/tracer0tong/kafkalogrus) | Hook for logging to Kafka |
-| [Kafka REST Proxy](https://github.com/Nordstrom/logrus-kafka-rest-proxy) | Hook for logging to [Kafka REST Proxy](https://docs.confluent.io/current/kafka-rest/docs) |
-| [LFShook](https://github.com/rifflock/lfshook) | Hook for logging to the local filesystem |
-| [Logbeat](https://github.com/macandmia/logbeat) | Hook for logging to [Opbeat](https://opbeat.com/) |
-| [Logentries](https://github.com/jcftang/logentriesrus) | Hook for logging to [Logentries](https://logentries.com/) |
-| [Logentrus](https://github.com/puddingfactory/logentrus) | Hook for logging to [Logentries](https://logentries.com/) |
-| [Logmatic.io](https://github.com/logmatic/logmatic-go) | Hook for logging to [Logmatic.io](http://logmatic.io/) |
-| [Logrusly](https://github.com/sebest/logrusly) | Send logs to [Loggly](https://www.loggly.com/) |
-| [Logstash](https://github.com/bshuster-repo/logrus-logstash-hook) | Hook for logging to [Logstash](https://www.elastic.co/products/logstash) |
-| [Mail](https://github.com/zbindenren/logrus_mail) | Hook for sending exceptions via mail |
-| [Mattermost](https://github.com/shuLhan/mattermost-integration/tree/master/hooks/logrus) | Hook for logging to [Mattermost](https://mattermost.com/) |
-| [Mongodb](https://github.com/weekface/mgorus) | Hook for logging to mongodb |
-| [NATS-Hook](https://github.com/rybit/nats_logrus_hook) | Hook for logging to [NATS](https://nats.io) |
-| [Octokit](https://github.com/dorajistyle/logrus-octokit-hook) | Hook for logging to github via octokit |
-| [Papertrail](https://github.com/polds/logrus-papertrail-hook) | Send errors to the [Papertrail](https://papertrailapp.com) hosted logging service via UDP. |
-| [PostgreSQL](https://github.com/gemnasium/logrus-postgresql-hook) | Send logs to [PostgreSQL](http://postgresql.org) |
-| [Promrus](https://github.com/weaveworks/promrus) | Expose number of log messages as [Prometheus](https://prometheus.io/) metrics |
-| [Pushover](https://github.com/toorop/logrus_pushover) | Send error via [Pushover](https://pushover.net) |
-| [Raygun](https://github.com/squirkle/logrus-raygun-hook) | Hook for logging to [Raygun.io](http://raygun.io/) |
-| [Redis-Hook](https://github.com/rogierlommers/logrus-redis-hook) | Hook for logging to a ELK stack (through Redis) |
-| [Rollrus](https://github.com/heroku/rollrus) | Hook for sending errors to rollbar |
-| [Scribe](https://github.com/sagar8192/logrus-scribe-hook) | Hook for logging to [Scribe](https://github.com/facebookarchive/scribe)|
-| [Sentry](https://github.com/evalphobia/logrus_sentry) | Send errors to the Sentry error logging and aggregation service. |
-| [Slackrus](https://github.com/johntdyer/slackrus) | Hook for Slack chat. |
-| [Stackdriver](https://github.com/knq/sdhook) | Hook for logging to [Google Stackdriver](https://cloud.google.com/logging/) |
-| [Sumorus](https://github.com/doublefree/sumorus) | Hook for logging to [SumoLogic](https://www.sumologic.com/)|
-| [Syslog](https://github.com/sirupsen/logrus/blob/master/hooks/syslog/syslog.go) | Send errors to remote syslog server. Uses standard library `log/syslog` behind the scenes. |
-| [Syslog TLS](https://github.com/shinji62/logrus-syslog-ng) | Send errors to remote syslog server with TLS support. |
-| [Telegram](https://github.com/rossmcdonald/telegram_hook) | Hook for logging errors to [Telegram](https://telegram.org/) |
-| [TraceView](https://github.com/evalphobia/logrus_appneta) | Hook for logging to [AppNeta TraceView](https://www.appneta.com/products/traceview/) |
-| [Typetalk](https://github.com/dragon3/logrus-typetalk-hook) | Hook for logging to [Typetalk](https://www.typetalk.in/) |
-| [logz.io](https://github.com/ripcurld00d/logrus-logzio-hook) | Hook for logging to [logz.io](https://logz.io), a Log as a Service using Logstash |
-| [SQS-Hook](https://github.com/tsarpaul/logrus_sqs) | Hook for logging to [Amazon Simple Queue Service (SQS)](https://aws.amazon.com/sqs/) |
-
-#### Level logging
-
-Logrus has six logging levels: Debug, Info, Warning, Error, Fatal and Panic.
-
-```go
-log.Debug("Useful debugging information.")
-log.Info("Something noteworthy happened!")
-log.Warn("You should probably take a look at this.")
-log.Error("Something failed but I'm not quitting.")
-// Calls os.Exit(1) after logging
-log.Fatal("Bye.")
-// Calls panic() after logging
-log.Panic("I'm bailing.")
-```
-
-You can set the logging level on a `Logger`, then it will only log entries with
-that severity or anything above it:
-
-```go
-// Will log anything that is info or above (warn, error, fatal, panic). Default.
-log.SetLevel(log.InfoLevel)
-```
-
-It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose
-environment if your application has that.
-
-#### Entries
-
-Besides the fields added with `WithField` or `WithFields` some fields are
-automatically added to all logging events:
-
-1. `time`. The timestamp when the entry was created.
-2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after
-   the `AddFields` call. E.g. `Failed to send event.`
-3. `level`. The logging level. E.g. `info`.
-
-#### Environments
-
-Logrus has no notion of environment.
-
-If you wish for hooks and formatters to only be used in specific environments,
-you should handle that yourself. For example, if your application has a global
-variable `Environment`, which is a string representation of the environment you
-could do:
-
-```go
-import (
-  log "github.com/sirupsen/logrus"
-)
-
-init() {
-  // do something here to set environment depending on an environment variable
-  // or command-line flag
-  if Environment == "production" {
-    log.SetFormatter(&log.JSONFormatter{})
-  } else {
-    // The TextFormatter is default, you don't actually have to do this.
-    log.SetFormatter(&log.TextFormatter{})
-  }
-}
-```
-
-This configuration is how `logrus` was intended to be used, but JSON in
-production is mostly only useful if you do log aggregation with tools like
-Splunk or Logstash.
-
-#### Formatters
-
-The built-in logging formatters are:
-
-* `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise
-  without colors.
-  * *Note:* to force colored output when there is no TTY, set the `ForceColors`
-    field to `true`.  To force no colored output even if there is a TTY  set the
-    `DisableColors` field to `true`. For Windows, see
-    [github.com/mattn/go-colorable](https://github.com/mattn/go-colorable).
-  * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#TextFormatter).
-* `logrus.JSONFormatter`. Logs fields as JSON.
-  * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#JSONFormatter).
-
-Third party logging formatters:
-
-* [`FluentdFormatter`](https://github.com/joonix/log). Formats entries that can be parsed by Kubernetes and Google Container Engine.
-* [`logstash`](https://github.com/bshuster-repo/logrus-logstash-hook). Logs fields as [Logstash](http://logstash.net) Events.
-* [`prefixed`](https://github.com/x-cray/logrus-prefixed-formatter). Displays log entry source along with alternative layout.
-* [`zalgo`](https://github.com/aybabtme/logzalgo). Invoking the P͉̫o̳̼̊w̖͈̰͎e̬͔̭͂r͚̼̹̲ ̫͓͉̳͈ō̠͕͖̚f̝͍̠ ͕̲̞͖͑Z̖̫̤̫ͪa͉̬͈̗l͖͎g̳̥o̰̥̅!̣͔̲̻͊̄ ̙̘̦̹̦.
-
-You can define your formatter by implementing the `Formatter` interface,
-requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a
-`Fields` type (`map[string]interface{}`) with all your fields as well as the
-default ones (see Entries section above):
-
-```go
-type MyJSONFormatter struct {
-}
-
-log.SetFormatter(new(MyJSONFormatter))
-
-func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) {
-  // Note this doesn't include Time, Level and Message which are available on
-  // the Entry. Consult `godoc` on information about those fields or read the
-  // source of the official loggers.
-  serialized, err := json.Marshal(entry.Data)
-    if err != nil {
-      return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
-    }
-  return append(serialized, '\n'), nil
-}
-```
-
-#### Logger as an `io.Writer`
-
-Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it.
-
-```go
-w := logger.Writer()
-defer w.Close()
-
-srv := http.Server{
-    // create a stdlib log.Logger that writes to
-    // logrus.Logger.
-    ErrorLog: log.New(w, "", 0),
-}
-```
-
-Each line written to that writer will be printed the usual way, using formatters
-and hooks. The level for those entries is `info`.
-
-This means that we can override the standard library logger easily:
-
-```go
-logger := logrus.New()
-logger.Formatter = &logrus.JSONFormatter{}
-
-// Use logrus for standard log output
-// Note that `log` here references stdlib's log
-// Not logrus imported under the name `log`.
-log.SetOutput(logger.Writer())
-```
-
-#### Rotation
-
-Log rotation is not provided with Logrus. Log rotation should be done by an
-external program (like `logrotate(8)`) that can compress and delete old log
-entries. It should not be a feature of the application-level logger.
-
-#### Tools
-
-| Tool | Description |
-| ---- | ----------- |
-|[Logrus Mate](https://github.com/gogap/logrus_mate)|Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will generated with different config at different environment.|
-|[Logrus Viper Helper](https://github.com/heirko/go-contrib/tree/master/logrusHelper)|An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of [Logrus Mate](https://github.com/gogap/logrus_mate). [sample](https://github.com/heirko/iris-contrib/blob/master/middleware/logrus-logger/example) |
-
-#### Testing
-
-Logrus has a built in facility for asserting the presence of log messages. This is implemented through the `test` hook and provides:
-
-* decorators for existing logger (`test.NewLocal` and `test.NewGlobal`) which basically just add the `test` hook
-* a test logger (`test.NewNullLogger`) that just records log messages (and does not output any):
-
-```go
-import(
-  "github.com/sirupsen/logrus"
-  "github.com/sirupsen/logrus/hooks/test"
-  "github.com/stretchr/testify/assert"
-  "testing"
-)
-
-func TestSomething(t*testing.T){
-  logger, hook := test.NewNullLogger()
-  logger.Error("Helloerror")
-
-  assert.Equal(t, 1, len(hook.Entries))
-  assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level)
-  assert.Equal(t, "Helloerror", hook.LastEntry().Message)
-
-  hook.Reset()
-  assert.Nil(t, hook.LastEntry())
-}
-```
-
-#### Fatal handlers
-
-Logrus can register one or more functions that will be called when any `fatal`
-level message is logged. The registered handlers will be executed before
-logrus performs a `os.Exit(1)`. This behavior may be helpful if callers need
-to gracefully shutdown. Unlike a `panic("Something went wrong...")` call which can be intercepted with a deferred `recover` a call to `os.Exit(1)` can not be intercepted.
-
-```
-...
-handler := func() {
-  // gracefully shutdown something...
-}
-logrus.RegisterExitHandler(handler)
-...
-```
-
-#### Thread safety
-
-By default Logger is protected by mutex for concurrent writes, this mutex is invoked when calling hooks and writing logs.
-If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking.
-
-Situation when locking is not needed includes:
-
-* You have no hooks registered, or hooks calling is already thread-safe.
-
-* Writing to logger.Out is already thread-safe, for example:
-
-  1) logger.Out is protected by locks.
-
-  2) logger.Out is a os.File handler opened with `O_APPEND` flag, and every write is smaller than 4k. (This allow multi-thread/multi-process writing)
-
-     (Refer to http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/)
diff --git a/vendor/github.com/sirupsen/logrus/alt_exit.go b/vendor/github.com/sirupsen/logrus/alt_exit.go
deleted file mode 100644
index 8af9063..0000000
--- a/vendor/github.com/sirupsen/logrus/alt_exit.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package logrus
-
-// The following code was sourced and modified from the
-// https://github.com/tebeka/atexit package governed by the following license:
-//
-// Copyright (c) 2012 Miki Tebeka <mi...@gmail.com>.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy of
-// this software and associated documentation files (the "Software"), to deal in
-// the Software without restriction, including without limitation the rights to
-// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-// the Software, and to permit persons to whom the Software is furnished to do so,
-// subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in all
-// copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-import (
-	"fmt"
-	"os"
-)
-
-var handlers = []func(){}
-
-func runHandler(handler func()) {
-	defer func() {
-		if err := recover(); err != nil {
-			fmt.Fprintln(os.Stderr, "Error: Logrus exit handler error:", err)
-		}
-	}()
-
-	handler()
-}
-
-func runHandlers() {
-	for _, handler := range handlers {
-		runHandler(handler)
-	}
-}
-
-// Exit runs all the Logrus atexit handlers and then terminates the program using os.Exit(code)
-func Exit(code int) {
-	runHandlers()
-	os.Exit(code)
-}
-
-// RegisterExitHandler adds a Logrus Exit handler, call logrus.Exit to invoke
-// all handlers. The handlers will also be invoked when any Fatal log entry is
-// made.
-//
-// This method is useful when a caller wishes to use logrus to log a fatal
-// message but also needs to gracefully shutdown. An example usecase could be
-// closing database connections, or sending a alert that the application is
-// closing.
-func RegisterExitHandler(handler func()) {
-	handlers = append(handlers, handler)
-}
diff --git a/vendor/github.com/sirupsen/logrus/alt_exit_test.go b/vendor/github.com/sirupsen/logrus/alt_exit_test.go
deleted file mode 100644
index a08b1a8..0000000
--- a/vendor/github.com/sirupsen/logrus/alt_exit_test.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package logrus
-
-import (
-	"io/ioutil"
-	"log"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"testing"
-	"time"
-)
-
-func TestRegister(t *testing.T) {
-	current := len(handlers)
-	RegisterExitHandler(func() {})
-	if len(handlers) != current+1 {
-		t.Fatalf("expected %d handlers, got %d", current+1, len(handlers))
-	}
-}
-
-func TestHandler(t *testing.T) {
-	tempDir, err := ioutil.TempDir("", "test_handler")
-	if err != nil {
-		log.Fatalf("can't create temp dir. %q", err)
-	}
-	defer os.RemoveAll(tempDir)
-
-	gofile := filepath.Join(tempDir, "gofile.go")
-	if err := ioutil.WriteFile(gofile, testprog, 0666); err != nil {
-		t.Fatalf("can't create go file. %q", err)
-	}
-
-	outfile := filepath.Join(tempDir, "outfile.out")
-	arg := time.Now().UTC().String()
-	err = exec.Command("go", "run", gofile, outfile, arg).Run()
-	if err == nil {
-		t.Fatalf("completed normally, should have failed")
-	}
-
-	data, err := ioutil.ReadFile(outfile)
-	if err != nil {
-		t.Fatalf("can't read output file %s. %q", outfile, err)
-	}
-
-	if string(data) != arg {
-		t.Fatalf("bad data. Expected %q, got %q", data, arg)
-	}
-}
-
-var testprog = []byte(`
-// Test program for atexit, gets output file and data as arguments and writes
-// data to output file in atexit handler.
-package main
-
-import (
-	"github.com/sirupsen/logrus"
-	"flag"
-	"fmt"
-	"io/ioutil"
-)
-
-var outfile = ""
-var data = ""
-
-func handler() {
-	ioutil.WriteFile(outfile, []byte(data), 0666)
-}
-
-func badHandler() {
-	n := 0
-	fmt.Println(1/n)
-}
-
-func main() {
-	flag.Parse()
-	outfile = flag.Arg(0)
-	data = flag.Arg(1)
-
-	logrus.RegisterExitHandler(handler)
-	logrus.RegisterExitHandler(badHandler)
-	logrus.Fatal("Bye bye")
-}
-`)
diff --git a/vendor/github.com/sirupsen/logrus/appveyor.yml b/vendor/github.com/sirupsen/logrus/appveyor.yml
deleted file mode 100644
index 96c2ce1..0000000
--- a/vendor/github.com/sirupsen/logrus/appveyor.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-version: "{build}"
-platform: x64
-clone_folder: c:\gopath\src\github.com\sirupsen\logrus
-environment:  
-  GOPATH: c:\gopath
-branches:  
-  only:
-    - master
-install:  
-  - set PATH=%GOPATH%\bin;c:\go\bin;%PATH%
-  - go version
-build_script:  
-  - go get -t
-  - go test
diff --git a/vendor/github.com/sirupsen/logrus/doc.go b/vendor/github.com/sirupsen/logrus/doc.go
deleted file mode 100644
index da67aba..0000000
--- a/vendor/github.com/sirupsen/logrus/doc.go
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Package logrus is a structured logger for Go, completely API compatible with the standard library logger.
-
-
-The simplest way to use Logrus is simply the package-level exported logger:
-
-  package main
-
-  import (
-    log "github.com/sirupsen/logrus"
-  )
-
-  func main() {
-    log.WithFields(log.Fields{
-      "animal": "walrus",
-      "number": 1,
-      "size":   10,
-    }).Info("A walrus appears")
-  }
-
-Output:
-  time="2015-09-07T08:48:33Z" level=info msg="A walrus appears" animal=walrus number=1 size=10
-
-For a full guide visit https://github.com/sirupsen/logrus
-*/
-package logrus
diff --git a/vendor/github.com/sirupsen/logrus/entry.go b/vendor/github.com/sirupsen/logrus/entry.go
deleted file mode 100644
index 778f4c9..0000000
--- a/vendor/github.com/sirupsen/logrus/entry.go
+++ /dev/null
@@ -1,288 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"fmt"
-	"os"
-	"sync"
-	"time"
-)
-
-var bufferPool *sync.Pool
-
-func init() {
-	bufferPool = &sync.Pool{
-		New: func() interface{} {
-			return new(bytes.Buffer)
-		},
-	}
-}
-
-// Defines the key when adding errors using WithError.
-var ErrorKey = "error"
-
-// An entry is the final or intermediate Logrus logging entry. It contains all
-// the fields passed with WithField{,s}. It's finally logged when Debug, Info,
-// Warn, Error, Fatal or Panic is called on it. These objects can be reused and
-// passed around as much as you wish to avoid field duplication.
-type Entry struct {
-	Logger *Logger
-
-	// Contains all the fields set by the user.
-	Data Fields
-
-	// Time at which the log entry was created
-	Time time.Time
-
-	// Level the log entry was logged at: Debug, Info, Warn, Error, Fatal or Panic
-	// This field will be set on entry firing and the value will be equal to the one in Logger struct field.
-	Level Level
-
-	// Message passed to Debug, Info, Warn, Error, Fatal or Panic
-	Message string
-
-	// When formatter is called in entry.log(), an Buffer may be set to entry
-	Buffer *bytes.Buffer
-}
-
-func NewEntry(logger *Logger) *Entry {
-	return &Entry{
-		Logger: logger,
-		// Default is three fields, give a little extra room
-		Data: make(Fields, 5),
-	}
-}
-
-// Returns the string representation from the reader and ultimately the
-// formatter.
-func (entry *Entry) String() (string, error) {
-	serialized, err := entry.Logger.Formatter.Format(entry)
-	if err != nil {
-		return "", err
-	}
-	str := string(serialized)
-	return str, nil
-}
-
-// Add an error as single field (using the key defined in ErrorKey) to the Entry.
-func (entry *Entry) WithError(err error) *Entry {
-	return entry.WithField(ErrorKey, err)
-}
-
-// Add a single field to the Entry.
-func (entry *Entry) WithField(key string, value interface{}) *Entry {
-	return entry.WithFields(Fields{key: value})
-}
-
-// Add a map of fields to the Entry.
-func (entry *Entry) WithFields(fields Fields) *Entry {
-	data := make(Fields, len(entry.Data)+len(fields))
-	for k, v := range entry.Data {
-		data[k] = v
-	}
-	for k, v := range fields {
-		data[k] = v
-	}
-	return &Entry{Logger: entry.Logger, Data: data}
-}
-
-// This function is not declared with a pointer value because otherwise
-// race conditions will occur when using multiple goroutines
-func (entry Entry) log(level Level, msg string) {
-	var buffer *bytes.Buffer
-	entry.Time = time.Now()
-	entry.Level = level
-	entry.Message = msg
-
-	entry.fireHooks()
-
-	buffer = bufferPool.Get().(*bytes.Buffer)
-	buffer.Reset()
-	defer bufferPool.Put(buffer)
-	entry.Buffer = buffer
-
-	entry.write()
-
-	entry.Buffer = nil
-
-	// To avoid Entry#log() returning a value that only would make sense for
-	// panic() to use in Entry#Panic(), we avoid the allocation by checking
-	// directly here.
-	if level <= PanicLevel {
-		panic(&entry)
-	}
-}
-
-// This function is not declared with a pointer value because otherwise
-// race conditions will occur when using multiple goroutines
-func (entry Entry) fireHooks() {
-	entry.Logger.mu.Lock()
-	defer entry.Logger.mu.Unlock()
-	err := entry.Logger.Hooks.Fire(entry.Level, &entry)
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err)
-	}
-}
-
-func (entry *Entry) write() {
-	serialized, err := entry.Logger.Formatter.Format(entry)
-	entry.Logger.mu.Lock()
-	defer entry.Logger.mu.Unlock()
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
-	} else {
-		_, err = entry.Logger.Out.Write(serialized)
-		if err != nil {
-			fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
-		}
-	}
-}
-
-func (entry *Entry) Debug(args ...interface{}) {
-	if entry.Logger.level() >= DebugLevel {
-		entry.log(DebugLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Print(args ...interface{}) {
-	entry.Info(args...)
-}
-
-func (entry *Entry) Info(args ...interface{}) {
-	if entry.Logger.level() >= InfoLevel {
-		entry.log(InfoLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Warn(args ...interface{}) {
-	if entry.Logger.level() >= WarnLevel {
-		entry.log(WarnLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Warning(args ...interface{}) {
-	entry.Warn(args...)
-}
-
-func (entry *Entry) Error(args ...interface{}) {
-	if entry.Logger.level() >= ErrorLevel {
-		entry.log(ErrorLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Fatal(args ...interface{}) {
-	if entry.Logger.level() >= FatalLevel {
-		entry.log(FatalLevel, fmt.Sprint(args...))
-	}
-	Exit(1)
-}
-
-func (entry *Entry) Panic(args ...interface{}) {
-	if entry.Logger.level() >= PanicLevel {
-		entry.log(PanicLevel, fmt.Sprint(args...))
-	}
-	panic(fmt.Sprint(args...))
-}
-
-// Entry Printf family functions
-
-func (entry *Entry) Debugf(format string, args ...interface{}) {
-	if entry.Logger.level() >= DebugLevel {
-		entry.Debug(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Infof(format string, args ...interface{}) {
-	if entry.Logger.level() >= InfoLevel {
-		entry.Info(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Printf(format string, args ...interface{}) {
-	entry.Infof(format, args...)
-}
-
-func (entry *Entry) Warnf(format string, args ...interface{}) {
-	if entry.Logger.level() >= WarnLevel {
-		entry.Warn(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Warningf(format string, args ...interface{}) {
-	entry.Warnf(format, args...)
-}
-
-func (entry *Entry) Errorf(format string, args ...interface{}) {
-	if entry.Logger.level() >= ErrorLevel {
-		entry.Error(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Fatalf(format string, args ...interface{}) {
-	if entry.Logger.level() >= FatalLevel {
-		entry.Fatal(fmt.Sprintf(format, args...))
-	}
-	Exit(1)
-}
-
-func (entry *Entry) Panicf(format string, args ...interface{}) {
-	if entry.Logger.level() >= PanicLevel {
-		entry.Panic(fmt.Sprintf(format, args...))
-	}
-}
-
-// Entry Println family functions
-
-func (entry *Entry) Debugln(args ...interface{}) {
-	if entry.Logger.level() >= DebugLevel {
-		entry.Debug(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Infoln(args ...interface{}) {
-	if entry.Logger.level() >= InfoLevel {
-		entry.Info(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Println(args ...interface{}) {
-	entry.Infoln(args...)
-}
-
-func (entry *Entry) Warnln(args ...interface{}) {
-	if entry.Logger.level() >= WarnLevel {
-		entry.Warn(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Warningln(args ...interface{}) {
-	entry.Warnln(args...)
-}
-
-func (entry *Entry) Errorln(args ...interface{}) {
-	if entry.Logger.level() >= ErrorLevel {
-		entry.Error(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Fatalln(args ...interface{}) {
-	if entry.Logger.level() >= FatalLevel {
-		entry.Fatal(entry.sprintlnn(args...))
-	}
-	Exit(1)
-}
-
-func (entry *Entry) Panicln(args ...interface{}) {
-	if entry.Logger.level() >= PanicLevel {
-		entry.Panic(entry.sprintlnn(args...))
-	}
-}
-
-// Sprintlnn => Sprint no newline. This is to get the behavior of how
-// fmt.Sprintln where spaces are always added between operands, regardless of
-// their type. Instead of vendoring the Sprintln implementation to spare a
-// string allocation, we do the simplest thing.
-func (entry *Entry) sprintlnn(args ...interface{}) string {
-	msg := fmt.Sprintln(args...)
-	return msg[:len(msg)-1]
-}
diff --git a/vendor/github.com/sirupsen/logrus/entry_test.go b/vendor/github.com/sirupsen/logrus/entry_test.go
deleted file mode 100644
index a81e2b3..0000000
--- a/vendor/github.com/sirupsen/logrus/entry_test.go
+++ /dev/null
@@ -1,115 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"fmt"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestEntryWithError(t *testing.T) {
-
-	assert := assert.New(t)
-
-	defer func() {
-		ErrorKey = "error"
-	}()
-
-	err := fmt.Errorf("kaboom at layer %d", 4711)
-
-	assert.Equal(err, WithError(err).Data["error"])
-
-	logger := New()
-	logger.Out = &bytes.Buffer{}
-	entry := NewEntry(logger)
-
-	assert.Equal(err, entry.WithError(err).Data["error"])
-
-	ErrorKey = "err"
-
-	assert.Equal(err, entry.WithError(err).Data["err"])
-
-}
-
-func TestEntryPanicln(t *testing.T) {
-	errBoom := fmt.Errorf("boom time")
-
-	defer func() {
-		p := recover()
-		assert.NotNil(t, p)
-
-		switch pVal := p.(type) {
-		case *Entry:
-			assert.Equal(t, "kaboom", pVal.Message)
-			assert.Equal(t, errBoom, pVal.Data["err"])
-		default:
-			t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal)
-		}
-	}()
-
-	logger := New()
-	logger.Out = &bytes.Buffer{}
-	entry := NewEntry(logger)
-	entry.WithField("err", errBoom).Panicln("kaboom")
-}
-
-func TestEntryPanicf(t *testing.T) {
-	errBoom := fmt.Errorf("boom again")
-
-	defer func() {
-		p := recover()
-		assert.NotNil(t, p)
-
-		switch pVal := p.(type) {
-		case *Entry:
-			assert.Equal(t, "kaboom true", pVal.Message)
-			assert.Equal(t, errBoom, pVal.Data["err"])
-		default:
-			t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal)
-		}
-	}()
-
-	logger := New()
-	logger.Out = &bytes.Buffer{}
-	entry := NewEntry(logger)
-	entry.WithField("err", errBoom).Panicf("kaboom %v", true)
-}
-
-const (
-	badMessage   = "this is going to panic"
-	panicMessage = "this is broken"
-)
-
-type panickyHook struct{}
-
-func (p *panickyHook) Levels() []Level {
-	return []Level{InfoLevel}
-}
-
-func (p *panickyHook) Fire(entry *Entry) error {
-	if entry.Message == badMessage {
-		panic(panicMessage)
-	}
-
-	return nil
-}
-
-func TestEntryHooksPanic(t *testing.T) {
-	logger := New()
-	logger.Out = &bytes.Buffer{}
-	logger.Level = InfoLevel
-	logger.Hooks.Add(&panickyHook{})
-
-	defer func() {
-		p := recover()
-		assert.NotNil(t, p)
-		assert.Equal(t, panicMessage, p)
-
-		entry := NewEntry(logger)
-		entry.Info("another message")
-	}()
-
-	entry := NewEntry(logger)
-	entry.Info(badMessage)
-}
diff --git a/vendor/github.com/sirupsen/logrus/example_basic_test.go b/vendor/github.com/sirupsen/logrus/example_basic_test.go
deleted file mode 100644
index a2acf55..0000000
--- a/vendor/github.com/sirupsen/logrus/example_basic_test.go
+++ /dev/null
@@ -1,69 +0,0 @@
-package logrus_test
-
-import (
-	"github.com/sirupsen/logrus"
-	"os"
-)
-
-func Example_basic() {
-	var log = logrus.New()
-	log.Formatter = new(logrus.JSONFormatter)
-	log.Formatter = new(logrus.TextFormatter)                     //default
-	log.Formatter.(*logrus.TextFormatter).DisableTimestamp = true // remove timestamp from test output
-	log.Level = logrus.DebugLevel
-	log.Out = os.Stdout
-
-	// file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666)
-	// if err == nil {
-	// 	log.Out = file
-	// } else {
-	// 	log.Info("Failed to log to file, using default stderr")
-	// }
-
-	defer func() {
-		err := recover()
-		if err != nil {
-			entry := err.(*logrus.Entry)
-			log.WithFields(logrus.Fields{
-				"omg":         true,
-				"err_animal":  entry.Data["animal"],
-				"err_size":    entry.Data["size"],
-				"err_level":   entry.Level,
-				"err_message": entry.Message,
-				"number":      100,
-			}).Error("The ice breaks!") // or use Fatal() to force the process to exit with a nonzero code
-		}
-	}()
-
-	log.WithFields(logrus.Fields{
-		"animal": "walrus",
-		"number": 8,
-	}).Debug("Started observing beach")
-
-	log.WithFields(logrus.Fields{
-		"animal": "walrus",
-		"size":   10,
-	}).Info("A group of walrus emerges from the ocean")
-
-	log.WithFields(logrus.Fields{
-		"omg":    true,
-		"number": 122,
-	}).Warn("The group's number increased tremendously!")
-
-	log.WithFields(logrus.Fields{
-		"temperature": -4,
-	}).Debug("Temperature changes")
-
-	log.WithFields(logrus.Fields{
-		"animal": "orca",
-		"size":   9009,
-	}).Panic("It's over 9000!")
-
-	// Output:
-	// level=debug msg="Started observing beach" animal=walrus number=8
-	// level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
-	// level=warning msg="The group's number increased tremendously!" number=122 omg=true
-	// level=debug msg="Temperature changes" temperature=-4
-	// level=panic msg="It's over 9000!" animal=orca size=9009
-	// level=error msg="The ice breaks!" err_animal=orca err_level=panic err_message="It's over 9000!" err_size=9009 number=100 omg=true
-}
diff --git a/vendor/github.com/sirupsen/logrus/example_hook_test.go b/vendor/github.com/sirupsen/logrus/example_hook_test.go
deleted file mode 100644
index d4ddffc..0000000
--- a/vendor/github.com/sirupsen/logrus/example_hook_test.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package logrus_test
-
-import (
-	"github.com/sirupsen/logrus"
-	"gopkg.in/gemnasium/logrus-airbrake-hook.v2"
-	"os"
-)
-
-func Example_hook() {
-	var log = logrus.New()
-	log.Formatter = new(logrus.TextFormatter)                     // default
-	log.Formatter.(*logrus.TextFormatter).DisableTimestamp = true // remove timestamp from test output
-	log.Hooks.Add(airbrake.NewHook(123, "xyz", "development"))
-	log.Out = os.Stdout
-
-	log.WithFields(logrus.Fields{
-		"animal": "walrus",
-		"size":   10,
-	}).Info("A group of walrus emerges from the ocean")
-
-	log.WithFields(logrus.Fields{
-		"omg":    true,
-		"number": 122,
-	}).Warn("The group's number increased tremendously!")
-
-	log.WithFields(logrus.Fields{
-		"omg":    true,
-		"number": 100,
-	}).Error("The ice breaks!")
-
-	// Output:
-	// level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
-	// level=warning msg="The group's number increased tremendously!" number=122 omg=true
-	// level=error msg="The ice breaks!" number=100 omg=true
-}
diff --git a/vendor/github.com/sirupsen/logrus/exported.go b/vendor/github.com/sirupsen/logrus/exported.go
deleted file mode 100644
index 013183e..0000000
--- a/vendor/github.com/sirupsen/logrus/exported.go
+++ /dev/null
@@ -1,193 +0,0 @@
-package logrus
-
-import (
-	"io"
-)
-
-var (
-	// std is the name of the standard logger in stdlib `log`
-	std = New()
-)
-
-func StandardLogger() *Logger {
-	return std
-}
-
-// SetOutput sets the standard logger output.
-func SetOutput(out io.Writer) {
-	std.mu.Lock()
-	defer std.mu.Unlock()
-	std.Out = out
-}
-
-// SetFormatter sets the standard logger formatter.
-func SetFormatter(formatter Formatter) {
-	std.mu.Lock()
-	defer std.mu.Unlock()
-	std.Formatter = formatter
-}
-
-// SetLevel sets the standard logger level.
-func SetLevel(level Level) {
-	std.mu.Lock()
-	defer std.mu.Unlock()
-	std.SetLevel(level)
-}
-
-// GetLevel returns the standard logger level.
-func GetLevel() Level {
-	std.mu.Lock()
-	defer std.mu.Unlock()
-	return std.level()
-}
-
-// AddHook adds a hook to the standard logger hooks.
-func AddHook(hook Hook) {
-	std.mu.Lock()
-	defer std.mu.Unlock()
-	std.Hooks.Add(hook)
-}
-
-// WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key.
-func WithError(err error) *Entry {
-	return std.WithField(ErrorKey, err)
-}
-
-// WithField creates an entry from the standard logger and adds a field to
-// it. If you want multiple fields, use `WithFields`.
-//
-// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
-// or Panic on the Entry it returns.
-func WithField(key string, value interface{}) *Entry {
-	return std.WithField(key, value)
-}
-
-// WithFields creates an entry from the standard logger and adds multiple
-// fields to it. This is simply a helper for `WithField`, invoking it
-// once for each field.
-//
-// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
-// or Panic on the Entry it returns.
-func WithFields(fields Fields) *Entry {
-	return std.WithFields(fields)
-}
-
-// Debug logs a message at level Debug on the standard logger.
-func Debug(args ...interface{}) {
-	std.Debug(args...)
-}
-
-// Print logs a message at level Info on the standard logger.
-func Print(args ...interface{}) {
-	std.Print(args...)
-}
-
-// Info logs a message at level Info on the standard logger.
-func Info(args ...interface{}) {
-	std.Info(args...)
-}
-
-// Warn logs a message at level Warn on the standard logger.
-func Warn(args ...interface{}) {
-	std.Warn(args...)
-}
-
-// Warning logs a message at level Warn on the standard logger.
-func Warning(args ...interface{}) {
-	std.Warning(args...)
-}
-
-// Error logs a message at level Error on the standard logger.
-func Error(args ...interface{}) {
-	std.Error(args...)
-}
-
-// Panic logs a message at level Panic on the standard logger.
-func Panic(args ...interface{}) {
-	std.Panic(args...)
-}
-
-// Fatal logs a message at level Fatal on the standard logger.
-func Fatal(args ...interface{}) {
-	std.Fatal(args...)
-}
-
-// Debugf logs a message at level Debug on the standard logger.
-func Debugf(format string, args ...interface{}) {
-	std.Debugf(format, args...)
-}
-
-// Printf logs a message at level Info on the standard logger.
-func Printf(format string, args ...interface{}) {
-	std.Printf(format, args...)
-}
-
-// Infof logs a message at level Info on the standard logger.
-func Infof(format string, args ...interface{}) {
-	std.Infof(format, args...)
-}
-
-// Warnf logs a message at level Warn on the standard logger.
-func Warnf(format string, args ...interface{}) {
-	std.Warnf(format, args...)
-}
-
-// Warningf logs a message at level Warn on the standard logger.
-func Warningf(format string, args ...interface{}) {
-	std.Warningf(format, args...)
-}
-
-// Errorf logs a message at level Error on the standard logger.
-func Errorf(format string, args ...interface{}) {
-	std.Errorf(format, args...)
-}
-
-// Panicf logs a message at level Panic on the standard logger.
-func Panicf(format string, args ...interface{}) {
-	std.Panicf(format, args...)
-}
-
-// Fatalf logs a message at level Fatal on the standard logger.
-func Fatalf(format string, args ...interface{}) {
-	std.Fatalf(format, args...)
-}
-
-// Debugln logs a message at level Debug on the standard logger.
-func Debugln(args ...interface{}) {
-	std.Debugln(args...)
-}
-
-// Println logs a message at level Info on the standard logger.
-func Println(args ...interface{}) {
-	std.Println(args...)
-}
-
-// Infoln logs a message at level Info on the standard logger.
-func Infoln(args ...interface{}) {
-	std.Infoln(args...)
-}
-
-// Warnln logs a message at level Warn on the standard logger.
-func Warnln(args ...interface{}) {
-	std.Warnln(args...)
-}
-
-// Warningln logs a message at level Warn on the standard logger.
-func Warningln(args ...interface{}) {
-	std.Warningln(args...)
-}
-
-// Errorln logs a message at level Error on the standard logger.
-func Errorln(args ...interface{}) {
-	std.Errorln(args...)
-}
-
-// Panicln logs a message at level Panic on the standard logger.
-func Panicln(args ...interface{}) {
-	std.Panicln(args...)
-}
-
-// Fatalln logs a message at level Fatal on the standard logger.
-func Fatalln(args ...interface{}) {
-	std.Fatalln(args...)
-}
diff --git a/vendor/github.com/sirupsen/logrus/formatter.go b/vendor/github.com/sirupsen/logrus/formatter.go
deleted file mode 100644
index b183ff5..0000000
--- a/vendor/github.com/sirupsen/logrus/formatter.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package logrus
-
-import "time"
-
-const defaultTimestampFormat = time.RFC3339
-
-// The Formatter interface is used to implement a custom Formatter. It takes an
-// `Entry`. It exposes all the fields, including the default ones:
-//
-// * `entry.Data["msg"]`. The message passed from Info, Warn, Error ..
-// * `entry.Data["time"]`. The timestamp.
-// * `entry.Data["level"]. The level the entry was logged at.
-//
-// Any additional fields added with `WithField` or `WithFields` are also in
-// `entry.Data`. Format is expected to return an array of bytes which are then
-// logged to `logger.Out`.
-type Formatter interface {
-	Format(*Entry) ([]byte, error)
-}
-
-// This is to not silently overwrite `time`, `msg` and `level` fields when
-// dumping it. If this code wasn't there doing:
-//
-//  logrus.WithField("level", 1).Info("hello")
-//
-// Would just silently drop the user provided level. Instead with this code
-// it'll logged as:
-//
-//  {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."}
-//
-// It's not exported because it's still using Data in an opinionated way. It's to
-// avoid code duplication between the two default formatters.
-func prefixFieldClashes(data Fields) {
-	if t, ok := data["time"]; ok {
-		data["fields.time"] = t
-	}
-
-	if m, ok := data["msg"]; ok {
-		data["fields.msg"] = m
-	}
-
-	if l, ok := data["level"]; ok {
-		data["fields.level"] = l
-	}
-}
diff --git a/vendor/github.com/sirupsen/logrus/formatter_bench_test.go b/vendor/github.com/sirupsen/logrus/formatter_bench_test.go
deleted file mode 100644
index d948158..0000000
--- a/vendor/github.com/sirupsen/logrus/formatter_bench_test.go
+++ /dev/null
@@ -1,101 +0,0 @@
-package logrus
-
-import (
-	"fmt"
-	"testing"
-	"time"
-)
-
-// smallFields is a small size data set for benchmarking
-var smallFields = Fields{
-	"foo":   "bar",
-	"baz":   "qux",
-	"one":   "two",
-	"three": "four",
-}
-
-// largeFields is a large size data set for benchmarking
-var largeFields = Fields{
-	"foo":       "bar",
-	"baz":       "qux",
-	"one":       "two",
-	"three":     "four",
-	"five":      "six",
-	"seven":     "eight",
-	"nine":      "ten",
-	"eleven":    "twelve",
-	"thirteen":  "fourteen",
-	"fifteen":   "sixteen",
-	"seventeen": "eighteen",
-	"nineteen":  "twenty",
-	"a":         "b",
-	"c":         "d",
-	"e":         "f",
-	"g":         "h",
-	"i":         "j",
-	"k":         "l",
-	"m":         "n",
-	"o":         "p",
-	"q":         "r",
-	"s":         "t",
-	"u":         "v",
-	"w":         "x",
-	"y":         "z",
-	"this":      "will",
-	"make":      "thirty",
-	"entries":   "yeah",
-}
-
-var errorFields = Fields{
-	"foo": fmt.Errorf("bar"),
-	"baz": fmt.Errorf("qux"),
-}
-
-func BenchmarkErrorTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{DisableColors: true}, errorFields)
-}
-
-func BenchmarkSmallTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{DisableColors: true}, smallFields)
-}
-
-func BenchmarkLargeTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{DisableColors: true}, largeFields)
-}
-
-func BenchmarkSmallColoredTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{ForceColors: true}, smallFields)
-}
-
-func BenchmarkLargeColoredTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{ForceColors: true}, largeFields)
-}
-
-func BenchmarkSmallJSONFormatter(b *testing.B) {
-	doBenchmark(b, &JSONFormatter{}, smallFields)
-}
-
-func BenchmarkLargeJSONFormatter(b *testing.B) {
-	doBenchmark(b, &JSONFormatter{}, largeFields)
-}
-
-func doBenchmark(b *testing.B, formatter Formatter, fields Fields) {
-	logger := New()
-
-	entry := &Entry{
-		Time:    time.Time{},
-		Level:   InfoLevel,
-		Message: "message",
-		Data:    fields,
-		Logger:  logger,
-	}
-	var d []byte
-	var err error
-	for i := 0; i < b.N; i++ {
-		d, err = formatter.Format(entry)
-		if err != nil {
-			b.Fatal(err)
-		}
-		b.SetBytes(int64(len(d)))
-	}
-}
diff --git a/vendor/github.com/sirupsen/logrus/hook_test.go b/vendor/github.com/sirupsen/logrus/hook_test.go
deleted file mode 100644
index 4fea751..0000000
--- a/vendor/github.com/sirupsen/logrus/hook_test.go
+++ /dev/null
@@ -1,144 +0,0 @@
-package logrus
-
-import (
-	"sync"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-type TestHook struct {
-	Fired bool
-}
-
-func (hook *TestHook) Fire(entry *Entry) error {
-	hook.Fired = true
-	return nil
-}
-
-func (hook *TestHook) Levels() []Level {
-	return []Level{
-		DebugLevel,
-		InfoLevel,
-		WarnLevel,
-		ErrorLevel,
-		FatalLevel,
-		PanicLevel,
-	}
-}
-
-func TestHookFires(t *testing.T) {
-	hook := new(TestHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook)
-		assert.Equal(t, hook.Fired, false)
-
-		log.Print("test")
-	}, func(fields Fields) {
-		assert.Equal(t, hook.Fired, true)
-	})
-}
-
-type ModifyHook struct {
-}
-
-func (hook *ModifyHook) Fire(entry *Entry) error {
-	entry.Data["wow"] = "whale"
-	return nil
-}
-
-func (hook *ModifyHook) Levels() []Level {
-	return []Level{
-		DebugLevel,
-		InfoLevel,
-		WarnLevel,
-		ErrorLevel,
-		FatalLevel,
-		PanicLevel,
-	}
-}
-
-func TestHookCanModifyEntry(t *testing.T) {
-	hook := new(ModifyHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook)
-		log.WithField("wow", "elephant").Print("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["wow"], "whale")
-	})
-}
-
-func TestCanFireMultipleHooks(t *testing.T) {
-	hook1 := new(ModifyHook)
-	hook2 := new(TestHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook1)
-		log.Hooks.Add(hook2)
-
-		log.WithField("wow", "elephant").Print("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["wow"], "whale")
-		assert.Equal(t, hook2.Fired, true)
-	})
-}
-
-type ErrorHook struct {
-	Fired bool
-}
-
-func (hook *ErrorHook) Fire(entry *Entry) error {
-	hook.Fired = true
-	return nil
-}
-
-func (hook *ErrorHook) Levels() []Level {
-	return []Level{
-		ErrorLevel,
-	}
-}
-
-func TestErrorHookShouldntFireOnInfo(t *testing.T) {
-	hook := new(ErrorHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook)
-		log.Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, hook.Fired, false)
-	})
-}
-
-func TestErrorHookShouldFireOnError(t *testing.T) {
-	hook := new(ErrorHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook)
-		log.Error("test")
-	}, func(fields Fields) {
-		assert.Equal(t, hook.Fired, true)
-	})
-}
-
-func TestAddHookRace(t *testing.T) {
-	var wg sync.WaitGroup
-	wg.Add(2)
-	hook := new(ErrorHook)
-	LogAndAssertJSON(t, func(log *Logger) {
-		go func() {
-			defer wg.Done()
-			log.AddHook(hook)
-		}()
-		go func() {
-			defer wg.Done()
-			log.Error("test")
-		}()
-		wg.Wait()
-	}, func(fields Fields) {
-		// the line may have been logged
-		// before the hook was added, so we can't
-		// actually assert on the hook
-	})
-}
diff --git a/vendor/github.com/sirupsen/logrus/hooks.go b/vendor/github.com/sirupsen/logrus/hooks.go
deleted file mode 100644
index 3f151cd..0000000
--- a/vendor/github.com/sirupsen/logrus/hooks.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package logrus
-
-// A hook to be fired when logging on the logging levels returned from
-// `Levels()` on your implementation of the interface. Note that this is not
-// fired in a goroutine or a channel with workers, you should handle such
-// functionality yourself if your call is non-blocking and you don't wish for
-// the logging calls for levels returned from `Levels()` to block.
-type Hook interface {
-	Levels() []Level
-	Fire(*Entry) error
-}
-
-// Internal type for storing the hooks on a logger instance.
-type LevelHooks map[Level][]Hook
-
-// Add a hook to an instance of logger. This is called with
-// `log.Hooks.Add(new(MyHook))` where `MyHook` implements the `Hook` interface.
-func (hooks LevelHooks) Add(hook Hook) {
-	for _, level := range hook.Levels() {
-		hooks[level] = append(hooks[level], hook)
-	}
-}
-
-// Fire all the hooks for the passed level. Used by `entry.log` to fire
-// appropriate hooks for a log entry.
-func (hooks LevelHooks) Fire(level Level, entry *Entry) error {
-	for _, hook := range hooks[level] {
-		if err := hook.Fire(entry); err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
diff --git a/vendor/github.com/sirupsen/logrus/json_formatter.go b/vendor/github.com/sirupsen/logrus/json_formatter.go
deleted file mode 100644
index fb01c1b..0000000
--- a/vendor/github.com/sirupsen/logrus/json_formatter.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package logrus
-
-import (
-	"encoding/json"
-	"fmt"
-)
-
-type fieldKey string
-
-// FieldMap allows customization of the key names for default fields.
-type FieldMap map[fieldKey]string
-
-// Default key names for the default fields
-const (
-	FieldKeyMsg   = "msg"
-	FieldKeyLevel = "level"
-	FieldKeyTime  = "time"
-)
-
-func (f FieldMap) resolve(key fieldKey) string {
-	if k, ok := f[key]; ok {
-		return k
-	}
-
-	return string(key)
-}
-
-// JSONFormatter formats logs into parsable json
-type JSONFormatter struct {
-	// TimestampFormat sets the format used for marshaling timestamps.
-	TimestampFormat string
-
-	// DisableTimestamp allows disabling automatic timestamps in output
-	DisableTimestamp bool
-
-	// FieldMap allows users to customize the names of keys for default fields.
-	// As an example:
-	// formatter := &JSONFormatter{
-	//   	FieldMap: FieldMap{
-	// 		 FieldKeyTime: "@timestamp",
-	// 		 FieldKeyLevel: "@level",
-	// 		 FieldKeyMsg: "@message",
-	//    },
-	// }
-	FieldMap FieldMap
-}
-
-// Format renders a single log entry
-func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) {
-	data := make(Fields, len(entry.Data)+3)
-	for k, v := range entry.Data {
-		switch v := v.(type) {
-		case error:
-			// Otherwise errors are ignored by `encoding/json`
-			// https://github.com/sirupsen/logrus/issues/137
-			data[k] = v.Error()
-		default:
-			data[k] = v
-		}
-	}
-	prefixFieldClashes(data)
-
-	timestampFormat := f.TimestampFormat
-	if timestampFormat == "" {
-		timestampFormat = defaultTimestampFormat
-	}
-
-	if !f.DisableTimestamp {
-		data[f.FieldMap.resolve(FieldKeyTime)] = entry.Time.Format(timestampFormat)
-	}
-	data[f.FieldMap.resolve(FieldKeyMsg)] = entry.Message
-	data[f.FieldMap.resolve(FieldKeyLevel)] = entry.Level.String()
-
-	serialized, err := json.Marshal(data)
-	if err != nil {
-		return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
-	}
-	return append(serialized, '\n'), nil
-}
diff --git a/vendor/github.com/sirupsen/logrus/json_formatter_test.go b/vendor/github.com/sirupsen/logrus/json_formatter_test.go
deleted file mode 100644
index 51093a7..0000000
--- a/vendor/github.com/sirupsen/logrus/json_formatter_test.go
+++ /dev/null
@@ -1,199 +0,0 @@
-package logrus
-
-import (
-	"encoding/json"
-	"errors"
-	"strings"
-	"testing"
-)
-
-func TestErrorNotLost(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("error", errors.New("wild walrus")))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["error"] != "wild walrus" {
-		t.Fatal("Error field not set")
-	}
-}
-
-func TestErrorNotLostOnFieldNotNamedError(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("omg", errors.New("wild walrus")))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["omg"] != "wild walrus" {
-		t.Fatal("Error field not set")
-	}
-}
-
-func TestFieldClashWithTime(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("time", "right now!"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["fields.time"] != "right now!" {
-		t.Fatal("fields.time not set to original time field")
-	}
-
-	if entry["time"] != "0001-01-01T00:00:00Z" {
-		t.Fatal("time field not set to current time, was: ", entry["time"])
-	}
-}
-
-func TestFieldClashWithMsg(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("msg", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["fields.msg"] != "something" {
-		t.Fatal("fields.msg not set to original msg field")
-	}
-}
-
-func TestFieldClashWithLevel(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["fields.level"] != "something" {
-		t.Fatal("fields.level not set to original level field")
-	}
-}
-
-func TestJSONEntryEndsWithNewline(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	if b[len(b)-1] != '\n' {
-		t.Fatal("Expected JSON log entry to end with a newline")
-	}
-}
-
-func TestJSONMessageKey(t *testing.T) {
-	formatter := &JSONFormatter{
-		FieldMap: FieldMap{
-			FieldKeyMsg: "message",
-		},
-	}
-
-	b, err := formatter.Format(&Entry{Message: "oh hai"})
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if !(strings.Contains(s, "message") && strings.Contains(s, "oh hai")) {
-		t.Fatal("Expected JSON to format message key")
-	}
-}
-
-func TestJSONLevelKey(t *testing.T) {
-	formatter := &JSONFormatter{
-		FieldMap: FieldMap{
-			FieldKeyLevel: "somelevel",
-		},
-	}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if !strings.Contains(s, "somelevel") {
-		t.Fatal("Expected JSON to format level key")
-	}
-}
-
-func TestJSONTimeKey(t *testing.T) {
-	formatter := &JSONFormatter{
-		FieldMap: FieldMap{
-			FieldKeyTime: "timeywimey",
-		},
-	}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if !strings.Contains(s, "timeywimey") {
-		t.Fatal("Expected JSON to format time key")
-	}
-}
-
-func TestJSONDisableTimestamp(t *testing.T) {
-	formatter := &JSONFormatter{
-		DisableTimestamp: true,
-	}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if strings.Contains(s, FieldKeyTime) {
-		t.Error("Did not prevent timestamp", s)
-	}
-}
-
-func TestJSONEnableTimestamp(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if !strings.Contains(s, FieldKeyTime) {
-		t.Error("Timestamp not present", s)
-	}
-}
diff --git a/vendor/github.com/sirupsen/logrus/logger.go b/vendor/github.com/sirupsen/logrus/logger.go
deleted file mode 100644
index fdaf8a6..0000000
--- a/vendor/github.com/sirupsen/logrus/logger.go
+++ /dev/null
@@ -1,323 +0,0 @@
-package logrus
-
-import (
-	"io"
-	"os"
-	"sync"
-	"sync/atomic"
-)
-
-type Logger struct {
-	// The logs are `io.Copy`'d to this in a mutex. It's common to set this to a
-	// file, or leave it default which is `os.Stderr`. You can also set this to
-	// something more adventorous, such as logging to Kafka.
-	Out io.Writer
-	// Hooks for the logger instance. These allow firing events based on logging
-	// levels and log entries. For example, to send errors to an error tracking
-	// service, log to StatsD or dump the core on fatal errors.
-	Hooks LevelHooks
-	// All log entries pass through the formatter before logged to Out. The
-	// included formatters are `TextFormatter` and `JSONFormatter` for which
-	// TextFormatter is the default. In development (when a TTY is attached) it
-	// logs with colors, but to a file it wouldn't. You can easily implement your
-	// own that implements the `Formatter` interface, see the `README` or included
-	// formatters for examples.
-	Formatter Formatter
-	// The logging level the logger should log at. This is typically (and defaults
-	// to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be
-	// logged.
-	Level Level
-	// Used to sync writing to the log. Locking is enabled by Default
-	mu MutexWrap
-	// Reusable empty entry
-	entryPool sync.Pool
-}
-
-type MutexWrap struct {
-	lock     sync.Mutex
-	disabled bool
-}
-
-func (mw *MutexWrap) Lock() {
-	if !mw.disabled {
-		mw.lock.Lock()
-	}
-}
-
-func (mw *MutexWrap) Unlock() {
-	if !mw.disabled {
-		mw.lock.Unlock()
-	}
-}
-
-func (mw *MutexWrap) Disable() {
-	mw.disabled = true
-}
-
-// Creates a new logger. Configuration should be set by changing `Formatter`,
-// `Out` and `Hooks` directly on the default logger instance. You can also just
-// instantiate your own:
-//
-//    var log = &Logger{
-//      Out: os.Stderr,
-//      Formatter: new(JSONFormatter),
-//      Hooks: make(LevelHooks),
-//      Level: logrus.DebugLevel,
-//    }
-//
-// It's recommended to make this a global instance called `log`.
-func New() *Logger {
-	return &Logger{
-		Out:       os.Stderr,
-		Formatter: new(TextFormatter),
-		Hooks:     make(LevelHooks),
-		Level:     InfoLevel,
-	}
-}
-
-func (logger *Logger) newEntry() *Entry {
-	entry, ok := logger.entryPool.Get().(*Entry)
-	if ok {
-		return entry
-	}
-	return NewEntry(logger)
-}
-
-func (logger *Logger) releaseEntry(entry *Entry) {
-	logger.entryPool.Put(entry)
-}
-
-// Adds a field to the log entry, note that it doesn't log until you call
-// Debug, Print, Info, Warn, Fatal or Panic. It only creates a log entry.
-// If you want multiple fields, use `WithFields`.
-func (logger *Logger) WithField(key string, value interface{}) *Entry {
-	entry := logger.newEntry()
-	defer logger.releaseEntry(entry)
-	return entry.WithField(key, value)
-}
-
-// Adds a struct of fields to the log entry. All it does is call `WithField` for
-// each `Field`.
-func (logger *Logger) WithFields(fields Fields) *Entry {
-	entry := logger.newEntry()
-	defer logger.releaseEntry(entry)
-	return entry.WithFields(fields)
-}
-
-// Add an error as single field to the log entry.  All it does is call
-// `WithError` for the given `error`.
-func (logger *Logger) WithError(err error) *Entry {
-	entry := logger.newEntry()
-	defer logger.releaseEntry(entry)
-	return entry.WithError(err)
-}
-
-func (logger *Logger) Debugf(format string, args ...interface{}) {
-	if logger.level() >= DebugLevel {
-		entry := logger.newEntry()
-		entry.Debugf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Infof(format string, args ...interface{}) {
-	if logger.level() >= InfoLevel {
-		entry := logger.newEntry()
-		entry.Infof(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Printf(format string, args ...interface{}) {
-	entry := logger.newEntry()
-	entry.Printf(format, args...)
-	logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warnf(format string, args ...interface{}) {
-	if logger.level() >= WarnLevel {
-		entry := logger.newEntry()
-		entry.Warnf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Warningf(format string, args ...interface{}) {
-	if logger.level() >= WarnLevel {
-		entry := logger.newEntry()
-		entry.Warnf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Errorf(format string, args ...interface{}) {
-	if logger.level() >= ErrorLevel {
-		entry := logger.newEntry()
-		entry.Errorf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Fatalf(format string, args ...interface{}) {
-	if logger.level() >= FatalLevel {
-		entry := logger.newEntry()
-		entry.Fatalf(format, args...)
-		logger.releaseEntry(entry)
-	}
-	Exit(1)
-}
-
-func (logger *Logger) Panicf(format string, args ...interface{}) {
-	if logger.level() >= PanicLevel {
-		entry := logger.newEntry()
-		entry.Panicf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Debug(args ...interface{}) {
-	if logger.level() >= DebugLevel {
-		entry := logger.newEntry()
-		entry.Debug(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Info(args ...interface{}) {
-	if logger.level() >= InfoLevel {
-		entry := logger.newEntry()
-		entry.Info(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Print(args ...interface{}) {
-	entry := logger.newEntry()
-	entry.Info(args...)
-	logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warn(args ...interface{}) {
-	if logger.level() >= WarnLevel {
-		entry := logger.newEntry()
-		entry.Warn(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Warning(args ...interface{}) {
-	if logger.level() >= WarnLevel {
-		entry := logger.newEntry()
-		entry.Warn(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Error(args ...interface{}) {
-	if logger.level() >= ErrorLevel {
-		entry := logger.newEntry()
-		entry.Error(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Fatal(args ...interface{}) {
-	if logger.level() >= FatalLevel {
-		entry := logger.newEntry()
-		entry.Fatal(args...)
-		logger.releaseEntry(entry)
-	}
-	Exit(1)
-}
-
-func (logger *Logger) Panic(args ...interface{}) {
-	if logger.level() >= PanicLevel {
-		entry := logger.newEntry()
-		entry.Panic(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Debugln(args ...interface{}) {
-	if logger.level() >= DebugLevel {
-		entry := logger.newEntry()
-		entry.Debugln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Infoln(args ...interface{}) {
-	if logger.level() >= InfoLevel {
-		entry := logger.newEntry()
-		entry.Infoln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Println(args ...interface{}) {
-	entry := logger.newEntry()
-	entry.Println(args...)
-	logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warnln(args ...interface{}) {
-	if logger.level() >= WarnLevel {
-		entry := logger.newEntry()
-		entry.Warnln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Warningln(args ...interface{}) {
-	if logger.level() >= WarnLevel {
-		entry := logger.newEntry()
-		entry.Warnln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Errorln(args ...interface{}) {
-	if logger.level() >= ErrorLevel {
-		entry := logger.newEntry()
-		entry.Errorln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Fatalln(args ...interface{}) {
-	if logger.level() >= FatalLevel {
-		entry := logger.newEntry()
-		entry.Fatalln(args...)
-		logger.releaseEntry(entry)
-	}
-	Exit(1)
-}
-
-func (logger *Logger) Panicln(args ...interface{}) {
-	if logger.level() >= PanicLevel {
-		entry := logger.newEntry()
-		entry.Panicln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-//When file is opened with appending mode, it's safe to
-//write concurrently to a file (within 4k message on Linux).
-//In these cases user can choose to disable the lock.
-func (logger *Logger) SetNoLock() {
-	logger.mu.Disable()
-}
-
-func (logger *Logger) level() Level {
-	return Level(atomic.LoadUint32((*uint32)(&logger.Level)))
-}
-
-func (logger *Logger) SetLevel(level Level) {
-	atomic.StoreUint32((*uint32)(&logger.Level), uint32(level))
-}
-
-func (logger *Logger) AddHook(hook Hook) {
-	logger.mu.Lock()
-	defer logger.mu.Unlock()
-	logger.Hooks.Add(hook)
-}
diff --git a/vendor/github.com/sirupsen/logrus/logger_bench_test.go b/vendor/github.com/sirupsen/logrus/logger_bench_test.go
deleted file mode 100644
index dd23a35..0000000
--- a/vendor/github.com/sirupsen/logrus/logger_bench_test.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package logrus
-
-import (
-	"os"
-	"testing"
-)
-
-// smallFields is a small size data set for benchmarking
-var loggerFields = Fields{
-	"foo":   "bar",
-	"baz":   "qux",
-	"one":   "two",
-	"three": "four",
-}
-
-func BenchmarkDummyLogger(b *testing.B) {
-	nullf, err := os.OpenFile("/dev/null", os.O_WRONLY, 0666)
-	if err != nil {
-		b.Fatalf("%v", err)
-	}
-	defer nullf.Close()
-	doLoggerBenchmark(b, nullf, &TextFormatter{DisableColors: true}, smallFields)
-}
-
-func BenchmarkDummyLoggerNoLock(b *testing.B) {
-	nullf, err := os.OpenFile("/dev/null", os.O_WRONLY|os.O_APPEND, 0666)
-	if err != nil {
-		b.Fatalf("%v", err)
-	}
-	defer nullf.Close()
-	doLoggerBenchmarkNoLock(b, nullf, &TextFormatter{DisableColors: true}, smallFields)
-}
-
-func doLoggerBenchmark(b *testing.B, out *os.File, formatter Formatter, fields Fields) {
-	logger := Logger{
-		Out:       out,
-		Level:     InfoLevel,
-		Formatter: formatter,
-	}
-	entry := logger.WithFields(fields)
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			entry.Info("aaa")
-		}
-	})
-}
-
-func doLoggerBenchmarkNoLock(b *testing.B, out *os.File, formatter Formatter, fields Fields) {
-	logger := Logger{
-		Out:       out,
-		Level:     InfoLevel,
-		Formatter: formatter,
-	}
-	logger.SetNoLock()
-	entry := logger.WithFields(fields)
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			entry.Info("aaa")
-		}
-	})
-}
diff --git a/vendor/github.com/sirupsen/logrus/logrus.go b/vendor/github.com/sirupsen/logrus/logrus.go
deleted file mode 100644
index dd38999..0000000
--- a/vendor/github.com/sirupsen/logrus/logrus.go
+++ /dev/null
@@ -1,143 +0,0 @@
-package logrus
-
-import (
-	"fmt"
-	"log"
-	"strings"
-)
-
-// Fields type, used to pass to `WithFields`.
-type Fields map[string]interface{}
-
-// Level type
-type Level uint32
-
-// Convert the Level to a string. E.g. PanicLevel becomes "panic".
-func (level Level) String() string {
-	switch level {
-	case DebugLevel:
-		return "debug"
-	case InfoLevel:
-		return "info"
-	case WarnLevel:
-		return "warning"
-	case ErrorLevel:
-		return "error"
-	case FatalLevel:
-		return "fatal"
-	case PanicLevel:
-		return "panic"
-	}
-
-	return "unknown"
-}
-
-// ParseLevel takes a string level and returns the Logrus log level constant.
-func ParseLevel(lvl string) (Level, error) {
-	switch strings.ToLower(lvl) {
-	case "panic":
-		return PanicLevel, nil
-	case "fatal":
-		return FatalLevel, nil
-	case "error":
-		return ErrorLevel, nil
-	case "warn", "warning":
-		return WarnLevel, nil
-	case "info":
-		return InfoLevel, nil
-	case "debug":
-		return DebugLevel, nil
-	}
-
-	var l Level
-	return l, fmt.Errorf("not a valid logrus Level: %q", lvl)
-}
-
-// A constant exposing all logging levels
-var AllLevels = []Level{
-	PanicLevel,
-	FatalLevel,
-	ErrorLevel,
-	WarnLevel,
-	InfoLevel,
-	DebugLevel,
-}
-
-// These are the different logging levels. You can set the logging level to log
-// on your instance of logger, obtained with `logrus.New()`.
-const (
-	// PanicLevel level, highest level of severity. Logs and then calls panic with the
-	// message passed to Debug, Info, ...
-	PanicLevel Level = iota
-	// FatalLevel level. Logs and then calls `os.Exit(1)`. It will exit even if the
-	// logging level is set to Panic.
-	FatalLevel
-	// ErrorLevel level. Logs. Used for errors that should definitely be noted.
-	// Commonly used for hooks to send errors to an error tracking service.
-	ErrorLevel
-	// WarnLevel level. Non-critical entries that deserve eyes.
-	WarnLevel
-	// InfoLevel level. General operational entries about what's going on inside the
-	// application.
-	InfoLevel
-	// DebugLevel level. Usually only enabled when debugging. Very verbose logging.
-	DebugLevel
-)
-
-// Won't compile if StdLogger can't be realized by a log.Logger
-var (
-	_ StdLogger = &log.Logger{}
-	_ StdLogger = &Entry{}
-	_ StdLogger = &Logger{}
-)
-
-// StdLogger is what your logrus-enabled library should take, that way
-// it'll accept a stdlib logger and a logrus logger. There's no standard
-// interface, this is the closest we get, unfortunately.
-type StdLogger interface {
-	Print(...interface{})
-	Printf(string, ...interface{})
-	Println(...interface{})
-
-	Fatal(...interface{})
-	Fatalf(string, ...interface{})
-	Fatalln(...interface{})
-
-	Panic(...interface{})
-	Panicf(string, ...interface{})
-	Panicln(...interface{})
-}
-
-// The FieldLogger interface generalizes the Entry and Logger types
-type FieldLogger interface {
-	WithField(key string, value interface{}) *Entry
-	WithFields(fields Fields) *Entry
-	WithError(err error) *Entry
-
-	Debugf(format string, args ...interface{})
-	Infof(format string, args ...interface{})
-	Printf(format string, args ...interface{})
-	Warnf(format string, args ...interface{})
-	Warningf(format string, args ...interface{})
-	Errorf(format string, args ...interface{})
-	Fatalf(format string, args ...interface{})
-	Panicf(format string, args ...interface{})
-
-	Debug(args ...interface{})
-	Info(args ...interface{})
-	Print(args ...interface{})
-	Warn(args ...interface{})
-	Warning(args ...interface{})
-	Error(args ...interface{})
-	Fatal(args ...interface{})
-	Panic(args ...interface{})
-
-	Debugln(args ...interface{})
-	Infoln(args ...interface{})
-	Println(args ...interface{})
-	Warnln(args ...interface{})
-	Warningln(args ...interface{})
-	Errorln(args ...interface{})
-	Fatalln(args ...interface{})
-	Panicln(args ...interface{})
-}
diff --git a/vendor/github.com/sirupsen/logrus/logrus_test.go b/vendor/github.com/sirupsen/logrus/logrus_test.go
deleted file mode 100644
index 78cbc28..0000000
--- a/vendor/github.com/sirupsen/logrus/logrus_test.go
+++ /dev/null
@@ -1,386 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"encoding/json"
-	"strconv"
-	"strings"
-	"sync"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func LogAndAssertJSON(t *testing.T, log func(*Logger), assertions func(fields Fields)) {
-	var buffer bytes.Buffer
-	var fields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-
-	log(logger)
-
-	err := json.Unmarshal(buffer.Bytes(), &fields)
-	assert.Nil(t, err)
-
-	assertions(fields)
-}
-
-func LogAndAssertText(t *testing.T, log func(*Logger), assertions func(fields map[string]string)) {
-	var buffer bytes.Buffer
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = &TextFormatter{
-		DisableColors: true,
-	}
-
-	log(logger)
-
-	fields := make(map[string]string)
-	for _, kv := range strings.Split(buffer.String(), " ") {
-		if !strings.Contains(kv, "=") {
-			continue
-		}
-		kvArr := strings.Split(kv, "=")
-		key := strings.TrimSpace(kvArr[0])
-		val := kvArr[1]
-		if kvArr[1][0] == '"' {
-			var err error
-			val, err = strconv.Unquote(val)
-			assert.NoError(t, err)
-		}
-		fields[key] = val
-	}
-	assertions(fields)
-}
-
-func TestPrint(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Print("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "test")
-		assert.Equal(t, fields["level"], "info")
-	})
-}
-
-func TestInfo(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "test")
-		assert.Equal(t, fields["level"], "info")
-	})
-}
-
-func TestWarn(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Warn("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "test")
-		assert.Equal(t, fields["level"], "warning")
-	})
-}
-
-func TestInfolnShouldAddSpacesBetweenStrings(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Infoln("test", "test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "test test")
-	})
-}
-
-func TestInfolnShouldAddSpacesBetweenStringAndNonstring(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Infoln("test", 10)
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "test 10")
-	})
-}
-
-func TestInfolnShouldAddSpacesBetweenTwoNonStrings(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Infoln(10, 10)
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "10 10")
-	})
-}
-
-func TestInfoShouldAddSpacesBetweenTwoNonStrings(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Infoln(10, 10)
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "10 10")
-	})
-}
-
-func TestInfoShouldNotAddSpacesBetweenStringAndNonstring(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Info("test", 10)
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "test10")
-	})
-}
-
-func TestInfoShouldNotAddSpacesBetweenStrings(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Info("test", "test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "testtest")
-	})
-}
-
-func TestWithFieldsShouldAllowAssignments(t *testing.T) {
-	var buffer bytes.Buffer
-	var fields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-
-	localLog := logger.WithFields(Fields{
-		"key1": "value1",
-	})
-
-	localLog.WithField("key2", "value2").Info("test")
-	err := json.Unmarshal(buffer.Bytes(), &fields)
-	assert.Nil(t, err)
-
-	assert.Equal(t, "value2", fields["key2"])
-	assert.Equal(t, "value1", fields["key1"])
-
-	buffer = bytes.Buffer{}
-	fields = Fields{}
-	localLog.Info("test")
-	err = json.Unmarshal(buffer.Bytes(), &fields)
-	assert.Nil(t, err)
-
-	_, ok := fields["key2"]
-	assert.Equal(t, false, ok)
-	assert.Equal(t, "value1", fields["key1"])
-}
-
-func TestUserSuppliedFieldDoesNotOverwriteDefaults(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("msg", "hello").Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "test")
-	})
-}
-
-func TestUserSuppliedMsgFieldHasPrefix(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("msg", "hello").Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["msg"], "test")
-		assert.Equal(t, fields["fields.msg"], "hello")
-	})
-}
-
-func TestUserSuppliedTimeFieldHasPrefix(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("time", "hello").Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["fields.time"], "hello")
-	})
-}
-
-func TestUserSuppliedLevelFieldHasPrefix(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("level", 1).Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["level"], "info")
-		assert.Equal(t, fields["fields.level"], 1.0) // JSON has floats only
-	})
-}
-
-func TestDefaultFieldsAreNotPrefixed(t *testing.T) {
-	LogAndAssertText(t, func(log *Logger) {
-		ll := log.WithField("herp", "derp")
-		ll.Info("hello")
-		ll.Info("bye")
-	}, func(fields map[string]string) {
-		for _, fieldName := range []string{"fields.level", "fields.time", "fields.msg"} {
-			if _, ok := fields[fieldName]; ok {
-				t.Fatalf("should not have prefixed %q: %v", fieldName, fields)
-			}
-		}
-	})
-}
-
-func TestDoubleLoggingDoesntPrefixPreviousFields(t *testing.T) {
-
-	var buffer bytes.Buffer
-	var fields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-
-	llog := logger.WithField("context", "eating raw fish")
-
-	llog.Info("looks delicious")
-
-	err := json.Unmarshal(buffer.Bytes(), &fields)
-	assert.NoError(t, err, "should have decoded first message")
-	assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields")
-	assert.Equal(t, fields["msg"], "looks delicious")
-	assert.Equal(t, fields["context"], "eating raw fish")
-
-	buffer.Reset()
-
-	llog.Warn("omg it is!")
-
-	err = json.Unmarshal(buffer.Bytes(), &fields)
-	assert.NoError(t, err, "should have decoded second message")
-	assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields")
-	assert.Equal(t, fields["msg"], "omg it is!")
-	assert.Equal(t, fields["context"], "eating raw fish")
-	assert.Nil(t, fields["fields.msg"], "should not have prefixed previous `msg` entry")
-
-}
-
-func TestConvertLevelToString(t *testing.T) {
-	assert.Equal(t, "debug", DebugLevel.String())
-	assert.Equal(t, "info", InfoLevel.String())
-	assert.Equal(t, "warning", WarnLevel.String())
-	assert.Equal(t, "error", ErrorLevel.String())
-	assert.Equal(t, "fatal", FatalLevel.String())
-	assert.Equal(t, "panic", PanicLevel.String())
-}
-
-func TestParseLevel(t *testing.T) {
-	l, err := ParseLevel("panic")
-	assert.Nil(t, err)
-	assert.Equal(t, PanicLevel, l)
-
-	l, err = ParseLevel("PANIC")
-	assert.Nil(t, err)
-	assert.Equal(t, PanicLevel, l)
-
-	l, err = ParseLevel("fatal")
-	assert.Nil(t, err)
-	assert.Equal(t, FatalLevel, l)
-
-	l, err = ParseLevel("FATAL")
-	assert.Nil(t, err)
-	assert.Equal(t, FatalLevel, l)
-
-	l, err = ParseLevel("error")
-	assert.Nil(t, err)
-	assert.Equal(t, ErrorLevel, l)
-
-	l, err = ParseLevel("ERROR")
-	assert.Nil(t, err)
-	assert.Equal(t, ErrorLevel, l)
-
-	l, err = ParseLevel("warn")
-	assert.Nil(t, err)
-	assert.Equal(t, WarnLevel, l)
-
-	l, err = ParseLevel("WARN")
-	assert.Nil(t, err)
-	assert.Equal(t, WarnLevel, l)
-
-	l, err = ParseLevel("warning")
-	assert.Nil(t, err)
-	assert.Equal(t, WarnLevel, l)
-
-	l, err = ParseLevel("WARNING")
-	assert.Nil(t, err)
-	assert.Equal(t, WarnLevel, l)
-
-	l, err = ParseLevel("info")
-	assert.Nil(t, err)
-	assert.Equal(t, InfoLevel, l)
-
-	l, err = ParseLevel("INFO")
-	assert.Nil(t, err)
-	assert.Equal(t, InfoLevel, l)
-
-	l, err = ParseLevel("debug")
-	assert.Nil(t, err)
-	assert.Equal(t, DebugLevel, l)
-
-	l, err = ParseLevel("DEBUG")
-	assert.Nil(t, err)
-	assert.Equal(t, DebugLevel, l)
-
-	l, err = ParseLevel("invalid")
-	assert.Equal(t, "not a valid logrus Level: \"invalid\"", err.Error())
-}
-
-func TestGetSetLevelRace(t *testing.T) {
-	wg := sync.WaitGroup{}
-	for i := 0; i < 100; i++ {
-		wg.Add(1)
-		go func(i int) {
-			defer wg.Done()
-			if i%2 == 0 {
-				SetLevel(InfoLevel)
-			} else {
-				GetLevel()
-			}
-		}(i)
-
-	}
-	wg.Wait()
-}
-
-func TestLoggingRace(t *testing.T) {
-	logger := New()
-
-	var wg sync.WaitGroup
-	wg.Add(100)
-
-	for i := 0; i < 100; i++ {
-		go func() {
-			logger.Info("info")
-			wg.Done()
-		}()
-	}
-	wg.Wait()
-}
-
-// Compile test
-func TestLogrusInterface(t *testing.T) {
-	var buffer bytes.Buffer
-	fn := func(l FieldLogger) {
-		b := l.WithField("key", "value")
-		b.Debug("Test")
-	}
-	// test logger
-	logger := New()
-	logger.Out = &buffer
-	fn(logger)
-
-	// test Entry
-	e := logger.WithField("another", "value")
-	fn(e)
-}
-
-// Implements io.Writer using channels for synchronization, so we can wait on
-// the Entry.Writer goroutine to write in a non-racey way. This does assume that
-// there is a single call to Logger.Out for each message.
-type channelWriter chan []byte
-
-func (cw channelWriter) Write(p []byte) (int, error) {
-	cw <- p
-	return len(p), nil
-}
-
-func TestEntryWriter(t *testing.T) {
-	cw := channelWriter(make(chan []byte, 1))
-	log := New()
-	log.Out = cw
-	log.Formatter = new(JSONFormatter)
-	log.WithField("foo", "bar").WriterLevel(WarnLevel).Write([]byte("hello\n"))
-
-	bs := <-cw
-	var fields Fields
-	err := json.Unmarshal(bs, &fields)
-	assert.Nil(t, err)
-	assert.Equal(t, fields["foo"], "bar")
-	assert.Equal(t, fields["level"], "warning")
-}
diff --git a/vendor/github.com/sirupsen/logrus/terminal_bsd.go b/vendor/github.com/sirupsen/logrus/terminal_bsd.go
deleted file mode 100644
index 4880d13..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_bsd.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// +build darwin freebsd openbsd netbsd dragonfly
-// +build !appengine,!gopherjs
-
-package logrus
-
-import "golang.org/x/sys/unix"
-
-const ioctlReadTermios = unix.TIOCGETA
-
-type Termios unix.Termios
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go b/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go
deleted file mode 100644
index 3de08e8..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build appengine gopherjs
-
-package logrus
-
-import (
-	"io"
-)
-
-func checkIfTerminal(w io.Writer) bool {
-	return true
-}
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go b/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go
deleted file mode 100644
index 067047a..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build !appengine,!gopherjs
-
-package logrus
-
-import (
-	"io"
-	"os"
-
-	"golang.org/x/crypto/ssh/terminal"
-)
-
-func checkIfTerminal(w io.Writer) bool {
-	switch v := w.(type) {
-	case *os.File:
-		return terminal.IsTerminal(int(v.Fd()))
-	default:
-		return false
-	}
-}
diff --git a/vendor/github.com/sirupsen/logrus/terminal_linux.go b/vendor/github.com/sirupsen/logrus/terminal_linux.go
deleted file mode 100644
index f29a009..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_linux.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Based on ssh/terminal:
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !appengine,!gopherjs
-
-package logrus
-
-import "golang.org/x/sys/unix"
-
-const ioctlReadTermios = unix.TCGETS
-
-type Termios unix.Termios
diff --git a/vendor/github.com/sirupsen/logrus/text_formatter.go b/vendor/github.com/sirupsen/logrus/text_formatter.go
deleted file mode 100644
index 61b21ca..0000000
--- a/vendor/github.com/sirupsen/logrus/text_formatter.go
+++ /dev/null
@@ -1,178 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"fmt"
-	"sort"
-	"strings"
-	"sync"
-	"time"
-)
-
-const (
-	nocolor = 0
-	red     = 31
-	green   = 32
-	yellow  = 33
-	blue    = 36
-	gray    = 37
-)
-
-var (
-	baseTimestamp time.Time
-)
-
-func init() {
-	baseTimestamp = time.Now()
-}
-
-// TextFormatter formats logs into text
-type TextFormatter struct {
-	// Set to true to bypass checking for a TTY before outputting colors.
-	ForceColors bool
-
-	// Force disabling colors.
-	DisableColors bool
-
-	// Disable timestamp logging. useful when output is redirected to logging
-	// system that already adds timestamps.
-	DisableTimestamp bool
-
-	// Enable logging the full timestamp when a TTY is attached instead of just
-	// the time passed since beginning of execution.
-	FullTimestamp bool
-
-	// TimestampFormat to use for display when a full timestamp is printed
-	TimestampFormat string
-
-	// The fields are sorted by default for a consistent output. For applications
-	// that log extremely frequently and don't use the JSON formatter this may not
-	// be desired.
-	DisableSorting bool
-
-	// QuoteEmptyFields will wrap empty fields in quotes if true
-	QuoteEmptyFields bool
-
-	// Whether the logger's out is to a terminal
-	isTerminal bool
-
-	sync.Once
-}
-
-func (f *TextFormatter) init(entry *Entry) {
-	if entry.Logger != nil {
-		f.isTerminal = checkIfTerminal(entry.Logger.Out)
-	}
-}
-
-// Format renders a single log entry
-func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
-	var b *bytes.Buffer
-	keys := make([]string, 0, len(entry.Data))
-	for k := range entry.Data {
-		keys = append(keys, k)
-	}
-
-	if !f.DisableSorting {
-		sort.Strings(keys)
-	}
-	if entry.Buffer != nil {
-		b = entry.Buffer
-	} else {
-		b = &bytes.Buffer{}
-	}
-
-	prefixFieldClashes(entry.Data)
-
-	f.Do(func() { f.init(entry) })
-
-	isColored := (f.ForceColors || f.isTerminal) && !f.DisableColors
-
-	timestampFormat := f.TimestampFormat
-	if timestampFormat == "" {
-		timestampFormat = defaultTimestampFormat
-	}
-	if isColored {
-		f.printColored(b, entry, keys, timestampFormat)
-	} else {
-		if !f.DisableTimestamp {
-			f.appendKeyValue(b, "time", entry.Time.Format(timestampFormat))
-		}
-		f.appendKeyValue(b, "level", entry.Level.String())
-		if entry.Message != "" {
-			f.appendKeyValue(b, "msg", entry.Message)
-		}
-		for _, key := range keys {
-			f.appendKeyValue(b, key, entry.Data[key])
-		}
-	}
-
-	b.WriteByte('\n')
-	return b.Bytes(), nil
-}
-
-func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, timestampFormat string) {
-	var levelColor int
-	switch entry.Level {
-	case DebugLevel:
-		levelColor = gray
-	case WarnLevel:
-		levelColor = yellow
-	case ErrorLevel, FatalLevel, PanicLevel:
-		levelColor = red
-	default:
-		levelColor = blue
-	}
-
-	levelText := strings.ToUpper(entry.Level.String())[0:4]
-
-	if f.DisableTimestamp {
-		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m %-44s ", levelColor, levelText, entry.Message)
-	} else if !f.FullTimestamp {
-		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d] %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), entry.Message)
-	} else {
-		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s] %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), entry.Message)
-	}
-	for _, k := range keys {
-		v := entry.Data[k]
-		fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=", levelColor, k)
-		f.appendValue(b, v)
-	}
-}
-
-func (f *TextFormatter) needsQuoting(text string) bool {
-	if f.QuoteEmptyFields && len(text) == 0 {
-		return true
-	}
-	for _, ch := range text {
-		if !((ch >= 'a' && ch <= 'z') ||
-			(ch >= 'A' && ch <= 'Z') ||
-			(ch >= '0' && ch <= '9') ||
-			ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') {
-			return true
-		}
-	}
-	return false
-}
-
-func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interface{}) {
-	if b.Len() > 0 {
-		b.WriteByte(' ')
-	}
-	b.WriteString(key)
-	b.WriteByte('=')
-	f.appendValue(b, value)
-}
-
-func (f *TextFormatter) appendValue(b *bytes.Buffer, value interface{}) {
-	stringVal, ok := value.(string)
-	if !ok {
-		stringVal = fmt.Sprint(value)
-	}
-
-	if !f.needsQuoting(stringVal) {
-		b.WriteString(stringVal)
-	} else {
-		b.WriteString(fmt.Sprintf("%q", stringVal))
-	}
-}
diff --git a/vendor/github.com/sirupsen/logrus/text_formatter_test.go b/vendor/github.com/sirupsen/logrus/text_formatter_test.go
deleted file mode 100644
index d93b931..0000000
--- a/vendor/github.com/sirupsen/logrus/text_formatter_test.go
+++ /dev/null
@@ -1,141 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"strings"
-	"testing"
-	"time"
-)
-
-func TestFormatting(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-
-	testCases := []struct {
-		value    string
-		expected string
-	}{
-		{`foo`, "time=\"0001-01-01T00:00:00Z\" level=panic test=foo\n"},
-	}
-
-	for _, tc := range testCases {
-		b, _ := tf.Format(WithField("test", tc.value))
-
-		if string(b) != tc.expected {
-			t.Errorf("formatting expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected)
-		}
-	}
-}
-
-func TestQuoting(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-
-	checkQuoting := func(q bool, value interface{}) {
-		b, _ := tf.Format(WithField("test", value))
-		idx := bytes.Index(b, ([]byte)("test="))
-		cont := bytes.Contains(b[idx+5:], []byte("\""))
-		if cont != q {
-			if q {
-				t.Errorf("quoting expected for: %#v", value)
-			} else {
-				t.Errorf("quoting not expected for: %#v", value)
-			}
-		}
-	}
-
-	checkQuoting(false, "")
-	checkQuoting(false, "abcd")
-	checkQuoting(false, "v1.0")
-	checkQuoting(false, "1234567890")
-	checkQuoting(false, "/foobar")
-	checkQuoting(false, "foo_bar")
-	checkQuoting(false, "foo@bar")
-	checkQuoting(false, "foobar^")
-	checkQuoting(false, "+/-_^@f.oobar")
-	checkQuoting(true, "foobar$")
-	checkQuoting(true, "&foobar")
-	checkQuoting(true, "x y")
-	checkQuoting(true, "x,y")
-	checkQuoting(false, errors.New("invalid"))
-	checkQuoting(true, errors.New("invalid argument"))
-
-	// Test for quoting empty fields.
-	tf.QuoteEmptyFields = true
-	checkQuoting(true, "")
-	checkQuoting(false, "abcd")
-	checkQuoting(true, errors.New("invalid argument"))
-}
-
-func TestEscaping(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-
-	testCases := []struct {
-		value    string
-		expected string
-	}{
-		{`ba"r`, `ba\"r`},
-		{`ba'r`, `ba'r`},
-	}
-
-	for _, tc := range testCases {
-		b, _ := tf.Format(WithField("test", tc.value))
-		if !bytes.Contains(b, []byte(tc.expected)) {
-			t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected)
-		}
-	}
-}
-
-func TestEscaping_Interface(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-
-	ts := time.Now()
-
-	testCases := []struct {
-		value    interface{}
-		expected string
-	}{
-		{ts, fmt.Sprintf("\"%s\"", ts.String())},
-		{errors.New("error: something went wrong"), "\"error: something went wrong\""},
-	}
-
-	for _, tc := range testCases {
-		b, _ := tf.Format(WithField("test", tc.value))
-		if !bytes.Contains(b, []byte(tc.expected)) {
-			t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected)
-		}
-	}
-}
-
-func TestTimestampFormat(t *testing.T) {
-	checkTimeStr := func(format string) {
-		customFormatter := &TextFormatter{DisableColors: true, TimestampFormat: format}
-		customStr, _ := customFormatter.Format(WithField("test", "test"))
-		timeStart := bytes.Index(customStr, ([]byte)("time="))
-		timeEnd := bytes.Index(customStr, ([]byte)("level="))
-		timeStr := customStr[timeStart+5+len("\"") : timeEnd-1-len("\"")]
-		if format == "" {
-			format = time.RFC3339
-		}
-		_, e := time.Parse(format, (string)(timeStr))
-		if e != nil {
-			t.Errorf("time string \"%s\" did not match provided time format \"%s\": %s", timeStr, format, e)
-		}
-	}
-
-	checkTimeStr("2006-01-02T15:04:05.000000000Z07:00")
-	checkTimeStr("Mon Jan _2 15:04:05 2006")
-	checkTimeStr("")
-}
-
-func TestDisableTimestampWithColoredOutput(t *testing.T) {
-	tf := &TextFormatter{DisableTimestamp: true, ForceColors: true}
-
-	b, _ := tf.Format(WithField("test", "test"))
-	if strings.Contains(string(b), "[0000]") {
-		t.Error("timestamp not expected when DisableTimestamp is true")
-	}
-}
-
-// TODO add tests for sorting etc., this requires a parser for the text
-// formatter output.
diff --git a/vendor/github.com/sirupsen/logrus/writer.go b/vendor/github.com/sirupsen/logrus/writer.go
deleted file mode 100644
index 7bdebed..0000000
--- a/vendor/github.com/sirupsen/logrus/writer.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package logrus
-
-import (
-	"bufio"
-	"io"
-	"runtime"
-)
-
-func (logger *Logger) Writer() *io.PipeWriter {
-	return logger.WriterLevel(InfoLevel)
-}
-
-func (logger *Logger) WriterLevel(level Level) *io.PipeWriter {
-	return NewEntry(logger).WriterLevel(level)
-}
-
-func (entry *Entry) Writer() *io.PipeWriter {
-	return entry.WriterLevel(InfoLevel)
-}
-
-func (entry *Entry) WriterLevel(level Level) *io.PipeWriter {
-	reader, writer := io.Pipe()
-
-	var printFunc func(args ...interface{})
-
-	switch level {
-	case DebugLevel:
-		printFunc = entry.Debug
-	case InfoLevel:
-		printFunc = entry.Info
-	case WarnLevel:
-		printFunc = entry.Warn
-	case ErrorLevel:
-		printFunc = entry.Error
-	case FatalLevel:
-		printFunc = entry.Fatal
-	case PanicLevel:
-		printFunc = entry.Panic
-	default:
-		printFunc = entry.Print
-	}
-
-	go entry.writerScanner(reader, printFunc)
-	runtime.SetFinalizer(writer, writerFinalizer)
-
-	return writer
-}
-
-func (entry *Entry) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) {
-	scanner := bufio.NewScanner(reader)
-	for scanner.Scan() {
-		printFunc(scanner.Text())
-	}
-	if err := scanner.Err(); err != nil {
-		entry.Errorf("Error while reading from Writer: %s", err)
-	}
-	reader.Close()
-}
-
-func writerFinalizer(writer *io.PipeWriter) {
-	writer.Close()
-}
diff --git a/vendor/github.com/spf13/cast/.gitignore b/vendor/github.com/spf13/cast/.gitignore
deleted file mode 100644
index 53053a8..0000000
--- a/vendor/github.com/spf13/cast/.gitignore
+++ /dev/null
@@ -1,25 +0,0 @@
-# Compiled Object files, Static and Dynamic libs (Shared Objects)
-*.o
-*.a
-*.so
-
-# Folders
-_obj
-_test
-
-# Architecture specific extensions/prefixes
-*.[568vq]
-[568vq].out
-
-*.cgo1.go
-*.cgo2.c
-_cgo_defun.c
-_cgo_gotypes.go
-_cgo_export.*
-
-_testmain.go
-
-*.exe
-*.test
-
-*.bench
diff --git a/vendor/github.com/spf13/cast/.travis.yml b/vendor/github.com/spf13/cast/.travis.yml
deleted file mode 100644
index 4da9766..0000000
--- a/vendor/github.com/spf13/cast/.travis.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-language: go
-sudo: required
-go:
-  - 1.7.5
-  - 1.8
-  - tip
-os:
-  - linux
-matrix:
-  allow_failures:
-    - go: tip
-  fast_finish: true
-script:
-  - make check
diff --git a/vendor/github.com/spf13/cast/LICENSE b/vendor/github.com/spf13/cast/LICENSE
deleted file mode 100644
index 4527efb..0000000
--- a/vendor/github.com/spf13/cast/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014 Steve Francia
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
diff --git a/vendor/github.com/spf13/cast/Makefile b/vendor/github.com/spf13/cast/Makefile
deleted file mode 100644
index 7ccf893..0000000
--- a/vendor/github.com/spf13/cast/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-# A Self-Documenting Makefile: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
-
-.PHONY: check fmt lint test test-race vet test-cover-html help
-.DEFAULT_GOAL := help
-
-check: test-race fmt vet lint ## Run tests and linters
-
-test: ## Run tests
-	go test ./...
-
-test-race: ## Run tests with race detector
-	go test -race ./...
-
-fmt: ## Run gofmt linter
-	@for d in `go list` ; do \
-		if [ "`gofmt -l -s $$GOPATH/src/$$d | tee /dev/stderr`" ]; then \
-			echo "^ improperly formatted go files" && echo && exit 1; \
-		fi \
-	done
-
-lint: ## Run golint linter
-	@for d in `go list` ; do \
-		if [ "`golint $$d | tee /dev/stderr`" ]; then \
-			echo "^ golint errors!" && echo && exit 1; \
-		fi \
-	done
-
-vet: ## Run go vet linter
-	@if [ "`go vet | tee /dev/stderr`" ]; then \
-		echo "^ go vet errors!" && echo && exit 1; \
-	fi
-
-test-cover-html: ## Generate test coverage report
-	go test -coverprofile=coverage.out -covermode=count
-	go tool cover -func=coverage.out
-
-help:
-	@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
diff --git a/vendor/github.com/spf13/cast/README.md b/vendor/github.com/spf13/cast/README.md
deleted file mode 100644
index e693939..0000000
--- a/vendor/github.com/spf13/cast/README.md
+++ /dev/null
@@ -1,75 +0,0 @@
-cast
-====
-[![GoDoc](https://godoc.org/github.com/spf13/cast?status.svg)](https://godoc.org/github.com/spf13/cast)
-[![Build Status](https://api.travis-ci.org/spf13/cast.svg?branch=master)](https://travis-ci.org/spf13/cast)
-[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cast)](https://goreportcard.com/report/github.com/spf13/cast)
-
-Easy and safe casting from one type to another in Go
-
-Don’t Panic! ... Cast
-
-## What is Cast?
-
-Cast is a library to convert between different go types in a consistent and easy way.
-
-Cast provides simple functions to easily convert a number to a string, an
-interface into a bool, etc. Cast does this intelligently when an obvious
-conversion is possible. It doesn’t make any attempts to guess what you meant,
-for example you can only convert a string to an int when it is a string
-representation of an int such as “8”. Cast was developed for use in
-[Hugo](http://hugo.spf13.com), a website engine which uses YAML, TOML or JSON
-for meta data.
-
-## Why use Cast?
-
-When working with dynamic data in Go you often need to cast or convert the data
-from one type into another. Cast goes beyond just using type assertion (though
-it uses that when possible) to provide a very straightforward and convenient
-library.
-
-If you are working with interfaces to handle things like dynamic content
-you’ll need an easy way to convert an interface into a given type. This
-is the library for you.
-
-If you are taking in data from YAML, TOML or JSON or other formats which lack
-full types, then Cast is the library for you.
-
-## Usage
-
-Cast provides a handful of To_____ methods. These methods will always return
-the desired type. **If input is provided that will not convert to that type, the
-0 or nil value for that type will be returned**.
-
-Cast also provides identical methods To_____E. These return the same result as
-the To_____ methods, plus an additional error which tells you if it successfully
-converted. Using these methods you can tell the difference between when the
-input matched the zero value or when the conversion failed and the zero value
-was returned.
-
-The following examples are merely a sample of what is available. Please review
-the code for a complete set.
-
-### Example ‘ToString’:
-
-    cast.ToString("mayonegg")         // "mayonegg"
-    cast.ToString(8)                  // "8"
-    cast.ToString(8.31)               // "8.31"
-    cast.ToString([]byte("one time")) // "one time"
-    cast.ToString(nil)                // ""
-
-	var foo interface{} = "one more time"
-    cast.ToString(foo)                // "one more time"
-
-
-### Example ‘ToInt’:
-
-    cast.ToInt(8)                  // 8
-    cast.ToInt(8.31)               // 8
-    cast.ToInt("8")                // 8
-    cast.ToInt(true)               // 1
-    cast.ToInt(false)              // 0
-
-	var eight interface{} = 8
-    cast.ToInt(eight)              // 8
-    cast.ToInt(nil)                // 0
-
diff --git a/vendor/github.com/spf13/cast/cast.go b/vendor/github.com/spf13/cast/cast.go
deleted file mode 100644
index 8b8c208..0000000
--- a/vendor/github.com/spf13/cast/cast.go
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright © 2014 Steve Francia <sp...@spf13.com>.
-//
-// Use of this source code is governed by an MIT-style
-// license that can be found in the LICENSE file.
-
-// Package cast provides easy and safe casting in Go.
-package cast
-
-import "time"
-
-// ToBool casts an interface to a bool type.
-func ToBool(i interface{}) bool {
-	v, _ := ToBoolE(i)
-	return v
-}
-
-// ToTime casts an interface to a time.Time type.
-func ToTime(i interface{}) time.Time {
-	v, _ := ToTimeE(i)
-	return v
-}
-
-// ToDuration casts an interface to a time.Duration type.
-func ToDuration(i interface{}) time.Duration {
-	v, _ := ToDurationE(i)
-	return v
-}
-
-// ToFloat64 casts an interface to a float64 type.
-func ToFloat64(i interface{}) float64 {
-	v, _ := ToFloat64E(i)
-	return v
-}
-
-// ToFloat32 casts an interface to a float32 type.
-func ToFloat32(i interface{}) float32 {
-	v, _ := ToFloat32E(i)
-	return v
-}
-
-// ToInt64 casts an interface to an int64 type.
-func ToInt64(i interface{}) int64 {
-	v, _ := ToInt64E(i)
-	return v
-}
-
-// ToInt32 casts an interface to an int32 type.
-func ToInt32(i interface{}) int32 {
-	v, _ := ToInt32E(i)
-	return v
-}
-
-// ToInt16 casts an interface to an int16 type.
-func ToInt16(i interface{}) int16 {
-	v, _ := ToInt16E(i)
-	return v
-}
-
-// ToInt8 casts an interface to an int8 type.
-func ToInt8(i interface{}) int8 {
-	v, _ := ToInt8E(i)
-	return v
-}
-
-// ToInt casts an interface to an int type.
-func ToInt(i interface{}) int {
-	v, _ := ToIntE(i)
-	return v
-}
-
-// ToUint casts an interface to a uint type.
-func ToUint(i interface{}) uint {
-	v, _ := ToUintE(i)
-	return v
-}
-
-// ToUint64 casts an interface to a uint64 type.
-func ToUint64(i interface{}) uint64 {
-	v, _ := ToUint64E(i)
-	return v
-}
-
-// ToUint32 casts an interface to a uint32 type.
-func ToUint32(i interface{}) uint32 {
-	v, _ := ToUint32E(i)
-	return v
-}
-
-// ToUint16 casts an interface to a uint16 type.
-func ToUint16(i interface{}) uint16 {
-	v, _ := ToUint16E(i)
-	return v
-}
-
-// ToUint8 casts an interface to a uint8 type.
-func ToUint8(i interface{}) uint8 {
-	v, _ := ToUint8E(i)
-	return v
-}
-
-// ToString casts an interface to a string type.
-func ToString(i interface{}) string {
-	v, _ := ToStringE(i)
-	return v
-}
-
-// ToStringMapString casts an interface to a map[string]string type.
-func ToStringMapString(i interface{}) map[string]string {
-	v, _ := ToStringMapStringE(i)
-	return v
-}
-
-// ToStringMapStringSlice casts an interface to a map[string][]string type.
-func ToStringMapStringSlice(i interface{}) map[string][]string {
-	v, _ := ToStringMapStringSliceE(i)
-	return v
-}
-
-// ToStringMapBool casts an interface to a map[string]bool type.
-func ToStringMapBool(i interface{}) map[string]bool {
-	v, _ := ToStringMapBoolE(i)
-	return v
-}
-
-// ToStringMap casts an interface to a map[string]interface{} type.
-func ToStringMap(i interface{}) map[string]interface{} {
-	v, _ := ToStringMapE(i)
-	return v
-}
-
-// ToSlice casts an interface to a []interface{} type.
-func ToSlice(i interface{}) []interface{} {
-	v, _ := ToSliceE(i)
-	return v
-}
-
-// ToBoolSlice casts an interface to a []bool type.
-func ToBoolSlice(i interface{}) []bool {
-	v, _ := ToBoolSliceE(i)
-	return v
-}
-
-// ToStringSlice casts an interface to a []string type.
-func ToStringSlice(i interface{}) []string {
-	v, _ := ToStringSliceE(i)
-	return v
-}
-
-// ToIntSlice casts an interface to a []int type.
-func ToIntSlice(i interface{}) []int {
-	v, _ := ToIntSliceE(i)
-	return v
-}
-
-// ToDurationSlice casts an interface to a []time.Duration type.
-func ToDurationSlice(i interface{}) []time.Duration {
-	v, _ := ToDurationSliceE(i)
-	return v
-}
diff --git a/vendor/github.com/spf13/cast/cast_test.go b/vendor/github.com/spf13/cast/cast_test.go
deleted file mode 100644
index d9b0b01..0000000
--- a/vendor/github.com/spf13/cast/cast_test.go
+++ /dev/null
@@ -1,1208 +0,0 @@
-// Copyright © 2014 Steve Francia <sp...@spf13.com>.
-//
-// Use of this source code is governed by an MIT-style
-// license that can be found in the LICENSE file.
-
-package cast
-
-import (
-	"fmt"
-	"html/template"
-	"testing"
-	"time"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestToUintE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect uint
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{int(-8), 0, true},
-		{int8(-8), 0, true},
-		{int16(-8), 0, true},
-		{int32(-8), 0, true},
-		{int64(-8), 0, true},
-		{float32(-8.31), 0, true},
-		{float64(-8.31), 0, true},
-		{"-8", 0, true},
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToUintE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test:
-		v = ToUint(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToUint64E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect uint64
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{int(-8), 0, true},
-		{int8(-8), 0, true},
-		{int16(-8), 0, true},
-		{int32(-8), 0, true},
-		{int64(-8), 0, true},
-		{float32(-8.31), 0, true},
-		{float64(-8.31), 0, true},
-		{"-8", 0, true},
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToUint64E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test:
-		v = ToUint64(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToUint32E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect uint32
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		{int(-8), 0, true},
-		{int8(-8), 0, true},
-		{int16(-8), 0, true},
-		{int32(-8), 0, true},
-		{int64(-8), 0, true},
-		{float32(-8.31), 0, true},
-		{float64(-8.31), 0, true},
-		{"-8", 0, true},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToUint32E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test:
-		v = ToUint32(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToUint16E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect uint16
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{int(-8), 0, true},
-		{int8(-8), 0, true},
-		{int16(-8), 0, true},
-		{int32(-8), 0, true},
-		{int64(-8), 0, true},
-		{float32(-8.31), 0, true},
-		{float64(-8.31), 0, true},
-		{"-8", 0, true},
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToUint16E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToUint16(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToUint8E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect uint8
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{int(-8), 0, true},
-		{int8(-8), 0, true},
-		{int16(-8), 0, true},
-		{int32(-8), 0, true},
-		{int64(-8), 0, true},
-		{float32(-8.31), 0, true},
-		{float64(-8.31), 0, true},
-		{"-8", 0, true},
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToUint8E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToUint8(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToIntE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect int
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToIntE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToInt(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToInt64E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect int64
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToInt64E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToInt64(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToInt32E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect int32
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToInt32E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToInt32(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToInt16E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect int16
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToInt16E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToInt16(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToInt8E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect int8
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8, false},
-		{float64(8.31), 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		{"8", 8, false},
-		{nil, 0, false},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToInt8E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToInt8(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToFloat64E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect float64
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8), 8, false},
-		{float64(8.31), 8.31, false},
-		{"8", 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToFloat64E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToFloat64(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToFloat32E(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect float32
-		iserr  bool
-	}{
-		{int(8), 8, false},
-		{int8(8), 8, false},
-		{int16(8), 8, false},
-		{int32(8), 8, false},
-		{int64(8), 8, false},
-		{uint(8), 8, false},
-		{uint8(8), 8, false},
-		{uint16(8), 8, false},
-		{uint32(8), 8, false},
-		{uint64(8), 8, false},
-		{float32(8.31), 8.31, false},
-		{float64(8.31), 8.31, false},
-		{"8", 8, false},
-		{true, 1, false},
-		{false, 0, false},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToFloat32E(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToFloat32(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToStringE(t *testing.T) {
-	type Key struct {
-		k string
-	}
-	key := &Key{"foo"}
-
-	tests := []struct {
-		input  interface{}
-		expect string
-		iserr  bool
-	}{
-		{int(8), "8", false},
-		{int8(8), "8", false},
-		{int16(8), "8", false},
-		{int32(8), "8", false},
-		{int64(8), "8", false},
-		{uint(8), "8", false},
-		{uint8(8), "8", false},
-		{uint16(8), "8", false},
-		{uint32(8), "8", false},
-		{uint64(8), "8", false},
-		{float32(8.31), "8.31", false},
-		{float64(8.31), "8.31", false},
-		{true, "true", false},
-		{false, "false", false},
-		{nil, "", false},
-		{[]byte("one time"), "one time", false},
-		{"one more time", "one more time", false},
-		{template.HTML("one time"), "one time", false},
-		{template.URL("http://somehost.foo"), "http://somehost.foo", false},
-		{template.JS("(1+2)"), "(1+2)", false},
-		{template.CSS("a"), "a", false},
-		{template.HTMLAttr("a"), "a", false},
-		// errors
-		{testing.T{}, "", true},
-		{key, "", true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToStringE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToString(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-type foo struct {
-	val string
-}
-
-func (x foo) String() string {
-	return x.val
-}
-
-func TestStringerToString(t *testing.T) {
-	var x foo
-	x.val = "bar"
-	assert.Equal(t, "bar", ToString(x))
-}
-
-type fu struct {
-	val string
-}
-
-func (x fu) Error() string {
-	return x.val
-}
-
-func TestErrorToString(t *testing.T) {
-	var x fu
-	x.val = "bar"
-	assert.Equal(t, "bar", ToString(x))
-}
-
-func TestStringMapStringSliceE(t *testing.T) {
-	// ToStringMapString inputs/outputs
-	var stringMapString = map[string]string{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
-	var stringMapInterface = map[string]interface{}{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
-	var interfaceMapString = map[interface{}]string{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
-	var interfaceMapInterface = map[interface{}]interface{}{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
-
-	// ToStringMapStringSlice inputs/outputs
-	var stringMapStringSlice = map[string][]string{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
-	var stringMapInterfaceSlice = map[string][]interface{}{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
-	var stringMapInterfaceInterfaceSlice = map[string]interface{}{"key 1": []interface{}{"value 1", "value 2", "value 3"}, "key 2": []interface{}{"value 1", "value 2", "value 3"}, "key 3": []interface{}{"value 1", "value 2", "value 3"}}
-	var stringMapStringSingleSliceFieldsResult = map[string][]string{"key 1": {"value", "1"}, "key 2": {"value", "2"}, "key 3": {"value", "3"}}
-	var interfaceMapStringSlice = map[interface{}][]string{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
-	var interfaceMapInterfaceSlice = map[interface{}][]interface{}{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
-
-	var stringMapStringSliceMultiple = map[string][]string{"key 1": {"value 1", "value 2", "value 3"}, "key 2": {"value 1", "value 2", "value 3"}, "key 3": {"value 1", "value 2", "value 3"}}
-	var stringMapStringSliceSingle = map[string][]string{"key 1": {"value 1"}, "key 2": {"value 2"}, "key 3": {"value 3"}}
-
-	var stringMapInterface1 = map[string]interface{}{"key 1": []string{"value 1"}, "key 2": []string{"value 2"}}
-	var stringMapInterfaceResult1 = map[string][]string{"key 1": {"value 1"}, "key 2": {"value 2"}}
-
-	var jsonStringMapString = `{"key 1": "value 1", "key 2": "value 2"}`
-	var jsonStringMapStringArray = `{"key 1": ["value 1"], "key 2": ["value 2", "value 3"]}`
-	var jsonStringMapStringArrayResult = map[string][]string{"key 1": {"value 1"}, "key 2": {"value 2", "value 3"}}
-
-	type Key struct {
-		k string
-	}
-
-	tests := []struct {
-		input  interface{}
-		expect map[string][]string
-		iserr  bool
-	}{
-		{stringMapStringSlice, stringMapStringSlice, false},
-		{stringMapInterfaceSlice, stringMapStringSlice, false},
-		{stringMapInterfaceInterfaceSlice, stringMapStringSlice, false},
-		{stringMapStringSliceMultiple, stringMapStringSlice, false},
-		{stringMapStringSliceMultiple, stringMapStringSlice, false},
-		{stringMapString, stringMapStringSliceSingle, false},
-		{stringMapInterface, stringMapStringSliceSingle, false},
-		{stringMapInterface1, stringMapInterfaceResult1, false},
-		{interfaceMapStringSlice, stringMapStringSlice, false},
-		{interfaceMapInterfaceSlice, stringMapStringSlice, false},
-		{interfaceMapString, stringMapStringSingleSliceFieldsResult, false},
-		{interfaceMapInterface, stringMapStringSingleSliceFieldsResult, false},
-		{jsonStringMapStringArray, jsonStringMapStringArrayResult, false},
-
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-		{map[interface{}]interface{}{"foo": testing.T{}}, nil, true},
-		{map[interface{}]interface{}{Key{"foo"}: "bar"}, nil, true}, // ToStringE(Key{"foo"}) should fail
-		{jsonStringMapString, nil, true},
-		{"", nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToStringMapStringSliceE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToStringMapStringSlice(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToStringMapE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect map[string]interface{}
-		iserr  bool
-	}{
-		{map[interface{}]interface{}{"tag": "tags", "group": "groups"}, map[string]interface{}{"tag": "tags", "group": "groups"}, false},
-		{map[string]interface{}{"tag": "tags", "group": "groups"}, map[string]interface{}{"tag": "tags", "group": "groups"}, false},
-		{`{"tag": "tags", "group": "groups"}`, map[string]interface{}{"tag": "tags", "group": "groups"}, false},
-		{`{"tag": "tags", "group": true}`, map[string]interface{}{"tag": "tags", "group": true}, false},
-
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-		{"", nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToStringMapE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToStringMap(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToStringMapBoolE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect map[string]bool
-		iserr  bool
-	}{
-		{map[interface{}]interface{}{"v1": true, "v2": false}, map[string]bool{"v1": true, "v2": false}, false},
-		{map[string]interface{}{"v1": true, "v2": false}, map[string]bool{"v1": true, "v2": false}, false},
-		{map[string]bool{"v1": true, "v2": false}, map[string]bool{"v1": true, "v2": false}, false},
-		{`{"v1": true, "v2": false}`, map[string]bool{"v1": true, "v2": false}, false},
-
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-		{"", nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToStringMapBoolE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToStringMapBool(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToStringMapStringE(t *testing.T) {
-	var stringMapString = map[string]string{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
-	var stringMapInterface = map[string]interface{}{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
-	var interfaceMapString = map[interface{}]string{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
-	var interfaceMapInterface = map[interface{}]interface{}{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}
-	var jsonString = `{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"}`
-	var invalidJsonString = `{"key 1": "value 1", "key 2": "value 2", "key 3": "value 3"`
-	var emptyString = ""
-
-	tests := []struct {
-		input  interface{}
-		expect map[string]string
-		iserr  bool
-	}{
-		{stringMapString, stringMapString, false},
-		{stringMapInterface, stringMapString, false},
-		{interfaceMapString, stringMapString, false},
-		{interfaceMapInterface, stringMapString, false},
-		{jsonString, stringMapString, false},
-
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-		{invalidJsonString, nil, true},
-		{emptyString, nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToStringMapStringE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToStringMapString(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToBoolSliceE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect []bool
-		iserr  bool
-	}{
-		{[]bool{true, false, true}, []bool{true, false, true}, false},
-		{[]interface{}{true, false, true}, []bool{true, false, true}, false},
-		{[]int{1, 0, 1}, []bool{true, false, true}, false},
-		{[]string{"true", "false", "true"}, []bool{true, false, true}, false},
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-		{[]string{"foo", "bar"}, nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToBoolSliceE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToBoolSlice(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToIntSliceE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect []int
-		iserr  bool
-	}{
-		{[]int{1, 3}, []int{1, 3}, false},
-		{[]interface{}{1.2, 3.2}, []int{1, 3}, false},
-		{[]string{"2", "3"}, []int{2, 3}, false},
-		{[2]string{"2", "3"}, []int{2, 3}, false},
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-		{[]string{"foo", "bar"}, nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToIntSliceE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToIntSlice(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToSliceE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect []interface{}
-		iserr  bool
-	}{
-		{[]interface{}{1, 3}, []interface{}{1, 3}, false},
-		{[]map[string]interface{}{{"k1": 1}, {"k2": 2}}, []interface{}{map[string]interface{}{"k1": 1}, map[string]interface{}{"k2": 2}}, false},
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToSliceE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToSlice(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToStringSliceE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect []string
-		iserr  bool
-	}{
-		{[]string{"a", "b"}, []string{"a", "b"}, false},
-		{[]interface{}{1, 3}, []string{"1", "3"}, false},
-		{interface{}(1), []string{"1"}, false},
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToStringSliceE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToStringSlice(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToDurationSliceE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect []time.Duration
-		iserr  bool
-	}{
-		{[]string{"1s", "1m"}, []time.Duration{time.Second, time.Minute}, false},
-		{[]int{1, 2}, []time.Duration{1, 2}, false},
-		{[]interface{}{1, 3}, []time.Duration{1, 3}, false},
-		{[]time.Duration{1, 3}, []time.Duration{1, 3}, false},
-
-		// errors
-		{nil, nil, true},
-		{testing.T{}, nil, true},
-		{[]string{"invalid"}, nil, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToDurationSliceE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToDurationSlice(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func TestToBoolE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect bool
-		iserr  bool
-	}{
-		{0, false, false},
-		{nil, false, false},
-		{"false", false, false},
-		{"FALSE", false, false},
-		{"False", false, false},
-		{"f", false, false},
-		{"F", false, false},
-		{false, false, false},
-
-		{"true", true, false},
-		{"TRUE", true, false},
-		{"True", true, false},
-		{"t", true, false},
-		{"T", true, false},
-		{1, true, false},
-		{true, true, false},
-		{-1, true, false},
-
-		// errors
-		{"test", false, true},
-		{testing.T{}, false, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToBoolE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToBool(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
-
-func BenchmarkTooBool(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		if !ToBool(true) {
-			b.Fatal("ToBool returned false")
-		}
-	}
-}
-
-func TestIndirectPointers(t *testing.T) {
-	x := 13
-	y := &x
-	z := &y
-
-	assert.Equal(t, ToInt(y), 13)
-	assert.Equal(t, ToInt(z), 13)
-}
-
-func TestToTimeEE(t *testing.T) {
-	tests := []struct {
-		input  interface{}
-		expect time.Time
-		iserr  bool
-	}{
-		{"2009-11-10 23:00:00 +0000 UTC", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},   // Time.String()
-		{"Tue Nov 10 23:00:00 2009", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},        // ANSIC
-		{"Tue Nov 10 23:00:00 UTC 2009", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},    // UnixDate
-		{"Tue Nov 10 23:00:00 +0000 2009", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},  // RubyDate
-		{"10 Nov 09 23:00 UTC", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},             // RFC822
-		{"10 Nov 09 23:00 +0000", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},           // RFC822Z
-		{"Tuesday, 10-Nov-09 23:00:00 UTC", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC850
-		{"Tue, 10 Nov 2009 23:00:00 UTC", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},   // RFC1123
-		{"Tue, 10 Nov 2009 23:00:00 +0000", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false}, // RFC1123Z
-		{"2009-11-10T23:00:00Z", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},            // RFC3339
-		{"2009-11-10T23:00:00Z", time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC), false},            // RFC3339Nano
-		{"11:00PM", time.Date(0, 1, 1, 23, 0, 0, 0, time.UTC), false},                              // Kitchen
-		{"Nov 10 23:00:00", time.Date(0, 11, 10, 23, 0, 0, 0, time.UTC), false},                    // Stamp
-		{"Nov 10 23:00:00.000", time.Date(0, 11, 10, 23, 0, 0, 0, time.UTC), false},                // StampMilli
-		{"Nov 10 23:00:00.000000", time.Date(0, 11, 10, 23, 0, 0, 0, time.UTC), false},             // StampMicro
-		{"Nov 10 23:00:00.000000000", time.Date(0, 11, 10, 23, 0, 0, 0, time.UTC), false},          // StampNano
-		{"2016-03-06 15:28:01-00:00", time.Date(2016, 3, 6, 15, 28, 1, 0, time.UTC), false},        // RFC3339 without T
-		{"2016-03-06 15:28:01", time.Date(2016, 3, 6, 15, 28, 1, 0, time.UTC), false},
-		{"2016-03-06 15:28:01 -0000", time.Date(2016, 3, 6, 15, 28, 1, 0, time.UTC), false},
-		{"2016-03-06 15:28:01 -00:00", time.Date(2016, 3, 6, 15, 28, 1, 0, time.UTC), false},
-		{"2006-01-02", time.Date(2006, 1, 2, 0, 0, 0, 0, time.UTC), false},
-		{"02 Jan 2006", time.Date(2006, 1, 2, 0, 0, 0, 0, time.UTC), false},
-		{1472574600, time.Date(2016, 8, 30, 16, 30, 0, 0, time.UTC), false},
-		{int(1482597504), time.Date(2016, 12, 24, 16, 38, 24, 0, time.UTC), false},
-		{int64(1234567890), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
-		{int32(1234567890), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
-		{uint(1482597504), time.Date(2016, 12, 24, 16, 38, 24, 0, time.UTC), false},
-		{uint64(1234567890), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
-		{uint32(1234567890), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
-		{time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), time.Date(2009, 2, 13, 23, 31, 30, 0, time.UTC), false},
-		// errors
-		{"2006", time.Time{}, true},
-		{testing.T{}, time.Time{}, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToTimeE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v.UTC(), errmsg)
-
-		// Non-E test
-		v = ToTime(test.input)
-		assert.Equal(t, test.expect, v.UTC(), errmsg)
-	}
-}
-
-func TestToDurationE(t *testing.T) {
-	var td time.Duration = 5
-
-	tests := []struct {
-		input  interface{}
-		expect time.Duration
-		iserr  bool
-	}{
-		{time.Duration(5), td, false},
-		{int(5), td, false},
-		{int64(5), td, false},
-		{int32(5), td, false},
-		{int16(5), td, false},
-		{int8(5), td, false},
-		{uint(5), td, false},
-		{uint64(5), td, false},
-		{uint32(5), td, false},
-		{uint16(5), td, false},
-		{uint8(5), td, false},
-		{float64(5), td, false},
-		{float32(5), td, false},
-		{string("5"), td, false},
-		{string("5ns"), td, false},
-		{string("5us"), time.Microsecond * td, false},
-		{string("5µs"), time.Microsecond * td, false},
-		{string("5ms"), time.Millisecond * td, false},
-		{string("5s"), time.Second * td, false},
-		{string("5m"), time.Minute * td, false},
-		{string("5h"), time.Hour * td, false},
-		// errors
-		{"test", 0, true},
-		{testing.T{}, 0, true},
-	}
-
-	for i, test := range tests {
-		errmsg := fmt.Sprintf("i = %d", i) // assert helper message
-
-		v, err := ToDurationE(test.input)
-		if test.iserr {
-			assert.Error(t, err, errmsg)
-			continue
-		}
-
-		assert.NoError(t, err, errmsg)
-		assert.Equal(t, test.expect, v, errmsg)
-
-		// Non-E test
-		v = ToDuration(test.input)
-		assert.Equal(t, test.expect, v, errmsg)
-	}
-}
diff --git a/vendor/github.com/spf13/cast/caste.go b/vendor/github.com/spf13/cast/caste.go
deleted file mode 100644
index 4fe1928..0000000
--- a/vendor/github.com/spf13/cast/caste.go
+++ /dev/null
@@ -1,1166 +0,0 @@
-// Copyright © 2014 Steve Francia <sp...@spf13.com>.
-//
-// Use of this source code is governed by an MIT-style
-// license that can be found in the LICENSE file.
-
-package cast
-
-import (
-	"encoding/json"
-	"errors"
-	"fmt"
-	"html/template"
-	"reflect"
-	"strconv"
-	"strings"
-	"time"
-)
-
-var errNegativeNotAllowed = errors.New("unable to cast negative value")
-
-// ToTimeE casts an interface to a time.Time type.
-func ToTimeE(i interface{}) (tim time.Time, err error) {
-	i = indirect(i)
-
-	switch v := i.(type) {
-	case time.Time:
-		return v, nil
-	case string:
-		return StringToDate(v)
-	case int:
-		return time.Unix(int64(v), 0), nil
-	case int64:
-		return time.Unix(v, 0), nil
-	case int32:
-		return time.Unix(int64(v), 0), nil
-	case uint:
-		return time.Unix(int64(v), 0), nil
-	case uint64:
-		return time.Unix(int64(v), 0), nil
-	case uint32:
-		return time.Unix(int64(v), 0), nil
-	default:
-		return time.Time{}, fmt.Errorf("unable to cast %#v of type %T to Time", i, i)
-	}
-}
-
-// ToDurationE casts an interface to a time.Duration type.
-func ToDurationE(i interface{}) (d time.Duration, err error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case time.Duration:
-		return s, nil
-	case int, int64, int32, int16, int8, uint, uint64, uint32, uint16, uint8:
-		d = time.Duration(ToInt64(s))
-		return
-	case float32, float64:
-		d = time.Duration(ToFloat64(s))
-		return
-	case string:
-		if strings.ContainsAny(s, "nsuµmh") {
-			d, err = time.ParseDuration(s)
-		} else {
-			d, err = time.ParseDuration(s + "ns")
-		}
-		return
-	default:
-		err = fmt.Errorf("unable to cast %#v of type %T to Duration", i, i)
-		return
-	}
-}
-
-// ToBoolE casts an interface to a bool type.
-func ToBoolE(i interface{}) (bool, error) {
-	i = indirect(i)
-
-	switch b := i.(type) {
-	case bool:
-		return b, nil
-	case nil:
-		return false, nil
-	case int:
-		if i.(int) != 0 {
-			return true, nil
-		}
-		return false, nil
-	case string:
-		return strconv.ParseBool(i.(string))
-	default:
-		return false, fmt.Errorf("unable to cast %#v of type %T to bool", i, i)
-	}
-}
-
-// ToFloat64E casts an interface to a float64 type.
-func ToFloat64E(i interface{}) (float64, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case float64:
-		return s, nil
-	case float32:
-		return float64(s), nil
-	case int:
-		return float64(s), nil
-	case int64:
-		return float64(s), nil
-	case int32:
-		return float64(s), nil
-	case int16:
-		return float64(s), nil
-	case int8:
-		return float64(s), nil
-	case uint:
-		return float64(s), nil
-	case uint64:
-		return float64(s), nil
-	case uint32:
-		return float64(s), nil
-	case uint16:
-		return float64(s), nil
-	case uint8:
-		return float64(s), nil
-	case string:
-		v, err := strconv.ParseFloat(s, 64)
-		if err == nil {
-			return v, nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v of type %T to float64", i, i)
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to float64", i, i)
-	}
-}
-
-// ToFloat32E casts an interface to a float32 type.
-func ToFloat32E(i interface{}) (float32, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case float64:
-		return float32(s), nil
-	case float32:
-		return s, nil
-	case int:
-		return float32(s), nil
-	case int64:
-		return float32(s), nil
-	case int32:
-		return float32(s), nil
-	case int16:
-		return float32(s), nil
-	case int8:
-		return float32(s), nil
-	case uint:
-		return float32(s), nil
-	case uint64:
-		return float32(s), nil
-	case uint32:
-		return float32(s), nil
-	case uint16:
-		return float32(s), nil
-	case uint8:
-		return float32(s), nil
-	case string:
-		v, err := strconv.ParseFloat(s, 32)
-		if err == nil {
-			return float32(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v of type %T to float32", i, i)
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to float32", i, i)
-	}
-}
-
-// ToInt64E casts an interface to an int64 type.
-func ToInt64E(i interface{}) (int64, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case int:
-		return int64(s), nil
-	case int64:
-		return s, nil
-	case int32:
-		return int64(s), nil
-	case int16:
-		return int64(s), nil
-	case int8:
-		return int64(s), nil
-	case uint:
-		return int64(s), nil
-	case uint64:
-		return int64(s), nil
-	case uint32:
-		return int64(s), nil
-	case uint16:
-		return int64(s), nil
-	case uint8:
-		return int64(s), nil
-	case float64:
-		return int64(s), nil
-	case float32:
-		return int64(s), nil
-	case string:
-		v, err := strconv.ParseInt(s, 0, 0)
-		if err == nil {
-			return v, nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int64", i, i)
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int64", i, i)
-	}
-}
-
-// ToInt32E casts an interface to an int32 type.
-func ToInt32E(i interface{}) (int32, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case int:
-		return int32(s), nil
-	case int64:
-		return int32(s), nil
-	case int32:
-		return s, nil
-	case int16:
-		return int32(s), nil
-	case int8:
-		return int32(s), nil
-	case uint:
-		return int32(s), nil
-	case uint64:
-		return int32(s), nil
-	case uint32:
-		return int32(s), nil
-	case uint16:
-		return int32(s), nil
-	case uint8:
-		return int32(s), nil
-	case float64:
-		return int32(s), nil
-	case float32:
-		return int32(s), nil
-	case string:
-		v, err := strconv.ParseInt(s, 0, 0)
-		if err == nil {
-			return int32(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int32", i, i)
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int32", i, i)
-	}
-}
-
-// ToInt16E casts an interface to an int16 type.
-func ToInt16E(i interface{}) (int16, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case int:
-		return int16(s), nil
-	case int64:
-		return int16(s), nil
-	case int32:
-		return int16(s), nil
-	case int16:
-		return s, nil
-	case int8:
-		return int16(s), nil
-	case uint:
-		return int16(s), nil
-	case uint64:
-		return int16(s), nil
-	case uint32:
-		return int16(s), nil
-	case uint16:
-		return int16(s), nil
-	case uint8:
-		return int16(s), nil
-	case float64:
-		return int16(s), nil
-	case float32:
-		return int16(s), nil
-	case string:
-		v, err := strconv.ParseInt(s, 0, 0)
-		if err == nil {
-			return int16(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int16", i, i)
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int16", i, i)
-	}
-}
-
-// ToInt8E casts an interface to an int8 type.
-func ToInt8E(i interface{}) (int8, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case int:
-		return int8(s), nil
-	case int64:
-		return int8(s), nil
-	case int32:
-		return int8(s), nil
-	case int16:
-		return int8(s), nil
-	case int8:
-		return s, nil
-	case uint:
-		return int8(s), nil
-	case uint64:
-		return int8(s), nil
-	case uint32:
-		return int8(s), nil
-	case uint16:
-		return int8(s), nil
-	case uint8:
-		return int8(s), nil
-	case float64:
-		return int8(s), nil
-	case float32:
-		return int8(s), nil
-	case string:
-		v, err := strconv.ParseInt(s, 0, 0)
-		if err == nil {
-			return int8(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int8", i, i)
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int8", i, i)
-	}
-}
-
-// ToIntE casts an interface to an int type.
-func ToIntE(i interface{}) (int, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case int:
-		return s, nil
-	case int64:
-		return int(s), nil
-	case int32:
-		return int(s), nil
-	case int16:
-		return int(s), nil
-	case int8:
-		return int(s), nil
-	case uint:
-		return int(s), nil
-	case uint64:
-		return int(s), nil
-	case uint32:
-		return int(s), nil
-	case uint16:
-		return int(s), nil
-	case uint8:
-		return int(s), nil
-	case float64:
-		return int(s), nil
-	case float32:
-		return int(s), nil
-	case string:
-		v, err := strconv.ParseInt(s, 0, 0)
-		if err == nil {
-			return int(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int", i, i)
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to int", i, i)
-	}
-}
-
-// ToUintE casts an interface to a uint type.
-func ToUintE(i interface{}) (uint, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case string:
-		v, err := strconv.ParseUint(s, 0, 0)
-		if err == nil {
-			return uint(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v to uint: %s", i, err)
-	case int:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint(s), nil
-	case int64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint(s), nil
-	case int32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint(s), nil
-	case int16:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint(s), nil
-	case int8:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint(s), nil
-	case uint:
-		return s, nil
-	case uint64:
-		return uint(s), nil
-	case uint32:
-		return uint(s), nil
-	case uint16:
-		return uint(s), nil
-	case uint8:
-		return uint(s), nil
-	case float64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint(s), nil
-	case float32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint(s), nil
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to uint", i, i)
-	}
-}
-
-// ToUint64E casts an interface to a uint64 type.
-func ToUint64E(i interface{}) (uint64, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case string:
-		v, err := strconv.ParseUint(s, 0, 64)
-		if err == nil {
-			return v, nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v to uint64: %s", i, err)
-	case int:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint64(s), nil
-	case int64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint64(s), nil
-	case int32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint64(s), nil
-	case int16:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint64(s), nil
-	case int8:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint64(s), nil
-	case uint:
-		return uint64(s), nil
-	case uint64:
-		return s, nil
-	case uint32:
-		return uint64(s), nil
-	case uint16:
-		return uint64(s), nil
-	case uint8:
-		return uint64(s), nil
-	case float32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint64(s), nil
-	case float64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint64(s), nil
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to uint64", i, i)
-	}
-}
-
-// ToUint32E casts an interface to a uint32 type.
-func ToUint32E(i interface{}) (uint32, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case string:
-		v, err := strconv.ParseUint(s, 0, 32)
-		if err == nil {
-			return uint32(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v to uint32: %s", i, err)
-	case int:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint32(s), nil
-	case int64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint32(s), nil
-	case int32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint32(s), nil
-	case int16:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint32(s), nil
-	case int8:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint32(s), nil
-	case uint:
-		return uint32(s), nil
-	case uint64:
-		return uint32(s), nil
-	case uint32:
-		return s, nil
-	case uint16:
-		return uint32(s), nil
-	case uint8:
-		return uint32(s), nil
-	case float64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint32(s), nil
-	case float32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint32(s), nil
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to uint32", i, i)
-	}
-}
-
-// ToUint16E casts an interface to a uint16 type.
-func ToUint16E(i interface{}) (uint16, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case string:
-		v, err := strconv.ParseUint(s, 0, 16)
-		if err == nil {
-			return uint16(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v to uint16: %s", i, err)
-	case int:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint16(s), nil
-	case int64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint16(s), nil
-	case int32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint16(s), nil
-	case int16:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint16(s), nil
-	case int8:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint16(s), nil
-	case uint:
-		return uint16(s), nil
-	case uint64:
-		return uint16(s), nil
-	case uint32:
-		return uint16(s), nil
-	case uint16:
-		return s, nil
-	case uint8:
-		return uint16(s), nil
-	case float64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint16(s), nil
-	case float32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint16(s), nil
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to uint16", i, i)
-	}
-}
-
-// ToUint8E casts an interface to a uint type.
-func ToUint8E(i interface{}) (uint8, error) {
-	i = indirect(i)
-
-	switch s := i.(type) {
-	case string:
-		v, err := strconv.ParseUint(s, 0, 8)
-		if err == nil {
-			return uint8(v), nil
-		}
-		return 0, fmt.Errorf("unable to cast %#v to uint8: %s", i, err)
-	case int:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint8(s), nil
-	case int64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint8(s), nil
-	case int32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint8(s), nil
-	case int16:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint8(s), nil
-	case int8:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint8(s), nil
-	case uint:
-		return uint8(s), nil
-	case uint64:
-		return uint8(s), nil
-	case uint32:
-		return uint8(s), nil
-	case uint16:
-		return uint8(s), nil
-	case uint8:
-		return s, nil
-	case float64:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint8(s), nil
-	case float32:
-		if s < 0 {
-			return 0, errNegativeNotAllowed
-		}
-		return uint8(s), nil
-	case bool:
-		if s {
-			return 1, nil
-		}
-		return 0, nil
-	case nil:
-		return 0, nil
-	default:
-		return 0, fmt.Errorf("unable to cast %#v of type %T to uint8", i, i)
-	}
-}
-
-// From html/template/content.go
-// Copyright 2011 The Go Authors. All rights reserved.
-// indirect returns the value, after dereferencing as many times
-// as necessary to reach the base type (or nil).
-func indirect(a interface{}) interface{} {
-	if a == nil {
-		return nil
-	}
-	if t := reflect.TypeOf(a); t.Kind() != reflect.Ptr {
-		// Avoid creating a reflect.Value if it's not a pointer.
-		return a
-	}
-	v := reflect.ValueOf(a)
-	for v.Kind() == reflect.Ptr && !v.IsNil() {
-		v = v.Elem()
-	}
-	return v.Interface()
-}
-
-// From html/template/content.go
-// Copyright 2011 The Go Authors. All rights reserved.
-// indirectToStringerOrError returns the value, after dereferencing as many times
-// as necessary to reach the base type (or nil) or an implementation of fmt.Stringer
-// or error,
-func indirectToStringerOrError(a interface{}) interface{} {
-	if a == nil {
-		return nil
-	}
-
-	var errorType = reflect.TypeOf((*error)(nil)).Elem()
-	var fmtStringerType = reflect.TypeOf((*fmt.Stringer)(nil)).Elem()
-
-	v := reflect.ValueOf(a)
-	for !v.Type().Implements(fmtStringerType) && !v.Type().Implements(errorType) && v.Kind() == reflect.Ptr && !v.IsNil() {
-		v = v.Elem()
-	}
-	return v.Interface()
-}
-
-// ToStringE casts an interface to a string type.
-func ToStringE(i interface{}) (string, error) {
-	i = indirectToStringerOrError(i)
-
-	switch s := i.(type) {
-	case string:
-		return s, nil
-	case bool:
-		return strconv.FormatBool(s), nil
-	case float64:
-		return strconv.FormatFloat(s, 'f', -1, 64), nil
-	case float32:
-		return strconv.FormatFloat(float64(s), 'f', -1, 32), nil
-	case int:
-		return strconv.Itoa(s), nil
-	case int64:
-		return strconv.FormatInt(s, 10), nil
-	case int32:
-		return strconv.Itoa(int(s)), nil
-	case int16:
-		return strconv.FormatInt(int64(s), 10), nil
-	case int8:
-		return strconv.FormatInt(int64(s), 10), nil
-	case uint:
-		return strconv.FormatInt(int64(s), 10), nil
-	case uint64:
-		return strconv.FormatInt(int64(s), 10), nil
-	case uint32:
-		return strconv.FormatInt(int64(s), 10), nil
-	case uint16:
-		return strconv.FormatInt(int64(s), 10), nil
-	case uint8:
-		return strconv.FormatInt(int64(s), 10), nil
-	case []byte:
-		return string(s), nil
-	case template.HTML:
-		return string(s), nil
-	case template.URL:
-		return string(s), nil
-	case template.JS:
-		return string(s), nil
-	case template.CSS:
-		return string(s), nil
-	case template.HTMLAttr:
-		return string(s), nil
-	case nil:
-		return "", nil
-	case fmt.Stringer:
-		return s.String(), nil
-	case error:
-		return s.Error(), nil
-	default:
-		return "", fmt.Errorf("unable to cast %#v of type %T to string", i, i)
-	}
-}
-
-// ToStringMapStringE casts an interface to a map[string]string type.
-func ToStringMapStringE(i interface{}) (map[string]string, error) {
-	var m = map[string]string{}
-
-	switch v := i.(type) {
-	case map[string]string:
-		return v, nil
-	case map[string]interface{}:
-		for k, val := range v {
-			m[ToString(k)] = ToString(val)
-		}
-		return m, nil
-	case map[interface{}]string:
-		for k, val := range v {
-			m[ToString(k)] = ToString(val)
-		}
-		return m, nil
-	case map[interface{}]interface{}:
-		for k, val := range v {
-			m[ToString(k)] = ToString(val)
-		}
-		return m, nil
-	case string:
-		err := jsonStringToObject(v, &m)
-		return m, err
-	default:
-		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]string", i, i)
-	}
-}
-
-// ToStringMapStringSliceE casts an interface to a map[string][]string type.
-func ToStringMapStringSliceE(i interface{}) (map[string][]string, error) {
-	var m = map[string][]string{}
-
-	switch v := i.(type) {
-	case map[string][]string:
-		return v, nil
-	case map[string][]interface{}:
-		for k, val := range v {
-			m[ToString(k)] = ToStringSlice(val)
-		}
-		return m, nil
-	case map[string]string:
-		for k, val := range v {
-			m[ToString(k)] = []string{val}
-		}
-	case map[string]interface{}:
-		for k, val := range v {
-			switch vt := val.(type) {
-			case []interface{}:
-				m[ToString(k)] = ToStringSlice(vt)
-			case []string:
-				m[ToString(k)] = vt
-			default:
-				m[ToString(k)] = []string{ToString(val)}
-			}
-		}
-		return m, nil
-	case map[interface{}][]string:
-		for k, val := range v {
-			m[ToString(k)] = ToStringSlice(val)
-		}
-		return m, nil
-	case map[interface{}]string:
-		for k, val := range v {
-			m[ToString(k)] = ToStringSlice(val)
-		}
-		return m, nil
-	case map[interface{}][]interface{}:
-		for k, val := range v {
-			m[ToString(k)] = ToStringSlice(val)
-		}
-		return m, nil
-	case map[interface{}]interface{}:
-		for k, val := range v {
-			key, err := ToStringE(k)
-			if err != nil {
-				return m, fmt.Errorf("unable to cast %#v of type %T to map[string][]string", i, i)
-			}
-			value, err := ToStringSliceE(val)
-			if err != nil {
-				return m, fmt.Errorf("unable to cast %#v of type %T to map[string][]string", i, i)
-			}
-			m[key] = value
-		}
-	case string:
-		err := jsonStringToObject(v, &m)
-		return m, err
-	default:
-		return m, fmt.Errorf("unable to cast %#v of type %T to map[string][]string", i, i)
-	}
-	return m, nil
-}
-
-// ToStringMapBoolE casts an interface to a map[string]bool type.
-func ToStringMapBoolE(i interface{}) (map[string]bool, error) {
-	var m = map[string]bool{}
-
-	switch v := i.(type) {
-	case map[interface{}]interface{}:
-		for k, val := range v {
-			m[ToString(k)] = ToBool(val)
-		}
-		return m, nil
-	case map[string]interface{}:
-		for k, val := range v {
-			m[ToString(k)] = ToBool(val)
-		}
-		return m, nil
-	case map[string]bool:
-		return v, nil
-	case string:
-		err := jsonStringToObject(v, &m)
-		return m, err
-	default:
-		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]bool", i, i)
-	}
-}
-
-// ToStringMapE casts an interface to a map[string]interface{} type.
-func ToStringMapE(i interface{}) (map[string]interface{}, error) {
-	var m = map[string]interface{}{}
-
-	switch v := i.(type) {
-	case map[interface{}]interface{}:
-		for k, val := range v {
-			m[ToString(k)] = val
-		}
-		return m, nil
-	case map[string]interface{}:
-		return v, nil
-	case string:
-		err := jsonStringToObject(v, &m)
-		return m, err
-	default:
-		return m, fmt.Errorf("unable to cast %#v of type %T to map[string]interface{}", i, i)
-	}
-}
-
-// ToSliceE casts an interface to a []interface{} type.
-func ToSliceE(i interface{}) ([]interface{}, error) {
-	var s []interface{}
-
-	switch v := i.(type) {
-	case []interface{}:
-		return append(s, v...), nil
-	case []map[string]interface{}:
-		for _, u := range v {
-			s = append(s, u)
-		}
-		return s, nil
-	default:
-		return s, fmt.Errorf("unable to cast %#v of type %T to []interface{}", i, i)
-	}
-}
-
-// ToBoolSliceE casts an interface to a []bool type.
-func ToBoolSliceE(i interface{}) ([]bool, error) {
-	if i == nil {
-		return []bool{}, fmt.Errorf("unable to cast %#v of type %T to []bool", i, i)
-	}
-
-	switch v := i.(type) {
-	case []bool:
-		return v, nil
-	}
-
-	kind := reflect.TypeOf(i).Kind()
-	switch kind {
-	case reflect.Slice, reflect.Array:
-		s := reflect.ValueOf(i)
-		a := make([]bool, s.Len())
-		for j := 0; j < s.Len(); j++ {
-			val, err := ToBoolE(s.Index(j).Interface())
-			if err != nil {
-				return []bool{}, fmt.Errorf("unable to cast %#v of type %T to []bool", i, i)
-			}
-			a[j] = val
-		}
-		return a, nil
-	default:
-		return []bool{}, fmt.Errorf("unable to cast %#v of type %T to []bool", i, i)
-	}
-}
-
-// ToStringSliceE casts an interface to a []string type.
-func ToStringSliceE(i interface{}) ([]string, error) {
-	var a []string
-
-	switch v := i.(type) {
-	case []interface{}:
-		for _, u := range v {
-			a = append(a, ToString(u))
-		}
-		return a, nil
-	case []string:
-		return v, nil
-	case string:
-		return strings.Fields(v), nil
-	case interface{}:
-		str, err := ToStringE(v)
-		if err != nil {
-			return a, fmt.Errorf("unable to cast %#v of type %T to []string", i, i)
-		}
-		return []string{str}, nil
-	default:
-		return a, fmt.Errorf("unable to cast %#v of type %T to []string", i, i)
-	}
-}
-
-// ToIntSliceE casts an interface to a []int type.
-func ToIntSliceE(i interface{}) ([]int, error) {
-	if i == nil {
-		return []int{}, fmt.Errorf("unable to cast %#v of type %T to []int", i, i)
-	}
-
-	switch v := i.(type) {
-	case []int:
-		return v, nil
-	}
-
-	kind := reflect.TypeOf(i).Kind()
-	switch kind {
-	case reflect.Slice, reflect.Array:
-		s := reflect.ValueOf(i)
-		a := make([]int, s.Len())
-		for j := 0; j < s.Len(); j++ {
-			val, err := ToIntE(s.Index(j).Interface())
-			if err != nil {
-				return []int{}, fmt.Errorf("unable to cast %#v of type %T to []int", i, i)
-			}
-			a[j] = val
-		}
-		return a, nil
-	default:
-		return []int{}, fmt.Errorf("unable to cast %#v of type %T to []int", i, i)
-	}
-}
-
-// ToDurationSliceE casts an interface to a []time.Duration type.
-func ToDurationSliceE(i interface{}) ([]time.Duration, error) {
-	if i == nil {
-		return []time.Duration{}, fmt.Errorf("unable to cast %#v of type %T to []time.Duration", i, i)
-	}
-
-	switch v := i.(type) {
-	case []time.Duration:
-		return v, nil
-	}
-
-	kind := reflect.TypeOf(i).Kind()
-	switch kind {
-	case reflect.Slice, reflect.Array:
-		s := reflect.ValueOf(i)
-		a := make([]time.Duration, s.Len())
-		for j := 0; j < s.Len(); j++ {
-			val, err := ToDurationE(s.Index(j).Interface())
-			if err != nil {
-				return []time.Duration{}, fmt.Errorf("unable to cast %#v of type %T to []time.Duration", i, i)
-			}
-			a[j] = val
-		}
-		return a, nil
-	default:
-		return []time.Duration{}, fmt.Errorf("unable to cast %#v of type %T to []time.Duration", i, i)
-	}
-}
-
-// StringToDate attempts to parse a string into a time.Time type using a
-// predefined list of formats.  If no suitable format is found, an error is
-// returned.
-func StringToDate(s string) (time.Time, error) {
-	return parseDateWith(s, []string{
-		time.RFC3339,
-		"2006-01-02T15:04:05", // iso8601 without timezone
-		time.RFC1123Z,
-		time.RFC1123,
-		time.RFC822Z,
-		time.RFC822,
-		time.RFC850,
-		time.ANSIC,
-		time.UnixDate,
-		time.RubyDate,
-		"2006-01-02 15:04:05.999999999 -0700 MST", // Time.String()
-		"2006-01-02",
-		"02 Jan 2006",
-		"2006-01-02 15:04:05 -07:00",
-		"2006-01-02 15:04:05 -0700",
-		"2006-01-02 15:04:05Z07:00", // RFC3339 without T
-		"2006-01-02 15:04:05",
-		time.Kitchen,
-		time.Stamp,
-		time.StampMilli,
-		time.StampMicro,
-		time.StampNano,
-	})
-}
-
-func parseDateWith(s string, dates []string) (d time.Time, e error) {
-	for _, dateType := range dates {
-		if d, e = time.Parse(dateType, s); e == nil {
-			return
-		}
-	}
-	return d, fmt.Errorf("unable to parse date: %s", s)
-}
-
-// jsonStringToObject attempts to unmarshall a string as JSON into
-// the object passed as pointer.
-func jsonStringToObject(s string, v interface{}) error {
-	data := []byte(s)
-	return json.Unmarshal(data, v)
-}
diff --git a/vendor/github.com/spf13/cobra/.gitignore b/vendor/github.com/spf13/cobra/.gitignore
deleted file mode 100644
index 1b8c7c2..0000000
--- a/vendor/github.com/spf13/cobra/.gitignore
+++ /dev/null
@@ -1,36 +0,0 @@
-# Compiled Object files, Static and Dynamic libs (Shared Objects)
-*.o
-*.a
-*.so
-
-# Folders
-_obj
-_test
-
-# Architecture specific extensions/prefixes
-*.[568vq]
-[568vq].out
-
-*.cgo1.go
-*.cgo2.c
-_cgo_defun.c
-_cgo_gotypes.go
-_cgo_export.*
-
-_testmain.go
-
-# Vim files https://github.com/github/gitignore/blob/master/Global/Vim.gitignore
-# swap
-[._]*.s[a-w][a-z]
-[._]s[a-w][a-z]
-# session
-Session.vim
-# temporary
-.netrwhist
-*~
-# auto-generated tag files
-tags
-
-*.exe
-
-cobra.test
diff --git a/vendor/github.com/spf13/cobra/.mailmap b/vendor/github.com/spf13/cobra/.mailmap
deleted file mode 100644
index 94ec530..0000000
--- a/vendor/github.com/spf13/cobra/.mailmap
+++ /dev/null
@@ -1,3 +0,0 @@
-Steve Francia <st...@gmail.com>
-Bjørn Erik Pedersen <bj...@gmail.com>
-Fabiano Franz <ff...@redhat.com>                   <co...@fabianofranz.com>
diff --git a/vendor/github.com/spf13/cobra/.travis.yml b/vendor/github.com/spf13/cobra/.travis.yml
deleted file mode 100644
index 5afcb20..0000000
--- a/vendor/github.com/spf13/cobra/.travis.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-language: go
-
-matrix:
-  include:
-    - go: 1.9.4
-    - go: 1.10.0
-    - go: tip
-  allow_failures:
-    - go: tip
-
-before_install:
-  - mkdir -p bin
-  - curl -Lso bin/shellcheck https://github.com/caarlos0/shellcheck-docker/releases/download/v0.4.3/shellcheck
-  - chmod +x bin/shellcheck
-script:
-  - PATH=$PATH:$PWD/bin go test -v ./...
-  - go build
-  - diff -u <(echo -n) <(gofmt -d -s .)
-  - if [ -z $NOVET ]; then
-      diff -u <(echo -n) <(go tool vet . 2>&1 | grep -vE 'ExampleCommand|bash_completions.*Fprint');
-    fi
diff --git a/vendor/github.com/spf13/cobra/LICENSE.txt b/vendor/github.com/spf13/cobra/LICENSE.txt
deleted file mode 100644
index 298f0e2..0000000
--- a/vendor/github.com/spf13/cobra/LICENSE.txt
+++ /dev/null
@@ -1,174 +0,0 @@
-                                Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
diff --git a/vendor/github.com/spf13/cobra/README.md b/vendor/github.com/spf13/cobra/README.md
deleted file mode 100644
index 851fcc0..0000000
--- a/vendor/github.com/spf13/cobra/README.md
+++ /dev/null
@@ -1,736 +0,0 @@
-![cobra logo](https://cloud.githubusercontent.com/assets/173412/10886352/ad566232-814f-11e5-9cd0-aa101788c117.png)
-
-Cobra is both a library for creating powerful modern CLI applications as well as a program to generate applications and command files.
-
-Many of the most widely used Go projects are built using Cobra including:
-
-* [Kubernetes](http://kubernetes.io/)
-* [Hugo](http://gohugo.io)
-* [rkt](https://github.com/coreos/rkt)
-* [etcd](https://github.com/coreos/etcd)
-* [Moby (former Docker)](https://github.com/moby/moby)
-* [Docker (distribution)](https://github.com/docker/distribution)
-* [OpenShift](https://www.openshift.com/)
-* [Delve](https://github.com/derekparker/delve)
-* [GopherJS](http://www.gopherjs.org/)
-* [CockroachDB](http://www.cockroachlabs.com/)
-* [Bleve](http://www.blevesearch.com/)
-* [ProjectAtomic (enterprise)](http://www.projectatomic.io/)
-* [GiantSwarm's swarm](https://github.com/giantswarm/cli)
-* [Nanobox](https://github.com/nanobox-io/nanobox)/[Nanopack](https://github.com/nanopack)
-* [rclone](http://rclone.org/)
-* [nehm](https://github.com/bogem/nehm)
-* [Pouch](https://github.com/alibaba/pouch)
-
-[![Build Status](https://travis-ci.org/spf13/cobra.svg "Travis CI status")](https://travis-ci.org/spf13/cobra)
-[![CircleCI status](https://circleci.com/gh/spf13/cobra.png?circle-token=:circle-token "CircleCI status")](https://circleci.com/gh/spf13/cobra)
-[![GoDoc](https://godoc.org/github.com/spf13/cobra?status.svg)](https://godoc.org/github.com/spf13/cobra)
-
-# Table of Contents
-
-- [Overview](#overview)
-- [Concepts](#concepts)
-  * [Commands](#commands)
-  * [Flags](#flags)
-- [Installing](#installing)
-- [Getting Started](#getting-started)
-  * [Using the Cobra Generator](#using-the-cobra-generator)
-  * [Using the Cobra Library](#using-the-cobra-library)
-  * [Working with Flags](#working-with-flags)
-  * [Positional and Custom Arguments](#positional-and-custom-arguments)
-  * [Example](#example)
-  * [Help Command](#help-command)
-  * [Usage Message](#usage-message)
-  * [PreRun and PostRun Hooks](#prerun-and-postrun-hooks)
-  * [Suggestions when "unknown command" happens](#suggestions-when-unknown-command-happens)
-  * [Generating documentation for your command](#generating-documentation-for-your-command)
-  * [Generating bash completions](#generating-bash-completions)
-- [Contributing](#contributing)
-- [License](#license)
-
-# Overview
-
-Cobra is a library providing a simple interface to create powerful modern CLI
-interfaces similar to git & go tools.
-
-Cobra is also an application that will generate your application scaffolding to rapidly
-develop a Cobra-based application.
-
-Cobra provides:
-* Easy subcommand-based CLIs: `app server`, `app fetch`, etc.
-* Fully POSIX-compliant flags (including short & long versions)
-* Nested subcommands
-* Global, local and cascading flags
-* Easy generation of applications & commands with `cobra init appname` & `cobra add cmdname`
-* Intelligent suggestions (`app srver`... did you mean `app server`?)
-* Automatic help generation for commands and flags
-* Automatic help flag recognition of `-h`, `--help`, etc.
-* Automatically generated bash autocomplete for your application
-* Automatically generated man pages for your application
-* Command aliases so you can change things without breaking them
-* The flexibility to define your own help, usage, etc.
-* Optional tight integration with [viper](http://github.com/spf13/viper) for 12-factor apps
-
-# Concepts
-
-Cobra is built on a structure of commands, arguments & flags.
-
-**Commands** represent actions, **Args** are things and **Flags** are modifiers for those actions.
-
-The best applications will read like sentences when used. Users will know how
-to use the application because they will natively understand how to use it.
-
-The pattern to follow is
-`APPNAME VERB NOUN --ADJECTIVE.`
-    or
-`APPNAME COMMAND ARG --FLAG`
-
-A few good real world examples may better illustrate this point.
-
-In the following example, 'server' is a command, and 'port' is a flag:
-
-    hugo server --port=1313
-
-In this command we are telling Git to clone the url bare.
-
-    git clone URL --bare
-
-## Commands
-
-Command is the central point of the application. Each interaction that
-the application supports will be contained in a Command. A command can
-have children commands and optionally run an action.
-
-In the example above, 'server' is the command.
-
-[More about cobra.Command](https://godoc.org/github.com/spf13/cobra#Command)
-
-## Flags
-
-A flag is a way to modify the behavior of a command. Cobra supports
-fully POSIX-compliant flags as well as the Go [flag package](https://golang.org/pkg/flag/).
-A Cobra command can define flags that persist through to children commands
-and flags that are only available to that command.
-
-In the example above, 'port' is the flag.
-
-Flag functionality is provided by the [pflag
-library](https://github.com/spf13/pflag), a fork of the flag standard library
-which maintains the same interface while adding POSIX compliance.
-
-# Installing
-Using Cobra is easy. First, use `go get` to install the latest version
-of the library. This command will install the `cobra` generator executable
-along with the library and its dependencies:
-
-    go get -u github.com/spf13/cobra/cobra
-
-Next, include Cobra in your application:
-
-```go
-import "github.com/spf13/cobra"
-```
-
-# Getting Started
-
-While you are welcome to provide your own organization, typically a Cobra-based
-application will follow the following organizational structure:
-
-```
-  ▾ appName/
-    ▾ cmd/
-        add.go
-        your.go
-        commands.go
-        here.go
-      main.go
-```
-
-In a Cobra app, typically the main.go file is very bare. It serves one purpose: initializing Cobra.
-
-```go
-package main
-
-import (
-  "fmt"
-  "os"
-
-  "{pathToYourApp}/cmd"
-)
-
-func main() {
-  cmd.Execute()
-}
-```
-
-## Using the Cobra Generator
-
-Cobra provides its own program that will create your application and add any
-commands you want. It's the easiest way to incorporate Cobra into your application.
-
-[Here](https://github.com/spf13/cobra/blob/master/cobra/README.md) you can find more information about it.
-
-## Using the Cobra Library
-
-To manually implement Cobra you need to create a bare main.go file and a rootCmd file.
-You will optionally provide additional commands as you see fit.
-
-### Create rootCmd
-
-Cobra doesn't require any special constructors. Simply create your commands.
-
-Ideally you place this in app/cmd/root.go:
-
-```go
-var rootCmd = &cobra.Command{
-  Use:   "hugo",
-  Short: "Hugo is a very fast static site generator",
-  Long: `A Fast and Flexible Static Site Generator built with
-                love by spf13 and friends in Go.
-                Complete documentation is available at http://hugo.spf13.com`,
-  Run: func(cmd *cobra.Command, args []string) {
-    // Do Stuff Here
-  },
-}
-
-func Execute() {
-  if err := rootCmd.Execute(); err != nil {
-    fmt.Println(err)
-    os.Exit(1)
-  }
-}
-```
-
-You will additionally define flags and handle configuration in your init() function.
-
-For example cmd/root.go:
-
-```go
-import (
-  "fmt"
-  "os"
-
-  homedir "github.com/mitchellh/go-homedir"
-  "github.com/spf13/cobra"
-  "github.com/spf13/viper"
-)
-
-func init() {
-  cobra.OnInitialize(initConfig)
-  rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra.yaml)")
-  rootCmd.PersistentFlags().StringVarP(&projectBase, "projectbase", "b", "", "base project directory eg. github.com/spf13/")
-  rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "Author name for copyright attribution")
-  rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "Name of license for the project (can provide `licensetext` in config)")
-  rootCmd.PersistentFlags().Bool("viper", true, "Use Viper for configuration")
-  viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
-  viper.BindPFlag("projectbase", rootCmd.PersistentFlags().Lookup("projectbase"))
-  viper.BindPFlag("useViper", rootCmd.PersistentFlags().Lookup("viper"))
-  viper.SetDefault("author", "NAME HERE <EMAIL ADDRESS>")
-  viper.SetDefault("license", "apache")
-}
-
-func initConfig() {
-  // Don't forget to read config either from cfgFile or from home directory!
-  if cfgFile != "" {
-    // Use config file from the flag.
-    viper.SetConfigFile(cfgFile)
-  } else {
-    // Find home directory.
-    home, err := homedir.Dir()
-    if err != nil {
-      fmt.Println(err)
-      os.Exit(1)
-    }
-
-    // Search config in home directory with name ".cobra" (without extension).
-    viper.AddConfigPath(home)
-    viper.SetConfigName(".cobra")
-  }
-
-  if err := viper.ReadInConfig(); err != nil {
-    fmt.Println("Can't read config:", err)
-    os.Exit(1)
-  }
-}
-```
-
-### Create your main.go
-
-With the root command you need to have your main function execute it.
-Execute should be run on the root for clarity, though it can be called on any command.
-
-In a Cobra app, typically the main.go file is very bare. It serves, one purpose, to initialize Cobra.
-
-```go
-package main
-
-import (
-  "fmt"
-  "os"
-
-  "{pathToYourApp}/cmd"
-)
-
-func main() {
-  cmd.Execute()
-}
-```
-
-### Create additional commands
-
-Additional commands can be defined and typically are each given their own file
-inside of the cmd/ directory.
-
-If you wanted to create a version command you would create cmd/version.go and
-populate it with the following:
-
-```go
-package cmd
-
-import (
-  "fmt"
-
-  "github.com/spf13/cobra"
-)
-
-func init() {
-  rootCmd.AddCommand(versionCmd)
-}
-
-var versionCmd = &cobra.Command{
-  Use:   "version",
-  Short: "Print the version number of Hugo",
-  Long:  `All software has versions. This is Hugo's`,
-  Run: func(cmd *cobra.Command, args []string) {
-    fmt.Println("Hugo Static Site Generator v0.9 -- HEAD")
-  },
-}
-```
-
-## Working with Flags
-
-Flags provide modifiers to control how the action command operates.
-
-### Assign flags to a command
-
-Since the flags are defined and used in different locations, we need to
-define a variable outside with the correct scope to assign the flag to
-work with.
-
-```go
-var Verbose bool
-var Source string
-```
-
-There are two different approaches to assign a flag.
-
-### Persistent Flags
-
-A flag can be 'persistent' meaning that this flag will be available to the
-command it's assigned to as well as every command under that command. For
-global flags, assign a flag as a persistent flag on the root.
-
-```go
-rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")
-```
-
-### Local Flags
-
-A flag can also be assigned locally which will only apply to that specific command.
-
-```go
-rootCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")
-```
-
-### Local Flag on Parent Commands
-
-By default Cobra only parses local flags on the target command, any local flags on
-parent commands are ignored. By enabling `Command.TraverseChildren` Cobra will
-parse local flags on each command before executing the target command.
-
-```go
-command := cobra.Command{
-  Use: "print [OPTIONS] [COMMANDS]",
-  TraverseChildren: true,
-}
-```
-
-### Bind Flags with Config
-
-You can also bind your flags with [viper](https://github.com/spf13/viper):
-```go
-var author string
-
-func init() {
-  rootCmd.PersistentFlags().StringVar(&author, "author", "YOUR NAME", "Author name for copyright attribution")
-  viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
-}
-```
-
-In this example the persistent flag `author` is bound with `viper`.
-**Note**, that the variable `author` will not be set to the value from config,
-when the `--author` flag is not provided by user.
-
-More in [viper documentation](https://github.com/spf13/viper#working-with-flags).
-
-### Required flags
-
-Flags are optional by default. If instead you wish your command to report an error
-when a flag has not been set, mark it as required:
-```go
-rootCmd.Flags().StringVarP(&Region, "region", "r", "", "AWS region (required)")
-rootCmd.MarkFlagRequired("region")
-```
-
-## Positional and Custom Arguments
-
-Validation of positional arguments can be specified using the `Args` field
-of `Command`.
-
-The following validators are built in:
-
-- `NoArgs` - the command will report an error if there are any positional args.
-- `ArbitraryArgs` - the command will accept any args.
-- `OnlyValidArgs` - the command will report an error if there are any positional args that are not in the `ValidArgs` field of `Command`.
-- `MinimumNArgs(int)` - the command will report an error if there are not at least N positional args.
-- `MaximumNArgs(int)` - the command will report an error if there are more than N positional args.
-- `ExactArgs(int)` - the command will report an error if there are not exactly N positional args.
-- `RangeArgs(min, max)` - the command will report an error if the number of args is not between the minimum and maximum number of expected args.
-
-An example of setting the custom validator:
-
-```go
-var cmd = &cobra.Command{
-  Short: "hello",
-  Args: func(cmd *cobra.Command, args []string) error {
-    if len(args) < 1 {
-      return errors.New("requires at least one arg")
-    }
-    if myapp.IsValidColor(args[0]) {
-      return nil
-    }
-    return fmt.Errorf("invalid color specified: %s", args[0])
-  },
-  Run: func(cmd *cobra.Command, args []string) {
-    fmt.Println("Hello, World!")
-  },
-}
-```
-
-## Example
-
-In the example below, we have defined three commands. Two are at the top level
-and one (cmdTimes) is a child of one of the top commands. In this case the root
-is not executable meaning that a subcommand is required. This is accomplished
-by not providing a 'Run' for the 'rootCmd'.
-
-We have only defined one flag for a single command.
-
-More documentation about flags is available at https://github.com/spf13/pflag
-
-```go
-package main
-
-import (
-  "fmt"
-  "strings"
-
-  "github.com/spf13/cobra"
-)
-
-func main() {
-  var echoTimes int
-
-  var cmdPrint = &cobra.Command{
-    Use:   "print [string to print]",
-    Short: "Print anything to the screen",
-    Long: `print is for printing anything back to the screen.
-For many years people have printed back to the screen.`,
-    Args: cobra.MinimumNArgs(1),
-    Run: func(cmd *cobra.Command, args []string) {
-      fmt.Println("Print: " + strings.Join(args, " "))
-    },
-  }
-
-  var cmdEcho = &cobra.Command{
-    Use:   "echo [string to echo]",
-    Short: "Echo anything to the screen",
-    Long: `echo is for echoing anything back.
-Echo works a lot like print, except it has a child command.`,
-    Args: cobra.MinimumNArgs(1),
-    Run: func(cmd *cobra.Command, args []string) {
-      fmt.Println("Print: " + strings.Join(args, " "))
-    },
-  }
-
-  var cmdTimes = &cobra.Command{
-    Use:   "times [# times] [string to echo]",
-    Short: "Echo anything to the screen more times",
-    Long: `echo things multiple times back to the user by providing
-a count and a string.`,
-    Args: cobra.MinimumNArgs(1),
-    Run: func(cmd *cobra.Command, args []string) {
-      for i := 0; i < echoTimes; i++ {
-        fmt.Println("Echo: " + strings.Join(args, " "))
-      }
-    },
-  }
-
-  cmdTimes.Flags().IntVarP(&echoTimes, "times", "t", 1, "times to echo the input")
-
-  var rootCmd = &cobra.Command{Use: "app"}
-  rootCmd.AddCommand(cmdPrint, cmdEcho)
-  cmdEcho.AddCommand(cmdTimes)
-  rootCmd.Execute()
-}
-```
-
-For a more complete example of a larger application, please checkout [Hugo](http://gohugo.io/).
-
-## Help Command
-
-Cobra automatically adds a help command to your application when you have subcommands.
-This will be called when a user runs 'app help'. Additionally, help will also
-support all other commands as input. Say, for instance, you have a command called
-'create' without any additional configuration; Cobra will work when 'app help
-create' is called.  Every command will automatically have the '--help' flag added.
-
-### Example
-
-The following output is automatically generated by Cobra. Nothing beyond the
-command and flag definitions are needed.
-
-    $ cobra help
-
-    Cobra is a CLI library for Go that empowers applications.
-    This application is a tool to generate the needed files
-    to quickly create a Cobra application.
-
-    Usage:
-      cobra [command]
-
-    Available Commands:
-      add         Add a command to a Cobra Application
-      help        Help about any command
-      init        Initialize a Cobra Application
-
-    Flags:
-      -a, --author string    author name for copyright attribution (default "YOUR NAME")
-          --config string    config file (default is $HOME/.cobra.yaml)
-      -h, --help             help for cobra
-      -l, --license string   name of license for the project
-          --viper            use Viper for configuration (default true)
-
-    Use "cobra [command] --help" for more information about a command.
-
-
-Help is just a command like any other. There is no special logic or behavior
-around it. In fact, you can provide your own if you want.
-
-### Defining your own help
-
-You can provide your own Help command or your own template for the default command to use
-with following functions:
-
-```go
-cmd.SetHelpCommand(cmd *Command)
-cmd.SetHelpFunc(f func(*Command, []string))
-cmd.SetHelpTemplate(s string)
-```
-
-The latter two will also apply to any children commands.
-
-## Usage Message
-
-When the user provides an invalid flag or invalid command, Cobra responds by
-showing the user the 'usage'.
-
-### Example
-You may recognize this from the help above. That's because the default help
-embeds the usage as part of its output.
-
-    $ cobra --invalid
-    Error: unknown flag: --invalid
-    Usage:
-      cobra [command]
-
-    Available Commands:
-      add         Add a command to a Cobra Application
-      help        Help about any command
-      init        Initialize a Cobra Application
-
-    Flags:
-      -a, --author string    author name for copyright attribution (default "YOUR NAME")
-          --config string    config file (default is $HOME/.cobra.yaml)
-      -h, --help             help for cobra
-      -l, --license string   name of license for the project
-          --viper            use Viper for configuration (default true)
-
-    Use "cobra [command] --help" for more information about a command.
-
-### Defining your own usage
-You can provide your own usage function or template for Cobra to use.
-Like help, the function and template are overridable through public methods:
-
-```go
-cmd.SetUsageFunc(f func(*Command) error)
-cmd.SetUsageTemplate(s string)
-```
-
-## Version Flag
-
-Cobra adds a top-level '--version' flag if the Version field is set on the root command.
-Running an application with the '--version' flag will print the version to stdout using
-the version template. The template can be customized using the
-`cmd.SetVersionTemplate(s string)` function.
-
-## PreRun and PostRun Hooks
-
-It is possible to run functions before or after the main `Run` function of your command. The `PersistentPreRun` and `PreRun` functions will be executed before `Run`. `PersistentPostRun` and `PostRun` will be executed after `Run`.  The `Persistent*Run` functions will be inherited by children if they do not declare their own.  These functions are run in the following order:
-
-- `PersistentPreRun`
-- `PreRun`
-- `Run`
-- `PostRun`
-- `PersistentPostRun`
-
-An example of two commands which use all of these features is below.  When the subcommand is executed, it will run the root command's `PersistentPreRun` but not the root command's `PersistentPostRun`:
-
-```go
-package main
-
-import (
-  "fmt"
-
-  "github.com/spf13/cobra"
-)
-
-func main() {
-
-  var rootCmd = &cobra.Command{
-    Use:   "root [sub]",
-    Short: "My root command",
-    PersistentPreRun: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside rootCmd PersistentPreRun with args: %v\n", args)
-    },
-    PreRun: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside rootCmd PreRun with args: %v\n", args)
-    },
-    Run: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside rootCmd Run with args: %v\n", args)
-    },
-    PostRun: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside rootCmd PostRun with args: %v\n", args)
-    },
-    PersistentPostRun: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside rootCmd PersistentPostRun with args: %v\n", args)
-    },
-  }
-
-  var subCmd = &cobra.Command{
-    Use:   "sub [no options!]",
-    Short: "My subcommand",
-    PreRun: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside subCmd PreRun with args: %v\n", args)
-    },
-    Run: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside subCmd Run with args: %v\n", args)
-    },
-    PostRun: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside subCmd PostRun with args: %v\n", args)
-    },
-    PersistentPostRun: func(cmd *cobra.Command, args []string) {
-      fmt.Printf("Inside subCmd PersistentPostRun with args: %v\n", args)
-    },
-  }
-
-  rootCmd.AddCommand(subCmd)
-
-  rootCmd.SetArgs([]string{""})
-  rootCmd.Execute()
-  fmt.Println()
-  rootCmd.SetArgs([]string{"sub", "arg1", "arg2"})
-  rootCmd.Execute()
-}
-```
-
-Output:
-```
-Inside rootCmd PersistentPreRun with args: []
-Inside rootCmd PreRun with args: []
-Inside rootCmd Run with args: []
-Inside rootCmd PostRun with args: []
-Inside rootCmd PersistentPostRun with args: []
-
-Inside rootCmd PersistentPreRun with args: [arg1 arg2]
-Inside subCmd PreRun with args: [arg1 arg2]
-Inside subCmd Run with args: [arg1 arg2]
-Inside subCmd PostRun with args: [arg1 arg2]
-Inside subCmd PersistentPostRun with args: [arg1 arg2]
-```
-
-## Suggestions when "unknown command" happens
-
-Cobra will print automatic suggestions when "unknown command" errors happen. This allows Cobra to behave similarly to the `git` command when a typo happens. For example:
-
-```
-$ hugo srever
-Error: unknown command "srever" for "hugo"
-
-Did you mean this?
-        server
-
-Run 'hugo --help' for usage.
-```
-
-Suggestions are automatic based on every subcommand registered and use an implementation of [Levenshtein distance](http://en.wikipedia.org/wiki/Levenshtein_distance). Every registered command that matches a minimum distance of 2 (ignoring case) will be displayed as a suggestion.
-
-If you need to disable suggestions or tweak the string distance in your command, use:
-
-```go
-command.DisableSuggestions = true
-```
-
-or
-
-```go
-command.SuggestionsMinimumDistance = 1
-```
-
-You can also explicitly set names for which a given command will be suggested using the `SuggestFor` attribute. This allows suggestions for strings that are not close in terms of string distance, but makes sense in your set of commands and for some which you don't want aliases. Example:
-
-```
-$ kubectl remove
-Error: unknown command "remove" for "kubectl"
-
-Did you mean this?
-        delete
-
-Run 'kubectl help' for usage.
-```
-
-## Generating documentation for your command
-
-Cobra can generate documentation based on subcommands, flags, etc. in the following formats:
-
-- [Markdown](doc/md_docs.md)
-- [ReStructured Text](doc/rest_docs.md)
-- [Man Page](doc/man_docs.md)
-
-## Generating bash completions
-
-Cobra can generate a bash-completion file. If you add more information to your command, these completions can be amazingly powerful and flexible.  Read more about it in [Bash Completions](bash_completions.md).
-
-# Contributing
-
-1. Fork it
-2. Download your fork to your PC (`git clone https://github.com/your_username/cobra && cd cobra`)
-3. Create your feature branch (`git checkout -b my-new-feature`)
-4. Make changes and add them (`git add .`)
-5. Commit your changes (`git commit -m 'Add some feature'`)
-6. Push to the branch (`git push origin my-new-feature`)
-7. Create new pull request
-
-# License
-
-Cobra is released under the Apache 2.0 license. See [LICENSE.txt](https://github.com/spf13/cobra/blob/master/LICENSE.txt)
diff --git a/vendor/github.com/spf13/cobra/args.go b/vendor/github.com/spf13/cobra/args.go
deleted file mode 100644
index a5d8a92..0000000
--- a/vendor/github.com/spf13/cobra/args.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package cobra
-
-import (
-	"fmt"
-)
-
-type PositionalArgs func(cmd *Command, args []string) error
-
-// Legacy arg validation has the following behaviour:
-// - root commands with no subcommands can take arbitrary arguments
-// - root commands with subcommands will do subcommand validity checking
-// - subcommands will always accept arbitrary arguments
-func legacyArgs(cmd *Command, args []string) error {
-	// no subcommand, always take args
-	if !cmd.HasSubCommands() {
-		return nil
-	}
-
-	// root command with subcommands, do subcommand checking.
-	if !cmd.HasParent() && len(args) > 0 {
-		return fmt.Errorf("unknown command %q for %q%s", args[0], cmd.CommandPath(), cmd.findSuggestions(args[0]))
-	}
-	return nil
-}
-
-// NoArgs returns an error if any args are included.
-func NoArgs(cmd *Command, args []string) error {
-	if len(args) > 0 {
-		return fmt.Errorf("unknown command %q for %q", args[0], cmd.CommandPath())
-	}
-	return nil
-}
-
-// OnlyValidArgs returns an error if any args are not in the list of ValidArgs.
-func OnlyValidArgs(cmd *Command, args []string) error {
-	if len(cmd.ValidArgs) > 0 {
-		for _, v := range args {
-			if !stringInSlice(v, cmd.ValidArgs) {
-				return fmt.Errorf("invalid argument %q for %q%s", v, cmd.CommandPath(), cmd.findSuggestions(args[0]))
-			}
-		}
-	}
-	return nil
-}
-
-// ArbitraryArgs never returns an error.
-func ArbitraryArgs(cmd *Command, args []string) error {
-	return nil
-}
-
-// MinimumNArgs returns an error if there is not at least N args.
-func MinimumNArgs(n int) PositionalArgs {
-	return func(cmd *Command, args []string) error {
-		if len(args) < n {
-			return fmt.Errorf("requires at least %d arg(s), only received %d", n, len(args))
-		}
-		return nil
-	}
-}
-
-// MaximumNArgs returns an error if there are more than N args.
-func MaximumNArgs(n int) PositionalArgs {
-	return func(cmd *Command, args []string) error {
-		if len(args) > n {
-			return fmt.Errorf("accepts at most %d arg(s), received %d", n, len(args))
-		}
-		return nil
-	}
-}
-
-// ExactArgs returns an error if there are not exactly n args.
-func ExactArgs(n int) PositionalArgs {
-	return func(cmd *Command, args []string) error {
-		if len(args) != n {
-			return fmt.Errorf("accepts %d arg(s), received %d", n, len(args))
-		}
-		return nil
-	}
-}
-
-// RangeArgs returns an error if the number of args is not within the expected range.
-func RangeArgs(min int, max int) PositionalArgs {
-	return func(cmd *Command, args []string) error {
-		if len(args) < min || len(args) > max {
-			return fmt.Errorf("accepts between %d and %d arg(s), received %d", min, max, len(args))
-		}
-		return nil
-	}
-}
diff --git a/vendor/github.com/spf13/cobra/args_test.go b/vendor/github.com/spf13/cobra/args_test.go
deleted file mode 100644
index d797b6f..0000000
--- a/vendor/github.com/spf13/cobra/args_test.go
+++ /dev/null
@@ -1,241 +0,0 @@
-package cobra
-
-import (
-	"strings"
-	"testing"
-)
-
-func TestNoArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: NoArgs, Run: emptyRun}
-
-	output, err := executeCommand(c)
-	if output != "" {
-		t.Errorf("Unexpected string: %v", output)
-	}
-	if err != nil {
-		t.Fatalf("Unexpected error: %v", err)
-	}
-}
-
-func TestNoArgsWithArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: NoArgs, Run: emptyRun}
-
-	_, err := executeCommand(c, "illegal")
-	if err == nil {
-		t.Fatal("Expected an error")
-	}
-
-	got := err.Error()
-	expected := `unknown command "illegal" for "c"`
-	if got != expected {
-		t.Errorf("Expected: %q, got: %q", expected, got)
-	}
-}
-
-func TestOnlyValidArgs(t *testing.T) {
-	c := &Command{
-		Use:       "c",
-		Args:      OnlyValidArgs,
-		ValidArgs: []string{"one", "two"},
-		Run:       emptyRun,
-	}
-
-	output, err := executeCommand(c, "one", "two")
-	if output != "" {
-		t.Errorf("Unexpected output: %v", output)
-	}
-	if err != nil {
-		t.Fatalf("Unexpected error: %v", err)
-	}
-}
-
-func TestOnlyValidArgsWithInvalidArgs(t *testing.T) {
-	c := &Command{
-		Use:       "c",
-		Args:      OnlyValidArgs,
-		ValidArgs: []string{"one", "two"},
-		Run:       emptyRun,
-	}
-
-	_, err := executeCommand(c, "three")
-	if err == nil {
-		t.Fatal("Expected an error")
-	}
-
-	got := err.Error()
-	expected := `invalid argument "three" for "c"`
-	if got != expected {
-		t.Errorf("Expected: %q, got: %q", expected, got)
-	}
-}
-
-func TestArbitraryArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: ArbitraryArgs, Run: emptyRun}
-	output, err := executeCommand(c, "a", "b")
-	if output != "" {
-		t.Errorf("Unexpected output: %v", output)
-	}
-	if err != nil {
-		t.Errorf("Unexpected error: %v", err)
-	}
-}
-
-func TestMinimumNArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: MinimumNArgs(2), Run: emptyRun}
-	output, err := executeCommand(c, "a", "b", "c")
-	if output != "" {
-		t.Errorf("Unexpected output: %v", output)
-	}
-	if err != nil {
-		t.Errorf("Unexpected error: %v", err)
-	}
-}
-
-func TestMinimumNArgsWithLessArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: MinimumNArgs(2), Run: emptyRun}
-	_, err := executeCommand(c, "a")
-
-	if err == nil {
-		t.Fatal("Expected an error")
-	}
-
-	got := err.Error()
-	expected := "requires at least 2 arg(s), only received 1"
-	if got != expected {
-		t.Fatalf("Expected %q, got %q", expected, got)
-	}
-}
-
-func TestMaximumNArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: MaximumNArgs(3), Run: emptyRun}
-	output, err := executeCommand(c, "a", "b")
-	if output != "" {
-		t.Errorf("Unexpected output: %v", output)
-	}
-	if err != nil {
-		t.Errorf("Unexpected error: %v", err)
-	}
-}
-
-func TestMaximumNArgsWithMoreArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: MaximumNArgs(2), Run: emptyRun}
-	_, err := executeCommand(c, "a", "b", "c")
-
-	if err == nil {
-		t.Fatal("Expected an error")
-	}
-
-	got := err.Error()
-	expected := "accepts at most 2 arg(s), received 3"
-	if got != expected {
-		t.Fatalf("Expected %q, got %q", expected, got)
-	}
-}
-
-func TestExactArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: ExactArgs(3), Run: emptyRun}
-	output, err := executeCommand(c, "a", "b", "c")
-	if output != "" {
-		t.Errorf("Unexpected output: %v", output)
-	}
-	if err != nil {
-		t.Errorf("Unexpected error: %v", err)
-	}
-}
-
-func TestExactArgsWithInvalidCount(t *testing.T) {
-	c := &Command{Use: "c", Args: ExactArgs(2), Run: emptyRun}
-	_, err := executeCommand(c, "a", "b", "c")
-
-	if err == nil {
-		t.Fatal("Expected an error")
-	}
-
-	got := err.Error()
-	expected := "accepts 2 arg(s), received 3"
-	if got != expected {
-		t.Fatalf("Expected %q, got %q", expected, got)
-	}
-}
-
-func TestRangeArgs(t *testing.T) {
-	c := &Command{Use: "c", Args: RangeArgs(2, 4), Run: emptyRun}
-	output, err := executeCommand(c, "a", "b", "c")
-	if output != "" {
-		t.Errorf("Unexpected output: %v", output)
-	}
-	if err != nil {
-		t.Errorf("Unexpected error: %v", err)
-	}
-}
-
-func TestRangeArgsWithInvalidCount(t *testing.T) {
-	c := &Command{Use: "c", Args: RangeArgs(2, 4), Run: emptyRun}
-	_, err := executeCommand(c, "a")
-
-	if err == nil {
-		t.Fatal("Expected an error")
-	}
-
-	got := err.Error()
-	expected := "accepts between 2 and 4 arg(s), received 1"
-	if got != expected {
-		t.Fatalf("Expected %q, got %q", expected, got)
-	}
-}
-
-func TestRootTakesNoArgs(t *testing.T) {
-	rootCmd := &Command{Use: "root", Run: emptyRun}
-	childCmd := &Command{Use: "child", Run: emptyRun}
-	rootCmd.AddCommand(childCmd)
-
-	_, err := executeCommand(rootCmd, "illegal", "args")
-	if err == nil {
-		t.Fatal("Expected an error")
-	}
-
-	got := err.Error()
-	expected := `unknown command "illegal" for "root"`
-	if !strings.Contains(got, expected) {
-		t.Errorf("expected %q, got %q", expected, got)
-	}
-}
-
-func TestRootTakesArgs(t *testing.T) {
-	rootCmd := &Command{Use: "root", Args: ArbitraryArgs, Run: emptyRun}
-	childCmd := &Command{Use: "child", Run: emptyRun}
-	rootCmd.AddCommand(childCmd)
-
-	_, err := executeCommand(rootCmd, "legal", "args")
-	if err != nil {
-		t.Errorf("Unexpected error: %v", err)
-	}
-}
-
-func TestChildTakesNoArgs(t *testing.T) {
-	rootCmd := &Command{Use: "root", Run: emptyRun}
-	childCmd := &Command{Use: "child", Args: NoArgs, Run: emptyRun}
-	rootCmd.AddCommand(childCmd)
-
-	_, err := executeCommand(rootCmd, "child", "illegal", "args")
-	if err == nil {
-		t.Fatal("Expected an error")
-	}
-
-	got := err.Error()
-	expected := `unknown command "illegal" for "root child"`
-	if !strings.Contains(got, expected) {
-		t.Errorf("expected %q, got %q", expected, got)
-	}
-}
-
-func TestChildTakesArgs(t *testing.T) {
-	rootCmd := &Command{Use: "root", Run: emptyRun}
-	childCmd := &Command{Use: "child", Args: ArbitraryArgs, Run: emptyRun}
-	rootCmd.AddCommand(childCmd)
-
-	_, err := executeCommand(rootCmd, "child", "legal", "args")
-	if err != nil {
-		t.Fatalf("Unexpected error: %v", err)
-	}
-}
diff --git a/vendor/github.com/spf13/cobra/bash_completions.go b/vendor/github.com/spf13/cobra/bash_completions.go
deleted file mode 100644
index 8fa8f48..0000000
--- a/vendor/github.com/spf13/cobra/bash_completions.go
+++ /dev/null
@@ -1,584 +0,0 @@
-package cobra
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"os"
-	"sort"
-	"strings"
-
-	"github.com/spf13/pflag"
-)
-
-// Annotations for Bash completion.
-const (
-	BashCompFilenameExt     = "cobra_annotation_bash_completion_filename_extensions"
-	BashCompCustom          = "cobra_annotation_bash_completion_custom"
-	BashCompOneRequiredFlag = "cobra_annotation_bash_completion_one_required_flag"
-	BashCompSubdirsInDir    = "cobra_annotation_bash_completion_subdirs_in_dir"
-)
-
-func writePreamble(buf *bytes.Buffer, name string) {
-	buf.WriteString(fmt.Sprintf("# bash completion for %-36s -*- shell-script -*-\n", name))
-	buf.WriteString(fmt.Sprintf(`
-__%[1]s_debug()
-{
-    if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
-        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
-    fi
-}
-
-# Homebrew on Macs have version 1.3 of bash-completion which doesn't include
-# _init_completion. This is a very minimal version of that function.
-__%[1]s_init_completion()
-{
-    COMPREPLY=()
-    _get_comp_words_by_ref "$@" cur prev words cword
-}
-
-__%[1]s_index_of_word()
-{
-    local w word=$1
-    shift
-    index=0
-    for w in "$@"; do
-        [[ $w = "$word" ]] && return
-        index=$((index+1))
-    done
-    index=-1
-}
-
-__%[1]s_contains_word()
-{
-    local w word=$1; shift
-    for w in "$@"; do
-        [[ $w = "$word" ]] && return
-    done
-    return 1
-}
-
-__%[1]s_handle_reply()
-{
-    __%[1]s_debug "${FUNCNAME[0]}"
-    case $cur in
-        -*)
-            if [[ $(type -t compopt) = "builtin" ]]; then
-                compopt -o nospace
-            fi
-            local allflags
-            if [ ${#must_have_one_flag[@]} -ne 0 ]; then
-                allflags=("${must_have_one_flag[@]}")
-            else
-                allflags=("${flags[*]} ${two_word_flags[*]}")
-            fi
-            COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") )
-            if [[ $(type -t compopt) = "builtin" ]]; then
-                [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
-            fi
-
-            # complete after --flag=abc
-            if [[ $cur == *=* ]]; then
-                if [[ $(type -t compopt) = "builtin" ]]; then
-                    compopt +o nospace
-                fi
-
-                local index flag
-                flag="${cur%%=*}"
-                __%[1]s_index_of_word "${flag}" "${flags_with_completion[@]}"
-                COMPREPLY=()
-                if [[ ${index} -ge 0 ]]; then
-                    PREFIX=""
-                    cur="${cur#*=}"
-                    ${flags_completion[${index}]}
-                    if [ -n "${ZSH_VERSION}" ]; then
-                        # zsh completion needs --flag= prefix
-                        eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
-                    fi
-                fi
-            fi
-            return 0;
-            ;;
-    esac
-
-    # check if we are handling a flag with special work handling
-    local index
-    __%[1]s_index_of_word "${prev}" "${flags_with_completion[@]}"
-    if [[ ${index} -ge 0 ]]; then
-        ${flags_completion[${index}]}
-        return
-    fi
-
-    # we are parsing a flag and don't have a special handler, no completion
-    if [[ ${cur} != "${words[cword]}" ]]; then
-        return
-    fi
-
-    local completions
-    completions=("${commands[@]}")
-    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
-        completions=("${must_have_one_noun[@]}")
-    fi
-    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
-        completions+=("${must_have_one_flag[@]}")
-    fi
-    COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") )
-
-    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
-        COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") )
-    fi
-
-    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
-        declare -F __custom_func >/dev/null && __custom_func
-    fi
-
-    # available in bash-completion >= 2, not always present on macOS
-    if declare -F __ltrim_colon_completions >/dev/null; then
-        __ltrim_colon_completions "$cur"
-    fi
-
-    # If there is only 1 completion and it is a flag with an = it will be completed
-    # but we don't want a space after the =
-    if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
-       compopt -o nospace
-    fi
-}
-
-# The arguments should be in the form "ext1|ext2|extn"
-__%[1]s_handle_filename_extension_flag()
-{
-    local ext="$1"
-    _filedir "@(${ext})"
-}
-
-__%[1]s_handle_subdirs_in_dir_flag()
-{
-    local dir="$1"
-    pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1
-}
-
-__%[1]s_handle_flag()
-{
-    __%[1]s_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
-
-    # if a command required a flag, and we found it, unset must_have_one_flag()
-    local flagname=${words[c]}
-    local flagvalue
-    # if the word contained an =
-    if [[ ${words[c]} == *"="* ]]; then
-        flagvalue=${flagname#*=} # take in as flagvalue after the =
-        flagname=${flagname%%=*} # strip everything after the =
-        flagname="${flagname}=" # but put the = back
-    fi
-    __%[1]s_debug "${FUNCNAME[0]}: looking for ${flagname}"
-    if __%[1]s_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
-        must_have_one_flag=()
-    fi
-
-    # if you set a flag which only applies to this command, don't show subcommands
-    if __%[1]s_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
-      commands=()
-    fi
-
-    # keep flag value with flagname as flaghash
-    # flaghash variable is an associative array which is only supported in bash > 3.
-    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
-        if [ -n "${flagvalue}" ] ; then
-            flaghash[${flagname}]=${flagvalue}
-        elif [ -n "${words[ $((c+1)) ]}" ] ; then
-            flaghash[${flagname}]=${words[ $((c+1)) ]}
-        else
-            flaghash[${flagname}]="true" # pad "true" for bool flag
-        fi
-    fi
-
-    # skip the argument to a two word flag
-    if __%[1]s_contains_word "${words[c]}" "${two_word_flags[@]}"; then
-        c=$((c+1))
-        # if we are looking for a flags value, don't show commands
-        if [[ $c -eq $cword ]]; then
-            commands=()
-        fi
-    fi
-
-    c=$((c+1))
-
-}
-
-__%[1]s_handle_noun()
-{
-    __%[1]s_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
-
-    if __%[1]s_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
-        must_have_one_noun=()
-    elif __%[1]s_contains_word "${words[c]}" "${noun_aliases[@]}"; then
-        must_have_one_noun=()
-    fi
-
-    nouns+=("${words[c]}")
-    c=$((c+1))
-}
-
-__%[1]s_handle_command()
-{
-    __%[1]s_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
-
-    local next_command
-    if [[ -n ${last_command} ]]; then
-        next_command="_${last_command}_${words[c]//:/__}"
-    else
-        if [[ $c -eq 0 ]]; then
-            next_command="_%[1]s_root_command"
-        else
-            next_command="_${words[c]//:/__}"
-        fi
-    fi
-    c=$((c+1))
-    __%[1]s_debug "${FUNCNAME[0]}: looking for ${next_command}"
-    declare -F "$next_command" >/dev/null && $next_command
-}
-
-__%[1]s_handle_word()
-{
-    if [[ $c -ge $cword ]]; then
-        __%[1]s_handle_reply
-        return
-    fi
-    __%[1]s_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
-    if [[ "${words[c]}" == -* ]]; then
-        __%[1]s_handle_flag
-    elif __%[1]s_contains_word "${words[c]}" "${commands[@]}"; then
-        __%[1]s_handle_command
-    elif [[ $c -eq 0 ]]; then
-        __%[1]s_handle_command
-    elif __%[1]s_contains_word "${words[c]}" "${command_aliases[@]}"; then
-        # aliashash variable is an associative array which is only supported in bash > 3.
-        if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
-            words[c]=${aliashash[${words[c]}]}
-            __%[1]s_handle_command
-        else
-            __%[1]s_handle_noun
-        fi
-    else
-        __%[1]s_handle_noun
-    fi
-    __%[1]s_handle_word
-}
-
-`, name))
-}
-
-func writePostscript(buf *bytes.Buffer, name string) {
-	name = strings.Replace(name, ":", "__", -1)
-	buf.WriteString(fmt.Sprintf("__start_%s()\n", name))
-	buf.WriteString(fmt.Sprintf(`{
-    local cur prev words cword
-    declare -A flaghash 2>/dev/null || :
-    declare -A aliashash 2>/dev/null || :
-    if declare -F _init_completion >/dev/null 2>&1; then
-        _init_completion -s || return
-    else
-        __%[1]s_init_completion -n "=" || return
-    fi
-
-    local c=0
-    local flags=()
-    local two_word_flags=()
-    local local_nonpersistent_flags=()
-    local flags_with_completion=()
-    local flags_completion=()
-    local commands=("%[1]s")
-    local must_have_one_flag=()
-    local must_have_one_noun=()
-    local last_command
-    local nouns=()
-
-    __%[1]s_handle_word
-}
-
-`, name))
-	buf.WriteString(fmt.Sprintf(`if [[ $(type -t compopt) = "builtin" ]]; then
-    complete -o default -F __start_%s %s
-else
-    complete -o default -o nospace -F __start_%s %s
-fi
-
-`, name, name, name, name))
-	buf.WriteString("# ex: ts=4 sw=4 et filetype=sh\n")
-}
-
-func writeCommands(buf *bytes.Buffer, cmd *Command) {
-	buf.WriteString("    commands=()\n")
-	for _, c := range cmd.Commands() {
-		if !c.IsAvailableCommand() || c == cmd.helpCommand {
-			continue
-		}
-		buf.WriteString(fmt.Sprintf("    commands+=(%q)\n", c.Name()))
-		writeCmdAliases(buf, c)
-	}
-	buf.WriteString("\n")
-}
-
-func writeFlagHandler(buf *bytes.Buffer, name string, annotations map[string][]string, cmd *Command) {
-	for key, value := range annotations {
-		switch key {
-		case BashCompFilenameExt:
-			buf.WriteString(fmt.Sprintf("    flags_with_completion+=(%q)\n", name))
-
-			var ext string
-			if len(value) > 0 {
-				ext = fmt.Sprintf("__%s_handle_filename_extension_flag ", cmd.Root().Name()) + strings.Join(value, "|")
-			} else {
-				ext = "_filedir"
-			}
-			buf.WriteString(fmt.Sprintf("    flags_completion+=(%q)\n", ext))
-		case BashCompCustom:
-			buf.WriteString(fmt.Sprintf("    flags_with_completion+=(%q)\n", name))
-			if len(value) > 0 {
-				handlers := strings.Join(value, "; ")
-				buf.WriteString(fmt.Sprintf("    flags_completion+=(%q)\n", handlers))
-			} else {
-				buf.WriteString("    flags_completion+=(:)\n")
-			}
-		case BashCompSubdirsInDir:
-			buf.WriteString(fmt.Sprintf("    flags_with_completion+=(%q)\n", name))
-
-			var ext string
-			if len(value) == 1 {
-				ext = fmt.Sprintf("__%s_handle_subdirs_in_dir_flag ", cmd.Root().Name()) + value[0]
-			} else {
-				ext = "_filedir -d"
-			}
-			buf.WriteString(fmt.Sprintf("    flags_completion+=(%q)\n", ext))
-		}
-	}
-}
-
-func writeShortFlag(buf *bytes.Buffer, flag *pflag.Flag, cmd *Command) {
-	name := flag.Shorthand
-	format := "    "
-	if len(flag.NoOptDefVal) == 0 {
-		format += "two_word_"
-	}
-	format += "flags+=(\"-%s\")\n"
-	buf.WriteString(fmt.Sprintf(format, name))
-	writeFlagHandler(buf, "-"+name, flag.Annotations, cmd)
-}
-
-func writeFlag(buf *bytes.Buffer, flag *pflag.Flag, cmd *Command) {
-	name := flag.Name
-	format := "    flags+=(\"--%s"
-	if len(flag.NoOptDefVal) == 0 {
-		format += "="
-	}
-	format += "\")\n"
-	buf.WriteString(fmt.Sprintf(format, name))
-	writeFlagHandler(buf, "--"+name, flag.Annotations, cmd)
-}
-
-func writeLocalNonPersistentFlag(buf *bytes.Buffer, flag *pflag.Flag) {
-	name := flag.Name
-	format := "    local_nonpersistent_flags+=(\"--%s"
-	if len(flag.NoOptDefVal) == 0 {
-		format += "="
-	}
-	format += "\")\n"
-	buf.WriteString(fmt.Sprintf(format, name))
-}
-
-func writeFlags(buf *bytes.Buffer, cmd *Command) {
-	buf.WriteString(`    flags=()
-    two_word_flags=()
-    local_nonpersistent_flags=()
-    flags_with_completion=()
-    flags_completion=()
-
-`)
-	localNonPersistentFlags := cmd.LocalNonPersistentFlags()
-	cmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {
-		if nonCompletableFlag(flag) {
-			return
-		}
-		writeFlag(buf, flag, cmd)
-		if len(flag.Shorthand) > 0 {
-			writeShortFlag(buf, flag, cmd)
-		}
-		if localNonPersistentFlags.Lookup(flag.Name) != nil {
-			writeLocalNonPersistentFlag(buf, flag)
-		}
-	})
-	cmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {
-		if nonCompletableFlag(flag) {
-			return
-		}
-		writeFlag(buf, flag, cmd)
-		if len(flag.Shorthand) > 0 {
-			writeShortFlag(buf, flag, cmd)
-		}
-	})
-
-	buf.WriteString("\n")
-}
-
-func writeRequiredFlag(buf *bytes.Buffer, cmd *Command) {
-	buf.WriteString("    must_have_one_flag=()\n")
-	flags := cmd.NonInheritedFlags()
-	flags.VisitAll(func(flag *pflag.Flag) {
-		if nonCompletableFlag(flag) {
-			return
-		}
-		for key := range flag.Annotations {
-			switch key {
-			case BashCompOneRequiredFlag:
-				format := "    must_have_one_flag+=(\"--%s"
-				if flag.Value.Type() != "bool" {
-					format += "="
-				}
-				format += "\")\n"
-				buf.WriteString(fmt.Sprintf(format, flag.Name))
-
-				if len(flag.Shorthand) > 0 {
-					buf.WriteString(fmt.Sprintf("    must_have_one_flag+=(\"-%s\")\n", flag.Shorthand))
-				}
-			}
-		}
-	})
-}
-
-func writeRequiredNouns(buf *bytes.Buffer, cmd *Command) {
-	buf.WriteString("    must_have_one_noun=()\n")
-	sort.Sort(sort.StringSlice(cmd.ValidArgs))
-	for _, value := range cmd.ValidArgs {
-		buf.WriteString(fmt.Sprintf("    must_have_one_noun+=(%q)\n", value))
-	}
-}
-
-func writeCmdAliases(buf *bytes.Buffer, cmd *Command) {
-	if len(cmd.Aliases) == 0 {
-		return
-	}
-
-	sort.Sort(sort.StringSlice(cmd.Aliases))
-
-	buf.WriteString(fmt.Sprint(`    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then`, "\n"))
-	for _, value := range cmd.Aliases {
-		buf.WriteString(fmt.Sprintf("        command_aliases+=(%q)\n", value))
-		buf.WriteString(fmt.Sprintf("        aliashash[%q]=%q\n", value, cmd.Name()))
-	}
-	buf.WriteString(`    fi`)
-	buf.WriteString("\n")
-}
-func writeArgAliases(buf *bytes.Buffer, cmd *Command) {
-	buf.WriteString("    noun_aliases=()\n")
-	sort.Sort(sort.StringSlice(cmd.ArgAliases))
-	for _, value := range cmd.ArgAliases {
-		buf.WriteString(fmt.Sprintf("    noun_aliases+=(%q)\n", value))
-	}
-}
-
-func gen(buf *bytes.Buffer, cmd *Command) {
-	for _, c := range cmd.Commands() {
-		if !c.IsAvailableCommand() || c == cmd.helpCommand {
-			continue
-		}
-		gen(buf, c)
-	}
-	commandName := cmd.CommandPath()
-	commandName = strings.Replace(commandName, " ", "_", -1)
-	commandName = strings.Replace(commandName, ":", "__", -1)
-
-	if cmd.Root() == cmd {
-		buf.WriteString(fmt.Sprintf("_%s_root_command()\n{\n", commandName))
-	} else {
-		buf.WriteString(fmt.Sprintf("_%s()\n{\n", commandName))
-	}
-
-	buf.WriteString(fmt.Sprintf("    last_command=%q\n", commandName))
-	buf.WriteString("\n")
-	buf.WriteString("    command_aliases=()\n")
-	buf.WriteString("\n")
-
-	writeCommands(buf, cmd)
-	writeFlags(buf, cmd)
-	writeRequiredFlag(buf, cmd)
-	writeRequiredNouns(buf, cmd)
-	writeArgAliases(buf, cmd)
-	buf.WriteString("}\n\n")
-}
-
-// GenBashCompletion generates bash completion file and writes to the passed writer.
-func (c *Command) GenBashCompletion(w io.Writer) error {
-	buf := new(bytes.Buffer)
-	writePreamble(buf, c.Name())
-	if len(c.BashCompletionFunction) > 0 {
-		buf.WriteString(c.BashCompletionFunction + "\n")
-	}
-	gen(buf, c)
-	writePostscript(buf, c.Name())
-
-	_, err := buf.WriteTo(w)
-	return err
-}
-
-func nonCompletableFlag(flag *pflag.Flag) bool {
-	return flag.Hidden || len(flag.Deprecated) > 0
-}
-
-// GenBashCompletionFile generates bash completion file.
-func (c *Command) GenBashCompletionFile(filename string) error {
-	outFile, err := os.Create(filename)
-	if err != nil {
-		return err
-	}
-	defer outFile.Close()
-
-	return c.GenBashCompletion(outFile)
-}
-
-// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag if it exists,
-// and causes your command to report an error if invoked without the flag.
-func (c *Command) MarkFlagRequired(name string) error {
-	return MarkFlagRequired(c.Flags(), name)
-}
-
-// MarkPersistentFlagRequired adds the BashCompOneRequiredFlag annotation to the named persistent flag if it exists,
-// and causes your command to report an error if invoked without the flag.
-func (c *Command) MarkPersistentFlagRequired(name string) error {
-	return MarkFlagRequired(c.PersistentFlags(), name)
-}
-
-// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag if it exists,
-// and causes your command to report an error if invoked without the flag.
-func MarkFlagRequired(flags *pflag.FlagSet, name string) error {
-	return flags.SetAnnotation(name, BashCompOneRequiredFlag, []string{"true"})
-}
-
-// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag, if it exists.
-// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
-func (c *Command) MarkFlagFilename(name string, extensions ...string) error {
-	return MarkFlagFilename(c.Flags(), name, extensions...)
-}
-
-// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists.
-// Generated bash autocompletion will call the bash function f for the flag.
-func (c *Command) MarkFlagCustom(name string, f string) error {
-	return MarkFlagCustom(c.Flags(), name, f)
-}
-
-// MarkPersistentFlagFilename adds the BashCompFilenameExt annotation to the named persistent flag, if it exists.
-// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
-func (c *Command) MarkPersistentFlagFilename(name string, extensions ...string) error {
-	return MarkFlagFilename(c.PersistentFlags(), name, extensions...)
-}
-
-// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag in the flag set, if it exists.
-// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
-func MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...string) error {
-	return flags.SetAnnotation(name, BashCompFilenameExt, extensions)
-}
-
-// MarkFlagCustom adds the BashCompCustom annotation to the named flag in the flag set, if it exists.
-// Generated bash autocompletion will call the bash function f for the flag.
-func MarkFlagCustom(flags *pflag.FlagSet, name string, f string) error {
-	return flags.SetAnnotation(name, BashCompCustom, []string{f})
-}
diff --git a/vendor/github.com/spf13/cobra/bash_completions.md b/vendor/github.com/spf13/cobra/bash_completions.md
deleted file mode 100644
index e79d476..0000000
--- a/vendor/github.com/spf13/cobra/bash_completions.md
+++ /dev/null
@@ -1,221 +0,0 @@
-# Generating Bash Completions For Your Own cobra.Command
-
-Generating bash completions from a cobra command is incredibly easy. An actual program which does so for the kubernetes kubectl binary is as follows:
-
-```go
-package main
-
-import (
-	"io/ioutil"
-	"os"
-
-	"k8s.io/kubernetes/pkg/kubectl/cmd"
-	"k8s.io/kubernetes/pkg/kubectl/cmd/util"
-)
-
-func main() {
-	kubectl := cmd.NewKubectlCommand(util.NewFactory(nil), os.Stdin, ioutil.Discard, ioutil.Discard)
-	kubectl.GenBashCompletionFile("out.sh")
-}
-```
-
-`out.sh` will get you completions of subcommands and flags. Copy it to `/etc/bash_completion.d/` as described [here](https://debian-administration.org/article/316/An_introduction_to_bash_completion_part_1) and reset your terminal to use autocompletion. If you make additional annotations to your code, you can get even more intelligent and flexible behavior.
-
-## Creating your own custom functions
-
-Some more actual code that works in kubernetes:
-
-```bash
-const (
-        bash_completion_func = `__kubectl_parse_get()
-{
-    local kubectl_output out
-    if kubectl_output=$(kubectl get --no-headers "$1" 2>/dev/null); then
-        out=($(echo "${kubectl_output}" | awk '{print $1}'))
-        COMPREPLY=( $( compgen -W "${out[*]}" -- "$cur" ) )
-    fi
-}
-
-__kubectl_get_resource()
-{
-    if [[ ${#nouns[@]} -eq 0 ]]; then
-        return 1
-    fi
-    __kubectl_parse_get ${nouns[${#nouns[@]} -1]}
-    if [[ $? -eq 0 ]]; then
-        return 0
-    fi
-}
-
-__custom_func() {
-    case ${last_command} in
-        kubectl_get | kubectl_describe | kubectl_delete | kubectl_stop)
-            __kubectl_get_resource
-            return
-            ;;
-        *)
-            ;;
-    esac
-}
-`)
-```
-
-And then I set that in my command definition:
-
-```go
-cmds := &cobra.Command{
-	Use:   "kubectl",
-	Short: "kubectl controls the Kubernetes cluster manager",
-	Long: `kubectl controls the Kubernetes cluster manager.
-
-Find more information at https://github.com/GoogleCloudPlatform/kubernetes.`,
-	Run: runHelp,
-	BashCompletionFunction: bash_completion_func,
-}
-```
-
-The `BashCompletionFunction` option is really only valid/useful on the root command. Doing the above will cause `__custom_func()` to be called when the built in processor was unable to find a solution. In the case of kubernetes a valid command might look something like `kubectl get pod [mypod]`. If you type `kubectl get pod [tab][tab]` the `__customc_func()` will run because the cobra.Command only understood "kubectl" and "get." `__custom_func()` will see that the cobra.Command is "kubec [...]
-
-## Have the completions code complete your 'nouns'
-
-In the above example "pod" was assumed to already be typed. But if you want `kubectl get [tab][tab]` to show a list of valid "nouns" you have to set them. Simplified code from `kubectl get` looks like:
-
-```go
-validArgs []string = { "pod", "node", "service", "replicationcontroller" }
-
-cmd := &cobra.Command{
-	Use:     "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)",
-	Short:   "Display one or many resources",
-	Long:    get_long,
-	Example: get_example,
-	Run: func(cmd *cobra.Command, args []string) {
-		err := RunGet(f, out, cmd, args)
-		util.CheckErr(err)
-	},
-	ValidArgs: validArgs,
-}
-```
-
-Notice we put the "ValidArgs" on the "get" subcommand. Doing so will give results like
-
-```bash
-# kubectl get [tab][tab]
-node                 pod                    replicationcontroller  service
-```
-
-## Plural form and shortcuts for nouns
-
-If your nouns have a number of aliases, you can define them alongside `ValidArgs` using `ArgAliases`:
-
-```go
-argAliases []string = { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" }
-
-cmd := &cobra.Command{
-    ...
-	ValidArgs:  validArgs,
-	ArgAliases: argAliases
-}
-```
-
-The aliases are not shown to the user on tab completion, but they are accepted as valid nouns by
-the completion algorithm if entered manually, e.g. in:
-
-```bash
-# kubectl get rc [tab][tab]
-backend        frontend       database 
-```
-
-Note that without declaring `rc` as an alias, the completion algorithm would show the list of nouns
-in this example again instead of the replication controllers.
-
-## Mark flags as required
-
-Most of the time completions will only show subcommands. But if a flag is required to make a subcommand work, you probably want it to show up when the user types [tab][tab].  Marking a flag as 'Required' is incredibly easy.
-
-```go
-cmd.MarkFlagRequired("pod")
-cmd.MarkFlagRequired("container")
-```
-
-and you'll get something like
-
-```bash
-# kubectl exec [tab][tab][tab]
--c            --container=  -p            --pod=  
-```
-
-# Specify valid filename extensions for flags that take a filename
-
-In this example we use --filename= and expect to get a json or yaml file as the argument. To make this easier we annotate the --filename flag with valid filename extensions.
-
-```go
-	annotations := []string{"json", "yaml", "yml"}
-	annotation := make(map[string][]string)
-	annotation[cobra.BashCompFilenameExt] = annotations
-
-	flag := &pflag.Flag{
-		Name:        "filename",
-		Shorthand:   "f",
-		Usage:       usage,
-		Value:       value,
-		DefValue:    value.String(),
-		Annotations: annotation,
-	}
-	cmd.Flags().AddFlag(flag)
-```
-
-Now when you run a command with this filename flag you'll get something like
-
-```bash
-# kubectl create -f 
-test/                         example/                      rpmbuild/
-hello.yml                     test.json
-```
-
-So while there are many other files in the CWD it only shows me subdirs and those with valid extensions.
-
-# Specify custom flag completion
-
-Similar to the filename completion and filtering using cobra.BashCompFilenameExt, you can specify
-a custom flag completion function with cobra.BashCompCustom:
-
-```go
-	annotation := make(map[string][]string)
-	annotation[cobra.BashCompCustom] = []string{"__kubectl_get_namespaces"}
-
-	flag := &pflag.Flag{
-		Name:        "namespace",
-		Usage:       usage,
-		Annotations: annotation,
-	}
-	cmd.Flags().AddFlag(flag)
-```
-
-In addition add the `__handle_namespace_flag` implementation in the `BashCompletionFunction`
-value, e.g.:
-
-```bash
-__kubectl_get_namespaces()
-{
-    local template
-    template="{{ range .items  }}{{ .metadata.name }} {{ end }}"
-    local kubectl_out
-    if kubectl_out=$(kubectl get -o template --template="${template}" namespace 2>/dev/null); then
-        COMPREPLY=( $( compgen -W "${kubectl_out}[*]" -- "$cur" ) )
-    fi
-}
-```
-# Using bash aliases for commands
-
-You can also configure the `bash aliases` for the commands and they will also support completions.
-
-```bash
-alias aliasname=origcommand
-complete -o default -F __start_origcommand aliasname
-
-# and now when you run `aliasname` completion will make
-# suggestions as it did for `origcommand`.
-
-$) aliasname <tab><tab>
-completion     firstcommand   secondcommand
-```
diff --git a/vendor/github.com/spf13/cobra/bash_completions_test.go b/vendor/github.com/spf13/cobra/bash_completions_test.go
deleted file mode 100644
index 02a4f15..0000000
--- a/vendor/github.com/spf13/cobra/bash_completions_test.go
+++ /dev/null
@@ -1,217 +0,0 @@
-package cobra
-
-import (
-	"bytes"
-	"fmt"
-	"os"
-	"os/exec"
-	"regexp"
-	"strings"
-	"testing"
-)
-
-func checkOmit(t *testing.T, found, unexpected string) {
-	if strings.Contains(found, unexpected) {
-		t.Errorf("Got: %q\nBut should not have!\n", unexpected)
-	}
-}
-
-func check(t *testing.T, found, expected string) {
-	if !strings.Contains(found, expected) {
-		t.Errorf("Expecting to contain: \n %q\nGot:\n %q\n", expected, found)
-	}
-}
-
-func checkRegex(t *testing.T, found, pattern string) {
-	matched, err := regexp.MatchString(pattern, found)
-	if err != nil {
-		t.Errorf("Error thrown performing MatchString: \n %s\n", err)
-	}
-	if !matched {
-		t.Errorf("Expecting to match: \n %q\nGot:\n %q\n", pattern, found)
-	}
-}
-
-func runShellCheck(s string) error {
-	excluded := []string{
-		"SC2034", // PREFIX appears unused. Verify it or export it.
-	}
-	cmd := exec.Command("shellcheck", "-s", "bash", "-", "-e", strings.Join(excluded, ","))
-	cmd.Stderr = os.Stderr
-	cmd.Stdout = os.Stdout
-
-	stdin, err := cmd.StdinPipe()
-	if err != nil {
-		return err
-	}
-	go func() {
-		stdin.Write([]byte(s))
-		stdin.Close()
-	}()
-
-	return cmd.Run()
-}
-
-// World worst custom function, just keep telling you to enter hello!
-const bashCompletionFunc = `__custom_func() {
-	COMPREPLY=( "hello" )
-}
-`
-
-func TestBashCompletions(t *testing.T) {
-	rootCmd := &Command{
-		Use:                    "root",
-		ArgAliases:             []string{"pods", "nodes", "services", "replicationcontrollers", "po", "no", "svc", "rc"},
-		ValidArgs:              []string{"pod", "node", "service", "replicationcontroller"},
-		BashCompletionFunction: bashCompletionFunc,
-		Run: emptyRun,
-	}
-	rootCmd.Flags().IntP("introot", "i", -1, "help message for flag introot")
-	rootCmd.MarkFlagRequired("introot")
-
-	// Filename.
-	rootCmd.Flags().String("filename", "", "Enter a filename")
-	rootCmd.MarkFlagFilename("filename", "json", "yaml", "yml")
-
-	// Persistent filename.
-	rootCmd.PersistentFlags().String("persistent-filename", "", "Enter a filename")
-	rootCmd.MarkPersistentFlagFilename("persistent-filename")
-	rootCmd.MarkPersistentFlagRequired("persistent-filename")
-
-	// Filename extensions.
-	rootCmd.Flags().String("filename-ext", "", "Enter a filename (extension limited)")
-	rootCmd.MarkFlagFilename("filename-ext")
-	rootCmd.Flags().String("custom", "", "Enter a filename (extension limited)")
-	rootCmd.MarkFlagCustom("custom", "__complete_custom")
-
-	// Subdirectories in a given directory.
-	rootCmd.Flags().String("theme", "", "theme to use (located in /themes/THEMENAME/)")
-	rootCmd.Flags().SetAnnotation("theme", BashCompSubdirsInDir, []string{"themes"})
-
-	echoCmd := &Command{
-		Use:     "echo [string to echo]",
-		Aliases: []string{"say"},
-		Short:   "Echo anything to the screen",
-		Long:    "an utterly useless command for testing.",
-		Example: "Just run cobra-test echo",
-		Run:     emptyRun,
-	}
-
-	echoCmd.Flags().String("filename", "", "Enter a filename")
-	echoCmd.MarkFlagFilename("filename", "json", "yaml", "yml")
-	echoCmd.Flags().String("config", "", "config to use (located in /config/PROFILE/)")
-	echoCmd.Flags().SetAnnotation("config", BashCompSubdirsInDir, []string{"config"})
-
-	printCmd := &Command{
-		Use:   "print [string to print]",
-		Args:  MinimumNArgs(1),
-		Short: "Print anything to the screen",
-		Long:  "an absolutely utterly useless command for testing.",
-		Run:   emptyRun,
-	}
-
-	deprecatedCmd := &Command{
-		Use:        "deprecated [can't do anything here]",
-		Args:       NoArgs,
-		Short:      "A command which is deprecated",
-		Long:       "an absolutely utterly useless command for testing deprecation!.",
-		Deprecated: "Please use echo instead",
-		Run:        emptyRun,
-	}
-
-	colonCmd := &Command{
-		Use: "cmd:colon",
-		Run: emptyRun,
-	}
-
-	timesCmd := &Command{
-		Use:        "times [# times] [string to echo]",
-		SuggestFor: []string{"counts"},
-		Args:       OnlyValidArgs,
-		ValidArgs:  []string{"one", "two", "three", "four"},
-		Short:      "Echo anything to the screen more times",
-		Long:       "a slightly useless command for testing.",
-		Run:        emptyRun,
-	}
-
-	echoCmd.AddCommand(timesCmd)
-	rootCmd.AddCommand(echoCmd, printCmd, deprecatedCmd, colonCmd)
-
-	buf := new(bytes.Buffer)
-	rootCmd.GenBashCompletion(buf)
-	output := buf.String()
-
-	check(t, output, "_root")
-	check(t, output, "_root_echo")
-	check(t, output, "_root_echo_times")
-	check(t, output, "_root_print")
-	check(t, output, "_root_cmd__colon")
-
-	// check for required flags
-	check(t, output, `must_have_one_flag+=("--introot=")`)
-	check(t, output, `must_have_one_flag+=("--persistent-filename=")`)
-	// check for custom completion function
-	check(t, output, `COMPREPLY=( "hello" )`)
-	// check for required nouns
-	check(t, output, `must_have_one_noun+=("pod")`)
-	// check for noun aliases
-	check(t, output, `noun_aliases+=("pods")`)
-	check(t, output, `noun_aliases+=("rc")`)
-	checkOmit(t, output, `must_have_one_noun+=("pods")`)
-	// check for filename extension flags
-	check(t, output, `flags_completion+=("_filedir")`)
-	// check for filename extension flags
-	check(t, output, `must_have_one_noun+=("three")`)
-	// check for filename extension flags
-	check(t, output, fmt.Sprintf(`flags_completion+=("__%s_handle_filename_extension_flag json|yaml|yml")`, rootCmd.Name()))
-	// check for filename extension flags in a subcommand
-	checkRegex(t, output, fmt.Sprintf(`_root_echo\(\)\n{[^}]*flags_completion\+=\("__%s_handle_filename_extension_flag json\|yaml\|yml"\)`, rootCmd.Name()))
-	// check for custom flags
-	check(t, output, `flags_completion+=("__complete_custom")`)
-	// check for subdirs_in_dir flags
-	check(t, output, fmt.Sprintf(`flags_completion+=("__%s_handle_subdirs_in_dir_flag themes")`, rootCmd.Name()))
-	// check for subdirs_in_dir flags in a subcommand
-	checkRegex(t, output, fmt.Sprintf(`_root_echo\(\)\n{[^}]*flags_completion\+=\("__%s_handle_subdirs_in_dir_flag config"\)`, rootCmd.Name()))
-
-	checkOmit(t, output, deprecatedCmd.Name())
-
-	// If available, run shellcheck against the script.
-	if err := exec.Command("which", "shellcheck").Run(); err != nil {
-		return
-	}
-	if err := runShellCheck(output); err != nil {
-		t.Fatalf("shellcheck failed: %v", err)
-	}
-}
-
-func TestBashCompletionHiddenFlag(t *testing.T) {
-	c := &Command{Use: "c", Run: emptyRun}
-
-	const flagName = "hiddenFlag"
-	c.Flags().Bool(flagName, false, "")
-	c.Flags().MarkHidden(flagName)
-
-	buf := new(bytes.Buffer)
-	c.GenBashCompletion(buf)
-	output := buf.String()
-
-	if strings.Contains(output, flagName) {
-		t.Errorf("Expected completion to not include %q flag: Got %v", flagName, output)
-	}
-}
-
-func TestBashCompletionDeprecatedFlag(t *testing.T) {
-	c := &Command{Use: "c", Run: emptyRun}
-
-	const flagName = "deprecated-flag"
-	c.Flags().Bool(flagName, false, "")
-	c.Flags().MarkDeprecated(flagName, "use --not-deprecated instead")
-
-	buf := new(bytes.Buffer)
-	c.GenBashCompletion(buf)
-	output := buf.String()
-
-	if strings.Contains(output, flagName) {
-		t.Errorf("expected completion to not include %q flag: Got %v", flagName, output)
-	}
-}
diff --git a/vendor/github.com/spf13/cobra/cobra.go b/vendor/github.com/spf13/cobra/cobra.go
deleted file mode 100644
index 7010fd1..0000000
--- a/vendor/github.com/spf13/cobra/cobra.go
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright © 2013 Steve Francia <sp...@spf13.com>.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Commands similar to git, go tools and other modern CLI tools
-// inspired by go, go-Commander, gh and subcommand
-
-package cobra
-
-import (
-	"fmt"
-	"io"
-	"reflect"
-	"strconv"
-	"strings"
-	"text/template"
-	"unicode"
-)
-
-var templateFuncs = template.FuncMap{
-	"trim":                    strings.TrimSpace,
-	"trimRightSpace":          trimRightSpace,
-	"trimTrailingWhitespaces": trimRightSpace,
-	"appendIfNotPresent":      appendIfNotPresent,
-	"rpad":                    rpad,
-	"gt":                      Gt,
-	"eq":                      Eq,
-}
-
-var initializers []func()
-
-// EnablePrefixMatching allows to set automatic prefix matching. Automatic prefix matching can be a dangerous thing
-// to automatically enable in CLI tools.
-// Set this to true to enable it.
-var EnablePrefixMatching = false
-
-// EnableCommandSorting controls sorting of the slice of commands, which is turned on by default.
-// To disable sorting, set it to false.
-var EnableCommandSorting = true
-
-// MousetrapHelpText enables an information splash screen on Windows
-// if the CLI is started from explorer.exe.
-// To disable the mousetrap, just set this variable to blank string ("").
-// Works only on Microsoft Windows.
-var MousetrapHelpText string = `This is a command line tool.
-
-You need to open cmd.exe and run it from there.
-`
-
-// AddTemplateFunc adds a template function that's available to Usage and Help
-// template generation.
-func AddTemplateFunc(name string, tmplFunc interface{}) {
-	templateFuncs[name] = tmplFunc
-}
-
-// AddTemplateFuncs adds multiple template functions that are available to Usage and
-// Help template generation.
-func AddTemplateFuncs(tmplFuncs template.FuncMap) {
-	for k, v := range tmplFuncs {
-		templateFuncs[k] = v
-	}
-}
-
-// OnInitialize sets the passed functions to be run when each command's
-// Execute method is called.
-func OnInitialize(y ...func()) {
-	initializers = append(initializers, y...)
-}
-
-// FIXME Gt is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.
-
-// Gt takes two types and checks whether the first type is greater than the second. In case of types Arrays, Chans,
-// Maps and Slices, Gt will compare their lengths. Ints are compared directly while strings are first parsed as
-// ints and then compared.
-func Gt(a interface{}, b interface{}) bool {
-	var left, right int64
-	av := reflect.ValueOf(a)
-
-	switch av.Kind() {
-	case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
-		left = int64(av.Len())
-	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
-		left = av.Int()
-	case reflect.String:
-		left, _ = strconv.ParseInt(av.String(), 10, 64)
-	}
-
-	bv := reflect.ValueOf(b)
-
-	switch bv.Kind() {
-	case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
-		right = int64(bv.Len())
-	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
-		right = bv.Int()
-	case reflect.String:
-		right, _ = strconv.ParseInt(bv.String(), 10, 64)
-	}
-
-	return left > right
-}
-
-// FIXME Eq is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.
-
-// Eq takes two types and checks whether they are equal. Supported types are int and string. Unsupported types will panic.
-func Eq(a interface{}, b interface{}) bool {
-	av := reflect.ValueOf(a)
-	bv := reflect.ValueOf(b)
-
-	switch av.Kind() {
-	case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
-		panic("Eq called on unsupported type")
-	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
-		return av.Int() == bv.Int()
-	case reflect.String:
-		return av.String() == bv.String()
-	}
-	return false
-}
-
-func trimRightSpace(s string) string {
-	return strings.TrimRightFunc(s, unicode.IsSpace)
-}
-
-// FIXME appendIfNotPresent is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.
-
-// appendIfNotPresent will append stringToAppend to the end of s, but only if it's not yet present in s.
-func appendIfNotPresent(s, stringToAppend string) string {
-	if strings.Contains(s, stringToAppend) {
-		return s
-	}
-	return s + " " + stringToAppend
-}
-
-// rpad adds padding to the right of a string.
-func rpad(s string, padding int) string {
-	template := fmt.Sprintf("%%-%ds", padding)
-	return fmt.Sprintf(template, s)
-}
-
-// tmpl executes the given template text on data, writing the result to w.
-func tmpl(w io.Writer, text string, data interface{}) error {
-	t := template.New("top")
-	t.Funcs(templateFuncs)
-	template.Must(t.Parse(text))
-	return t.Execute(w, data)
-}
-
-// ld compares two strings and returns the levenshtein distance between them.
-func ld(s, t string, ignoreCase bool) int {
-	if ignoreCase {
-		s = strings.ToLower(s)
-		t = strings.ToLower(t)
-	}
-	d := make([][]int, len(s)+1)
-	for i := range d {
-		d[i] = make([]int, len(t)+1)
-	}
-	for i := range d {
-		d[i][0] = i
-	}
-	for j := range d[0] {
-		d[0][j] = j
-	}
-	for j := 1; j <= len(t); j++ {
-		for i := 1; i <= len(s); i++ {
-			if s[i-1] == t[j-1] {
-				d[i][j] = d[i-1][j-1]
-			} else {
-				min := d[i-1][j]
-				if d[i][j-1] < min {
-					min = d[i][j-1]
-				}
-				if d[i-1][j-1] < min {
-					min = d[i-1][j-1]
-				}
-				d[i][j] = min + 1
-			}
-		}
-
-	}
-	return d[len(s)][len(t)]
-}
-
-func stringInSlice(a string, list []string) bool {
-	for _, b := range list {
-		if b == a {
... 199302 lines suppressed ...