From 5517b88ea4b37d33998039eb6b358240a464574a Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sat, 21 Jan 2023 22:06:35 -0800 Subject: [PATCH] Initial commit --- Makefile | 57 ++++ dialog.go | 93 ++++++ go.mod | 42 +++ go.sum | 673 ++++++++++++++++++++++++++++++++++++++++ icons.go | 61 ++++ icons/aim_guy.png | Bin 0 -> 1306 bytes icons/aol_icon.png | Bin 0 -> 1465 bytes icons/attention.png | Bin 0 -> 343 bytes icons/bomb.png | Bin 0 -> 799 bytes icons/bomb_dynamite.png | Bin 0 -> 474 bytes icons/bomb_grenade.png | Bin 0 -> 460 bytes icons/bubble_i.png | Bin 0 -> 309 bytes icons/bubble_q.png | Bin 0 -> 317 bytes icons/bulb.png | Bin 0 -> 1031 bytes icons/butterfly.png | Bin 0 -> 1618 bytes icons/cake.png | Bin 0 -> 523 bytes icons/circularsaw.png | Bin 0 -> 593 bytes icons/control_panel.png | Bin 0 -> 482 bytes icons/cow.png | Bin 0 -> 547 bytes icons/defrag.png | Bin 0 -> 550 bytes icons/disk_blu.png | Bin 0 -> 1027 bytes icons/disk_blu_lbl.png | Bin 0 -> 902 bytes icons/disk_org.png | Bin 0 -> 311 bytes icons/disk_red.png | Bin 0 -> 543 bytes icons/disk_red_lbl.png | Bin 0 -> 910 bytes icons/disk_skull.png | Bin 0 -> 370 bytes icons/disk_yel.png | Bin 0 -> 304 bytes icons/dos.png | Bin 0 -> 571 bytes icons/e_orbit.png | Bin 0 -> 454 bytes icons/error.png | Bin 0 -> 342 bytes icons/error2.png | Bin 0 -> 983 bytes icons/error3.png | Bin 0 -> 1356 bytes icons/error4.png | Bin 0 -> 734 bytes icons/file_cabinet.png | Bin 0 -> 455 bytes icons/find.png | Bin 0 -> 375 bytes icons/fortunecookie.png | Bin 0 -> 449 bytes icons/garbage_empty.png | Bin 0 -> 326 bytes icons/garbage_full.png | Bin 0 -> 495 bytes icons/gun.png | Bin 0 -> 316 bytes icons/hammer.png | Bin 0 -> 368 bytes icons/heart.png | Bin 0 -> 912 bytes icons/help.png | Bin 0 -> 426 bytes icons/hub.png | Bin 0 -> 530 bytes icons/hwinfo.png | Bin 0 -> 493 bytes icons/ic_a.png | Bin 0 -> 341 bytes icons/keys.png | Bin 0 -> 451 bytes icons/keys2.png | Bin 0 -> 463 bytes icons/keys3.png | Bin 0 -> 1391 bytes icons/labtec.png | Bin 0 -> 419 bytes icons/mac.png | Bin 0 -> 426 bytes icons/mail.png | Bin 0 -> 1195 bytes icons/mail_deleted.png | Bin 0 -> 1285 bytes icons/mailbox.png | Bin 0 -> 404 bytes icons/mouth.png | Bin 0 -> 327 bytes icons/mycomputer.png | Bin 0 -> 466 bytes icons/mycomputer2.png | Bin 0 -> 813 bytes icons/mycomputer3.png | Bin 0 -> 411 bytes icons/newspaper.png | Bin 0 -> 369 bytes icons/peripheral.png | Bin 0 -> 475 bytes icons/plant_leaf.png | Bin 0 -> 331 bytes icons/radiation.png | Bin 0 -> 501 bytes icons/ram.png | Bin 0 -> 392 bytes icons/recycle.png | Bin 0 -> 401 bytes icons/recycle2.png | Bin 0 -> 617 bytes icons/scanner.png | Bin 0 -> 375 bytes icons/screw.png | Bin 0 -> 998 bytes icons/screw2.png | Bin 0 -> 311 bytes icons/setup.png | Bin 0 -> 450 bytes icons/sknife.png | Bin 0 -> 422 bytes icons/skull.png | Bin 0 -> 302 bytes icons/skull2.png | Bin 0 -> 1699 bytes icons/skull3.png | Bin 0 -> 390 bytes icons/tux.png | Bin 0 -> 1536 bytes icons/tux_config.png | Bin 0 -> 949 bytes icons/ups.png | Bin 0 -> 498 bytes icons/zipdisk.png | Bin 0 -> 338 bytes icons/zipdisks.png | Bin 0 -> 378 bytes main.go | 131 ++++++++ main_window.go | 120 +++++++ version.go | 9 + 80 files changed, 1186 insertions(+) create mode 100644 Makefile create mode 100644 dialog.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 icons.go create mode 100644 icons/aim_guy.png create mode 100644 icons/aol_icon.png create mode 100644 icons/attention.png create mode 100644 icons/bomb.png create mode 100644 icons/bomb_dynamite.png create mode 100644 icons/bomb_grenade.png create mode 100644 icons/bubble_i.png create mode 100644 icons/bubble_q.png create mode 100644 icons/bulb.png create mode 100644 icons/butterfly.png create mode 100644 icons/cake.png create mode 100644 icons/circularsaw.png create mode 100644 icons/control_panel.png create mode 100644 icons/cow.png create mode 100644 icons/defrag.png create mode 100644 icons/disk_blu.png create mode 100644 icons/disk_blu_lbl.png create mode 100644 icons/disk_org.png create mode 100644 icons/disk_red.png create mode 100644 icons/disk_red_lbl.png create mode 100644 icons/disk_skull.png create mode 100644 icons/disk_yel.png create mode 100644 icons/dos.png create mode 100644 icons/e_orbit.png create mode 100644 icons/error.png create mode 100644 icons/error2.png create mode 100644 icons/error3.png create mode 100644 icons/error4.png create mode 100644 icons/file_cabinet.png create mode 100644 icons/find.png create mode 100644 icons/fortunecookie.png create mode 100644 icons/garbage_empty.png create mode 100644 icons/garbage_full.png create mode 100644 icons/gun.png create mode 100644 icons/hammer.png create mode 100644 icons/heart.png create mode 100644 icons/help.png create mode 100644 icons/hub.png create mode 100644 icons/hwinfo.png create mode 100644 icons/ic_a.png create mode 100644 icons/keys.png create mode 100644 icons/keys2.png create mode 100644 icons/keys3.png create mode 100644 icons/labtec.png create mode 100644 icons/mac.png create mode 100644 icons/mail.png create mode 100644 icons/mail_deleted.png create mode 100644 icons/mailbox.png create mode 100644 icons/mouth.png create mode 100644 icons/mycomputer.png create mode 100644 icons/mycomputer2.png create mode 100644 icons/mycomputer3.png create mode 100644 icons/newspaper.png create mode 100644 icons/peripheral.png create mode 100644 icons/plant_leaf.png create mode 100644 icons/radiation.png create mode 100644 icons/ram.png create mode 100644 icons/recycle.png create mode 100644 icons/recycle2.png create mode 100644 icons/scanner.png create mode 100644 icons/screw.png create mode 100644 icons/screw2.png create mode 100644 icons/setup.png create mode 100644 icons/sknife.png create mode 100644 icons/skull.png create mode 100644 icons/skull2.png create mode 100644 icons/skull3.png create mode 100644 icons/tux.png create mode 100644 icons/tux_config.png create mode 100644 icons/ups.png create mode 100644 icons/zipdisk.png create mode 100644 icons/zipdisks.png create mode 100644 main.go create mode 100644 main_window.go create mode 100644 version.go diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..befd841 --- /dev/null +++ b/Makefile @@ -0,0 +1,57 @@ +ALL: build + +SHELL := /bin/bash + +VERSION=$(shell egrep -e 'Version\s+=' version.go | head -n 1 | cut -d '"' -f 2) +BUILD=$(shell git describe --always) +BUILD_DATE=$(shell date +"%Y-%m-%dT%H:%M:%S%z") +CURDIR=$(shell curdir) + +# Inject the build version (commit hash) into the executable. +LDFLAGS := -ldflags "-X main.Build=$(BUILD) -X main.BuildDate=$(BUILD_DATE)" +LDFLAGS_W := -ldflags "-X main.Build=$(BUILD) -X main.BuildDate=$(BUILD_DATE) -H windowsgui" + +# `make setup` to set up a new environment, pull dependencies, etc. +.PHONY: setup +setup: clean + go get ./... + +# `make build` to build the binary. +.PHONY: build +build: + go build $(LDFLAGS) -o errorgen . + +# `make install` to install the Go binaries to your GOPATH. +.PHONY: install +install: + go install git.kirsle.net/apps/errorgen + +# `make mingw` to cross-compile a Windows binary with mingw. +.PHONY: mingw +mingw: + env CGO_ENABLED="1" CC="/usr/bin/x86_64-w64-mingw32-gcc" \ + GOOS="windows" CGO_LDFLAGS="-lmingw32 -lSDL2" CGO_CFLAGS="-D_REENTRANT" \ + go build $(LDFLAGS_W) -i -o bin/sketchymaze.exe cmd/doodle/main.go + env CGO_ENABLED="1" CC="/usr/bin/x86_64-w64-mingw32-gcc" \ + GOOS="windows" CGO_LDFLAGS="-lmingw32 -lSDL2" CGO_CFLAGS="-D_REENTRANT" \ + go build $(LDFLAGS) -i -o bin/doodad.exe cmd/doodad/main.go + +# `make mingw32` to cross-compile a Windows binary with mingw (32-bit). +.PHONY: mingw32 +mingw32: + env CGO_ENABLED="1" CC="/usr/bin/i686-w64-mingw32-gcc" \ + GOOS="windows" CGO_LDFLAGS="-lmingw32 -lSDL2" CGO_CFLAGS="-D_REENTRANT" \ + go build $(LDFLAGS_W) -i -o bin/sketchymaze.exe cmd/doodle/main.go + env CGO_ENABLED="1" CC="/usr/bin/i686-w64-mingw32-gcc" \ + GOOS="windows" CGO_LDFLAGS="-lmingw32 -lSDL2" CGO_CFLAGS="-D_REENTRANT" \ + go build $(LDFLAGS) -i -o bin/doodad.exe cmd/doodad/main.go + +# `make run` to run it from source. +.PHONY: run +run: + go run . + +# `make clean` to cleanup the repo. +.PHONY: clean +clean: + rm errorgen \ No newline at end of file diff --git a/dialog.go b/dialog.go new file mode 100644 index 0000000..8c4cc23 --- /dev/null +++ b/dialog.go @@ -0,0 +1,93 @@ +package main + +import ( + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/canvas" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/widget" +) + +// Dialog settings for an individual Error Message popup. +type Dialog struct { + Icon Icon + Title string + Message string + Buttons []*Button +} + +// Button settings. +type Button struct { + Label string + Disabled bool +} + +func (d Dialog) Show() { + // Validate and set defaults. + if d.Title == "" { + d.Title = DefaultTitle + } + if d.Message == "" { + d.Message = DefaultMessage + } + if d.Icon.Empty() { + d.Icon = icons[DefaultIcon] + } + + // If no buttons have text, set a default button. + var hasButtons bool + for _, btn := range d.Buttons { + if btn.Label != "" { + hasButtons = true + break + } + } + if !hasButtons { + d.Buttons = []*Button{ + { + Label: "Ok", + }, + } + } + + // Create the dialog window. + w := fyne.CurrentApp().NewWindow(d.Title) + + // Icon + Message row. + icon := canvas.NewImageFromResource(d.Icon) + icon.FillMode = canvas.ImageFillOriginal + icon.Resize(fyne.NewSize(32, 32)) + message := widget.NewLabel(d.Message) + messageRow := container.New(layout.NewHBoxLayout(), layout.NewSpacer(), icon, message, layout.NewSpacer()) + + // After clicked handler for buttons. + onClick := func() { + MainWindow.Show() + w.Close() + } + w.SetOnClosed(onClick) + + // Buttons + var buttons = []fyne.CanvasObject{ + layout.NewSpacer(), + } + for _, b := range d.Buttons { + if b.Label == "" { + continue + } + + button := widget.NewButton(b.Label, func() { + onClick() + }) + if b.Disabled { + button.Disable() + } + buttons = append(buttons, button, layout.NewSpacer()) + } + buttonRow := container.New(layout.NewHBoxLayout(), buttons...) + + vbox := container.New(layout.NewVBoxLayout(), messageRow, buttonRow) + w.SetContent(container.New(layout.NewPaddedLayout(), vbox)) + + w.Show() +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..601eddd --- /dev/null +++ b/go.mod @@ -0,0 +1,42 @@ +module git.kirsle.net/apps/errorgen + +go 1.19 + +require ( + fyne.io/fyne/v2 v2.3.0 + github.com/urfave/cli v1.22.11 + github.com/urfave/cli/v2 v2.4.0 +) + +require ( + fyne.io/systray v1.10.1-0.20221115204952-d16a6177e6f1 // indirect + github.com/benoitkugler/textlayout v0.3.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fredbi/uri v0.1.0 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe // indirect + github.com/fyne-io/glfw-js v0.0.0-20220120001248-ee7290d23504 // indirect + github.com/fyne-io/image v0.0.0-20220602074514-4956b0afb3d2 // indirect + github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 // indirect + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect + github.com/go-text/typesetting v0.0.0-20221212183139-1eb938670a1f // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/goki/freetype v0.0.0-20220119013949-7a161fd3728c // indirect + github.com/gopherjs/gopherjs v1.17.2 // indirect + github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/srwiley/oksvg v0.0.0-20220731023508-a61f04f16b76 // indirect + github.com/srwiley/rasterx v0.0.0-20210519020934-456a8d69b780 // indirect + github.com/stretchr/testify v1.8.0 // indirect + github.com/tevino/abool v1.2.0 // indirect + github.com/yuin/goldmark v1.4.0 // indirect + golang.org/x/image v0.0.0-20220601225756-64ec528b34cd // indirect + golang.org/x/mobile v0.0.0-20211207041440-4e6c2922fdee // indirect + golang.org/x/net v0.0.0-20211118161319-6a13c67c3ce4 // indirect + golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect + golang.org/x/text v0.3.7 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + honnef.co/go/js/dom v0.0.0-20210725211120-f030747120f2 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..09903b1 --- /dev/null +++ b/go.sum @@ -0,0 +1,673 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +fyne.io/fyne/v2 v2.3.0 h1:g9tPI3lyBK50IvyPbXqv2zI3JJ4uhMAffu89f3nX5PU= +fyne.io/fyne/v2 v2.3.0/go.mod h1:odfJmbFnODiKn1MXdL44JR6CK+0v8lrmgdPlrUF6w0M= +fyne.io/systray v1.10.1-0.20221115204952-d16a6177e6f1 h1:OiHw+bZAGEaSreHsA8dDkBOVJmSFzsNTOc/htpM+fOc= +fyne.io/systray v1.10.1-0.20221115204952-d16a6177e6f1/go.mod h1:oM2AQqGJ1AMo4nNqZFYU8xYygSBZkW2hmdJ7n4yjedE= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/akavel/rsrc v0.10.2/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/benoitkugler/pstokenizer v1.0.0/go.mod h1:l1G2Voirz0q/jj0TQfabNxVsa8HZXh/VMxFSRALWTiE= +github.com/benoitkugler/textlayout v0.3.0 h1:2ehWXEkgb6RUokTjXh1LzdGwG4dRP6X3dqhYYDYhUVk= +github.com/benoitkugler/textlayout v0.3.0/go.mod h1:o+1hFV+JSHBC9qNLIuwVoLedERU7sBPgEFcuSgfvi/w= +github.com/benoitkugler/textlayout-testdata v0.1.1 h1:AvFxBxpfrQd8v55qH59mZOJOQjtD6K2SFe9/HvnIbJk= +github.com/benoitkugler/textlayout-testdata v0.1.1/go.mod h1:i/qZl09BbUOtd7Bu/W1CAubRwTWrEXWq6JwMkw8wYxo= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fredbi/uri v0.1.0 h1:8XBBD74STBLcWJ5smjEkKCZivSxSKMhFB0FbQUKeNyM= +github.com/fredbi/uri v0.1.0/go.mod h1:1xC40RnIOGCaQzswaOvrzvG/3M3F0hyDVb3aO/1iGy0= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe h1:A/wiwvQ0CAjPkuJytaD+SsXkPU0asQ+guQEIg1BJGX4= +github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe/go.mod h1:d4clgH0/GrRwWjRzJJQXxT/h1TyuNSfF/X64zb/3Ggg= +github.com/fyne-io/glfw-js v0.0.0-20220120001248-ee7290d23504 h1:+31CdF/okdokeFNoy9L/2PccG3JFidQT3ev64/r4pYU= +github.com/fyne-io/glfw-js v0.0.0-20220120001248-ee7290d23504/go.mod h1:gLRWYfYnMA9TONeppRSikMdXlHQ97xVsPojddUv3b/E= +github.com/fyne-io/image v0.0.0-20220602074514-4956b0afb3d2 h1:hnLq+55b7Zh7/2IRzWCpiTcAvjv/P8ERF+N7+xXbZhk= +github.com/fyne-io/image v0.0.0-20220602074514-4956b0afb3d2/go.mod h1:eO7W361vmlPOrykIg+Rsh1SZ3tQBaOsfzZhsIOb/Lm0= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 h1:zDw5v7qm4yH7N8C8uWd+8Ii9rROdgWxQuGoJ9WDXxfk= +github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20211213063430-748e38ca8aec/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b h1:GgabKamyOYguHqHjSkDACcgoPIz3w0Dis/zJ1wyHHHU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-text/typesetting v0.0.0-20221212183139-1eb938670a1f h1:cWE//ddvZ7bZAYGtNi3+SPGvUFTeTRUL/TQ9LUnQOP0= +github.com/go-text/typesetting v0.0.0-20221212183139-1eb938670a1f/go.mod h1:/cmOXaoTiO+lbCwkTZBgCvevJpbFsZ5reXIpEJVh5MI= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/goki/freetype v0.0.0-20220119013949-7a161fd3728c h1:JGCm/+tJ9gC6THUxooTldS+CUDsba0qvkvU3DHklqW8= +github.com/goki/freetype v0.0.0-20220119013949-7a161fd3728c/go.mod h1:wfqRWLHRBsRgkp5dmbG56SA0DmVtwrF5N3oPdI8t+Aw= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20211219123610-ec9572f70e60/go.mod h1:cz9oNYuRUWGdHmLF2IodMLkAhcPtXeULvcBNagUrxTI= +github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= +github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= +github.com/goxjs/gl v0.0.0-20210104184919-e3fafc6f8f2a/go.mod h1:dy/f2gjY09hwVfIyATps4G2ai7/hLwLkc5TrPqONuXY= +github.com/goxjs/glfw v0.0.0-20191126052801-d2efb5f20838/go.mod h1:oS8P8gVOT4ywTcjV6wZlOU4GuVFQ8F5328KY3MJ79CY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +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.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= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +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/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jackmordaunt/icns/v2 v2.2.1/go.mod h1:6aYIB9eSzyfHHMKqDf17Xrs1zetQPReAkiUSHzdw4cI= +github.com/josephspurrier/goversioninfo v1.4.0/go.mod h1:JWzv5rKQr+MmW+LvM412ToT/IkYDZjaclF2pKDss8IY= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e h1:LvL4XsI70QxOGHed6yhQtAU34Kx3Qq2wwBzGFKY8zKk= +github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e/go.mod h1:kLgvv7o6UM+0QSf0QjAse3wReFDsb9qbZJdfexWlrQw= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +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/lucor/goinfo v0.0.0-20210802170112-c078a2b0f08b/go.mod h1:PRq09yoB+Q2OJReAmwzKivcYyremnibWGbK7WfftHzc= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +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/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2/go.mod h1:76rfSfYPWj01Z85hUf/ituArm797mNKcvINh1OlsZKo= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/srwiley/oksvg v0.0.0-20220731023508-a61f04f16b76 h1:Ga2uagHhDeGysCixLAzH0mS2TU+CrbQavmsHUNkEEVA= +github.com/srwiley/oksvg v0.0.0-20220731023508-a61f04f16b76/go.mod h1:cNQ3dwVJtS5Hmnjxy6AgTPd0Inb3pW05ftPSX7NZO7Q= +github.com/srwiley/rasterx v0.0.0-20210519020934-456a8d69b780 h1:oDMiXaTMyBEuZMU53atpxqYsSB3U1CHkeAu2zr6wTeY= +github.com/srwiley/rasterx v0.0.0-20210519020934-456a8d69b780/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tevino/abool v1.2.0 h1:heAkClL8H6w+mK5md9dzsuohKeXHUpY7Vw0ZCKW+huA= +github.com/tevino/abool v1.2.0/go.mod h1:qc66Pna1RiIsPa7O4Egxxs9OqkuxDX55zznh9K07Tzg= +github.com/urfave/cli v1.22.11 h1:3wLoofQeDAA/zDjLA4uvtzIv73+qdxJ3QkxfAqk4UVI= +github.com/urfave/cli v1.22.11/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.4.0 h1:m2pxjjDFgDxSPtO8WSdbndj17Wu2y8vOT86wE/tjr+I= +github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0 h1:OtISOGfH6sOWa1/qXqqAiOIAO6Z5J3AEAE18WAq6BiQ= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/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-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-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210504121937-7319ad40d33e/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220601225756-64ec528b34cd h1:9NbNcTg//wfC5JskFW4Z3sqwVnjmJKHxLAol1bW2qgw= +golang.org/x/image v0.0.0-20220601225756-64ec528b34cd/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mobile v0.0.0-20211207041440-4e6c2922fdee h1:/tShaw8UTf0XzI8DOZwQHzC7d6Vi3EtrBnftiZ4vAvU= +golang.org/x/mobile v0.0.0-20211207041440-4e6c2922fdee/go.mod h1:pe2sM7Uk+2Su1y7u/6Z8KJ24D7lepUjFZbhFOrmDfuQ= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +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-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +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-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211118161319-6a13c67c3ce4 h1:DZshvxDdVoeKIbudAdFEKi+f70l51luSy/7b76ibTY0= +golang.org/x/net v0.0.0-20211118161319-6a13c67c3ce4/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +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= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +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-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/js/dom v0.0.0-20210725211120-f030747120f2 h1:oomkgU6VaQDsV6qZby2uz1Lap0eXmku8+2em3A/l700= +honnef.co/go/js/dom v0.0.0-20210725211120-f030747120f2/go.mod h1:sUMDUKNB2ZcVjt92UnLy3cdGs+wDAcrPdV3JP6sVgA4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/icons.go b/icons.go new file mode 100644 index 0000000..c3e796c --- /dev/null +++ b/icons.go @@ -0,0 +1,61 @@ +package main + +import ( + "embed" + "strings" +) + +// Embed the built-in icons into the binary. +// +//go:embed icons/* +var fs embed.FS + +// Icon implements a fyne.Resource and provides built-in icon data. +type Icon struct { + name string + data []byte +} + +func (i Icon) Empty() bool { + return len(i.data) == 0 +} + +func (i Icon) Name() string { + return i.name +} + +func (i Icon) Content() []byte { + return i.data +} + +// A map of all the built-in icons by name. +var ( + icons = map[string]Icon{} + iconNames = []string{} +) + +func LoadIcons() { + filenames, err := fs.ReadDir("icons") + if err != nil { + panic(err) + } + + for _, icon := range filenames { + basename := strings.TrimSuffix(icon.Name(), ".png") + iconNames = append(iconNames, basename) + + // Populate the icons map too. + if _, ok := icons[basename]; !ok { + bin, err := fs.ReadFile("icons/" + icon.Name()) + if err != nil { + panic(err) + } + + i := Icon{ + name: basename, + data: bin, + } + icons[basename] = i + } + } +} diff --git a/icons/aim_guy.png b/icons/aim_guy.png new file mode 100644 index 0000000000000000000000000000000000000000..33109c4d5104564c8ef0c9a09d07ae1c7481a7c4 GIT binary patch literal 1306 zcmW-fdo+}J9LB#h&Afx5DWg`JiNw%0!y-~H8-{6^8F%gGvJ6QLo69UE+eK0?6L|S(j>SPIhDG_P)QRbDrls=kuKN{Pz@vNCYNE7DfPIB3#7} zn@a0x8_bw)Ds`U#$aNv22!AqAfkXikPyhqcOqhX@$P6Hx0c8$g7G$a=(B@-Q8!)mZ z(K%!jJDABO8TrF37ntn=v%D~dJD7fpG5pAL-GLcKp6dnX!C)Q&^L@cW1S~&bdjmU| z#Et@M2`mc4tR&b%A#eoP0vT|^3@lSA_R(OU2}`74bpm*6!66GU=`LGZiC< zorI0IAPGTcGoaO z7xiw6Zm37lptbo$16OgoQ(9<5a7%A-NsToTR`puAiwy2)7d7ZjZX?cRobkKPv>C0u z@ZPoVU$YiH|B}kQ6+cp0!Fr$*HjG=|N0txu){pRIEx7Gt!u|>JXhqy-gm=5n={Z`d z)Q3Jq{!bDAg)ZO^{fa&$=pur;(Z;8EbT2L$!ejb~xPG+0mq;1V$zJ2BgT&@Rl=}v4 z8rJ0x>2pVkpWmXb@6hfsRQO(BHi9ZfwEN%b6=V8h6*{a!Cnoi0Cy5*X5UmURsA=&X+B)r!f?w>h-|$^^tJ^Z zag4o_J<{6jhrKFI2riY>Q-pcV1?4YQ*+tH`>cjYn@}7 za$c+a-YJ#J`e%33Yqba1v_@78%W;Q`T2YXk8r>jmyZ#Y>azna(dHi^1o5yNy-0i$V zTc(?(i&Il)tn4M>rId*}kD2@kX0;MqlXIV=<75qeJ{jegmx#I(iDSgsmY_hjQv?hS7Oj&r(rkWa6 tW;lDGlt(tN49RE7)MpH(B_MaA(BQ$u$Kb?cW!+O30HMExf5|sK|9|YfGeQ6W literal 0 HcmV?d00001 diff --git a/icons/aol_icon.png b/icons/aol_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..eea765b975e7c1c01f1b43c42a78305ecbc9ea62 GIT binary patch literal 1465 zcmV;q1xEUbP)00090P)t-sDJ+u? z5Ly)xY8Vw}92aR57=0KUc^e*e9vg}t9(@NUmKY(GA|iSkB#9d(f+Qe_BPDPtD0&$z zmKiIgCoGF6DV{GWiw+4+6*H}gUdljV#YkShU0#YqUD#Gy zw^dxSL|@ZQS>91zxjkduO|Xp~NC%SdbARcgg$X0k_c&p>kBU1-H(XTMQw)Lm-8L3G$x zY{+G5u1RvxX=|fjYRGSIgiCYLI(pqjcH3)hrCV>yTXM!nde}dG;81tgXm7w-ao}Zd z&0ciLZE&_qeA+^P;#qgmYjMMBbG=M_;Zu9mVRp=KcC=1^-c^0pc6Ow4bHHbEhUd9hf3*?W7CQh?@kcfDVJ(s_BOVtV9Dhva;GoqK`Pc8$Alg6g>}@kQAj9;-l1&AEUl_^*w|x2X zJj0g(1BjywR9_cB6)@v6E)hg>fwZ(|%jXzrgn))t@Uz#SK7F#$fT}V#44t=l`=L4g z_5qF`KmyU-wy9rsUi^A(L&Kp&$8$iDFJQoc!om(P9LNwPg(kp!-3HBosF|~QPy~1- z_)CnhAdAR7LbF)%w9JbKGDs?vmDPU!`u$r2A)=){<=OjBpQe0)i5ckc*?jiu?b{i9 zOra*NF#R%V^`S$(T~-eEU;*zb&R=3zuG)1uH8s)s2}op0d*BU*&UasXUY+j>bOGv% zP6-RE`2q@wBbWQbOpn4sg@KsxAptNk5mLeV@;>V#e3r3D@7=q14M#F=HSEe&A*#aM z+}zf<)bJ^aid4J-`RdAH>}td$#oj!c=xJmm1`Yr$D&!Sp)%9Nd1%X={+1SibQ&rIj z`SkhQw{PEn{P^J&_eBL=g_f?q&4TrJ?>>C|@EH&!8a&m}IfZPQxqp(O`G>sCo3|f2 zboT7oX&KY19nZUrn|Nj60003i=WiS8$00DGTPE!Ct=GbNc008qzL_t(2&t;HH4udcZL=DOT zTFLCAoS+NXS77fEP40h{`UeWFC6F0jJmUapy#Z2_rvi+{l(a*71F?M%t4dh2v^2{{ zBHA**NyhmYx`xEn#iZTplvZ}TN+vd|a+*is zeoc;X5|mGm%MF+L2&{$gARUMAgbpGx(cuZ$Z3m0Oo<;I0h|JZhMu002ovPDHLkV1f)dkUjta literal 0 HcmV?d00001 diff --git a/icons/bomb.png b/icons/bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..b679d8a48ba337970cd5f4f32d864ad44945dad1 GIT binary patch literal 799 zcmV+)1K|9LP)0002eP)t-s0000# zKR-Y~KtVx4LPA1ALqkMFL`6kKMn*OO}>PnVFeBK0XV) zrmX+~00DGTPE!Ct=GbNc00H|+L_t(I%Y9RccAGE|)Jg(VF!hld6UW%*DCMkau}gZU zhxGryR0+#q5?XIToj}+{5NJVJdW(&qnCi?{7oO z?rTG_KG1vR=~RV;bG3$T-3SyD0P`Z`Mp9KrUjs0F70NjX;E5AWyJWf-#%b}qnie15 z56Tnx`}0#zu$Js2ZFZ@-gKJ_mbbdaE!8va>zHdX<1VWRfKG%iKI|@f9(bmZaevKsg zSuph;b4nGH3C+2%04z`SzALLLUjh(krx>vBmzv08`pQV&x`8!&A73lvK=j$#i_*Si zwmC#;x*FKSTA)$bcIUv4uV2OlZGwyF^V7dS-`R+QT~Y~$-=eX@`iCL6Mrv^%T?3=n zU|LgC$2ZmwK&Eb#mjb!J60Y%=I^w2Bc{Sp4s_a3Rn&I6d>|{zIG-Y65kpA8#;?yf@ zB{^5gnqv7n7qgp&I9`1y>$5~vM0c9JGCJD@w-SymFG}(}2{#r6aSEo>ZMe9#MRtIR zMhJ%X7oeuI5B;IByaixPHN%{(w?UMwUsw;CZY@@u-64qMG|d*HFM*NCa-U^^W4`uO d*cHz={sRHrQQO3n=H37R002ovPDHLkV1jS_TDkxL literal 0 HcmV?d00001 diff --git a/icons/bomb_dynamite.png b/icons/bomb_dynamite.png new file mode 100644 index 0000000000000000000000000000000000000000..fa3ca7e1fd6cadbb3150b4a63a79bbe3672b270e GIT binary patch literal 474 zcmV<00VV#4P)k?KHB9LqgA4&;Zi z5#$d|F$yN2|0hp%zAEP_v+c8p=$!%WEVM0u2F_ zuat^z+db5lW*lai^+HkHE=>e54hA#6Uo}@Y9u=Y=5lSh~rb*sWDNRdlQh1*skhAk# zY*Hb%6QE6f{*H)OGoTdz6DMjHBdIb=oG6UK+>il166=kD@K8LK)-NFo8HHw&f{{<{ z0{kLaE0B)y4h{gb)MNIJ!3}6b3&>~H;GRDK@9L13Q-I+MCgVPx*P9%E0K&Xv47KQxxOQKF3`iWSQnno{2w9I&)kxfj=nquej#X$RfA*XN=pu+-o}cY!1MC1G z1xVf%K*K+On;j%4h&qUV{X3yMi;O%nHd*Z$%ah^lv0DXZiyAQWSBQC^2wbRn0l3RS9VE=P~?BgA4NN3p^r=85p>QL70(Y)*K0-AbW|YuPggi zMpjNH!OQ2`9f3mgJzX3_G|sQRbdmRn0tZ7ta!kV=rnc8iYxxQSzt4Z^B5T!Dj literal 0 HcmV?d00001 diff --git a/icons/bubble_q.png b/icons/bubble_q.png new file mode 100644 index 0000000000000000000000000000000000000000..c670574d068cb8787e042670654e2afc313f79eb GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U_3?xrvihTr9`~f~8uBnMd3=IEg&Yb!G|9_BF zTV4Z@Vk`;r3ubV5b|VeMN%D4gVd!9$^#F1>3p^r=85p?rfmoQaSSk7(P>{XE)7O># zDkCe0x!AkNUCBV9<(@8%AsXjfFJ0t4qQJqHkQ~#nqv7E$hi>MWD}U3iws0(4W*IlD z?&n33S9iP>um5^Cafg9qO~#d_DhEuImwerNf>YqTQXZ;cC(9Pb~i_OzGzPpCKEy zk+(8u>-IIj4=(nOnttQy#^<{{Zyed`YxA!D%EzyowLgQu&X%Q~lo FCIG$UcnJUi literal 0 HcmV?d00001 diff --git a/icons/bulb.png b/icons/bulb.png new file mode 100644 index 0000000000000000000000000000000000000000..34a1963fcb7121692149089412f12a3ba21bca18 GIT binary patch literal 1031 zcmV+i1o-=jP)M|O-4dqRw`FlS6)_9SXfwJS5szI zPGVYCV_R2XU|?cmVq;@tWMpJ$WL|D!T4-fnXJ=@fPjU8d53|1g@uKNhK7!cgN}=XjEszvkcpF%la!Q{mzIx~ zmX?>7mzbECnVFfJo12`RoS~tiq@<*!rKP8*r>Ll?si~>0s-&*2uCK4Ju&}VPv9YqU zvb40cwY9ajwzjvox45{txw*Nzy1K!+t-`vlyu7@=zP`o1vA@5+#=f$^z`()5!NS7A z!^6YG#KgtL#mC3T$;rve%F4^j%goHo&CSiu&d$%z&(P4&(b3V;($dq@)6~?|*4EbD z)ydb_*WT93*x1FVn0>h9|8?d|UF?(p#N@$vEW^z`=j_V@Sq`1tty`}_R-{Qmy_ z|Ns90004sdDK`KB00DGTPE!Ct=GbNc0004EOGiWihy@);00009a7bBm000XT000XT z0n*)m`~Uy|2XskIMF-UZ1qlr{@mwzD0005jNkl>z`J84eJ({m&hJdLEVS*!%1IdA{HG9DrlPad&Ta zv|nU^HXIjFbsU$&OYNN$F`qSx1wD(^XlTyUaKT@uX_kz97N>v6v&f6&%9U!RyldpQ zv8D(wkw;B=uU4<^l}iO3ldeU?H>j=d$2S%yT;yHeDE;~OFBnVm++-sGCYvu5 ze-{h;BAF0{=@)LYq3O9yPA4sDG8zi_h-f6QRI(%;SXHFRC;xLd0Vbv#khByNK28pM z2w(&;PDnZ#4y{g&?F%>Y#o`H4BdsmXjCu-UzDa~6#4oeH0puxw2}cyH$wFY_F+~8g zF2(Rqadl>hQUl;z?;oGnA`5SxITQitK`>*>Z-;xEXadl+MM7t{y7TbK{Tr?49eT?0mTjk2`kJXBACkg_ z8I~|0l_gwjYg}r4Om39XLlKKqb|jZM7ojjtV(n{OzgT%#WL?=(g+r2KOizeDWoo5b zW9c`KW`bjfETSTuUtU>+Rb^u9jc8wlW0P}Z$4`y?OlX=m1%REX=G5I zBc^XQm1}xkkxhGQ&tZvjGpa+CZGvrwXUAbasA*_kkzti?i)M7~YJr|ph`)Dn;beI5 z{8$BFeDnWQ7I1U@QKmwJa@UY{rT$qKQnC-UbXKl$czAg3lX{%~U<)tBCTxK6czxyk zWdLS`^}BUm{$UyYU?RGKIs0n>{$~z}e%$_N8*+#8j(p-(z!+S;7OjU|`*8rphAM@D z_5N-Wl!D0pZ5>j^8(^+@qJ^V&jq-zs@PCK=`*#9ov0_fl7XEY<{%<#ji1>1o_qLBz z`FsUQ(jP$9BZ`pG)`=?pdKiF{>&%30gpU2IkB(}?EdF{UmzkFOf(plpao3M2{Dc7i zfDT^5XnC6VnUCT7i2z;EEsvA>yqaDAh7yjK^7@Vd{E8FGmS2RQ_kN@KjGp-Wlm(2T z^vR-2{gD~?mE(xQQ{r`e0N`k$)*{GLUH*J=K!9Oj{fkjJL|picjqZT+V=x2y82 zu=@O|L+P?u{-kS{zWbiM`~RwGjOTX$xIOK|G?e0j{kK!}#V7u;d8x+!?a4RnzIFV> zF!ak!|HM`9&_?~fhyBnl{m?o0(n7?``}fx|{K{{J-oAP>C%bQYr&2Ixp&IXNyW+O%l5z(<-OUz9Arv0 z(5Cn(8K9EppR2oy)16F%o2WmbQQ!5 zE*zb`ckRN3OJ}yUR~HoIY+_$68xMjjD@j!vo~+tzj4LPiPf2@MYCW^7?KZOJtQR|%)`l| z5v%92dFRHB%V+jfWENf72Uo%nHtCR#inb^ZCr7NE^5)GzB`YRQoOtiVtp>P~8L=5Y zKH3ue+?*y}%6T9qGiRQ?e(B2tgeeR&W}KO)qbsa8_<$&;P$%GveIc~ z#z&XD{PN}Pix=;9&p=Pzfz!&Sm6ayw&zMnu>je;eu*Fa^!!rSBOoAFv!o2+OlTQsZ z8Zh$646B4`32q>*KrAw2#tbaEXok9>y&70z#tiH#P-Pl$WN46r22u+e03ghFjC`!h QcK`qY07*qoM6N<$f?s1X0RR91 literal 0 HcmV?d00001 diff --git a/icons/cake.png b/icons/cake.png new file mode 100644 index 0000000000000000000000000000000000000000..57ed2dfa7e69ba0e5034867a954ec910161db3a6 GIT binary patch literal 523 zcmV+m0`&cfP))W|{w)nVJ7)ng5y0nauzH%x3@0|NsA)0001(r%CGo0004WQchC$?u}i~16viKlqHs$JfHL+Rik#NMKV#2X@X$db)Ls9cOX2tsdh zsu?=lA`KZu3t62)7i*ik*B`qrbhUC2;@9ur?9ROCdGm^&h`BKP2u^`FVha1A-3DS9-ttPw<)i-l9p>NZ z2#@&hpDLPJK^&c6FnlL*C>^$4XojY31tW~UoRIVS z(Vh#Wf~M@6GIL=VMpfHe@2@bI=YKLOyP}h=7Opajq5tv?20Mz9awu N002ovPDHLkV1mZJ>d^oI literal 0 HcmV?d00001 diff --git a/icons/circularsaw.png b/icons/circularsaw.png new file mode 100644 index 0000000000000000000000000000000000000000..3a237cbfbf7bb2e5b63a004338b7a7813bcb4420 GIT binary patch literal 593 zcmV-X0lC4h-RqiA!aW2c$ZW4s#c6o|EkK;DEU zi2JQmI5_Ovpj0;Dj*aW`V*21AGT{x($aAHaYuE{8e$PMZxCq4phq z|Jr%wmM}pH%p`iMBxX0000sP)t-s004+H zX3S=p%$dypnVA60%x3@png7h0{{R4)001)p0RNep|NsBY%*>gYnPz5Y000000A~7U z2`c~q00DGTPE!Ct=GbNc00CM_L_t(I%e_{`loODdSzmqw*>{;MCpP6IEIc*{$iAJq)~X}0&|N%O2Sx^9>elJGm%lUwPNpb z-g-!8Ez1Ek>;M1& literal 0 HcmV?d00001 diff --git a/icons/cow.png b/icons/cow.png new file mode 100644 index 0000000000000000000000000000000000000000..37669f3778b78a66b8825278a8dddedc946410c6 GIT binary patch literal 547 zcmV+;0^I$HP)0000yP)t-s0000p z05dZ)Gt2-0W@cuYW@ee0ng3?YprE8?%x27)W|_>H|CyQ0%x28Y%>T^H|IGjY|C#^) z{{R30Fr1To00001bW%=J06^y0W&i*Il}SWFR5;6hQ;Sl>FbIsbauJn8_W%D?UTNdp zC^t7vHw#&ov^6vjs6W9%wv;XrchfOrWQD@gcTY?MY2Gh zUON) zV(xnzUF3s8PKF=t;?WJ0F=n(C?Kow4sAtJ0WRnwS_+y8VYBoqi^Lph6QqqGf6Sp1$ z(=yTjq5NofUpBP!`1W&cI~!HeLvk#c<<{aIzd9A`%MjJObu9!J(gR63)6CGyvN~tjWg8 zt|vlLe27&As#`b9JR9@5Q*M?|+&)y78&h3cq9KzhW6qp;btJz#LVr8vbdrBb8Xawv liWeOA%QzQ!l)dzC`~clSHMv1ybYcJi002ovPDHLkV1l{W@ZkUe literal 0 HcmV?d00001 diff --git a/icons/defrag.png b/icons/defrag.png new file mode 100644 index 0000000000000000000000000000000000000000..359a3b93e9f68b6278dfd28c98983ba75d764a2b GIT binary patch literal 550 zcmV+>0@?kEP)0000pP)t-s00000 z0Du4h|9}7hfB=91fB^ph004l1{{a7hfB*ph0HC0x0RR8Mz`+0i0RR900000GTH>bw z0004WQchC{tCX~g zMNizSoc4;FmJ=*(doS8MoV}}h63|y1x#J!4q0zGm3Dpv4Ze9W+5Ql8Y^mO zW6ZCx8%QZpCFi`zo_kgh>}E+SB3gs_qI zw0hVv#0j$z=2g9svvC!5G`~VwTq9k`N#p2s$s#)lK$Kaj5wEmF$-SetNqRP7r3+c* z7>7Gg-QJCdOcuhcJz(KSe}3!NyLs_^`iJ8caIa|E@xYQIxBbqGZg4_kTAk|KoU zM-YptXlj^vD6|mjknWE&@4tO9Q*#&d$u6_uhQ%)l~-rsT)&? zC=f35B6tS%vo?h&srha~h>{npD{D$)_!kkQSWF*y;%gEyJJ~nA;NYShC;9g7)WChw7>(4femQV`)D`H$Pt8d!AR)CT4aoO#6P@J(28D5b^8Z^ z<9b-%L}lmuqIdSCDp_z<80DuX`75!5{7KXxWsYc^=sr;!Q4>*=$ou>5{--cEHy4dY zoBZ%RFBlAFWMuq1>Xw({@g8sCW)AiwHAJco(Y}QltfHx~x4&k0;%(=i%xAglyxyyy zVjXu18$;#q%T_ur&+t^wi_plC?DX9AMVwL5nx66`zi2vMo;)znyFH~Kv-8{N=F{C5 zx|44;u1Y?i)c$#fE~iNXhWE*IA3Bje6vuxu&fJ);&yS)lLrEdiqZDhfx3{VRzu`fk(clk|twX2y19-SD7!RRP=Obj1 zF(s29Eggb~D@xoo*nws+4xBf*SC%ZviPD7hzsTrb&OPUz|M{OITL8ZA3qRpFj#cb- zj|8CAYB3xRQA$Yxpi-&O>-ErD15h9Z7JyPpVlShI02IpQGNaLma=A?9V7{X&?p?ov5@&xwAP}v788K$x+3$b$b7ntdoVcV?CdK5jYea6 zmolGb9X+TZF9sL3k7RqbDaxVs|-kN=ys3f-+%rlIKLp8qu~64 z@p#O)Z{KMsClwOS%)*2bol;7D+OLI2Zd27^;ZqfvN&00##L$zTmbq8JQLna!>U zf`A|hm`occB&{Vv5lBed%_O#J25lty-;$@B3jv0+M>MQKrsj zSFyF7ot;#&C5%K31VIp6+uC}b8dkzc)WE6{Q$wjnCX-3{VwLhhNPF{4(EcVZS}Oq? zn<%B0Jh^M_gk*bNe?za=yS;_$%k>xgOSO}yZq#;$k+f!$9S*;9ILF7wNbm096pe~o z-tBEjYw>hlH+wwE&0M4QhIEIAhvA}a+X-TsCO00B!-55P_wH@D$JAV@R05#W>4c&l zEg2I;LSok;%YoVKie|IP$;nA9fLg6asZ?S(OwYQ^r&t@CqLjk(JgfLC4gd++iVCT1 z+nJ8s*v-=fcbx-Sj%;l`=h?GA?$$!naFYX3ZC(|0Gc4tHr1#-{m zHN}-C1Rvf%ZfdmFw10kBStg8%>k literal 0 HcmV?d00001 diff --git a/icons/disk_org.png b/icons/disk_org.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb902660cc11b73c0b964d7013e1e8bf3ace97a GIT binary patch literal 311 zcmV-70m%M|P))005|6VZQ(X00DGTPE!Ct=GbNc0075HL_t(2 z&$W<23c@fDML%@arJLeX1hX#W3gQh$To*gR3)B--T$YN3+}2FermYGE!A~>1yrfAO zq!xH)IXVs_(K&2`-3^N6(;6+U8E%o?ayzNkx{XX_A%)@GM>$B*F6b1|ig*K0SuF<$ z5qT=M67Se&iEIb}F6HE^3B*)gM#`te?y_SbA0dCOiq8B*=PxeNA<|V9yjlAsL=x9#&(U|LysyDNQzs9-wv)M22N$o5Tjo7N8V=o{~*0ItipYZ?y002ov JPDHLkV1hFjfV2Pr literal 0 HcmV?d00001 diff --git a/icons/disk_red.png b/icons/disk_red.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5e1b5aabf60a13e5a99845487290fabd0093c5 GIT binary patch literal 543 zcmV+)0^t3LP)oZP`&uCRD%z#8FC}6Jc&L zaRJZsiQ||MlyE`W+L98vbtxrBlhg&SJRg7{*x|Y^$LnhV?m?7>ye zT!h(zBojSbuSh(f*?L9Pwv7!G3?~a6VL@B4O3A7WRG5X`*5Z*P2zCHC&a#M8o~Ebt z{cb6F+-|wMyD7yn1SO?ZRvUriEJ>Ut$?IGFd3ELpAd_2%cWr%%Br+cK!GsZTJ|t}o z)%I@sLvI~&@l=PuOH|#2Z>5JKVRTO7-;e9c* z+WzZ{AlMbY1u&0eUTf~T?9wCxWeOUlO8O!fM0S(^nvg1!9-JD-Su%Is!D6hcur2aG zEq+~xc?VzbRIK}7NKdIoqHo-6@!j5fHYWcs2!)xN(unAT8+_Ygw`5>0x2*6lu{B~j9vmzs8*}YW;3eQDz&GNL3~dF zIF2I;=%{6!AS#N=XsGy!SHzwWp7-F9Y=K-O6?u9Y}*#`JrUnq#XXsv^YP=~0JPif z)mw`1WnQszwD?o{?w8Lu2d4e>1CN?FS8T9QFiPc3E?}%PAaP(gJdrb25>DdwryXlg@^=2=s1oHhbLm1X1G_c*Tr$1upj|Reb^{d zm&>cz-v0i6D%lc7q6S>ojqUC2JxmQNVI*o`-AGVFsYVuyMYym|c_5^H@R^|fHZ9sH z0i`lZsTEIdTRS1yo*%qmG#Y)qg)g5sKkT>FPM*4X)XXrF)@**ba18N1F-m1bBzHJ5 zo^(1LX#M*2MtXk%VB2=~c#@mBf!YV8J3c-RH%-$_WFlyC^Z7h1Sb&!={|wIrHCL%r z02mAgp{PeoCI})au^W)(z;by-x7+3H>?{^QqtT#JsW6>RQ|*cGVU)_El%myY8O3jL z07%GIR7g$J%yeXHH%}AXO%7x^vbXn;`}cpjWeZKgHV2~Gye{a$u$0@8(VN#{DuT0HG{69-gajgl#o7dkrHCk)>!S9MZGeI8Q%nzA=b=bBoLD$Uc9lJui-KN*;0Z^~k k{WzYybcN literal 0 HcmV?d00001 diff --git a/icons/disk_skull.png b/icons/disk_skull.png new file mode 100644 index 0000000000000000000000000000000000000000..d57037a5e0b41bf8d8a0e99e64441159160d6d45 GIT binary patch literal 370 zcmV-&0ge8NP)VoF0001_j5nPC0004WQchC~Mg3hjW3%@D%|Oo_H)ENtX1}Bay^frI0aSG%!d;0>vfh@f3+=gbbMy;s=&@ zFm|{W8K4Z&*w44ZH0EearbI05FB%(cxdH$OV literal 0 HcmV?d00001 diff --git a/icons/disk_yel.png b/icons/disk_yel.png new file mode 100644 index 0000000000000000000000000000000000000000..e99435637fdda2f2608ce498724c513eb9ae55fb GIT binary patch literal 304 zcmV-00nh%4P)evf4P04gTeeKi$0000u4^P)4z!6n+pxjnR@JQ@tcmL%~yS&30<>aBDqva!VnQJ)vm0QFZSJ z)YwBe6>&r8l%N~V&c#-B??>g6OrQ@WK7H?fpPn8fVxke&$!8+cB@H!EOQe`SIFgRE zrZ>w&MI@L#(SR!y4~px@l3F2%!pM7K>wgo+g8Zi0(Cq8(fo5O+GRcp91522QngZ7W z*5W(LgTg)H&Mv`4TUmU&aqd1^@4J5IeMy7azAJaoBP)w*=bDmEvh4ZOzZJ5gMdu7V z8vP-&R3@TYn5E|uD4=KS6AFh)r!3cpB^z*Plmo|XCoeDFItQCB+i}nRFCacI`gw(} zI)7gLm^b=}%K7>}A})IV`4F}8vUe^jWPb5}{Rs4wU7en;Hc-SzBX9==)22-XYcRaX zSXByZ;uI?56LX7`!Mf#kcvPvNEE``|Y}HYvDpR9A)WcVm(!m2))>;)+LL#mvlgZd& zUa=-J1&FCj5$7-SZ2zt+#%{at$63lkN2XeD7u?3CUl}d7i{3TK2h0=L_t(2 z&s9-DPQx$|oHz=ix7aB6?4UfLsYJhFkbKCsNIW3o1^l2$9Qs>k-4@!F60gUzJL5GF zfI$B;wpu$V0)k;BlA-vPeMVzh$Fr4~(KXR=U<4?%IdH_|)J&L3!**ICjGQpOn%Eha zVE0y+XL=QozN{qC(0nq+s8T$TCy$JsN&cHt#$1k3eI?n@x>El7L9#W%cqFl)PegD^xwUi)Vux zZ}Sr4;1iL*QqH5fwRvMVjMq)@KD}7sOyni3N2srm_`F`QzP?N3ex;p`$yr|1LNklGzjjh8V41{Tv0p0-v zAoLcnSfE7gKU2>?v`sA~aX!xGaFP<^0bbJVnVOP>nt(L3y#r4QN`c==CVKKXVa51M z7{a2$+mw;n3|UL5K3XW3l}u&#LR$oAu<5<>wQZATrG%dZiI^B=xQ+-iS|_wa@riVmrDAt!#L~O oVD8|Y*#e!pYH3u*)|CQfL?X?sX8-^I literal 0 HcmV?d00001 diff --git a/icons/error2.png b/icons/error2.png new file mode 100644 index 0000000000000000000000000000000000000000..e6cae01f0f277707d4f3f33a0b6039e1f29903a2 GIT binary patch literal 983 zcmV;|11S87P)00042P)t-s%gf8W zGB&<4HN-MD#xgd@GB(OGHq0_L%rZ94GB(gMHqkRT)G{{HGdI>UHrO&Y+%h)XGdIpU zKG8Wn%sfEkGB)NiHqbmk=rT9yGdJrqIMP5v^)om4G&trwK>af}|2aPYJ3!D-Q~f12VTk}m(`btmsPEztvRNPu!`c6{mS6lH_S?pY3?p$E* zUSjcIW9DXQ?PF)?YHj3haq4bx;&OH5a&_i*d6}7+GBfjO2=p;*5^yijCrqkmQb#;*gT&l9cF@l;xF|>X@43oSx>Kp6H&S z=%AwJq^9estL(0@>#wovv9s;7wd}OE?YFwTGBxnNzwyP!@W{#X$jS1|%=OdM^wie% z)z$Ue-1gkv_TJz5=ji+G?)vWT{Py<$|NouZOx6GZ00DGTPE!Ct=GbNc00J*bL_t(I z%au}Fd(uD<-4>I91|_}FY6~rC7fmZ#w2D=2> z=V3BAJ3F&;W(ZLT!w_x2sYi(K`-1ZH5y>!SlEyZ52>8Aiomk%nA3!+o8E5=a0X^5{ zl+$@}Z0@x-yf}kIX)st6-xD5&{1zd=IKr7Eb|c`NQiFgi7#FYYaNp;%;{HtQ7*w7_ zI%_Ix0}NA7fBvKJP?50S#YC(tDs(MzFB>34c8+~GCQ?vANQP4Cq(sni4gYF2X?0Q9 zeW9>05tsKSO(W%vbvFhpV`q~uw64549SnZmg9{OHQ$P7fE+vVnm5`w_s15tBid$bq z7hP!{n}R7YshQNx5kYV#YD@GbI)%H9Ab1wFWh0YbiyB3$EK|?BZj{G$B?GE!X_h;( z{49Dm@bT@Fe6%I7{!W4?vF{*CAXkfkeZSdk2Jsr|2~h{v(N^j~_QtjZr6VB% zmKGR_S0zRY;aJP%B6M_!RjF31!~5E+Rx2WjdT<)H>h-#y>k7)<0wXaeSUPw*hJz)T z7@Z`*=F#gIN1Gr6#%ArAIOVz3)j9mg)i`q*yd=nf;2%I}&T(h{03-ka002ovPDHLk FV1f=80005eP)t-s1qTBV z0Raa903iSXG5`QN001Eo4NCw37#I*27#36j07?c3As8820str(7i$0lbN~T;001!| zAA00hSb2~;^RV=^$<007meckA0Gc8 zCc{BF^DHgcJ3D=2Vw7A||1U1pLrD2FIR7~>*+)_SIyL`3MCD6N!d_e6Qc;?4ZvRM3 z*;rzNfqDN)QvXm$|4~%lhN`WduC1j1jf<4MzRISj{*;unx~ZPS zzyF+>yTY;mq@JkA%m1XL_pO@suBXSws>R8<@V&3Y&(N#d*U{F*>CL{q-r?KV$jIH? z+~3dW-O$MC?B?gt+6`kuUm7;MjleMLU z!3J~!1A(F7bc!Sx0+DH=#>Hd_pXBbZ^{y4fw-5e4^sc}AJiuy9rbaR*Fx>$e2$IW=ZiE*5`~ zT@DTXMB;f$tMbNneYsSrEEX~$;d#Z+I53RlTfAt~Fv>jPg2CM&9j zB!T6P&;g-=Cox_V`7mg}3p^49Qm@ouM9 zDU2TzG=*xpR9Pr_52HITR(xkK5nfpEmRhlHsAlXiXRH4YJF$F(P-?{HY8%z+a%swWcsfA7uu!S4t}d5~`TQftDHaQbsiNm)ADnb*jB!D;84Mc? zqv_n<-h`9M+ICN*_+oo`C;zxfi`)!oJ9K}KZt6-`nuvst>UX{xDPdNO(a*-@x?J)lzP z)Q8xAo=yL(q6`kHYC`r8aO8y?1~P4{EC~`9O{5?pc@RYcSLvTVVs{E8B=Wp)F6zjx&DFV6xIt`$U3f)^^1fZJ^-3(A0Lys{`0Zb7vWdQw57%+iF z5*fsx84Ov#D>e+VVVKMvpf#f+02;u^PSCPxqqcwy%D6pD>|#vY8cjIDdj}@6w!GuP zv*8TW8$??M=UU!h$EDv-u~X6}nl@`PwWU;ow0Voyh)kfSoRYgF**g zFlSl9n?L4+BHpr`zYxj8K>pVl*QHoHlzV(T<%Y+-mJ$URBV0+@kEi`nA;GgUObf@% zXuNm=^W*VqG8UctRjR;}bS%xn@=I8$#M*0EUyO}6u<157S72*3w%1{21F9dPrWprX z^8g-e+&##>h>S2tk*>=g+B>QzHuV_7jA65oKIV&H16<*q|lx1tW@S zRp@M+a9uyVDpa3Lx?Zw4J)hk+tO_eLi>mIs=XwMXGt z+RG=MEkU}4_FIC&y1vpRR_Qfvm2Hf)fcNY&--5=qUA1Q9!`dZQW?O5S544-8?k=Y! zq;`P&Ue+CU&T|UEwdRhzxk8al3{$s0tYFwZJ?B)jQGe$`2>Z|BY<)q?+u)TS8oeU! zj6=${BEQ?3rNB`aR%%p*X6LEPD1=tY&3)~snt3pJU)En+ ze*V@>$BLuCJAO(<$uljFFODL literal 0 HcmV?d00001 diff --git a/icons/file_cabinet.png b/icons/file_cabinet.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b5f447248294120774bebfbf039c83f5fe125c GIT binary patch literal 455 zcmV;&0XY7NP)0000vP)t-s|2qUT zGiI3pW<*3pRaI30y8vcp%rlv0cXxN0W|^6png3?YnVJ7H|CzwRz|73d-QC^)|I7dY z01l)t^Z)<=0d!JMQvg8b*k%9#0X#`WK~y-)g;Lv=gdhy-0y>C0UCIA{?6&11Dsv_e z+7r_B0z?Fme7sLYIfq2p84{YM2&e=yvo+VfyrV_}n1e(u51KwMpMywqs11XACZ-9!dAX-tvx~^JRD=A|&tPWrddIm!1 zjC0C_lkwWCFf~iM7;2&RQ)jG$Qd`d0;Xp)VFxXVa+Et)2zw7#AbYtGjtBlc@-0@^k zn6nN-V-A70(L3XuyEFT4O!x6+8#d?7SsC3%!gD=o01X(faopEeL7eS%z@Lm+JUg9CSq!*8@7uzM%QL@bp40 zgU}Q)o%HMNj{=-5eg-jh8BI}`JLz}MwPSud3mlTVzE;@$-r%b;W1pb!HkVU@Z5OxH zEjw9#$AJB^uw2T{yX_vY9;E1|PoFS_Z`Lw5rr7om73&Tg{%v8*QTec2E>@%c9n-{% zFEfOdjaLf?+ep`~{vvzkCToi%%URnEou+pdy%fwVc_dby(9t6t{O(wd;ilb{NndWw zIudYJ`19&({F$pZJKHaPIe)^p6a16)F0&s^@zkBWdvc*+U$R$Z-rU_?o!NR*j#bZ} zI>YpblcHF+uIK8* ScdeAcA?WGq=d#Wzp$P!NFrdEx literal 0 HcmV?d00001 diff --git a/icons/fortunecookie.png b/icons/fortunecookie.png new file mode 100644 index 0000000000000000000000000000000000000000..140d9c3ef71ea2afc17409fdad30ae28f0488160 GIT binary patch literal 449 zcmV;y0Y3hTP)LtG{R0004WQchCi zL2kk@5L}w7x1$v>faND*!ZGS~FSoI}`o93wi@;9S{~rj{t9W2RB0O z0i=W<$T5c5JCWN)+hs($;B$&ZEE~W)c!O+`qam_qEh&}0Eq_PeVmgr~y4i-wOTg76 zaHLm{MZ_n{;O({vShKGi2XE^NvPFt$)-{_PgE5L(POYrfGqIsJN=-S;hY)4K5@cOh zon0p7f7-ihHl@olA;uUHdoj6&OI6O|?lcn}10uR&Okb9A7nCv96%!I1(sLh_^F}+- z&_R!yGo(}&VoW!AdQGgkUuw3c6C_ye9!?3`ZiBI?mwR~@3=3K>>n>YfmZ%ApF0d!JMQvg8b*k%9#0MkiC zK~yNuV_;aoz`)jwz^tJRAi$CUMXUh~469ZF6)~i=8NkU*Fv$fJ<^oA_wK)c0CuSG} z^@oNAfE7Z_Vc^P~(UxKw0AgjhwIrG{kiyEGQRWP00iCq~LL*EDF;*=FyT7s{Eg8bf z%rJ3*vz%$e>hws1+R@pb0uclH8VDF*U`a=c7M#PtrQ((`qb)VW#aL+pOhI}_dwE)# zi?J0bw7?=6GpBU4nWZ>e!Hijw*6Ehf?2;lpltj{J&gke!L-GYUzQ8dB4<6P~C;)jK Y0F4)q7#O=`TmS$707*qoM6N<$g04n>RR910 literal 0 HcmV?d00001 diff --git a/icons/garbage_full.png b/icons/garbage_full.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc29d11a9fb4eafd6921a1af31dcddadb50465f GIT binary patch literal 495 zcmVmhoX))wjk}S79G{7GZj1; zb-~TV4wa>Ybn1`ty8~J^F@6ajk9XgD_qYR?1C%^`-T;dDE||b-;|SUYBq|g-0Lvu~ z3Bk)2c7K8$#-}QF5owVv3PEEIrP$wQt(vxCpr|08wNP)G9X`l?5Dg>$xQY}koIQ^y z4C&$JOe-fGjdJ8VG(`gSuX_@k6D_OT+~pA=b^Gqjz>*0-c%@d0qs6eT5SA95$CIAK zO{U>9-}hg1;brK-&6B#$B+asL4wRP4knng|Z>IZVKA9u@Yb?m?lMbZS2Z$BTnfZe* zsqM`30fz?XmPKTVomR>`MLMnbYer@x>VEis;*tJlCCOc#xE)4{){qUZ5;Z@Zy79+) z=qJdcda{v56m^?E*dDPOl_ZUbvilqRiuB8w2xX($-K{ks lxhT6Yep9RCDVSNYkuS^{xHTBXfHMF9002ovPDHLkV1k;H-w^-+ literal 0 HcmV?d00001 diff --git a/icons/gun.png b/icons/gun.png new file mode 100644 index 0000000000000000000000000000000000000000..2c903c143b2d4b7c754af31e67ec2a70efe4f76c GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U_%)r37KTjEaloalUk7VBcW{9v9o3U-{Oz|KE7U>g9hSRDXl$ z&i|oOQVJ@ee-nBA4U!u)rVBK7vMt+cq0f9d;M%4fh4a1d-rI3(oi#1E>*&FqCV!&~ zcBGp>%vC;k;YikkI2N0I&K_5G%y_J5`s{mP?}6Bo)rG6H!oEIsZE0J_+Z#1yR_L>% z5qDU!XW6~}v3zH2(z>$5f9pToS;zS+Y{Tn`F2)J`Y9%c457O8LzNT3xNV(q^+7x1rT%D2Ztm)IvwVPP*}v3&O1`Xcv~7eW&or+n}L`jNrY L)z4*}Q$iB}ALfJ{ literal 0 HcmV?d00001 diff --git a/icons/hammer.png b/icons/hammer.png new file mode 100644 index 0000000000000000000000000000000000000000..090629bd2f47f522ca14de9beb1eb34efdfc032a GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U_%)r37KTjZ%y?RP zoxEaGli}&=@k0X7ksqdaPrFNg$g?p%f8xUI_AOz} zUlblNbca0X?_8C&sO3uHp;`C(m170xx>?-`sDD3IQ!01QEm4;}Y^(2-^(u!IZQbaz zW?A^gN4j@U&yf=L{!=|EuK1AMzgfBy?bhDbPhL{GdEZ`x-{E0Pp2>gr=VyI+Z-!b& z?6gwb!04Ni5q7b>%_5E`)(VH6b5aOw{;Hh*aNBoz7Q^T54Es9$Ln1xdb-EV51%?fS Mr>mdKI;Vst07@#G{{R30 literal 0 HcmV?d00001 diff --git a/icons/heart.png b/icons/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..4c567b70546e7df9a88a7949e45e3fca47b96d14 GIT binary patch literal 912 zcmV;B18@9^P)+p8x=%00N@` z0IL81umb?L006)M0K)(PstyRo0szkd0MP&dtP>L0007(o0Nelr0005kNkleaPxiY z%7~2&2=XwXb=uq=X>c>Wy8JluJa1n@(R*{*1}Tz({_OheShdE({<~hc-8yX?t0Eg3 zRQMdszD>W7p##rT?OwatI6icp1KZYi)+m7|crqCeKlCqp-A?ONGmo6wzFjp9L)X;Z zb^5tLP`Vf0^Rw2;QQfK87+a>HX}W@GN)gFmyK(5$4(z?XvZ-UNhAm1lB#cM~Rx75V zlZo*{0000#P)t-s|NsA) zGiJ;HnalvpnE;t)0A@1)Gyj?Y|Nj7)nKS?Y%>T>)%$YNpW;4uYW|?MYW&ktH%*>gY znPz5Y00016td>Rq0004WQchC$T_RLK$D7%iw5m|$*%&Mi36i%m(t_3b_Q}rQZVmd0|&+!uYd!41N?LS02qZ1 U>%5is+5i9m07*qoM6N<$f>hGC+yDRo literal 0 HcmV?d00001 diff --git a/icons/hub.png b/icons/hub.png new file mode 100644 index 0000000000000000000000000000000000000000..3f6b32e7adab0d03651b83d9559cb784f965fab8 GIT binary patch literal 530 zcmV+t0`2{YP)0000>P)t-s00000 z01*)Y0A>I)W&mb0Gc%b0GXQ2YL_|aYW@i5Y003s00GTspW@dMHcZi6H0RI4)nVG7p zs=K?p%*@Q)-QDi)?*IS)0000G>w(Vz0004WQchCE&E;eO6HMO%?~|MR19e%T&)QjR}Cd%@LK9TFSng#o}ErkhoPC(Iw?94zelgp zqzcRiV>GA|qSi`Dy(xJ~r8H>Hd~3_R)?O2gc=q+o(09b2R~=IWYyR}HwOcivFz}A{ zZ=q|&_*rC%9WWHOP)3qvixZ`j$whLk3TXvoI81s`tY4c*3VJ+?8Fp_ncI|-Y9EMzO z+p>F+Ef(nc2#r5N=T&fLU`MC3`-9s7Xgy@O84&x%T?0RWi#Gxn_kP(lvirpWMyk_M zdYpgkd#!O@RWvU(G@x9*eZb|oZ9#&78?L=s4~V0+{#&`EVo~QSN=4X+fV*_wcnK=j z!;+w$s&NIZA$72gnf;$Fx7=Kf##1~(%r U*&%nYj{pDw07*qoM6N<$f_T{FL;wH) literal 0 HcmV?d00001 diff --git a/icons/hwinfo.png b/icons/hwinfo.png new file mode 100644 index 0000000000000000000000000000000000000000..59c2d5420fd14a0bf7dcb14181d043c1aff9bab0 GIT binary patch literal 493 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^3=*07`vZ`&4DbnY1=0)*4Gawbf!M&n0Lc8$ zzz`7;!Ek_~0R;ZfoH=vBf(3^UA3kv4|D8K`{{KJl|36R(!|H3Q3xO14NswPKgTu2M zX&_FLx4R2N2dk_Hki%Kv5n0T@z%2~Ij105pNB{-dOFVsD*{?FPa`G6@(0#29)T8U^ z;uvCadg`Rkq6PyF7vC%|&!FI+|NGxE$$flNV!Zg6O@d?lL#;sG^M^9SY=g_}&YoRi zo-}W{`myYs6TFXG40l|T-K?~1M)8TDyot+B%@m!))Yh@iFQ7wN!QXhB+HtGPPvV^V zWY%7axZbo|RDsdFFK24Qnoq@MEYC$W*PobvT42d}o|Z+|IHf1WByDa8JnQ6mH%>6u zB>cwOX$D_BuBv7&IomBIRO*pB`M`lanl7HPV#hcog9xNY<e1HA?IH#bca<}PCJBNv1igz>oVSj1zZFbWCHA<-({+sq!>C`J7{`O%} b`6KbeEh=?7rq0uVVaed>>gTe~DWM4f??=Yi literal 0 HcmV?d00001 diff --git a/icons/ic_a.png b/icons/ic_a.png new file mode 100644 index 0000000000000000000000000000000000000000..bcaa5ca551d806b380d93877b3d7872c680e4ce6 GIT binary patch literal 341 zcmV-b0jmCqP)z?zrVl#|Nj6000^k!!Qgy zxJ4$&00k}SEx;3$pglk!W&kJA{v(u>5~p=PEsz6joR23SDFXw5m=Pr7P|-m^fiUW& ze@D%DmteMdzA-kC88M&wE6B1!bZ4I8O6hnd~rt9bFFFB;;i&pCiq&unYDZC zQ{k_Ov!|8xTbcf+v{}TJff}Olm9Fj?dQD8BuH4U3~{{a90{{R30dh!3Z00001bW%=J06^y0W&i*ISxH1eR4C6?kv(sN zFc5}MKw*tkRjkFb@k;A~wM7)KO@!q=wbGT?LHzxmZ6M7Fj+f^?;LcD00GR-iE8bHB zfETj!2jt&SJYf{F<=gwO9z#%1NAz;?c~}OVAMjN#*kzOexwKes-(Jx**1HrS^<4<@ zpFyKP%&9|AXQpqm2~o*Z6%-|dV^vh0gCKLSfcv<(35d3=PvA9)BA4A<24$RX$M88L z6;sba4N66o5A&+v(kT@iQM1fCmJFSUFzfoJ3eXIFlLnZf0(@W zO5F)0XCo~k>~y{NCO8jo)s6~EtszdZ9VLd=J;f$`UJ>Rj)Dx&)PD>MWtO*3(kEK7C tg!XF=jxWMV6|P-#;J%o`i3jqqtv^sFS;jI7m*W5c002ovPDHLkV1jwa!QcP@ literal 0 HcmV?d00001 diff --git a/icons/keys2.png b/icons/keys2.png new file mode 100644 index 0000000000000000000000000000000000000000..8bdd7781635470c2ae47f7f5692cb22933e13030 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U_%)r37KTjW-JNv3ubV5b|VeQ4)b(z4AD5BJ7J^WVFQ7-d2EKqTj~7auI^LJ~b@z;fx$^q=_9aEWet3vQ(Z79;YG=aU zIm<5?S*$8~<|}^9L)drCRD1oX-kJBd_2g6>KRro6h~vP#MkmEBr6G@d&dwDvS&n<^rYGMa{eJ(k7&1ADUD12bm>x&PD3$q zRTjJNs-?l2st@E#&#EqPEoMAp=_K$nI3)P8(B=6GneXK6zE?Znj}1P#|I8VQQ+@YU zULKpn_(7we^W;B<1En%;iYI%nZm2x^x-_Ewq(NY9hy*CyJzf1=);T3K0RXe& B$6o*d literal 0 HcmV?d00001 diff --git a/icons/keys3.png b/icons/keys3.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef9e1876c2f84f80747629537d7aa24387a742d GIT binary patch literal 1391 zcmV-#1(5oQP)pjN?%GXZABz#M=4=WHd$L(U0+>bVqbt;Fn3%SyZEBcfFqvdBiE2ojW;2OzMV)9ha&&Q^YdEEC zE_Qfzqis5%a5|-LJfd!kuzpCleLb>(O0 zhf%nSOt_0vl9Z9Xic^=8kh+XiypC4FjZwalSecobzmi$Ll3&4-TE&rC#F1dbm0QP@ zW5t(U#+Y8jm}JS8WuKv*#+hZhopHySXQ88@qotyyr=-oFYp1EE%%F0ps;A4OZmFxN zs;sHeqi@cpaMGl3(WG{)uB*_fa?q-I(W`sYt$fn0g0!}?*s*}QySTf(y1c%-zQMiP zzn#Oy!rj1_#KyzL$Hd3U#>mRY%g)N;$*s@P&d}1&=gqOv)6mk?(bLt^?a{B**VNY7 z)$Y@gVa}=<4k0 z_Uhg4@a^&N=JxLA^Y!xe_w)b(08Cs^c>n+a0d!JMQvg8b*k%9#00Cl4M??UK1szBL z000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2h{-u2^SQU5tZ5i00NUqL_t(I%e9pG zR}xVa#~C8qjLK>vqfj&|+H5znv@|76NHa`}$_g^6!J0%e)KV;sEUW|#np_IR1w8Xeb0I4%)I+~-?{I;`-a8(Z$dK`QS(QrjTsqf%jpLZiFM4!P%AO; z`N3L5vCvr~art*<;U0hR6N~{sy8wk&oBv26LuG;AB}o(Pe*+E^8hAp$HVS7V++e`S zrEnbQV&FibgUAZMFifzZa|s?1w*ycx4GbkBs{zi0=fabMh)V&*Bv@P+6#ZI-U?@Bz z1PLar^#L0iMJ@WGd9x*{o8Q6jxoTS|1@^cR5 z=9i?}f)NC)x02#rynU~_4F;W7_aLu_1ecw#+ecxbAhz$!DQ|DHx=NmVT$;b(2LM5P z0G*F136IOgVt%2!TVH?g#CviKhzS~*^MgwgO(%VF#?o~2Y~#QioFvJ)IUjh= zMG@i1%*&_G4RzP*>Qd>(3+MWo9v-NSmYDvKx$VA6AuU$$>5zNcg-O~y@FgCZ^uBIu zxFS0#Ek8Kyo2JXQWtZ4B3xiovBz-(&HfS%&WT#3iw$1{KCg)Y}=<+$RSm*H{y}MIW zQzkDgEIWMw3&6zUy@&T%0Tbb|qeR$j_5u#V;jq~pMB)egZZQT}8WMllc$_G)X~=3L xiq<4FIL;7-AXKE=@jqSr82h)M!#@Fregd`rKNxS+)y4n-002ovPDHLkV1h3Rgckq+ literal 0 HcmV?d00001 diff --git a/icons/labtec.png b/icons/labtec.png new file mode 100644 index 0000000000000000000000000000000000000000..29967727ecfd802d67434b891aad4eb788cf492e GIT binary patch literal 419 zcmV;U0bKrxP)4I=mYdH*bDd(0zC!BG{|jD8Z|lfG~7Nw2s;%5cJWhA z{z;Zh5arW{EXx2KnFf$e0fIje-oW_+UBlAzlfL*Sb^b0O>j(>9Z8_f=9-8xU;9Sx0 z!%3AuIVbVX3E&es32v797A8a1Y8^SNDREX=OD&dsLH%ND@&s-?CE^K|a9hLy*7%v> z_7Gu(2s)u1CbYW=t)hhXl^A>U)DiWVNHu}fOms*j+&+&40>?zm`9xrwXA?;nlN|TP zzkJ;0ZDXzdyZ@YQ{c1}miT*iB>bP4uHZ@Is*Zv+&WrMr&vrOU5S7*CX5%I1IR)Fnv<8^;{LBCV N002ovPDHLkV1j9yvf}^% literal 0 HcmV?d00001 diff --git a/icons/mac.png b/icons/mac.png new file mode 100644 index 0000000000000000000000000000000000000000..075b9911e37cb40a62004ed3182dd8e1e5ae59eb GIT binary patch literal 426 zcmV;b0agBqP)0000pP)t-s3;+OQ zN}SGP0JnCHJG$4InVDnG82_9Az0M&2wMzfa0RO|9!rsCE&d&eN|NsBarZF+&LkHRb z0004WQchCfpJd2 zg!POO>RC!*QwV$#JCR+ndHirVmr{Q)Y&#g=j3?9MCYKlxIiaKWUA+(@Q+>H52vUMn z(eiwyoDgh6xl+OF!eCwoQY8IMK+?c50r~DOitl+ogHp!rX9vTo&n*R^d#_M5T*)LM z#M%>SPIphlmXkuFLUl)f!9bLE4Qj1kcG3f~%pAZW-UB zF-G$a!rF=SU%#mh9N$9P64z!YB%(hd1k&i%*1j}}HUSGsr%7N2F-brwI>#-hEd<*L zuq$G=)&RE=W!Knlw28TWc?r@veEn;lpfR5f9v`DNJ7WGi%cO9caUY<2^!&yA0)WUB U?V{jUO8@`>07*qoM6N<$f=L#;1poj5 literal 0 HcmV?d00001 diff --git a/icons/mail.png b/icons/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..8295e97ab28624102cdb65bacfbadf5043795558 GIT binary patch literal 1195 zcmV;c1XTNpP);CX=|fvZKZ5(r*3blZ*Zz}aiw)~rgwCx zcXy?EcB*`Mp?i3(dU~jMeXx3evU`BDeuK7#hO~!=wup$gjEJ#`iMWf3xr~dtjf}gF zj~qsOPC z!KI|grlrZJrpl?Q%&Mx*tE0; z@8#z3=I8O}=p@{QvtsJ6~lq4^99800DGTPE!Ct=GbNc00N^)L_t(I%XL!uThl-k zT<-%FL{v~jMG+7I@hTX^+H%QJ5Gf);fgVuW1k#p-wn-Y&(4=YTX8n)dO(@V0e823s zGxKI=-!1@lA;c~}5Uo^qf`G>`E--3I{UvN5-5bO10)L#Q)E<+3y>6|2QeA445= z0nqO(Ywv7TW@(HGiG%O-ynT+g7C!@>Z8iKG;S0sUB z>E~CSyd6qDo%Jpj^mPnO6*qK@7=?K$lX`+B9xPa1(e=CsXB{Iweh3j<@&5FO6HKHI z149@nX`8_fZaWZaBa#SqOv^%=rK9g}5#WPm7J}H3nW;azpRDHvfsZx*t=zEpU{B=R zZk$~IWu9|Aq)rdu%`@t}c~okkzklk}tN)NgU)@0!nsKrF?pX`(@Wi%-$djreHQZHw z$oKJIBC;TPgF-gqu zjJM^%l`7J%j)1B#k`U-^zDJ#9Np)`SOg?SCd_HMcYs0y%{{XiJ2``nBO)&rf002ov JPDHLkV1m0005VP)t-s0RRA^ z006820kr@Cumb?O012=K451PX#sUD$00Ped1U)-nt`-xv5*N1<5z_||%MJ{LD?sxA z0Q&#}M@Du=NOJ!G0M-y2{{RNX8X8MUZck2sQc;3ZRDV=dlE^GDmO)HZSB?K06kJ!3 zSXh?SEiheMjayonTwa!4VuxX0kzZb&U}25NJvw4!oMvN}(LO)*FE8IYKB-Vv{w*_Q zXQ2NtE^23+%SlUXY?x_lq-}4g-APFQJw0=ArOs4V`9Vj%TV8o~s>oek|3*c8c%k1^ zSbKP_(OzMBezALivxSAUii)`ZVPF4ZW{!=#{%2>FlDnCinUj{kmYKnsoW-7h$aE_VDiV^6&Kj>h1IK_4V@i z{qXVj^!Wes^ZEAs`uF_(_xAhw{rCL;{rms;{{Q~}{Gk8>vt0HT00001bW%=J06^y0 zW&i*J>q$gGR5;6hQ~N{GP!zt|Q?pVkvv<+MN;569(lpbRnI^GfC6y>@hVlp(1IN}L zIzin8Hty-)?QXO%v%Vkhz2}^7=RJff$iWIZfyp9tOjiz*H;r6`!JyGxd1eW{@~||b zT}#|#?5kj4YgX+9OArGXXF_*$^~^J#T9m zqF7usj5S6P_@LwJT1UqV%Sa{@!g4e|Oruki@VTVFj;pe`Jl$%?t8LPC=sK=`A3W!V zub~F0BmI9RM#e)s*J|z!KKRevzhPM2508qls-!+c{f?l4V3z z?S8zavtV#W6~fE*Tzo02MJx%*C~7z54)nW-g~PdUC1-R-z&6*!F%`K86g z1%zrd1P_e_sWi>TT29hvQZIdmi36%4@?7s(yS%=>E$H;r5VyV?m2#W9LD!Gh$l?2L z`E?ZKUG?7U-PVrN6h$?j|D!#$1N1-m{r)N6vwxc3`UCO2Wu}zTo4fg8-i6YnE!Z;i z@qFUt&RCyv3%Eic zOJ)^}jbv;^l_hcPfy)W87)&7&6%8^TlQ43OOu8%a>A~wR=RI#b0jw>CLtj`emkf%s zDDY`6(R0q_1U8*G*s=^E%)EUQle0^)c#2I#T2DHh+UM&8`udZhqLGhDnyN@*mS1Ms zWHdZ-)!x~=3tvlL7o6kv(-dzfDrI@@8yjeEIpIvAVSIdI3rZ!>2RxpA9AOATHXRvh zzx;btbzbu4Z2{<=9uHXpQcCK5Z~NKplRVViyb5|(w+^dKO?#B+SkJA$CSB9e{R>Ag v_4b_EeGz^fI8t9=&Se?#A4QSAHm?rrR57fQ}9DY42&xcD}(q;|<~mCfegCz>uiaz~xT7EH#}%*bsbW z;SfVcIu-A+AVx}sD{?SFcOfv9hS9Wa7{;|sSp}%Qa=;b)upv=ER|kmnV#)G+k9O8_ zVsdeo^Hh6rPR6Nq;H0eIp%Cdx-^FROQfWYx8ZfQRbUT6BS{51Q-ffM=T0A&GZH9x( z-v4nKu{ozy8#BA-NY4ALib~Bql|pV-8g=b1JNhxYL`qtkp{Y0&8Ku?O>_%)r1c48n{Iv*t(u1=&kH zeO=kFGO}`*Ft1q2>kSlI=jq}YqH+Fc|3%Kj20SjVip(#Z|GQq`ox?fl&vC!J|Djcr zvW2W1swH&h`8lb7^7cKT(P+DG)va#MRbu;t+@!NYswb>zc$1;LQ8%z@^EUO9o4zt0 zj-2#j;~L`?o2Nv2E=h{?u4jGb$kV()?V-{V-Um|WoB7ICnqI4r%S~Rz-^w|+VVa81 zweKr-)?ae(=rGigwC|S_n^o0yTItgxj$5gMl@<@`HnaREb3zlzy|N&k81bDj-A Pmos>}`njxgN@xNA?v`}7 literal 0 HcmV?d00001 diff --git a/icons/mycomputer.png b/icons/mycomputer.png new file mode 100644 index 0000000000000000000000000000000000000000..ec4f3c5ab349dff754fb4a11ec1c42287df38ecd GIT binary patch literal 466 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^%)r1{HScs9kYgF(6XFV_8H|k?jAt5yz)Xg; zGzJg>BtgLV%$b=p&lvwtJ2UhD%rpPbfWUts0BTZvF0>m+F_r}R1v5B2y8$$j(cRO< zF~s6@X%Oe8Rs|mCqw$}&d%dr}asASw2a^&de3D-{d2xDZ7N*_hzRf2QYJUH-->QU7 z{#_1_GH3N{;>fR4YHn?f48O|waLKQgQu&tobqR5=9c6FuJ?WVLMQ?MXK+}r0S!v9Z zjUV{>UY%BGwB}=N0?+FzqY{TX57*B+q11h>M=Ok@CNlAbgYMkE+#?eeRf6U*-Fc^V zdHd2i*ZVfUuauL}bxKJvalKiU_W6)so3xa(>@@F}fi`uPS=UdoIENlwz<2fbLKdk+ z8HJA-d>j+>%+}f)POy&J-KS^N&+T&Q=7NGL>v=EST=#mm%K!JGo6TP7T~vD}fBcVn zzfkGP7~@NgCsubmE#Zobal51HA1kTqInTjr$-8;)-WPYxmdKI;Vst0AC=< A@Bjb+ literal 0 HcmV?d00001 diff --git a/icons/mycomputer2.png b/icons/mycomputer2.png new file mode 100644 index 0000000000000000000000000000000000000000..e1281adb837e9563268fb46931cb30b357b714e3 GIT binary patch literal 813 zcmV+|1JeA7P)0001%P)t-s|Ns98 z2nY}m5EvL3F);uD05KsUAvrlYV=(|@F)?FfF_&i|bM|L@ku|NqYC=hn{7|IYva@9*yb008WY4Nm|700DGT zPE!Ct=GbNc00KoxL_t(I%WYGEcH1BfBng9+H7xNq&FM%zT;qUE74!c;H_1*`ck7Xt z@Q$;P?-U_oj6w+CI{J2XEri}`puOn2ZaM6SrifVAMc`InmIHz3wsk}a5q(O|(M|)X zB0qQhEKV48C4`9#Lq&3Gz4KHu4?}VTZ&LE^+6l-tfi@^**%%;3ZnZX+D#0{ew3bUd z%f)$xEjJqa?1y1!Q{!A)`1%;LZ;9~440opS1m~XIb!G$vB=kMCXPD72VbEKt#ur#igbwMh*(tyn2IYb=i|t&z0SayNq8cYlBa&YBbU)Vo?2?TZ5mfE zO!$BykJ~kK#Ahb_JBF$f+?{y|zv~-*g}G&USYEV`)-355Rje+h>>liHeyu|{A(Wj| zYAdUe?S4F1rIaxMU=7TUJt{OdUbt8l5W+r0xc3k{X;M1&0d!JMQvg8b*k%9#0VqjC zK~yNuby2%+gfI}?NLRr9NIt+)1Z8v^$w!@kiIj?hV(m5*nChg9B8RWctnK4bWCUgy zW`_Y23DIf9$wW`wQ-%8qmxfN3MoZEYS+PWP`NCRW{p_ z7Uk_7TdEbm?LQvpr{BlnBX-Ay4OWHxa|>eGzunta_yg7l)6{|wWp)4n002ovPDHLk FV1mQ0udDz7 literal 0 HcmV?d00001 diff --git a/icons/newspaper.png b/icons/newspaper.png new file mode 100644 index 0000000000000000000000000000000000000000..6038474138a68a2c008850dd8e76ad657ac435db GIT binary patch literal 369 zcmV-%0gnEOP)MxWU%jlmD(XpnO2>@2tQBX$qxXkRseP$ph2PIkN0e{spZijJ%XufsHM?#$tHC;@0$rM+g!dQ}1 z+{bf#gnxCX)3H>0N2bFvujHttl%Y}9FRm;DD8hwF-AuT4i>S+U!c6keKa-V;*v(CL z1r-~lmT4+7`=;Mjvi$1z_({P+z80000sP)t-sE=P0` z5fLIHA^E@IN0v1 z%J#qQv#v%f-=F5OB zfO2k9?&Os}I0SqJ=ugyV8Mw!rfDa{O6=v?$@fX-ne=@BHVr(BA^2&RELX~+FlxzuQ zBRVh4W8n2L@yg%zXj%9$a#2qUV?iWpre|d}4;_EC`=k$>9jVQmK5lHSIhd6NVd5G! z$SN;(jU#JLsXx;DVprD7B`PRd=qCE)OH_%48@7y4)Dt1VvUBT&P@t0m=26K}uFHa>vLYDgW#v<)rc;`KL$nJptSR zif@2BR`6%705tytpn?-ZO|WCMS{4xwse->@Z<*9I0qdl8{k#GFTqhPF!Rb5@yq)(w zEdBZp1re)v+!J6vHuX&oL@p?jT1w@BM1rs^QN;5pgcy8NL18?RcQrSdKM>cC+~tLc z@(d0m=l&5m7WGgzvCK95$k1Hm(bC z9LgADXDtVyqjO#4noJtj6vviD--!349LNjR{Ly2Oh_rdx4NI5T~Cclvc)<#J2yKgfYx0H zAlDk;8+7{8c~PLw?2HsetbQ0000=t42#MEroaVY zJpl9Y09JbcGi_UOX15<&O41|%C$KWGtj+(}fN)|>NGq-ct4J?^$5s?3d^JFL=sbvi zs$MQTouKjl0lh*2OW3hiQnnoJ-l^0=WCw&=n6kGqiLg2dc3$ePD3S(=MXzJ6LNv5n zth*Uo@6z2>5IMcURVZU_rn}W$M9COeO-#dYqll0;L`UyeJx%S^459Ii=MLB$rzJqFBiA3f=C2X_S=pRVUhtYcb zlEhhgzJLZAU5jHeePKfz+{w*e);50FV_NY5LE;T!6E#&H8p`yYMs(ib-lm-?KP{T& vIe9GlVep?6Fnhi6=ue6#@c4hW_wvav)WtZ<_yE6$00000NkvXXu0mjfjBc%C literal 0 HcmV?d00001 diff --git a/icons/recycle2.png b/icons/recycle2.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec0fc4d5c7b91f626c6763cbdd511481243f0c9 GIT binary patch literal 617 zcmV-v0+#)WP)0000;P)t-s0000p z05bqH001*)Gc#rYW&i+YW&mc)0GR*)napNp%mA7H0L%aY%>MxY0GXMYnVJ7H{{YOH znE?O)X8!b1yV@N z?lU^9eQRR$&5J#KT*S>RFCwZ+0+Z?@UMM!m6lYXsGxHI}e0OyC6EdThf4Y_=J4Ddw zfFRwY7Mo-zn3AR~vW|2TQUX{wj(Z+1agOdRu=b!%tJ&14L^9$_ntNZ$59XOrm9H66 ztrsXM0=3?Xp8}cV))G4kc7n)SZncN#oM=$=`&;2XK+6(7QZuVu>Gi`$K+UO<&U&h*61&qLe?Uh{aFFkR&|l zMoDOzlx6vI3)gb#cXq2OYSV-A0C`2bI|+6-@d{dWJv^Z0FE%_sW#4x00000NkvXXu0mjf Dm7xse literal 0 HcmV?d00001 diff --git a/icons/scanner.png b/icons/scanner.png new file mode 100644 index 0000000000000000000000000000000000000000..46b18021da78298d9b2c72cb21dad5f68eaa7d7f GIT binary patch literal 375 zcmV--0f_#IP))006?N7OI``n3JbCN9+?*9GUHK_k&_ zEU689v0Zkyi+F2iVp^?h->S(&tzY`NuO99U!Akz;K=ktN5=9^V0L^8oD@8YLVLTaY z=PfjILJeUoB2Cr1aoV=DgQAtM|tx{Q$Gd VcK1_df~ zN`0ur3|dJHp+urgEl-frT4GUzbQ1)-;6s<`JO2aAGMqWz{JwAg7pf|Dr6gx26H!XA zJW!4QT=z>#Ac{NFH6cXtomHW5nYv?DjjE`!D!Iy9wMMO|Wwqokja6gRh#FQyu2-yz zQ4tkZA@`K6vQZXgRwgJZStX++O00we+K`489;2Jw9CwVhVl7)sZY(NetPyM28gdl4 z6k|oKuoZGp=w)MBEVE?-Bc56^mc$ZU!c|A2r)P(uvRphPP;Fc{j9h8DTx z+%;+(79kfT{9!CAW?@3EunP)Y3Ng0kVs={r7updt+#*Wk0ZhC`9AJWBI0QAs0F9Tx z0tW^|8`9)fn#`?b^G*|q;Ee_cOsoS$gPs9&5ovT^*Z2IP0*8a8| zk-NPcyB|HieK`7Ma=zfn<)@kXg=OCd%iF_+JE!tmE6bbnMi&-+{;^0$;`@;Y*~B?q zb;bYkcgEa!s=vOlslG3dX7ie#UG}lGLIe~n Ls|ZAQ)HM7Doki16 literal 0 HcmV?d00001 diff --git a/icons/screw2.png b/icons/screw2.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd4827fa49cc5551dcb8bc5de5dd07bc1ff726b GIT binary patch literal 311 zcmV-70m%M|P)V!Y0001~eh!!b0004WQchCS00y%EOywh}*ycezljHIMSOI|3eWv?@VrtC?=5msSP`;-8_~NnfGJi2CdCv+H z*0)Dj6^cU=TlJKPU@a94R{)clH>Bi>CfyKlPs&;WQNRkl_sA{FwT23zJ$cYp7Gl?n zy@tky=ojk!5%>NMsI>Gy zF>Avx5QQHx!Cpf#bXHrMQS>lq?q3k1+6&FvQi3wt5yJPgdnY^K^ak<#`T6ej3^35W z0EI0Y(M==IBX&=i3eFjpfJ`3PCnM*s=WNkZdx7|P1Uy;b?P!sI;PAVNcRQLPeceYk%hcz5#@r;T~ul4m1zN6eOV5zN;O>B7J%T{eBn z5ON4ibygl^ekXC2>5-QCq%N^fhn4tBr0JoL6#2s0Q(j0PqC1^VpCrK6*oP2lEsK@p sr6KeBYX&t}P~*^)?|?={OJY>PAFwKwxc06J8UO$Q07*qoM6N<$g1qd<`~Uy| literal 0 HcmV?d00001 diff --git a/icons/sknife.png b/icons/sknife.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5a73f073591126e67e7e03c9f795f1b4e12c89 GIT binary patch literal 422 zcmV;X0a^ZuP)$C zyKciU3?u?0(FbJc*b=Snu_%J3qX#0@A9QUC$I%Z|@o3nJ!p|-x*?A!ZY>}ta@k9Yg zDESt1`4uol24Eb_HB9?3<4vf3eHE&uo0xIaEdYAfuW)=cHOw%O@a0=hbtmFEl&jLp z%-s-jRkWm6zLqq{a`1H|NNQ|4l0R*>qY_nFbt`zv+G%Uyrc4oVSO@6_CZKP~tXH}d zd-zNnXI;n;hEFEpBNnEO$9u%Jp(uiw`!?$JSRVFO0?R{_+Vo33Hp~bJ?nQS~vx4h; za7)=OAX3a18Uawp=jh<-+p%*w?ID+07*qoM6N<$f?Y(gQ2+n{ literal 0 HcmV?d00001 diff --git a/icons/skull.png b/icons/skull.png new file mode 100644 index 0000000000000000000000000000000000000000..9e60157d01c2baadc6e443bd4c36f18fca74091b GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U{%)r2Cpm+H=ki!|^6XFV_XU?1nB$tM`vH&T@ zk|4ie28U-i(tw=Ho-U3d5|@4b4D${f@YqOP74Vf5Qn-0%k@KqXC!Bf-?pcNHdWS}c%R6!X#GhvzlBa{Hk3 x&S#CxOa1=kC9AD-J1sm%>hF%&u*da(nOYR=8tzy0KLmP@!PC{xWt~$(697Xocc}mX literal 0 HcmV?d00001 diff --git a/icons/skull2.png b/icons/skull2.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c069d10520c662817d4237dc7aec05f01e7e32 GIT binary patch literal 1699 zcmV;U23+}xP)00090P)t-s+tsZx zDIYs7B}OtPL^UWxHZDUsDo!^iNjfY|I4nmyH&8k$Q9vzMKPgW^I88$|Q9(3VMJ-%I zEnr3~VN5S&N-tzeG+#|RUQR$~O)+3oK5I}kWL7+8RYqZ2RB%}~ZCOBdST}Q6L2_D7 zY+p)!UpRVSNP1#FfMGg_Vm*asKZIsPd}vgKYde8!QiE+&f^J%kZAFW4M~rbnkZ(bY zZ&!$NSc-I7lypmyc3zNqS&(~Aj(l5{dsm8pVw-(Om4H;1eqNP-Ws`wmn}bW6fn1(| zVw;0wk%wuQg=Ch6X`F>>qJw3jhGC$IR-cDwrifUmiBq17YNe4;ppjyqk8-AsZKjcG zsFG!?lVGHjcd3+Zuajq&nU=4ZYp$AdtD1eUo@lI|bg-Osubg?So_eyHf47}vu%&IY zqjRyNdA6l?xukrwr-QevbG@lA#sfNC+cD=2Aysd(|t%$m@ ze#5PWyRebFvxmU3hrhCo!L@wCvx&U4n!vK4#I=jZvyj5Lg}}Ir!M2vewvouRk;Jr| z$+~sHyOYSdj>)&0$GVlnx}e3qkjTA@$ho1%y`9Csn9RS2%e$k($1{Z&AHvpq1n))+s>%j&aT(awA#_5*wLxm(6HIiw%pON z*wMY;(W}_hvMMAV-qW+()4A8w#oE@i-PW$()U@8!yWiQd-Pgk2+PC4@z2e-o;oZC8 z+s5DB!Qb1==G(gD+rZ`A!QtP+PFWz~Eh1k=E?2k z$?N3L?B&q#=gjWs((CHY@95O-?9cA%+wtqx?e5p|?AP$@-Sq9)^6uaD?%DJ2;Pmm~ z_wn5I^5XaNk8^8-m!4q6Sbgo*G54mjqBz zqX7X8CX@lh6fXmDa!JnFDc#sc`+Sy`E}3H(3T=pQH45m}Xf9 zI>6G7UkpVtP%;SspctND%i8y z-pMo+a1x4duOea^dwbuVAxp^5g$x;o)%^xG`UZboAWM1igsWqSs5nb3w|)P#Jw}$v z>vl506t?BY)kGDsQo%C-u(qTrV;k;YyKRk@-*ID*JUgL;sv${|@Io^ILnKMyxE{wXR*S`A zcZq)M-`T$-269A02liepX8=fzl03fgzR+ki6co8q@@8)xqbRlI1rMq3{h)xPA3XbFeLlCrluVsTavm@@10tq9{R`k1Sfa>izu zlQ-K5(l2FN2AA>zckPbViOAKpI#w5|;JjR6a?P$QN8WXt`i@61W{bM3?_OS#d+Acs zXe*Ujio`GF6{DPw%NRg`UlmwA$}2!tHT@v$2;II6X(D=X=6?{XG!S19g___B?g_={ zK00090P)t-s00963 z00jXA000CB2>}2C1px*F2?q%U4hIDa3UXMMq0cN=r#fOiD^iRAopUPfJQ-OC3#5O-)f=QBzP` zQb%7>JylazUR6p~SXEnCOI==EVqIKxUnyl?SZ!WJa$huHVqa}wOJiYWja>+BVNqme zV`*e#XK7|?Y-w+5X?<-pdTm#3aBYulGJtPRZgO>-ZX11ZV0d$Kj&(70cXWw$Nsf9h zgmz$he0hI*d5?Wumx4Bbfqr{}ih_iJiiB~Zi5`T8gNKEQhKPlyjTnoGjfaenuZKX! zh8B#Di;|3skCBeNlMRuRkg}I0l9Z9QodA`Smz9>2v7I@WnU%R zYSXa+$+Q;Msx9iHCaSEd<)tv+unnlLu>Ye1)wvO_u&uqWmh7iI|ELMEv#BIo+!ZQ8C6T!p3!otkc!K3%XSn<{d%*Ms< z*#N}J%>Bki_{CxW(GLFA0RPtj(#pgB)f4^N0L#wG{?RYV&e8qVCHBr=|JNA((L?#r zTL0Yy{NDoq(>(s*0RPuC|J)t@+baIoKG)IE{pA4t+&9qG*wfY0&DP%k+DiZE0Q}ra z)z{Sj+f@J5d+yV){_Ftv*N)iQ*ZNw1#p)li?mH@FJp>F63F}a@Ar3W zR#~`!4v_!(?F&(UBdEqh6>mPjy?e2am&p$zvVZTYopUZ7Ynpm|@4-f}NI`J;T&tXd z;{4e*NbX_KVL$_+9=;+d0!$L@mP{ya=FUziVv0p}Gt0+!^O@X`MVMDKUuQz`SM0xk z|8kf-kPQC!@6WH_@W2Jx4HWqHA)ZqbCcyazB=BN6KQBxX_dk%ptv#~B#ZZy2LH~dP z+Zz}Si@}Q4KDfG0=EJRHOP(BkWOX;yU;PHg3lk`e(o0F;o%NNRm05{ z2~5cl1uyR2-7O&?ARve8W|z$9pZ}l=?p&N%rKD{np@pm@bJpvZPXf*7eFG}Eb^i2{ z-uDqw_V+Wg5K1D9^ ztejpStLLzE%holEmMzOQOM%00042P)t-s00004 z1Ox>G2m}QN1qB5K1_cHN1_uWS3J3@Z2?+`c2?`1e3JVMk4Gk6x1`ZAm5)K3p4-XL$ z5fTy-78Vv88yh1b7$znr6fHV9Bn&DlDl9B4FfcGLF+WN&2{}1AJv%r>IW;{!Jzhc_ zLQhOtSy^;g8d_RfV^~&UVPQ0InKO8!Gkd2qeW^2jsxyA7Gk~o#fvz)yurq_PGla4; zhP5+@w=;;iGl{t~in%k2x-*QtGmX8KcP%rHzB7-&GmybEk;0~fJGPG^kdc(FkXg`< z6UUbc#FiSUmT8%pnX#idqobp~r%v9Y70j*nL`>g?+8@b~ul|Ns90004gMxDH5sF>D0Mdy)~b=|@zGlreQ3?#XA7;y}jl7&sSa&N2=wYi-jnft(Aw#_W&t%%5#x zar*U6ACoZes1dV8WPb{+WuX$u;j+)jAo*-09Yu6yYPG$ybu)~aS5H1}DfU5}n_Z9J z{ADcm0f@Uul^Ftd-2Edq?pC4|gk^nNF7Js}gi|7+|(>xFD^5_%eYMxszGT?+6kE3>y zDdxt$PP7;qITe`Bbis%kR!YZqaSD<|4hZIH&rY2{n*sPC<1EThc!xOt{U6X}VXAdqM`L$`scm&Y43QoFrU%!8Owsm9G1cLA~ z&fR|W;Qosbdx{Q}CW$mdsyFyFTU*PrENx%JYRaG%a>r2g$@2_Vk%}YegKB}@)l`t^ zt*_X~FQ{6W27PpzuG(lI;W5JAy{>+S>ykjhFc7^l43&4(iNC_ce?Vg5H?VpP6DvrpNY#1B zl*I)qkf@a8TqZhz-RvMm6`~U<;jU@=aZ=*<-aY%C4nWFlSXvFg1As`lg5Epi2#14~ z_eu>t%2C52H~c@aF>I=y^XI={={^x2(IAk)1Tr(y@SSLWQg>FRRC@;UrJUaRiQ&nA zA8v+djfT3&k&CsO1SK(}EMJ{m%~`Csqe0C#pjm_P+RjrxxUvNlW|Bh%&r=vlYlcHc zlU(MDMw1uIV>vU?7;USak2!&1l%;P&V#xo4r@iZ zD5y%Uk$tl)%IPsZqy|@-m3Qib$lb{eGzOcPm8VOh)XKA#IS;SzZ~ByqrRALF9|Ng*OcyXuJ~%7x69fg|25+vG50%n-v9sr07*qoM6N<$g0TAMSpWb4 literal 0 HcmV?d00001 diff --git a/icons/zipdisk.png b/icons/zipdisk.png new file mode 100644 index 0000000000000000000000000000000000000000..bde06247420935452041d19a576dc8be4b84496f GIT binary patch literal 338 zcmV-Y0j>UtP)h)|Ns90005o6tJMGi00DGTPE!Ct=GbNc0081iL_t(2 z&#jL?i^4z<#UC6gwp=VE-@rD^9md|qF0c%k@`^LP7V8&~Y$=2k^KG3?T>so5;^8ZH z=l9r|Hw#2nKu3BUk@NxVEKG%~<60&2UG(^?PCL7De?&uW1>;r>)Qm?m>8AC*9{L?o zd6+EJ+W4=@XWna8CN}TSL$b%io@Brjbt=}O9t&6cA-K5YPCZc!t{~0syg?>Ev53(( zyJV7<`o~r;N=SZj!GYzTTOX1anN%TcXKbU_&pnM|OSH`O&8G1_u@%ujhboCi&onEB;pK@c z^O{f30aP&`YR$Z7-p{%cAvB`iq7OA$Mx-Jl(`!Zy|I1*L(G#7KmQ2tHo;>Q&qpjZH Y2aGMLkBQ0lw*UYD07*qoM6N<$g5g1;@Bjb+ literal 0 HcmV?d00001 diff --git a/main.go b/main.go new file mode 100644 index 0000000..0c4b629 --- /dev/null +++ b/main.go @@ -0,0 +1,131 @@ +package main + +import ( + "fmt" + "os" + "strings" + + "fyne.io/fyne/v2" + "github.com/urfave/cli/v2" +) + +// Configuration. +const ( + DefaultIcon = "attention" + DefaultTitle = "Error" + DefaultMessage = "Something went wrong." +) + +var MainWindow fyne.Window + +func main() { + LoadIcons() + + // The command line interface. + (&cli.App{ + Name: "errorgen", + Usage: "make fun and custom error messages.", + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "version", + Aliases: []string{"v"}, + Usage: "Show program version and build information and exit.", + }, + + // Easy shortcut flags. + &cli.BoolFlag{ + Name: "error", + Aliases: []string{"e"}, + Usage: `Make the dialog box be of type 'error' by default. An error box has these default attributes unless overridden by other options: + + Title: Error + Text: An error has occurred. + Icon: error + Buttons: Ok`, + }, + &cli.BoolFlag{ + Name: "alert", + Aliases: []string{"a"}, + Usage: `Make the dialog box be of type 'alert' by default. An alert box has these default attributes unless overridden by other options: + + Title: Warning + Text: Are you sure you want to proceed? + Icon: attention + Buttons: Ok`, + }, + &cli.BoolFlag{ + Name: "info", + Aliases: []string{"i"}, + Usage: `Make the dialog box be of type 'info' by default. An info box has these default attributes unless overridden by other options: + + Title: Information + Text: All updates are complete. + Icon: info + Buttons: Ok`, + }, + &cli.BoolFlag{ + Name: "question", + Aliases: []string{"q"}, + Usage: `Make the dialog box be of type 'question' by default. An question box has these default attributes unless overridden by other options: + + Title: Question + Text: Are you sure you want to proceed? + Icon: question + Buttons: Ok, Cancel`, + }, + + // Customized flags. + &cli.StringFlag{ + Name: "title", + Aliases: []string{"n"}, + Usage: "Set the title for the dialog box. If no title is set, a default is used based on the type of dialog box requested (which is --info by default; see also --error, --info, --question)", + }, + &cli.StringFlag{ + Name: "text", + Aliases: []string{"t"}, + Usage: `The text displayed inside the dialog box. Use \n where you want line breaks. + + Important: the text does NOT have automatic word wrapping applied. Insert your own line breaks or else the dialog can be VERY wide for longer messages!`, + }, + &cli.StringSliceFlag{ + Name: "button", + Aliases: []string{"b"}, + Usage: "Add a button to the dialog. Use this option as many times as you want to add multiple buttons. The one the user chooses will be printed to standard output. If no buttons, default is an Ok button.", + }, + &cli.StringFlag{ + Name: "default", + Aliases: []string{"m"}, + Usage: "Set the default button by its label. The matching --button will be made the default/primary button.", + }, + &cli.StringFlag{ + Name: "cancel", + Aliases: []string{"c"}, + Usage: "Set the 'cancel button'. This value should match one of your --buttons and will be the value 'selected' if the user closes the window or hits the Escape key.", + }, + &cli.IntSliceFlag{ + Name: "disabled", + Aliases: []string{"d", "g"}, + Usage: "Specify which buttons (by position) should be disabled, or 'greyed out'", + }, + &cli.StringFlag{ + Name: "icon", + Aliases: []string{"I", "o"}, + Usage: fmt.Sprintf( + `Set the icon to be displayed in the dialog box. Use either a built-in icon by name (e.g. "aim_guy") or name your own custom PNG image from disk. + + Built-in icon names include the following: + + %s`, + strings.Join(iconNames, "\n "), + ), + }, + }, + Action: func(c *cli.Context) error { + if c.Bool("version") { + fmt.Printf("Version: %s\nBuild: %s\nBuilt on: %s", Version, Build, BuildDate) + } + RunGUI() + return nil + }, + }).Run(os.Args) +} diff --git a/main_window.go b/main_window.go new file mode 100644 index 0000000..786ca41 --- /dev/null +++ b/main_window.go @@ -0,0 +1,120 @@ +package main + +import ( + "fmt" + "image/color" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/app" + "fyne.io/fyne/v2/canvas" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/widget" +) + +// RunGUI initializes the Main Window UI where users can configure an error message visually. +func RunGUI() { + a := app.New() + w := a.NewWindow("Error Message Generator") + MainWindow = w + + w.SetIcon(icons[DefaultIcon]) + w.SetOnClosed(func() { + a.Quit() + }) + + // Create a Dialog template that the UI components will modify. + d := Dialog{ + Icon: icons[DefaultIcon], + Buttons: []*Button{}, + } + + // Preview of the selected icon. + currentIcon := canvas.NewImageFromResource(d.Icon) + currentIcon.FillMode = canvas.ImageFillOriginal + currentIcon.Resize(fyne.NewSize(32, 32)) + + // The icon picker row. + labelIcon := canvas.NewText("Icon:", color.Black) + selectIcon := widget.NewSelect(iconNames, func(v string) { + d.Icon = icons[v] + currentIcon.Resource = d.Icon + currentIcon.Refresh() + }) + selectIcon.SetSelected(DefaultIcon) + iconRow := container.New(layout.NewHBoxLayout(), currentIcon, selectIcon) + + labelTitle := canvas.NewText("Title:", color.Black) + entryTitle := widget.NewEntry() + entryTitle.SetPlaceHolder("Error message title") + entryTitle.OnChanged = func(v string) { + fmt.Printf("Title changed to: %s\n", v) + d.Title = v + } + + labelMessage := canvas.NewText("Message:", color.Black) + entryMessage := widget.NewEntry() + entryMessage.MultiLine = true + entryMessage.SetPlaceHolder("Message contents") + entryMessage.OnChanged = func(v string) { + fmt.Printf("Message changed to: %s\n", v) + d.Message = v + } + + // The three buttons. + var buttons = []fyne.CanvasObject{} + for i := 0; i < 3; i++ { + // Our dialog button. + b := &Button{} + d.Buttons = append(d.Buttons, b) + + labelButton := canvas.NewText(fmt.Sprintf("Button %d", i+1), color.Black) + entryButton := widget.NewEntry() + entryButton.OnChanged = func(v string) { + b.Label = v + } + entryButton.SetPlaceHolder("Button") + + checkDisabled := widget.NewCheck("Disabled", func(v bool) { + b.Disabled = v + }) + + buttonColumn := container.New( + layout.NewVBoxLayout(), + labelButton, + entryButton, + checkDisabled, + ) + buttons = append(buttons, buttonColumn) + + if i < 2 { + buttons = append(buttons, layout.NewSpacer()) + } + } + buttonRow := container.New(layout.NewHBoxLayout(), buttons...) + + // The "Go!" buttons. + buttonGo := widget.NewButton("Go!", func() { + d.Show() + }) + buttonHideAndGo := widget.NewButton("Hide MainWindow & Go!", func() { + w.Hide() + d.Show() + }) + goRow := container.New(layout.NewHBoxLayout(), layout.NewSpacer(), buttonGo, layout.NewSpacer(), buttonHideAndGo, layout.NewSpacer()) + + vbox := container.New( + layout.NewVBoxLayout(), + labelIcon, + iconRow, + labelTitle, + entryTitle, + labelMessage, + entryMessage, + buttonRow, + goRow, + ) + + w.SetContent(vbox) + w.ShowAndRun() +} diff --git a/version.go b/version.go new file mode 100644 index 0000000..f5cf3cd --- /dev/null +++ b/version.go @@ -0,0 +1,9 @@ +package main + +import "time" + +var ( + Version = "2.0.0" + Build = "HEAD" + BuildDate = time.Now().Format(time.RFC3339) +)