diff --git a/andlabs/action.go b/andlabs/action.go index a8c783f..b1046ba 100644 --- a/andlabs/action.go +++ b/andlabs/action.go @@ -2,7 +2,7 @@ package main import ( "strconv" - "github.com/andlabs/ui" + "go.wit.com/dev/andlabs/ui" "go.wit.com/log" "go.wit.com/gui/widget" @@ -55,13 +55,13 @@ func (n *node) pad(b bool) { } switch n.WidgetType { - case widget.Group: - t.uiGroup.SetMargined(b) - case widget.Tab: - tabSetMargined(t.uiTab, b) case widget.Window: t.uiWindow.SetMargined(b) t.uiWindow.SetBorderless(b) + case widget.Tab: + tabSetMargined(t.uiTab, b) + case widget.Group: + t.uiGroup.SetMargined(b) case widget.Grid: t.uiGrid.SetPadded(b) case widget.Box: @@ -101,13 +101,32 @@ func (n *node) Delete() { p := n.parent log.Log(NOW, "uiDelete()", n.WidgetId, "to", p.WidgetId) + if n.WidgetType == widget.Window { + log.Warn("DESTROY uiWindow here") + log.Warn("NEED TO REMOVE n from parent.Children") + n.tk.uiWindow.Destroy() + n.tk.uiWindow = nil + for i, child := range p.children { + log.Warn("parent has child:", i, child.WidgetId, child.progname) + if n == child { + log.Warn("Found child ==", i, child.WidgetId, child.progname) + log.Warn("Found n ==", i, n.WidgetId, n.progname) + p.children = append(p.children[:i], p.children[i+1:]...) + } + // t.uiWindow.SetBorderless(false) + } + for i, child := range p.children { + log.Warn("parent now has child:", i, child.WidgetId, child.progname) + } + return + } + switch p.WidgetType { case widget.Group: // tParent.uiGroup.SetMargined(true) case widget.Tab: // tabSetMargined(tParent.uiTab, true) case widget.Window: - // t.uiWindow.SetBorderless(false) case widget.Grid: // t.uiGrid.SetPadded(true) case widget.Box: diff --git a/andlabs/addText.go b/andlabs/addText.go index 5dfe568..75c8c7d 100644 --- a/andlabs/addText.go +++ b/andlabs/addText.go @@ -18,7 +18,7 @@ func (n *node) addText(a *widget.Action) { case widget.Dropdown: n.addDropdownName(getString(a.Value)) case widget.Combobox: - t.addComboboxName(getString(a.Value)) + n.addComboboxName(getString(a.Value)) default: log.Log(ERROR, "plugin Send() Don't know how to addText on", n.WidgetType, "yet", a.ActionType) } diff --git a/andlabs/box.go b/andlabs/box.go index 290c06b..d06bf60 100644 --- a/andlabs/box.go +++ b/andlabs/box.go @@ -3,8 +3,8 @@ package main import ( "go.wit.com/gui/widget" - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) // make new Box here @@ -17,7 +17,7 @@ func (p *node) newBox(n *node) { } else { box = ui.NewVerticalBox() } - box.SetPadded(padded) + box.SetPadded(true) newt.uiBox = box newt.uiControl = box diff --git a/andlabs/button.go b/andlabs/button.go index 675fad5..81a30c0 100644 --- a/andlabs/button.go +++ b/andlabs/button.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) func (p *node) newButton(n *node) { diff --git a/andlabs/checkbox.go b/andlabs/checkbox.go index 49f9045..d44e458 100644 --- a/andlabs/checkbox.go +++ b/andlabs/checkbox.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) func (p *node) newCheckbox(n *node) { diff --git a/andlabs/combobox.go b/andlabs/combobox.go index 3a25692..0dd16c6 100644 --- a/andlabs/combobox.go +++ b/andlabs/combobox.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" "go.wit.com/log" "go.wit.com/gui/widget" @@ -28,24 +28,38 @@ func (p *node) newCombobox(n *node) { n.tk = newt p.place(n) - // add the initial dropdown entries + // add the initial combobox entries for i, s := range n.strings { - log.Warn("add dropdown entries on create", i, s) - n.addDropdownName(s) + log.Warn("add combobox entries on create", n.progname, i, s) + n.addComboboxName(s) } cur := widget.GetString(n.value) - n.tk.addComboboxName(cur) + log.Warn("add combobox: TODO: set default value on create", n.progname, cur) + n.setComboboxName(cur) } -func (t *guiWidget) addComboboxName(title string) { - t.uiEditableCombobox.Append(title) - if (t.val == nil) { +func (n *node) addComboboxName(s string) { + if ! n.ready() { return } + log.Log(INFO, "addComboboxName()", n.WidgetId, "add:", s) + + n.tk.uiEditableCombobox.Append(s) + if (n.tk.val == nil) { + log.Log(INFO, "make map didn't work") return } - t.val[t.c] = title + n.tk.val[n.tk.c] = s // If this is the first menu added, set the dropdown to it - // if (t.c == 0) { - // } - t.c = t.c + 1 + if (n.tk.c == 0) { + log.Log(INFO, "THIS IS THE FIRST combobox", s) + n.tk.uiEditableCombobox.SetText(s) + } + n.tk.c = n.tk.c + 1 +} + +func (n *node) setComboboxName(s string) bool { + if ! n.ready() { return false} + log.Log(INFO, "SetComboboxName()", n.WidgetId, ",", s) + n.tk.uiEditableCombobox.SetText(s) + return false } diff --git a/andlabs/demo.go b/andlabs/demo.go index bafe448..1b94056 100644 --- a/andlabs/demo.go +++ b/andlabs/demo.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" "go.wit.com/log" ) diff --git a/andlabs/dropdown.go b/andlabs/dropdown.go index a189bf7..0795264 100644 --- a/andlabs/dropdown.go +++ b/andlabs/dropdown.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" "go.wit.com/log" "go.wit.com/gui/widget" @@ -35,6 +35,7 @@ func (p *node) newDropdown(n *node) { n.tk = newt p.place(n) + if n.strings == nil {return} // add the initial dropdown entries for i, s := range n.strings { log.Warn("add dropdown: add entries on create", n.progname, i, s) @@ -45,7 +46,6 @@ func (p *node) newDropdown(n *node) { n.setDropdownName(cur) } - func (n *node) SetDropdownInt(i int) { if ! n.ready() { return } n.tk.uiCombobox.SetSelected(i) diff --git a/andlabs/go.mod b/andlabs/go.mod index 4b65a1f..66ac7bb 100644 --- a/andlabs/go.mod +++ b/andlabs/go.mod @@ -3,9 +3,9 @@ module go.wit.com/gui/toolkits/andlabs go 1.21.4 require ( - github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e + go.wit.com/dev/andlabs/ui v0.0.1 go.wit.com/gui/widget v1.1.3 - go.wit.com/log v0.5.3 + go.wit.com/log v0.5.4 ) -require go.wit.com/dev/davecgh/spew v1.1.3 // indirect +require go.wit.com/dev/davecgh/spew v1.1.4 // indirect diff --git a/andlabs/go.sum b/andlabs/go.sum index 6c41536..0a953ac 100644 --- a/andlabs/go.sum +++ b/andlabs/go.sum @@ -1,8 +1,12 @@ -github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e h1:wSQCJiig/QkoUnpvelSPbLiZNWvh2yMqQTQvIQqSUkU= -github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e/go.mod h1:5G2EjwzgZUPnnReoKvPWVneT8APYbyKkihDVAHUi0II= +go.wit.com/dev/andlabs/ui v0.0.1 h1:SowOybLBu/qUOqp905EZikz5/iPa3GpmnCAPzNOYajM= +go.wit.com/dev/andlabs/ui v0.0.1/go.mod h1:mlKEEe05ZJURzjh1LtjzdGMHVbJm9a7BUaVpA9cHxsM= go.wit.com/dev/davecgh/spew v1.1.3 h1:hqnB5qsPgC2cLZaJXqQJspQ5n/Ugry9kyL3tLk0hVzQ= go.wit.com/dev/davecgh/spew v1.1.3/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA= +go.wit.com/dev/davecgh/spew v1.1.4 h1:C9hj/rjlUpdK+E6aroyLjCbS5MFcyNUOuP1ICLWdNek= +go.wit.com/dev/davecgh/spew v1.1.4/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA= go.wit.com/gui/widget v1.1.3 h1:GvLzGSOF9tfmoh6HNbFdN+NSlBo2qeS/Ba2TnQQ1A1U= go.wit.com/gui/widget v1.1.3/go.mod h1:A6/FaiFQtAHTjgo7c4FrokXe6bXX1Cowo35b2Lgi31E= go.wit.com/log v0.5.3 h1:/zHkniOPusPEuX1R401rMny9uwSO/nSU/QOMx6qoEnE= go.wit.com/log v0.5.3/go.mod h1:LzIzVxc2xJQxWQBtV9VbV605P4TOxmYDCl+BZF38yGE= +go.wit.com/log v0.5.4 h1:vijLRPTUgChb8J5tx/7Uma/lGTUxeSXosFbheAmL914= +go.wit.com/log v0.5.4/go.mod h1:BaJBfHFqcJSJLXGQ9RHi3XVhPgsStxSMZRlaRxW4kAo= diff --git a/andlabs/grid.go b/andlabs/grid.go index b79d72d..2561648 100644 --- a/andlabs/grid.go +++ b/andlabs/grid.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) // Grid numbering by (X,Y) @@ -18,6 +18,7 @@ func (p *node) newGrid(n *node) { c := ui.NewGrid() newt.uiGrid = c newt.uiControl = c + c.SetPadded(true) n.tk = newt p.place(n) diff --git a/andlabs/group.go b/andlabs/group.go index 8555d07..e67f358 100644 --- a/andlabs/group.go +++ b/andlabs/group.go @@ -1,15 +1,15 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) func (p *node) newGroup(n *node) { newt := new(guiWidget) g := ui.NewGroup(getString(n.value)) - g.SetMargined(margin) + g.SetMargined(true) newt.uiGroup = g newt.uiControl = g diff --git a/andlabs/image.go b/andlabs/image.go index 8750fd3..f5cf941 100644 --- a/andlabs/image.go +++ b/andlabs/image.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) // make new Image using andlabs/ui diff --git a/andlabs/label.go b/andlabs/label.go index 4199059..4c208c6 100644 --- a/andlabs/label.go +++ b/andlabs/label.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) func (p *node) newLabel(n *node) { diff --git a/andlabs/main.go b/andlabs/main.go index ac52a5c..5a6d383 100644 --- a/andlabs/main.go +++ b/andlabs/main.go @@ -5,15 +5,26 @@ import ( "go.wit.com/log" "go.wit.com/gui/widget" - "github.com/andlabs/ui" + "go.wit.com/dev/andlabs/ui" // the _ means we only need this for the init() - _ "github.com/andlabs/ui/winmanifest" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) var uiMainUndef bool = true var uiMain sync.Once var muAction sync.Mutex +func queueMain(currentA widget.Action) { + defer func() { + if r := recover(); r != nil { + log.Warn("YAHOOOO Recovered in main application:", r) + } + }() + ui.QueueMain( func() { + rawAction(¤tA) + }) +} + func catchActionChannel() { log.Log(INFO, "catchActionChannel() START") for { @@ -25,14 +36,25 @@ func catchActionChannel() { muAction.Lock() // TODO ui.QueueMain(f) // TODO ui.QueueMain( func() {rawAction(a)} ) - ui.QueueMain( func() {rawAction(&a)} ) // rawAction(a) + queueMain(a) muAction.Unlock() log.Log(INFO, "catchActionChannel() STUFF END", a.WidgetId, a.ActionType, a.WidgetType) } } } +func guiMain() { + defer func() { + if r := recover(); r != nil { + log.Warn("YAHOOOO Recovered in main application:", r) + } + }() + ui.Main(func() { + demoUI() + }) +} + // This is important. This sets the defaults for the gui. Without this, there isn't correct padding, etc func init() { log.Log(INFO, "Init() START") @@ -41,13 +63,10 @@ func init() { // log.Log(INFO, "init() Setting defaultBehavior = true") setDefaultBehavior(true) - // TODO: this is messed up. run ui.Main() from the first add? Initialize it with an empty thing first? // fake out the OS toolkit by making a fake window. This is probably needed for macos & windows // actually, this probably breaks the macos build - go ui.Main(func() { - demoUI() - }) + go guiMain() // andlabs = make(map[int]*andlabsT) pluginChan = make(chan widget.Action, 1) diff --git a/andlabs/place.go b/andlabs/place.go index 2658f99..1d2144c 100644 --- a/andlabs/place.go +++ b/andlabs/place.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" "go.wit.com/log" diff --git a/andlabs/slider.go b/andlabs/slider.go index 532f437..0da06f3 100644 --- a/andlabs/slider.go +++ b/andlabs/slider.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) func (p *node) newSlider(n *node) { diff --git a/andlabs/spinner.go b/andlabs/spinner.go index 6b4fec1..01d3b26 100644 --- a/andlabs/spinner.go +++ b/andlabs/spinner.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) func (p *node) newSpinner(n *node) { diff --git a/andlabs/structs.go b/andlabs/structs.go index 81c4669..87e88e1 100644 --- a/andlabs/structs.go +++ b/andlabs/structs.go @@ -1,7 +1,7 @@ package main -import "github.com/andlabs/ui" -import _ "github.com/andlabs/ui/winmanifest" +import "go.wit.com/dev/andlabs/ui" +import _ "go.wit.com/dev/andlabs/ui/winmanifest" // var andlabs map[int]*andlabsT // var callback func(int) bool diff --git a/andlabs/tab.go b/andlabs/tab.go index 232b8e8..07c5ce9 100644 --- a/andlabs/tab.go +++ b/andlabs/tab.go @@ -4,8 +4,8 @@ import ( "go.wit.com/log" "go.wit.com/gui/widget" - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) /* diff --git a/andlabs/textbox.go b/andlabs/textbox.go index d766b45..30671cd 100644 --- a/andlabs/textbox.go +++ b/andlabs/textbox.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" ) func (p *node) newTextbox(n *node) { diff --git a/andlabs/updateui.go b/andlabs/updateui.go index c43e15f..8c94163 100644 --- a/andlabs/updateui.go +++ b/andlabs/updateui.go @@ -1,7 +1,7 @@ package main import ( - "github.com/andlabs/ui" + "go.wit.com/dev/andlabs/ui" ) // Example showing how to update the UI using the QueueMain function diff --git a/andlabs/window.go b/andlabs/window.go index d9dd106..09bf6b8 100644 --- a/andlabs/window.go +++ b/andlabs/window.go @@ -1,8 +1,8 @@ package main import ( - "github.com/andlabs/ui" - _ "github.com/andlabs/ui/winmanifest" + "go.wit.com/dev/andlabs/ui" + _ "go.wit.com/dev/andlabs/ui/winmanifest" "go.wit.com/log" ) diff --git a/gocui/go.mod b/gocui/go.mod index a10c691..db7d13f 100644 --- a/gocui/go.mod +++ b/gocui/go.mod @@ -5,7 +5,7 @@ go 1.21.4 require ( github.com/awesome-gocui/gocui v1.1.0 go.wit.com/gui/widget v1.1.3 - go.wit.com/log v0.5.3 + go.wit.com/log v0.5.4 ) require ( @@ -14,7 +14,7 @@ require ( github.com/lucasb-eyer/go-colorful v1.0.3 // indirect github.com/mattn/go-runewidth v0.0.10 // indirect github.com/rivo/uniseg v0.1.0 // indirect - go.wit.com/dev/davecgh/spew v1.1.3 // indirect + go.wit.com/dev/davecgh/spew v1.1.4 // indirect golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect golang.org/x/text v0.3.3 // indirect diff --git a/gocui/go.sum b/gocui/go.sum index 1c3f9ae..e0bce49 100644 --- a/gocui/go.sum +++ b/gocui/go.sum @@ -12,10 +12,14 @@ github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= go.wit.com/dev/davecgh/spew v1.1.3 h1:hqnB5qsPgC2cLZaJXqQJspQ5n/Ugry9kyL3tLk0hVzQ= go.wit.com/dev/davecgh/spew v1.1.3/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA= +go.wit.com/dev/davecgh/spew v1.1.4 h1:C9hj/rjlUpdK+E6aroyLjCbS5MFcyNUOuP1ICLWdNek= +go.wit.com/dev/davecgh/spew v1.1.4/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA= go.wit.com/gui/widget v1.1.3 h1:GvLzGSOF9tfmoh6HNbFdN+NSlBo2qeS/Ba2TnQQ1A1U= go.wit.com/gui/widget v1.1.3/go.mod h1:A6/FaiFQtAHTjgo7c4FrokXe6bXX1Cowo35b2Lgi31E= go.wit.com/log v0.5.3 h1:/zHkniOPusPEuX1R401rMny9uwSO/nSU/QOMx6qoEnE= go.wit.com/log v0.5.3/go.mod h1:LzIzVxc2xJQxWQBtV9VbV605P4TOxmYDCl+BZF38yGE= +go.wit.com/log v0.5.4 h1:vijLRPTUgChb8J5tx/7Uma/lGTUxeSXosFbheAmL914= +go.wit.com/log v0.5.4/go.mod h1:BaJBfHFqcJSJLXGQ9RHi3XVhPgsStxSMZRlaRxW4kAo= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M= diff --git a/nocui/go.mod b/nocui/go.mod index a8e4af7..ec42260 100644 --- a/nocui/go.mod +++ b/nocui/go.mod @@ -4,7 +4,7 @@ go 1.21.4 require ( go.wit.com/gui/widget v1.1.3 - go.wit.com/log v0.5.3 + go.wit.com/log v0.5.4 ) -require go.wit.com/dev/davecgh/spew v1.1.3 // indirect +require go.wit.com/dev/davecgh/spew v1.1.4 // indirect diff --git a/nocui/go.sum b/nocui/go.sum index 6f919cd..3af9a6c 100644 --- a/nocui/go.sum +++ b/nocui/go.sum @@ -1,6 +1,10 @@ go.wit.com/dev/davecgh/spew v1.1.3 h1:hqnB5qsPgC2cLZaJXqQJspQ5n/Ugry9kyL3tLk0hVzQ= go.wit.com/dev/davecgh/spew v1.1.3/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA= +go.wit.com/dev/davecgh/spew v1.1.4 h1:C9hj/rjlUpdK+E6aroyLjCbS5MFcyNUOuP1ICLWdNek= +go.wit.com/dev/davecgh/spew v1.1.4/go.mod h1:sihvWmnQ/09FWplnEmozt90CCVqBtGuPXM811tgfhFA= go.wit.com/gui/widget v1.1.3 h1:GvLzGSOF9tfmoh6HNbFdN+NSlBo2qeS/Ba2TnQQ1A1U= go.wit.com/gui/widget v1.1.3/go.mod h1:A6/FaiFQtAHTjgo7c4FrokXe6bXX1Cowo35b2Lgi31E= go.wit.com/log v0.5.3 h1:/zHkniOPusPEuX1R401rMny9uwSO/nSU/QOMx6qoEnE= go.wit.com/log v0.5.3/go.mod h1:LzIzVxc2xJQxWQBtV9VbV605P4TOxmYDCl+BZF38yGE= +go.wit.com/log v0.5.4 h1:vijLRPTUgChb8J5tx/7Uma/lGTUxeSXosFbheAmL914= +go.wit.com/log v0.5.4/go.mod h1:BaJBfHFqcJSJLXGQ9RHi3XVhPgsStxSMZRlaRxW4kAo=