feat(icons): clean tray badge set + Start menu/installer icon
New cmd/icon-gen renders the four state badges (Red/Yellow/Green/Blue) as a rounded-square badge with a subtle vertical gradient and a crisp white theta, 256px with 4x4 supersampling. The tray embeds these (icons.go, generated) and builds a proper multi-size Windows ICO (16..256) via exact box filtering -- replacing the old flat 48px circle and nearest-neighbour scaling. The installer now bundles theta-agent.ico (multi-size, Blue badge) and uses it for the Start menu 'Theta Agent Tray' shortcut, the setup.exe icon (SetupIconFile), and the uninstaller display icon. Dead duplicate icon arrays in the root package (tray_icons.go) removed.
This commit is contained in:
1 parent
1b332cacab
commit
12d55a4454
8 files changed
+3408
-40
No files matched your search
@@ -5,6 +5,13 @@ All notable changes to the `theta-agent` daemon will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
- **New tray icon set** (`cmd/icon-gen`, generated `cmd/theta-agent-tray/icons.go`) — the state badges (Red/Yellow/Green/Blue) are now a rounded-square badge with a subtle vertical gradient and a crisp white theta glyph, rendered at 256px with 4x4 supersampling instead of the old flat 48px circle. Windows gets a proper multi-size ICO (16/24/32/48/64/128/256) built with an exact box filter (was nearest-neighbour over three sizes), so the tray/taskbar icon is sharp at every DPI.
|
||||
- **Start menu / installer icon** — `installer/windows/theta-agent.ico` (multi-size, Blue badge) is bundled by the installer and used for the Start menu "Theta Agent Tray" shortcut, the setup.exe's own icon (`SetupIconFile`), and the uninstaller's display icon.
|
||||
- Removed the dead duplicate icon byte arrays in the root package's `tray_icons.go` (nothing referenced them; the tray binary carries its own copy).
|
||||
|
||||
## [v2.2.0] - 2026-08-10
|
||||
|
||||
### Added
|
||||
|
||||
@@ -0,0 +1,327 @@
|
||||
// Command icon-gen renders the theta-agent tray icon set (Red/Yellow/Green/
|
||||
// Blue state badges) and writes:
|
||||
//
|
||||
// - <tray-dir>/icons.go — the Go source with the embedded 256x256 PNG byte
|
||||
// arrays the tray binary compiles in (gofmt-formatted).
|
||||
// - <tray-dir>/icon-*.png — a preview of each color, for eyeballing.
|
||||
// - <ico-path> — the multi-size Windows .ico (16..256) of the Blue badge,
|
||||
// used as the installer's own icon, the Start menu shortcut icon, and the
|
||||
// uninstaller display icon.
|
||||
//
|
||||
// Design: a rounded-square badge in the state color with a subtle vertical
|
||||
// gradient, and a white theta (ring + horizontal bar) glyph knocked out of it.
|
||||
// Rendered at 256px with 4x4 supersampling so the edges are crisp at every
|
||||
// downscaled size. Pure stdlib; run with:
|
||||
//
|
||||
// go run ./cmd/icon-gen cmd/theta-agent-tray installer/windows/theta-agent.ico
|
||||
//
|
||||
// The generated icons.go and theta-agent.ico must not be edited by hand.
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"go/format"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/png"
|
||||
"math"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const size = 256
|
||||
|
||||
type badgeColor struct {
|
||||
name string
|
||||
base color.RGBA
|
||||
}
|
||||
|
||||
var palette = []badgeColor{
|
||||
{"Red", color.RGBA{0xEF, 0x44, 0x44, 0xFF}},
|
||||
{"Yellow", color.RGBA{0xEA, 0xB3, 0x08, 0xFF}},
|
||||
{"Green", color.RGBA{0x22, 0xC5, 0x5E, 0xFF}},
|
||||
{"Blue", color.RGBA{0x3B, 0x82, 0xF6, 0xFF}},
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) != 3 {
|
||||
fmt.Fprintln(os.Stderr, "usage: go run ./cmd/icon-gen <tray-package-dir> <ico-output-path>")
|
||||
os.Exit(2)
|
||||
}
|
||||
dir := os.Args[1]
|
||||
icoPath := os.Args[2]
|
||||
|
||||
// The Blue badge doubles as the product/app icon (Start menu shortcut,
|
||||
// installer, uninstaller).
|
||||
var blue *image.RGBA
|
||||
|
||||
var src strings.Builder
|
||||
src.WriteString("// Code generated by cmd/icon-gen; DO NOT EDIT.\n")
|
||||
src.WriteString("\npackage main\n\n")
|
||||
src.WriteString("// Theta Agent tray state badges, 256x256 PNG.\n")
|
||||
src.WriteString("var (\n")
|
||||
for _, c := range palette {
|
||||
img := renderBadge(c.base)
|
||||
preview := filepath.Join(dir, "icon-"+strings.ToLower(c.name)+".png")
|
||||
writePNG(img, preview)
|
||||
if c.name == "Blue" {
|
||||
blue = img
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
if err := png.Encode(&buf, img); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "encode:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
src.WriteString(fmt.Sprintf("\ticon%s = %s\n", c.name, goBytes(buf.Bytes())))
|
||||
}
|
||||
src.WriteString(")\n")
|
||||
|
||||
out := filepath.Join(dir, "icons.go")
|
||||
formatted, err := format.Source([]byte(src.String()))
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "format:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if err := os.WriteFile(out, formatted, 0644); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "write:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Println("wrote", out)
|
||||
|
||||
if err := writeICO(blue, icoPath); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "ico:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Println("wrote", icoPath)
|
||||
}
|
||||
|
||||
// renderBadge draws the state badge at `size` with 4x4 supersampling.
|
||||
func renderBadge(base color.RGBA) *image.RGBA {
|
||||
img := image.NewRGBA(image.Rect(0, 0, size, size))
|
||||
white := color.RGBA{0xFF, 0xFF, 0xFF, 0xFF}
|
||||
top := mix(base, white, 0.16)
|
||||
bottom := mix(base, color.RGBA{0, 0, 0, 0xFF}, 0.20)
|
||||
|
||||
const margin = 8.0
|
||||
const corner = 52.0
|
||||
cx, cy := size/2.0, size/2.0
|
||||
half := (float64(size) - 2*margin) / 2
|
||||
|
||||
// Theta glyph geometry (ring + horizontal bar, bar extends past the ring).
|
||||
const ringOuter = 80.0
|
||||
const ringInner = 56.0
|
||||
const barHalf = 12.0
|
||||
const barLen = 86.0
|
||||
|
||||
const ss = 4 // supersample factor
|
||||
for py := 0; py < size; py++ {
|
||||
for px := 0; px < size; px++ {
|
||||
var accR, accG, accB, accA float64
|
||||
for sy := 0; sy < ss; sy++ {
|
||||
for sx := 0; sx < ss; sx++ {
|
||||
x := float64(px) + (float64(sx)+0.5)/ss
|
||||
y := float64(py) + (float64(sy)+0.5)/ss
|
||||
if !inRoundedRect(x, y, cx, cy, half, corner) {
|
||||
continue // transparent outside the badge
|
||||
}
|
||||
t := clamp01((y - (cy - half)) / (2 * half))
|
||||
col := lerp(top, bottom, t)
|
||||
if inTheta(x, y, cx, cy, ringOuter, ringInner, barHalf, barLen) {
|
||||
col = white
|
||||
}
|
||||
accR += float64(col.R)
|
||||
accG += float64(col.G)
|
||||
accB += float64(col.B)
|
||||
accA += 255
|
||||
}
|
||||
}
|
||||
n := float64(ss * ss)
|
||||
img.SetRGBA(px, py, color.RGBA{
|
||||
R: uint8(accR / n),
|
||||
G: uint8(accG / n),
|
||||
B: uint8(accB / n),
|
||||
A: uint8(accA / n),
|
||||
})
|
||||
}
|
||||
}
|
||||
return img
|
||||
}
|
||||
|
||||
func inRoundedRect(x, y, cx, cy, half, r float64) bool {
|
||||
dx := math.Abs(x-cx) - (half - r)
|
||||
dy := math.Abs(y-cy) - (half - r)
|
||||
if dx <= 0 && dy <= 0 {
|
||||
return true
|
||||
}
|
||||
return dx*dx+dy*dy <= r*r
|
||||
}
|
||||
|
||||
func inTheta(x, y, cx, cy, ringOuter, ringInner, barHalf, barLen float64) bool {
|
||||
d := math.Hypot(x-cx, y-cy)
|
||||
inRing := d >= ringInner && d <= ringOuter
|
||||
inBar := math.Abs(y-cy) <= barHalf && math.Abs(x-cx) <= barLen
|
||||
return inRing || inBar
|
||||
}
|
||||
|
||||
func mix(a, b color.RGBA, t float64) color.RGBA {
|
||||
return color.RGBA{
|
||||
R: uint8(float64(a.R) + (float64(b.R)-float64(a.R))*t),
|
||||
G: uint8(float64(a.G) + (float64(b.G)-float64(a.G))*t),
|
||||
B: uint8(float64(a.B) + (float64(b.B)-float64(a.B))*t),
|
||||
A: 0xFF,
|
||||
}
|
||||
}
|
||||
|
||||
func lerp(a, b color.RGBA, t float64) color.RGBA {
|
||||
return mix(a, b, t)
|
||||
}
|
||||
|
||||
func clamp01(v float64) float64 {
|
||||
if v < 0 {
|
||||
return 0
|
||||
}
|
||||
if v > 1 {
|
||||
return 1
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func writePNG(img *image.RGBA, path string) {
|
||||
f, err := os.Create(path)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "create:", err)
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
if err := png.Encode(f, img); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "encode:", err)
|
||||
}
|
||||
}
|
||||
|
||||
// icoSizes are the entries embedded in the .ico. The 256px source is an
|
||||
// integer multiple of each, so every entry is an exact box-filter downscale.
|
||||
var icoSizes = []int{16, 24, 32, 48, 64, 128, 256}
|
||||
|
||||
// writeICO writes a multi-size Windows .ico (classic BMP XOR+AND entries, the
|
||||
// format LoadImage has always supported) from the 256px source image.
|
||||
func writeICO(src *image.RGBA, path string) error {
|
||||
sizes := icoSizes
|
||||
var dir bytes.Buffer
|
||||
var payload bytes.Buffer
|
||||
offset := 6 + len(sizes)*16
|
||||
|
||||
dir.Write([]byte{0, 0, 1, 0, byte(len(sizes)), 0}) // ICONDIR
|
||||
|
||||
for _, s := range sizes {
|
||||
bmp := toDIB(scaleBox(src, s))
|
||||
w, h := byte(s), byte(s)
|
||||
if s >= 256 {
|
||||
w, h = 0, 0
|
||||
}
|
||||
dir.Write([]byte{w, h, 0, 0, 1, 0, 32, 0})
|
||||
dir.Write(u32le(len(bmp)))
|
||||
dir.Write(u32le(offset + payload.Len()))
|
||||
payload.Write(bmp)
|
||||
}
|
||||
|
||||
f, err := os.Create(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
if _, err := f.Write(dir.Bytes()); err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = f.Write(payload.Bytes())
|
||||
return err
|
||||
}
|
||||
|
||||
// scaleBox resizes src to w x w with an exact box (area-average) filter. Only
|
||||
// correct when src's dimensions are an integer multiple of w — 256 is for
|
||||
// every icoSizes entry — so no interpolation blur is introduced.
|
||||
func scaleBox(src *image.RGBA, w int) *image.RGBA {
|
||||
b := src.Bounds()
|
||||
sw, sh := b.Dx(), b.Dy()
|
||||
fx := sw / w
|
||||
fy := sh / w
|
||||
dst := image.NewRGBA(image.Rect(0, 0, w, w))
|
||||
for y := 0; y < w; y++ {
|
||||
for x := 0; x < w; x++ {
|
||||
var r, g, bl, a int64
|
||||
for sy := 0; sy < fy; sy++ {
|
||||
yy := b.Min.Y + y*fy + sy
|
||||
for sx := 0; sx < fx; sx++ {
|
||||
xx := b.Min.X + x*fx + sx
|
||||
cr, cg, cb, ca := src.At(xx, yy).RGBA()
|
||||
r += int64(cr >> 8)
|
||||
g += int64(cg >> 8)
|
||||
bl += int64(cb >> 8)
|
||||
a += int64(ca >> 8)
|
||||
}
|
||||
}
|
||||
n := int64(fx * fy)
|
||||
dst.SetRGBA(x, y, color.RGBA{
|
||||
R: uint8(r / n),
|
||||
G: uint8(g / n),
|
||||
B: uint8(bl / n),
|
||||
A: uint8(a / n),
|
||||
})
|
||||
}
|
||||
}
|
||||
return dst
|
||||
}
|
||||
|
||||
// toDIB encodes an image as a 32-bit bottom-up DIB with an all-transparent
|
||||
// AND mask — the classic icon bitmap entry.
|
||||
func toDIB(img *image.RGBA) []byte {
|
||||
b := img.Bounds()
|
||||
w, h := b.Dx(), b.Dy()
|
||||
andRow := ((w + 31) / 32) * 4
|
||||
|
||||
dib := make([]byte, 0, 40+w*h*4+andRow*h)
|
||||
dib = append(dib, u32le(40)...) // biSize
|
||||
dib = append(dib, u32le(w)...) // biWidth
|
||||
dib = append(dib, u32le(h*2)...) // biHeight (XOR + AND)
|
||||
dib = append(dib, u16le(1)...) // biPlanes
|
||||
dib = append(dib, u16le(32)...) // biBitCount
|
||||
dib = append(dib, 0, 0, 0, 0) // biCompression = 0 (BI_RGB)
|
||||
dib = append(dib, u32le(w*h*4+andRow*h)...)
|
||||
dib = append(dib, make([]byte, 16)...) // remaining header fields
|
||||
|
||||
for y := 0; y < h; y++ {
|
||||
srcY := b.Min.Y + (h - 1 - y) // DIB rows are bottom-up
|
||||
for x := 0; x < w; x++ {
|
||||
r, g, bl, a := img.At(b.Min.X+x, srcY).RGBA()
|
||||
dib = append(dib, byte(bl>>8), byte(g>>8), byte(r>>8), byte(a>>8))
|
||||
}
|
||||
}
|
||||
dib = append(dib, make([]byte, andRow*h)...) // AND mask: all zero
|
||||
return dib
|
||||
}
|
||||
|
||||
func u16le(v int) []byte {
|
||||
return []byte{byte(v), byte(v >> 8)}
|
||||
}
|
||||
|
||||
func u32le(v int) []byte {
|
||||
var b [4]byte
|
||||
binary.LittleEndian.PutUint32(b[:], uint32(v))
|
||||
return b[:]
|
||||
}
|
||||
|
||||
func goBytes(b []byte) string {
|
||||
var sb strings.Builder
|
||||
sb.WriteString("[]byte{")
|
||||
for i, x := range b {
|
||||
if i%12 == 0 {
|
||||
sb.WriteString("\n\t\t")
|
||||
}
|
||||
sb.WriteString(fmt.Sprintf("0x%02x, ", x))
|
||||
}
|
||||
sb.WriteString("\n\t}")
|
||||
return sb.String()
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -25,6 +25,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/png"
|
||||
"log"
|
||||
"net"
|
||||
@@ -80,14 +81,6 @@ type TrayCommand struct {
|
||||
Value bool `json:"value"`
|
||||
}
|
||||
|
||||
// ── Icons (Rasterized theta42.svg asset in Red, Yellow, Green, Blue) ──────────
|
||||
|
||||
var (
|
||||
iconRed = []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x06, 0x00, 0x00, 0x00, 0x07, 0x92, 0x25, 0xc4, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xea, 0x08, 0x09, 0x03, 0x1d, 0x03, 0x52, 0x50, 0x15, 0xf0, 0x00, 0x00, 0x17, 0xde, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x9c, 0x79, 0x7c, 0xcd, 0xc7, 0xfa, 0xc7, 0xdf, 0xf3, 0x3d, 0x5b, 0x16, 0x69, 0x62, 0x8f, 0x25, 0x48, 0xec, 0x7b, 0xaa, 0x41, 0x5d, 0x97, 0xaa, 0x86, 0xaa, 0xa5, 0xb8, 0xb5, 0xb4, 0xe8, 0xa2, 0xb1, 0x94, 0x5e, 0xb4, 0xb7, 0xb4, 0xb4, 0xbd, 0x96, 0xab, 0x75, 0xd1, 0x52, 0x45, 0x55, 0xd1, 0xda, 0x6a, 0xbb, 0xb4, 0xb6, 0xb6, 0x96, 0xa0, 0x45, 0x55, 0x8a, 0x22, 0x5a, 0x21, 0x94, 0x08, 0x22, 0xc4, 0x92, 0x84, 0x2c, 0x27, 0x39, 0xe7, 0xfb, 0x9d, 0xdf, 0x1f, 0xf3, 0x3d, 0x68, 0x9c, 0x24, 0x47, 0xcb, 0xbd, 0x7d, 0xfd, 0x9e, 0x7f, 0x3e, 0xc9, 0x39, 0x33, 0xcf, 0xcc, 0x3c, 0xcf, 0xcc, 0x33, 0x33, 0xcf, 0xf3, 0xcc, 0x11, 0xfc, 0xc9, 0x29, 0x3d, 0x3d, 0x3a, 0x3a, 0x3a, 0xfa, 0xe6, 0xbf, 0x47, 0x15, 0x58, 0x7f, 0x52, 0x68, 0x1b, 0x6b, 0x7e, 0xde, 0x53, 0x81, 0x7b, 0x8f, 0x89, 0x97, 0x14, 0xca, 0x53, 0x9e, 0x8a, 0x25, 0x4b, 0x6e, 0xdb, 0xb6, 0x6d, 0xdb, 0xff, 0x7a, 0x34, 0x77, 0x92, 0xf8, 0x5f, 0x35, 0x5c, 0x40, 0xb0, 0xb5, 0x15, 0x94, 0xc8, 0x51, 0x18, 0x9e, 0xae, 0xb0, 0x5e, 0x19, 0xf3, 0xeb, 0x18, 0x85, 0x55, 0xda, 0x2a, 0x2c, 0xf5, 0xa0, 0xc2, 0xa0, 0x7e, 0xe6, 0x30, 0x32, 0x14, 0x66, 0xf5, 0x37, 0xb9, 0xe7, 0x2a, 0x3c, 0x67, 0xd6, 0x3f, 0x31, 0x4e, 0xe1, 0xd1, 0x8d, 0x0a, 0x4f, 0xb7, 0x52, 0x98, 0x39, 0xcc, 0x6c, 0xff, 0xf5, 0xff, 0x95, 0x82, 0xee, 0xbb, 0x02, 0x0a, 0x08, 0xda, 0x24, 0x7b, 0xa0, 0xc2, 0x06, 0x33, 0x14, 0x76, 0xca, 0x54, 0x18, 0x5d, 0x56, 0x61, 0x3d, 0x73, 0x66, 0x97, 0x32, 0x15, 0xa1, 0x65, 0xfe, 0xb1, 0x5e, 0x18, 0x6e, 0x85, 0x99, 0x2f, 0x28, 0x3c, 0xb1, 0x43, 0xe1, 0x8e, 0xcf, 0x15, 0x7e, 0x95, 0xaf, 0xf0, 0x60, 0x43, 0x85, 0xce, 0xca, 0x9e, 0x9a, 0xf7, 0x5b, 0x31, 0xf7, 0x4d, 0x01, 0xbf, 0x15, 0xbc, 0xcd, 0x14, 0xe4, 0x5f, 0x47, 0x28, 0x1c, 0xd0, 0x51, 0x61, 0x7b, 0xbb, 0xc2, 0x32, 0x25, 0xcd, 0x82, 0x6d, 0xee, 0xdf, 0x50, 0x8b, 0x22, 0xcf, 0x4a, 0xf8, 0xae, 0xbd, 0xc2, 0x05, 0x0e, 0x85, 0xdb, 0x67, 0x2b, 0xcc, 0xdd, 0xe8, 0x29, 0x79, 0xaf, 0x15, 0x72, 0xcf, 0x14, 0xe0, 0x7d, 0xa6, 0xd7, 0x89, 0x57, 0xf8, 0xda, 0x32, 0x85, 0x3d, 0x53, 0x14, 0x06, 0x7f, 0x7e, 0xef, 0x86, 0x70, 0x3f, 0x28, 0xa7, 0x9a, 0xc2, 0xaf, 0x3a, 0x2b, 0x9c, 0x6a, 0x4e, 0x9c, 0x83, 0x8d, 0x14, 0x4a, 0xe7, 0xbd, 0x52, 0xc4, 0x1f, 0x56, 0x40, 0x81, 0x99, 0xbe, 0x5e, 0x61, 0xef, 0xde, 0x0a, 0xc7, 0xfe, 0x5d, 0x61, 0xcd, 0xf7, 0xfe, 0x70, 0x4f, 0x25, 0xf9, 0xe4, 0x03, 0x06, 0x49, 0x24, 0x01, 0x2e, 0x79, 0x48, 0x1e, 0x02, 0xc0, 0x8d, 0x1b, 0xb0, 0x8a, 0xc6, 0xa2, 0x31, 0x60, 0xa1, 0x26, 0x35, 0x01, 0x81, 0x1f, 0x7e, 0x7f, 0x5c, 0x40, 0x8a, 0x52, 0x82, 0x15, 0x4e, 0x5e, 0xa2, 0xf0, 0xb3, 0x5e, 0x0a, 0x73, 0xf2, 0xff, 0xa8, 0x22, 0xb4, 0xdf, 0x5b, 0xf1, 0xb7, 0x82, 0x7f, 0xc0, 0x5f, 0xe1, 0xf8, 0x87, 0x15, 0xce, 0xed, 0xa3, 0xf0, 0xae, 0x04, 0x6f, 0xc1, 0x02, 0xe4, 0xca, 0x59, 0x72, 0x16, 0x10, 0x6f, 0x24, 0x19, 0x49, 0xc0, 0x76, 0x3d, 0x53, 0xcf, 0x04, 0x52, 0x8c, 0x58, 0x23, 0x16, 0xc4, 0x43, 0x5a, 0x4f, 0xad, 0x27, 0x88, 0x89, 0xf6, 0x1b, 0xf6, 0x1b, 0x20, 0xa6, 0x38, 0x5a, 0x3b, 0x5a, 0x83, 0x68, 0xa5, 0x1d, 0xd0, 0x0e, 0x00, 0x57, 0x65, 0x98, 0x0c, 0x03, 0x76, 0xe8, 0x42, 0x17, 0xc0, 0x4f, 0xfa, 0x2a, 0x7d, 0x15, 0x70, 0x43, 0x0e, 0x93, 0xca, 0xd0, 0x88, 0xbb, 0x9f, 0x76, 0x95, 0xcc, 0x3d, 0x68, 0xda, 0x07, 0x0a, 0xa7, 0xbf, 0xac, 0xb0, 0xec, 0xcf, 0x1e, 0x39, 0x78, 0xb7, 0x00, 0xc5, 0xd3, 0x5d, 0x77, 0xe5, 0xb7, 0x0d, 0x95, 0x7c, 0x5f, 0xe1, 0x94, 0x04, 0x85, 0x2f, 0x96, 0x33, 0x65, 0xf9, 0x6f, 0x1f, 0x5a, 0xb6, 0x63, 0x07, 0x32, 0x64, 0x07, 0xd9, 0x01, 0x38, 0x6a, 0x04, 0x1b, 0xc1, 0x20, 0x76, 0xf8, 0xaf, 0xf1, 0x5f, 0x03, 0xda, 0xb8, 0xb0, 0x06, 0x61, 0x0d, 0xc0, 0xda, 0xbe, 0x56, 0xfb, 0x5a, 0xed, 0xc1, 0x12, 0x17, 0x3e, 0x3a, 0x7c, 0x34, 0x88, 0xd8, 0x32, 0x2d, 0xca, 0xb4, 0x00, 0x91, 0x17, 0x38, 0x28, 0x70, 0x10, 0x50, 0x5a, 0x24, 0x89, 0x24, 0x90, 0xa1, 0x39, 0x83, 0x73, 0x06, 0x83, 0x1c, 0x78, 0xb5, 0xe5, 0xd5, 0x96, 0xa0, 0xf7, 0x4c, 0x8e, 0x4f, 0x8e, 0x07, 0x3d, 0x36, 0x31, 0x2e, 0x31, 0x0e, 0xf4, 0x9e, 0xc9, 0xbf, 0x24, 0xff, 0x02, 0x32, 0x38, 0xdb, 0xc8, 0x36, 0x80, 0x08, 0x6d, 0x86, 0x36, 0x03, 0x28, 0x2b, 0x9c, 0xc2, 0x09, 0x60, 0xae, 0x30, 0xdf, 0xc8, 0xdc, 0xb3, 0xbe, 0x34, 0x15, 0x31, 0x7c, 0xba, 0xc2, 0x94, 0xdc, 0x9b, 0x05, 0x7c, 0x5c, 0x19, 0xd6, 0xdf, 0x27, 0xf8, 0x07, 0xcc, 0x25, 0x39, 0xe5, 0x7b, 0x85, 0x31, 0x5f, 0x2a, 0xd4, 0x8a, 0x52, 0xa8, 0x9aLine truncated
|
||||
iconYellow = []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x06, 0x00, 0x00, 0x00, 0x07, 0x92, 0x25, 0xc4, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xea, 0x08, 0x09, 0x03, 0x1d, 0x03, 0x52, 0x50, 0x15, 0xf0, 0x00, 0x00, 0x1b, 0x80, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x9c, 0x67, 0x78, 0x55, 0x45, 0xb7, 0x80, 0xdf, 0xd9, 0xe7, 0x9c, 0x9c, 0xf4, 0x9e, 0x90, 0x84, 0x92, 0x50, 0xa5, 0x37, 0x81, 0x80, 0x54, 0x69, 0x4a, 0x55, 0xc0, 0xd0, 0x7b, 0x11, 0x01, 0x41, 0x45, 0x04, 0x15, 0x41, 0x51, 0x41, 0x44, 0x14, 0x10, 0xec, 0x48, 0x47, 0xe9, 0x52, 0x05, 0xae, 0x48, 0x07, 0x29, 0x42, 0xe8, 0x25, 0x40, 0x82, 0x40, 0xa8, 0xe9, 0xfd, 0xb4, 0x3d, 0xf7, 0xc7, 0xec, 0x84, 0x4f, 0xae, 0x31, 0x41, 0xf1, 0xf9, 0x7c, 0xee, 0xfa, 0xf3, 0x26, 0xe7, 0xec, 0x3d, 0x7b, 0xf6, 0x5a, 0x53, 0xd6, 0xac, 0x59, 0x73, 0x04, 0xff, 0x72, 0xb9, 0x7b, 0x77, 0xd3, 0x26, 0x77, 0xf7, 0x82, 0x7f, 0xcf, 0x2a, 0x98, 0x8f, 0x29, 0x5a, 0x26, 0x1b, 0x9f, 0xc7, 0x28, 0x38, 0x0f, 0x18, 0xbc, 0xa3, 0x28, 0xaf, 0xe4, 0xdf, 0x18, 0x1a, 0xda, 0xa9, 0x53, 0x5e, 0xde, 0x7f, 0xfb, 0x6d, 0xfe, 0xaf, 0x88, 0xff, 0xd6, 0x83, 0x1f, 0x50, 0xec, 0x63, 0x0a, 0xde, 0x39, 0x8a, 0x65, 0x53, 0x15, 0xab, 0x06, 0x1b, 0x5f, 0x0f, 0x51, 0x2c, 0xd3, 0x52, 0x31, 0xb0, 0x8e, 0xa2, 0x4f, 0x5f, 0xe3, 0x35, 0xd2, 0x14, 0xb3, 0x06, 0x29, 0xa6, 0xe6, 0x2a, 0x5e, 0x37, 0xee, 0x8f, 0x7b, 0x5b, 0xf1, 0xec, 0x26, 0xc5, 0xf8, 0xa6, 0x8a, 0xe9, 0xa3, 0x8d, 0xe7, 0x8f, 0xff, 0x6f, 0x19, 0xe8, 0x1f, 0x37, 0xc0, 0x03, 0x8a, 0x36, 0xc4, 0xcd, 0x4b, 0xb1, 0xfa, 0x6c, 0xc5, 0x0e, 0xe9, 0x8a, 0xad, 0x43, 0x14, 0xab, 0x1a, 0x2d, 0x3b, 0xd0, 0x30, 0x84, 0x96, 0xfe, 0xf7, 0x6a, 0xa1, 0x3b, 0x15, 0xd3, 0x07, 0x2a, 0xc6, 0xed, 0x54, 0xdc, 0xb9, 0x4c, 0x71, 0xb3, 0x5d, 0xf1, 0x78, 0x0d, 0xc5, 0xbc, 0x52, 0xf9, 0x77, 0xfe, 0xd3, 0x86, 0xf9, 0xc7, 0x0c, 0xf0, 0x7b, 0xc5, 0x5b, 0x0c, 0x45, 0x36, 0x79, 0x49, 0x71, 0x68, 0x7b, 0xc5, 0xb6, 0x6e, 0x8a, 0xc1, 0x01, 0xc6, 0x85, 0x2d, 0xfe, 0xb9, 0x57, 0xfd, 0x33, 0xc9, 0xef, 0x09, 0xbb, 0xdb, 0x2a, 0xce, 0xb7, 0x2a, 0xfe, 0x3c, 0x4f, 0x31, 0x77, 0x53, 0xfe, 0x95, 0x8f, 0xda, 0x20, 0x8f, 0xcc, 0x00, 0x7f, 0xdc, 0xd2, 0x2b, 0x9f, 0x54, 0x7c, 0x75, 0xb9, 0x62, 0x4c, 0xa2, 0xa2, 0xdf, 0xb2, 0x47, 0xf7, 0x0a, 0xff, 0x84, 0xe4, 0x44, 0x29, 0x6e, 0xee, 0xa8, 0x38, 0xc3, 0x68, 0x38, 0xc7, 0x6b, 0x2a, 0xca, 0xbc, 0x47, 0x65, 0x88, 0xbf, 0x6d, 0x80, 0x07, 0x5a, 0xfa, 0x06, 0xc5, 0x1e, 0x3d, 0x14, 0x27, 0xbf, 0xa8, 0x58, 0xf1, 0xa3, 0xbf, 0x5d, 0x53, 0x2b, 0x16, 0x24, 0x88, 0xc7, 0x28, 0x85, 0x1d, 0x68, 0x48, 0x65, 0x99, 0x0b, 0x58, 0x30, 0x21, 0x81, 0x23, 0xc4, 0x09, 0x0f, 0x90, 0x67, 0xf9, 0x0d, 0x37, 0x20, 0x07, 0x1b, 0xda, 0xdf, 0x57, 0x90, 0x92, 0x44, 0x3f, 0xc5, 0xe9, 0x4b, 0x14, 0x17, 0x74, 0x57, 0xcc, 0xb1, 0xff, 0x5d, 0x43, 0xfc, 0x65, 0x03, 0xfc, 0x5e, 0xf1, 0xbe, 0x1e, 0x8a, 0x13, 0xae, 0x2a, 0xbe, 0xf4, 0x86, 0xa2, 0xd7, 0xb7, 0xc5, 0x2e, 0xd0, 0x85, 0x8e, 0x00, 0xf1, 0x9e, 0xe8, 0x27, 0xef, 0x81, 0xa6, 0x8b, 0x51, 0x6c, 0x00, 0x51, 0x42, 0xfc, 0xc2, 0x59, 0xd0, 0x53, 0xf4, 0x0f, 0xe8, 0x0a, 0xce, 0x34, 0x57, 0x49, 0xb1, 0x04, 0x9c, 0x4e, 0xbd, 0x82, 0x58, 0x08, 0xac, 0x95, 0xfb, 0xf1, 0x01, 0xd3, 0x29, 0xd3, 0x76, 0xf9, 0x02, 0x98, 0x2b, 0x9a, 0xb2, 0x64, 0x1f, 0x30, 0xbd, 0xac, 0xed, 0x60, 0x21, 0xc8, 0xc6, 0x72, 0x1c, 0x91, 0xa0, 0xa7, 0xc8, 0x69, 0x74, 0x05, 0xd9, 0x55, 0x4e, 0x15, 0x25, 0x01, 0xed, 0xaf, 0xbc, 0xbb, 0xbd, 0x85, 0xe2, 0xc2, 0xba, 0x8a, 0x93, 0x06, 0x2b, 0xde, 0xab, 0x91, 0x7f, 0xc5, 0xc3, 0x1a, 0xe4, 0xa1, 0x2b, 0xf1, 0x7b, 0xc5, 0x07, 0xcc, 0x54, 0xfc, 0xf0, 0x9c, 0xe2, 0xe0, 0x50, 0x45, 0xd3, 0x07, 0x45, 0x16, 0x64, 0xc3, 0x81, 0x00, 0x71, 0x5e, 0x7c, 0x25, 0x13, 0xc0, 0xd4, 0x56, 0x2c, 0x64, 0x39, 0x64, 0x5f, 0xb4, 0xed, 0xd7, 0xe6, 0x41, 0xfc, 0xd9, 0xdb, 0xab, 0x2c, 0x9d, 0xe1, 0x74, 0xcd, 0xab, 0x41, 0xd6, 0x6c, 0x88, 0xb3, 0x25, 0xde, 0x71, 0xbb, 0x05, 0x77, 0xba, 0xa4, 0x96, 0x35, 0xad, 0x83, 0x8c, 0xef, 0x73, 0x26, 0x9b, 0x02, 0x41, 0x3a, 0x68, 0x4b, 0x15, 0xf0, 0x19, 0xe1, 0x71, 0x5e, 0x0f, 0x84, 0x50, 0xa7, 0xdf, 0x4a, 0xe7, 0x17, 0x50, 0x61, 0x6a, 0x84, 0xd9, 0x11, 0x03, 0x35, 0xf6, 0x46, 0x5d, 0xb3, 0xf9, 0x40, 0x85, 0x77, 0x23, 0x84, 0x3d, 0x06, 0x7c, 0x6e, 0x78, 0xd4, 0xd2, 0x25, 0xc8, 0xea, 0x72, 0x23, 0xed, 0x40, 0xbf, 0x22, 0xeb, 0x88, 0x1a, 0x14, 0xf4, 0xb0, 0x62, 0x8a, 0x31, 0x67, 0xad, 0x1b, 0xa5, 0x38, 0xe6, 0x13, 0xc5, 0xc4, 0xdc, 0x87, 0x35, 0x84, 0xf9, 0xaf, 0x29, 0xde, 0xd7, 0xe8, 0x92, 0x1f, 0xee, 0x57, 0x1c, 0xb2, 0x4e, 0x51, 0x2b, 0xdc, 0xa0, 0xba, 0x7a, 0x3d, 0x11, 0x4e, 0x20, 0x4e, 0xd0, 0x5e, 0xd7, 0xf6, 0xca, 0x05Line truncated
|
||||
iconGreen = []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x06, 0x00, 0x00, 0x00, 0x07, 0x92, 0x25, 0xc4, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xea, 0x08, 0x09, 0x03, 0x1d, 0x03, 0x52, 0x50, 0x15, 0xf0, 0x00, 0x00, 0x18, 0xcd, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x9c, 0x77, 0x74, 0x55, 0xc5, 0xd6, 0xc0, 0x7f, 0x73, 0x6e, 0x4b, 0x4f, 0x20, 0x01, 0x02, 0x84, 0x10, 0x4a, 0xa8, 0xd2, 0xa5, 0x19, 0xa4, 0x0a, 0x28, 0x20, 0x28, 0x82, 0x34, 0x45, 0x40, 0x04, 0x7d, 0x82, 0x48, 0x53, 0x44, 0x9a, 0x05, 0xa5, 0xaa, 0x08, 0x82, 0x8a, 0x74, 0x51, 0x44, 0x09, 0x20, 0x82, 0xa8, 0xf0, 0x00, 0xa5, 0xca, 0xa3, 0xf7, 0x96, 0x40, 0x42, 0x02, 0x84, 0x98, 0x10, 0x52, 0xef, 0xcd, 0x3d, 0x67, 0xbe, 0x3f, 0xce, 0x04, 0x25, 0x85, 0x5c, 0x54, 0xde, 0x73, 0x7d, 0x7b, 0x2d, 0xd6, 0x2f, 0xdc, 0x3b, 0x33, 0x67, 0xce, 0xde, 0x67, 0x66, 0xf6, 0xec, 0xd9, 0xe7, 0x0a, 0xfe, 0xe1, 0x52, 0xb9, 0xf2, 0xae, 0x5d, 0xfd, 0xfb, 0xdf, 0xfa, 0xef, 0x09, 0x13, 0xd6, 0x03, 0x26, 0x6d, 0x93, 0xd4, 0xe7, 0x3d, 0x4d, 0xb8, 0x77, 0x29, 0x5e, 0x33, 0x29, 0x2f, 0xe4, 0x55, 0x8c, 0x89, 0x89, 0x8a, 0x5a, 0xbe, 0xfc, 0x7f, 0x7d, 0x37, 0x05, 0x45, 0xfc, 0xaf, 0x2e, 0x9c, 0x4f, 0xb1, 0xd5, 0x4d, 0xf8, 0x65, 0x99, 0xac, 0x94, 0x6a, 0xb2, 0x56, 0x88, 0xfa, 0xfa, 0x59, 0x93, 0xe1, 0x6d, 0x4d, 0x96, 0x6c, 0x60, 0xd2, 0xff, 0x29, 0x75, 0x1b, 0x37, 0x4c, 0x66, 0x0c, 0x34, 0x99, 0x9a, 0x6d, 0x32, 0x5e, 0xd5, 0x3f, 0x3b, 0xd9, 0xe4, 0x89, 0x0d, 0x26, 0x63, 0x1e, 0x34, 0x99, 0x36, 0x5c, 0x5d, 0xff, 0x95, 0xff, 0x95, 0x81, 0xee, 0xb9, 0x01, 0xf2, 0x29, 0x5a, 0x89, 0xdd, 0xd7, 0xe4, 0x7d, 0x1f, 0x98, 0xec, 0x9c, 0x66, 0xf2, 0xa1, 0x52, 0x26, 0x6b, 0xa9, 0x27, 0xbb, 0xa4, 0x32, 0x84, 0x96, 0xf6, 0xd7, 0x7a, 0x61, 0xb8, 0x4d, 0xa6, 0x0d, 0x30, 0x79, 0xf6, 0xdf, 0x26, 0xff, 0xfd, 0xb9, 0xc9, 0xef, 0x5c, 0x26, 0x0f, 0xd6, 0x31, 0x99, 0x13, 0x96, 0x57, 0xf3, 0x5e, 0x1b, 0xe6, 0x9e, 0x19, 0xe0, 0x76, 0xc5, 0xdb, 0x94, 0x22, 0x5b, 0x8c, 0x30, 0x39, 0xb8, 0x93, 0xc9, 0x0e, 0x76, 0x93, 0x21, 0x25, 0x54, 0xc1, 0xd6, 0xf7, 0xee, 0x56, 0xef, 0x24, 0x79, 0x23, 0x61, 0x7b, 0x07, 0x93, 0x9f, 0x39, 0x4c, 0x6e, 0x9d, 0x67, 0x32, 0x7b, 0x43, 0x5e, 0xc9, 0xbf, 0xdb, 0x20, 0x7f, 0x9b, 0x01, 0x0a, 0x7f, 0xd2, 0x6b, 0x1c, 0x31, 0x39, 0x7a, 0xa5, 0xc9, 0x9e, 0x09, 0x26, 0x03, 0x3f, 0xff, 0xfb, 0x6e, 0xe1, 0x5e, 0x48, 0x56, 0x84, 0xc9, 0xef, 0xba, 0x98, 0x9c, 0xa1, 0x1e, 0x9c, 0x83, 0x75, 0x4d, 0xca, 0x9c, 0xbf, 0xcb, 0x10, 0x7f, 0xd9, 0x00, 0xf9, 0x9e, 0xf4, 0xf5, 0x26, 0x7b, 0xf5, 0x32, 0x39, 0x69, 0x98, 0xc9, 0xc8, 0x99, 0x7f, 0xb9, 0xa7, 0x4e, 0x0c, 0x72, 0x41, 0x9e, 0x21, 0x8b, 0x78, 0x60, 0x0f, 0x69, 0x9c, 0x02, 0x72, 0x91, 0xb8, 0x81, 0xa6, 0x04, 0x50, 0x03, 0x44, 0x6d, 0xfc, 0x88, 0x00, 0x7c, 0xd0, 0x70, 0xfc, 0x75, 0x05, 0x99, 0x92, 0x10, 0x68, 0x72, 0x9a, 0x52, 0xf9, 0xe2, 0x27, 0x4d, 0x66, 0xb9, 0xfe, 0xaa, 0x21, 0xfe, 0xb4, 0x01, 0x6e, 0x57, 0x7c, 0x80, 0xb7, 0xc9, 0x57, 0x2f, 0x9a, 0x1c, 0xf1, 0x9a, 0x49, 0xdf, 0x45, 0x1e, 0x37, 0x68, 0x41, 0xa0, 0x81, 0x9c, 0xc0, 0x05, 0x96, 0x82, 0xa1, 0xf3, 0x9a, 0x31, 0x1d, 0xe4, 0x15, 0xb9, 0x49, 0x36, 0x02, 0xad, 0xb4, 0x98, 0xad, 0x4d, 0x05, 0x6b, 0x39, 0x11, 0x6c, 0xd1, 0xc1, 0xea, 0x2f, 0x82, 0x2c, 0x19, 0x20, 0x7a, 0x50, 0x9a, 0x07, 0xc1, 0x1d, 0x29, 0x75, 0xbd, 0x01, 0xb8, 0x8f, 0xc8, 0x2b, 0x7a, 0x3a, 0xe8, 0x33, 0x65, 0x3f, 0xa3, 0x09, 0x88, 0x3d, 0xe2, 0x7e, 0x31, 0x07, 0xb4, 0xd2, 0xcc, 0x12, 0xef, 0x80, 0x58, 0x47, 0x5d, 0x31, 0x19, 0x30, 0x00, 0x79, 0xb7, 0x77, 0xed, 0x6a, 0x6d, 0x72, 0x49, 0x43, 0x93, 0x13, 0x07, 0x99, 0xbc, 0x5e, 0x27, 0xaf, 0xc4, 0xdd, 0x1a, 0xe4, 0xae, 0x0d, 0x70, 0xbb, 0xe2, 0x4b, 0xcc, 0x32, 0x39, 0xfd, 0xa4, 0xc9, 0x41, 0xa5, 0x95, 0x36, 0xdf, 0x2d, 0xb6, 0x21, 0x07, 0x1a, 0x36, 0x90, 0xd5, 0xd9, 0x23, 0x07, 0x81, 0xb1, 0x51, 0x0e, 0x91, 0x3d, 0xc0, 0xa7, 0x95, 0x65, 0x9d, 0xe3, 0x55, 0xa8, 0x3c, 0xde, 0xdb, 0xbf, 0x6c, 0x38, 0xd4, 0x89, 0xf2, 0x8b, 0xa9, 0x94, 0x0e, 0xd5, 0x07, 0xf8, 0x04, 0x87, 0x65, 0x42, 0x68, 0xa2, 0xbd, 0x7d, 0x89, 0x17, 0xc0, 0x7f, 0x9c, 0x75, 0xba, 0xcf, 0x61, 0x10, 0x5e, 0x74, 0x10, 0xdb, 0x21, 0x63, 0xbc, 0xbe, 0x29, 0xfb, 0x12, 0x24, 0x1d, 0x71, 0xd5, 0xbd, 0x71, 0x0a, 0xce, 0x55, 0xcb, 0xea, 0x91, 0x50, 0x1d, 0x8e, 0x1d, 0xcf, 0x8c, 0x8c, 0x0d, 0x85, 0x73, 0xb5, 0xb2, 0x7a, 0x26, 0xd4, 0x82, 0x74, 0xdd, 0x3d, 0x3f, 0x7b, 0x2a, 0x68, 0x67, 0xc4, 0x04, 0xd1, 0x1b, 0x44, 0x24, 0x8f, 0x8a, 0x93, 0xdc, 0x1a, 0x61, 0x1e, 0x8a, 0x5a, 0xb3, 0xa2, 0x5f, 0x34, 0xf9, 0xd2, 0x7b, 0x26, 0x13, 0xb2, 0xef, 0xd6, 0x10, 0xd6, 0x3f, 0xa7, 0xf8, 0x00, 0x35, 0x24, 0xa7, 0xef, 0x34, 0xf9, 0x6c, 0xb4, 0x49Line truncated
|
||||
iconBlue = []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x06, 0x00, 0x00, 0x00, 0x07, 0x92, 0x25, 0xc4, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xea, 0x08, 0x09, 0x03, 0x1d, 0x03, 0x52, 0x50, 0x15, 0xf0, 0x00, 0x00, 0x17, 0x86, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x9c, 0x77, 0x7c, 0x55, 0xc5, 0xf6, 0xf6, 0xbf, 0xb3, 0xf7, 0x39, 0x27, 0xa4, 0x90, 0x84, 0x92, 0x84, 0x16, 0x4a, 0xe8, 0xbd, 0xa3, 0x94, 0xd0, 0x3b, 0x8a, 0x17, 0x04, 0x91, 0x22, 0x82, 0x70, 0x45, 0x8a, 0x80, 0x88, 0x70, 0x41, 0x04, 0x54, 0xbc, 0x0a, 0x22, 0x88, 0x82, 0xc2, 0x55, 0x8a, 0x54, 0x0b, 0x82, 0x8a, 0x5c, 0x50, 0x2f, 0x9d, 0x80, 0xf4, 0x5e, 0x42, 0x09, 0x2d, 0x40, 0x02, 0x21, 0x8d, 0xf4, 0x73, 0xf6, 0x9e, 0xdf, 0x1f, 0x7b, 0x0e, 0x60, 0x8a, 0x39, 0x41, 0x79, 0xf5, 0xf3, 0xae, 0x7f, 0x9e, 0x64, 0xef, 0x99, 0x35, 0xb3, 0xd7, 0x33, 0x75, 0xcd, 0x9a, 0x23, 0xf8, 0x9b, 0x4b, 0xf3, 0xe6, 0x6f, 0xbd, 0x95, 0x96, 0x76, 0xef, 0xdf, 0x53, 0x16, 0xd8, 0x0e, 0x59, 0x68, 0x9f, 0xaa, 0x9e, 0xf7, 0xb6, 0xc0, 0x15, 0xa1, 0x30, 0xd6, 0x42, 0x79, 0xd1, 0x9d, 0x31, 0x22, 0x62, 0xea, 0x54, 0x1f, 0x9f, 0xbf, 0xfa, 0x6b, 0x72, 0x8a, 0xf8, 0xab, 0x0a, 0xce, 0x66, 0xd8, 0xaa, 0x16, 0xf8, 0xa9, 0x27, 0x15, 0x12, 0x2c, 0xac, 0x51, 0x5c, 0xbd, 0x1e, 0x62, 0x61, 0xd9, 0xb6, 0x16, 0x16, 0xad, 0x6f, 0x61, 0xe1, 0x01, 0xea, 0x33, 0x12, 0x2d, 0x4c, 0x19, 0x6c, 0x61, 0x42, 0xba, 0x85, 0xd7, 0x54, 0xfe, 0x73, 0xd3, 0x2c, 0x3c, 0xb5, 0xc1, 0xc2, 0xa8, 0x70, 0x0b, 0x93, 0x5e, 0x56, 0xe5, 0x4f, 0xf8, 0xab, 0x08, 0x7a, 0xe4, 0x04, 0x64, 0x33, 0xb4, 0x12, 0x87, 0xaf, 0x85, 0xb5, 0x3e, 0xb4, 0xb0, 0x5b, 0x92, 0x85, 0xed, 0x83, 0x2c, 0xac, 0xa1, 0x5a, 0x76, 0x51, 0x45, 0x84, 0x96, 0xf4, 0xc7, 0x6a, 0x61, 0xba, 0x2c, 0x4c, 0x1a, 0x64, 0xe1, 0xb9, 0xad, 0x16, 0x6e, 0x5d, 0x69, 0xe1, 0x8f, 0x59, 0x16, 0x1e, 0xae, 0x6d, 0x61, 0x46, 0x19, 0x77, 0xce, 0x47, 0x4d, 0xcc, 0x23, 0x23, 0xe0, 0xb7, 0x86, 0xb7, 0x2b, 0x43, 0xb6, 0x18, 0x63, 0xe1, 0xd0, 0xae, 0x16, 0x76, 0x74, 0x58, 0x58, 0xbc, 0x88, 0x4a, 0xd8, 0xfa, 0xd1, 0x7d, 0xea, 0xef, 0x89, 0xbb, 0x27, 0x6c, 0xef, 0x68, 0xe1, 0xe7, 0x5e, 0x16, 0x6e, 0x99, 0x6f, 0x61, 0xfa, 0x06, 0x77, 0xca, 0x3f, 0x9b, 0x90, 0x3f, 0x8d, 0x80, 0xdc, 0x5b, 0x7a, 0xb5, 0x63, 0x16, 0xbe, 0xba, 0xca, 0xc2, 0xde, 0xd7, 0x2d, 0x0c, 0x58, 0xf9, 0xe7, 0x7d, 0xc2, 0xa3, 0x90, 0xb4, 0xf2, 0x16, 0xfe, 0xf8, 0x84, 0x85, 0xb3, 0x54, 0xc3, 0x39, 0x5c, 0xc7, 0x42, 0x99, 0xf1, 0x67, 0x11, 0xf1, 0x87, 0x09, 0xc8, 0xd6, 0xd2, 0xbf, 0xb7, 0xb0, 0x4f, 0x1f, 0x0b, 0xa7, 0x8e, 0xb2, 0xb0, 0xf2, 0xfb, 0x7f, 0xb8, 0xa6, 0x59, 0x58, 0xc3, 0xc8, 0x45, 0x6e, 0x61, 0x82, 0x3c, 0xc4, 0x25, 0x4c, 0xc0, 0x85, 0x09, 0x20, 0xea, 0x53, 0x0e, 0x0d, 0xa8, 0x42, 0x09, 0x34, 0xc0, 0x1b, 0xc7, 0x1f, 0x37, 0x8f, 0x5b, 0xae, 0x07, 0x58, 0xf8, 0xde, 0x72, 0x0b, 0x97, 0x3c, 0x63, 0x61, 0x5a, 0xd6, 0x1f, 0x25, 0xe2, 0xa1, 0x09, 0xf8, 0xad, 0xe1, 0xfd, 0xbd, 0x2d, 0x9c, 0x78, 0xd9, 0xc2, 0x31, 0x93, 0x2c, 0xf4, 0x5d, 0xec, 0xb1, 0x42, 0x1d, 0x0d, 0x40, 0xce, 0x62, 0x23, 0x4e, 0x90, 0x8f, 0xcb, 0x8b, 0xdc, 0x06, 0xe9, 0x25, 0x07, 0x93, 0x02, 0x22, 0x52, 0xd4, 0x21, 0x18, 0x6c, 0x2b, 0xb5, 0x9e, 0xa2, 0x26, 0xd8, 0x16, 0xea, 0xdd, 0xa8, 0x01, 0x74, 0xa5, 0x2e, 0x36, 0x70, 0x2d, 0x30, 0x8f, 0x73, 0x06, 0x8c, 0x2e, 0xc6, 0x72, 0x79, 0x0a, 0xcc, 0x13, 0xf2, 0x73, 0x6e, 0x00, 0xdf, 0x31, 0x96, 0x42, 0xa0, 0x9d, 0xd3, 0xea, 0x12, 0x0c, 0xe2, 0x33, 0x86, 0xe0, 0x05, 0x48, 0x64, 0xc1, 0xbf, 0x3a, 0xab, 0xb5, 0x85, 0x4b, 0x1b, 0x58, 0xf8, 0xc6, 0x0b, 0x16, 0xde, 0xae, 0xed, 0x4e, 0x51, 0x50, 0x42, 0x0a, 0x4c, 0xc0, 0x6f, 0x0d, 0x5f, 0x64, 0xb6, 0x85, 0x33, 0x4f, 0x5b, 0xf8, 0x42, 0xb0, 0xb2, 0xe6, 0xbb, 0xf9, 0x2a, 0xf2, 0xc2, 0x06, 0x20, 0x5b, 0xf1, 0x0e, 0xe9, 0x60, 0xa6, 0x9b, 0x3f, 0x12, 0x0b, 0xde, 0xc1, 0x8e, 0x83, 0x62, 0x04, 0x94, 0x9b, 0x5f, 0x7c, 0xba, 0x78, 0x09, 0xaa, 0x85, 0x96, 0x5c, 0xa0, 0x9d, 0x81, 0x30, 0xef, 0xe0, 0x8d, 0xda, 0x87, 0x10, 0xd4, 0xa0, 0xf0, 0x0c, 0x91, 0x05, 0x7e, 0xc9, 0x85, 0x96, 0x32, 0x1b, 0xc4, 0x2d, 0xb1, 0x00, 0x5f, 0x48, 0x8d, 0xce, 0xb8, 0xc5, 0x1b, 0x10, 0xd7, 0x2b, 0x65, 0xbc, 0x2c, 0x09, 0x97, 0x7a, 0xdc, 0xae, 0x66, 0x4e, 0x87, 0xb3, 0x49, 0x37, 0xc7, 0x9b, 0xd5, 0xe1, 0x72, 0xaf, 0xdb, 0x35, 0xe4, 0x74, 0x48, 0x99, 0x90, 0xb1, 0x52, 0xfe, 0x0b, 0xb4, 0x15, 0xc2, 0x97, 0x62, 0x20, 0x6c, 0x62, 0x35, 0x7e, 0xdc, 0xef, 0x61, 0x9e, 0x89, 0x9a, 0xb3, 0xd6, 0x8d, 0xb4, 0x70, 0xf4, 0x1c, 0x0b, 0xaf, 0xa7, 0x17, 0x94, 0x08, 0x8f, 0x09, 0xc8, 0xd6, 0xe2, 0x55, 0x97, 0x9c, 0xdd, 0xc6, 0xc2, 0x21, 0xeb, 0x2c, 0xd4, 0xf2, 0xd6, 0xa7, 0xa9, 0xb2, 0x62, 0x49, 0x46, 0x82, 0x71Line truncated
|
||||
)
|
||||
|
||||
// ── Main ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -288,15 +281,21 @@ func toWindowsIcon(pngBytes []byte) []byte {
|
||||
return pngToIco(pngBytes)
|
||||
}
|
||||
|
||||
// iconSizes are the sizes embedded in the Windows ICO. The 256px source PNG
|
||||
// is a multiple of every entry, so each is an exact box-filter downscale.
|
||||
var iconSizes = []int{16, 24, 32, 48, 64, 128, 256}
|
||||
|
||||
// pngToIco decodes a PNG and re-encodes it as classic BMP (XOR + AND mask)
|
||||
// entries at 16/32/48px — the format LoadImage has always supported.
|
||||
// entries at every icon size from 16 to 256 — the format LoadImage has always
|
||||
// supported. The source PNG is rendered at 256px (a multiple of every target
|
||||
// size), so scaleBox is an exact box filter: no nearest-neighbour jaggies.
|
||||
func pngToIco(pngBytes []byte) []byte {
|
||||
src, err := png.Decode(bytes.NewReader(pngBytes))
|
||||
if err != nil {
|
||||
return pngBytes // give systray the raw bytes; it will log and continue
|
||||
}
|
||||
|
||||
sizes := []int{16, 32, 48}
|
||||
sizes := iconSizes
|
||||
var dir []byte
|
||||
var payload []byte
|
||||
offset := 6 + len(sizes)*16 // ICONDIR + all ICONDIRENTRYs
|
||||
@@ -305,7 +304,7 @@ func pngToIco(pngBytes []byte) []byte {
|
||||
dir = append(dir, 0, 0, 1, 0, byte(len(sizes)), 0)
|
||||
|
||||
for _, s := range sizes {
|
||||
bmp := rgbaToDIB(scaleNearest(src, s, s))
|
||||
bmp := rgbaToDIB(scaleBox(src, s))
|
||||
dw, dh := byte(s), byte(s)
|
||||
if s >= 256 {
|
||||
dw, dh = 0, 0
|
||||
@@ -319,18 +318,36 @@ func pngToIco(pngBytes []byte) []byte {
|
||||
return append(dir, payload...)
|
||||
}
|
||||
|
||||
// scaleNearest resizes src to w x h with nearest-neighbour sampling.
|
||||
func scaleNearest(src image.Image, w, h int) image.Image {
|
||||
// scaleBox resizes src to w x w with an exact box (area-average) filter. Only
|
||||
// correct when src's dimensions are an integer multiple of w — which 256 is
|
||||
// for every icon size above — so no interpolation blur is introduced.
|
||||
func scaleBox(src image.Image, w int) *image.RGBA {
|
||||
b := src.Bounds()
|
||||
if b.Dx() == w && b.Dy() == h {
|
||||
return src
|
||||
}
|
||||
dst := image.NewRGBA(image.Rect(0, 0, w, h))
|
||||
for y := 0; y < h; y++ {
|
||||
sy := b.Min.Y + y*b.Dy()/h
|
||||
sw, sh := b.Dx(), b.Dy()
|
||||
fx := sw / w
|
||||
fy := sh / w
|
||||
dst := image.NewRGBA(image.Rect(0, 0, w, w))
|
||||
for y := 0; y < w; y++ {
|
||||
for x := 0; x < w; x++ {
|
||||
sx := b.Min.X + x*b.Dx()/w
|
||||
dst.Set(x, y, src.At(sx, sy))
|
||||
var r, g, bl, a int64
|
||||
for sy := 0; sy < fy; sy++ {
|
||||
yy := b.Min.Y + y*fy + sy
|
||||
for sx := 0; sx < fx; sx++ {
|
||||
xx := b.Min.X + x*fx + sx
|
||||
cr, cg, cb, ca := src.At(xx, yy).RGBA()
|
||||
r += int64(cr >> 8)
|
||||
g += int64(cg >> 8)
|
||||
bl += int64(cb >> 8)
|
||||
a += int64(ca >> 8)
|
||||
}
|
||||
}
|
||||
n := int64(fx * fy)
|
||||
dst.SetRGBA(x, y, color.RGBA{
|
||||
R: uint8(r / n),
|
||||
G: uint8(g / n),
|
||||
B: uint8(bl / n),
|
||||
A: uint8(a / n),
|
||||
})
|
||||
}
|
||||
}
|
||||
return dst
|
||||
|
||||
@@ -23,8 +23,8 @@ func TestPNGToIco(t *testing.T) {
|
||||
t.Errorf("type must be 1 (icon)")
|
||||
}
|
||||
count := int(ico[4]) | int(ico[5])<<8
|
||||
if count != 3 {
|
||||
t.Fatalf("expected 3 icon entries, got %d", count)
|
||||
if count != len(iconSizes) {
|
||||
t.Fatalf("expected %d icon entries, got %d", len(iconSizes), count)
|
||||
}
|
||||
|
||||
// Each ICONDIRENTRY: valid size, planes=1, bpp=32, DIB with BITMAPINFOHEADER.
|
||||
@@ -38,6 +38,9 @@ func TestPNGToIco(t *testing.T) {
|
||||
if h == 0 {
|
||||
h = 256
|
||||
}
|
||||
if w != iconSizes[i] || h != iconSizes[i] {
|
||||
t.Errorf("entry %d: encoded size %dx%d, want %dx%d", i, w, h, iconSizes[i], iconSizes[i])
|
||||
}
|
||||
planes := int(ico[e+4]) | int(ico[e+5])<<8
|
||||
bpp := int(ico[e+6]) | int(ico[e+7])<<8
|
||||
size := int(ico[e+8]) | int(ico[e+9])<<8 | int(ico[e+10])<<16 | int(ico[e+11])<<24
|
||||
|
||||
@@ -43,10 +43,12 @@ ArchitecturesAllowed=x64compatible
|
||||
ArchitecturesInstallIn64BitMode=x64compatible
|
||||
OutputDir={#AgentDir}
|
||||
OutputBaseFilename=theta-agent-{#MyAppVersion}-windows-amd64-setup
|
||||
SetupIconFile=theta-agent.ico
|
||||
Compression=lzma2
|
||||
SolidCompression=yes
|
||||
WizardStyle=modern
|
||||
UninstallDisplayName={#MyAppName}
|
||||
UninstallDisplayIcon={app}\theta-agent.ico
|
||||
CloseApplications=no
|
||||
MinVersion=10.0.17763
|
||||
|
||||
@@ -69,15 +71,19 @@ Source: "{#AgentDir}\theta-agent-helper-windows-amd64.exe"; DestDir: "{app}"; Fl
|
||||
; driver is signed; no signature phone-home).
|
||||
Source: "{#VendorDir}\wireguard-amd64-0.5.3.msi"; DestDir: "{app}\vendor"; Flags: ignoreversion
|
||||
|
||||
; Product icon (Start menu shortcut, uninstaller display icon). Generated by
|
||||
; cmd/icon-gen from the same badge the tray uses.
|
||||
Source: "theta-agent.ico"; DestDir: "{app}"; Flags: ignoreversion
|
||||
|
||||
; OpenCredential credential provider installer (BSD-3 pGina fork) + the VC++
|
||||
; runtime it needs. Both install silently at [Run].
|
||||
Source: "{#VendorDir}\OpenCredentialInstaller-1.0.0.0.exe"; DestDir: "{app}\vendor"; Flags: ignoreversion
|
||||
Source: "{#VendorDir}\vc_redist.x64.exe"; DestDir: "{app}\vendor"; Flags: ignoreversion
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\Theta Agent Tray"; Filename: "{app}\tray\theta-agent-tray-windows-amd64.exe"; Comment: "Theta Agent status tray"
|
||||
Name: "{group}\Theta Agent Tray"; Filename: "{app}\tray\theta-agent-tray-windows-amd64.exe"; IconFilename: "{app}\theta-agent.ico"; Comment: "Theta Agent status tray"
|
||||
Name: "{group}\Open Agent Config"; Filename: "notepad.exe"; Parameters: "{commonappdata}\Theta42\agent.yml"; Comment: "Open the agent configuration file"
|
||||
Name: "{group}\Uninstall Theta Agent"; Filename: "{uninstallexe}"
|
||||
Name: "{group}\Uninstall Theta Agent"; Filename: "{uninstallexe}"; IconFilename: "{app}\theta-agent.ico"
|
||||
|
||||
[Registry]
|
||||
; Start the tray for every interactive logon.
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 364 KiB |
@@ -1,15 +0,0 @@
|
||||
package main
|
||||
|
||||
// Tray icon PNG images rasterized directly from official theta42.svg as full-color badges.
|
||||
// Color variants:
|
||||
// iconRed: Unauthorized / Disconnected (Solid Red badge disk #ef4444)
|
||||
// iconYellow: Connected to directory, away from home (Solid Yellow badge disk #eab308)
|
||||
// iconGreen: Connected to directory, on home LAN (Solid Green badge disk #22c55e)
|
||||
// iconBlue: Connected with active WireGuard mesh tunnel (Solid Blue badge disk #3b82f6)
|
||||
|
||||
var (
|
||||
iconRed = []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x06, 0x00, 0x00, 0x00, 0x07, 0x92, 0x25, 0xc4, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xea, 0x08, 0x09, 0x03, 0x1d, 0x03, 0x52, 0x50, 0x15, 0xf0, 0x00, 0x00, 0x17, 0xde, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x9c, 0x79, 0x7c, 0xcd, 0xc7, 0xfa, 0xc7, 0xdf, 0xf3, 0x3d, 0x5b, 0x16, 0x69, 0x62, 0x8f, 0x25, 0x48, 0xec, 0x7b, 0xaa, 0x41, 0x5d, 0x97, 0xaa, 0x86, 0xaa, 0xa5, 0xb8, 0xb5, 0xb4, 0xe8, 0xa2, 0xb1, 0x94, 0x5e, 0xb4, 0xb7, 0xb4, 0xb4, 0xbd, 0x96, 0xab, 0x75, 0xd1, 0x52, 0x45, 0x55, 0xd1, 0xda, 0x6a, 0xbb, 0xb4, 0xb6, 0xb6, 0x96, 0xa0, 0x45, 0x55, 0x8a, 0x22, 0x5a, 0x21, 0x94, 0x08, 0x22, 0xc4, 0x92, 0x84, 0x2c, 0x27, 0x39, 0xe7, 0xfb, 0x9d, 0xdf, 0x1f, 0xf3, 0x3d, 0x68, 0x9c, 0x24, 0x47, 0xcb, 0xbd, 0x7d, 0xfd, 0x9e, 0x7f, 0x3e, 0xc9, 0x39, 0x33, 0xcf, 0xcc, 0x3c, 0xcf, 0xcc, 0x33, 0x33, 0xcf, 0xf3, 0xcc, 0x11, 0xfc, 0xc9, 0x29, 0x3d, 0x3d, 0x3a, 0x3a, 0x3a, 0xfa, 0xe6, 0xbf, 0x47, 0x15, 0x58, 0x7f, 0x52, 0x68, 0x1b, 0x6b, 0x7e, 0xde, 0x53, 0x81, 0x7b, 0x8f, 0x89, 0x97, 0x14, 0xca, 0x53, 0x9e, 0x8a, 0x25, 0x4b, 0x6e, 0xdb, 0xb6, 0x6d, 0xdb, 0xff, 0x7a, 0x34, 0x77, 0x92, 0xf8, 0x5f, 0x35, 0x5c, 0x40, 0xb0, 0xb5, 0x15, 0x94, 0xc8, 0x51, 0x18, 0x9e, 0xae, 0xb0, 0x5e, 0x19, 0xf3, 0xeb, 0x18, 0x85, 0x55, 0xda, 0x2a, 0x2c, 0xf5, 0xa0, 0xc2, 0xa0, 0x7e, 0xe6, 0x30, 0x32, 0x14, 0x66, 0xf5, 0x37, 0xb9, 0xe7, 0x2a, 0x3c, 0x67, 0xd6, 0x3f, 0x31, 0x4e, 0xe1, 0xd1, 0x8d, 0x0a, 0x4f, 0xb7, 0x52, 0x98, 0x39, 0xcc, 0x6c, 0xff, 0xf5, 0xff, 0x95, 0x82, 0xee, 0xbb, 0x02, 0x0a, 0x08, 0xda, 0x24, 0x7b, 0xa0, 0xc2, 0x06, 0x33, 0x14, 0x76, 0xca, 0x54, 0x18, 0x5d, 0x56, 0x61, 0x3d, 0x73, 0x66, 0x97, 0x32, 0x15, 0xa1, 0x65, 0xfe, 0xb1, 0x5e, 0x18, 0x6e, 0x85, 0x99, 0x2f, 0x28, 0x3c, 0xb1, 0x43, 0xe1, 0x8e, 0xcf, 0x15, 0x7e, 0x95, 0xaf, 0xf0, 0x60, 0x43, 0x85, 0xce, 0xca, 0x9e, 0x9a, 0xf7, 0x5b, 0x31, 0xf7, 0x4d, 0x01, 0xbf, 0x15, 0xbc, 0xcd, 0x14, 0xe4, 0x5f, 0x47, 0x28, 0x1c, 0xd0, 0x51, 0x61, 0x7b, 0xbb, 0xc2, 0x32, 0x25, 0xcd, 0x82, 0x6d, 0xee, 0xdf, 0x50, 0x8b, 0x22, 0xcf, 0x4a, 0xf8, 0xae, 0xbd, 0xc2, 0x05, 0x0e, 0x85, 0xdb, 0x67, 0x2b, 0xcc, 0xdd, 0xe8, 0x29, 0x79, 0xaf, 0x15, 0x72, 0xcf, 0x14, 0xe0, 0x7d, 0xa6, 0xd7, 0x89, 0x57, 0xf8, 0xda, 0x32, 0x85, 0x3d, 0x53, 0x14, 0x06, 0x7f, 0x7e, 0xef, 0x86, 0x70, 0x3f, 0x28, 0xa7, 0x9a, 0xc2, 0xaf, 0x3a, 0x2b, 0x9c, 0x6a, 0x4e, 0x9c, 0x83, 0x8d, 0x14, 0x4a, 0xe7, 0xbd, 0x52, 0xc4, 0x1f, 0x56, 0x40, 0x81, 0x99, 0xbe, 0x5e, 0x61, 0xef, 0xde, 0x0a, 0xc7, 0xfe, 0x5d, 0x61, 0xcd, 0xf7, 0xfe, 0x70, 0x4f, 0x25, 0xf9, 0xe4, 0x03, 0x06, 0x49, 0x24, 0x01, 0x2e, 0x79, 0x48, 0x1e, 0x02, 0xc0, 0x8d, 0x1b, 0xb0, 0x8a, 0xc6, 0xa2, 0x31, 0x60, 0xa1, 0x26, 0x35, 0x01, 0x81, 0x1f, 0x7e, 0x7f, 0x5c, 0x40, 0x8a, 0x52, 0x82, 0x15, 0x4e, 0x5e, 0xa2, 0xf0, 0xb3, 0x5e, 0x0a, 0x73, 0xf2, 0xff, 0xa8, 0x22, 0xb4, 0xdf, 0x5b, 0xf1, 0xb7, 0x82, 0x7f, 0xc0, 0x5f, 0xe1, 0xf8, 0x87, 0x15, 0xce, 0xed, 0xa3, 0xf0, 0xae, 0x04, 0x6f, 0xc1, 0x02, 0xe4, 0xca, 0x59, 0x72, 0x16, 0x10, 0x6f, 0x24, 0x19, 0x49, 0xc0, 0x76, 0x3d, 0x53, 0xcf, 0x04, 0x52, 0x8c, 0x58, 0x23, 0x16, 0xc4, 0x43, 0x5a, 0x4f, 0xad, 0x27, 0x88, 0x89, 0xf6, 0x1b, 0xf6, 0x1b, 0x20, 0xa6, 0x38, 0x5a, 0x3b, 0x5a, 0x83, 0x68, 0xa5, 0x1d, 0xd0, 0x0e, 0x00, 0x57, 0x65, 0x98, 0x0c, 0x03, 0x76, 0xe8, 0x42, 0x17, 0xc0, 0x4f, 0xfa, 0x2a, 0x7d, 0x15, 0x70, 0x43, 0x0e, 0x93, 0xca, 0xd0, 0x88, 0xbb, 0x9f, 0x76, 0x95, 0xcc, 0x3d, 0x68, 0xda, 0x07, 0x0a, 0xa7, 0xbf, 0xac, 0xb0, 0xec, 0xcf, 0x1e, 0x39, 0x78, 0xb7, 0x00, 0xc5, 0xd3, 0x5d, 0x77, 0xe5, 0xb7, 0x0d, 0x95, 0x7c, 0x5f, 0xe1, 0x94, 0x04, 0x85, 0x2f, 0x96, 0x33, 0x65, 0xf9, 0x6f, 0x1f, 0x5a, 0xb6, 0x63, 0x07, 0x32, 0x64, 0x07, 0xd9, 0x01, 0x38, 0x6a, 0x04, 0x1b, 0xc1, 0x20, 0x76, 0xf8, 0xaf, 0xf1, 0x5f, 0x03, 0xda, 0xb8, 0xb0, 0x06, 0x61, 0x0d, 0xc0, 0xda, 0xbe, 0x56, 0xfb, 0x5a, 0xed, 0xc1, 0x12, 0x17, 0x3e, 0x3a, 0x7c, 0x34, 0x88, 0xd8, 0x32, 0x2d, 0xca, 0xb4, 0x00, 0x91, 0x17, 0x38, 0x28, 0x70, 0x10, 0x50, 0x5a, 0x24, 0x89, 0x24, 0x90, 0xa1, 0x39, 0x83, 0x73, 0x06, 0x83, 0x1c, 0x78, 0xb5, 0xe5, 0xd5, 0x96, 0xa0, 0xf7, 0x4c, 0x8e, 0x4f, 0x8e, 0x07, 0x3d, 0x36, 0x31, 0x2e, 0x31, 0x0e, 0xf4, 0x9e, 0xc9, 0xbf, 0x24, 0xff, 0x02, 0x32, 0x38, 0xdb, 0xc8, 0x36, 0x80, 0x08, 0x6d, 0x86, 0x36, 0x03, 0x28, 0x2b, 0x9c, 0xc2, 0x09, 0x60, 0xae, 0x30, 0xdf, 0xc8, 0xdc, 0xb3, 0xbe, 0x34, 0x15, 0x31, 0x7c, 0xba, 0xc2, 0x94, 0xdc, 0x9b, 0x05, 0x7c, 0x5c, 0x19, 0xd6, 0xdf, 0x27, 0xf8, 0x07, 0xcc, 0x25, 0x39, 0xe5, 0x7b, 0x85, 0x31, 0x5f, 0x2a, 0xd4, 0x8a, 0x52, 0xa8, 0x9aLine truncated
|
||||
iconYellow = []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x06, 0x00, 0x00, 0x00, 0x07, 0x92, 0x25, 0xc4, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xea, 0x08, 0x09, 0x03, 0x1d, 0x03, 0x52, 0x50, 0x15, 0xf0, 0x00, 0x00, 0x1b, 0x80, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x9c, 0x67, 0x78, 0x55, 0x45, 0xb7, 0x80, 0xdf, 0xd9, 0xe7, 0x9c, 0x9c, 0xf4, 0x9e, 0x90, 0x84, 0x92, 0x50, 0xa5, 0x37, 0x81, 0x80, 0x54, 0x69, 0x4a, 0x55, 0xc0, 0xd0, 0x7b, 0x11, 0x01, 0x41, 0x45, 0x04, 0x15, 0x41, 0x51, 0x41, 0x44, 0x14, 0x10, 0xec, 0x48, 0x47, 0xe9, 0x52, 0x05, 0xae, 0x48, 0x07, 0x29, 0x42, 0xe8, 0x25, 0x40, 0x82, 0x40, 0xa8, 0xe9, 0xfd, 0xb4, 0x3d, 0xf7, 0xc7, 0xec, 0x84, 0x4f, 0xae, 0x31, 0x41, 0xf1, 0xf9, 0x7c, 0xee, 0xfa, 0xf3, 0x26, 0xe7, 0xec, 0x3d, 0x7b, 0xf6, 0x5a, 0x53, 0xd6, 0xac, 0x59, 0x73, 0x04, 0xff, 0x72, 0xb9, 0x7b, 0x77, 0xd3, 0x26, 0x77, 0xf7, 0x82, 0x7f, 0xcf, 0x2a, 0x98, 0x8f, 0x29, 0x5a, 0x26, 0x1b, 0x9f, 0xc7, 0x28, 0x38, 0x0f, 0x18, 0xbc, 0xa3, 0x28, 0xaf, 0xe4, 0xdf, 0x18, 0x1a, 0xda, 0xa9, 0x53, 0x5e, 0xde, 0x7f, 0xfb, 0x6d, 0xfe, 0xaf, 0x88, 0xff, 0xd6, 0x83, 0x1f, 0x50, 0xec, 0x63, 0x0a, 0xde, 0x39, 0x8a, 0x65, 0x53, 0x15, 0xab, 0x06, 0x1b, 0x5f, 0x0f, 0x51, 0x2c, 0xd3, 0x52, 0x31, 0xb0, 0x8e, 0xa2, 0x4f, 0x5f, 0xe3, 0x35, 0xd2, 0x14, 0xb3, 0x06, 0x29, 0xa6, 0xe6, 0x2a, 0x5e, 0x37, 0xee, 0x8f, 0x7b, 0x5b, 0xf1, 0xec, 0x26, 0xc5, 0xf8, 0xa6, 0x8a, 0xe9, 0xa3, 0x8d, 0xe7, 0x8f, 0xff, 0x6f, 0x19, 0xe8, 0x1f, 0x37, 0xc0, 0x03, 0x8a, 0x36, 0xc4, 0xcd, 0x4b, 0xb1, 0xfa, 0x6c, 0xc5, 0x0e, 0xe9, 0x8a, 0xad, 0x43, 0x14, 0xab, 0x1a, 0x2d, 0x3b, 0xd0, 0x30, 0x84, 0x96, 0xfe, 0xf7, 0x6a, 0xa1, 0x3b, 0x15, 0xd3, 0x07, 0x2a, 0xc6, 0xed, 0x54, 0xdc, 0xb9, 0x4c, 0x71, 0xb3, 0x5d, 0xf1, 0x78, 0x0d, 0xc5, 0xbc, 0x52, 0xf9, 0x77, 0xfe, 0xd3, 0x86, 0xf9, 0xc7, 0x0c, 0xf0, 0x7b, 0xc5, 0x5b, 0x0c, 0x45, 0x36, 0x79, 0x49, 0x71, 0x68, 0x7b, 0xc5, 0xb6, 0x6e, 0x8a, 0xc1, 0x01, 0xc6, 0x85, 0x2d, 0xfe, 0xb9, 0x57, 0xfd, 0x33, 0xc9, 0xef, 0x09, 0xbb, 0xdb, 0x2a, 0xce, 0xb7, 0x2a, 0xfe, 0x3c, 0x4f, 0x31, 0x77, 0x53, 0xfe, 0x95, 0x8f, 0xda, 0x20, 0x8f, 0xcc, 0x00, 0x7f, 0xdc, 0xd2, 0x2b, 0x9f, 0x54, 0x7c, 0x75, 0xb9, 0x62, 0x4c, 0xa2, 0xa2, 0xdf, 0xb2, 0x47, 0xf7, 0x0a, 0xff, 0x84, 0xe4, 0x44, 0x29, 0x6e, 0xee, 0xa8, 0x38, 0xc3, 0x68, 0x38, 0xc7, 0x6b, 0x2a, 0xca, 0xbc, 0x47, 0x65, 0x88, 0xbf, 0x6d, 0x80, 0x07, 0x5a, 0xfa, 0x06, 0xc5, 0x1e, 0x3d, 0x14, 0x27, 0xbf, 0xa8, 0x58, 0xf1, 0xa3, 0xbf, 0x5d, 0x53, 0x2b, 0x16, 0x24, 0x88, 0xc7, 0x28, 0x85, 0x1d, 0x68, 0x48, 0x65, 0x99, 0x0b, 0x58, 0x30, 0x21, 0x81, 0x23, 0xc4, 0x09, 0x0f, 0x90, 0x67, 0xf9, 0x0d, 0x37, 0x20, 0x07, 0x1b, 0xda, 0xdf, 0x57, 0x90, 0x92, 0x44, 0x3f, 0xc5, 0xe9, 0x4b, 0x14, 0x17, 0x74, 0x57, 0xcc, 0xb1, 0xff, 0x5d, 0x43, 0xfc, 0x65, 0x03, 0xfc, 0x5e, 0xf1, 0xbe, 0x1e, 0x8a, 0x13, 0xae, 0x2a, 0xbe, 0xf4, 0x86, 0xa2, 0xd7, 0xb7, 0xc5, 0x2e, 0xd0, 0x85, 0x8e, 0x00, 0xf1, 0x9e, 0xe8, 0x27, 0xef, 0x81, 0xa6, 0x8b, 0x51, 0x6c, 0x00, 0x51, 0x42, 0xfc, 0xc2, 0x59, 0xd0, 0x53, 0xf4, 0x0f, 0xe8, 0x0a, 0xce, 0x34, 0x57, 0x49, 0xb1, 0x04, 0x9c, 0x4e, 0xbd, 0x82, 0x58, 0x08, 0xac, 0x95, 0xfb, 0xf1, 0x01, 0xd3, 0x29, 0xd3, 0x76, 0xf9, 0x02, 0x98, 0x2b, 0x9a, 0xb2, 0x64, 0x1f, 0x30, 0xbd, 0xac, 0xed, 0x60, 0x21, 0xc8, 0xc6, 0x72, 0x1c, 0x91, 0xa0, 0xa7, 0xc8, 0x69, 0x74, 0x05, 0xd9, 0x55, 0x4e, 0x15, 0x25, 0x01, 0xed, 0xaf, 0xbc, 0xbb, 0xbd, 0x85, 0xe2, 0xc2, 0xba, 0x8a, 0x93, 0x06, 0x2b, 0xde, 0xab, 0x91, 0x7f, 0xc5, 0xc3, 0x1a, 0xe4, 0xa1, 0x2b, 0xf1, 0x7b, 0xc5, 0x07, 0xcc, 0x54, 0xfc, 0xf0, 0x9c, 0xe2, 0xe0, 0x50, 0x45, 0xd3, 0x07, 0x45, 0x16, 0x64, 0xc3, 0x81, 0x00, 0x71, 0x5e, 0x7c, 0x25, 0x13, 0xc0, 0xd4, 0x56, 0x2c, 0x64, 0x39, 0x64, 0x5f, 0xb4, 0xed, 0xd7, 0xe6, 0x41, 0xfc, 0xd9, 0xdb, 0xab, 0x2c, 0x9d, 0xe1, 0x74, 0xcd, 0xab, 0x41, 0xd6, 0x6c, 0x88, 0xb3, 0x25, 0xde, 0x71, 0xbb, 0x05, 0x77, 0xba, 0xa4, 0x96, 0x35, 0xad, 0x83, 0x8c, 0xef, 0x73, 0x26, 0x9b, 0x02, 0x41, 0x3a, 0x68, 0x4b, 0x15, 0xf0, 0x19, 0xe1, 0x71, 0x5e, 0x0f, 0x84, 0x50, 0xa7, 0xdf, 0x4a, 0xe7, 0x17, 0x50, 0x61, 0x6a, 0x84, 0xd9, 0x11, 0x03, 0x35, 0xf6, 0x46, 0x5d, 0xb3, 0xf9, 0x40, 0x85, 0x77, 0x23, 0x84, 0x3d, 0x06, 0x7c, 0x6e, 0x78, 0xd4, 0xd2, 0x25, 0xc8, 0xea, 0x72, 0x23, 0xed, 0x40, 0xbf, 0x22, 0xeb, 0x88, 0x1a, 0x14, 0xf4, 0xb0, 0x62, 0x8a, 0x31, 0x67, 0xad, 0x1b, 0xa5, 0x38, 0xe6, 0x13, 0xc5, 0xc4, 0xdc, 0x87, 0x35, 0x84, 0xf9, 0xaf, 0x29, 0xde, 0xd7, 0xe8, 0x92, 0x1f, 0xee, 0x57, 0x1c, 0xb2, 0x4e, 0x51, 0x2b, 0xdc, 0xa0, 0xba, 0x7a, 0x3d, 0x11, 0x4e, 0x20, 0x4e, 0xd0, 0x5e, 0xd7, 0xf6, 0xca, 0x05Line truncated
|
||||
iconGreen = []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x06, 0x00, 0x00, 0x00, 0x07, 0x92, 0x25, 0xc4, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xea, 0x08, 0x09, 0x03, 0x1d, 0x03, 0x52, 0x50, 0x15, 0xf0, 0x00, 0x00, 0x18, 0xcd, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x9c, 0x77, 0x74, 0x55, 0xc5, 0xd6, 0xc0, 0x7f, 0x73, 0x6e, 0x4b, 0x4f, 0x20, 0x01, 0x02, 0x84, 0x10, 0x4a, 0xa8, 0xd2, 0xa5, 0x19, 0xa4, 0x0a, 0x28, 0x20, 0x28, 0x82, 0x34, 0x45, 0x40, 0x04, 0x7d, 0x82, 0x48, 0x53, 0x44, 0x9a, 0x05, 0xa5, 0xaa, 0x08, 0x82, 0x8a, 0x74, 0x51, 0x44, 0x09, 0x20, 0x82, 0xa8, 0xf0, 0x00, 0xa5, 0xca, 0xa3, 0xf7, 0x96, 0x40, 0x42, 0x02, 0x84, 0x98, 0x10, 0x52, 0xef, 0xcd, 0x3d, 0x67, 0xbe, 0x3f, 0xce, 0x04, 0x25, 0x85, 0x5c, 0x54, 0xde, 0x73, 0x7d, 0x7b, 0x2d, 0xd6, 0x2f, 0xdc, 0x3b, 0x33, 0x67, 0xce, 0xde, 0x67, 0x66, 0xf6, 0xec, 0xd9, 0xe7, 0x0a, 0xfe, 0xe1, 0x52, 0xb9, 0xf2, 0xae, 0x5d, 0xfd, 0xfb, 0xdf, 0xfa, 0xef, 0x09, 0x13, 0xd6, 0x03, 0x26, 0x6d, 0x93, 0xd4, 0xe7, 0x3d, 0x4d, 0xb8, 0x77, 0x29, 0x5e, 0x33, 0x29, 0x2f, 0xe4, 0x55, 0x8c, 0x89, 0x89, 0x8a, 0x5a, 0xbe, 0xfc, 0x7f, 0x7d, 0x37, 0x05, 0x45, 0xfc, 0xaf, 0x2e, 0x9c, 0x4f, 0xb1, 0xd5, 0x4d, 0xf8, 0x65, 0x99, 0xac, 0x94, 0x6a, 0xb2, 0x56, 0x88, 0xfa, 0xfa, 0x59, 0x93, 0xe1, 0x6d, 0x4d, 0x96, 0x6c, 0x60, 0xd2, 0xff, 0x29, 0x75, 0x1b, 0x37, 0x4c, 0x66, 0x0c, 0x34, 0x99, 0x9a, 0x6d, 0x32, 0x5e, 0xd5, 0x3f, 0x3b, 0xd9, 0xe4, 0x89, 0x0d, 0x26, 0x63, 0x1e, 0x34, 0x99, 0x36, 0x5c, 0x5d, 0xff, 0x95, 0xff, 0x95, 0x81, 0xee, 0xb9, 0x01, 0xf2, 0x29, 0x5a, 0x89, 0xdd, 0xd7, 0xe4, 0x7d, 0x1f, 0x98, 0xec, 0x9c, 0x66, 0xf2, 0xa1, 0x52, 0x26, 0x6b, 0xa9, 0x27, 0xbb, 0xa4, 0x32, 0x84, 0x96, 0xf6, 0xd7, 0x7a, 0x61, 0xb8, 0x4d, 0xa6, 0x0d, 0x30, 0x79, 0xf6, 0xdf, 0x26, 0xff, 0xfd, 0xb9, 0xc9, 0xef, 0x5c, 0x26, 0x0f, 0xd6, 0x31, 0x99, 0x13, 0x96, 0x57, 0xf3, 0x5e, 0x1b, 0xe6, 0x9e, 0x19, 0xe0, 0x76, 0xc5, 0xdb, 0x94, 0x22, 0x5b, 0x8c, 0x30, 0x39, 0xb8, 0x93, 0xc9, 0x0e, 0x76, 0x93, 0x21, 0x25, 0x54, 0xc1, 0xd6, 0xf7, 0xee, 0x56, 0xef, 0x24, 0x79, 0x23, 0x61, 0x7b, 0x07, 0x93, 0x9f, 0x39, 0x4c, 0x6e, 0x9d, 0x67, 0x32, 0x7b, 0x43, 0x5e, 0xc9, 0xbf, 0xdb, 0x20, 0x7f, 0x9b, 0x01, 0x0a, 0x7f, 0xd2, 0x6b, 0x1c, 0x31, 0x39, 0x7a, 0xa5, 0xc9, 0x9e, 0x09, 0x26, 0x03, 0x3f, 0xff, 0xfb, 0x6e, 0xe1, 0x5e, 0x48, 0x56, 0x84, 0xc9, 0xef, 0xba, 0x98, 0x9c, 0xa1, 0x1e, 0x9c, 0x83, 0x75, 0x4d, 0xca, 0x9c, 0xbf, 0xcb, 0x10, 0x7f, 0xd9, 0x00, 0xf9, 0x9e, 0xf4, 0xf5, 0x26, 0x7b, 0xf5, 0x32, 0x39, 0x69, 0x98, 0xc9, 0xc8, 0x99, 0x7f, 0xb9, 0xa7, 0x4e, 0x0c, 0x72, 0x41, 0x9e, 0x21, 0x8b, 0x78, 0x60, 0x0f, 0x69, 0x9c, 0x02, 0x72, 0x91, 0xb8, 0x81, 0xa6, 0x04, 0x50, 0x03, 0x44, 0x6d, 0xfc, 0x88, 0x00, 0x7c, 0xd0, 0x70, 0xfc, 0x75, 0x05, 0x99, 0x92, 0x10, 0x68, 0x72, 0x9a, 0x52, 0xf9, 0xe2, 0x27, 0x4d, 0x66, 0xb9, 0xfe, 0xaa, 0x21, 0xfe, 0xb4, 0x01, 0x6e, 0x57, 0x7c, 0x80, 0xb7, 0xc9, 0x57, 0x2f, 0x9a, 0x1c, 0xf1, 0x9a, 0x49, 0xdf, 0x45, 0x1e, 0x37, 0x68, 0x41, 0xa0, 0x81, 0x9c, 0xc0, 0x05, 0x96, 0x82, 0xa1, 0xf3, 0x9a, 0x31, 0x1d, 0xe4, 0x15, 0xb9, 0x49, 0x36, 0x02, 0xad, 0xb4, 0x98, 0xad, 0x4d, 0x05, 0x6b, 0x39, 0x11, 0x6c, 0xd1, 0xc1, 0xea, 0x2f, 0x82, 0x2c, 0x19, 0x20, 0x7a, 0x50, 0x9a, 0x07, 0xc1, 0x1d, 0x29, 0x75, 0xbd, 0x01, 0xb8, 0x8f, 0xc8, 0x2b, 0x7a, 0x3a, 0xe8, 0x33, 0x65, 0x3f, 0xa3, 0x09, 0x88, 0x3d, 0xe2, 0x7e, 0x31, 0x07, 0xb4, 0xd2, 0xcc, 0x12, 0xef, 0x80, 0x58, 0x47, 0x5d, 0x31, 0x19, 0x30, 0x00, 0x79, 0xb7, 0x77, 0xed, 0x6a, 0x6d, 0x72, 0x49, 0x43, 0x93, 0x13, 0x07, 0x99, 0xbc, 0x5e, 0x27, 0xaf, 0xc4, 0xdd, 0x1a, 0xe4, 0xae, 0x0d, 0x70, 0xbb, 0xe2, 0x4b, 0xcc, 0x32, 0x39, 0xfd, 0xa4, 0xc9, 0x41, 0xa5, 0x95, 0x36, 0xdf, 0x2d, 0xb6, 0x21, 0x07, 0x1a, 0x36, 0x90, 0xd5, 0xd9, 0x23, 0x07, 0x81, 0xb1, 0x51, 0x0e, 0x91, 0x3d, 0xc0, 0xa7, 0x95, 0x65, 0x9d, 0xe3, 0x55, 0xa8, 0x3c, 0xde, 0xdb, 0xbf, 0x6c, 0x38, 0xd4, 0x89, 0xf2, 0x8b, 0xa9, 0x94, 0x0e, 0xd5, 0x07, 0xf8, 0x04, 0x87, 0x65, 0x42, 0x68, 0xa2, 0xbd, 0x7d, 0x89, 0x17, 0xc0, 0x7f, 0x9c, 0x75, 0xba, 0xcf, 0x61, 0x10, 0x5e, 0x74, 0x10, 0xdb, 0x21, 0x63, 0xbc, 0xbe, 0x29, 0xfb, 0x12, 0x24, 0x1d, 0x71, 0xd5, 0xbd, 0x71, 0x0a, 0xce, 0x55, 0xcb, 0xea, 0x91, 0x50, 0x1d, 0x8e, 0x1d, 0xcf, 0x8c, 0x8c, 0x0d, 0x85, 0x73, 0xb5, 0xb2, 0x7a, 0x26, 0xd4, 0x82, 0x74, 0xdd, 0x3d, 0x3f, 0x7b, 0x2a, 0x68, 0x67, 0xc4, 0x04, 0xd1, 0x1b, 0x44, 0x24, 0x8f, 0x8a, 0x93, 0xdc, 0x1a, 0x61, 0x1e, 0x8a, 0x5a, 0xb3, 0xa2, 0x5f, 0x34, 0xf9, 0xd2, 0x7b, 0x26, 0x13, 0xb2, 0xef, 0xd6, 0x10, 0xd6, 0x3f, 0xa7, 0xf8, 0x00, 0x35, 0x24, 0xa7, 0xef, 0x34, 0xf9, 0x6c, 0xb4, 0x49Line truncated
|
||||
iconBlue = []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x10, 0x06, 0x00, 0x00, 0x00, 0x07, 0x92, 0x25, 0xc4, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x26, 0x00, 0x00, 0x80, 0x84, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x80, 0xe8, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x70, 0x9c, 0xba, 0x51, 0x3c, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xea, 0x08, 0x09, 0x03, 0x1d, 0x03, 0x52, 0x50, 0x15, 0xf0, 0x00, 0x00, 0x17, 0x86, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xdd, 0x9c, 0x77, 0x7c, 0x55, 0xc5, 0xf6, 0xf6, 0xbf, 0xb3, 0xf7, 0x39, 0x27, 0xa4, 0x90, 0x84, 0x92, 0x84, 0x16, 0x4a, 0xe8, 0xbd, 0xa3, 0x94, 0xd0, 0x3b, 0x8a, 0x17, 0x04, 0x91, 0x22, 0x82, 0x70, 0x45, 0x8a, 0x80, 0x88, 0x70, 0x41, 0x04, 0x54, 0xbc, 0x0a, 0x22, 0x88, 0x82, 0xc2, 0x55, 0x8a, 0x54, 0x0b, 0x82, 0x8a, 0x5c, 0x50, 0x2f, 0x9d, 0x80, 0xf4, 0x5e, 0x42, 0x09, 0x2d, 0x40, 0x02, 0x21, 0x8d, 0xf4, 0x73, 0xf6, 0x9e, 0xdf, 0x1f, 0x7b, 0x0e, 0x60, 0x8a, 0x39, 0x41, 0x79, 0xf5, 0xf3, 0xae, 0x7f, 0x9e, 0x64, 0xef, 0x99, 0x35, 0xb3, 0xd7, 0x33, 0x75, 0xcd, 0x9a, 0x23, 0xf8, 0x9b, 0x4b, 0xf3, 0xe6, 0x6f, 0xbd, 0x95, 0x96, 0x76, 0xef, 0xdf, 0x53, 0x16, 0xd8, 0x0e, 0x59, 0x68, 0x9f, 0xaa, 0x9e, 0xf7, 0xb6, 0xc0, 0x15, 0xa1, 0x30, 0xd6, 0x42, 0x79, 0xd1, 0x9d, 0x31, 0x22, 0x62, 0xea, 0x54, 0x1f, 0x9f, 0xbf, 0xfa, 0x6b, 0x72, 0x8a, 0xf8, 0xab, 0x0a, 0xce, 0x66, 0xd8, 0xaa, 0x16, 0xf8, 0xa9, 0x27, 0x15, 0x12, 0x2c, 0xac, 0x51, 0x5c, 0xbd, 0x1e, 0x62, 0x61, 0xd9, 0xb6, 0x16, 0x16, 0xad, 0x6f, 0x61, 0xe1, 0x01, 0xea, 0x33, 0x12, 0x2d, 0x4c, 0x19, 0x6c, 0x61, 0x42, 0xba, 0x85, 0xd7, 0x54, 0xfe, 0x73, 0xd3, 0x2c, 0x3c, 0xb5, 0xc1, 0xc2, 0xa8, 0x70, 0x0b, 0x93, 0x5e, 0x56, 0xe5, 0x4f, 0xf8, 0xab, 0x08, 0x7a, 0xe4, 0x04, 0x64, 0x33, 0xb4, 0x12, 0x87, 0xaf, 0x85, 0xb5, 0x3e, 0xb4, 0xb0, 0x5b, 0x92, 0x85, 0xed, 0x83, 0x2c, 0xac, 0xa1, 0x5a, 0x76, 0x51, 0x45, 0x84, 0x96, 0xf4, 0xc7, 0x6a, 0x61, 0xba, 0x2c, 0x4c, 0x1a, 0x64, 0xe1, 0xb9, 0xad, 0x16, 0x6e, 0x5d, 0x69, 0xe1, 0x8f, 0x59, 0x16, 0x1e, 0xae, 0x6d, 0x61, 0x46, 0x19, 0x77, 0xce, 0x47, 0x4d, 0xcc, 0x23, 0x23, 0xe0, 0xb7, 0x86, 0xb7, 0x2b, 0x43, 0xb6, 0x18, 0x63, 0xe1, 0xd0, 0xae, 0x16, 0x76, 0x74, 0x58, 0x58, 0xbc, 0x88, 0x4a, 0xd8, 0xfa, 0xd1, 0x7d, 0xea, 0xef, 0x89, 0xbb, 0x27, 0x6c, 0xef, 0x68, 0xe1, 0xe7, 0x5e, 0x16, 0x6e, 0x99, 0x6f, 0x61, 0xfa, 0x06, 0x77, 0xca, 0x3f, 0x9b, 0x90, 0x3f, 0x8d, 0x80, 0xdc, 0x5b, 0x7a, 0xb5, 0x63, 0x16, 0xbe, 0xba, 0xca, 0xc2, 0xde, 0xd7, 0x2d, 0x0c, 0x58, 0xf9, 0xe7, 0x7d, 0xc2, 0xa3, 0x90, 0xb4, 0xf2, 0x16, 0xfe, 0xf8, 0x84, 0x85, 0xb3, 0x54, 0xc3, 0x39, 0x5c, 0xc7, 0x42, 0x99, 0xf1, 0x67, 0x11, 0xf1, 0x87, 0x09, 0xc8, 0xd6, 0xd2, 0xbf, 0xb7, 0xb0, 0x4f, 0x1f, 0x0b, 0xa7, 0x8e, 0xb2, 0xb0, 0xf2, 0xfb, 0x7f, 0xb8, 0xa6, 0x59, 0x58, 0xc3, 0xc8, 0x45, 0x6e, 0x61, 0x82, 0x3c, 0xc4, 0x25, 0x4c, 0xc0, 0x85, 0x09, 0x20, 0xea, 0x53, 0x0e, 0x0d, 0xa8, 0x42, 0x09, 0x34, 0xc0, 0x1b, 0xc7, 0x1f, 0x37, 0x8f, 0x5b, 0xae, 0x07, 0x58, 0xf8, 0xde, 0x72, 0x0b, 0x97, 0x3c, 0x63, 0x61, 0x5a, 0xd6, 0x1f, 0x25, 0xe2, 0xa1, 0x09, 0xf8, 0xad, 0xe1, 0xfd, 0xbd, 0x2d, 0x9c, 0x78, 0xd9, 0xc2, 0x31, 0x93, 0x2c, 0xf4, 0x5d, 0xec, 0xb1, 0x42, 0x1d, 0x0d, 0x40, 0xce, 0x62, 0x23, 0x4e, 0x90, 0x8f, 0xcb, 0x8b, 0xdc, 0x06, 0xe9, 0x25, 0x07, 0x93, 0x02, 0x22, 0x52, 0xd4, 0x21, 0x18, 0x6c, 0x2b, 0xb5, 0x9e, 0xa2, 0x26, 0xd8, 0x16, 0xea, 0xdd, 0xa8, 0x01, 0x74, 0xa5, 0x2e, 0x36, 0x70, 0x2d, 0x30, 0x8f, 0x73, 0x06, 0x8c, 0x2e, 0xc6, 0x72, 0x79, 0x0a, 0xcc, 0x13, 0xf2, 0x73, 0x6e, 0x00, 0xdf, 0x31, 0x96, 0x42, 0xa0, 0x9d, 0xd3, 0xea, 0x12, 0x0c, 0xe2, 0x33, 0x86, 0xe0, 0x05, 0x48, 0x64, 0xc1, 0xbf, 0x3a, 0xab, 0xb5, 0x85, 0x4b, 0x1b, 0x58, 0xf8, 0xc6, 0x0b, 0x16, 0xde, 0xae, 0xed, 0x4e, 0x51, 0x50, 0x42, 0x0a, 0x4c, 0xc0, 0x6f, 0x0d, 0x5f, 0x64, 0xb6, 0x85, 0x33, 0x4f, 0x5b, 0xf8, 0x42, 0xb0, 0xb2, 0xe6, 0xbb, 0xf9, 0x2a, 0xf2, 0xc2, 0x06, 0x20, 0x5b, 0xf1, 0x0e, 0xe9, 0x60, 0xa6, 0x9b, 0x3f, 0x12, 0x0b, 0xde, 0xc1, 0x8e, 0x83, 0x62, 0x04, 0x94, 0x9b, 0x5f, 0x7c, 0xba, 0x78, 0x09, 0xaa, 0x85, 0x96, 0x5c, 0xa0, 0x9d, 0x81, 0x30, 0xef, 0xe0, 0x8d, 0xda, 0x87, 0x10, 0xd4, 0xa0, 0xf0, 0x0c, 0x91, 0x05, 0x7e, 0xc9, 0x85, 0x96, 0x32, 0x1b, 0xc4, 0x2d, 0xb1, 0x00, 0x5f, 0x48, 0x8d, 0xce, 0xb8, 0xc5, 0x1b, 0x10, 0xd7, 0x2b, 0x65, 0xbc, 0x2c, 0x09, 0x97, 0x7a, 0xdc, 0xae, 0x66, 0x4e, 0x87, 0xb3, 0x49, 0x37, 0xc7, 0x9b, 0xd5, 0xe1, 0x72, 0xaf, 0xdb, 0x35, 0xe4, 0x74, 0x48, 0x99, 0x90, 0xb1, 0x52, 0xfe, 0x0b, 0xb4, 0x15, 0xc2, 0x97, 0x62, 0x20, 0x6c, 0x62, 0x35, 0x7e, 0xdc, 0xef, 0x61, 0x9e, 0x89, 0x9a, 0xb3, 0xd6, 0x8d, 0xb4, 0x70, 0xf4, 0x1c, 0x0b, 0xaf, 0xa7, 0x17, 0x94, 0x08, 0x8f, 0x09, 0xc8, 0xd6, 0xe2, 0x55, 0x97, 0x9c, 0xdd, 0xc6, 0xc2, 0x21, 0xeb, 0x2c, 0xd4, 0xf2, 0xd6, 0xa7, 0xa9, 0xb2, 0x62, 0x49, 0x46, 0x82, 0x71Line truncated
|
||||
)
|
||||
Reference in new issue
Block a user