From 9f775ca9527e7a1720d48abe05aace09578c9017 Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Tue, 23 Jun 2020 17:49:08 +1000 Subject: [PATCH] Indicators: Add support for correlation coefficient (#519) * Add support for correlation coefficient code * Bump ta depends * Bump gct-ta depends version --- gctscript/examples/ta/correlation.gct | 15 +++ gctscript/modules/gct/common.go | 28 ++++++ gctscript/modules/gct/common_test.go | 22 +++-- .../modules/ta/indicators/correlation.go | 91 +++++++++++++++++++ gctscript/modules/ta/ta_test.go | 4 +- gctscript/modules/ta/ta_types.go | 17 ++-- go.mod | 2 +- go.sum | 42 +-------- 8 files changed, 162 insertions(+), 59 deletions(-) create mode 100644 gctscript/examples/ta/correlation.gct create mode 100644 gctscript/modules/ta/indicators/correlation.go diff --git a/gctscript/examples/ta/correlation.gct b/gctscript/examples/ta/correlation.gct new file mode 100644 index 00000000..a2dce4f7 --- /dev/null +++ b/gctscript/examples/ta/correlation.gct @@ -0,0 +1,15 @@ +fmt := import("fmt") +exch := import("exchange") +t := import("times") +cc := import("indicator/correlationcoefficient") + +load := func() { + start := t.date(2017, 8 , 17 , 0 , 0 , 0, 0) + end := t.add_date(start, 0, 6 , 0) + ohlcvDataBTC := exch.ohlcv("binance", "BTC-USDT", "-", "SPOT", start, end, "1d") + ohlcvDataETH := exch.ohlcv("binance", "ETH-USDT", "-", "SPOT", start, end, "1d") + ret := cc.calculate(ohlcvDataBTC.candles, ohlcvDataETH.candles, 20) + fmt.println(ret) +} + +load() diff --git a/gctscript/modules/gct/common.go b/gctscript/modules/gct/common.go index 7857f2c1..65a4c330 100644 --- a/gctscript/modules/gct/common.go +++ b/gctscript/modules/gct/common.go @@ -53,6 +53,8 @@ func WriteAsCSV(args ...objects.Object) (objects.Object, error) { temp, err = convertRSI(args[i]) case indicators.SimpleMovingAverage: temp, err = convertSMA(args[i]) + case indicators.CorrelationCoefficient: + temp, err = convertCorrelationCoefficient(args[i]) case indicators.OHLCV: temp, err = convertOHLCV(args[i]) front = true @@ -387,6 +389,32 @@ func convertSMA(a objects.Object) ([][]string, error) { return bucket, nil } +func convertCorrelationCoefficient(a objects.Object) ([][]string, error) { + obj, ok := objects.ToInterface(a).(*indicators.Correlation) + if !ok { + return nil, errors.New("casting failure") + } + + var bucket = [][]string{ + { + indicators.CorrelationCoefficient, + }, + { + fmt.Sprintf("Period:%d", obj.Period), + }, + } + + var val string + for i := range obj.Value { + val, ok = objects.ToString(obj.Value[i]) + if !ok { + return nil, errors.New("cannot convert object to string") + } + bucket = append(bucket, []string{val}) + } + return bucket, nil +} + func convertOHLCV(a objects.Object) ([][]string, error) { obj, ok := objects.ToInterface(a).(*OHLCV) if !ok { diff --git a/gctscript/modules/gct/common_test.go b/gctscript/modules/gct/common_test.go index bf3f114c..368956e2 100644 --- a/gctscript/modules/gct/common_test.go +++ b/gctscript/modules/gct/common_test.go @@ -12,16 +12,17 @@ import ( ) var ( - atrPayload = &indicators.ATR{Array: oneElement} - bbandsPayload = &indicators.BBands{Array: threeElement} - emaPayload = &indicators.EMA{Array: oneElement} - macdPayload = &indicators.MACD{Array: threeElement} - mfiPayload = &indicators.MFI{Array: oneElement} - obvPayload = &indicators.OBV{Array: oneElement} - rsiPayload = &indicators.RSI{Array: oneElement} - smaPayload = &indicators.SMA{Array: oneElement} - ohlcPayload = &OHLCV{Map: ohlcdata} - unhandled = &objects.Array{} + atrPayload = &indicators.ATR{Array: oneElement} + bbandsPayload = &indicators.BBands{Array: threeElement} + emaPayload = &indicators.EMA{Array: oneElement} + macdPayload = &indicators.MACD{Array: threeElement} + mfiPayload = &indicators.MFI{Array: oneElement} + obvPayload = &indicators.OBV{Array: oneElement} + rsiPayload = &indicators.RSI{Array: oneElement} + smaPayload = &indicators.SMA{Array: oneElement} + correlationPayload = &indicators.Correlation{Array: oneElement} + ohlcPayload = &OHLCV{Map: ohlcdata} + unhandled = &objects.Array{} oneElement = objects.Array{ Value: []objects.Object{ @@ -157,6 +158,7 @@ func TestCommonWriteToCSV(t *testing.T) { obvPayload, rsiPayload, smaPayload, + correlationPayload, ohlcPayload) if err != nil { t.Fatal(err) diff --git a/gctscript/modules/ta/indicators/correlation.go b/gctscript/modules/ta/indicators/correlation.go new file mode 100644 index 00000000..bd6a5ee0 --- /dev/null +++ b/gctscript/modules/ta/indicators/correlation.go @@ -0,0 +1,91 @@ +package indicators + +import ( + "errors" + "fmt" + "math" + "strings" + + objects "github.com/d5/tengo/v2" + "github.com/thrasher-corp/gct-ta/indicators" + "github.com/thrasher-corp/gocryptotrader/gctscript/modules" + "github.com/thrasher-corp/gocryptotrader/gctscript/wrappers/validator" +) + +// CorrelationCoefficientModule indicator commands +var CorrelationCoefficientModule = map[string]objects.Object{ + "calculate": &objects.UserFunction{Name: "calculate", Value: correlationCoefficient}, +} + +// CorrelationCoefficient is the string constant +const CorrelationCoefficient = "Correlation Coefficient" + +// Correlation defines a custom correlation coefficient indicator tengo object +type Correlation struct { + objects.Array + Period int +} + +// TypeName returns the name of the custom type. +func (c *Correlation) TypeName() string { + return CorrelationCoefficient +} + +func correlationCoefficient(args ...objects.Object) (objects.Object, error) { + if len(args) != 3 { + return nil, objects.ErrWrongNumArguments + } + + r := new(Correlation) + if validator.IsTestExecution.Load() == true { + return r, nil + } + + var allErrors []string + ohlcvProcessor := func(args []objects.Object, idx int) ([]float64, error) { + ohlcvInput := objects.ToInterface(args[idx]) + ohlcvInputData, valid := ohlcvInput.([]interface{}) + if !valid { + return nil, fmt.Errorf(modules.ErrParameterConvertFailed, OHLCV) + } + + var ohlcvClose []float64 + for x := range ohlcvInputData { + t := ohlcvInputData[x].([]interface{}) + value, err := toFloat64(t[4]) + if err != nil { + allErrors = append(allErrors, err.Error()) + } + ohlcvClose = append(ohlcvClose, value) + } + return ohlcvClose, nil + } + + closures1, err := ohlcvProcessor(args, 0) + if err != nil { + return nil, err + } + + closures2, err := ohlcvProcessor(args, 1) + if err != nil { + return nil, err + } + + inTimePeriod, ok := objects.ToInt(args[2]) + if !ok { + allErrors = append(allErrors, fmt.Sprintf(modules.ErrParameterConvertFailed, inTimePeriod)) + } + + if len(allErrors) > 0 { + return nil, errors.New(strings.Join(allErrors, ", ")) + } + + r.Period = inTimePeriod + + ret := indicators.CorrelationCoefficient(closures1, closures2, inTimePeriod) + for x := range ret { + r.Value = append(r.Value, &objects.Float{Value: math.Round(ret[x]*100) / 100}) + } + + return r, nil +} diff --git a/gctscript/modules/ta/ta_test.go b/gctscript/modules/ta/ta_test.go index 7ec1e4bc..04813a72 100644 --- a/gctscript/modules/ta/ta_test.go +++ b/gctscript/modules/ta/ta_test.go @@ -11,7 +11,7 @@ func TestGetModuleMap(t *testing.T) { if xType != reflect.Slice { t.Fatalf("AllModuleNames() should return slice instead received: %v", x) } - if len(x) != 8 { - t.Fatalf("unexpected results received expected 7 received: %v", len(x)) + if len(x) != 9 { + t.Fatalf("unexpected results received expected 9 received: %v", len(x)) } } diff --git a/gctscript/modules/ta/ta_types.go b/gctscript/modules/ta/ta_types.go index 9c7139ec..03b5bc55 100644 --- a/gctscript/modules/ta/ta_types.go +++ b/gctscript/modules/ta/ta_types.go @@ -7,12 +7,13 @@ import ( // Modules map of all loadable modules var Modules = map[string]map[string]tengo.Object{ - "indicator/bbands": indicators.BBandsModule, - "indicator/macd": indicators.MACDModule, - "indicator/ema": indicators.EMAModule, - "indicator/sma": indicators.SMAModule, - "indicator/rsi": indicators.RsiModule, - "indicator/obv": indicators.ObvModule, - "indicator/mfi": indicators.MfiModule, - "indicator/atr": indicators.AtrModule, + "indicator/bbands": indicators.BBandsModule, + "indicator/macd": indicators.MACDModule, + "indicator/ema": indicators.EMAModule, + "indicator/sma": indicators.SMAModule, + "indicator/rsi": indicators.RsiModule, + "indicator/obv": indicators.ObvModule, + "indicator/mfi": indicators.MfiModule, + "indicator/atr": indicators.AtrModule, + "indicator/correlationcoefficient": indicators.CorrelationCoefficientModule, } diff --git a/go.mod b/go.mod index 914586b5..f5671de0 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/pquerna/otp v1.2.0 github.com/spf13/viper v1.7.0 github.com/stretchr/testify v1.5.1 // indirect - github.com/thrasher-corp/gct-ta v0.0.0-20200423101437-dc6b098dc762 + github.com/thrasher-corp/gct-ta v0.0.0-20200623072738-f2b55b7f9f41 github.com/thrasher-corp/goose v2.7.0-rc4.0.20191002032028-0f2c2a27abdb+incompatible github.com/thrasher-corp/sqlboiler v1.0.1-0.20191001234224-71e17f37a85e github.com/toorop/go-pusher v0.0.0-20180521062818-4521e2eb39fb diff --git a/go.sum b/go.sum index 54c3f15b..df2a71f0 100644 --- a/go.sum +++ b/go.sum @@ -22,8 +22,6 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 h1:P5U+E4x5OkVEKQDklVPmzs71WM56RTTRqV4OrDC//Y4= -github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5/go.mod h1:976q2ETgjT2snVCf2ZaBnyBbVoPERGjUz+0sofzEfro= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apmckinlay/gsuneido v0.0.0-20180907175622-1f10244968e3/go.mod h1:hJnaqxrCRgMCTWtpNz9XUFkBCREiQdlcyK6YNmOfroM= @@ -55,8 +53,6 @@ github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/d5/tengo/v2 v2.5.0 h1:psncU93ixOaLbWZ2AOVjTtQdK0orJUW0jykj6EMTbss= -github.com/d5/tengo/v2 v2.5.0/go.mod h1:XRGjEs5I9jYIKTxly6HCF8oiiilk5E/RYXOZ5b0DZC8= github.com/d5/tengo/v2 v2.6.0 h1:D0cJtpiBzaLJ/Smv6nnUc/LIfO46oKwDx85NZtIRNRI= github.com/d5/tengo/v2 v2.6.0/go.mod h1:XRGjEs5I9jYIKTxly6HCF8oiiilk5E/RYXOZ5b0DZC8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -123,10 +119,6 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGa github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ= -github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -149,8 +141,6 @@ github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerX github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -161,18 +151,6 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= -github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= -github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= -github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= -github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= -github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= -github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= -github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= -github.com/jcmturner/gokrb5/v8 v8.2.0 h1:lzPl/30ZLkTveYsYZPKMcgXc8MbnE6RsTd4F9KgiLtk= -github.com/jcmturner/gokrb5/v8 v8.2.0/go.mod h1:T1hnNppQsBtxW0tCHMHTkAt8n/sABdzZgZdoFrZaZNM= -github.com/jcmturner/rpc/v2 v2.0.2 h1:gMB4IwRXYsWw4Bc6o/az2HJgFUA1ffSh90i26ZJ6Xl0= -github.com/jcmturner/rpc/v2 v2.0.2/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -192,8 +170,6 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.6.0 h1:I5DPxhYJChW9KYc66se+oKFFQX6VuQrKiprsX6ivRZc= -github.com/lib/pq v1.6.0/go.mod h1:4vXEAYvW1fRQ2/FhZ78H73A60MHw1geSm145z2mdY1g= github.com/lib/pq v1.7.0 h1:h93mCPfUSkaul3Ka/VG8uZdmW1uMHDGxzu0NWHuJmHY= github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -201,8 +177,6 @@ github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzR github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-sqlite3 v1.13.0 h1:LnJI81JidiW9r7pS/hXe6cFeO5EXNq7KbfvoJLRI69c= -github.com/mattn/go-sqlite3 v1.13.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA= github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -289,8 +263,8 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/thrasher-corp/gct-ta v0.0.0-20200423101437-dc6b098dc762 h1:y+GonaRLfYBos8e//YiPi9aJQ/InsERnf3dmEZftKQE= -github.com/thrasher-corp/gct-ta v0.0.0-20200423101437-dc6b098dc762/go.mod h1:z51vdK6i7okTmwu9tPh9+W8nqPWv80B/nMZUCX17fwY= +github.com/thrasher-corp/gct-ta v0.0.0-20200623072738-f2b55b7f9f41 h1:oFqn2u2F6cnHskAlQ3j702hBbEfn+5bbIl90pQz9IPo= +github.com/thrasher-corp/gct-ta v0.0.0-20200623072738-f2b55b7f9f41/go.mod h1:z51vdK6i7okTmwu9tPh9+W8nqPWv80B/nMZUCX17fwY= github.com/thrasher-corp/goose v2.7.0-rc4.0.20191002032028-0f2c2a27abdb+incompatible h1:SPqQlzFu3g4P9wK2iwJaWVLJWcQ5rYc43rvXBJ8RSCY= github.com/thrasher-corp/goose v2.7.0-rc4.0.20191002032028-0f2c2a27abdb+incompatible/go.mod h1:2Bb/y0SpnUWOlPU5kDz+ctvb3w/mzuAVqxy7JPfBzgw= github.com/thrasher-corp/sqlboiler v1.0.1-0.20191001234224-71e17f37a85e h1:4kYBo2YhqqFY7aZPPEhrtPTMoAq4iCsoDITd3jseRbY= @@ -323,7 +297,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 h1:QmwruyY+bKbDDL0BaglrbZABEali68eoMFhTZpCjYVA= golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -361,9 +334,8 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -391,8 +363,7 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190927073244-c990c680b611/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191003212358-c178f38b412c h1:6Zx7DRlKXf79yfxuQ/7GqV3w2y7aDsk6bGg0MzF5RVU= -golang.org/x/sys v0.0.0-20191003212358-c178f38b412c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -468,11 +439,6 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= -gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= -gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= -gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= -gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=