View on GitHub

Mazarin

All-Go Operating System For ARM64 and x86_64

std

import "mazzy/mazarin/mancini/std"

BoxesAndGlueInteractor renders text using Knuth-Plass paragraph layout from the boxesandglue library. It receives text via a shared memory page whose address and length are provided at construction time. The length is driven by an eager constraint, so the BAG redraws automatically when the source updates.

This interactor replaces WebInteractor for TeX-quality text rendering without an HTML engine. Font metrics and glyph bitmaps come from the same GlyphProvider / fontsvc infrastructure used by all other interactors.

Code generated by compile-constraints from column_height.vgo. DO NOT EDIT.

Code generated by compile-constraints from column_last_child.vgo. DO NOT EDIT.

Code generated by compile-constraints from column_width.vgo. DO NOT EDIT.

console.go — Console and consoleLine interactors for monospaced terminal text display. Console is a column of consoleLine children, sized by font metrics. It exposes a terminal-like API (HandleByte, AddLine) and manages all line content internally. consoleLine is unexported — external code interacts only with Console.

Console is designed to be a child of a NeuBox (Heavy, Inset) so that the text area appears recessed into the neumorphic surface. It uses the standard palette colors (dark text on light surface) rather than the traditional white-on-black terminal look.

corner_radial_chooser.go — Self-contained pulsing indicator + radial overlay menu.

CornerRadialChooser is a drop-in interactor: create it as a child of any container, and it handles its own throbber animation, overlay lifecycle, and mouse input. The caller only needs to route WM events and call Tick() at 10Hz.

Unlike ThrobberRadialChooser, CornerRadialChooser tracks its own drawn position and app screen origin — no manual coordinate wiring.

Usage:

crc := std.NewCornerRadialChooser("crc", parentName, theme, pal,
    rachelSID, []string{"Small","Medium","Large"}, 0)
crc.OnSelect = func(idx int) { ... }
// In event loop:
//   crc.Tick() at 10Hz
//   Route OverlayReady/Released and mouse events via crc methods

Package std provides the standard library of concrete interactor types for the Mancini UI toolkit. Every interactor here embeds one of the base types from mazzy/mazarin/mancini/impl and satisfies [mancini.NewDrawer].

Interactor Catalog

Leaf interactors (no children, embed [impl.ThemedInteractor]):

Leaf interactors (no children, embed [impl.Interactor] directly):

Container interactors (embed [impl.Interactor] + [impl.Parent]):

Decorator interactors (embed [impl.Decorator]):

Title bar renderers (not interactors; used as callbacks for AppWindow):

Neumorphic Rendering Helpers

The package also exports rendering helpers used by interactors and available for custom interactor implementations:

Nil\-Safe Neumorphic Parameters

All interactors handle nil [mancini.NeuParams] gracefully. When the [mancini.Theme]’s [mancini.NeumorphicParams] returns nil for Heavy() or Light(), interactors fall back to flat rendering: filled shapes with face content, but no shadows, grooves, or selection effects. This allows themes to disable neumorphic rendering for specific weight classes.

Code generated by compile-constraints from minmax_column_height.vgo. DO NOT EDIT.

Code generated by compile-constraints from row_fill_last_child_width.vgo. DO NOT EDIT.

Code generated by compile-constraints from row_height.vgo. DO NOT EDIT.

Code generated by compile-constraints from row_last_child.vgo. DO NOT EDIT.

Code generated by compile-constraints from row_width.vgo. DO NOT EDIT.

throbber_radial_chooser.go — Pulsing indicator that opens a radial overlay menu on click.

ThrobberRadialChooser is a small pulsing circle (throbber) that, when clicked, requests an overlay from rachel and draws a RadialNOfMChooser inside it. The overlay is dismissed on segment selection or on focus loss.

The caller provides labels and an initial selection index. After the user selects a segment, OnSelect is called with the segment index.

Usage:

trc := std.NewThrobberRadialChooser("trc", parentName, theme, pal,
    rachelSID, mainDC, []string{"Small","Large"}, 0)
// In the main loop, route OverlayReady/OverlayReleased/MouseMove/MouseRelease
// to trc.HandleOverlayReady, trc.HandleOverlayReleased, trc.HandleMouseMove,
// trc.HandleMouseRelease.
// Call trc.Tick() at 10Hz for the pulsing animation.

Index

Constants

DefaultMaxLineCount is the default maximum number of logical lines.

const DefaultMaxLineCount = 200

Variables

var ProgColumnHeight = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 8, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x14},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 46, Op2: 47, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_maxHeight_",
        "_spacing_",
        "_vPadding_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "columnHeight", PC: 200, NumArgs: 0, NumLocals: 11, LocalBase: 40},
    },
    Entry: 12,
}

var ProgColumnLastChild = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 8, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x25, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 46, Op2: 47, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_maxHeight_",
        "_spacing_",
        "_vPadding_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "columnLastChild", PC: 200, NumArgs: 0, NumLocals: 11, LocalBase: 40},
    },
    Entry: 12,
}

var ProgColumnWidth = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 7, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x14},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x05, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 44, Op2: 45, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "columnWidth", PC: 200, NumArgs: 0, NumLocals: 7, LocalBase: 40},
    },
    Entry: 12,
}

var ProgMinmaxColumnHeight = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 7, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 45, Op2: 46, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 2, Op2: 3, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_minH_",
        "_maxH_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "minMaxColumnHeight", PC: 200, NumArgs: 0, NumLocals: 9, LocalBase: 40},
    },
    Entry: 12,
}

var ProgRowFillLastChildWidth = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x32, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x32, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 47, Op2: 48, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x35, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x6a, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_rowWidth_",
        "_spacing_",
        "_hPadding_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "rowFillLastChildWidth", PC: 200, NumArgs: 0, NumLocals: 10, LocalBase: 40},
    },
    Entry: 12,
}

var ProgRowHeight = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 7, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1e},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x05, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 44, Op2: 45, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 46, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "rowHeight", PC: 200, NumArgs: 0, NumLocals: 7, LocalBase: 40},
    },
    Entry: 12,
}

var ProgRowLastChild = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 8, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x25, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 46, Op2: 47, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_maxWidth_",
        "_spacing_",
        "_hPadding_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "rowLastChild", PC: 200, NumArgs: 0, NumLocals: 11, LocalBase: 40},
    },
    Entry: 12,
}

var ProgRowWidth = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 8, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x14},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 6, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 46, Op2: 47, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 48, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 49, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 50, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_maxWidth_",
        "_spacing_",
        "_hPadding_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "rowWidth", PC: 200, NumArgs: 0, NumLocals: 11, LocalBase: 40},
    },
    Entry: 12,
}

func ApplyDisabledCircleOverlay

func ApplyDisabledCircleOverlay(pal mancini.Palette, dc mancini.DrawContext, cx, cy, radius float64)

ApplyDisabledCircleOverlay draws a semi-transparent Surface-colored circle overlay to indicate a disabled circular control.

func ApplyDisabledOverlay

func ApplyDisabledOverlay(pal mancini.Palette, dc mancini.DrawContext, x1, y1, x2, y2, r float64)

ApplyDisabledOverlay draws a semi-transparent Surface-colored overlay over the given rectangle to indicate a disabled control. The opacity is determined by the palette’s DisabledAlpha (0.0–1.0).

func NeuBoxWith

func NeuBoxWith(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA, p *mancini.NeuParams)

NeuBoxWith draws a neumorphic rounded rectangle using explicit params. It is the central rendering function used by Button, Checkbox, CheckboxWithLabel, NeuBox, AppWindow, FreeFloatingWindow, SingleLineText, and NOfMChooser.

The depth parameter selects the shadow treatment ([mancini.Raised], [mancini.Flush], or [mancini.Inset]). If p is nil, a flat surface-colored rectangle is drawn (no shadows).

func NeuCacheStats

func NeuCacheStats() (int64, int64)

NeuCacheStats returns (hits, misses) since last reset.

func NeuCircleWith

func NeuCircleWith(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, cx, cy, rad float64, face color.NRGBA, p *mancini.NeuParams)

NeuCircleWith draws a neumorphic circle using explicit params. It is the rendering counterpart of NeuBoxWith for circular shapes, used by NeuCircle.

If p is nil, a flat surface-colored circle is drawn (no shadows).

func NeuGroove

func NeuGroove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)

NeuGroove draws a thin horizontal inset line (groove separator). Used by FreeFloatingWindow for the title/content separator and available for custom interactor implementations.

func NewConsoleWithBox

func NewConsoleWithBox(myName, parent string, pal mancini.Palette, neuParams mancini.NeuParams, fonts *mancini.FontConfig, fontSize int64, cols, rows int) (*NeuBox, *Console)

NewConsoleWithBox creates a NeuBox (Heavy, Inset) containing a Console. Returns the NeuBox (add to parent layout) and the Console (use for content management). The NeuBox name is myName+“_box”.

func NewDefaultTheme

func NewDefaultTheme(family string, defaultSize int64, resolve mancini.FontResolver) mancini.Theme

NewDefaultTheme creates a Theme with the standard neumorphic purple palette.

func NewDefaultThemeColors

func NewDefaultThemeColors(fg, bg color.NRGBA, family string, defaultSize int64, resolve mancini.FontResolver) mancini.Theme

NewDefaultThemeColors creates a Theme with custom foreground and background colors. Shadow colors are derived from the defaults; only the surface and text colors are overridden.

func ResetDrawPerf

func ResetDrawPerf()

ResetDrawPerf zeroes all draw-performance counters in preparation for a new draw pass.

func ResetNeuCacheStats

func ResetNeuCacheStats()

ResetNeuCacheStats zeroes the hit/miss counters.

func ScrollerHeightURI

func ScrollerHeightURI(myName string) string

ScrollerHeightURI returns the URI for the scroller’s Height attribute. Useful for callers that need to build the constraint before creating the Scroller.

type AppWindow

AppWindow is the root application window — a thin, zero-inset decorator whose only job is to anchor the constraint tree at the well-known name “AppWindow”, propagate DrawContext to its child, clip child rendering to window bounds, and track focus state for rachel (the window manager).

AppWindow has no decoration of its own — window chrome (title bar, borders, shadows) is rachel’s responsibility. The single child is “the app”: whatever interactor tree the shepherd assembles.

Width and height are inside-out from the child, clamped to [10%, 90%] of screen dimensions via constraint programs.

There is one AppWindow per shepherd — its constraint name is always “AppWindow” so that rachel can locate it at a well-known attribute path.

See also FreeFloatingWindow for non-root floating panels.

type AppWindow struct {
    impl.Decorator

    // Pal is the palette used for rendering this window's contents.
    Pal mancini.Palette
    // Focused indicates whether the window currently has input focus.
    Focused bool
    Title   string // informational — passed to rachel, not rendered here

    // Input is the Henry-Hudson dispatch pipeline for this app.
    // Nil until the app calls InitInput. Shepherd apps call
    // app.Input.DispatchWM(msg) from their message loop.
    Input *mancini.AppDispatcher

    RachelSID int // set by the shepherd before calling RegisterAnimation

    // NeuPrms holds neumorphic shading parameters retained for future use.
    NeuPrms mancini.NeuParams
    // Radius is the corner radius retained for future use.
    Radius float64
    // TitleDraw is a custom title-bar draw callback retained for future use.
    TitleDraw func(dc mancini.DrawContext, focused bool, x, y, w, h float64)
    // contains filtered or unexported fields
}

func NewAppWindow

func NewAppWindow(pal mancini.Palette, title string) *AppWindow

NewAppWindow creates an AppWindow with outside-in sizing. Width and Height are value attributes set by rachel via BackingStoreReady / WindowResized messages.

func (*AppWindow) AnnounceToWM

func (w *AppWindow) AnnounceToWM(x, y, width, height int32)

AnnounceToWM sends an AppStart message to rachel with the desired initial window position and size.

func (*AppWindow) AnnounceToWMWithPlacement

func (w *AppWindow) AnnounceToWMWithPlacement(x, y, width, height, placement int32)

AnnounceToWMWithPlacement sends an AppStart with an explicit placement hint.

func (*AppWindow) Decorate

func (w *AppWindow) Decorate(self mancini.Interactor, x, y, ww, hh int64)

Decorate implements mancini.Decoratable — no-op. Window chrome is rachel’s responsibility.

func (*AppWindow) DispatchAnimation

func (w *AppWindow) DispatchAnimation(wmMsg any) bool

DispatchAnimation routes an animation WM message to the registered Animatable interactor. Returns true if the message was handled.

func (*AppWindow) Draw

func (w *AppWindow) Draw(self mancini.Interactor, x, y, ww, hh int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Propagates DC to the child, clips child rendering to window bounds, and draws the child at the full window area (zero insets).

If the AppWindow’s DamageRect is smaller than its full bounds, drawing is clipped to the damaged region so unchanged pixels are not overwritten.

func (*AppWindow) Focus

func (w *AppWindow) Focus()

Focus sets the window to focused state.

func (*AppWindow) HandleBackingStoreReady

func (w *AppWindow) HandleBackingStoreReady(addr uintptr, length int)

HandleBackingStoreReady processes a new backing store address from rachel. Pops and releases (via Munmap) any stale entries from the backing store stack. If the new address matches the current top, no action is taken. Otherwise all non-matching entries are released and the new entry is pushed.

func (*AppWindow) InitInput

func (w *AppWindow) InitInput() (*mancini.AppDispatcher, *mancini.ClickAgent, *mancini.KeyAgent)

InitInput creates and returns the standard Henry-Hudson dispatch pipeline for this AppWindow. Call once during setup.

func (*AppWindow) PublishThemeAttributes

func (w *AppWindow) PublishThemeAttributes(theme mancini.Theme)

PublishThemeAttributes publishes theme geometry and font configuration as constraint attributes under the “Theme/” namespace. Call once during setup after creating the AppWindow.

func (*AppWindow) RegisterAnimation

func (w *AppWindow) RegisterAnimation(a mancini.Animatable, startNanos, endNanos int64) uint64

RegisterAnimation registers an Animatable for an animation and sends AnimationRegister to rachel. The local ID is sent as the Nonce field so rachel echoes it back. Returns the local animation ID.

func (*AppWindow) SendBlit

func (w *AppWindow) SendBlit()

SendBlit sends a Blit message to rachel reporting the app-area dimensions that were actually drawn. Rachel uses DrawnWidth/DrawnHeight to clip compositing during resize so undrawn pixels are not blitted.

func (*AppWindow) SetSize

func (w *AppWindow) SetSize(appW, appH int64)

SetSize updates the AppWindow’s layout Width and Height to the given app content dimensions. Called when rachel sends BackingStoreReady or WindowResized with new dimensions.

func (*AppWindow) Unfocus

func (w *AppWindow) Unfocus()

Unfocus sets the window to unfocused state.

func (*AppWindow) UnregisterAnimation

func (w *AppWindow) UnregisterAnimation(localID uint64)

UnregisterAnimation cancels an active animation by local ID. Sends AnimationUnregister to rachel, which responds with AnimationUnregistered. On receiving the response, DispatchAnimation calls AnimationFinish on the interactor and cleans up all bookkeeping.

type BackingStoreEntry

BackingStoreEntry tracks a shared backing store mapping so it can be released via Munmap when superseded by a newer backing store.

type BackingStoreEntry struct {
    // Addr is the base address of the mapped backing store region.
    Addr uintptr
    // Len is the length in bytes of the mapped region.
    Len int
}

type BoxesAndGlueInteractor

BoxesAndGlueInteractor is a leaf interactor that renders justified paragraphs using Knuth-Plass line breaking. It has outside-in sizing (width and height set by the parent via constraints).

type BoxesAndGlueInteractor struct {
    impl.ThemedInteractor
    // contains filtered or unexported fields
}

func NewBoxesAndGlueInteractor

func NewBoxesAndGlueInteractor(myName, parent string, theme mancini.Theme, fontSize int32) *BoxesAndGlueInteractor

NewBoxesAndGlueInteractor creates a BoxesAndGlueInteractor with outside-in sizing. The text page address and length constraint are configured via SetTextSource after construction.

func NewBoxesAndGlueInteractorWithLayout

func NewBoxesAndGlueInteractorWithLayout(myName string, lh *mancini.LayoutAttributes, theme mancini.Theme, fontSize int32) *BoxesAndGlueInteractor

NewBoxesAndGlueInteractorWithLayout creates a BoxesAndGlueInteractor with pre-built layout attributes (for constrained height, etc.).

func (*BoxesAndGlueInteractor) Draw

func (b *BoxesAndGlueInteractor) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Clears background, reads text from the shared page, runs layout if needed, and renders each glyph.

func (*BoxesAndGlueInteractor) SetFontFamily

func (b *BoxesAndGlueInteractor) SetFontFamily(family string)

ensureFont opens the font via DrawContext if not already done. SetFontFamily overrides the theme’s font family for this interactor.

func (*BoxesAndGlueInteractor) SetFontSize

func (b *BoxesAndGlueInteractor) SetFontSize(size int32)

SetFontSize changes the font size and forces re-layout on next Draw.

func (*BoxesAndGlueInteractor) SetLeading

func (b *BoxesAndGlueInteractor) SetLeading(px float64)

SetLeading sets the extra inter-line spacing in pixels (default 2).

func (*BoxesAndGlueInteractor) SetTextSource

func (b *BoxesAndGlueInteractor) SetTextSource(pageAddr uintptr, lenAttr *attr.Attribute[int64])

SetTextSource configures the shared page address and the eager length constraint. Call this once during setup.

type Button

Button is a neumorphic push-button interactor. It renders a rounded rectangle with shadows controlled by Depth, and optional face content (text, icon, etc.) drawn by the Face callback.

Button embeds [impl.ThemedInteractor] for layout wiring, theme access, and the backpointer pattern. Rendering is delegated to NeuBoxWith, which handles all three depth states ([mancini.Raised], [mancini.Flush], [mancini.Inset]). When the theme’s [mancini.NeumorphicParams.Light] returns nil, the button falls back to a flat filled rectangle.

Depth Transitions

Callers toggle Depth on mouse-down/up to animate press feedback. Use [mancini.NeuDepth.MouseDown] for the standard transition: Raised→Inset on press, Inset→Flush on release.

Construction

Use NewButton with a pre-built [mancini.LayoutAttributes], or NewButtonNamed for automatic layout creation from name+parent strings. Both pass the Button itself as the backpointer via [impl.ThemedInteractor.Init].

type Button struct {
    impl.ThemedInteractor

    Depth    mancini.NeuDepth // visual state: Raised, Flush, or Inset
    Radius   float64          // corner radius in pixels (default 8.0)
    Face     mancini.Face     // optional content drawn on top of the button face
    Disabled bool             // when true, renders dimmed and ignores input
}

func NewButton

func NewButton(layout *mancini.LayoutAttributes, theme mancini.Theme, depth mancini.NeuDepth) *Button

NewButton creates a Button wired to the constraint system and theme. layout must already be created (e.g., via [mancini.NewLayoutAttributes]).

func NewButtonNamed

func NewButtonNamed(myName, parent string, theme mancini.Theme, depth mancini.NeuDepth, width, height int64) *Button

NewButtonNamed creates a Button with layout built from name + parent strings. Width and height are published as intrinsic dimensions so the constraint system can bootstrap. If myName is empty, a unique name is generated via [mancini.DefaultName].

func (*Button) Draw

func (b *Button) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements [mancini.NewDrawer]. It renders a neumorphic rounded rectangle via NeuBoxWith at the given bounds, filled with the [mancini.Palette]’s Surface color and decorated with shadows according to Depth. If Face is non-nil, it is called to draw content (text, icon, etc.) on top of the box.

type Checkbox

Checkbox is a neumorphic toggle interactor. When unchecked it renders as [mancini.Inset] (a recessed square); when checked it renders as [mancini.Raised] with a checkmark drawn on the face.

Checkbox embeds [impl.ThemedInteractor] and delegates rendering to NeuBoxWith. When the theme’s [mancini.NeumorphicParams.Light] returns nil, the checkbox falls back to flat rendering.

Toggling is done externally by setting Checked and redrawing — Checkbox does not handle input events directly.

See also CheckboxWithLabel, which pairs a Checkbox with a text Label.

type Checkbox struct {
    impl.ThemedInteractor

    Checked  bool    // true = raised with checkmark, false = inset
    Size     float64 // side length of the square box in pixels
    Disabled bool    // when true, renders dimmed and ignores input
}

func NewCheckbox

func NewCheckbox(layout *mancini.LayoutAttributes, theme mancini.Theme, size float64, checked bool) *Checkbox

NewCheckbox creates a Checkbox wired to the constraint system and theme. layout must already be created (e.g. via mancini.NewLayoutAttributes).

func NewCheckboxNamed

func NewCheckboxNamed(myName, parent string, theme mancini.Theme, size float64, checked bool) *Checkbox

NewCheckboxNamed creates a Checkbox with layout built from name + parent strings. Width and height are both set to size (the checkbox is square) so the constraint system can bootstrap.

func (*Checkbox) Draw

func (c *Checkbox) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements [mancini.NewDrawer]. It renders a neumorphic square box centered within the given bounds. Unchecked = [mancini.Inset], Checked = [mancini.Raised] with a proportional checkmark.

type CheckboxWithLabel

CheckboxWithLabel combines a neumorphic Checkbox with a label drawn via a [mancini.Face]. The checkbox is rendered identically to Checkbox ([mancini.Inset] when unchecked, [mancini.Raised] + checkmark when checked), and the label is positioned on the specified Side with a configurable Gap.

CheckboxWithLabel embeds [impl.ThemedInteractor] and renders both the checkbox and label in a single Draw call. It handles nil [mancini.NeuParams] by falling back to flat rendering for the checkbox portion.

type CheckboxWithLabel struct {
    impl.ThemedInteractor

    // Checked indicates whether the checkbox is currently checked.
    Checked bool
    // Side specifies which side of the checkbox the label is drawn on.
    Side      LabelSide
    CheckSize float64      // side length of the checkbox square
    Gap       float64      // space between checkbox and label
    Label     mancini.Face // draws the label content (may be nil)
    LabelW    float64      // width of the label area
    LabelH    float64      // height of the label area
    Disabled  bool         // when true, renders dimmed and ignores input
}

func NewCheckboxWithLabel

func NewCheckboxWithLabel(layout *mancini.LayoutAttributes, theme mancini.Theme, checkSize float64, checked bool, side LabelSide, gap float64, label mancini.Face, labelW, labelH float64) *CheckboxWithLabel

NewCheckboxWithLabel creates a CheckboxWithLabel wired to the constraint system and theme. layout must already be created.

func NewCheckboxWithLabelNamed

func NewCheckboxWithLabelNamed(myName, parent string, theme mancini.Theme, checkSize float64, checked bool, side LabelSide, gap float64, label mancini.Face, labelW, labelH float64) *CheckboxWithLabel

NewCheckboxWithLabelNamed creates a CheckboxWithLabel with layout built from name + parent strings. Total width and height are computed from Side, CheckSize, Gap, and label dimensions, and published so the constraint system can bootstrap.

func (*CheckboxWithLabel) Draw

func (c *CheckboxWithLabel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. It renders a neumorphic checkbox (Inset when unchecked, Raised + checkmark when checked) and a label positioned according to Side.

type Clock

Clock is a leaf interactor that draws an analog clock face. The [mancini.ClockFace] controls visual appearance and timezone. Clock handles layout, time conversion from UTC, and delegates rendering to the active face.

Clock embeds [impl.Interactor] directly (not [impl.ThemedInteractor]) because it receives its [mancini.Palette] and [mancini.FontConfig] explicitly rather than from a [mancini.Theme].

Clock implements [mancini.Clickable] to cycle through normal faces (Classic, Roman, Movado, Digit) and [mancini.DoubleClickable] to cycle through weird faces (Metric, Polar).

Clock is typically wrapped in a NeuCircle decorator for neumorphic circular shadows.

type Clock struct {
    impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()

    // Pal is the palette used by the active face for rendering.
    Pal mancini.Palette
    // Fonts is the font configuration passed to the active face.
    Fonts   *mancini.FontConfig
    Size    int64                     // preferred side length (logical pixels)
    Face    mancini.ClockFace         // current active face
    UTCFunc func() (sec, nanos int64) // returns current UTC time

    FaceNameAttr *attr.Attribute[string] // constraint attribute for current face name

    // Two face groups: single click cycles normal, double click cycles weird.
    NormalFaces []mancini.ClockFace
    WeirdFaces  []mancini.ClockFace

    // Layout attributes for face name label and spacer visibility toggling.
    // Set after construction by the caller (they're sibling interactors).
    FaceLabelLayout  *mancini.LayoutAttributes
    FaceSpacerLayout *mancini.LayoutAttributes
    // contains filtered or unexported fields
}

func NewClock

func NewClock(myName, parent string, pal mancini.Palette, fonts *mancini.FontConfig, size int64, utcFunc func() (int64, int64), normalFaces, weirdFaces []mancini.ClockFace) *Clock

NewClock creates a Clock wired to the constraint system. parent is the constraint name of the wrapping NeuCircle (or other parent). normalFaces are cycled by single click; weirdFaces by double click.

func (*Clock) Click

func (c *Clock) Click(ev *mancini.InputEvent) bool

Click implements mancini.Clickable — cycles through normal faces (Classic, Roman, Movado, Digit).

func (*Clock) DetailedHit

func (c *Clock) DetailedHit(localX, localY int64) bool

DetailedHit returns true if (localX, localY) is inside the clock’s circular face.

func (*Clock) DoubleClick

func (c *Clock) DoubleClick(ev *mancini.InputEvent) bool

DoubleClick implements mancini.DoubleClickable — cycles through weird faces (Metric, Polar).

func (*Clock) Draw

func (c *Clock) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer.

type Column

Column arranges children vertically with inside-out sizing. Width and Height are constraint-computed from children’s published dimensions. Children declare this Column as their parent by naming it in their [mancini.LayoutAttributes]’ Parent field.

Column embeds [impl.Interactor] + [impl.Parent]. It does not embed [impl.ThemedInteractor] because containers do not need theme access for their own rendering. Children are discovered via the constraint network at draw time (see [impl.Parent.GetChildren]).

Layout Behavior

Children are arranged top-to-bottom with configurable spacing. Cross-axis (horizontal) alignment is controlled by CrossAlign ([mancini.AxisMinimum], [mancini.AxisMiddle], [mancini.AxisMaximum]). Children that overflow MaxHeight are either clipped (ClipChildOverflow) or skipped entirely.

See also Row for horizontal layout and ColumnOutsideIn for a column with clamped height.

type Column struct {
    impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
    impl.Parent     // GetChildren() via constraint network

    // Pal is the palette used for the optional background fill.
    Pal mancini.Palette
    // CrossAlign controls horizontal alignment of children within the column.
    CrossAlign mancini.Alignment
    // MaxHeight is the maximum column height in pixels (0 means unbounded).
    MaxHeight         int64
    VPadding          int64 // vertical padding applied at top and bottom edges
    HPadding          int64 // horizontal padding applied at left and right edges
    ClipChildOverflow bool  // true: clip last partial child; false: skip it
    PaintBg           bool  // true: fill background with Pal.Surface() before children
}

func NewColumn

func NewColumn(myName, parent string, pal mancini.Palette, maxHeight int64, crossAlign mancini.Alignment, vPadding, hPadding int64, clipOverflow bool) *Column

NewColumn creates a Column wired to the constraint system. Children are not passed here — they declare this Column as their parent via their own InitLayout(parentName) call, and are discovered at draw time via the constraint network.

func NewColumnWithLayout

func NewColumnWithLayout(lh *mancini.LayoutAttributes, pal mancini.Palette, crossAlign mancini.Alignment, hPadding, vPadding int64, clipOverflow bool) *Column

NewColumnWithLayout creates a Column using a pre-built LayoutAttributes. Used when the caller provides bridge/custom layout (e.g., as AppWindow’s direct child with inout-bridge constraints on Width/Height). The caller is responsible for setting Width, Height, and Bounds on lh.

func (*Column) Draw

func (c *Column) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Arranges children top-to-bottom with spacing, cross-axis alignment, and overflow clipping. If PaintBg is true and Pal is set, the column fills its background with the theme’s Surface color before drawing children.

func (*Column) SetSpacing

func (c *Column) SetSpacing(v float64)

SetSpacing sets the inter-child spacing value (in pixels).

type ColumnOutsideIn

ColumnOutsideIn arranges children vertically with outside-in layout. Unlike Column (pure inside-out sizing), ColumnOutsideIn clamps its height between minH and maxH. Within that range it grows with the sum of children’s heights + 1px spacing. Children that overflow the available height are hidden by setting their Visible layout attribute to false.

ColumnOutsideIn embeds [impl.Interactor] + [impl.Parent]. Width is constraint-computed as the max of children’s published widths.

See also Column for unclamped inside-out vertical layout.

type ColumnOutsideIn struct {
    impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
    impl.Parent     // GetChildren() via constraint network

    // BgColor is the background fill color drawn beneath children.
    BgColor color.NRGBA
}

func NewColumnOutsideIn

func NewColumnOutsideIn(myName, parent string, bgColor color.NRGBA, minH, maxH int64) *ColumnOutsideIn

NewColumnOutsideIn creates a ColumnOutsideIn wired to the constraint system. minH and maxH clamp the height constraint; within that range height equals sum(children heights) + (n-1) px spacing.

func (*ColumnOutsideIn) Draw

func (c *ColumnOutsideIn) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Fills background, lays out children top-to-bottom with 1px spacing, and hides any that overflow.

type ColumnPercentage

ColumnPercentage arranges children vertically, giving each child a fraction of the parent’s height according to a percentage sequence. Children are centered horizontally.

Percentage normalization:

Child count vs percentage count:

type ColumnPercentage struct {
    impl.Interactor
    impl.Parent

    // Pal is the palette retained for child rendering decisions.
    Pal      mancini.Palette
    HPadding int64     // horizontal padding applied at left and right edges
    Percents []float64 // percentage of height for each child position
}

func NewColumnPercentage

func NewColumnPercentage(myName, parent string, pal mancini.Palette, w, h int64, percents []float64) *ColumnPercentage

NewColumnPercentage creates a ColumnPercentage with the given percentage sequence. Percentages are normalized on construction (see type doc). Width and height are set as value attributes from the given dimensions.

func (*ColumnPercentage) Draw

func (cp *ColumnPercentage) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw positions children vertically according to the percentage sequence. Each child is centered horizontally and given a height proportional to its percentage of the parent’s total height.

type Console

Console is a terminal-like display of monospaced text lines. It arranges consoleLine children vertically edge-to-edge, computes line count from font metrics and allocated height, and provides AddLine / HandleByte methods for terminal-style content management.

Console publishes LineHeight, CharsPerLine, and NumLines as constraint attributes for observability and future dynamic resizing.

Usage: create a NeuBox (Heavy, Inset) and make Console its child:

box, console := std.NewConsoleWithBox("AppWindow", pal, neuParams, fonts, 16, 120, 20)
type Console struct {
    impl.Interactor
    // contains filtered or unexported fields
}

func NewConsole

func NewConsole(myName, parent string, pal mancini.Palette, fonts *mancini.FontConfig, fontSize int64, cols, rows int) *Console

NewConsole creates a Console wired to the constraint system. It probes the font to compute charWidth and lineHeight, creates layout attributes with pixel dimensions (cols * charW, rows * lineH), and publishes LineHeight, CharsPerLine, NumLines as constraint attributes.

Console’s parent in the constraint network should be a NeuBox name. Use NewConsoleWithBox for a convenience constructor that creates both the NeuBox and Console.

func (*Console) AddLine

func (c *Console) AddLine(text string, fg color.NRGBA)

AddLine appends a complete line with the given text and color.

func (*Console) Draw

func (c *Console) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Fills the console background and draws each consoleLine child at the correct Y position. The most recent content lines are shown (auto-scroll to bottom).

func (*Console) HandleByte

func (c *Console) HandleByte(b byte, fd byte)

HandleByte processes a single byte of terminal input, handling newlines, ANSI escape filtering, fd-change line breaks, and line length clamping.

func (*Console) StderrColor

func (c *Console) StderrColor() color.NRGBA

StderrColor returns the ANSI red color from the palette for stderr text.

type ConsoleLabel

ConsoleLabel is a left-aligned monospaced text label with a per-instance background color and dynamic text color. Designed for console output lines where stdout and stderr need different colors.

ConsoleLabel embeds [impl.ThemedInteractor] for font resolution but does NOT use the theme’s background color — BgColor is set per-instance. Draw does not call [impl.ThemedInteractor.Draw] (no super call) because the background fill uses BgColor, not the palette.

ConsoleLabel includes hash-based caching: if the text and BoundsHash are unchanged from the previous frame, the draw is skipped entirely.

Compare with Label for a centered, themed text display.

type ConsoleLabel struct {
    impl.ThemedInteractor

    // FontSize is the monospaced font size in pixels.
    FontSize  int64
    BgColor   color.NRGBA        // per-instance background
    TextFunc  func() string      // dynamic text source
    ColorFunc func() color.NRGBA // dynamic text color (stdout vs stderr)
    MaxCols   int                // max characters per line
    // contains filtered or unexported fields
}

func NewConsoleLabel

func NewConsoleLabel(myName, parent string, theme mancini.Theme, fontSize int64, bgColor color.NRGBA, maxCols int) *ConsoleLabel

NewConsoleLabel creates a ConsoleLabel wired to the constraint system. Width is probed from the theme’s monospaced font: charW * maxCols + 8. Height is fontSize (1px inter-line spacing is in the parent column).

func (*ConsoleLabel) Draw

func (l *ConsoleLabel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Fills BgColor background, then renders left-aligned text via LatinTextFace using ColorFunc for the text color.

type CornerRadialChooser

CornerRadialChooser is a pulsing circle that opens a radial overlay menu on click. It packages the throbber animation, overlay lifecycle, and radial menu into a single self-contained interactor.

The chooser publishes a ValueAttr — an int64 attribute whose value corresponds to the selected segment. Applications provide both labels and values at construction time. When the user selects segment i, ValueAttr is set to values[i]. Other interactors can bind to ValueURI() to react to changes via the constraint network.

type CornerRadialChooser struct {
    impl.Interactor

    // OnSelect is called when the user selects a segment.
    // The argument is the segment index.
    OnSelect func(int)

    // ValueAttr is the published attribute holding the currently
    // selected value. Other interactors can bind to ValueURI().
    ValueAttr *attr.Attribute[int64]

    // FocusParent is the interactor that owns this chooser. When
    // clicked, it calls FocusParent.SetFocusToSelf() to claim focus.
    FocusParent mancini.FocusClaimer
    // contains filtered or unexported fields
}

func NewCornerRadialChooser

func NewCornerRadialChooser(myName, parent string, theme mancini.Theme, pal mancini.Palette, rachelSID int, labels []string, values []int64, initialSel int) *CornerRadialChooser

NewCornerRadialChooser creates a CornerRadialChooser. labels are the segment texts and values are the corresponding int64 values published to ValueAttr when a segment is selected. initialSel is the initially selected segment index. rachelSID is rachel’s shepherd ID for overlay IPC.

func (*CornerRadialChooser) ClickDragEnd

func (crc *CornerRadialChooser) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool

ClickDragEnd implements mancini.ClickDraggable. Selects the segment under the cursor (if any) and dismisses the overlay.

func (*CornerRadialChooser) ClickDragMove

func (crc *CornerRadialChooser) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool) bool

ClickDragMove implements mancini.ClickDraggable. Highlights the segment under the cursor as the user drags over the overlay.

func (*CornerRadialChooser) ClickDragStart

func (crc *CornerRadialChooser) ClickDragStart(ev *mancini.InputEvent) bool

ClickDragStart implements mancini.ClickDraggable. Opens the overlay immediately on press so the user can drag to a segment.

func (*CornerRadialChooser) Draw

func (crc *CornerRadialChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw renders the throbber as a pulsing filled circle. It also captures the drawn position and DC for overlay use.

func (*CornerRadialChooser) HandleOverlayReady

func (crc *CornerRadialChooser) HandleOverlayReady(m wm.OverlayReady)

HandleOverlayReady processes the OverlayReady message from rachel.

func (*CornerRadialChooser) HandleOverlayReleased

func (crc *CornerRadialChooser) HandleOverlayReleased(m wm.OverlayReleased)

HandleOverlayReleased cleans up overlay state.

func (*CornerRadialChooser) HitTest

func (crc *CornerRadialChooser) HitTest(lx, ly int) bool

HitTest returns true if (lx, ly) in app-local coordinates is within the chooser’s bounds (with 10px padding for easy clicking).

func (*CornerRadialChooser) OverlayActive

func (crc *CornerRadialChooser) OverlayActive() bool

OverlayActive returns true if an overlay is currently allocated.

func (*CornerRadialChooser) RequestOverlay

func (crc *CornerRadialChooser) RequestOverlay()

RequestOverlay sends an OverlayAllocate to rachel. If an overlay is already active, dismisses it instead.

func (*CornerRadialChooser) Selected

func (crc *CornerRadialChooser) Selected() int

Selected returns the currently selected segment index, or -1.

func (*CornerRadialChooser) SetAppScreenPos

func (crc *CornerRadialChooser) SetAppScreenPos(x, y int32)

SetAppScreenPos updates the app’s screen origin. Call this after BackingStoreReady and on WindowMoved events.

func (*CornerRadialChooser) SetScreenSize

func (crc *CornerRadialChooser) SetScreenSize(w, h int32)

SetScreenSize sets the screen dimensions so the chooser can detect edge proximity and fan in the appropriate direction.

func (*CornerRadialChooser) Tick

func (crc *CornerRadialChooser) Tick() bool

Tick advances the throbber by one 10Hz step.

func (*CornerRadialChooser) ValueURI

func (crc *CornerRadialChooser) ValueURI() string

ValueURI returns the URI of the published value attribute, for use in constraint bindings.

type Divider

Divider is a column-boundary resize handle drawn in the bezel strips above and below a GridFrame. Each bezel shows a thin vertical track line at the column boundary and a small rounded-rectangle pill (capsule) centred in the bezel. Three horizontal grip lines inside the pill hint at draggability.

The pill colour is Pal.Mid() at rest and Pal.Accent() while dragging.

Dividers implement [mancini.DetailedHit] for pill-shaped pick regions and [mancini.ClickDraggable] for drag-to-resize behaviour. Both top and bottom markers move together since they share the same split position.

type Divider struct {
    impl.Interactor

    // Pal is the palette used to colour the track, pill, and grip lines.
    Pal      mancini.Palette
    ColIndex int // which column boundary (0 = after col 0, etc.)

    // Overhang is the height of the bezel area above and below the
    // parent grid where the marker is drawn.
    Overhang int64
    // TriHeight is the height in pixels of each pill capsule.
    TriHeight int64
    // TriHalfW is half the hit-test width in pixels for grabbing the pill.
    TriHalfW int64
    // Dangle is reserved geometry padding currently unused by Draw.
    Dangle int64

    // MinPct is the minimum percentage this divider's column may take.
    // MaxPct is a static upper bound; OtherSplitAttr provides a dynamic
    // upper bound that prevents the two dividers from crossing.
    MinPct, MaxPct int64

    // DragInverted reverses the drag direction. Use true for a divider
    // that controls the column to its RIGHT (e.g. the Date column): when
    // the user drags right the right column narrows, so its percentage
    // must decrease rather than increase.
    DragInverted bool

    // SplitAttr is the writable column-percentage attribute this divider
    // controls. Exported so GridFrame can cross-link paired dividers.
    SplitAttr *attr.Attribute[int64]

    // OtherSplitAttr, when set, is the paired divider's SplitAttr. Used
    // during drag to compute a dynamic upper bound that keeps the flex
    // column at least MinFlexPct wide and prevents the dividers from
    // crossing visually.
    OtherSplitAttr *attr.Attribute[int64]

    // MinFlexPct is the minimum percentage left for the flex column when
    // both dividers are constrained against each other. Defaults to 5.
    MinFlexPct int64

    // RawXAttr is a value attribute set by the parent GridFrame each draw
    // cycle with the unclamped pixel X of this divider's left edge (splitX - hw).
    // Used as the source for the X constraint program so other attrs can
    // subscribe without creating a cycle through the constrained lh.X.
    RawXAttr *attr.Attribute[int64]

    // RightXAttr is a value attribute updated by the parent GridFrame every
    // draw cycle with the raw pixel X of this divider's right marker edge
    // (splitX + hw). Set from the unclamped position so the paired divider's
    // floor constraint reads a stable value independent of clamping.
    RightXAttr *attr.Attribute[int64]

    // OnDamage is called after every drag event. GridFrame sets this to
    // damage all DynamicLabel leaf cells, expanding the blit region to
    // the full grid width so the revealed column area is sent to the display.
    OnDamage func()

    // ParentXAttr and ParentWidthAttr are value attributes set by GridFrame
    // each draw cycle. Exposed as attrs so ScaleI64-based constraints can
    // read them reactively (e.g. RawXAttr = pct * parentWidth / 100 + parentX - hw).
    ParentXAttr     *attr.Attribute[int64]
    ParentWidthAttr *attr.Attribute[int64]
    // contains filtered or unexported fields
}

func NewDivider

func NewDivider(myName, parent string, pal mancini.Palette, colIndex int, splitAttr *attr.Attribute[int64]) *Divider

NewDivider creates a Divider for the column boundary at colIndex. splitAttr is the attribute holding the column’s percentage — the divider reads and writes this attribute during drag operations.

func (*Divider) ClickDragEnd

func (d *Divider) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool

ClickDragEnd implements mancini.ClickDraggable.

func (*Divider) ClickDragMove

func (d *Divider) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool) bool

ClickDragMove implements mancini.ClickDraggable.

The handle’s absolute pixel position (dragStartSplitX + mouse delta) is the input; the column percentage is derived from that position and parentWidth. This avoids accumulated integer-rounding drift from the delta-percentage approach.

func (*Divider) ClickDragStart

func (d *Divider) ClickDragStart(ev *mancini.InputEvent) bool

ClickDragStart implements mancini.ClickDraggable.

func (*Divider) DetailedHit

func (d *Divider) DetailedHit(localX, localY int64) bool

DetailedHit implements mancini.DetailedHit. Returns true if the point falls inside either capsule pill. The hit area uses TriHalfW (wider than the 5px visual half-width) for easy grabbing.

func (*Divider) Draw

func (d *Divider) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw renders the two bezel markers. Each marker is a thin vertical track line spanning the full bezel height, with a small rounded-rectangle pill centred in the bezel. Three horizontal grip lines inside the pill hint at draggability. Pill colour is Pal.Mid() at rest and Pal.Accent() when dragging.

func (*Divider) SetupPositionConstraints

func (d *Divider) SetupPositionConstraints()

SetupPositionConstraints wires RawXAttr and RightXAttr as ScaleI64-based constraints so the divider’s pixel position reacts to both SplitAttr (percentage) and ParentXAttr / ParentWidthAttr (grid geometry) without any imperative position computation in GridFrame.Draw.

Non-inverted (left): rawX = pct * parentW / 100 + parentX - hw

Inverted (right): rawX = parentX + parentW - pct * parentW / 100 - hw

Call this once from NewGridFrame after all dividers are created, before SetupXConstraint (which references RawXAttr.URI()).

func (*Divider) SetupXConstraint

func (d *Divider) SetupXConstraint(other *Divider)

SetupXConstraint replaces the divider’s layout X value attribute with a constraint that prevents this divider from visually overlapping other.

For a non-inverted (left) divider: X = min(rawX, other.RawX − (2*hw+1)). This ensures this divider’s right edge stays strictly left of other’s left edge.

For an inverted (right) divider: X = max(rawX, other.RightX). This ensures this divider never moves left of other’s right edge.

Both constraints read only VALUE attributes from other (RawXAttr / RightXAttr), so there is no circular dependency between the two constraints. Call this once from the parent after both dividers exist.

type DrawPerfStats

DrawPerfStats accumulates timing data during a draw pass. All times in nanoseconds. Call ResetDrawPerf before a draw, then PrintDrawPerf after.

type DrawPerfStats struct {
    AllocNs atomic.Int64 // image.NewRGBA / NewNRGBA / NewAlpha
    // AllocCount counts how many image buffers were allocated.
    AllocCount atomic.Int64
    // AllocBytes is the total bytes of image buffers allocated.
    AllocBytes atomic.Int64
    GGDrawNs   atomic.Int64 // gg context create + rasterize + fill
    // GGCount counts how many gg context draw calls were made.
    GGCount   atomic.Int64
    ConvertNs atomic.Int64 // rgbaToNRGBA
    BlurNs    atomic.Int64 // gaussianBlurNRGBA
    // BlurCount counts the number of Gaussian-blur invocations.
    BlurCount atomic.Int64
    ComposeNs atomic.Int64 // draw.Draw compositing
    FaceNs    atomic.Int64 // dc.DrawRoundedRect/Circle + Fill (face)

    // Tree-level timing
    AppDecorateNs atomic.Int64    // AppWindow.DecorateIfNeeded
    AppClipNs     atomic.Int64    // WithClip + Flush
    AppChildNs    atomic.Int64    // child.Draw inside AppWindow
    RowChildNs    [8]atomic.Int64 // per-child draw time in Row (up to 8)
    // RowChildCount is the number of children seen by Row this pass.
    RowChildCount atomic.Int64
    ColChildNs    atomic.Int64 // total Column child draw time
    NeuDecorNs    atomic.Int64 // NeuCircle.DecorateIfNeeded
    NeuChildNs    atomic.Int64 // NeuCircle child draw (Clock)
    ClockFaceNs   atomic.Int64 // Clock.DrawFace
    LabelNs       atomic.Int64 // Label.Draw total
    // LabelCount counts how many Label draws occurred this pass.
    LabelCount atomic.Int64
}

func GetDrawPerf

func GetDrawPerf() *DrawPerfStats

GetDrawPerf returns a pointer to the package-level DrawPerfStats accumulator for inspection.

type DynamicLabel

DynamicLabel is a label whose font size is driven by an attribute. When the font size attribute changes (e.g., from a CornerRadialChooser’s ValueAttr), the label rebuilds its text face and updates its height automatically.

Create a DynamicLabel with NewDynamicLabel or NewDynamicLabelBold, passing the URI of the font size source. The label creates an identity constraint binding to that URI so it reacts to changes through the constraint network.

type DynamicLabel struct {
    impl.ThemedInteractor

    // Text is the displayed text content.
    Text string
    // Color is the foreground colour used to render the text.
    Color color.NRGBA
    // Bold selects the bold font variant when true.
    Bold bool
    // Transparent disables the themed background fill so the parent shows through.
    Transparent bool
    // contains filtered or unexported fields
}

func NewDynamicLabel

func NewDynamicLabel(myName, parent string, theme mancini.Theme, text string, fontSizeURI string) *DynamicLabel

NewDynamicLabel creates a DynamicLabel whose font size is bound to fontSizeURI via an identity constraint. The label is left-aligned and transparent (parent paints background).

func NewDynamicLabelBold

func NewDynamicLabelBold(myName, parent string, theme mancini.Theme, text string, fontSizeURI string) *DynamicLabel

NewDynamicLabelBold creates a bold DynamicLabel.

func (*DynamicLabel) Draw

func (dl *DynamicLabel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Checks for font size changes, then renders text.

func (*DynamicLabel) SetAlign

func (dl *DynamicLabel) SetAlign(align mancini.TextAlignmentParams)

SetAlign replaces the label’s text alignment.

func (*DynamicLabel) SetPaddingAttrs

func (dl *DynamicLabel) SetPaddingAttrs(padXURI, padYURI string)

SetPaddingAttrs binds the label’s X and Y interior padding to the given attribute URIs via identity constraints, making padding constrainable from any source in the constraint network. Empty URI leaves that axis unchanged.

type FlatStyle

FlatStyle implements [mancini.SurfaceStyle] with no directional lighting at all. All borders are uniform weight on all four sides.

Raised: face brightened by delta, thin uniform border. Flush: fill Surface, thin uniform border. Inset: face darkened by delta, thin uniform border.

type FlatStyle struct {
    // contains filtered or unexported fields
}

func NewFlatStyle

func NewFlatStyle(delta int, borderWidth float64) *FlatStyle

NewFlatStyle creates a FlatStyle. delta controls brightness shift for Raised/Inset. borderWidth sets the uniform border stroke width.

func (*FlatStyle) DrawBox

func (s *FlatStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)

func (*FlatStyle) DrawCircle

func (s *FlatStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)

func (*FlatStyle) Groove

func (s *FlatStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)

func (*FlatStyle) Pad

func (s *FlatStyle) Pad(weight mancini.Weight) float64

func (*FlatStyle) TintOverlay

func (s *FlatStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)

type FourteenSeg

FourteenSeg is a 14-segment LED display interactor. It renders a string of characters using the classic 14-segment geometry (like vintage LED calculator/scoreboard displays). Each character uses a 14-bit mask to select which segments are lit.

Width and Height are computed from the character count and segment cell size. FourteenSeg does not paint a background — the parent is expected to handle that.

type FourteenSeg struct {
    impl.Interactor
    // contains filtered or unexported fields
}

func NewFourteenSeg

func NewFourteenSeg(myName, parent string, text string, cellW, cellH float64, onColor color.NRGBA) *FourteenSeg

NewFourteenSeg creates a 14-segment display showing the given text. cellW and cellH control the size of each character cell.

func NewFourteenSegValue

func NewFourteenSegValue(myName, parent string, text string, cellW, cellH float64, onColor color.NRGBA) (*FourteenSeg, *attr.Attribute[string])

NewFourteenSegValue creates a 14-segment display with its text backed by a string constraint attribute. The display updates when the attribute changes.

func (*FourteenSeg) Draw

func (s *FourteenSeg) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw renders the 14-segment display. No background is painted.

func (*FourteenSeg) SetOnColor

func (s *FourteenSeg) SetOnColor(c color.NRGBA)

SetOnColor changes the lit segment color.

func (*FourteenSeg) SetText

func (s *FourteenSeg) SetText(text string)

SetText updates the displayed text.

type FreeFloatingWindow

FreeFloatingWindow is a neumorphic floating panel drawn as a sibling of AppWindow (not a child). It is always [mancini.Flush] depth when visible. Structurally it is an [impl.Decorator]: NeuBoxWith shadow → title + NeuGroove separator → content.

Visibility is toggled externally (e.g., by the focus state of an associated AppWindow or by constraint programs).

See also AppWindow for the root application window.

type FreeFloatingWindow struct {
    impl.Decorator

    // Pal is the palette used for the panel surface, title, and groove.
    Pal mancini.Palette
    // NeuPrms holds neumorphic shading parameters for the panel.
    NeuPrms mancini.NeuParams
    // Style is the surface style used to render the panel and groove.
    Style mancini.SurfaceStyle
    // Title is the text rendered in the title bar at the top of the panel.
    Title string
    // Radius is the corner radius of the panel rectangle in pixels.
    Radius float64
    // Visible controls whether Draw renders the window contents.
    Visible bool
    // contains filtered or unexported fields
}

func NewFreeFloatingWindow

func NewFreeFloatingWindow(name string, parent mancini.Interactor, pal mancini.Palette, neuParams mancini.NeuParams, fonts *mancini.FontConfig, title string, radius float64) *FreeFloatingWindow

NewFreeFloatingWindow creates a FreeFloatingWindow with inside-out sizing. parent is nil for top-level floaters. The window is initially not visible.

func (*FreeFloatingWindow) Decorate

func (w *FreeFloatingWindow) Decorate(self mancini.Interactor, x, y, ww, hh int64)

Decorate implements mancini.Decoratable — draws the NeuBox shadow, title text, and groove separator.

func (*FreeFloatingWindow) Draw

func (w *FreeFloatingWindow) Draw(self mancini.Interactor, x, y, ww, hh int64, damage image.Rectangle)

Draw implements mancini.NewDrawer.

type GradientTitleBar

GradientTitleBar renders an animated horizontal gradient title bar into an off-screen buffer. A background goroutine recomputes the buffer at ~15 fps and notifies the attribute system so the event loop redraws.

The gradient has a symmetric peak ([mancini.Palette.SurfaceTint]) that oscillates horizontally at 0.05 Hz — one full left→right→left sweep in 20 seconds. On each side of the peak the color fades linearly to [mancini.Palette.Surface] at the edge.

When inactive, plain centered text is drawn (no gradient animation).

See also StripedTitleBar for a static Mac OS-style pinstripe title bar.

type GradientTitleBar struct {
    // contains filtered or unexported fields
}

func NewGradientTitleBar

func NewGradientTitleBar(pal mancini.Palette, fonts *mancini.FontConfig, title string, fontSize int64, radius float64) *GradientTitleBar

NewGradientTitleBar creates a GradientTitleBar. The font face is resolved once at creation time. The animation goroutine launches on the first active Draw when the title bar dimensions are known.

func (*GradientTitleBar) DrawTitleBar

func (g *GradientTitleBar) DrawTitleBar(dc mancini.DrawContext, title string, state mancini.WindowState, _ mancini.WindowType, x, y, w, h float64)

DrawTitleBar implements mancini.TitleBar.

func (*GradientTitleBar) Start

func (g *GradientTitleBar) Start(w, h int)

Start launches the animation goroutine for a title bar of size w×h. Safe to call multiple times — only the first call starts the goroutine.

type GridFrame

GridFrame is a simple parent interactor that wraps a GridTable together with its visual chrome: side-padded margin, raised NeuBox, and column- boundary Divider markers. The frame’s height spans the full area including the Divider overhang strips above and below the content, so Dividers live within normal child bounds — no clip escaping needed.

Draw order is strictly: grid subtree first (content area only), then Dividers last so they always appear on top of the grid content.

Column widths are controlled by the same split-attribute mechanism as GridTable. Drag a Divider marker to resize columns.

type GridFrame struct {
    impl.Interactor
    impl.Parent

    // Pal is the palette used for chrome, bezel strips, and dividers.
    Pal mancini.Palette
    // Overhang is the height in pixels of the bezel strips above and below the grid content.
    Overhang int64
    // contains filtered or unexported fields
}

func NewGridFrame

func NewGridFrame(myName, parent string, pal mancini.Palette, theme mancini.Theme, overhang int64, fontSizeURI string, headers []string, percents []float64, splitURIs []string, splitSrcAttrs []*attr.Attribute[int64]) *GridFrame

NewGridFrame creates a fully-wired grid frame. myName is the GridFrame itself; internal names are myName+“_margin”, myName+“_box”, myName+“_tbl”, and myName+“_divN”.

overhang is the height in pixels of the bezel area above and below the grid content where Divider triangle markers are drawn.

splitSrcAttrs are the writable value attributes the Dividers write during drag operations. They must correspond 1-to-1 with the non-flex entries in splitURIs (same order, skipping any -1 flex columns).

func (*GridFrame) AddRow

func (gf *GridFrame) AddRow(row GridRow) func()

AddRow appends a data row to the embedded GridTable. Returns a func() that damages this row’s leaf labels — use it as the row’s OnLoaded callback to trigger a redraw when async data arrives.

func (*GridFrame) DamageAll

func (gf *GridFrame) DamageAll()

DamageAll marks every label in the grid as needing repaint. Call this after batch-adding rows to force the first full draw.

func (*GridFrame) Draw

func (gf *GridFrame) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw renders the frame. Grid subtree is drawn first in the content area (y+Overhang to y+h-Overhang). Bezel strips are cleared to Surface color. Dividers are drawn last so they appear on top of everything.

func (*GridFrame) FirstVisibleMsgNumAttr

func (gf *GridFrame) FirstVisibleMsgNumAttr() *attr.Attribute[int64]

FirstVisibleMsgNumAttr returns the attribute holding the first visible msgNum.

func (*GridFrame) LastVisibleMsgNumAttr

func (gf *GridFrame) LastVisibleMsgNumAttr() *attr.Attribute[int64]

LastVisibleMsgNumAttr returns the attribute holding the last visible msgNum.

func (*GridFrame) MoveSelection

func (gf *GridFrame) MoveSelection(delta int64)

MoveSelection moves the primary selection by delta rows, scrolling to keep it visible.

func (*GridFrame) RefreshSelected

func (gf *GridFrame) RefreshSelected()

RefreshSelected re-publishes the selected row’s current MsgNum and the full selected set. Call this after ShiftMsgNum is applied to any selected row.

func (*GridFrame) ScrollBy

func (gf *GridFrame) ScrollBy(delta int64)

ScrollBy moves the virtual scroll offset by delta rows.

func (*GridFrame) SelectedAttr

func (gf *GridFrame) SelectedAttr() *attr.Attribute[int64]

SelectedAttr returns the attribute that holds the msgNum of the primary selected row (-1 = none). Constrain any viewer component to this URI.

func (*GridFrame) SelectedSetAttr

func (gf *GridFrame) SelectedSetAttr() *attr.Attribute[[]int64]

SelectedSetAttr returns the attribute holding the full multi-selection set as []int64 msgNums. Sentinel: math.MaxInt64 when count > 256.

func (*GridFrame) SelectedSetCountAttr

func (gf *GridFrame) SelectedSetCountAttr() *attr.Attribute[int64]

SelectedSetCountAttr returns the attribute holding the true count of selected rows (regardless of whether the sentinel is active).

func (*GridFrame) SelectedSetPagesAttr

func (gf *GridFrame) SelectedSetPagesAttr() *attr.Attribute[int64]

SelectedSetPagesAttr returns the attribute holding ceil(count/512): the number of 4096-byte pages needed to transfer the full selection via IPC.

func (*GridFrame) SetRowFactory

func (gf *GridFrame) SetRowFactory(f func() GridRow)

SetRowFactory enables virtual scroll mode with the given row factory.

func (*GridFrame) SetTotalRows

func (gf *GridFrame) SetTotalRows(n int64)

SetTotalRows sets the total collection size for scroll clamping.

func (*GridFrame) VisibleRowCountAttr

func (gf *GridFrame) VisibleRowCountAttr() *attr.Attribute[int64]

VisibleRowCountAttr returns the attribute holding the visible row count.

type GridRow

GridRow is the interface that each row’s data must satisfy. The grid table calls these methods to populate column labels.

type GridRow interface {
    // Sender returns the text for the sender column.
    Sender() string
    // Subject returns the text for the subject column.
    Subject() string
    // Date returns the text for the date column.
    Date() string
    // MsgNum returns the row's stable identifier used for selection tracking.
    MsgNum() uint32
}

type GridTable

GridTable is a multi-column table built on ColumnPercentage. It stacks a header RowPercentage and data RowPercentage children vertically, each distributing width according to constraint-driven column percentages.

Column widths are specified by split URIs — each URI points to an int64 attribute holding a column’s percentage of the total width. Exactly one column may be designated as “flex” (absorbs the remainder). The grid reads split values every frame, so column proportions update automatically when the underlying attributes change.

Font size is driven by an attribute URI (typically from a CornerRadialChooser). All labels are DynamicLabel instances that react to font size changes via the constraint network.

Use NewGridFrame for a complete grid with Divider markers and a NeuBox wrapper. Use NewGridTable directly only when embedding the table without the frame chrome.

type GridTable struct {
    ColumnPercentage // structural embedding for Interactor + Parent

    // Theme is the theme used to style header and data labels.
    Theme mancini.Theme

    SelectedAttr         *attr.Attribute[int64]   // msgNum of primary selected row (-1 = none)
    SelectedSetAttr      *attr.Attribute[[]int64] // collection of all selected msgNums (sentinel: [MaxInt64] if >256)
    SelectedSetCountAttr *attr.Attribute[int64]   // true count of selected rows (regardless of sentinel)
    SelectedSetPagesAttr *attr.Attribute[int64]   // ceil(count/512): pages needed for full IPC transfer

    // Published attrs — exposed to the constraint network. Scroll
    // containers (GridFrame's scrollbar) and viewers can bind to these.
    // Total/Visible/RowHeight together let consumers compute their own
    // derivatives (e.g. scrollNeeded = TotalRows > VisibleRowCount).
    TotalRowsAttr          *attr.Attribute[int64] // collection size; written by SetTotalRows
    ScrollOffsetAttr       *attr.Attribute[int64] // current scroll position in rows; read on draw, mutated by scrollbar
    RowHeightAttr          *attr.Attribute[int64] // current row height in pixels; refreshed each Draw
    FirstVisibleMsgNumAttr *attr.Attribute[int64]
    LastVisibleMsgNumAttr  *attr.Attribute[int64]
    VisibleRowCountAttr    *attr.Attribute[int64]

    // PadXAttr and PadYAttr drive the interior padding (in pixels) of every
    // label cell. Other parts of the constraint network may swap these to
    // constraint outputs to animate or theme label padding.
    PadXAttr *attr.Attribute[int64]
    PadYAttr *attr.Attribute[int64]
    // contains filtered or unexported fields
}

func NewGridTable

func NewGridTable(myName, parent string, pal mancini.Palette, theme mancini.Theme, fontSizeURI string, headers []string, percents []float64, splitURIs []string) *GridTable

NewGridTable creates a grid table with the given column headers and constraint-driven column percentages. Each entry in percents is either a positive float64 (fixed percentage) paired with a URI in splitURIs, or -1 (flex column, absorbs remainder — no URI needed).

splitURIs contains one URI string per non-flex column, in order. Each URI must point to an int64 attribute holding the column’s percentage of the total width.

fontSizeURI should point to an int64 attribute. All labels bind their font size to this URI.

For a grid with Divider column-resize markers and a NeuBox wrapper, use NewGridFrame instead.

func (*GridTable) AddRow

func (gt *GridTable) AddRow(row GridRow) func()

AddRow appends a data row to the grid. Returns a func() that calls FullDamage on this row’s DynamicLabel leaves, propagating through the constraint chain to trigger a redraw. Use it as the row’s OnLoaded callback. (RowPercentage.FullDamage is a no-op — it is a parent with a constraint-based DamageRect, not a settable leaf.)

Labels are pre-positioned at the expected row Y so that FullDamage() immediately produces a damage rect in the correct grid area. Without this, labels sit at Y=0 and PushDamageClip clips draws to the wrong region. RowPercentage.Draw refines the exact column X positions on the next pass.

func (*GridTable) DamageAll

func (gt *GridTable) DamageAll()

DamageAll calls FullDamage on every DynamicLabel leaf in the grid (header and all data rows). Use this after dynamically adding rows to trigger a full grid repaint — parent interactors like RowPercentage have constraint- based DamageRect, so their FullDamage is a no-op; labels are the leaves.

func (*GridTable) Draw

func (gt *GridTable) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw stacks the header row and data rows vertically with fixed row heights, drawing alternating backgrounds and a separator line. Column percentages are read from the split constraint attrs each frame.

func (*GridTable) MoveSelection

func (gt *GridTable) MoveSelection(delta int64)

MoveSelection moves the primary selection by delta rows (clamped to [0, TotalRows-1]). If nothing is currently selected, the first visible row is used as the starting point. Scrolls to keep the new selection within the visible window.

func (*GridTable) RefreshSelected

func (gt *GridTable) RefreshSelected()

RefreshSelected re-publishes the selected msgNum to SelectedAttr.

func (*GridTable) ScrollBy

func (gt *GridTable) ScrollBy(delta int64)

ScrollBy moves the scroll offset by delta rows (clamped). Updates all slot msgNums and publishes the visibility attrs.

func (*GridTable) SetRowFactory

func (gt *GridTable) SetRowFactory(f func() GridRow)

SetRowFactory sets the factory used to create virtual slot data objects and switches the grid into virtual scroll mode. A pool rebuild is deferred to the next Draw call when visibleCount is known.

func (*GridTable) SetTotalRows

func (gt *GridTable) SetTotalRows(n int64)

SetTotalRows sets the total collection size used for scroll clamping. Updates both the cached field (for hot-path reads in Draw) and the published TotalRowsAttr that scroll containers bind to via the constraint network.

type HexDisplay

HexDisplay is a parent interactor that arranges a row of FourteenSeg children, one per character. It fills the available width from its parent, dynamically adjusting the number of digit positions when the width changes (e.g. on window resize).

HexDisplay embeds [impl.Interactor] + [impl.Parent] so it participates in the interactor tree and the constraint network discovers its FourteenSeg children automatically.

type HexDisplay struct {
    impl.Interactor
    impl.Parent

    Format   OutputFormat // controls Display() number formatting
    HPadding float64      // horizontal padding inset for background fill
    // contains filtered or unexported fields
}

func NewHexDisplay

func NewHexDisplay(myName, parent, widthSource string, cellW, cellH float64, onColor, bgColor color.NRGBA) *HexDisplay

NewHexDisplay creates a hex display whose width is constrained to equal widthSource’s width. The number of FourteenSeg digit children is computed dynamically from the resolved width so they fill the display without clipping the last character. widthSource is the constraint-system name of a sibling whose width this display should match (e.g. “btn_row”). cellW and cellH control each character cell size. bgColor is painted as the background behind all digits.

func (*HexDisplay) Display

func (hd *HexDisplay) Display(x int)

Display shows the value x on the 14-segment display using the current OutputFormat. Characters are loaded right-to-left; if the formatted string is longer than the available digit positions, leading characters are discarded. Unused leading positions show dim segments.

func (*HexDisplay) Draw

func (hd *HexDisplay) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw paints the background and arranges FourteenSeg children left-to-right. If the width has changed since the last draw, the digit children are rebuilt to match the new available space.

func (*HexDisplay) NumDigits

func (hd *HexDisplay) NumDigits() int

NumDigits returns the number of digit positions in this display.

func (*HexDisplay) SetText

func (hd *HexDisplay) SetText(text string)

SetText updates all digit children to show new text (right-aligned). If the new text is shorter than the display, leading positions show space. If longer, leading characters are truncated.

type Label

Label is a single-line text display interactor (not editable — see SingleLineText for an editable text field). It renders centered text using the [mancini.Theme]’s font family.

Label embeds [impl.ThemedInteractor]. Its Draw method calls the super [impl.ThemedInteractor.Draw] to clear the background, then renders the text.

Text can be static (set via Text field) or dynamic (set via TextFunc, which takes precedence). Multiple constructor variants handle bold, custom color, and named-layout creation.

type Label struct {
    impl.ThemedInteractor

    Text     string        // static text (used when TextFunc is nil)
    TextFunc func() string // dynamic text source (takes precedence)
    // FontSize is the text size in pixels.
    FontSize int64
    // Color is the foreground colour used to render the text.
    Color color.NRGBA
    // Bold selects the bold font variant when true.
    Bold        bool
    Transparent bool // skip background fill (parent paints background)
    // contains filtered or unexported fields
}

func NewLabel

func NewLabel(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *Label

NewLabel creates a Label wired to the constraint system and theme.

func NewLabelBold

func NewLabelBold(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *Label

NewLabelBold creates a bold Label.

func NewLabelColor

func NewLabelColor(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64, col color.NRGBA) *Label

NewLabelColor creates a Label with a custom text color.

func NewLabelNamed

func NewLabelNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64) *Label

NewLabelNamed creates a Label with layout built from name + parent strings. Publishes intrinsic dimensions (fontSize+4 height, text-measured width) so constraint programs can bootstrap.

func NewLabelNamedBold

func NewLabelNamedBold(myName, parent string, theme mancini.Theme, text string, fontSize int64) *Label

NewLabelNamedBold creates a bold Label with layout from name + parent.

func NewLabelNamedColor

func NewLabelNamedColor(myName, parent string, theme mancini.Theme, text string, fontSize int64, col color.NRGBA) *Label

NewLabelNamedColor creates a colored Label with layout from name + parent.

func (*Label) Draw

func (l *Label) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Clears background via super, then renders centered text via LatinTextFace.

func (*Label) SetAlign

func (l *Label) SetAlign(align mancini.TextAlignmentParams)

SetAlign replaces the label’s text face with one using the given alignment.

type LabelSide

LabelSide specifies which side of the checkbox the label is drawn on.

type LabelSide int

const (
    LabelTop    LabelSide = iota // label above checkbox
    LabelRight                   // label to the right of checkbox
    LabelBottom                  // label below checkbox
    LabelLeft                    // label to the left of checkbox
)

type LightScrollbar

LightScrollbar is a minimalist scrollbar with a narrow profile. It draws everything itself: a Surface track with a flush groove border, two diagonal X-pattern lines on the face, and a rotating dark-purple thumb line. All rendering uses Fill (no Stroke calls).

The cross-axis dimension is fixed at [lightScrollbarThick] (10 pixels). There are no arrow buttons. Clicking anywhere on the track jumps the thumb to that position; dragging moves it.

type LightScrollbar struct {
    impl.ThemedInteractor

    IsVertical bool    // true = vertical, false = horizontal
    ThumbFrac  float64 // visible fraction 0..1 (kept for Scrollbar API compat)
    ThumbPos   float64 // thumb position 0..1 along available travel
    ThumbAngle float64 // thumb rotation in radians (0 = vertical for horiz sb)

    Disabled bool // when true, renders dimmed and ignores input

    // Value/Max: when set, ThumbPos and ThumbFrac are computed from
    // these in Draw. Value is the current scroll position (pixels),
    // Max is the maximum scroll range. Value is the source of truth —
    // the scroller's VirtualY is constrained to it.
    ValueAttr *attr.Attribute[int64]
    MaxAttr   *attr.Attribute[int64]
    // contains filtered or unexported fields
}

func NewLightScrollbar

func NewLightScrollbar(layout *mancini.LayoutAttributes, theme mancini.Theme, isVertical bool, thumbFrac, thumbPos float64) *LightScrollbar

NewLightScrollbar creates a LightScrollbar wired to the constraint system.

func NewLightScrollbarNamed

func NewLightScrollbarNamed(myName, parent string, theme mancini.Theme, isVertical bool, length, thumbFrac, thumbPos float64) *LightScrollbar

NewLightScrollbarNamed creates a LightScrollbar with layout built from name + parent strings. length is the main-axis dimension.

func (*LightScrollbar) ClickDragEnd

func (s *LightScrollbar) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool

ClickDragEnd implements mancini.ClickDraggable.

func (*LightScrollbar) ClickDragMove

func (s *LightScrollbar) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool

ClickDragMove implements mancini.ClickDraggable.

func (*LightScrollbar) ClickDragStart

func (s *LightScrollbar) ClickDragStart(ev *mancini.InputEvent) bool

ClickDragStart implements mancini.ClickDraggable.

func (*LightScrollbar) Draw

func (s *LightScrollbar) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Renders track, groove border, X-pattern face lines, and rotating thumb — all using Fill.

type MarginParent

MarginParent is a single-child container that enforces independent margins on each side around its child. It can optionally draw a rounded-rectangle border inside the margin area and a centered label in the top margin that interrupts the border.

Width and Height can be value attributes (set by parent) or constrained.

type MarginParent struct {
    impl.Interactor
    impl.Parent

    Top, Right, Bottom, Left int64 // margins in pixels

    // BorderWidth draws a rounded-rectangle border inside the margin.
    // Must be ≤ all four margins. 0 = no border.
    BorderWidth int64

    // Label is drawn centered in the top margin using the theme's
    // default sans font at 75% of Top margin height. Empty = no label.
    Label string
    // contains filtered or unexported fields
}

func NewMarginParent

func NewMarginParent(myName, parent string, top, right, bottom, left int64, borderWidth int64, label string, theme mancini.Theme, pal mancini.Palette) *MarginParent

NewMarginParent creates a MarginParent with independent margins. Width and Height are value attributes (set by parent container). label may be empty for no label text.

func NewMarginParentConstrained

func NewMarginParentConstrained(myName, parent string, top, right, bottom, left int64, borderWidth int64, label string, width, height *attr.Attribute[int64], theme mancini.Theme, pal mancini.Palette) *MarginParent

NewMarginParentConstrained creates a MarginParent where Width and Height are provided by the caller as pre-built constraint attributes. label may be empty for no label text.

func (*MarginParent) ControlsInteractor

func (mp *MarginParent) ControlsInteractor() mancini.Interactor

ControlsInteractor returns the interactor to draw in the top-right margin area. The default implementation returns nil (no controls). Subclasses that embed *MarginParent can override this by defining their own ControlsInteractor method on the concrete type; the Draw method resolves the override through the self parameter.

func (*MarginParent) Draw

func (mp *MarginParent) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Draws the optional border and label, then positions and draws the single child inside the margins. If self implements ControlsInteractor() returning non-nil, the controls interactor is positioned in the top margin and the border draws a hump around it.

type MotifStyle

MotifStyle implements [mancini.SurfaceStyle] with hard-edged square bevels inspired by the Motif/CDE look. No blur, no anti-aliasing on bevel edges. The radius parameter is ignored — all geometry is square.

Raised: LightShadow top+left, DarkShadow bottom+right. Flush: uniform DarkShadow border. Inset: DarkShadow top+left, LightShadow bottom+right. Face shifts to Accent.

type MotifStyle struct {
    // contains filtered or unexported fields
}

func NewMotifStyle

func NewMotifStyle(bevelWidth float64) *MotifStyle

NewMotifStyle creates a MotifStyle. bevelWidth controls the thickness of the hard-edged bevel lines.

func (*MotifStyle) DrawBox

func (s *MotifStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, _ float64, face color.NRGBA)

DrawBox renders a rectangular surface with hard-edged Motif bevels for the given [mancini.NeuDepth]. The radius parameter is ignored.

func (*MotifStyle) DrawCircle

func (s *MotifStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)

DrawCircle renders a filled circle with a uniform Motif-style border. Motif doesn’t have a natural circular bevel; the depth only affects the fill color.

func (*MotifStyle) Groove

func (s *MotifStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)

Groove draws a horizontal Motif-style groove (dark line above light line) from x1 to x2 at height y.

func (*MotifStyle) Pad

func (s *MotifStyle) Pad(weight mancini.Weight) float64

Pad returns the recommended interior padding in pixels for surfaces of the given weight.

func (*MotifStyle) TintOverlay

func (s *MotifStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, _ float64, face color.NRGBA)

TintOverlay draws a translucent face-colored rectangle on top of an existing surface to apply a hover/focus tint.

type MultiLineText

MultiLineText is a multi-line text editor interactor. It uses a gap buffer internally for fast cursor-local edits. Text is accessed directly via MultiLineText.Text rather than through the constraint system.

The interactor publishes several attributes for scrollbar integration:

It implements [mancini.KeyPressable], [mancini.Clickable], [mancini.DoubleClickable], [mancini.TripleClickable], and [mancini.ClickDraggable].

type MultiLineText struct {
    impl.ThemedInteractor

    // FontSize is the rendered font size in pixels.
    FontSize int64
    // Radius is the corner radius for the editor's background rectangle.
    Radius float64
    // Padding is the interior pixel padding between border and text.
    Padding float64
    // BorderWidth is the pixel width of the editor border.
    BorderWidth float64
    // Focused controls cursor rendering: only a focused editor draws a caret.
    Focused bool
    // TextColor overrides the palette's BaseText() when non-zero.
    TextColor color.NRGBA
    BgColor   *color.NRGBA // if non-nil, overrides pal.Base() for background
    // Disabled disables keyboard and mouse input handling.
    Disabled bool
    // AppWindow is required for animation-driven alerts.
    AppWindow *AppWindow
    AfterEdit func() // optional; called after each text modification

    // Mu guards the gap buffer for concurrent access. The main goroutine
    // (keyboard handler, draw) and any background reader (e.g., markdown
    // render goroutine) must hold Mu while accessing the gap buffer.
    Mu  sync.Mutex
    // contains filtered or unexported fields
}

func NewMultiLineText

func NewMultiLineText(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *MultiLineText

NewMultiLineText creates a MultiLineText wired to the constraint system.

func NewMultiLineTextNamed

func NewMultiLineTextNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64, width, height int64) *MultiLineText

NewMultiLineTextNamed creates a MultiLineText with layout built from name + parent.

func (*MultiLineText) Alert

func (m *MultiLineText) Alert()

Alert flashes a highlight border.

func (*MultiLineText) AnimationFinish

func (m *MultiLineText) AnimationFinish(localID uint64, endNanos int64)

AnimationFinish implements [mancini.Animatable]; clears the alert state.

func (*MultiLineText) AnimationStart

func (m *MultiLineText) AnimationStart(localID uint64, startNanos int64)

AnimationStart implements [mancini.Animatable]; no-op for the alert fade.

func (*MultiLineText) AnimationUpdate

func (m *MultiLineText) AnimationUpdate(localID uint64, startNanos, endNanos int64, coveredStart, coveredEnd float64, nanosSinceStart int64)

AnimationUpdate implements [mancini.Animatable]; fades the alert border alpha.

func (*MultiLineText) ClearAlert

func (m *MultiLineText) ClearAlert()

ClearAlert removes the alert border.

func (*MultiLineText) ClearSelection

func (m *MultiLineText) ClearSelection()

ClearSelection removes the selection without moving the cursor.

func (*MultiLineText) Click

func (m *MultiLineText) Click(ev *mancini.InputEvent) bool

Click implements mancini.Clickable — positions cursor at click location.

func (*MultiLineText) ClickDragEnd

func (m *MultiLineText) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool)

ClickDragEnd implements mancini.ClickDraggable — finalizes drag selection.

func (*MultiLineText) ClickDragMove

func (m *MultiLineText) ClickDragMove(ev *mancini.InputEvent, startEv *mancini.InputEvent, outsideBounds bool)

ClickDragMove implements mancini.ClickDraggable — extends drag selection.

func (*MultiLineText) ClickDragStart

func (m *MultiLineText) ClickDragStart(ev *mancini.InputEvent) bool

ClickDragStart implements mancini.ClickDraggable — begins drag selection.

func (*MultiLineText) CursorDocEnd

func (m *MultiLineText) CursorDocEnd(extend bool)

CursorDocEnd moves cursor to end of document.

func (*MultiLineText) CursorDocStart

func (m *MultiLineText) CursorDocStart(extend bool)

CursorDocStart moves cursor to beginning of document.

func (*MultiLineText) CursorDown

func (m *MultiLineText) CursorDown(extend bool)

CursorDown moves cursor one display line down, preserving sticky column.

func (*MultiLineText) CursorEnd

func (m *MultiLineText) CursorEnd(extend bool)

CursorEnd moves cursor to end of current display line.

func (*MultiLineText) CursorHome

func (m *MultiLineText) CursorHome(extend bool)

CursorHome moves cursor to beginning of current display line.

func (*MultiLineText) CursorLeft

func (m *MultiLineText) CursorLeft(extend bool)

CursorLeft moves cursor one rune left.

func (*MultiLineText) CursorRight

func (m *MultiLineText) CursorRight(extend bool)

CursorRight moves cursor one rune right.

func (*MultiLineText) CursorUp

func (m *MultiLineText) CursorUp(extend bool)

CursorUp moves cursor one display line up, preserving sticky column.

func (*MultiLineText) CursorWordLeft

func (m *MultiLineText) CursorWordLeft(extend bool)

CursorWordLeft moves cursor to previous word boundary.

func (*MultiLineText) CursorWordRight

func (m *MultiLineText) CursorWordRight(extend bool)

CursorWordRight moves cursor to next word boundary.

func (*MultiLineText) DeleteBackward

func (m *MultiLineText) DeleteBackward()

DeleteBackward deletes one rune before the cursor.

func (*MultiLineText) DeleteBackwardWord

func (m *MultiLineText) DeleteBackwardWord()

DeleteBackwardWord deletes from cursor back to previous word boundary.

func (*MultiLineText) DeleteForward

func (m *MultiLineText) DeleteForward()

DeleteForward deletes one rune after the cursor.

func (*MultiLineText) DoubleClick

func (m *MultiLineText) DoubleClick(ev *mancini.InputEvent) bool

DoubleClick implements mancini.DoubleClickable — selects word at click.

func (*MultiLineText) Draw

func (m *MultiLineText) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Renders the multi-line text field: inset background, visible text lines, selection highlight, and cursor.

func (*MultiLineText) HasAlert

func (m *MultiLineText) HasAlert() bool

HasAlert returns true if the interactor is showing an alert border.

func (*MultiLineText) HasSelection

func (m *MultiLineText) HasSelection() bool

HasSelection returns true if text is selected.

func (*MultiLineText) InsertRune

func (m *MultiLineText) InsertRune(ch rune)

InsertRune inserts a rune at the cursor, respecting max line count.

func (*MultiLineText) InsertString

func (m *MultiLineText) InsertString(s string)

InsertString inserts a string at the cursor.

func (*MultiLineText) KeyPress

func (m *MultiLineText) KeyPress(ch rune, action string, ev *mancini.InputEvent) bool

KeyPress implements mancini.KeyPressable.

func (*MultiLineText) SelectAll

func (m *MultiLineText) SelectAll()

SelectAll selects all text.

func (*MultiLineText) SelectedText

func (m *MultiLineText) SelectedText() string

SelectedText returns the currently selected text.

func (*MultiLineText) SelectionRange

func (m *MultiLineText) SelectionRange() (start, end int)

SelectionRange returns the ordered byte range of the selection.

func (*MultiLineText) SetFocused

func (m *MultiLineText) SetFocused(v bool)

SetFocused sets the Focused flag, which controls cursor rendering.

func (*MultiLineText) SetText

func (m *MultiLineText) SetText(s string)

SetText replaces the entire text content, resets cursor to end, and rebuilds.

func (*MultiLineText) Text

func (m *MultiLineText) Text() string

Text returns the current text content directly from the gap buffer.

func (*MultiLineText) TripleClick

func (m *MultiLineText) TripleClick(ev *mancini.InputEvent) bool

TripleClick implements mancini.TripleClickable — selects logical line.

func (*MultiLineText) WriteTo

func (m *MultiLineText) WriteTo(w io.Writer) (int64, error)

WriteTo writes the editor’s content into w via the gap buffer, with no intermediate string allocation.

type NOfMChooser

NOfMChooser is a strip-based N-of-M multi-select interactor. It displays N vertical strips side by side, each with a flat top edge and rounded bottom corners. Any combination of strips can be selected. Selected strips receive a purple tint overlay and inset shadows matching the neumorphic [mancini.Inset] treatment.

NOfMChooser embeds [impl.ThemedInteractor] and uses Light-weight [mancini.NeuParams]. When nil, only the filled shape and face content are drawn — no flush edge, grooves, or selection effects.

Each strip can have a [mancini.LatinTextFace] for text content. See also RadialNOfMChooser for an arc-shaped variant and RadialMenu for a full-circle single-select menu.

type NOfMChooser struct {
    impl.ThemedInteractor

    StripW   float64                 // width of each strip
    StripH   float64                 // height of each strip
    Faces    []mancini.LatinTextFace // text content for each strip (nil entries OK)
    Selected []bool                  // which strips are selected
    CornerR  float64                 // corner radius for rounded bottom (default 8.0)
    Disabled bool                    // when true, renders dimmed and ignores input
}

func NewNOfMChooser

func NewNOfMChooser(layout *mancini.LayoutAttributes, theme mancini.Theme, stripW, stripH float64, faces []mancini.LatinTextFace, selected []bool) *NOfMChooser

NewNOfMChooser creates an NOfMChooser wired to the constraint system and theme. layout must already be created (e.g. via mancini.NewLayoutAttributes).

func NewNOfMChooserNamed

func NewNOfMChooserNamed(myName, parent string, theme mancini.Theme, stripW, stripH float64, faces []mancini.LatinTextFace, selected []bool) *NOfMChooser

NewNOfMChooserNamed creates an NOfMChooser with layout built from name + parent strings. Width is set to len(faces)*stripW and height to stripH so the constraint system can bootstrap.

func (*NOfMChooser) Draw

func (c *NOfMChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. It renders the strip chooser: an overall shape with flat top and rounded bottom, flush edge outlines, vertical groove separators between strips, selected-strip tint+inset treatment, and per-strip face content.

type NeuBox

NeuBox is a single-child [impl.Decorator] that draws rectangular neumorphic shadows around its child. It overrides [impl.Decorator.Decorate] to render shadows via NeuBoxWith instead of the default thick black box.

NeuBox computes its margin from [mancini.NeuMaxPad] to ensure shadows have room to render without clipping. The child is positioned inside the margin at (x+Left, y+Top).

See also NeuCircle for circular neumorphic decoration, and AppWindow / FreeFloatingWindow for window-level decorators that add title bars.

type NeuBox struct {
    impl.Decorator

    // Pal is the [mancini.Palette] used for shadow and surface colors.
    Pal mancini.Palette
    // Depth controls whether the box appears Raised, Flush, or Inset.
    Depth mancini.NeuDepth
    // Weight selects the shadow strength (Light/Medium/Heavy).
    Weight mancini.Weight
    // Style supplies the [mancini.SurfaceStyle] that actually renders the box.
    Style mancini.SurfaceStyle
    // Face overrides the surface fill color when non-zero.
    Face color.NRGBA
    // Radius is the corner radius in pixels.
    Radius float64

    // Params is retained for backward compatibility with callers that
    // construct a NeuBox with explicit NeuParams (via NewNeuBox).
    // NewNeuBoxStyled does not use it.
    Params mancini.NeuParams
}

func NewNeuBox

func NewNeuBox(layout *mancini.LayoutAttributes, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams, radius float64) *NeuBox

NewNeuBox creates a NeuBox wired to the constraint system. The layout should be created with mancini.NewDecoratorLayout. Margin is computed from NeuParams (max shadow padding).

Deprecated: prefer NewNeuBoxStyled which takes a Theme.

func NewNeuBoxStyled

func NewNeuBoxStyled(layout *mancini.LayoutAttributes, theme mancini.Theme, depth mancini.NeuDepth, weight mancini.Weight, radius float64) *NeuBox

NewNeuBoxStyled creates a NeuBox that delegates rendering to the Theme’s [mancini.SurfaceStyle]. Margin is derived from style.Pad(weight).

func (*NeuBox) Decorate

func (n *NeuBox) Decorate(self mancini.Interactor, x, y, w, h int64)

Decorate implements mancini.Decoratable — draws the box at the given bounds.

type NeuCircle

NeuCircle is a single-child [impl.Decorator] that draws circular neumorphic shadows around its child. It overrides both [impl.Decorator.Decorate] (to render circular shadows via NeuCircleWith) and [impl.Decorator.Draw] (to inset the child by the bevel amount).

The bevel (neuCircleBevel = 7px) creates a visible ring between the shadow circle’s edge and the face fill, giving the raised/inset 3D effect its depth. The child receives bounds inset by the bevel, not the full margin.

The margin is symmetric on all sides (the circle occupies a square bounding box). It is computed from [mancini.NeuMaxPad].

See also NeuBox for rectangular neumorphic decoration.

type NeuCircle struct {
    impl.Decorator

    // Pal is the [mancini.Palette] used for shadow and surface colors.
    Pal mancini.Palette
    // Depth controls whether the circle appears Raised, Flush, or Inset.
    Depth mancini.NeuDepth
    // Weight selects the shadow strength (Light/Medium/Heavy).
    Weight mancini.Weight
    // Style supplies the [mancini.SurfaceStyle] used for the bevel ring.
    Style mancini.SurfaceStyle
    // Face overrides the surface fill color when non-zero.
    Face color.NRGBA

    // Params is retained for backward compatibility and for the bevel ring
    // rendering in Decorate (which accesses Raised sub-params directly).
    Params mancini.NeuParams
}

func NewNeuCircle

func NewNeuCircle(layout *mancini.LayoutAttributes, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams) *NeuCircle

NewNeuCircle creates a NeuCircle wired to the constraint system. The layout should be created with mancini.NewDecoratorLayout. Margin is computed from NeuParams (max shadow padding).

func NewNeuCircleNamed

func NewNeuCircleNamed(myName, parent string, pal mancini.Palette, depth mancini.NeuDepth, params mancini.NeuParams) *NeuCircle

NewNeuCircleNamed creates a NeuCircle with inside-out sizing constraints. Builds the layout internally from name and parent strings.

func (*NeuCircle) Decorate

func (n *NeuCircle) Decorate(self mancini.Interactor, x, y, w, h int64)

Decorate implements mancini.Decoratable — draws neumorphic circular shadows centered in the given bounds. Shadows are drawn at the full decorator radius; the face fill is drawn at radius - bevel so the shadow ring is visible between face edge and shadow fringe.

func (*NeuCircle) Draw

func (n *NeuCircle) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw overrides Decorator.Draw. The child receives bounds inset by the bevel amount so the neumorphic shadow ring between the face edge and the shadow circle remains visible. The full decorator margins are for shadow overflow; the bevel is the visible 3D ring.

type NeumorphicStyle

NeumorphicStyle implements [mancini.SurfaceStyle] by delegating to the existing neumorphic rendering functions (NeuBoxWith, NeuCircleWith, NeuGroove). It holds two sets of [mancini.NeuParams] — heavy for window decorations, light for controls — and selects between them based on the [mancini.Weight] parameter.

type NeumorphicStyle struct {
    // contains filtered or unexported fields
}

func NewNeumorphicStyle

func NewNeumorphicStyle(heavy, light *mancini.NeuParams) *NeumorphicStyle

NewNeumorphicStyle creates a NeumorphicStyle from heavy (window-weight) and light (control-weight) parameter sets. Either may be nil to disable neumorphic rendering for that weight class.

func (*NeumorphicStyle) DrawBox

func (s *NeumorphicStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)

DrawBox draws a rectangular neumorphic box by delegating to NeuBoxWith with the parameters selected by weight.

func (*NeumorphicStyle) DrawCircle

func (s *NeumorphicStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)

DrawCircle draws a circular neumorphic shape by delegating to NeuCircleWith with the parameters selected by weight.

func (*NeumorphicStyle) Groove

func (s *NeumorphicStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)

Groove draws a horizontal neumorphic groove by delegating to NeuGroove.

func (*NeumorphicStyle) Pad

func (s *NeumorphicStyle) Pad(weight mancini.Weight) float64

Pad returns the maximum shadow padding required for the given weight.

func (*NeumorphicStyle) TintOverlay

func (s *NeumorphicStyle) TintOverlay(dc mancini.DrawContext, _ mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)

TintOverlay draws a translucent face-colored tint over an existing rectangular surface for hover/focus highlighting.

type OutputFormat

OutputFormat controls how Display() formats a numeric value.

type OutputFormat int

const (
    // FormatDecimal renders integer values as base-10 decimal digits.
    FormatDecimal OutputFormat = iota
    // FormatHex renders integer values as uppercase hexadecimal digits.
    FormatHex
    // FormatBinary renders integer values as base-2 binary digits.
    FormatBinary
)

type Panel

Panel is a minimal container that draws its children at their layout-specified positions. It fills its background with the palette’s Surface color before drawing children.

Unlike Column or Row, Panel does not arrange children automatically — children must have their X, Y, Width, and Height set externally (via constraints or direct Set calls).

type Panel struct {
    impl.Interactor
    impl.Parent

    // Pal supplies the [mancini.Palette] used to fill the panel background.
    Pal mancini.Palette
}

func NewPanel

func NewPanel(myName, parent string, pal mancini.Palette, w, h int64) *Panel

NewPanel creates a Panel with value-based width and height.

func (*Panel) Draw

func (p *Panel) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw fills the panel background and draws each child at its layout-specified position.

type RadialMenu

RadialMenu is a full-circle annular menu divided into equal segments. One segment can be selected (rendered inset with a tint overlay). The ring is drawn with [mancini.Raised] neumorphic shadows, groove separators between all segments, and per-segment face content.

RadialMenu embeds [impl.ThemedInteractor] and uses Heavy-weight [mancini.NeuParams] (the same weight class as AppWindow) because the ring shape warrants stronger shadows. When [mancini.NeuParams] is nil, only the flat annulus fill and face content are drawn.

Each segment can have a [mancini.LatinTextFace] for text content. Face content is positioned at the segment’s midpoint and rotated to align with the segment’s angular position, reusing the same rendering code as RadialNOfMChooser.

See also NOfMChooser for a linear strip multi-select and RadialNOfMChooser for an arc-shaped multi-select.

type RadialMenu struct {
    impl.ThemedInteractor

    OuterR   float64                 // outer radius of the annulus
    InnerR   float64                 // inner radius (center hole)
    Faces    []mancini.LatinTextFace // text content for each segment (nil entries OK)
    Selected int                     // selected segment index (-1 for none)
    Disabled bool                    // when true, renders dimmed and ignores input
}

func NewRadialMenu

func NewRadialMenu(layout *mancini.LayoutAttributes, theme mancini.Theme, outerR, innerR float64, faces []mancini.LatinTextFace, selected int) *RadialMenu

NewRadialMenu creates a RadialMenu wired to the constraint system and theme.

func NewRadialMenuNamed

func NewRadialMenuNamed(myName, parent string, theme mancini.Theme, outerR, innerR float64, faces []mancini.LatinTextFace, selected int) *RadialMenu

NewRadialMenuNamed creates a RadialMenu with layout built from name + parent strings. Width and height are set to contain the full ring with shadow padding.

func (*RadialMenu) Draw

func (m *RadialMenu) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. It renders the full-circle radial menu: a raised annulus base, selected segment inset+tint, groove separators, and per-segment face content.

type RadialNOfMChooser

RadialNOfMChooser is an arc-shaped M-of-N selector interactor. It draws segments of an annulus (partial ring). Up to M segments can be simultaneously selected; selecting an (M+1)th evicts the oldest.

RadialNOfMChooser embeds [impl.ThemedInteractor] and [impl.Parent], making it a normal container interactor. Segment items are registered as children via [AddChildLast] at construction time.

Selected segments are filled with [mancini.Palette.SurfaceTint]; unselected segments use [mancini.Palette.Surface].

Each segment can have a [mancini.LatinTextFace] whose content is automatically rotated to align with the segment’s angular position. See also NOfMChooser for a linear strip variant and RadialMenu for a full-circle single-select menu.

type RadialNOfMChooser struct {
    impl.ThemedInteractor
    impl.Parent

    CX, CY           float64 // center of the arc relative to allocated area
    InnerR, OuterR   float64 // inner and outer radii
    StartDeg, EndDeg float64 // angular range in degrees (0=right, 90=down)
    Disabled         bool    // when true, renders dimmed and ignores input
    // contains filtered or unexported fields
}

func NewRadialNOfMChooser

func NewRadialNOfMChooser(layout *mancini.LayoutAttributes, theme mancini.Theme, cx, cy, innerR, outerR, startDeg, endDeg float64, labels []string, fontSize int64, m int) *RadialNOfMChooser

NewRadialNOfMChooser creates a RadialNOfMChooser wired to the constraint system and theme. m is the maximum number of simultaneously selected segments. labels are the text strings for each segment; a Label child interactor is created for each and added via AddChildLast. layout must already be created.

func NewRadialNOfMChooserNamed

func NewRadialNOfMChooserNamed(myName, parent string, theme mancini.Theme, cx, cy, innerR, outerR, startDeg, endDeg float64, labels []string, fontSize int64, m int) *RadialNOfMChooser

NewRadialNOfMChooserNamed creates a RadialNOfMChooser with layout built from name + parent strings. Width and height are computed from the arc’s bounding box so the constraint system can bootstrap. m is the maximum number of simultaneously selected segments. fontSize is used for the segment Label children.

func (*RadialNOfMChooser) Draw

func (c *RadialNOfMChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. It renders the radial arc chooser: an annular arc shape with per-segment fill (SurfaceTint for selected, Surface for unselected), flush edge outlines, radial groove separators between segments, and per-segment face content.

func (*RadialNOfMChooser) ForceSelect

func (c *RadialNOfMChooser) ForceSelect(k int)

ForceSelect clears all selections and selects only segment k.

func (*RadialNOfMChooser) HitTestSegment

func (c *RadialNOfMChooser) HitTestSegment(lx, ly float64) int

HitTestSegment returns the index of the segment at local coordinates (lx, ly) relative to the chooser’s origin, or -1 if the point is outside the annulus or angular range.

func (*RadialNOfMChooser) Hovered

func (c *RadialNOfMChooser) Hovered() int

Hovered returns the currently hovered segment index, or -1 if none.

func (*RadialNOfMChooser) IsSelected

func (c *RadialNOfMChooser) IsSelected(k int) bool

IsSelected returns true if segment k is currently selected.

func (*RadialNOfMChooser) NumSegments

func (c *RadialNOfMChooser) NumSegments() int

NumSegments returns the number of segments.

func (*RadialNOfMChooser) Select

func (c *RadialNOfMChooser) Select(k int) int

Select selects segment k. If k is already selected, this is a no-op and returns -1. If selecting k would exceed the maximum M, the oldest selected segment is evicted and its index is returned. Otherwise returns -1.

func (*RadialNOfMChooser) Selected

func (c *RadialNOfMChooser) Selected() []int

Selected returns a copy of the currently selected indices in order (oldest selection first).

func (*RadialNOfMChooser) SetHovered

func (c *RadialNOfMChooser) SetHovered(seg int) bool

SetHovered sets the hovered segment index. Pass -1 to clear hover. Returns true if the hovered segment changed.

func (*RadialNOfMChooser) TextToIndex

func (c *RadialNOfMChooser) TextToIndex() map[string]int

TextToIndex returns a map from each segment’s text label to its index.

func (*RadialNOfMChooser) Unselect

func (c *RadialNOfMChooser) Unselect(k int) int

Unselect deselects segment k. If k is not currently selected, this is a no-op and returns -1. Otherwise returns k.

type Row

Row arranges children horizontally with inside-out sizing. Width, Height, and LastChildDrawn are constraint-computed from children’s published dimensions. Children declare this Row as their parent by naming it in their [mancini.LayoutAttributes]’ Parent field.

Row embeds [impl.Interactor] + [impl.Parent]. Children are discovered via the constraint network at draw time (see [impl.Parent.GetChildren]).

Layout Behavior

Children are arranged left-to-right with configurable spacing. Cross-axis (vertical) alignment is controlled by CrossAlign ([mancini.AxisMinimum], [mancini.AxisMiddle], [mancini.AxisMaximum]). The last child that partially overflows MaxWidth is clipped using [mancini.WithClip].

See also Column for vertical layout.

type Row struct {
    impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
    impl.Parent     // GetChildren() via constraint network

    // Pal is the [mancini.Palette] used for default child backgrounds.
    Pal mancini.Palette
    // CrossAlign controls vertical alignment of children inside the Row.
    CrossAlign mancini.Alignment
    // MaxWidth caps the row width; children beyond this point are clipped.
    MaxWidth int64
    HPadding int64 // horizontal padding applied at left and right edges
}

func NewRow

func NewRow(myName, parent string, pal mancini.Palette, maxWidth int64, crossAlign mancini.Alignment, hPadding int64) *Row

NewRow creates a Row wired to the constraint system. Children are not passed here — they declare this Row as their parent via their own InitLayout(parentName) call, and are discovered at draw time via the constraint network.

func (*Row) Draw

func (r *Row) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Arranges children left-to-right with spacing, cross-axis alignment, and overflow clipping.

func (*Row) SetSpacing

func (r *Row) SetSpacing(v float64)

SetSpacing sets the inter-child spacing value (in pixels).

type RowFillLastChild

RowFillLastChild arranges children horizontally like Row, but the last visible child receives all remaining width after the other children and spacing are subtracted. The row’s own width is set externally (typically via a constraint), not computed from children.

After construction, the caller must:

  1. Set GetLayout().Width (e.g. via attr.ConstraintI64)
  2. Call FinishLayout() to create Bounds and LastChildWidth constraints

Children declare this interactor as their parent by naming it in their layout Parent field and are discovered at draw time via the constraint network.

type RowFillLastChild struct {
    impl.Interactor
    impl.Parent

    // Pal is the [mancini.Palette] used for default child backgrounds.
    Pal mancini.Palette
    // HPadding is the horizontal padding applied at the row's left and right edges.
    HPadding int64
    // contains filtered or unexported fields
}

func NewRowFillLastChild

func NewRowFillLastChild(myName, parent string, pal mancini.Palette, spacing int64) *RowFillLastChild

NewRowFillLastChild creates a RowFillLastChild. The row’s width must be set by the caller on GetLayout().Width before calling FinishLayout().

func NewRowFillLastChildWithLayout

func NewRowFillLastChildWithLayout(lh *mancini.LayoutAttributes, pal mancini.Palette, spacing int64) *RowFillLastChild

NewRowFillLastChildWithLayout creates a RowFillLastChild using a pre-built LayoutAttributes. Used when the caller provides bridge/custom layout. Width and Height must already be set on lh. Call FinishLayout() after children are created.

func (*RowFillLastChild) Draw

func (r *RowFillLastChild) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Arranges children left-to-right; the last visible child receives remaining width.

func (*RowFillLastChild) FinishLayout

func (r *RowFillLastChild) FinishLayout()

FinishLayout creates the Bounds, LastChildWidth, and parent damage constraints. Must be called after the caller has assigned GetLayout().Width.

func (*RowFillLastChild) SetSpacing

func (r *RowFillLastChild) SetSpacing(v float64)

SetSpacing sets the inter-child spacing value (in pixels).

type RowPercentage

RowPercentage arranges children horizontally, giving each child a fraction of the parent’s width according to a percentage sequence. Children are centered vertically.

Percentage normalization and child-count handling follow the same rules as ColumnPercentage — see its documentation.

type RowPercentage struct {
    impl.Interactor
    impl.Parent

    // Pal is the [mancini.Palette] used for selection backgrounds.
    Pal            mancini.Palette
    ClipChildren   bool      // clip each child to its cell bounds (prevents text overflow)
    Percents       []float64 // percentage of width for each child position
    SelectionState int       // 0=unselected, 1=primary selection, 2=in-set-not-primary
    // contains filtered or unexported fields
}

func NewRowPercentage

func NewRowPercentage(myName, parent string, pal mancini.Palette, w, h int64, percents []float64) *RowPercentage

NewRowPercentage creates a RowPercentage with the given percentage sequence. Percentages are normalized on construction. Width and height are set as value attributes from the given dimensions.

func (*RowPercentage) Click

func (rp *RowPercentage) Click(ev *mancini.InputEvent) bool

Click implements [mancini.Clickable]. Routes the click to the owning GridTable.

func (*RowPercentage) Draw

func (rp *RowPercentage) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw positions children horizontally according to the percentage sequence. Each child is centered vertically and given a width proportional to its percentage of the parent’s total width.

type Scrollbar

Scrollbar is a neumorphic scrollbar interactor with an inset track, a raised thumb with a grip dot, and optional arrow buttons at each end.

Scrollbar embeds [impl.ThemedInteractor] and uses Light-weight [mancini.NeuParams] for its neumorphic effects. When the theme’s [mancini.NeumorphicParams.Light] returns nil, the scrollbar falls back to flat rendering: [mancini.Palette.SurfaceTint] for the track, [mancini.Palette.Surface] for the thumb, and [mancini.Palette.Icon] for arrow triangles.

ThumbFrac controls thumb size as a fraction of the track (0..1, representing the proportion of visible content). ThumbPos controls the thumb position along available travel (0 = start, 1 = end). All dimensions scale proportionally to TrackWidth.

type Scrollbar struct {
    impl.ThemedInteractor

    IsVertical bool    // true = vertical, false = horizontal
    TrackWidth float64 // cross-axis thickness (values < 5 use default 22.5)
    ThumbFrac  float64 // visible fraction 0..1 (determines thumb length)
    ThumbPos   float64 // thumb position 0..1 along available travel
    ShowArrows bool    // draw arrow triangles at each end

    Disabled bool // when true, renders dimmed and ignores input

    // Value/Max: when set, ThumbPos and ThumbFrac are computed from
    // these in Draw. Value is the current scroll position (pixels),
    // Max is the maximum scroll range (constrained to MaxScrollY).
    // Value is the source of truth — the scroller's VirtualY is
    // constrained to it.
    ValueAttr *attr.Attribute[int64]
    MaxAttr   *attr.Attribute[int64]

    // ThumbFracPermilleAttr (optional) sources ThumbFrac entirely from
    // the constraint network. Value is in permille (0..1000) so it can
    // stay int64 like everything else. When set, Scrollbar.Draw uses
    // it directly: ThumbFrac = clamp(permille, 0, 1000) / 1000. The
    // pixel-based mainAxis/(mainAxis+max) fallback is bypassed —
    // callers whose Value/Max are not in pixels (row-based scrollers
    // like GridFrame, ConsoleFrame) provide a constraint program that
    // computes visible/total in permille (mancini.ThumbFracPermille).
    ThumbFracPermilleAttr *attr.Attribute[int64]
    // contains filtered or unexported fields
}

func NewScrollbar

func NewScrollbar(layout *mancini.LayoutAttributes, theme mancini.Theme, isVertical bool, trackWidth, thumbFrac, thumbPos float64, showArrows bool) *Scrollbar

NewScrollbar creates a Scrollbar wired to the constraint system and theme.

func NewScrollbarNamed

func NewScrollbarNamed(myName, parent string, theme mancini.Theme, isVertical bool, length, trackWidth, thumbFrac, thumbPos float64, showArrows bool) *Scrollbar

NewScrollbarNamed creates a Scrollbar with layout built from name + parent strings. The main-axis dimension is set to length; the cross-axis is set to the resolved track width.

func (*Scrollbar) ClickDragEnd

func (s *Scrollbar) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool

ClickDragEnd implements mancini.ClickDraggable.

func (*Scrollbar) ClickDragMove

func (s *Scrollbar) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool

ClickDragMove implements mancini.ClickDraggable.

func (*Scrollbar) ClickDragStart

func (s *Scrollbar) ClickDragStart(ev *mancini.InputEvent) bool

ClickDragStart implements mancini.ClickDraggable.

func (*Scrollbar) Draw

func (s *Scrollbar) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. It renders the scrollbar: inset track, raised thumb, grip dot, and optional arrow buttons.

When ValueAttr and MaxAttr are set, ThumbPos and ThumbFrac are computed automatically from Value/Max before rendering.

type ScrollbarStyle

ScrollbarStyle selects which scrollbar implementation to use.

type ScrollbarStyle int

const (
    // ScrollbarStandard selects the full neumorphic [Scrollbar].
    ScrollbarStandard ScrollbarStyle = iota
    // ScrollbarLight selects the slimmer [LightScrollbar].
    ScrollbarLight
)

type Scroller

Scroller is a single-child parent that provides a scrollable viewport over a larger virtual surface. Children declare virtual Y positions (set by LayoutChildren or constraints); Scroller renders only the children that intersect the current viewport.

The offscreen buffer is viewport-sized (Width × Height), NOT virtual-sized. On each draw the scroller walks children in Y order, skips those entirely outside the viewport, and clips partially visible children to the viewport intersection. This keeps memory proportional to the visible area regardless of virtual content size.

True size (Width, Height) comes from external constraints — typically bound to the available viewport space. Virtual size (VirtualWidth, VirtualHeight) is the total content extent.

ScrollNeededX / ScrollNeededY are boolean attributes updated each frame, useful for driving scrollbar visibility via constraints.

MaxScrollY is a constrained attribute: VirtualHeight - Height. It represents the maximum scroll range. When a scrollbar is wired, VirtualY can be constrained to the scrollbar’s value attribute.

type Scroller struct {
    impl.Interactor
    impl.Parent

    Pal mancini.Palette // background fill color (Surface)

    // VirtualWidth is the total content width in pixels.
    VirtualWidth *attr.Attribute[int64]
    // VirtualHeight is the total content height in pixels.
    VirtualHeight *attr.Attribute[int64]
    // VirtualX is the current horizontal scroll offset in pixels.
    VirtualX *attr.Attribute[int64]
    // VirtualY is the current vertical scroll offset in pixels.
    VirtualY *attr.Attribute[int64]

    MaxScrollY *attr.Attribute[int64] // constrained: VirtualHeight - Height

    // ScrollNeededX is true when VirtualWidth exceeds the viewport width.
    ScrollNeededX *attr.Attribute[bool]
    // ScrollNeededY is true when VirtualHeight exceeds the viewport height.
    ScrollNeededY *attr.Attribute[bool]

    // ScrollValueY is the upstream value attribute that drives VirtualY
    // when VirtualY is a constraint. ScrollTo writes here instead of
    // directly to VirtualY. nil when VirtualY is a plain value.
    ScrollValueY *attr.Attribute[int64]
    // contains filtered or unexported fields
}

func NewScroller

func NewScroller(myName, parent string, pal mancini.Palette, width, height *attr.Attribute[int64], virtualY *attr.Attribute[int64]) *Scroller

NewScroller creates a Scroller wired to the constraint system. Width and Height must be provided by the caller — typically constraints bound to the parent’s dimensions. virtualY is optional: if non-nil, it is used as the VirtualY attribute (e.g., a constraint wired to a scrollbar’s value); if nil, a value attribute is created. The child is not passed here; it declares the Scroller as its parent via its own layout attributes.

func (*Scroller) DeleteChild

func (s *Scroller) DeleteChild(child mancini.Interactor)

DeleteChild removes a child from this Scroller’s child list.

func (*Scroller) Draw

func (s *Scroller) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer.

The offscreen buffer is viewport-sized (w × h). On each draw:

  1. Walk children in Y order.
  2. Skip children whose bottom (childY + childH) <= scrollY (above viewport).
  3. Skip children whose top (childY) >= scrollY + viewportH (below viewport).
  4. For visible children, compute the intersection of the child rect with the viewport, set a clip rectangle, translate Y, and draw.

No virtual-sized buffer is ever allocated.

func (*Scroller) MarkContentDirty

func (s *Scroller) MarkContentDirty()

MarkContentDirty signals that the child content has changed and needs to be re-rendered on the next Draw.

func (*Scroller) MaxScrollYURI

func (s *Scroller) MaxScrollYURI() string

MaxScrollYURI returns the URI of the MaxScrollY attribute.

func (*Scroller) Pick

func (s *Scroller) Pick(localX, localY int64) []mancini.Interactor

Pick performs hit testing with virtual coordinate translation. Overrides the default impl.Interactor.Pick to add the scroll offset before recursing into the child.

func (*Scroller) ScrollBy

func (s *Scroller) ScrollBy(dx, dy int64)

ScrollBy adds a delta to the current scroll position.

func (*Scroller) ScrollTo

func (s *Scroller) ScrollTo(vx, vy int64)

ScrollTo sets the scroll position to absolute virtual coordinates. Values are clamped to the valid range on the next Draw. Does NOT mark content dirty — only changes the blit offset. When VirtualY is a constraint (wired to a scrollbar), writes to ScrollValueY instead, which flows through the constraint.

func (*Scroller) SetVirtualSize

func (s *Scroller) SetVirtualSize(vw, vh int64)

SetVirtualSize changes the virtual surface dimensions. Forces buffer reallocation on the next Draw.

type ScrollerVertical

ScrollerVertical bundles a Scroller with a vertical Scrollbar to its right. All constraint wiring is internal:

The Scroller’s width is constrained to (parent width - trackWidth). The Scroller’s height is constrained to the parent’s height. Children declare the Scroller as their parent via ScrollerName().

type ScrollerVertical struct {
    impl.Interactor
    impl.Parent

    // Scroller is the inner [Scroller] that hosts the scrolling children.
    Scroller *Scroller
    // contains filtered or unexported fields
}

func NewScrollerVertical

func NewScrollerVertical(myName, parent string, theme mancini.Theme, pal mancini.Palette, parentWidthURI, parentHeightURI string, trackWidth int64, style ScrollbarStyle) *ScrollerVertical

NewScrollerVertical creates a ScrollerVertical. The caller provides width and height constraints for the ScrollerVertical itself (these typically come from the parent’s dimensions). trackWidth is the pixel width reserved for the scrollbar.

func (*ScrollerVertical) Draw

func (sv *ScrollerVertical) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Positions Scroller and Scrollbar, then delegates to DrawChildren.

func (*ScrollerVertical) ScrollerName

func (sv *ScrollerVertical) ScrollerName() string

ScrollerName returns the constraint-system name of the internal Scroller. Children should use this as their parent name.

func (*ScrollerVertical) ScrollerWidthURI

func (sv *ScrollerVertical) ScrollerWidthURI() string

ScrollerWidthURI returns the URI of the Scroller’s Width attribute. Children can constrain their width to this.

type SingleLineText

SingleLineText is a single-line text input interactor. It renders an [mancini.Inset] neumorphic field with left-aligned text, an auto-scrolling viewport, a cursor indicator when focused, and hint text when the content is empty.

SingleLineText publishes its text content as a string attribute and the text length as a constraint attribute (computed via a vgo program). It implements [mancini.KeyPressable] so it can receive matched key-press events when focused via a [mancini.KeyAgent].

The Hint field is displayed in italic at 80% alpha when the text content is empty.

type SingleLineText struct {
    impl.ThemedInteractor

    Hint string // shown in italic at 80% alpha when text is empty
    // FontSize is the rendered font size in pixels.
    FontSize    int64
    Radius      float64      // corner radius (default 6)
    Padding     float64      // horizontal padding inside field (default 8)
    BorderWidth float64      // border thickness in pixels (default 2)
    Focused     bool         // shows cursor when true
    TextColor   color.NRGBA  // zero value uses palette Text()
    Disabled    bool         // when true, renders dimmed and ignores input
    OnSubmit    func(string) // called when Enter is pressed; receives current text (may be empty)

    // AppWindow is required for animation-driven alerts.
    AppWindow *AppWindow
    // contains filtered or unexported fields
}

func NewSingleLineText

func NewSingleLineText(layout *mancini.LayoutAttributes, theme mancini.Theme, text string, fontSize int64) *SingleLineText

NewSingleLineText creates a SingleLineText wired to the constraint system and theme. The layout must have a name set (used for attribute URIs).

func NewSingleLineTextNamed

func NewSingleLineTextNamed(myName, parent string, theme mancini.Theme, text string, fontSize int64, width int64) *SingleLineText

NewSingleLineTextNamed creates a SingleLineText with layout built from name + parent strings. Width sets the field width; height is derived from the font size plus padding and border.

func NewSingleLineTextWithLimit

func NewSingleLineTextWithLimit(myName, parent string, theme mancini.Theme, text string, fontSize int64, width int64, charLimit int) *SingleLineText

NewSingleLineTextWithLimit creates a SingleLineText with a maximum character count. The limit must be >= 1 or the call panics. When the limit is reached, further inserts replace the character under the cursor.

func (*SingleLineText) Alert

func (t *SingleLineText) Alert()

Alert flashes a highlight border around the input. The border is solid for 500ms, then fades over the next 500ms via the animation protocol. Ignored if an alert is already active.

func (*SingleLineText) AnimationFinish

func (t *SingleLineText) AnimationFinish(localID uint64, endNanos int64)

AnimationFinish implements mancini.Animatable. Clears the alert.

func (*SingleLineText) AnimationStart

func (t *SingleLineText) AnimationStart(localID uint64, startNanos int64)

AnimationStart implements mancini.Animatable. The alert border is already visible at full alpha during the solid phase — no-op.

func (*SingleLineText) AnimationUpdate

func (t *SingleLineText) AnimationUpdate(localID uint64, startNanos, endNanos int64, coveredStart, coveredEnd float64, nanosSinceStart int64)

AnimationUpdate implements mancini.Animatable. Fades the alert border alpha from 255 to 0 as coveredEnd progresses from 0 to 1.

func (*SingleLineText) ClearAlert

func (t *SingleLineText) ClearAlert()

ClearAlert removes the alert border and forces a redraw.

func (*SingleLineText) ClearSelection

func (t *SingleLineText) ClearSelection()

ClearSelection removes the selection without changing the cursor.

func (*SingleLineText) CursorMoveBackwardWord

func (t *SingleLineText) CursorMoveBackwardWord()

CursorMoveBackwardWord moves the cursor to the beginning of the previous word. If there is a selection, collapses to the start of the selection first. Alerts if already at the beginning.

func (*SingleLineText) CursorMoveBeginningOfLine

func (t *SingleLineText) CursorMoveBeginningOfLine()

CursorMoveBeginningOfLine moves the cursor to the beginning of the text. Alerts if already at the beginning.

func (*SingleLineText) CursorMoveEndOfLine

func (t *SingleLineText) CursorMoveEndOfLine()

CursorMoveEndOfLine moves the cursor to the end of the text. Alerts if already at the end.

func (*SingleLineText) CursorMoveForwardWord

func (t *SingleLineText) CursorMoveForwardWord()

CursorMoveForwardWord moves the cursor to the beginning of the next word. If there is a selection, collapses to the end of the selection first. Alerts if already at the end.

func (*SingleLineText) CursorMoveLeftChar

func (t *SingleLineText) CursorMoveLeftChar()

CursorMoveLeftChar moves the cursor one rune to the left. If there is a selection, collapses to the start of the selection. Alerts if already at the beginning.

func (*SingleLineText) CursorMoveRightChar

func (t *SingleLineText) CursorMoveRightChar()

CursorMoveRightChar moves the cursor one rune to the right. If there is a selection, collapses to the end of the selection. Alerts if already at the end.

func (*SingleLineText) DeleteBackward

func (t *SingleLineText) DeleteBackward()

DeleteBackward deletes the character before the cursor. If there is a selection, deletes the selected range instead. Alerts if already at the beginning.

func (*SingleLineText) DeleteBackwardWord

func (t *SingleLineText) DeleteBackwardWord()

DeleteBackwardWord deletes from the cursor back to the beginning of the previous word (Ctrl+W). After deletion the cursor is positioned so that typing extends the word before the deleted region.

func (*SingleLineText) DeleteForward

func (t *SingleLineText) DeleteForward()

DeleteForward deletes the character after the cursor. If there is a selection, deletes the selected range instead. Alerts if already at the end.

func (*SingleLineText) Draw

func (t *SingleLineText) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. It renders the inset field background, text (or hint), and cursor.

func (*SingleLineText) HasAlert

func (t *SingleLineText) HasAlert() bool

HasAlert returns true if the interactor is currently showing an alert border.

func (*SingleLineText) HasSelection

func (t *SingleLineText) HasSelection() bool

HasSelection returns true if there is an active text selection.

func (*SingleLineText) InsertAtCursor

func (t *SingleLineText) InsertAtCursor(ch rune)

InsertAtCursor inserts a rune at the current cursor position. If the input is at its limit, the character under the cursor is replaced instead and the cursor does not advance. Any insertion clears an active alert.

func (*SingleLineText) KeyPress

func (t *SingleLineText) KeyPress(ch rune, action string, ev *mancini.InputEvent) bool

KeyPress implements mancini.KeyPressable. The KeyAgent has already translated the evdev keycode to a character and action via the keymap.

Modifier combinations (Meta = Cmd, Alt = Option on Mac):

func (*SingleLineText) NextWord

func (t *SingleLineText) NextWord() int

NextWord returns the rune position of the beginning of the next word relative to the current cursor position. A word is a group of non-space characters separated by spaces. If there is no next word, returns the end of the text (end of line).

func (*SingleLineText) PreviousWord

func (t *SingleLineText) PreviousWord() int

PreviousWord returns the rune position of the beginning of the previous word relative to the current cursor position. A word is a group of non-space characters separated by spaces. If there is no previous word, returns 0 (beginning of line).

func (*SingleLineText) SelectedText

func (t *SingleLineText) SelectedText() string

SelectedText returns the currently selected text, or “” if none.

func (*SingleLineText) SelectionAll

func (t *SingleLineText) SelectionAll()

SelectionAll selects all text.

func (*SingleLineText) SelectionExtendBackwardWord

func (t *SingleLineText) SelectionExtendBackwardWord()

SelectionExtendBackwardWord extends selection to previous word boundary.

func (*SingleLineText) SelectionExtendForwardWord

func (t *SingleLineText) SelectionExtendForwardWord()

SelectionExtendForwardWord extends selection to next word boundary.

func (*SingleLineText) SelectionExtendLeftChar

func (t *SingleLineText) SelectionExtendLeftChar()

SelectionExtendLeftChar extends selection one rune left. If no selection, sets anchor = cursorPos first.

func (*SingleLineText) SelectionExtendRightChar

func (t *SingleLineText) SelectionExtendRightChar()

SelectionExtendRightChar extends selection one rune right.

func (*SingleLineText) SelectionExtendToBeginning

func (t *SingleLineText) SelectionExtendToBeginning()

SelectionExtendToBeginning extends selection to beginning of line.

func (*SingleLineText) SelectionExtendToEnd

func (t *SingleLineText) SelectionExtendToEnd()

SelectionExtendToEnd extends selection to end of line.

func (*SingleLineText) SelectionRange

func (t *SingleLineText) SelectionRange() (start, end int)

SelectionRange returns the ordered start and end rune positions of the current selection. If there is no selection, returns (0, 0).

func (*SingleLineText) SetText

func (t *SingleLineText) SetText(s string)

SetText replaces the text content, clamps the cursor, and triggers FullDamage.

func (*SingleLineText) Text

func (t *SingleLineText) Text() string

Text returns the current text content.

func (*SingleLineText) TextLen

func (t *SingleLineText) TextLen() int64

TextLen returns the current text length (from the constraint attribute).

type Spacer

Spacer is a leaf interactor that draws nothing but occupies space in a Column or Row layout. Its Width and Height are set as value attributes at construction time.

Spacer embeds [impl.Interactor] directly. It has no theme or visual rendering — its only purpose is to participate in the constraint network as a fixed-size gap.

type Spacer struct {
    impl.Interactor // X(), Y(), W(), H(), Visible(), DC(), GetLayout()
}

func NewSpacer

func NewSpacer(myName, parent string, w, h int64) *Spacer

NewSpacer creates a Spacer with the given fixed dimensions.

func (*Spacer) Draw

func (s *Spacer) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer. Spacer draws nothing but must complete the damage cycle so persistent damage doesn’t cause infinite redraws.

type StripedTitleBar

StripedTitleBar draws horizontal pinstripes interrupted by centered title text — classic Mac OS style. When inactive, only plain centered text is drawn (no stripes).

See also GradientTitleBar for an animated gradient title bar.

type StripedTitleBar struct {
    // contains filtered or unexported fields
}

func NewStripedTitleBar

func NewStripedTitleBar(pal mancini.Palette, fonts *mancini.FontConfig, fontSize int64, bold bool) *StripedTitleBar

NewStripedTitleBar creates a StripedTitleBar. The font face is resolved once at creation time.

func (*StripedTitleBar) DrawTitleBar

func (s *StripedTitleBar) DrawTitleBar(dc mancini.DrawContext, title string, state mancini.WindowState, _ mancini.WindowType, x, y, w, h float64)

DrawTitleBar implements mancini.TitleBar.

type SubtleStyle

SubtleStyle implements [mancini.SurfaceStyle] with classic directional bevels: light from top-left, shadow on bottom-right. This style works well with both light and dark palettes.

Raised: face brightened by delta, 1px Midlight top+left, 1px Mid bottom+right. Flush: thin uniform edge strokes (dark + light). Inset: face darkened by delta, 1px Mid top+left, 1px Midlight bottom+right.

type SubtleStyle struct {
    // contains filtered or unexported fields
}

func NewSubtleStyle

func NewSubtleStyle(delta int) *SubtleStyle

NewSubtleStyle creates a SubtleStyle. delta controls how much the face color is brightened (Raised) or darkened (Inset). Use 12 for a subtle effect, higher values for more contrast.

func (*SubtleStyle) DrawBox

func (s *SubtleStyle) DrawBox(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, x1, y1, x2, y2, r float64, face color.NRGBA)

DrawBox renders a rounded rectangle with a directional bevel for the given [mancini.NeuDepth]. The face color is adjusted by delta for raised/inset depths.

func (*SubtleStyle) DrawCircle

func (s *SubtleStyle) DrawCircle(pal mancini.Palette, dc mancini.DrawContext, depth mancini.NeuDepth, weight mancini.Weight, cx, cy, radius float64, face color.NRGBA)

DrawCircle renders a filled circle with the face color brightness adjusted by depth.

func (*SubtleStyle) Groove

func (s *SubtleStyle) Groove(pal mancini.Palette, dc mancini.DrawContext, x1, y, x2 float64)

Groove draws a thin two-line horizontal groove (Mid above Midlight) from x1 to x2 at height y.

func (*SubtleStyle) Pad

func (s *SubtleStyle) Pad(weight mancini.Weight) float64

Pad returns the recommended interior padding in pixels for the given surface weight.

func (*SubtleStyle) TintOverlay

func (s *SubtleStyle) TintOverlay(dc mancini.DrawContext, depth mancini.NeuDepth, x1, y1, x2, y2, r float64, face color.NRGBA)

TintOverlay draws a translucent face-colored rounded rectangle on top of an existing surface for hover/focus highlighting.

type ThrobberRadialChooser

ThrobberRadialChooser is a pulsing circle that opens a radial overlay menu on click. It manages the full overlay lifecycle with rachel.

type ThrobberRadialChooser struct {
    impl.Interactor

    // OnSelect is called when the user selects a segment.
    // The argument is the segment index.
    OnSelect func(int)

    // FocusParent is the interactor that owns this throbber. When the
    // throbber is clicked, it calls FocusParent.SetFocusToSelf() to
    // claim in-app keyboard focus for the containing Unit.
    FocusParent mancini.FocusClaimer
    // contains filtered or unexported fields
}

func NewThrobberRadialChooser

func NewThrobberRadialChooser(myName, parent string, theme mancini.Theme, pal mancini.Palette, rachelSID int, mainDC mancini.DrawContext, labels []string, initialSel int) *ThrobberRadialChooser

NewThrobberRadialChooser creates a ThrobberRadialChooser. The throbber is sized to size×size pixels. labels are the segment texts for the radial menu. initialSel is the initially selected segment index. rachelSID is the shepherd ID for rachel (overlay IPC). mainDC is the app’s primary DrawContext, used to create overlay child DCs.

func (*ThrobberRadialChooser) Click

func (trc *ThrobberRadialChooser) Click(ev *mancini.InputEvent) bool

Click implements mancini.Clickable. Claims in-app focus for the containing Unit, then opens or dismisses the radial overlay.

func (*ThrobberRadialChooser) Draw

func (trc *ThrobberRadialChooser) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw renders the throbber as a filled circle at the current brightness.

func (*ThrobberRadialChooser) HandleMouseMove

func (trc *ThrobberRadialChooser) HandleMouseMove(m wm.MouseMove, appScreenX, appScreenY int32) bool

HandleMouseMove processes a MouseMove event for the overlay. Converts app-local coords to overlay-local and updates hover state. Returns true if the overlay was redrawn (caller should NOT redraw main window).

func (*ThrobberRadialChooser) HandleMouseRelease

func (trc *ThrobberRadialChooser) HandleMouseRelease(m wm.MouseRelease, appScreenX, appScreenY int32) bool

HandleMouseRelease processes a MouseRelease event for the overlay. Selects the segment under the cursor (if any), calls OnSelect, and dismisses the overlay. Returns true if the overlay was active (caller should NOT redraw main window).

func (*ThrobberRadialChooser) HandleOverlayReady

func (trc *ThrobberRadialChooser) HandleOverlayReady(m wm.OverlayReady)

HandleOverlayReady processes the OverlayReady message from rachel. Returns true if this ThrobberRadialChooser handled the message.

func (*ThrobberRadialChooser) HandleOverlayReleased

func (trc *ThrobberRadialChooser) HandleOverlayReleased(m wm.OverlayReleased)

HandleOverlayReleased cleans up overlay state after rachel confirms teardown.

func (*ThrobberRadialChooser) HitTest

func (trc *ThrobberRadialChooser) HitTest(lx, ly int) bool

HitTest returns true if the point (lx, ly) in app-local coordinates is within the throbber’s bounds (with 10px padding for easy clicking).

func (*ThrobberRadialChooser) OverlayActive

func (trc *ThrobberRadialChooser) OverlayActive() bool

OverlayActive returns true if an overlay is currently allocated.

func (*ThrobberRadialChooser) RequestOverlay

func (trc *ThrobberRadialChooser) RequestOverlay()

RequestOverlay sends an OverlayAllocate to rachel. If an overlay is already active, dismisses it instead. Call this when the throbber is clicked.

func (*ThrobberRadialChooser) Selected

func (trc *ThrobberRadialChooser) Selected() int

Selected returns the currently selected segment index, or -1 if none.

func (*ThrobberRadialChooser) SetMainDC

func (trc *ThrobberRadialChooser) SetMainDC(dc mancini.DrawContext)

SetMainDC updates the parent DrawContext used for overlay child DCs. Call this after the backing store is ready if mainDC was nil at construction.

func (*ThrobberRadialChooser) Tick

func (trc *ThrobberRadialChooser) Tick() bool

Tick advances the throbber by one 10Hz step. Always returns true since the color changes continuously.

type VSplitter

VSplitter arranges three children horizontally: a left primary child, a center VLine separator, and a right primary child. Widths are assigned as percentages of the VSplitter’s own width (default 48/4/48).

The VLine separator is click-draggable: dragging it adjusts the left child’s percentage, clamped to [MinPercent, MaxPercent] (default 30–70).

VSplitter constrains only the VLine’s height to match its own height. The two primary children’s heights are managed externally.

type VSplitter struct {
    impl.Interactor
    impl.Parent

    // Pal is the [mancini.Palette] used for default child backgrounds.
    Pal      mancini.Palette
    Percents [3]float64 // left, center, right percentages

    // Drag limits for the left child percentage.
    MinPercent float64 // default 30
    MaxPercent float64 // default 70

    // In-app focus: set by the application after construction.
    // KeyFocusAgent is the KeyAgent that routes keyboard events.
    // KeyFocusTarget is the interactor that should receive keyboard input
    // when this VSplitter is clicked (e.g., the editor inside a unit).
    // FocusAttr is this VSplitter's focused attribute (true = has focus).
    // FocusPeers are all VSplitters in the same focus group (including self).
    KeyFocusAgent  *mancini.KeyAgent
    KeyFocusTarget mancini.Interactor
    FocusAttr      *attr.Attribute[bool]
    FocusPeers     []*VSplitter
    // contains filtered or unexported fields
}

func NewVSplitter

func NewVSplitter(myName, parent string, pal mancini.Palette) *VSplitter

NewVSplitter creates a VSplitter. The width comes from the parent; height is a value attribute. The VLine child should be created with its height constrained to HeightURI().

func (*VSplitter) Click

func (vs *VSplitter) Click(ev *mancini.InputEvent) bool

Click implements mancini.Clickable. Catches clicks that fall through from non-interactive children (e.g., BAG) and claims focus.

func (*VSplitter) ClickDragEnd

func (vs *VSplitter) ClickDragEnd(ev *mancini.InputEvent, outsideBounds bool) bool

ClickDragEnd implements mancini.ClickDraggable.

func (*VSplitter) ClickDragMove

func (vs *VSplitter) ClickDragMove(ev *mancini.InputEvent, _ *mancini.InputEvent, outsideBounds bool) bool

ClickDragMove implements mancini.ClickDraggable.

func (*VSplitter) ClickDragStart

func (vs *VSplitter) ClickDragStart(ev *mancini.InputEvent) bool

ClickDragStart implements mancini.ClickDraggable. Accepts the drag if the press is in the center (VLine) region. Also claims in-app focus at the start of the drag.

func (*VSplitter) Draw

func (vs *VSplitter) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw positions the three children horizontally according to the percentage split. Only three children are expected. Layout is always propagated to all children, but Draw is skipped for undamaged children.

func (*VSplitter) HeightURI

func (vs *VSplitter) HeightURI() string

HeightURI returns the URI of the VSplitter’s Height attribute. Use this to constrain the VLine child’s height.

func (*VSplitter) SetFocusToSelf

func (vs *VSplitter) SetFocusToSelf()

SetFocusToSelf claims in-app keyboard focus for this VSplitter. It walks FocusPeers, setting each peer’s FocusAttr to false except this one (true), and directs the KeyAgent to deliver keyboard events to KeyFocusTarget. Called from this VSplitter’s own Click handler and from child interactors (VE, Throbber) at the start of their interactions.

type VerticalLine

VerticalLine draws a single vertical line from (X, Y) to (X, Y+Height). X, Y, and Height can be constrained or set as value attributes. The line is 1px wide by default, drawn in the palette’s text color.

type VerticalLine struct {
    impl.ThemedInteractor

    LineColor color.NRGBA // zero uses palette Text()
    LineWidth float64     // pixel width (default 1)
}

func NewVerticalLine

func NewVerticalLine(myName, parent string, theme mancini.Theme) *VerticalLine

NewVerticalLine creates a VerticalLine with all-value layout attributes.

func NewVerticalLineConstrained

func NewVerticalLineConstrained(myName, parent string, theme mancini.Theme, heightSourceURI string) *VerticalLine

NewVerticalLineConstrained creates a VerticalLine where Height is constrained to equal a source int64 attribute URI.

func (*VerticalLine) Draw

func (v *VerticalLine) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw implements mancini.NewDrawer.

type WebInteractor

WebInteractor renders HTML content into its allocated body area as a scrollable viewport on a cached, fully-rendered offscreen image.

Lifecycle on each Draw:

ScrollY is an attribute so a partner Scrollbar can drive it via constraint (see WebScrollerVertical for the standard wrapper).

The HTML may not be well-formed — it could be a fragment like a paragraph or code block. The WebRenderEngine handles that gracefully; when it can’t, RenderToImage returns an error and Draw paints a magenta placeholder so the user gets visible feedback.

type WebInteractor struct {
    impl.Interactor

    // Scroll position (pixels from the top of cachedImage). Drives the
    // blit offset. Externally writable so a partner Scrollbar can bind
    // its Value attribute via constraint.
    ScrollY *attr.Attribute[int64]

    // ContentHeight is the natural pixel height of the last rendered
    // image. Published as an attribute so a partner Scrollbar can wire
    // its Max to (ContentHeight - panelHeight).
    ContentHeight *attr.Attribute[int64]
    // contains filtered or unexported fields
}

func NewWebInteractor

func NewWebInteractor(myName, parent string, engine WebRenderEngine) *WebInteractor

NewWebInteractor creates a WebInteractor with outside-in sizing. The engine is used to render HTML bytes into pixels.

func NewWebInteractorWithLayout

func NewWebInteractorWithLayout(myName string, lh *mancini.LayoutAttributes, engine WebRenderEngine) *WebInteractor

NewWebInteractorWithLayout creates a WebInteractor with pre-built layout attributes. Use this when the Width or Height needs to be a constraint rather than a plain value attribute (e.g. when wrapped in a scroller that constrains both axes).

func (*WebInteractor) Draw

func (w *WebInteractor) Draw(self mancini.Interactor, x, y, width, height int64, damage image.Rectangle)

Draw blits the cached image (re-rendering first if html or width changed) at -ScrollY offset, clipped to the panel area. The expensive layout/paint pipeline runs only when the cache is dirty; every other frame is a single image blit.

func (*WebInteractor) Scroll

func (w *WebInteractor) Scroll(dy int64)

Scroll adjusts ScrollY by dy pixels (positive = scroll down) and clamps to [0, ContentHeight - panelHeight]. The clamp is approximate — Draw clamps a second time using the actual panel height.

func (*WebInteractor) SetHTML

func (w *WebInteractor) SetHTML(html []byte)

SetHTML replaces the HTML content, invalidates the rendered cache, resets ScrollY to 0 (only if it’s a value attribute — when wrapped by a scroller it’s a constraint and writing would panic; the wrapper is responsible for resetting its source attribute), and marks the interactor for redraw.

ContentHeight is left alone here; renderCache will overwrite it on the next Draw with the fresh image’s natural height.

type WebRenderEngine

WebRenderEngine is the interface between the interactor framework and an HTML rendering engine. The concrete implementation lives outside mancini (e.g., in louis14’s resource package) and is passed to the WebInteractor constructor by the shepherd.

type WebRenderEngine interface {
    // RenderDC renders raw HTML bytes (possibly a fragment, not
    // necessarily well-formed) using the provided DrawContext.
    // The DC's translation and clipping define the render viewport.
    // viewportW and viewportH specify the layout dimensions.
    //
    // Returns a non-nil error if the engine could not produce output for
    // this HTML (parser rejected the markup, fetch failed, layout error,
    // etc.). The caller is expected to paint its own placeholder so the
    // user gets visible feedback instead of stale pixels.
    RenderDC(html []byte, dc mancini.DrawContext, viewportW, viewportH float64) error

    // RenderToImage lays the HTML out at the given fixed width and
    // renders into a freshly-allocated image whose height is the natural
    // content height. The caller caches the result and blits a viewport
    // from it on subsequent draws — no re-layout per scroll/redraw.
    //
    // Returns a non-nil error on parser or layout failure; in that case
    // the returned image is nil and the caller should paint a placeholder.
    RenderToImage(html []byte, width int) (*image.RGBA, error)
}

type WebScrollerVertical

WebScrollerVertical bundles a WebInteractor with a vertical Scrollbar to its right. All constraint wiring is internal:

Width and Height of WebScrollerVertical are constrained to the caller-supplied parent dimension URIs (mirrors ScrollerVertical). The internal WebInteractor occupies the whole area minus trackWidth on the right.

This is the standard wrapper for embedding the web component in a mancini layout — the mail app uses it for the message body panel.

type WebScrollerVertical struct {
    impl.Interactor
    impl.Parent

    // Web is the inner [WebInteractor] that renders HTML content.
    Web *WebInteractor
    // contains filtered or unexported fields
}

func NewWebScrollerVertical

func NewWebScrollerVertical(myName, parent string, theme mancini.Theme, pal mancini.Palette, trackWidth int64, engine WebRenderEngine) *WebScrollerVertical

NewWebScrollerVertical creates a WebScrollerVertical wrapping a fresh WebInteractor and a standard vertical Scrollbar. The wrapper’s outer Width/Height are value-typed, set by the parent layout each frame (e.g. ColumnPercentage propagates its child width). trackWidth is the pixel width reserved for the scrollbar.

Inside, the WebInteractor’s Width is constrained to (outer width - trackWidth) and its Height is constrained to outer height, so layout changes flow through the constraint network without manual wiring.

func (*WebScrollerVertical) Draw

func (wsv *WebScrollerVertical) Draw(self mancini.Interactor, x, y, w, h int64, damage image.Rectangle)

Draw positions the WebInteractor on the left and the Scrollbar on the right, then delegates to DrawChildren. Mirrors ScrollerVertical.Draw.

func (*WebScrollerVertical) SetHTML

func (wsv *WebScrollerVertical) SetHTML(html []byte)

SetHTML replaces the HTML content of the inner WebInteractor and resets the scrollbar to the top so the user always sees the start of the new message. Use this instead of Web.SetHTML when the scroller is wired up via constraints — directly calling Web.SetHTML works but leaves the scrollbar pinned to the previous message’s offset.

func (*WebScrollerVertical) WebInteractorName

func (wsv *WebScrollerVertical) WebInteractorName() string

WebInteractorName returns the constraint-system name of the inner WebInteractor — useful when callers want to constrain something against its layout attributes.

Generated by gomarkdoc