From 5eb623d6afb1fac77a66346a62818de17da90ade Mon Sep 17 00:00:00 2001 From: jimmy Date: Tue, 8 Sep 2026 00:59:36 +1200 Subject: [PATCH] Organize the lighting project and ship the combined XCHC show. Group workspaces, generators, stage map, and tests into clear folders, and add the unified cans+movers show plus a simple shared/individual RGBW control board. Co-authored-by: Cursor --- .gitignore | 4 + README.md | 47 + fixtures/Small-Eye-7-Mover.qxf | 8 +- scripts/figure8_small_eye.py | 1012 ++++++++++++ scripts/integrate_u_patterns.py | 366 +++++ scripts/make_simple_vc.py | 305 ++++ scripts/unify_vc.py | 268 ++++ shows/archive/qlc+.qxw | 269 ++++ shows/archive/xchc2.qxw | 115 ++ shows/simple.qxw | 1259 +++++++++++++++ shows/small_eye.qxw | 487 ++++++ shows/xchc.qxw | 2584 +++++++++++++++++++++++++++++++ stage/map.canvas.tsx | 279 ++++ stage/map.json | 67 + stage/map.svg | 97 ++ tests/test_small_eye.py | 294 ++++ xchc.qxw | 1191 -------------- 17 files changed, 7457 insertions(+), 1195 deletions(-) create mode 100644 .gitignore create mode 100644 scripts/figure8_small_eye.py create mode 100644 scripts/integrate_u_patterns.py create mode 100644 scripts/make_simple_vc.py create mode 100644 scripts/unify_vc.py create mode 100644 shows/archive/qlc+.qxw create mode 100644 shows/archive/xchc2.qxw create mode 100644 shows/simple.qxw create mode 100644 shows/small_eye.qxw create mode 100644 shows/xchc.qxw create mode 100644 stage/map.canvas.tsx create mode 100644 stage/map.json create mode 100644 stage/map.svg create mode 100755 tests/test_small_eye.py delete mode 100644 xchc.qxw diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..044b806 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +*.py[cod] +*.qxw~ +.DS_Store diff --git a/README.md b/README.md index 194e64e..3922e39 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,49 @@ # qlcplus +QLC+ show files, fixture definitions, and generators for the XCHC stage +(8× beamZ BCC145 parcans + 2× Small Eye 7 movers). + +## Layout + +``` +fixtures/ Fixture definitions (.qxf) — install into QLC+ if needed +shows/ Workspaces to open in QLC+ + xchc.qxw Main show (patterns + movers, unified VC) + simple.qxw Manual board: M1/M2 pads, shared + individual RGBW + small_eye.qxw Movers-only figure-of-8 show + archive/ Older scratch workspaces +scripts/ Generators / patchers for the shows +stage/ Stage map (SVG, JSON, canvas) +tests/ Art-Net / fixture helpers used by scripts +``` + +## Open in QLC+ + +- Full show: `shows/xchc.qxw` +- Simple RGBW + positions: `shows/simple.qxw` + +## Scripts + +```bash +# Rebuild simple manual board +python3 scripts/make_simple_vc.py + +# Rewrite can/mover patterns from stage layout +python3 scripts/integrate_u_patterns.py + +# Unify Patterns + Movers into one Show frame +python3 scripts/unify_vc.py + +# Figure-of-8 (live Art-Net or write/merge workspace) +python3 scripts/figure8_small_eye.py --write-qxw shows/small_eye.qxw +``` + +## Fixtures / DMX + +| Fixture | Mode | Addresses | +|---------|------|-----------| +| Small Eye 7 #1–#2 | 43ch | 1–43, 45–87 | +| BCC145 #1–#8 | 8ch | 87–150 (starts 87, 95, …) | + +Copy `.qxf` files from `fixtures/` into QLC+’s fixture library if the +manufacturer/model is missing. diff --git a/fixtures/Small-Eye-7-Mover.qxf b/fixtures/Small-Eye-7-Mover.qxf index d262774..36adde4 100644 --- a/fixtures/Small-Eye-7-Mover.qxf +++ b/fixtures/Small-Eye-7-Mover.qxf @@ -27,10 +27,10 @@ Prism - Index 0–60° - Rotate CCW fast to slow - Stop - Rotate CW slow to fast + Index 0–60° (no spin) + Spin CCW fast to slow + Stop + Spin CW slow to fast Prism diff --git a/scripts/figure8_small_eye.py b/scripts/figure8_small_eye.py new file mode 100644 index 0000000..8e2481d --- /dev/null +++ b/scripts/figure8_small_eye.py @@ -0,0 +1,1012 @@ +#!/usr/bin/env python3 +"""Figure-of-8 for the Small Eye 7 Mover (43ch). + +Traces QLC+'s Eight path (pan = -sin(2t), tilt = cos(t)), rides focus +with throw so the spot stays a similar size, and walks hue around the loop. +The whole 8 slowly drifts in a circle so it does not sit in one place. + + python3 scripts/figure8_small_eye.py + python3 scripts/figure8_small_eye.py --write-qxw shows/small_eye.qxw + python3 scripts/figure8_small_eye.py --merge-xchc shows/xchc.qxw + +Stop QLC+ output before live mode so the two sources do not fight. +Quit live mode with Ctrl+C (sends blackout). +""" + +from __future__ import annotations + +import argparse +import colorsys +import math +import sys +import time +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "tests")) + +from test_small_eye import ( + CH_BLUE, + CH_DIMMER, + CH_FOCUS, + CH_GREEN, + CH_PAN, + CH_RED, + CH_ROTATE, + CH_SPEED, + CH_STROBE, + CH_TILT, + CH_WHITE, + CH_ZOOM, + FIXTURE_CHANNELS, + ArtNetSender, + SmallEye, +) + +# Lens rotate: 0–127 index, 128–188 CCW spin, 189–193 stop, 194–255 CW spin. +# Mid CW — glass often only spins when zoom is fully narrow (0). +ROTATE_CW = 230 + +# 0-based QLC+ channel indices (same map as 43ch mode) +QLC_PAN = 0 +QLC_TILT = 2 +QLC_SPEED = 4 +QLC_ZOOM = 5 +QLC_ROTATE = 6 +QLC_FOCUS = 7 +QLC_DIMMER = 8 +QLC_STROBE = 9 +QLC_PIXEL0 = 10 # Red 1; each pixel is RGBW + +PAN_DEGREES = 540.0 +TILT_DEGREES = 270.0 +STEPS = 64 +LOOP_MS = 12000 +DRIFT_LOOPS = 8 # figure-8 cycles per one slow drift orbit +BLACKOUT_FADE_MS = 4000 + + +def clamp(value: float, lo: int = 0, hi: int = 255) -> int: + return max(lo, min(hi, int(round(value)))) + + +def eight_xy(t: float) -> tuple[float, float]: + """QLC+ Eight algorithm, iterator 0..2π → x,y in -1..1.""" + return -math.sin(2.0 * t), math.cos(t) + + +def hsv_rgb(hue: float) -> tuple[int, int, int]: + r, g, b = colorsys.hsv_to_rgb(hue % 1.0, 1.0, 1.0) + return clamp(r * 255), clamp(g * 255), clamp(b * 255) + + +def throw_factor(pan_off: float, tilt_off: float) -> float: + """Relative throw vs home aim, assuming a wall in front of the head.""" + pan_rad = math.radians(pan_off * PAN_DEGREES / 255.0) + tilt_rad = math.radians(tilt_off * TILT_DEGREES / 255.0) + denom = math.cos(pan_rad) * math.cos(tilt_rad) + return 1.0 / max(0.35, denom) + + +def focus_for_throw(throw: float, throw_min: float, throw_max: float, near: int, far: int) -> int: + if throw_max <= throw_min: + return near + t = (throw - throw_min) / (throw_max - throw_min) + t = max(0.0, min(1.0, t)) + # Farther throw → more focus (tighter / far), so the spot does not bloom. + return clamp(near + t * (far - near)) + + +def zoom_for_throw(throw: float, throw_min: float, throw_max: float, close: int, far: int) -> int: + """Narrower zoom at longer throw keeps projected size closer to constant.""" + if throw_max <= throw_min: + return close + t = (throw - throw_min) / (throw_max - throw_min) + t = max(0.0, min(1.0, t)) + return clamp(close + t * (far - close)) + + +class Figure8: + def __init__( + self, + pan_center: int = 128, + tilt_center: int = 80, + pan_amp: int = 28, + tilt_amp: int = 22, + focus_near: int = 70, + focus_far: int = 200, + zoom_close: int = 0, + zoom_far: int = 0, + dimmer: int = 255, + outer_dim: int = 60, + rotate: int = ROTATE_CW, + drift_pan: int = 18, + drift_tilt: int = 12, + drift_period: float = DRIFT_LOOPS * LOOP_MS / 1000.0, + ): + self.pan_center = pan_center + self.tilt_center = tilt_center + self.pan_amp = pan_amp + self.tilt_amp = tilt_amp + self.focus_near = focus_near + self.focus_far = focus_far + self.zoom_close = zoom_close + self.zoom_far = zoom_far + self.dimmer = dimmer + self.outer_dim = clamp(outer_dim) + self.rotate = clamp(rotate) + self.drift_pan = drift_pan + self.drift_tilt = drift_tilt + self.drift_period = max(0.001, drift_period) + + def window_rect(self) -> tuple[int, int, int, int]: + """Inclusive pan/tilt box centred on home, used by the XY pad.""" + return ( + clamp(self.pan_center - self.pan_amp), + clamp(self.pan_center + self.pan_amp), + clamp(self.tilt_center - self.tilt_amp), + clamp(self.tilt_center + self.tilt_amp), + ) + + def drift_offset(self, elapsed: float) -> tuple[float, float]: + if self.drift_pan == 0 and self.drift_tilt == 0: + return 0.0, 0.0 + phase = 2.0 * math.pi * elapsed / self.drift_period + return self.drift_pan * math.sin(phase), self.drift_tilt * math.cos(phase) + + def point(self, t: float, elapsed: float = 0.0) -> dict[str, int]: + x, y = eight_xy(t) + dx, dy = self.drift_offset(elapsed) + pan_off = dx + x * self.pan_amp + tilt_off = dy + y * self.tilt_amp + h_min, h_max, v_min, v_max = self.window_rect() + r, g, b = hsv_rgb(t / (2 * math.pi)) + scale = self.outer_dim / 255.0 + return { + "pan": max(h_min, min(h_max, clamp(self.pan_center + pan_off))), + "tilt": max(v_min, min(v_max, clamp(self.tilt_center + tilt_off))), + "focus": self.focus_near, + "zoom": self.zoom_close, + "rotate": self.rotate, + "red": r, + "green": g, + "blue": b, + "outer_red": clamp(r * scale), + "outer_green": clamp(g * scale), + "outer_blue": clamp(b * scale), + "dimmer": self.dimmer, + } + + +def apply_point(fixture: SmallEye, pt: dict[str, int]): + fixture.set(CH_PAN, pt["pan"]) + fixture.set(CH_TILT, pt["tilt"]) + fixture.set(CH_SPEED, 0) + fixture.set(CH_ZOOM, pt["zoom"]) + fixture.set(CH_ROTATE, pt["rotate"]) + fixture.set(CH_FOCUS, pt["focus"]) + fixture.set(CH_DIMMER, pt["dimmer"]) + fixture.set(CH_STROBE, 0) + fixture.set(CH_WHITE, 0) + # Pixel 1 = centre (full); pixels 2–7 = outer ring (dim) + fixture.set(CH_RED, pt["red"]) + fixture.set(CH_GREEN, pt["green"]) + fixture.set(CH_BLUE, pt["blue"]) + for pixel in range(1, 7): + base = CH_RED + pixel * 4 + fixture.set(base, pt["outer_red"]) + fixture.set(base + 1, pt["outer_green"]) + fixture.set(base + 2, pt["outer_blue"]) + fixture.set(base + 3, 0) + + +def scene_fixture_val(channels: dict[int, int]) -> str: + parts = [] + for ch in sorted(channels): + parts.append(f"{ch},{channels[ch]}") + return ",".join(parts) + + +def bound_scene_channels(fig: Figure8) -> dict[int, int]: + # Pan/tilt are owned by the XY-pad EFX so this look scene does not fight them. + ch = { + QLC_SPEED: 0, + QLC_ZOOM: fig.zoom_close, + QLC_ROTATE: fig.rotate, + QLC_FOCUS: fig.focus_near, + QLC_DIMMER: fig.dimmer, + QLC_STROBE: 0, + } + for pixel in range(7): + base = QLC_PIXEL0 + pixel * 4 + ch[base] = 0 + ch[base + 1] = 0 + ch[base + 2] = 0 + ch[base + 3] = 0 + return ch + + +def sequence_step_text( + fixture_channels: list[tuple[int, dict[int, int]]], + always: tuple[int, ...] = (), +) -> str: + """QLC+ Sequence step: fixtureID:ch,val,... — zeros omitted unless in always.""" + chunks = [] + for fixture_id, channels in fixture_channels: + kept = [ + (ch, val) + for ch, val in sorted(channels.items()) + if val or ch in always + ] + if not kept: + continue + bits = [f"{fixture_id}:"] + for i, (ch, val) in enumerate(kept): + if i: + bits.append(",") + bits.append(f"{ch},{val}") + chunks.append("".join(bits)) + return ":".join(chunks) + + +def point_channels(fig: Figure8, pt: dict[str, int]) -> dict[int, int]: + ch = bound_scene_channels(fig) + ch[QLC_ZOOM] = pt["zoom"] + ch[QLC_ROTATE] = pt["rotate"] + ch[QLC_FOCUS] = pt["focus"] + ch[QLC_DIMMER] = pt["dimmer"] + ch[QLC_PIXEL0] = pt["red"] + ch[QLC_PIXEL0 + 1] = pt["green"] + ch[QLC_PIXEL0 + 2] = pt["blue"] + ch[QLC_PIXEL0 + 3] = 0 + for pixel in range(1, 7): + base = QLC_PIXEL0 + pixel * 4 + ch[base] = pt["outer_red"] + ch[base + 1] = pt["outer_green"] + ch[base + 2] = pt["outer_blue"] + ch[base + 3] = 0 + return ch + + +def exit_park_channels( + fig: Figure8, + lit: set[int], + *, + rgb: tuple[int, int, int] = (255, 210, 160), + outer: int = 90, + dimmer: int | None = None, + rotate: int = 191, +) -> dict[int, int]: + """Home aim, rotate stopped, selected pixels on (0 = centre, 1–6 = ring).""" + ch = { + QLC_PAN: fig.pan_center, + QLC_TILT: fig.tilt_center, + QLC_SPEED: 0, + QLC_ZOOM: fig.zoom_close, + QLC_ROTATE: rotate, + QLC_FOCUS: fig.focus_near, + QLC_DIMMER: fig.dimmer if dimmer is None else dimmer, + QLC_STROBE: 0, + } + r, g, b = rgb + for pixel in range(7): + base = QLC_PIXEL0 + pixel * 4 + if pixel in lit: + scale = 1.0 if pixel == 0 else outer / 255.0 + ch[base] = clamp(r * scale) + ch[base + 1] = clamp(g * scale) + ch[base + 2] = clamp(b * scale) + else: + ch[base] = 0 + ch[base + 1] = 0 + ch[base + 2] = 0 + ch[base + 3] = 0 + return ch + + +def fixture_vals_xml(fixture_ids: tuple[int, ...], channels: dict[int, int]) -> str: + return "\n".join( + f' {scene_fixture_val(channels)}' + for fid in fixture_ids + ) + + +def exit_functions_xml( + fig: Figure8, + fixture_ids: tuple[int, ...], + fn_base: int = 0, +) -> str: + """xchc-style exits adapted for the bee-eye ring + home park.""" + def F(n: int) -> int: + return fn_base + n + + blackout = F(2) + # --- Ring Collapse (Fill Unfill / Center Out, reversed as an exit) --- + collapse_sets = [ + {0, 1, 2, 3, 4, 5, 6}, + {0, 1, 2, 3, 4, 5}, + {0, 1, 2, 3, 4}, + {0, 1, 2, 3}, + {0, 1}, + {0}, + set(), + ] + parts: list[str] = [] + collapse_ids = list(range(5, 5 + len(collapse_sets))) + for sid, lit in zip(collapse_ids, collapse_sets): + dim = 0 if not lit else fig.dimmer + ch = exit_park_channels(fig, lit, dimmer=dim, rotate=191) + parts.append( + f""" + +{fixture_vals_xml(fixture_ids, ch)} + """ + ) + collapse_steps = "\n".join( + f' {F(sid)}' + for i, sid in enumerate(collapse_ids) + ) + parts.append( + f""" + + Forward + SingleShot + +{collapse_steps} + """ + ) + + # --- Ring Chase Out (Scanner / Theater, one pixel then black) --- + chase_sets = [{p} for p in range(1, 7)] + [{0}, set()] + chase_ids = list(range(13, 13 + len(chase_sets))) + for sid, lit in zip(chase_ids, chase_sets): + dim = 0 if not lit else fig.dimmer + rgb = (255, 255, 255) if lit == {0} else (255, 210, 160) + ch = exit_park_channels(fig, lit, rgb=rgb, outer=180, dimmer=dim, rotate=191) + parts.append( + f""" + +{fixture_vals_xml(fixture_ids, ch)} + """ + ) + chase_steps = "\n".join( + f' {F(sid)}' + for i, sid in enumerate(chase_ids) + ) + parts.append( + f""" + + Forward + SingleShot + +{chase_steps} + """ + ) + + # --- Home Fade (sweep home / soft centre, then black — common live outro) --- + home = exit_park_channels(fig, {0}, rgb=(255, 200, 140), dimmer=180, rotate=191) + # --- Move in Black (kill light+spin first, then park unseen) --- + mib_dark = exit_park_channels(fig, set(), dimmer=0, rotate=191) + parts.append( + f""" + +{fixture_vals_xml(fixture_ids, home)} + + + + Forward + SingleShot + + {F(22)} + {blackout} + + + +{fixture_vals_xml(fixture_ids, mib_dark)} + + + + Forward + SingleShot + + {F(24)} + {F(24)} + {blackout} + """ + ) + return "\n".join(parts) + + +def vc_appearance(fg: str = "Default", bg: str = "Default", frame: str = "Sunken") -> str: + return f""" + {frame} + {fg} + {bg} + None + Default + """ + + +def vc_slider( + widget_id: int, + caption: str, + x: int, + y: int, + channels: list[int], + color: str, + click_go: str = "None", + width: int = 50, + height: int = 380, + fixture_ids: tuple[int, ...] = (0, 1), + value: int = 0, +) -> str: + ch_xml = "\n".join( + f' {ch}' + for fid in fixture_ids + for ch in channels + ) + return f""" + +{vc_appearance(color)} + Level + + +{ch_xml} + + + 4294967295 + + """ + + +def vc_widgets( + fig: Figure8, + fixture_ids: tuple[int, ...] = (0, 1), + fn_base: int = 0, + widget_base: int = 0, + origin: tuple[int, int] = (20, 20), +) -> str: + """Buttons, speed dial, XY pad, and monitor sliders (grab to override).""" + def F(n: int) -> int: + return fn_base + n + + def W(n: int) -> int: + return widget_base + n + + ox, oy = origin + reds = [QLC_PIXEL0] + greens = [QLC_PIXEL0 + 1] + blues = [QLC_PIXEL0 + 2] + outer_rgb = [QLC_PIXEL0 + p * 4 + c for p in range(1, 7) for c in (0, 1, 2)] + slider_y = oy + 100 + slider_x0 = ox + 410 + slider_w = 44 + gap = 6 + specs = [ + (4, "Pan", [QLC_PAN], "4294944000", "None", 0), + (5, "Tilt", [QLC_TILT], "4278255615", "None", 0), + (6, "Zoom", [QLC_ZOOM], "4294967040", "None", fig.zoom_close), + (7, "Focus", [QLC_FOCUS], "4294902015", "None", fig.focus_near), + (8, "Dim", [QLC_DIMMER], "4294967295", "None", fig.dimmer), + (9, "R", reds, "4294901760", "Red", 0), + (10, "G", greens, "4278255360", "Green", 0), + (11, "B", blues, "4278190335", "Blue", 0), + (12, "Outer", outer_rgb, "4288256409", "None", fig.outer_dim), + (13, "Rotate", [QLC_ROTATE], "4291611852", "None", fig.rotate), + ] + sliders = [] + for i, (wid, name, chans, color, click, value) in enumerate(specs): + sliders.append( + vc_slider( + W(wid), + name, + slider_x0 + i * (slider_w + gap), + slider_y, + chans, + color, + click, + value=value, + fixture_ids=fixture_ids, + ) + ) + h_min, h_max, v_min, v_max = fig.window_rect() + fixture_axes = "\n".join( + f""" + + + """ + for fid in fixture_ids + ) + return f""" + + None + Default + Default + None + Default + + + True + True + True + False + + + + + + + + + +{vc_appearance()} + 108 + + + {F(1)} + {F(3)} + + + +{vc_appearance()} +{fixture_axes} + + + + + EFX + Figure of 8 + {F(3)} + + +{chr(10).join(sliders)}""" + + +def mover_functions_xml( + fig: Figure8, + fixture_ids: tuple[int, ...] = (0, 1), + fn_base: int = 0, + loop_s: float = LOOP_MS / 1000.0, +) -> str: + """Figure-of-8 look/sequence/EFX/collection + exit cues for the movers.""" + def F(n: int) -> int: + return fn_base + n + + bound = bound_scene_channels(fig) + n_values = len(bound) * len(fixture_ids) + step_ms = max(1, int(round(loop_s * 1000 / STEPS))) + steps_xml = [] + for i in range(STEPS): + t = 2 * math.pi * i / STEPS + ch = point_channels(fig, fig.point(t, 0.0)) + text = sequence_step_text( + [(fid, ch) for fid in fixture_ids], + always=(QLC_ZOOM, QLC_ROTATE), + ) + steps_xml.append( + f' {text}' + ) + + blackout = {ch: 0 for ch in range(FIXTURE_CHANNELS)} + bound_vals = "\n".join( + f' {scene_fixture_val(bound)}' for fid in fixture_ids + ) + blackout_vals = "\n".join( + f' {scene_fixture_val(blackout)}' for fid in fixture_ids + ) + efx_fixtures = "\n".join( + f""" + {fid} + Forward + 255 + """ + for fid in fixture_ids + ) + efx_ms = max(1, int(round(loop_s * 1000))) + return f""" + +{bound_vals} + + + + Forward + Loop + +{chr(10).join(steps_xml)} + + + +{blackout_vals} + + +{efx_fixtures} + Parallel + + Forward + Loop + Eight + {fig.pan_amp} + {fig.tilt_amp} + 0 + + {fig.pan_center} + 1 + 0 + + + {fig.tilt_center} + 1 + 0 + + + + {F(0)} + {F(1)} + {F(3)} + +{exit_functions_xml(fig, fixture_ids, fn_base=fn_base)}""" + + +def merge_movers_into_xchc( + xchc_path: Path, + fig: Figure8, + address: int = 0, + address2: int = 44, + fixture_ids: tuple[int, ...] = (8, 9), + fn_base: int = 73, + widget_base: int = 100, +): + """Patch Small Eye movers + figure-8 cues into an existing xchc workspace.""" + text = xchc_path.read_text() + if "Small Eye 7" in text: + raise SystemExit(f"{xchc_path} already has Small Eye fixtures — aborting") + + fixtures = "\n".join( + [ + fixture_xml(fixture_ids[0], "Small Eye 7 #1", address), + fixture_xml(fixture_ids[1], "Small Eye 7 #2", address2), + ] + ) + group = f""" + Small Eye Movers + + 0 + 0 + """ + functions = mover_functions_xml(fig, fixture_ids=fixture_ids, fn_base=fn_base) + # Soft Blackout (72) should also kill movers for a full stage black. + black = ",".join(f"{ch},0" for ch in range(FIXTURE_CHANNELS)) + soft_extra = "\n".join( + f' {black}' for fid in fixture_ids + ) + if 'Name="Soft Blackout"' in text: + text = text.replace( + """ + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + """, + f""" + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 +{soft_extra} + """, + ) + + # Insert fixtures after last BCC145 fixture block. + marker = """ + BCC145 Line""" + if marker not in text: + raise SystemExit("Could not find BCC145 fixture group in xchc") + text = text.replace(marker, fixtures + "\n" + group + "\n" + marker, 1) + + # Insert mover functions before Monitor. + mon = " + Arial,12,-1,5,50,0,0,0,0,0 + 0 + 0 + + + + + + + + + + """, + f""" + Arial,12,-1,5,50,0,0,0,0,0 + 0 + 0 + + + + + + + + + + + + """, + ) + + widgets = vc_widgets( + fig, + fixture_ids=fixture_ids, + fn_base=fn_base, + widget_base=widget_base, + origin=(720, 10), + ) + # Insert mover VC before closing of VirtualConsole root. + frame_end = text.rfind(" \n ") + if frame_end < 0: + raise SystemExit("Could not find VirtualConsole frame end") + text = text[:frame_end] + widgets + "\n" + text[frame_end:] + + xchc_path.write_text(text) + print( + f"Merged movers into {xchc_path} " + f"(fixtures {fixture_ids[0]},{fixture_ids[1]} @ DMX {address + 1},{address2 + 1}; " + f"functions {fn_base}–{fn_base + 25})" + ) + + +def fixture_xml(fid: int, name: str, address: int) -> str: + return f""" + Small Eye 7 + Mover + 43 Channel + {fid} + {name} + 0 +
{address}
+ {FIXTURE_CHANNELS} +
""" + + +def write_qxw( + path: Path, + fig: Figure8, + address: int = 0, + address2: int = 44, + loop_s: float = LOOP_MS / 1000.0, +): + fixture_ids = (0, 1) + functions = mover_functions_xml(fig, fixture_ids=fixture_ids, loop_s=loop_s) + widgets = vc_widgets(fig, fixture_ids=fixture_ids) + xml = f""" + + + + Q Light Controller Plus + 4.12.7 + Jimmy + + + + + + + + + + + + +{fixture_xml(0, "Small Eye 7 #1", address)} +{fixture_xml(1, "Small Eye 7 #2", address2)} +{functions} + + Arial,12,-1,5,50,0,0,0,0,0 + 0 + 0 + + + + + + + + + None + Default + Default + None + Default + +{widgets} + + + + + + + + + + +""" + path.write_text(xml) + h_min, h_max, v_min, v_max = fig.window_rect() + print( + f"Wrote {path} (EFX eight centred {fig.pan_center},{fig.tilt_center} " + f"in pad window pan {h_min}–{h_max} tilt {v_min}–{v_max})" + ) + + +def run_live(args, fig: Figure8): + print( + f"Art-Net → {args.ip} universe {args.universe} " + f"#1 start {args.address} #2 start {args.address2} (43ch)" + ) + print( + f"Figure-8 {args.loop:.0f}s, drift orbit {fig.drift_period:.0f}s " + f"(pan ±{fig.drift_pan}, tilt ±{fig.drift_tilt})." + ) + print("Stop QLC+ Art-Net output first. Ctrl+C to blackout and quit.") + sender = ArtNetSender(args.ip, universe=args.universe) + fixtures = [SmallEye(sender, args.address), SmallEye(sender, args.address2)] + period = args.loop / STEPS + try: + for fixture in fixtures: + fixture.park_light( + pan=fig.pan_center, + tilt=fig.tilt_center, + dimmer=fig.dimmer, + white=0, + rgb=0, + ) + t0 = time.monotonic() + while True: + elapsed = time.monotonic() - t0 + t = (elapsed / args.loop) * 2 * math.pi + pt = fig.point(t, elapsed) + for fixture in fixtures: + apply_point(fixture, pt) + time.sleep(min(period, 0.025)) + except KeyboardInterrupt: + print("\nstopped") + finally: + sender.close() + + +def parse_args(): + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--ip", default="192.168.1.228", help="Art-Net destination") + p.add_argument("--universe", type=int, default=0) + p.add_argument("--address", type=int, default=1, help="Fixture 1 DMX start, 1-based") + p.add_argument("--address2", type=int, default=45, help="Fixture 2 DMX start, 1-based") + p.add_argument("--loop", type=float, default=LOOP_MS / 1000.0, help="Seconds per figure-8") + p.add_argument("--pan-center", type=int, default=128) + p.add_argument("--tilt-center", type=int, default=80) + p.add_argument("--pan-amp", type=int, default=28, help="Half-width of the 8 (DMX)") + p.add_argument("--tilt-amp", type=int, default=22, help="Half-height of the 8 (DMX)") + p.add_argument("--focus-near", type=int, default=70, help="Focus at closest throw") + p.add_argument("--focus-far", type=int, default=200, help="Focus at farthest throw") + p.add_argument("--zoom-close", type=int, default=0, help="Zoom at closest throw (0 = tight)") + p.add_argument("--zoom-far", type=int, default=0, help="Zoom at farthest throw (0 = tight)") + p.add_argument("--outer-dim", type=int, default=60, help="Outer ring brightness 0–255") + p.add_argument( + "--rotate", + type=int, + default=ROTATE_CW, + help="Lens rotate (128–188 CCW, 194–255 CW, 0 = off)", + ) + p.add_argument("--drift-pan", type=int, default=18, help="How far the 8 wanders in pan") + p.add_argument("--drift-tilt", type=int, default=12, help="How far the 8 wanders in tilt") + p.add_argument( + "--drift-period", + type=float, + default=DRIFT_LOOPS * LOOP_MS / 1000.0, + help="Seconds for one full drift orbit (default 8 figure-8s)", + ) + p.add_argument("--write-qxw", metavar="PATH", help="Write a QLC+ workspace instead of live output") + p.add_argument( + "--merge-xchc", + metavar="PATH", + help="Add Small Eye movers + figure-8 cues into an existing xchc.qxw", + ) + return p.parse_args() + + +def main(): + args = parse_args() + fig = Figure8( + pan_center=args.pan_center, + tilt_center=args.tilt_center, + pan_amp=args.pan_amp, + tilt_amp=args.tilt_amp, + focus_near=args.focus_near, + focus_far=args.focus_far, + zoom_close=args.zoom_close, + zoom_far=args.zoom_far, + outer_dim=args.outer_dim, + rotate=args.rotate, + drift_pan=args.drift_pan, + drift_tilt=args.drift_tilt, + drift_period=args.drift_period, + ) + if args.merge_xchc: + merge_movers_into_xchc( + Path(args.merge_xchc), + fig, + address=max(0, args.address - 1), + address2=max(0, args.address2 - 1), + ) + return + if args.write_qxw: + write_qxw( + Path(args.write_qxw), + fig, + address=max(0, args.address - 1), + address2=max(0, args.address2 - 1), + loop_s=args.loop, + ) + return + if not 1 <= args.address <= 512 or not 1 <= args.address2 <= 512: + sys.exit("address must be 1–512") + run_live(args, fig) + + +if __name__ == "__main__": + main() diff --git a/scripts/integrate_u_patterns.py b/scripts/integrate_u_patterns.py new file mode 100644 index 0000000..b54f29b --- /dev/null +++ b/scripts/integrate_u_patterns.py @@ -0,0 +1,366 @@ +#!/usr/bin/env python3 +"""Rewrite xchc pattern scenes so the U of cans + centre movers act as one. + +Building 7 m wide. Coordinates in metres: + X = 0 at centre line, +X to the right + Y = 0 at the row of 4, +Y toward audience (in front of the 4) + +Audience + 1 8 ← wall-mounted sides @ 2.4 m in front of the 4 + 2 M1 M2 7 ← wall-mounted sides @ 1.2 m; movers @ 1.1 m, ±0.3 m + 3 — 4 — 5 — 6 ← row of 4 at ±0.6 m and ±1.8 m from centre + +Building 7 m → side walls at ±3.5 m. #1,#2 left wall; #7,#8 right wall. +#1 front left. Movers 1.1 m in front of the row of 4, 0.3 m off centre. +""" + +from __future__ import annotations + +import re +from pathlib import Path + +CANS = list(range(8)) +MOVERS = (8, 9) + +WALL = 3.5 # building half-width + +# Fixture ID → (x_m, y_m) — Y=0 = row of 4; +Y toward audience +LAYOUT_M = { + 0: (-WALL, 2.4), # #1 front left — left wall + 1: (-WALL, 1.2), # #2 — left wall + 2: (-1.8, 0.0), # #3 row of 4 + 3: (-0.6, 0.0), # #4 row of 4 + 4: (0.6, 0.0), # #5 row of 4 + 5: (1.8, 0.0), # #6 row of 4 + 6: (WALL, 1.2), # #7 — right wall + 7: (WALL, 2.4), # #8 front right — right wall + 8: (-0.3, 1.1), # Small Eye #1 — 0.3 m off centre, 1.1 m in front of row of 4 + 9: (0.3, 1.1), # Small Eye #2 — 0.3 m off centre, 1.1 m in front of row of 4 +} + +# Walk U: #1 → #2 → along row of 4 L→R → #7 → #8 +U_WALK = [0, 1, 2, 3, 4, 5, 6, 7] +LEFT_SIDE = {0, 1} +RIGHT_SIDE = {6, 7} +ROW4 = {2, 3, 4, 5} +RINGS = [ + {8, 9}, + {8, 9, 3, 4}, # movers + centre of row of 4 + {8, 9, *ROW4}, + {8, 9, *CANS}, +] +LEFT = LEFT_SIDE | {2, 3, 8} +RIGHT = RIGHT_SIDE | {4, 5, 9} + +GRID_W = 7.0 +GRID_H = 3.2 +X_ORIGIN = -3.5 + + +def m_to_grid(x_m: float, y_m: float) -> tuple[float, float]: + gx = round(x_m - X_ORIGIN, 2) + # Row of 4 (y=0) toward top; audience / front sides toward bottom + gy = round(y_m, 2) + return gx, gy + + +COLORS = { + "Red": (255, 0, 0), + "Orange": (255, 127, 0), + "Yellow": (255, 255, 0), + "Green": (0, 255, 0), + "Cyan": (0, 255, 255), + "Blue": (0, 0, 255), + "Violet": (127, 0, 255), + "Magenta": (255, 0, 255), + "White": (255, 255, 255), +} + +RAINBOW = [ + (255, 0, 0), + (255, 127, 0), + (255, 255, 0), + (0, 255, 0), + (0, 255, 255), + (0, 0, 255), + (127, 0, 255), + (255, 0, 255), +] + + +def can_channels(r: int, g: int, b: int, *, white: int = 0, on: bool = True) -> str: + if not on: + return "0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0" + if white: + return f"1,0,2,0,3,0,4,0,5,{white},6,0,7,0" + return f"1,0,2,{r},3,{g},4,{b},5,0,6,0,7,0" + + +def mover_channels(r: int, g: int, b: int, *, on: bool = True, dim: int = 255) -> str: + if not on or (r == g == b == 0): + dim = 0 + r = g = b = 0 + parts = [ + 0, 128, 2, 80, 4, 0, 5, 0, 6, 191, 7, 70, 8, dim, 9, 0, + 10, r, 11, g, 12, b, 13, 0, + ] + for pixel in range(1, 7): + base = 10 + pixel * 4 + parts.extend([base, 0, base + 1, 0, base + 2, 0, base + 3, 0]) + return ",".join(str(x) for x in parts) + + +def fixture_vals( + lit: dict[int, tuple[int, int, int] | None], *, white_ids: set[int] | None = None +) -> str: + white_ids = white_ids or set() + lines = [] + for fid in list(CANS) + list(MOVERS): + rgb = lit.get(fid) + if rgb is None: + ch = ( + mover_channels(0, 0, 0, on=False) + if fid in MOVERS + else can_channels(0, 0, 0, on=False) + ) + lines.append(f' {ch}') + continue + r, g, b = rgb + if fid in MOVERS: + ch = mover_channels(r, g, b) + elif fid in white_ids: + ch = can_channels(0, 0, 0, white=255) + else: + ch = can_channels(r, g, b) + lines.append(f' {ch}') + return "\n".join(lines) + + +def scene( + fid: int, + name: str, + lit: dict, + *, + white_ids: set[int] | None = None, + fade: int = 0, +) -> str: + return f""" + +{fixture_vals(lit, white_ids=white_ids)} + """ + + +def replace_function(text: str, function_id: int, new_xml: str) -> str: + pattern = re.compile( + rf' \n', + re.MULTILINE, + ) + if not pattern.search(text): + raise SystemExit(f"Function ID {function_id} not found") + return pattern.sub(new_xml.rstrip() + "\n", text, count=1) + + +def all_color(rgb: tuple[int, int, int]) -> dict: + lit = {i: rgb for i in CANS} + lit[8] = rgb + lit[9] = rgb + return lit + + +def monitor_xml() -> str: + items = [] + for fid, (xm, ym) in LAYOUT_M.items(): + gx, gy = m_to_grid(xm, ym) + items.append(f' ') + return f""" + Arial,12,-1,5,50,0,0,0,0,0 + 0 + 0 + +{chr(10).join(items)} + """ + + +def main(): + path = Path(__file__).resolve().parents[1] / "shows" / "xchc.qxw" + text = path.read_text() + + for i, (name, rgb) in enumerate(COLORS.items()): + white_ids = set(CANS) if name == "White" else None + text = replace_function(text, i, scene(i, name, all_color(rgb), white_ids=white_ids)) + + for step in range(8): + lit = {} + for ci, can in enumerate(U_WALK): + lit[can] = RAINBOW[(ci + step) % 8] + lit[8] = RAINBOW[(3 + step) % 8] + lit[9] = RAINBOW[(4 + step) % 8] + text = replace_function(text, 10 + step, scene(10 + step, f"Rainbow {step + 1}", lit)) + + blue, red = (0, 0, 255), (255, 0, 0) + odd_blue, odd_red = {}, {} + for i in CANS: + if i % 2 == 0: + odd_blue[i], odd_red[i] = blue, red + else: + odd_blue[i], odd_red[i] = red, blue + odd_blue[8], odd_blue[9] = blue, red + odd_red[8], odd_red[9] = red, blue + text = replace_function(text, 20, scene(20, "Odd Blue Even Red", odd_blue)) + text = replace_function(text, 21, scene(21, "Odd Red Even Blue", odd_red)) + + off = {i: None for i in list(CANS) + list(MOVERS)} + text = replace_function(text, 23, scene(23, "Test Off", off)) + text = replace_function(text, 72, scene(72, "Soft Blackout", off, fade=4000)) + + for i, can in enumerate(U_WALK): + lit = {fid: None for fid in list(CANS) + list(MOVERS)} + lit[can] = (255, 255, 255) + text = replace_function( + text, 33 + i, scene(33 + i, f"Scanner {i + 1}", lit, white_ids={can}) + ) + for mid, name, ids in ((99, "Scanner Movers", {8, 9}), (100, "Scanner Off", set())): + lit = {fid: None for fid in list(CANS) + list(MOVERS)} + for m in ids: + lit[m] = (255, 255, 255) + block = scene(mid, name, lit) + if f'Function ID="{mid}"' in text: + text = replace_function(text, mid, block) + else: + text = text.replace( + ' ', + block + '\n ', + 1, + ) + + scanner_steps = "\n".join( + f' {sid}' + for i, sid in enumerate([*range(33, 41), 99, 100]) + ) + text = replace_function( + text, + 41, + f""" + + Forward + Loop + +{scanner_steps} + """, + ) + + for n in range(1, 9): + lit = {fid: None for fid in list(CANS) + list(MOVERS)} + for can in U_WALK[:n]: + lit[can] = (255, 255, 255) + if n >= 3: + lit[8] = lit[9] = (255, 255, 255) + white = {c for c in U_WALK[:n]} + text = replace_function( + text, 41 + n, scene(41 + n, f"Fill {n}", lit, white_ids=white) + ) + + for i, ring in enumerate(RINGS): + lit = {fid: None for fid in list(CANS) + list(MOVERS)} + white = {f for f in ring if f in CANS} + for fid in ring: + lit[fid] = (255, 255, 255) + text = replace_function( + text, 51 + i, scene(51 + i, f"Center {i + 1}", lit, white_ids=white) + ) + + for i, (ids, name) in enumerate( + [ + ({0, 7}, "Pairs 1"), + ({1, 6}, "Pairs 2"), + ({2, 5}, "Pairs 3"), + ({3, 4, 8, 9}, "Pairs 4"), + ] + ): + lit = {fid: None for fid in list(CANS) + list(MOVERS)} + white = {f for f in ids if f in CANS} + for fid in ids: + lit[fid] = (255, 255, 255) + text = replace_function(text, 56 + i, scene(56 + i, name, lit, white_ids=white)) + + lbrr = {fid: None for fid in list(CANS) + list(MOVERS)} + lrbr = {fid: None for fid in list(CANS) + list(MOVERS)} + for fid in LEFT: + lbrr[fid], lrbr[fid] = (0, 0, 255), (255, 0, 0) + for fid in RIGHT: + lbrr[fid], lrbr[fid] = (255, 0, 0), (0, 0, 255) + text = replace_function(text, 61, scene(61, "Left Blue Right Red", lbrr)) + text = replace_function(text, 62, scene(62, "Left Red Right Blue", lrbr)) + + for step in range(3): + lit = {fid: None for fid in list(CANS) + list(MOVERS)} + white = set() + for can in CANS: + if can % 3 == step: + lit[can] = (255, 255, 255) + white.add(can) + if step == 0: + lit[8] = (255, 255, 255) + elif step == 1: + lit[9] = (255, 255, 255) + else: + lit[8] = lit[9] = (255, 200, 140) + text = replace_function( + text, 64 + step, scene(64 + step, f"Theater {step + 1}", lit, white_ids=white) + ) + + collapse_steps = "\n".join( + f' {sid}' + for i, sid in enumerate([54, 53, 52, 51, 23]) + ) + text = replace_function( + text, + 68, + f""" + + Forward + SingleShot + +{collapse_steps} + """, + ) + + chase_steps = "\n".join( + f' {sid}' + for i, sid in enumerate([*range(33, 41), 99, 23]) + ) + text = replace_function( + text, + 69, + f""" + + Forward + SingleShot + +{chase_steps} + """, + ) + + text = replace_function( + text, 70, scene(70, "Home Soft", all_color((255, 180, 80)), fade=2500) + ) + + text = re.sub( + r' [\s\S]*?', + lambda _m: monitor_xml(), + text, + count=1, + ) + text = text.replace("BCC145 Line", "BCC145 U", 1) + + path.write_text(text) + print("Updated", path) + print("Y=0 row of 4; +Y toward audience (in front of the 4)") + for fid in sorted(LAYOUT_M): + x, y = LAYOUT_M[fid] + label = f"Can #{fid + 1}" if fid < 8 else f"Mover #{fid - 7}" + print(f" {label:10} x={x:+.1f} y={y:.1f}") + + +if __name__ == "__main__": + main() diff --git a/scripts/make_simple_vc.py b/scripts/make_simple_vc.py new file mode 100644 index 0000000..12e85a5 --- /dev/null +++ b/scripts/make_simple_vc.py @@ -0,0 +1,305 @@ +#!/usr/bin/env python3 +"""Generate shows/simple.qxw — per-mover position + shared and individual RGBW.""" + +from __future__ import annotations + +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +OUT = ROOT / "shows" / "simple.qxw" + +# Fixture IDs match shows/xchc.qxw +CANS = list(range(8)) # BCC145 #1–#8 +M1, M2 = 8, 9 +MOVERS = [M1, M2] + +# Can 8ch: Dim=0, R=2, G=3, B=4, W=5 +# Mover 43ch: Center Bright=8; RGBW heads 1–7 +MOVER_R = [10, 14, 18, 22, 26, 30, 34] +MOVER_G = [11, 15, 19, 23, 27, 31, 35] +MOVER_B = [12, 16, 20, 24, 28, 32, 36] +MOVER_W = [13, 17, 21, 25, 29, 33, 37] + +COLORS = [ + ("R", 2, MOVER_R, "4294901760", "Red"), + ("G", 3, MOVER_G, "4278255360", "Green"), + ("B", 4, MOVER_B, "4278190335", "Blue"), + ("W", 5, MOVER_W, "4294967295", "None"), +] + + +def appearance( + fg: str = "Default", + bg: str = "Default", + frame: str = "Sunken", +) -> str: + return f""" + {frame} + {fg} + {bg} + None + Default + """ + + +def slider( + wid: int, + caption: str, + x: int, + y: int, + w: int, + h: int, + channels: list[tuple[int, int]], + *, + value: int = 0, + fg: str = "Default", + cng: str = "None", +) -> str: + ch_xml = "\n".join( + f' {ch}' for fid, ch in channels + ) + return f""" + +{appearance(fg=fg)} + Level + + +{ch_xml} + + + 4294967295 + + """ + + +def xypad(wid: int, caption: str, fid: int, x: int, y: int, w: int, h: int) -> str: + return f""" + +{appearance()} + + + + + + + + """ + + +def label_frame(caption: str, x: int, y: int, w: int, h: int) -> str: + return f""" + + Sunken + Default + Default + None + Default + + + True + True + True + False + False + False + """ + + +def fixture_xml() -> str: + parts = [] + for i in range(8): + parts.append( + f""" + beamZ + BCC145 + 8 Channel + {i} + BCC145 #{i + 1} + 0 +
{87 + i * 8}
+ 8 +
""" + ) + for i, addr in enumerate((0, 44)): + parts.append( + f""" + Small Eye 7 + Mover + 43 Channel + {8 + i} + Small Eye 7 #{i + 1} + 0 +
{addr}
+ 43 +
""" + ) + return "\n".join(parts) + + +def main() -> None: + pad_w, pad_h = 240, 240 + sl_w, sl_h = 44, 240 + ind_w, ind_h = 36, 160 + gap = 8 + + widgets: list[str] = [] + wid = 0 + max_x = 0 + max_y = 0 + + def place_slider(caption, x, y, w, h, channels, value=0, fg="Default", cng="None"): + nonlocal wid, max_x, max_y + widgets.append( + slider(wid, caption, x, y, w, h, channels, value=value, fg=fg, cng=cng) + ) + wid += 1 + max_x = max(max_x, x + w) + max_y = max(max_y, y + h) + + y0 = 28 + x = 10 + widgets.append(xypad(wid, "M1 Position", M1, x, y0, pad_w, pad_h)) + wid += 1 + x += pad_w + gap + widgets.append(xypad(wid, "M2 Position", M2, x, y0, pad_w, pad_h)) + wid += 1 + x += pad_w + gap + 12 + max_x = max(max_x, x) + max_y = max(max_y, y0 + pad_h) + + place_slider("C Dim", x, y0, sl_w, sl_h, [(f, 0) for f in CANS], 255, "4294967295") + x += sl_w + 2 + for name, can_ch, _mover_chs, fg, cng in COLORS: + place_slider( + f"C {name}", + x, + y0, + sl_w, + sl_h, + [(f, can_ch) for f in CANS], + fg=fg, + cng=cng, + ) + x += sl_w + 2 + + x += 14 + + place_slider("M Dim", x, y0, sl_w, sl_h, [(f, 8) for f in MOVERS], 255, "4294967295") + x += sl_w + 2 + for name, _can_ch, mover_chs, fg, cng in COLORS: + place_slider( + f"M {name}", + x, + y0, + sl_w, + sl_h, + [(f, c) for f in MOVERS for c in mover_chs], + fg=fg, + cng=cng, + ) + x += sl_w + 2 + + y1 = y0 + pad_h + 36 + x = 10 + widgets.append(label_frame("Cans individual RGBW", x, y1 - 28, 200, 24)) + + for i, fid in enumerate(CANS): + col_x = x + i * (4 * (ind_w + 2) + 10) + for j, (name, can_ch, _m, fg, cng) in enumerate(COLORS): + place_slider( + f"{i + 1}{name}", + col_x + j * (ind_w + 2), + y1, + ind_w, + ind_h, + [(fid, can_ch)], + fg=fg, + cng=cng, + ) + + mx = x + 8 * (4 * (ind_w + 2) + 10) + 16 + widgets.append(label_frame("Movers individual RGBW", mx, y1 - 28, 220, 24)) + for mi, (fid, label) in enumerate(((M1, "M1"), (M2, "M2"))): + col_x = mx + mi * (4 * (ind_w + 2) + 14) + for j, (name, _can_ch, mover_chs, fg, cng) in enumerate(COLORS): + place_slider( + f"{label}{name}", + col_x + j * (ind_w + 2), + y1, + ind_w, + ind_h, + [(fid, c) for c in mover_chs], + fg=fg, + cng=cng, + ) + + total_w = max_x + 16 + total_h = max_y + 16 + + qxw = f""" + + + + Q Light Controller Plus + 4.12.7 + Jimmy + + + + + + + + + + + + +{fixture_xml()} + + BCC145 U + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + Small Eye Movers + + 0 + 0 + + + + + + None + Default + Default + None + Default + +{"\n".join(widgets)} + + + + + + + + + + +""" + OUT.parent.mkdir(parents=True, exist_ok=True) + OUT.write_text(qxw) + print(f"Wrote {OUT} ({total_w}x{total_h}, {wid} widgets)") + + +if __name__ == "__main__": + main() diff --git a/scripts/unify_vc.py b/scripts/unify_vc.py new file mode 100644 index 0000000..36980d2 --- /dev/null +++ b/scripts/unify_vc.py @@ -0,0 +1,268 @@ +#!/usr/bin/env python3 +"""Merge Patterns + Movers into one SoloFrame and one Speed dial in xchc.qxw.""" + +from __future__ import annotations + +import re +from pathlib import Path + + +def btn( + widget_id: int, + caption: str, + func_id: int, + x: int, + y: int, + w: int, + h: int, + bg: str, + fg: str = "4294967295", +) -> str: + return f""" """ + + +ROOT = Path(__file__).resolve().parents[1] + + +def main(): + path = ROOT / "shows" / "xchc.qxw" + text = path.read_text() + + # Combined looks: can colour chase + figure-of-8 movement + combos = [ + (101, "Colour + F8", 9, 77), + (102, "Rainbow + F8", 18, 77), + (103, "OddEven + F8", 22, 77), + (104, "Center + F8", 55, 77), + (105, "Theater + F8", 67, 77), + ] + combo_xml = [] + for fid, name, a, b in combos: + block = f""" + {a} + {b} + +""" + if f'Function ID="{fid}"' in text: + text = re.sub( + rf' \n', + block, + text, + count=1, + ) + else: + combo_xml.append(block.rstrip()) + if combo_xml: + text = text.replace( + ' + + Sunken + Default + Default + None + Default + + + True + True + True + False +{chr(10).join(buttons)} + """ + + # Replace Patterns SoloFrame + text = re.sub( + r' [\s\S]*?', + show_frame, + text, + count=1, + ) + + # Remove Movers SoloFrame (buttons now in Show) + text = re.sub( + r' [\s\S]*?\n', + "", + text, + count=1, + ) + + # Merge mover speed targets into main Speed dial; drop Mover Speed dial + text = re.sub( + r' [\s\S]*?\n', + "", + text, + count=1, + ) + speed_extra = """ 74 + 76 + 101 + 102 + 103 + 104 + 105 +""" + if 'Function FadeIn="6" FadeOut="0" Duration="6">74' not in text: + text = text.replace( + ' 69\n ', + ' 69\n' + + speed_extra + + " ", + 1, + ) + + # Make Speed dial visible next to Show + text = text.replace( + '\n ', + f'\n ', + 1, + ) + + # All Dim also drives mover dimmers + if "8" not in text.split('Caption="All Dim"', 1)[1][:800]: + text = text.replace( + """ + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4294967295 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 8 + + + 4294967295 + + + \n ', + f'\n ', + 1, + ) + + # Shift mover sliders under Show, right of XY pad + slider_y = frame_h + 20 + old_xs = [1050 + i * 46 for i in range(10)] + new_xs = [340 + i * 46 for i in range(10)] + for ox, nx in zip(old_xs, new_xs): + text = text.replace( + f'Visible="True" X="{ox}" Y="180" Width="44" Height="320"', + f'Visible="True" X="{nx}" Y="{slider_y}" Width="44" Height="300"', + 1, + ) + + path.write_text(text) + print(f"Unified Show controls in {path}") + print(f" SoloFrame {frame_w}x{frame_h} with pattern + F8 combos + exits") + print(" One Speed dial; Position pad + mover sliders below") + + +if __name__ == "__main__": + main() diff --git a/shows/archive/qlc+.qxw b/shows/archive/qlc+.qxw new file mode 100644 index 0000000..7d232ff --- /dev/null +++ b/shows/archive/qlc+.qxw @@ -0,0 +1,269 @@ + + + + + Q Light Controller Plus + 4.12.7 + Jimmy + + + + + + + + + + + + + + beamZ + BCC145 + 8 Channel + 0 + BCC145 + 0 +
0
+ 8 +
+ 0,2 + 0,3 + 0,4 + 0,5 + 0,0 + + + + 0,255,1,0,2,255,3,0,4,0,5,0,6,0,7,0 + + + + 0,255,1,0,2,255,3,127,4,0,5,0,6,0,7,0 + + + + 0,255,1,0,2,255,3,255,4,0,5,0,6,0,7,0 + + + + 0,255,1,0,2,0,3,255,4,0,5,0,6,0,7,0 + + + + 0,255,1,0,2,0,3,255,4,255,5,0,6,0,7,0 + + + + 0,255,1,0,2,0,3,0,4,255,5,0,6,0,7,0 + + + + 0,255,1,0,2,127,3,0,4,255,5,0,6,0,7,0 + + + + 0,255,1,0,2,255,3,0,4,255,5,0,6,0,7,0 + + + + 0,255,1,0,2,0,3,0,4,0,5,255,6,0,7,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + + + + 0,255,1,0,2,0,3,0,4,0,5,0,6,225,7,80 + + + + Forward + Loop + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + +
+ + + + None + Default + Default + None + Default + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/shows/archive/xchc2.qxw b/shows/archive/xchc2.qxw new file mode 100644 index 0000000..0e39db9 --- /dev/null +++ b/shows/archive/xchc2.qxw @@ -0,0 +1,115 @@ + + + + + Q Light Controller Plus + 4.12.7 + Jimmy + + + + + + + + + + + + + + beamZ + BCC145 + 8 Channel + 0 + BCC145 #1 + 0 +
71
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 1 + BCC145 #2 + 0 +
79
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 2 + BCC145 #3 + 0 +
87
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 3 + BCC145 #4 + 0 +
95
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 4 + BCC145 #5 + 0 +
103
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 5 + BCC145 #6 + 0 +
111
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 6 + BCC145 #7 + 0 +
119
+ 8 +
+ + Arial,12,-1,5,50,0,0,0,0,0 + 0 + 0 + + +
+ + + + None + Default + Default + None + Default + + + + + + + + + + +
diff --git a/shows/simple.qxw b/shows/simple.qxw new file mode 100644 index 0000000..b5a4626 --- /dev/null +++ b/shows/simple.qxw @@ -0,0 +1,1259 @@ + + + + + Q Light Controller Plus + 4.12.7 + Jimmy + + + + + + + + + + + + + + beamZ + BCC145 + 8 Channel + 0 + BCC145 #1 + 0 +
87
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 1 + BCC145 #2 + 0 +
95
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 2 + BCC145 #3 + 0 +
103
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 3 + BCC145 #4 + 0 +
111
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 4 + BCC145 #5 + 0 +
119
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 5 + BCC145 #6 + 0 +
127
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 6 + BCC145 #7 + 0 +
135
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 7 + BCC145 #8 + 0 +
143
+ 8 +
+ + Small Eye 7 + Mover + 43 Channel + 8 + Small Eye 7 #1 + 0 +
0
+ 43 +
+ + Small Eye 7 + Mover + 43 Channel + 9 + Small Eye 7 #2 + 0 +
44
+ 43 +
+ + BCC145 U + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + Small Eye Movers + + 0 + 0 + +
+ + + + None + Default + Default + None + Default + + + + + Sunken + Default + Default + None + Default + + + + + + + + + + + + + Sunken + Default + Default + None + Default + + + + + + + + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 8 + 8 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 10 + 14 + 18 + 22 + 26 + 30 + 34 + 10 + 14 + 18 + 22 + 26 + 30 + 34 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 11 + 15 + 19 + 23 + 27 + 31 + 35 + 11 + 15 + 19 + 23 + 27 + 31 + 35 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 12 + 16 + 20 + 24 + 28 + 32 + 36 + 12 + 16 + 20 + 24 + 28 + 32 + 36 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 13 + 17 + 21 + 25 + 29 + 33 + 37 + 13 + 17 + 21 + 25 + 29 + 33 + 37 + + + 4294967295 + + + + + Sunken + Default + Default + None + Default + + + True + True + True + False + False + False + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + Sunken + Default + Default + None + Default + + + True + True + True + False + False + False + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 10 + 14 + 18 + 22 + 26 + 30 + 34 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 11 + 15 + 19 + 23 + 27 + 31 + 35 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 12 + 16 + 20 + 24 + 28 + 32 + 36 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 13 + 17 + 21 + 25 + 29 + 33 + 37 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 10 + 14 + 18 + 22 + 26 + 30 + 34 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 11 + 15 + 19 + 23 + 27 + 31 + 35 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 12 + 16 + 20 + 24 + 28 + 32 + 36 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 13 + 17 + 21 + 25 + 29 + 33 + 37 + + + 4294967295 + + + + + + + + + + + +
diff --git a/shows/small_eye.qxw b/shows/small_eye.qxw new file mode 100644 index 0000000..fa61f1e --- /dev/null +++ b/shows/small_eye.qxw @@ -0,0 +1,487 @@ + + + + + Q Light Controller Plus + 4.12.7 + Jimmy + + + + + + + + + + + + + + Small Eye 7 + Mover + 43 Channel + 0 + Small Eye 7 #1 + 0 +
0
+ 43 +
+ + Small Eye 7 + Mover + 43 Channel + 1 + Small Eye 7 #2 + 0 +
44
+ 43 +
+ + + 4,0,5,0,6,230,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 4,0,5,0,6,230,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + Loop + + 0:5,0,6,230,7,70,8,255,10,255,14,60,18,60,22,60,26,60,30,60,34,60:1:5,0,6,230,7,70,8,255,10,255,14,60,18,60,22,60,26,60,30,60,34,60 + 0:5,0,6,230,7,70,8,255,10,255,11,24,14,60,15,6,18,60,19,6,22,60,23,6,26,60,27,6,30,60,31,6,34,60,35,6:1:5,0,6,230,7,70,8,255,10,255,11,24,14,60,15,6,18,60,19,6,22,60,23,6,26,60,27,6,30,60,31,6,34,60,35,6 + 0:5,0,6,230,7,70,8,255,10,255,11,48,14,60,15,11,18,60,19,11,22,60,23,11,26,60,27,11,30,60,31,11,34,60,35,11:1:5,0,6,230,7,70,8,255,10,255,11,48,14,60,15,11,18,60,19,11,22,60,23,11,26,60,27,11,30,60,31,11,34,60,35,11 + 0:5,0,6,230,7,70,8,255,10,255,11,72,14,60,15,17,18,60,19,17,22,60,23,17,26,60,27,17,30,60,31,17,34,60,35,17:1:5,0,6,230,7,70,8,255,10,255,11,72,14,60,15,17,18,60,19,17,22,60,23,17,26,60,27,17,30,60,31,17,34,60,35,17 + 0:5,0,6,230,7,70,8,255,10,255,11,96,14,60,15,23,18,60,19,23,22,60,23,23,26,60,27,23,30,60,31,23,34,60,35,23:1:5,0,6,230,7,70,8,255,10,255,11,96,14,60,15,23,18,60,19,23,22,60,23,23,26,60,27,23,30,60,31,23,34,60,35,23 + 0:5,0,6,230,7,70,8,255,10,255,11,120,14,60,15,28,18,60,19,28,22,60,23,28,26,60,27,28,30,60,31,28,34,60,35,28:1:5,0,6,230,7,70,8,255,10,255,11,120,14,60,15,28,18,60,19,28,22,60,23,28,26,60,27,28,30,60,31,28,34,60,35,28 + 0:5,0,6,230,7,70,8,255,10,255,11,143,14,60,15,34,18,60,19,34,22,60,23,34,26,60,27,34,30,60,31,34,34,60,35,34:1:5,0,6,230,7,70,8,255,10,255,11,143,14,60,15,34,18,60,19,34,22,60,23,34,26,60,27,34,30,60,31,34,34,60,35,34 + 0:5,0,6,230,7,70,8,255,10,255,11,167,14,60,15,39,18,60,19,39,22,60,23,39,26,60,27,39,30,60,31,39,34,60,35,39:1:5,0,6,230,7,70,8,255,10,255,11,167,14,60,15,39,18,60,19,39,22,60,23,39,26,60,27,39,30,60,31,39,34,60,35,39 + 0:5,0,6,230,7,70,8,255,10,255,11,191,14,60,15,45,18,60,19,45,22,60,23,45,26,60,27,45,30,60,31,45,34,60,35,45:1:5,0,6,230,7,70,8,255,10,255,11,191,14,60,15,45,18,60,19,45,22,60,23,45,26,60,27,45,30,60,31,45,34,60,35,45 + 0:5,0,6,230,7,70,8,255,10,255,11,215,14,60,15,51,18,60,19,51,22,60,23,51,26,60,27,51,30,60,31,51,34,60,35,51:1:5,0,6,230,7,70,8,255,10,255,11,215,14,60,15,51,18,60,19,51,22,60,23,51,26,60,27,51,30,60,31,51,34,60,35,51 + 0:5,0,6,230,7,70,8,255,10,255,11,239,14,60,15,56,18,60,19,56,22,60,23,56,26,60,27,56,30,60,31,56,34,60,35,56:1:5,0,6,230,7,70,8,255,10,255,11,239,14,60,15,56,18,60,19,56,22,60,23,56,26,60,27,56,30,60,31,56,34,60,35,56 + 0:5,0,6,230,7,70,8,255,10,247,11,255,14,58,15,60,18,58,19,60,22,58,23,60,26,58,27,60,30,58,31,60,34,58,35,60:1:5,0,6,230,7,70,8,255,10,247,11,255,14,58,15,60,18,58,19,60,22,58,23,60,26,58,27,60,30,58,31,60,34,58,35,60 + 0:5,0,6,230,7,70,8,255,10,223,11,255,14,52,15,60,18,52,19,60,22,52,23,60,26,52,27,60,30,52,31,60,34,52,35,60:1:5,0,6,230,7,70,8,255,10,223,11,255,14,52,15,60,18,52,19,60,22,52,23,60,26,52,27,60,30,52,31,60,34,52,35,60 + 0:5,0,6,230,7,70,8,255,10,199,11,255,14,47,15,60,18,47,19,60,22,47,23,60,26,47,27,60,30,47,31,60,34,47,35,60:1:5,0,6,230,7,70,8,255,10,199,11,255,14,47,15,60,18,47,19,60,22,47,23,60,26,47,27,60,30,47,31,60,34,47,35,60 + 0:5,0,6,230,7,70,8,255,10,175,11,255,14,41,15,60,18,41,19,60,22,41,23,60,26,41,27,60,30,41,31,60,34,41,35,60:1:5,0,6,230,7,70,8,255,10,175,11,255,14,41,15,60,18,41,19,60,22,41,23,60,26,41,27,60,30,41,31,60,34,41,35,60 + 0:5,0,6,230,7,70,8,255,10,151,11,255,14,36,15,60,18,36,19,60,22,36,23,60,26,36,27,60,30,36,31,60,34,36,35,60:1:5,0,6,230,7,70,8,255,10,151,11,255,14,36,15,60,18,36,19,60,22,36,23,60,26,36,27,60,30,36,31,60,34,36,35,60 + 0:5,0,6,230,7,70,8,255,10,128,11,255,14,30,15,60,18,30,19,60,22,30,23,60,26,30,27,60,30,30,31,60,34,30,35,60:1:5,0,6,230,7,70,8,255,10,128,11,255,14,30,15,60,18,30,19,60,22,30,23,60,26,30,27,60,30,30,31,60,34,30,35,60 + 0:5,0,6,230,7,70,8,255,10,104,11,255,14,24,15,60,18,24,19,60,22,24,23,60,26,24,27,60,30,24,31,60,34,24,35,60:1:5,0,6,230,7,70,8,255,10,104,11,255,14,24,15,60,18,24,19,60,22,24,23,60,26,24,27,60,30,24,31,60,34,24,35,60 + 0:5,0,6,230,7,70,8,255,10,80,11,255,14,19,15,60,18,19,19,60,22,19,23,60,26,19,27,60,30,19,31,60,34,19,35,60:1:5,0,6,230,7,70,8,255,10,80,11,255,14,19,15,60,18,19,19,60,22,19,23,60,26,19,27,60,30,19,31,60,34,19,35,60 + 0:5,0,6,230,7,70,8,255,10,56,11,255,14,13,15,60,18,13,19,60,22,13,23,60,26,13,27,60,30,13,31,60,34,13,35,60:1:5,0,6,230,7,70,8,255,10,56,11,255,14,13,15,60,18,13,19,60,22,13,23,60,26,13,27,60,30,13,31,60,34,13,35,60 + 0:5,0,6,230,7,70,8,255,10,32,11,255,14,8,15,60,18,8,19,60,22,8,23,60,26,8,27,60,30,8,31,60,34,8,35,60:1:5,0,6,230,7,70,8,255,10,32,11,255,14,8,15,60,18,8,19,60,22,8,23,60,26,8,27,60,30,8,31,60,34,8,35,60 + 0:5,0,6,230,7,70,8,255,10,8,11,255,14,2,15,60,18,2,19,60,22,2,23,60,26,2,27,60,30,2,31,60,34,2,35,60:1:5,0,6,230,7,70,8,255,10,8,11,255,14,2,15,60,18,2,19,60,22,2,23,60,26,2,27,60,30,2,31,60,34,2,35,60 + 0:5,0,6,230,7,70,8,255,11,255,12,16,15,60,16,4,19,60,20,4,23,60,24,4,27,60,28,4,31,60,32,4,35,60,36,4:1:5,0,6,230,7,70,8,255,11,255,12,16,15,60,16,4,19,60,20,4,23,60,24,4,27,60,28,4,31,60,32,4,35,60,36,4 + 0:5,0,6,230,7,70,8,255,11,255,12,40,15,60,16,9,19,60,20,9,23,60,24,9,27,60,28,9,31,60,32,9,35,60,36,9:1:5,0,6,230,7,70,8,255,11,255,12,40,15,60,16,9,19,60,20,9,23,60,24,9,27,60,28,9,31,60,32,9,35,60,36,9 + 0:5,0,6,230,7,70,8,255,11,255,12,64,15,60,16,15,19,60,20,15,23,60,24,15,27,60,28,15,31,60,32,15,35,60,36,15:1:5,0,6,230,7,70,8,255,11,255,12,64,15,60,16,15,19,60,20,15,23,60,24,15,27,60,28,15,31,60,32,15,35,60,36,15 + 0:5,0,6,230,7,70,8,255,11,255,12,88,15,60,16,21,19,60,20,21,23,60,24,21,27,60,28,21,31,60,32,21,35,60,36,21:1:5,0,6,230,7,70,8,255,11,255,12,88,15,60,16,21,19,60,20,21,23,60,24,21,27,60,28,21,31,60,32,21,35,60,36,21 + 0:5,0,6,230,7,70,8,255,11,255,12,112,15,60,16,26,19,60,20,26,23,60,24,26,27,60,28,26,31,60,32,26,35,60,36,26:1:5,0,6,230,7,70,8,255,11,255,12,112,15,60,16,26,19,60,20,26,23,60,24,26,27,60,28,26,31,60,32,26,35,60,36,26 + 0:5,0,6,230,7,70,8,255,11,255,12,135,15,60,16,32,19,60,20,32,23,60,24,32,27,60,28,32,31,60,32,32,35,60,36,32:1:5,0,6,230,7,70,8,255,11,255,12,135,15,60,16,32,19,60,20,32,23,60,24,32,27,60,28,32,31,60,32,32,35,60,36,32 + 0:5,0,6,230,7,70,8,255,11,255,12,159,15,60,16,37,19,60,20,37,23,60,24,37,27,60,28,37,31,60,32,37,35,60,36,37:1:5,0,6,230,7,70,8,255,11,255,12,159,15,60,16,37,19,60,20,37,23,60,24,37,27,60,28,37,31,60,32,37,35,60,36,37 + 0:5,0,6,230,7,70,8,255,11,255,12,183,15,60,16,43,19,60,20,43,23,60,24,43,27,60,28,43,31,60,32,43,35,60,36,43:1:5,0,6,230,7,70,8,255,11,255,12,183,15,60,16,43,19,60,20,43,23,60,24,43,27,60,28,43,31,60,32,43,35,60,36,43 + 0:5,0,6,230,7,70,8,255,11,255,12,207,15,60,16,49,19,60,20,49,23,60,24,49,27,60,28,49,31,60,32,49,35,60,36,49:1:5,0,6,230,7,70,8,255,11,255,12,207,15,60,16,49,19,60,20,49,23,60,24,49,27,60,28,49,31,60,32,49,35,60,36,49 + 0:5,0,6,230,7,70,8,255,11,255,12,231,15,60,16,54,19,60,20,54,23,60,24,54,27,60,28,54,31,60,32,54,35,60,36,54:1:5,0,6,230,7,70,8,255,11,255,12,231,15,60,16,54,19,60,20,54,23,60,24,54,27,60,28,54,31,60,32,54,35,60,36,54 + 0:5,0,6,230,7,70,8,255,11,255,12,255,15,60,16,60,19,60,20,60,23,60,24,60,27,60,28,60,31,60,32,60,35,60,36,60:1:5,0,6,230,7,70,8,255,11,255,12,255,15,60,16,60,19,60,20,60,23,60,24,60,27,60,28,60,31,60,32,60,35,60,36,60 + 0:5,0,6,230,7,70,8,255,11,231,12,255,15,54,16,60,19,54,20,60,23,54,24,60,27,54,28,60,31,54,32,60,35,54,36,60:1:5,0,6,230,7,70,8,255,11,231,12,255,15,54,16,60,19,54,20,60,23,54,24,60,27,54,28,60,31,54,32,60,35,54,36,60 + 0:5,0,6,230,7,70,8,255,11,207,12,255,15,49,16,60,19,49,20,60,23,49,24,60,27,49,28,60,31,49,32,60,35,49,36,60:1:5,0,6,230,7,70,8,255,11,207,12,255,15,49,16,60,19,49,20,60,23,49,24,60,27,49,28,60,31,49,32,60,35,49,36,60 + 0:5,0,6,230,7,70,8,255,11,183,12,255,15,43,16,60,19,43,20,60,23,43,24,60,27,43,28,60,31,43,32,60,35,43,36,60:1:5,0,6,230,7,70,8,255,11,183,12,255,15,43,16,60,19,43,20,60,23,43,24,60,27,43,28,60,31,43,32,60,35,43,36,60 + 0:5,0,6,230,7,70,8,255,11,159,12,255,15,37,16,60,19,37,20,60,23,37,24,60,27,37,28,60,31,37,32,60,35,37,36,60:1:5,0,6,230,7,70,8,255,11,159,12,255,15,37,16,60,19,37,20,60,23,37,24,60,27,37,28,60,31,37,32,60,35,37,36,60 + 0:5,0,6,230,7,70,8,255,11,135,12,255,15,32,16,60,19,32,20,60,23,32,24,60,27,32,28,60,31,32,32,60,35,32,36,60:1:5,0,6,230,7,70,8,255,11,135,12,255,15,32,16,60,19,32,20,60,23,32,24,60,27,32,28,60,31,32,32,60,35,32,36,60 + 0:5,0,6,230,7,70,8,255,11,112,12,255,15,26,16,60,19,26,20,60,23,26,24,60,27,26,28,60,31,26,32,60,35,26,36,60:1:5,0,6,230,7,70,8,255,11,112,12,255,15,26,16,60,19,26,20,60,23,26,24,60,27,26,28,60,31,26,32,60,35,26,36,60 + 0:5,0,6,230,7,70,8,255,11,88,12,255,15,21,16,60,19,21,20,60,23,21,24,60,27,21,28,60,31,21,32,60,35,21,36,60:1:5,0,6,230,7,70,8,255,11,88,12,255,15,21,16,60,19,21,20,60,23,21,24,60,27,21,28,60,31,21,32,60,35,21,36,60 + 0:5,0,6,230,7,70,8,255,11,64,12,255,15,15,16,60,19,15,20,60,23,15,24,60,27,15,28,60,31,15,32,60,35,15,36,60:1:5,0,6,230,7,70,8,255,11,64,12,255,15,15,16,60,19,15,20,60,23,15,24,60,27,15,28,60,31,15,32,60,35,15,36,60 + 0:5,0,6,230,7,70,8,255,11,40,12,255,15,9,16,60,19,9,20,60,23,9,24,60,27,9,28,60,31,9,32,60,35,9,36,60:1:5,0,6,230,7,70,8,255,11,40,12,255,15,9,16,60,19,9,20,60,23,9,24,60,27,9,28,60,31,9,32,60,35,9,36,60 + 0:5,0,6,230,7,70,8,255,11,16,12,255,15,4,16,60,19,4,20,60,23,4,24,60,27,4,28,60,31,4,32,60,35,4,36,60:1:5,0,6,230,7,70,8,255,11,16,12,255,15,4,16,60,19,4,20,60,23,4,24,60,27,4,28,60,31,4,32,60,35,4,36,60 + 0:5,0,6,230,7,70,8,255,10,8,12,255,14,2,16,60,18,2,20,60,22,2,24,60,26,2,28,60,30,2,32,60,34,2,36,60:1:5,0,6,230,7,70,8,255,10,8,12,255,14,2,16,60,18,2,20,60,22,2,24,60,26,2,28,60,30,2,32,60,34,2,36,60 + 0:5,0,6,230,7,70,8,255,10,32,12,255,14,8,16,60,18,8,20,60,22,8,24,60,26,8,28,60,30,8,32,60,34,8,36,60:1:5,0,6,230,7,70,8,255,10,32,12,255,14,8,16,60,18,8,20,60,22,8,24,60,26,8,28,60,30,8,32,60,34,8,36,60 + 0:5,0,6,230,7,70,8,255,10,56,12,255,14,13,16,60,18,13,20,60,22,13,24,60,26,13,28,60,30,13,32,60,34,13,36,60:1:5,0,6,230,7,70,8,255,10,56,12,255,14,13,16,60,18,13,20,60,22,13,24,60,26,13,28,60,30,13,32,60,34,13,36,60 + 0:5,0,6,230,7,70,8,255,10,80,12,255,14,19,16,60,18,19,20,60,22,19,24,60,26,19,28,60,30,19,32,60,34,19,36,60:1:5,0,6,230,7,70,8,255,10,80,12,255,14,19,16,60,18,19,20,60,22,19,24,60,26,19,28,60,30,19,32,60,34,19,36,60 + 0:5,0,6,230,7,70,8,255,10,104,12,255,14,24,16,60,18,24,20,60,22,24,24,60,26,24,28,60,30,24,32,60,34,24,36,60:1:5,0,6,230,7,70,8,255,10,104,12,255,14,24,16,60,18,24,20,60,22,24,24,60,26,24,28,60,30,24,32,60,34,24,36,60 + 0:5,0,6,230,7,70,8,255,10,128,12,255,14,30,16,60,18,30,20,60,22,30,24,60,26,30,28,60,30,30,32,60,34,30,36,60:1:5,0,6,230,7,70,8,255,10,128,12,255,14,30,16,60,18,30,20,60,22,30,24,60,26,30,28,60,30,30,32,60,34,30,36,60 + 0:5,0,6,230,7,70,8,255,10,151,12,255,14,36,16,60,18,36,20,60,22,36,24,60,26,36,28,60,30,36,32,60,34,36,36,60:1:5,0,6,230,7,70,8,255,10,151,12,255,14,36,16,60,18,36,20,60,22,36,24,60,26,36,28,60,30,36,32,60,34,36,36,60 + 0:5,0,6,230,7,70,8,255,10,175,12,255,14,41,16,60,18,41,20,60,22,41,24,60,26,41,28,60,30,41,32,60,34,41,36,60:1:5,0,6,230,7,70,8,255,10,175,12,255,14,41,16,60,18,41,20,60,22,41,24,60,26,41,28,60,30,41,32,60,34,41,36,60 + 0:5,0,6,230,7,70,8,255,10,199,12,255,14,47,16,60,18,47,20,60,22,47,24,60,26,47,28,60,30,47,32,60,34,47,36,60:1:5,0,6,230,7,70,8,255,10,199,12,255,14,47,16,60,18,47,20,60,22,47,24,60,26,47,28,60,30,47,32,60,34,47,36,60 + 0:5,0,6,230,7,70,8,255,10,223,12,255,14,52,16,60,18,52,20,60,22,52,24,60,26,52,28,60,30,52,32,60,34,52,36,60:1:5,0,6,230,7,70,8,255,10,223,12,255,14,52,16,60,18,52,20,60,22,52,24,60,26,52,28,60,30,52,32,60,34,52,36,60 + 0:5,0,6,230,7,70,8,255,10,247,12,255,14,58,16,60,18,58,20,60,22,58,24,60,26,58,28,60,30,58,32,60,34,58,36,60:1:5,0,6,230,7,70,8,255,10,247,12,255,14,58,16,60,18,58,20,60,22,58,24,60,26,58,28,60,30,58,32,60,34,58,36,60 + 0:5,0,6,230,7,70,8,255,10,255,12,239,14,60,16,56,18,60,20,56,22,60,24,56,26,60,28,56,30,60,32,56,34,60,36,56:1:5,0,6,230,7,70,8,255,10,255,12,239,14,60,16,56,18,60,20,56,22,60,24,56,26,60,28,56,30,60,32,56,34,60,36,56 + 0:5,0,6,230,7,70,8,255,10,255,12,215,14,60,16,51,18,60,20,51,22,60,24,51,26,60,28,51,30,60,32,51,34,60,36,51:1:5,0,6,230,7,70,8,255,10,255,12,215,14,60,16,51,18,60,20,51,22,60,24,51,26,60,28,51,30,60,32,51,34,60,36,51 + 0:5,0,6,230,7,70,8,255,10,255,12,191,14,60,16,45,18,60,20,45,22,60,24,45,26,60,28,45,30,60,32,45,34,60,36,45:1:5,0,6,230,7,70,8,255,10,255,12,191,14,60,16,45,18,60,20,45,22,60,24,45,26,60,28,45,30,60,32,45,34,60,36,45 + 0:5,0,6,230,7,70,8,255,10,255,12,167,14,60,16,39,18,60,20,39,22,60,24,39,26,60,28,39,30,60,32,39,34,60,36,39:1:5,0,6,230,7,70,8,255,10,255,12,167,14,60,16,39,18,60,20,39,22,60,24,39,26,60,28,39,30,60,32,39,34,60,36,39 + 0:5,0,6,230,7,70,8,255,10,255,12,143,14,60,16,34,18,60,20,34,22,60,24,34,26,60,28,34,30,60,32,34,34,60,36,34:1:5,0,6,230,7,70,8,255,10,255,12,143,14,60,16,34,18,60,20,34,22,60,24,34,26,60,28,34,30,60,32,34,34,60,36,34 + 0:5,0,6,230,7,70,8,255,10,255,12,120,14,60,16,28,18,60,20,28,22,60,24,28,26,60,28,28,30,60,32,28,34,60,36,28:1:5,0,6,230,7,70,8,255,10,255,12,120,14,60,16,28,18,60,20,28,22,60,24,28,26,60,28,28,30,60,32,28,34,60,36,28 + 0:5,0,6,230,7,70,8,255,10,255,12,96,14,60,16,23,18,60,20,23,22,60,24,23,26,60,28,23,30,60,32,23,34,60,36,23:1:5,0,6,230,7,70,8,255,10,255,12,96,14,60,16,23,18,60,20,23,22,60,24,23,26,60,28,23,30,60,32,23,34,60,36,23 + 0:5,0,6,230,7,70,8,255,10,255,12,72,14,60,16,17,18,60,20,17,22,60,24,17,26,60,28,17,30,60,32,17,34,60,36,17:1:5,0,6,230,7,70,8,255,10,255,12,72,14,60,16,17,18,60,20,17,22,60,24,17,26,60,28,17,30,60,32,17,34,60,36,17 + 0:5,0,6,230,7,70,8,255,10,255,12,48,14,60,16,11,18,60,20,11,22,60,24,11,26,60,28,11,30,60,32,11,34,60,36,11:1:5,0,6,230,7,70,8,255,10,255,12,48,14,60,16,11,18,60,20,11,22,60,24,11,26,60,28,11,30,60,32,11,34,60,36,11 + 0:5,0,6,230,7,70,8,255,10,255,12,24,14,60,16,6,18,60,20,6,22,60,24,6,26,60,28,6,30,60,32,6,34,60,36,6:1:5,0,6,230,7,70,8,255,10,255,12,24,14,60,16,6,18,60,20,6,22,60,24,6,26,60,28,6,30,60,32,6,34,60,36,6 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0 + + + + 0 + Forward + 255 + + + 1 + Forward + 255 + + Parallel + + Forward + Loop + Eight + 28 + 22 + 0 + + 128 + 1 + 0 + + + 80 + 1 + 0 + + + + 0 + 1 + 3 + + + Arial,12,-1,5,50,0,0,0,0,0 + 0 + 0 + + + + +
+ + + + None + Default + Default + None + Default + + + + None + Default + Default + None + Default + + + True + True + False + False + + + + + + + Sunken + Default + Default + None + Default + + 108 + + + 1 + 3 + + + + + Sunken + Default + Default + None + Default + + + + + + + + + + + + + + EFX + Figure of 8 + 3 + + + + + + Sunken + 4294944000 + Default + None + Default + + Level + + + 0 + 0 + + + 4294967295 + + + + + + Sunken + 4278255615 + Default + None + Default + + Level + + + 2 + 2 + + + 4294967295 + + + + + + Sunken + 4294967040 + Default + None + Default + + Level + + + 5 + 5 + + + 4294967295 + + + + + + Sunken + 4294902015 + Default + None + Default + + Level + + + 7 + 7 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 8 + 8 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 10 + 10 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 11 + 11 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 12 + 12 + + + 4294967295 + + + + + + Sunken + 4288256409 + Default + None + Default + + Level + + + 14 + 15 + 16 + 18 + 19 + 20 + 22 + 23 + 24 + 26 + 27 + 28 + 30 + 31 + 32 + 34 + 35 + 36 + 14 + 15 + 16 + 18 + 19 + 20 + 22 + 23 + 24 + 26 + 27 + 28 + 30 + 31 + 32 + 34 + 35 + 36 + + + 4294967295 + + + + + + Sunken + 4291611852 + Default + None + Default + + Level + + + 6 + 6 + + + 4294967295 + + + + + + + + + + + +
diff --git a/shows/xchc.qxw b/shows/xchc.qxw new file mode 100644 index 0000000..ef18737 --- /dev/null +++ b/shows/xchc.qxw @@ -0,0 +1,2584 @@ + + + + + Q Light Controller Plus + 4.12.7 + Jimmy + + + + + + + + + + + + + + beamZ + BCC145 + 8 Channel + 0 + BCC145 #1 + 0 +
87
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 1 + BCC145 #2 + 0 +
95
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 2 + BCC145 #3 + 0 +
103
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 3 + BCC145 #4 + 0 +
111
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 4 + BCC145 #5 + 0 +
119
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 5 + BCC145 #6 + 0 +
127
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 6 + BCC145 #7 + 0 +
135
+ 8 +
+ + beamZ + BCC145 + 8 Channel + 7 + BCC145 #8 + 0 +
143
+ 8 +
+ + Small Eye 7 + Mover + 43 Channel + 8 + Small Eye 7 #1 + 0 +
0
+ 43 +
+ + Small Eye 7 + Mover + 43 Channel + 9 + Small Eye 7 #2 + 0 +
44
+ 43 +
+ + Small Eye Movers + + 0 + 0 + + + BCC145 U + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,127,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,127,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,127,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,127,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + Loop + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + + + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,127,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,127,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,127,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,127,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,127,4,0,5,0,6,0,7,0 + 1,0,2,255,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,0,5,0,6,0,7,0 + 1,0,2,0,3,255,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,127,3,0,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + Loop + + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + + + + Forward + Loop + Gradient + 4294901760 + RGB + 0 + + + + + + + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + Loop + + 20 + 21 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + + + + Forward + Loop + + 24 + 23 + 25 + 23 + 26 + 23 + 27 + 23 + 28 + 23 + 29 + 23 + 30 + 23 + 31 + 23 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + Loop + + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 99 + 100 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + PingPong + + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + PingPong + + 51 + 52 + 53 + 54 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + PingPong + + 56 + 57 + 58 + 59 + + + + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,255,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 1,0,2,0,3,0,4,255,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + Loop + + 61 + 62 + + + + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 1,0,2,0,3,0,4,0,5,255,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,200,12,140,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,200,12,140,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + Loop + + 64 + 65 + 66 + + + + Forward + SingleShot + + 54 + 53 + 52 + 51 + 23 + + + + Forward + SingleShot + + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 99 + 23 + + + + 1,0,2,255,3,180,4,80,5,0,6,0,7,0 + 1,0,2,255,3,180,4,80,5,0,6,0,7,0 + 1,0,2,255,3,180,4,80,5,0,6,0,7,0 + 1,0,2,255,3,180,4,80,5,0,6,0,7,0 + 1,0,2,255,3,180,4,80,5,0,6,0,7,0 + 1,0,2,255,3,180,4,80,5,0,6,0,7,0 + 1,0,2,255,3,180,4,80,5,0,6,0,7,0 + 1,0,2,255,3,180,4,80,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,180,12,80,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,180,12,80,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + SingleShot + + 70 + 23 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 4,0,5,0,6,230,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 4,0,5,0,6,230,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + Loop + + 8:5,0,6,230,7,70,8,255,10,255,14,60,18,60,22,60,26,60,30,60,34,60:9:5,0,6,230,7,70,8,255,10,255,14,60,18,60,22,60,26,60,30,60,34,60 + 8:5,0,6,230,7,70,8,255,10,255,11,24,14,60,15,6,18,60,19,6,22,60,23,6,26,60,27,6,30,60,31,6,34,60,35,6:9:5,0,6,230,7,70,8,255,10,255,11,24,14,60,15,6,18,60,19,6,22,60,23,6,26,60,27,6,30,60,31,6,34,60,35,6 + 8:5,0,6,230,7,70,8,255,10,255,11,48,14,60,15,11,18,60,19,11,22,60,23,11,26,60,27,11,30,60,31,11,34,60,35,11:9:5,0,6,230,7,70,8,255,10,255,11,48,14,60,15,11,18,60,19,11,22,60,23,11,26,60,27,11,30,60,31,11,34,60,35,11 + 8:5,0,6,230,7,70,8,255,10,255,11,72,14,60,15,17,18,60,19,17,22,60,23,17,26,60,27,17,30,60,31,17,34,60,35,17:9:5,0,6,230,7,70,8,255,10,255,11,72,14,60,15,17,18,60,19,17,22,60,23,17,26,60,27,17,30,60,31,17,34,60,35,17 + 8:5,0,6,230,7,70,8,255,10,255,11,96,14,60,15,23,18,60,19,23,22,60,23,23,26,60,27,23,30,60,31,23,34,60,35,23:9:5,0,6,230,7,70,8,255,10,255,11,96,14,60,15,23,18,60,19,23,22,60,23,23,26,60,27,23,30,60,31,23,34,60,35,23 + 8:5,0,6,230,7,70,8,255,10,255,11,120,14,60,15,28,18,60,19,28,22,60,23,28,26,60,27,28,30,60,31,28,34,60,35,28:9:5,0,6,230,7,70,8,255,10,255,11,120,14,60,15,28,18,60,19,28,22,60,23,28,26,60,27,28,30,60,31,28,34,60,35,28 + 8:5,0,6,230,7,70,8,255,10,255,11,143,14,60,15,34,18,60,19,34,22,60,23,34,26,60,27,34,30,60,31,34,34,60,35,34:9:5,0,6,230,7,70,8,255,10,255,11,143,14,60,15,34,18,60,19,34,22,60,23,34,26,60,27,34,30,60,31,34,34,60,35,34 + 8:5,0,6,230,7,70,8,255,10,255,11,167,14,60,15,39,18,60,19,39,22,60,23,39,26,60,27,39,30,60,31,39,34,60,35,39:9:5,0,6,230,7,70,8,255,10,255,11,167,14,60,15,39,18,60,19,39,22,60,23,39,26,60,27,39,30,60,31,39,34,60,35,39 + 8:5,0,6,230,7,70,8,255,10,255,11,191,14,60,15,45,18,60,19,45,22,60,23,45,26,60,27,45,30,60,31,45,34,60,35,45:9:5,0,6,230,7,70,8,255,10,255,11,191,14,60,15,45,18,60,19,45,22,60,23,45,26,60,27,45,30,60,31,45,34,60,35,45 + 8:5,0,6,230,7,70,8,255,10,255,11,215,14,60,15,51,18,60,19,51,22,60,23,51,26,60,27,51,30,60,31,51,34,60,35,51:9:5,0,6,230,7,70,8,255,10,255,11,215,14,60,15,51,18,60,19,51,22,60,23,51,26,60,27,51,30,60,31,51,34,60,35,51 + 8:5,0,6,230,7,70,8,255,10,255,11,239,14,60,15,56,18,60,19,56,22,60,23,56,26,60,27,56,30,60,31,56,34,60,35,56:9:5,0,6,230,7,70,8,255,10,255,11,239,14,60,15,56,18,60,19,56,22,60,23,56,26,60,27,56,30,60,31,56,34,60,35,56 + 8:5,0,6,230,7,70,8,255,10,247,11,255,14,58,15,60,18,58,19,60,22,58,23,60,26,58,27,60,30,58,31,60,34,58,35,60:9:5,0,6,230,7,70,8,255,10,247,11,255,14,58,15,60,18,58,19,60,22,58,23,60,26,58,27,60,30,58,31,60,34,58,35,60 + 8:5,0,6,230,7,70,8,255,10,223,11,255,14,52,15,60,18,52,19,60,22,52,23,60,26,52,27,60,30,52,31,60,34,52,35,60:9:5,0,6,230,7,70,8,255,10,223,11,255,14,52,15,60,18,52,19,60,22,52,23,60,26,52,27,60,30,52,31,60,34,52,35,60 + 8:5,0,6,230,7,70,8,255,10,199,11,255,14,47,15,60,18,47,19,60,22,47,23,60,26,47,27,60,30,47,31,60,34,47,35,60:9:5,0,6,230,7,70,8,255,10,199,11,255,14,47,15,60,18,47,19,60,22,47,23,60,26,47,27,60,30,47,31,60,34,47,35,60 + 8:5,0,6,230,7,70,8,255,10,175,11,255,14,41,15,60,18,41,19,60,22,41,23,60,26,41,27,60,30,41,31,60,34,41,35,60:9:5,0,6,230,7,70,8,255,10,175,11,255,14,41,15,60,18,41,19,60,22,41,23,60,26,41,27,60,30,41,31,60,34,41,35,60 + 8:5,0,6,230,7,70,8,255,10,151,11,255,14,36,15,60,18,36,19,60,22,36,23,60,26,36,27,60,30,36,31,60,34,36,35,60:9:5,0,6,230,7,70,8,255,10,151,11,255,14,36,15,60,18,36,19,60,22,36,23,60,26,36,27,60,30,36,31,60,34,36,35,60 + 8:5,0,6,230,7,70,8,255,10,128,11,255,14,30,15,60,18,30,19,60,22,30,23,60,26,30,27,60,30,30,31,60,34,30,35,60:9:5,0,6,230,7,70,8,255,10,128,11,255,14,30,15,60,18,30,19,60,22,30,23,60,26,30,27,60,30,30,31,60,34,30,35,60 + 8:5,0,6,230,7,70,8,255,10,104,11,255,14,24,15,60,18,24,19,60,22,24,23,60,26,24,27,60,30,24,31,60,34,24,35,60:9:5,0,6,230,7,70,8,255,10,104,11,255,14,24,15,60,18,24,19,60,22,24,23,60,26,24,27,60,30,24,31,60,34,24,35,60 + 8:5,0,6,230,7,70,8,255,10,80,11,255,14,19,15,60,18,19,19,60,22,19,23,60,26,19,27,60,30,19,31,60,34,19,35,60:9:5,0,6,230,7,70,8,255,10,80,11,255,14,19,15,60,18,19,19,60,22,19,23,60,26,19,27,60,30,19,31,60,34,19,35,60 + 8:5,0,6,230,7,70,8,255,10,56,11,255,14,13,15,60,18,13,19,60,22,13,23,60,26,13,27,60,30,13,31,60,34,13,35,60:9:5,0,6,230,7,70,8,255,10,56,11,255,14,13,15,60,18,13,19,60,22,13,23,60,26,13,27,60,30,13,31,60,34,13,35,60 + 8:5,0,6,230,7,70,8,255,10,32,11,255,14,8,15,60,18,8,19,60,22,8,23,60,26,8,27,60,30,8,31,60,34,8,35,60:9:5,0,6,230,7,70,8,255,10,32,11,255,14,8,15,60,18,8,19,60,22,8,23,60,26,8,27,60,30,8,31,60,34,8,35,60 + 8:5,0,6,230,7,70,8,255,10,8,11,255,14,2,15,60,18,2,19,60,22,2,23,60,26,2,27,60,30,2,31,60,34,2,35,60:9:5,0,6,230,7,70,8,255,10,8,11,255,14,2,15,60,18,2,19,60,22,2,23,60,26,2,27,60,30,2,31,60,34,2,35,60 + 8:5,0,6,230,7,70,8,255,11,255,12,16,15,60,16,4,19,60,20,4,23,60,24,4,27,60,28,4,31,60,32,4,35,60,36,4:9:5,0,6,230,7,70,8,255,11,255,12,16,15,60,16,4,19,60,20,4,23,60,24,4,27,60,28,4,31,60,32,4,35,60,36,4 + 8:5,0,6,230,7,70,8,255,11,255,12,40,15,60,16,9,19,60,20,9,23,60,24,9,27,60,28,9,31,60,32,9,35,60,36,9:9:5,0,6,230,7,70,8,255,11,255,12,40,15,60,16,9,19,60,20,9,23,60,24,9,27,60,28,9,31,60,32,9,35,60,36,9 + 8:5,0,6,230,7,70,8,255,11,255,12,64,15,60,16,15,19,60,20,15,23,60,24,15,27,60,28,15,31,60,32,15,35,60,36,15:9:5,0,6,230,7,70,8,255,11,255,12,64,15,60,16,15,19,60,20,15,23,60,24,15,27,60,28,15,31,60,32,15,35,60,36,15 + 8:5,0,6,230,7,70,8,255,11,255,12,88,15,60,16,21,19,60,20,21,23,60,24,21,27,60,28,21,31,60,32,21,35,60,36,21:9:5,0,6,230,7,70,8,255,11,255,12,88,15,60,16,21,19,60,20,21,23,60,24,21,27,60,28,21,31,60,32,21,35,60,36,21 + 8:5,0,6,230,7,70,8,255,11,255,12,112,15,60,16,26,19,60,20,26,23,60,24,26,27,60,28,26,31,60,32,26,35,60,36,26:9:5,0,6,230,7,70,8,255,11,255,12,112,15,60,16,26,19,60,20,26,23,60,24,26,27,60,28,26,31,60,32,26,35,60,36,26 + 8:5,0,6,230,7,70,8,255,11,255,12,135,15,60,16,32,19,60,20,32,23,60,24,32,27,60,28,32,31,60,32,32,35,60,36,32:9:5,0,6,230,7,70,8,255,11,255,12,135,15,60,16,32,19,60,20,32,23,60,24,32,27,60,28,32,31,60,32,32,35,60,36,32 + 8:5,0,6,230,7,70,8,255,11,255,12,159,15,60,16,37,19,60,20,37,23,60,24,37,27,60,28,37,31,60,32,37,35,60,36,37:9:5,0,6,230,7,70,8,255,11,255,12,159,15,60,16,37,19,60,20,37,23,60,24,37,27,60,28,37,31,60,32,37,35,60,36,37 + 8:5,0,6,230,7,70,8,255,11,255,12,183,15,60,16,43,19,60,20,43,23,60,24,43,27,60,28,43,31,60,32,43,35,60,36,43:9:5,0,6,230,7,70,8,255,11,255,12,183,15,60,16,43,19,60,20,43,23,60,24,43,27,60,28,43,31,60,32,43,35,60,36,43 + 8:5,0,6,230,7,70,8,255,11,255,12,207,15,60,16,49,19,60,20,49,23,60,24,49,27,60,28,49,31,60,32,49,35,60,36,49:9:5,0,6,230,7,70,8,255,11,255,12,207,15,60,16,49,19,60,20,49,23,60,24,49,27,60,28,49,31,60,32,49,35,60,36,49 + 8:5,0,6,230,7,70,8,255,11,255,12,231,15,60,16,54,19,60,20,54,23,60,24,54,27,60,28,54,31,60,32,54,35,60,36,54:9:5,0,6,230,7,70,8,255,11,255,12,231,15,60,16,54,19,60,20,54,23,60,24,54,27,60,28,54,31,60,32,54,35,60,36,54 + 8:5,0,6,230,7,70,8,255,11,255,12,255,15,60,16,60,19,60,20,60,23,60,24,60,27,60,28,60,31,60,32,60,35,60,36,60:9:5,0,6,230,7,70,8,255,11,255,12,255,15,60,16,60,19,60,20,60,23,60,24,60,27,60,28,60,31,60,32,60,35,60,36,60 + 8:5,0,6,230,7,70,8,255,11,231,12,255,15,54,16,60,19,54,20,60,23,54,24,60,27,54,28,60,31,54,32,60,35,54,36,60:9:5,0,6,230,7,70,8,255,11,231,12,255,15,54,16,60,19,54,20,60,23,54,24,60,27,54,28,60,31,54,32,60,35,54,36,60 + 8:5,0,6,230,7,70,8,255,11,207,12,255,15,49,16,60,19,49,20,60,23,49,24,60,27,49,28,60,31,49,32,60,35,49,36,60:9:5,0,6,230,7,70,8,255,11,207,12,255,15,49,16,60,19,49,20,60,23,49,24,60,27,49,28,60,31,49,32,60,35,49,36,60 + 8:5,0,6,230,7,70,8,255,11,183,12,255,15,43,16,60,19,43,20,60,23,43,24,60,27,43,28,60,31,43,32,60,35,43,36,60:9:5,0,6,230,7,70,8,255,11,183,12,255,15,43,16,60,19,43,20,60,23,43,24,60,27,43,28,60,31,43,32,60,35,43,36,60 + 8:5,0,6,230,7,70,8,255,11,159,12,255,15,37,16,60,19,37,20,60,23,37,24,60,27,37,28,60,31,37,32,60,35,37,36,60:9:5,0,6,230,7,70,8,255,11,159,12,255,15,37,16,60,19,37,20,60,23,37,24,60,27,37,28,60,31,37,32,60,35,37,36,60 + 8:5,0,6,230,7,70,8,255,11,135,12,255,15,32,16,60,19,32,20,60,23,32,24,60,27,32,28,60,31,32,32,60,35,32,36,60:9:5,0,6,230,7,70,8,255,11,135,12,255,15,32,16,60,19,32,20,60,23,32,24,60,27,32,28,60,31,32,32,60,35,32,36,60 + 8:5,0,6,230,7,70,8,255,11,112,12,255,15,26,16,60,19,26,20,60,23,26,24,60,27,26,28,60,31,26,32,60,35,26,36,60:9:5,0,6,230,7,70,8,255,11,112,12,255,15,26,16,60,19,26,20,60,23,26,24,60,27,26,28,60,31,26,32,60,35,26,36,60 + 8:5,0,6,230,7,70,8,255,11,88,12,255,15,21,16,60,19,21,20,60,23,21,24,60,27,21,28,60,31,21,32,60,35,21,36,60:9:5,0,6,230,7,70,8,255,11,88,12,255,15,21,16,60,19,21,20,60,23,21,24,60,27,21,28,60,31,21,32,60,35,21,36,60 + 8:5,0,6,230,7,70,8,255,11,64,12,255,15,15,16,60,19,15,20,60,23,15,24,60,27,15,28,60,31,15,32,60,35,15,36,60:9:5,0,6,230,7,70,8,255,11,64,12,255,15,15,16,60,19,15,20,60,23,15,24,60,27,15,28,60,31,15,32,60,35,15,36,60 + 8:5,0,6,230,7,70,8,255,11,40,12,255,15,9,16,60,19,9,20,60,23,9,24,60,27,9,28,60,31,9,32,60,35,9,36,60:9:5,0,6,230,7,70,8,255,11,40,12,255,15,9,16,60,19,9,20,60,23,9,24,60,27,9,28,60,31,9,32,60,35,9,36,60 + 8:5,0,6,230,7,70,8,255,11,16,12,255,15,4,16,60,19,4,20,60,23,4,24,60,27,4,28,60,31,4,32,60,35,4,36,60:9:5,0,6,230,7,70,8,255,11,16,12,255,15,4,16,60,19,4,20,60,23,4,24,60,27,4,28,60,31,4,32,60,35,4,36,60 + 8:5,0,6,230,7,70,8,255,10,8,12,255,14,2,16,60,18,2,20,60,22,2,24,60,26,2,28,60,30,2,32,60,34,2,36,60:9:5,0,6,230,7,70,8,255,10,8,12,255,14,2,16,60,18,2,20,60,22,2,24,60,26,2,28,60,30,2,32,60,34,2,36,60 + 8:5,0,6,230,7,70,8,255,10,32,12,255,14,8,16,60,18,8,20,60,22,8,24,60,26,8,28,60,30,8,32,60,34,8,36,60:9:5,0,6,230,7,70,8,255,10,32,12,255,14,8,16,60,18,8,20,60,22,8,24,60,26,8,28,60,30,8,32,60,34,8,36,60 + 8:5,0,6,230,7,70,8,255,10,56,12,255,14,13,16,60,18,13,20,60,22,13,24,60,26,13,28,60,30,13,32,60,34,13,36,60:9:5,0,6,230,7,70,8,255,10,56,12,255,14,13,16,60,18,13,20,60,22,13,24,60,26,13,28,60,30,13,32,60,34,13,36,60 + 8:5,0,6,230,7,70,8,255,10,80,12,255,14,19,16,60,18,19,20,60,22,19,24,60,26,19,28,60,30,19,32,60,34,19,36,60:9:5,0,6,230,7,70,8,255,10,80,12,255,14,19,16,60,18,19,20,60,22,19,24,60,26,19,28,60,30,19,32,60,34,19,36,60 + 8:5,0,6,230,7,70,8,255,10,104,12,255,14,24,16,60,18,24,20,60,22,24,24,60,26,24,28,60,30,24,32,60,34,24,36,60:9:5,0,6,230,7,70,8,255,10,104,12,255,14,24,16,60,18,24,20,60,22,24,24,60,26,24,28,60,30,24,32,60,34,24,36,60 + 8:5,0,6,230,7,70,8,255,10,128,12,255,14,30,16,60,18,30,20,60,22,30,24,60,26,30,28,60,30,30,32,60,34,30,36,60:9:5,0,6,230,7,70,8,255,10,128,12,255,14,30,16,60,18,30,20,60,22,30,24,60,26,30,28,60,30,30,32,60,34,30,36,60 + 8:5,0,6,230,7,70,8,255,10,151,12,255,14,36,16,60,18,36,20,60,22,36,24,60,26,36,28,60,30,36,32,60,34,36,36,60:9:5,0,6,230,7,70,8,255,10,151,12,255,14,36,16,60,18,36,20,60,22,36,24,60,26,36,28,60,30,36,32,60,34,36,36,60 + 8:5,0,6,230,7,70,8,255,10,175,12,255,14,41,16,60,18,41,20,60,22,41,24,60,26,41,28,60,30,41,32,60,34,41,36,60:9:5,0,6,230,7,70,8,255,10,175,12,255,14,41,16,60,18,41,20,60,22,41,24,60,26,41,28,60,30,41,32,60,34,41,36,60 + 8:5,0,6,230,7,70,8,255,10,199,12,255,14,47,16,60,18,47,20,60,22,47,24,60,26,47,28,60,30,47,32,60,34,47,36,60:9:5,0,6,230,7,70,8,255,10,199,12,255,14,47,16,60,18,47,20,60,22,47,24,60,26,47,28,60,30,47,32,60,34,47,36,60 + 8:5,0,6,230,7,70,8,255,10,223,12,255,14,52,16,60,18,52,20,60,22,52,24,60,26,52,28,60,30,52,32,60,34,52,36,60:9:5,0,6,230,7,70,8,255,10,223,12,255,14,52,16,60,18,52,20,60,22,52,24,60,26,52,28,60,30,52,32,60,34,52,36,60 + 8:5,0,6,230,7,70,8,255,10,247,12,255,14,58,16,60,18,58,20,60,22,58,24,60,26,58,28,60,30,58,32,60,34,58,36,60:9:5,0,6,230,7,70,8,255,10,247,12,255,14,58,16,60,18,58,20,60,22,58,24,60,26,58,28,60,30,58,32,60,34,58,36,60 + 8:5,0,6,230,7,70,8,255,10,255,12,239,14,60,16,56,18,60,20,56,22,60,24,56,26,60,28,56,30,60,32,56,34,60,36,56:9:5,0,6,230,7,70,8,255,10,255,12,239,14,60,16,56,18,60,20,56,22,60,24,56,26,60,28,56,30,60,32,56,34,60,36,56 + 8:5,0,6,230,7,70,8,255,10,255,12,215,14,60,16,51,18,60,20,51,22,60,24,51,26,60,28,51,30,60,32,51,34,60,36,51:9:5,0,6,230,7,70,8,255,10,255,12,215,14,60,16,51,18,60,20,51,22,60,24,51,26,60,28,51,30,60,32,51,34,60,36,51 + 8:5,0,6,230,7,70,8,255,10,255,12,191,14,60,16,45,18,60,20,45,22,60,24,45,26,60,28,45,30,60,32,45,34,60,36,45:9:5,0,6,230,7,70,8,255,10,255,12,191,14,60,16,45,18,60,20,45,22,60,24,45,26,60,28,45,30,60,32,45,34,60,36,45 + 8:5,0,6,230,7,70,8,255,10,255,12,167,14,60,16,39,18,60,20,39,22,60,24,39,26,60,28,39,30,60,32,39,34,60,36,39:9:5,0,6,230,7,70,8,255,10,255,12,167,14,60,16,39,18,60,20,39,22,60,24,39,26,60,28,39,30,60,32,39,34,60,36,39 + 8:5,0,6,230,7,70,8,255,10,255,12,143,14,60,16,34,18,60,20,34,22,60,24,34,26,60,28,34,30,60,32,34,34,60,36,34:9:5,0,6,230,7,70,8,255,10,255,12,143,14,60,16,34,18,60,20,34,22,60,24,34,26,60,28,34,30,60,32,34,34,60,36,34 + 8:5,0,6,230,7,70,8,255,10,255,12,120,14,60,16,28,18,60,20,28,22,60,24,28,26,60,28,28,30,60,32,28,34,60,36,28:9:5,0,6,230,7,70,8,255,10,255,12,120,14,60,16,28,18,60,20,28,22,60,24,28,26,60,28,28,30,60,32,28,34,60,36,28 + 8:5,0,6,230,7,70,8,255,10,255,12,96,14,60,16,23,18,60,20,23,22,60,24,23,26,60,28,23,30,60,32,23,34,60,36,23:9:5,0,6,230,7,70,8,255,10,255,12,96,14,60,16,23,18,60,20,23,22,60,24,23,26,60,28,23,30,60,32,23,34,60,36,23 + 8:5,0,6,230,7,70,8,255,10,255,12,72,14,60,16,17,18,60,20,17,22,60,24,17,26,60,28,17,30,60,32,17,34,60,36,17:9:5,0,6,230,7,70,8,255,10,255,12,72,14,60,16,17,18,60,20,17,22,60,24,17,26,60,28,17,30,60,32,17,34,60,36,17 + 8:5,0,6,230,7,70,8,255,10,255,12,48,14,60,16,11,18,60,20,11,22,60,24,11,26,60,28,11,30,60,32,11,34,60,36,11:9:5,0,6,230,7,70,8,255,10,255,12,48,14,60,16,11,18,60,20,11,22,60,24,11,26,60,28,11,30,60,32,11,34,60,36,11 + 8:5,0,6,230,7,70,8,255,10,255,12,24,14,60,16,6,18,60,20,6,22,60,24,6,26,60,28,6,30,60,32,6,34,60,36,6:9:5,0,6,230,7,70,8,255,10,255,12,24,14,60,16,6,18,60,20,6,22,60,24,6,26,60,28,6,30,60,32,6,34,60,36,6 + + + + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0 + 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0 + + + + 8 + Forward + 255 + + + 9 + Forward + 255 + + Parallel + + Forward + Loop + Eight + 28 + 22 + 0 + + 128 + 1 + 0 + + + 80 + 1 + 0 + + + + 73 + 74 + 76 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,90,19,74,20,56,21,0,22,90,23,74,24,56,25,0,26,90,27,74,28,56,29,0,30,90,31,74,32,56,33,0,34,90,35,74,36,56,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,90,19,74,20,56,21,0,22,90,23,74,24,56,25,0,26,90,27,74,28,56,29,0,30,90,31,74,32,56,33,0,34,90,35,74,36,56,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,90,19,74,20,56,21,0,22,90,23,74,24,56,25,0,26,90,27,74,28,56,29,0,30,90,31,74,32,56,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,90,19,74,20,56,21,0,22,90,23,74,24,56,25,0,26,90,27,74,28,56,29,0,30,90,31,74,32,56,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,90,19,74,20,56,21,0,22,90,23,74,24,56,25,0,26,90,27,74,28,56,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,90,19,74,20,56,21,0,22,90,23,74,24,56,25,0,26,90,27,74,28,56,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,90,19,74,20,56,21,0,22,90,23,74,24,56,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,90,19,74,20,56,21,0,22,90,23,74,24,56,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,90,15,74,16,56,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,210,12,160,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + SingleShot + + 78 + 79 + 80 + 81 + 82 + 83 + 84 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,180,15,148,16,113,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,180,15,148,16,113,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,180,19,148,20,113,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,180,19,148,20,113,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,180,23,148,24,113,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,180,23,148,24,113,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,180,27,148,28,113,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,180,27,148,28,113,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,180,31,148,32,113,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,180,31,148,32,113,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,180,35,148,36,113,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,180,35,148,36,113,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,255,9,0,10,255,11,255,12,255,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + SingleShot + + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,180,9,0,10,255,11,200,12,140,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,180,9,0,10,255,11,200,12,140,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + SingleShot + + 95 + 75 + + + + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + 0,128,2,80,4,0,5,0,6,191,7,70,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0 + + + + Forward + SingleShot + + 97 + 97 + 75 + + + 9 + 77 + + + 18 + 77 + + + 22 + 77 + + + 55 + 77 + + + 67 + 77 + + + Arial,12,-1,5,50,0,0,0,0,0 + 0 + 0 + + + + + + + + + + + + +
+ + + + None + Default + Default + None + Default + + + + Sunken + Default + Default + None + Default + + + True + True + True + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sunken + Default + Default + None + Default + + 108 + + + 9 + 18 + 19 + 22 + 32 + 41 + 50 + 55 + 60 + 63 + 67 + 68 + 69 + 74 + 76 + 101 + 102 + 103 + 104 + 105 + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 8 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 2 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 3 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 4 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 5 + + + 4294967295 + + + + + + Sunken + Default + Default + None + Default + + + + + + + + + + + + + + EFX + Figure of 8 + 76 + + + + + + Sunken + 4294944000 + Default + None + Default + + Level + + + 0 + 0 + + + 4294967295 + + + + + + Sunken + 4278255615 + Default + None + Default + + Level + + + 2 + 2 + + + 4294967295 + + + + + + Sunken + 4294967040 + Default + None + Default + + Level + + + 5 + 5 + + + 4294967295 + + + + + + Sunken + 4294902015 + Default + None + Default + + Level + + + 7 + 7 + + + 4294967295 + + + + + + Sunken + 4294967295 + Default + None + Default + + Level + + + 8 + 8 + + + 4294967295 + + + + + + Sunken + 4294901760 + Default + None + Default + + Level + + + 10 + 10 + + + 4294967295 + + + + + + Sunken + 4278255360 + Default + None + Default + + Level + + + 11 + 11 + + + 4294967295 + + + + + + Sunken + 4278190335 + Default + None + Default + + Level + + + 12 + 12 + + + 4294967295 + + + + + + Sunken + 4288256409 + Default + None + Default + + Level + + + 14 + 15 + 16 + 18 + 19 + 20 + 22 + 23 + 24 + 26 + 27 + 28 + 30 + 31 + 32 + 34 + 35 + 36 + 14 + 15 + 16 + 18 + 19 + 20 + 22 + 23 + 24 + 26 + 27 + 28 + 30 + 31 + 32 + 34 + 35 + 36 + + + 4294967295 + + + + + + Sunken + 4291611852 + Default + None + Default + + Level + + + 6 + 6 + + + 4294967295 + + + + + + + + + + + +
\ No newline at end of file diff --git a/stage/map.canvas.tsx b/stage/map.canvas.tsx new file mode 100644 index 0000000..9d12b90 --- /dev/null +++ b/stage/map.canvas.tsx @@ -0,0 +1,279 @@ +import { + Card, + CardBody, + CardHeader, + H1, + H2, + Stack, + Table, + Text, + useHostTheme, +} from "cursor/canvas"; + +/** Y=0 = row of 4; +Y toward audience. Side cans on walls at ±3.5 m. */ +const WALL = 3.5; +const FIXTURES: { + key: string; + label: string; + kind: "can" | "mover"; + x: number; + y: number; +}[] = [ + { key: "c3", label: "#3", kind: "can", x: -1.8, y: 0.0 }, + { key: "c4", label: "#4", kind: "can", x: -0.6, y: 0.0 }, + { key: "c5", label: "#5", kind: "can", x: 0.6, y: 0.0 }, + { key: "c6", label: "#6", kind: "can", x: 1.8, y: 0.0 }, + { key: "c2", label: "#2", kind: "can", x: -WALL, y: 1.2 }, + { key: "c7", label: "#7", kind: "can", x: WALL, y: 1.2 }, + { key: "m1", label: "M1", kind: "mover", x: -0.3, y: 1.1 }, + { key: "m2", label: "M2", kind: "mover", x: 0.3, y: 1.1 }, + { key: "c1", label: "#1", kind: "can", x: -WALL, y: 2.4 }, + { key: "c8", label: "#8", kind: "can", x: WALL, y: 2.4 }, +]; + +const BUILDING_W = 7; +const DEPTH = 2.4; + +export default function StageMap() { + const theme = useHostTheme(); + + const pad = 0.55; + const x0 = -BUILDING_W / 2 - pad; + const x1 = BUILDING_W / 2 + pad; + const y0 = -0.45; + const y1 = DEPTH + 0.55; + const vbW = x1 - x0; + const vbH = y1 - y0; + const px = 88; + const svgW = vbW * px; + const svgH = vbH * px; + + const sx = (x: number) => ((x - x0) / vbW) * svgW; + const sy = (y: number) => ((y1 - y) / vbH) * svgH; + + const dim = theme.text.tertiary; + const ink = theme.text.primary; + const accent = theme.accent.primary; + const canFill = theme.fill.tertiary; + const stroke = theme.stroke.primary; + const onAccent = theme.text.onAccent; + + function DimH( + xA: number, + xB: number, + y: number, + label: string, + side: "above" | "below" = "above", + ) { + const ya = sy(y); + const x1p = sx(Math.min(xA, xB)); + const x2p = sx(Math.max(xA, xB)); + const mid = (x1p + x2p) / 2; + const ty = side === "above" ? ya - 8 : ya + 14; + return ( + + + + + + {label} + + + ); + } + + function DimV( + yA: number, + yB: number, + x: number, + label: string, + side: "left" | "right" = "right", + ) { + const xa = sx(x); + const y1p = sy(Math.max(yA, yB)); + const y2p = sy(Math.min(yA, yB)); + const mid = (y1p + y2p) / 2; + const tx = side === "right" ? xa + 8 : xa - 8; + return ( + + + + + + {label} + + + ); + } + + return ( + + +

Stage map

+ + Building {BUILDING_W} m wide · walls at ±{WALL} m · Y = 0 at row of 4 · + +Y toward audience + +
+ + + Plan (audience at bottom) + + + + {/* Wall labels */} + + 3.5 m from centre + + + 3.5 m from centre + + {DimH(0, -WALL, 1.8, "3.5 m", "above")} + {DimH(0, WALL, 1.8, "3.5 m", "below")} + + + centre + + + AUDIENCE + + + row of 4 + + + {DimH(-3.5, 3.5, DEPTH + 0.32, "7.0 m building", "below")} + {DimH(0, 0.6, 0, "0.6", "above")} + {DimH(0, 1.8, 0, "1.8", "above")} + {DimH(0, -0.6, 0, "0.6", "below")} + {DimH(0, -1.8, 0, "1.8", "below")} + {DimH(0, 0.3, 1.1, "0.3", "above")} + {DimV(0, 1.1, 2.4, "1.1 m movers")} + {DimV(0, 1.2, 2.4, "1.2 m")} + {DimV(0, 2.4, -2.4, "2.4 m", "left")} + + {FIXTURES.map((f) => { + const cx = sx(f.x); + const cy = sy(f.y); + const r = f.kind === "mover" ? 14 : 12; + return ( + + {f.kind === "mover" ? ( + + ) : ( + + )} + + {f.label} + + + ); + })} + + + + + +

Coordinates

+ + + Source: integrate_u_patterns.py LAYOUT_M + + + + ); +} diff --git a/stage/map.json b/stage/map.json new file mode 100644 index 0000000..c10e9b8 --- /dev/null +++ b/stage/map.json @@ -0,0 +1,67 @@ +{ + "units": "metres", + "building_width": 7.0, + "origin": "Y=0 at row of 4; +Y toward audience; X=0 centre", + "fixtures": { + "#1": { + "x": -3.5, + "y": 2.4, + "label": "#1", + "kind": "can" + }, + "#2": { + "x": -3.5, + "y": 1.2, + "label": "#2", + "kind": "can" + }, + "#3": { + "x": -1.8, + "y": 0.0, + "label": "#3", + "kind": "can" + }, + "#4": { + "x": -0.6, + "y": 0.0, + "label": "#4", + "kind": "can" + }, + "#5": { + "x": 0.6, + "y": 0.0, + "label": "#5", + "kind": "can" + }, + "#6": { + "x": 1.8, + "y": 0.0, + "label": "#6", + "kind": "can" + }, + "#7": { + "x": 3.5, + "y": 1.2, + "label": "#7", + "kind": "can" + }, + "#8": { + "x": 3.5, + "y": 2.4, + "label": "#8", + "kind": "can" + }, + "M1": { + "x": -0.3, + "y": 1.1, + "label": "M1", + "kind": "mover" + }, + "M2": { + "x": 0.3, + "y": 1.1, + "label": "M2", + "kind": "mover" + } + } +} diff --git a/stage/map.svg b/stage/map.svg new file mode 100644 index 0000000..66f4915 --- /dev/null +++ b/stage/map.svg @@ -0,0 +1,97 @@ + + + XCHC stage map — 7 m building + Y=0 row of 4; +Y toward audience. Sides on walls ±3.5 m. Movers ±0.3 m, 1.1 m in front of row of 4. + + + + centre + AUDIENCE + row of 4 + + + + + 7.0 m building + + + + + + 0.6 m + + + + + + 1.8 m + + + + + + 0.6 m + + + + + + 1.8 m + + + + + + 0.3 m + + + + + + 3.5 m + + + + + + 3.5 m + + + + + + 1.1 m movers + + + + + + 1.2 m + + + + + + 2.4 m + + + #1 + + #2 + + #3 + + #4 + + #5 + + #6 + + #7 + + #8 + + M1 + + M2 + diff --git a/tests/test_small_eye.py b/tests/test_small_eye.py new file mode 100755 index 0000000..11433be --- /dev/null +++ b/tests/test_small_eye.py @@ -0,0 +1,294 @@ +#!/usr/bin/env python3 +"""Art-Net tester for Small Eye 7 Mover channels 5 / 6 / 7. + +Pan/tilt (1–4) already look right. This script lights the centre LED, then +isolates: + + CH5 pan/tilt speed — head should move fast at 0, crawl at 255 + CH6 zoom — beam should grow/shrink + CH7 lens rotate — front glass spins only in 128–188 or 194–255, + and often only when zoom is fully in (narrow) + +Quit with Ctrl+C (sends blackout). Stop QLC+ output first so the two +sources do not fight. + +Example: + python3 test_small_eye.py --ip 192.168.1.228 --address 1 +""" + +from __future__ import annotations + +import argparse +import socket +import sys +import threading +import time + +ARTNET_PORT = 6454 +HEADER = b"Art-Net\x00" +OP_DMX = 0x5000 +PROT_VER = 14 + +# 1-based fixture channels (43ch pixel mode) +CH_PAN = 1 +CH_TILT = 3 +CH_SPEED = 5 +CH_ZOOM = 6 +CH_ROTATE = 7 +CH_FOCUS = 8 +CH_DIMMER = 9 +CH_STROBE = 10 +CH_RED = 11 +CH_GREEN = 12 +CH_BLUE = 13 +CH_WHITE = 14 +FIXTURE_CHANNELS = 43 + + +def build_artdmx(channels: bytes, universe: int = 0, sequence: int = 1) -> bytes: + data = bytearray(channels) + n = len(data) + if n < 2: + data.extend(b"\x00" * (2 - n)) + n = 2 + if n & 1: + data.append(0) + n += 1 + if n > 512: + data = data[:512] + n = 512 + pkt = bytearray(18 + n) + pkt[0:8] = HEADER + pkt[8:10] = bytes((OP_DMX & 0xFF, OP_DMX >> 8)) + pkt[10] = 0 + pkt[11] = PROT_VER + pkt[12] = sequence & 0xFF + pkt[13] = 0 + pkt[14] = universe & 0xFF + pkt[15] = 0 + pkt[16] = (n >> 8) & 0xFF + pkt[17] = n & 0xFF + pkt[18 : 18 + n] = data + return bytes(pkt) + + +class ArtNetSender: + def __init__(self, dest: str, universe: int = 0, hz: float = 40.0): + self.dest = dest + self.universe = universe + self.period = 1.0 / hz + self.frame = bytearray(512) + self.sequence = 1 + self._lock = threading.Lock() + self._running = True + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + self._thread = threading.Thread(target=self._loop, daemon=True) + self._thread.start() + + def _loop(self): + while self._running: + with self._lock: + pkt = build_artdmx(self.frame, self.universe, self.sequence) + self.sequence = 1 if self.sequence >= 255 else self.sequence + 1 + try: + self.sock.sendto(pkt, (self.dest, ARTNET_PORT)) + except OSError as exc: + print(f"Art-Net send failed: {exc}", file=sys.stderr) + time.sleep(self.period) + + def set_slot(self, dmx_addr: int, value: int): + """dmx_addr is 1-based DMX.""" + with self._lock: + self.frame[dmx_addr - 1] = max(0, min(255, int(value))) + + def blackout(self): + with self._lock: + self.frame[:] = b"\x00" * 512 + + def close(self): + self.blackout() + time.sleep(self.period * 3) + self._running = False + self._thread.join(timeout=1.0) + self.sock.close() + + +class SmallEye: + def __init__(self, sender: ArtNetSender, address: int): + self.artnet = sender + self.address = address + + def set(self, channel: int, value: int): + self.artnet.set_slot(self.address + channel - 1, value) + + def park_light(self, pan=128, tilt=80, dimmer=255, white=255, rgb=40): + """Still, visible beam. Strobe open, pixels off except centre RGBW.""" + for ch in range(1, FIXTURE_CHANNELS + 1): + self.set(ch, 0) + self.set(CH_PAN, pan) + self.set(CH_TILT, tilt) + self.set(CH_SPEED, 0) + self.set(CH_ZOOM, 0) + self.set(CH_ROTATE, 0) + self.set(CH_FOCUS, 128) + self.set(CH_DIMMER, dimmer) + self.set(CH_STROBE, 0) + self.set(CH_RED, rgb) + self.set(CH_GREEN, rgb) + self.set(CH_BLUE, rgb) + self.set(CH_WHITE, white) + + +def say(msg: str): + print(f"\n=== {msg} ===", flush=True) + + +def hold(seconds: float, label: str = ""): + if label: + print(f" {label}", flush=True) + end = time.monotonic() + seconds + while time.monotonic() < end: + time.sleep(0.05) + + +def sweep(fixture: SmallEye, channel: int, start: int, stop: int, seconds: float): + steps = max(1, int(seconds * 40)) + for i in range(steps + 1): + value = int(start + (stop - start) * i / steps) + fixture.set(channel, value) + time.sleep(seconds / steps) + + +def wait_enter(enabled: bool, prompt: str): + if enabled: + input(f" {prompt} [Enter] ") + + +def test_speed(fixture: SmallEye, hold_s: float, pause: bool): + say("CH5 pan/tilt SPEED") + print("Watch the HEAD (yoke), not the lens.") + print("CH5=0 should be fast, CH5=255 should crawl.") + fixture.park_light() + wait_enter(pause, "Ready to wiggle pan") + for speed in (0, 80, 160, 255): + fixture.set(CH_SPEED, speed) + print(f" CH5 = {speed:3d} sweeping pan 40 → 220") + sweep(fixture, CH_PAN, 40, 220, hold_s) + sweep(fixture, CH_PAN, 220, 40, hold_s) + fixture.set(CH_PAN, 128) + fixture.set(CH_SPEED, 0) + + +def test_zoom(fixture: SmallEye, hold_s: float, pause: bool): + say("CH6 ZOOM") + print("Watch the SPOT size on the wall. Should grow then shrink.") + fixture.park_light() + fixture.set(CH_ROTATE, 0) + wait_enter(pause, "Ready for zoom sweep") + print(" CH6 0 → 255") + sweep(fixture, CH_ZOOM, 0, 255, hold_s * 2) + hold(1.5, "CH6 = 255 (hold)") + print(" CH6 255 → 0") + sweep(fixture, CH_ZOOM, 255, 0, hold_s * 2) + hold(1.5, "CH6 = 0 (hold, narrow)") + + +def test_rotate(fixture: SmallEye, hold_s: float, pause: bool): + say("CH7 LENS ROTATE") + print("Watch the FRONT GLASS. Index 0–127 does not spin.") + print("Spin is 128–188 (CCW) and 194–255 (CW). 189–193 is stop.") + print("If nothing moves, zoom is probably too wide — trying both extremes.") + fixture.park_light() + wait_enter(pause, "Ready for rotate") + + points = [ + (0, "index 0°"), + (64, "index mid"), + (127, "index 60°"), + (160, "SPIN CCW"), + (191, "stop band"), + (220, "SPIN CW"), + (255, "SPIN CW fast"), + (0, "back to index 0"), + ] + for zoom in (0, 255): + fixture.set(CH_ZOOM, zoom) + fixture.set(CH_ROTATE, 0) + print(f"\n zoom CH6 = {zoom}") + hold(1.0) + for value, label in points: + fixture.set(CH_ROTATE, value) + hold(hold_s, f"CH7 = {value:3d} {label}") + fixture.set(CH_ROTATE, 0) + fixture.set(CH_ZOOM, 0) + + +def test_hunt(fixture: SmallEye, hold_s: float, pause: bool): + say("HUNT: put spin values on CH5, then CH6, then CH7") + print("Whichever channel actually spins the glass is lens rotate.") + fixture.park_light() + wait_enter(pause, "Ready to hunt rotate") + for candidate in (CH_SPEED, CH_ZOOM, CH_ROTATE): + fixture.park_light() + # Narrow zoom on the other two optics channels + if candidate != CH_ZOOM: + fixture.set(CH_ZOOM, 0) + print(f"\n putting spin (160, then 220) on CH{candidate}") + fixture.set(candidate, 160) + hold(hold_s, f"CH{candidate} = 160 CCW") + fixture.set(candidate, 220) + hold(hold_s, f"CH{candidate} = 220 CW") + fixture.set(candidate, 0) + + +def parse_args(): + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--ip", default="192.168.1.228", help="Art-Net destination (QLC uses 192.168.1.228)") + p.add_argument("--universe", type=int, default=0, help="Art-Net universe (default 0)") + p.add_argument("--address", type=int, default=1, help="Fixture DMX start address, 1-based") + p.add_argument("--hold", type=float, default=3.0, help="Seconds to hold each rotate/speed step") + p.add_argument("--pause", action="store_true", help="Wait for Enter before each test") + p.add_argument( + "--only", + choices=("speed", "zoom", "rotate", "hunt", "all"), + default="all", + help="Run one test (default all)", + ) + return p.parse_args() + + +def main(): + args = parse_args() + if not 1 <= args.address <= 512: + sys.exit("address must be 1–512") + + print( + f"Art-Net → {args.ip} universe {args.universe} " + f"fixture start {args.address} (43ch)" + ) + print("Stop QLC+ Art-Net output first.") + + sender = ArtNetSender(args.ip, universe=args.universe) + fixture = SmallEye(sender, args.address) + try: + fixture.park_light() + hold(2.0, "centre LED on, head still") + tests = { + "speed": lambda: test_speed(fixture, args.hold, args.pause), + "zoom": lambda: test_zoom(fixture, args.hold, args.pause), + "rotate": lambda: test_rotate(fixture, args.hold, args.pause), + "hunt": lambda: test_hunt(fixture, args.hold, args.pause), + } + order = ("speed", "zoom", "rotate", "hunt") if args.only == "all" else (args.only,) + for name in order: + tests[name]() + say("done — blackout") + except KeyboardInterrupt: + print("\nstopped") + finally: + sender.close() + + +if __name__ == "__main__": + main() diff --git a/xchc.qxw b/xchc.qxw deleted file mode 100644 index debb5a8..0000000 --- a/xchc.qxw +++ /dev/null @@ -1,1191 +0,0 @@ - - - - - Q Light Controller Plus - 4.12.7 - Jimmy - - - - - - - - - - - - beamZ - BCC145 - 8 Channel - 0 - BCC145 #1 - 0 -
87
- 8 -
- - beamZ - BCC145 - 8 Channel - 1 - BCC145 #2 - 0 -
95
- 8 -
- - beamZ - BCC145 - 8 Channel - 2 - BCC145 #3 - 0 -
103
- 8 -
- - beamZ - BCC145 - 8 Channel - 3 - BCC145 #4 - 0 -
111
- 8 -
- - beamZ - BCC145 - 8 Channel - 4 - BCC145 #5 - 0 -
119
- 8 -
- - beamZ - BCC145 - 8 Channel - 5 - BCC145 #6 - 0 -
127
- 8 -
- - beamZ - BCC145 - 8 Channel - 6 - BCC145 #7 - 0 -
135
- 8 -
- - beamZ - BCC145 - 8 Channel - 7 - BCC145 #8 - 0 -
143
- 8 -
- - BCC145 Line - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - - - - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - - - - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - - - - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - - - - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - - - - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - - - - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - - - - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - - - - 1,0,2,0,3,0,4,0,5,255,6,0,7,0 - 1,0,2,0,3,0,4,0,5,255,6,0,7,0 - 1,0,2,0,3,0,4,0,5,255,6,0,7,0 - 1,0,2,0,3,0,4,0,5,255,6,0,7,0 - 1,0,2,0,3,0,4,0,5,255,6,0,7,0 - 1,0,2,0,3,0,4,0,5,255,6,0,7,0 - 1,0,2,0,3,0,4,0,5,255,6,0,7,0 - 1,0,2,0,3,0,4,0,5,255,6,0,7,0 - - - - Forward - Loop - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - - - - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - - - - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - - - - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - - - - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - - - - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - - - - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - - - - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - - - - 1,0,2,255,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,127,4,0,5,0,6,0,7,0 - 1,0,2,255,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,0,5,0,6,0,7,0 - 1,0,2,0,3,255,4,255,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,127,3,0,4,255,5,0,6,0,7,0 - - - - Forward - Loop - - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - - - - Forward - Loop - Gradient - 4294901760 - RGB - 0 - - - - - - - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - - - - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 1,0,2,0,3,0,4,255,5,0,6,0,7,0 - - - - Forward - Loop - - 20 - 21 - - - - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - - - - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - - - - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - - - - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - - - - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - - - - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - - - - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - - - - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - - - - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0 - 1,0,2,255,3,0,4,0,5,0,6,0,7,0 - - - - Forward - Loop - - 24 - 23 - 25 - 23 - 26 - 23 - 27 - 23 - 28 - 23 - 29 - 23 - 30 - 23 - 31 - 23 - - - Arial,12,-1,5,50,0,0,0,0,0 - 0 - 0 - - - - - - - - - - -
- - - - None - Default - Default - None - Default - - - - - - - - - Sunken - Default - Default - None - Default - - 108 - - - 9 - 18 - 19 - 22 - 32 - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - - - 4294967295 - - - - - - Sunken - 4294901760 - Default - None - Default - - Level - - - 2 - - - 4294967295 - - - - - - Sunken - 4278255360 - Default - None - Default - - Level - - - 3 - - - 4294967295 - - - - - - Sunken - 4278190335 - Default - None - Default - - Level - - - 4 - - - 4294967295 - - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - - 5 - - - 4294967295 - - - - - - Sunken - 4294901760 - Default - None - Default - - Level - - - 2 - - - 4294967295 - - - - - - Sunken - 4278255360 - Default - None - Default - - Level - - - 3 - - - 4294967295 - - - - - - Sunken - 4278190335 - Default - None - Default - - Level - - - 4 - - - 4294967295 - - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - - 5 - - - 4294967295 - - - - - - Sunken - 4294901760 - Default - None - Default - - Level - - - 2 - - - 4294967295 - - - - - - Sunken - 4278255360 - Default - None - Default - - Level - - - 3 - - - 4294967295 - - - - - - Sunken - 4278190335 - Default - None - Default - - Level - - - 4 - - - 4294967295 - - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - - 5 - - - 4294967295 - - - - - - Sunken - 4294901760 - Default - None - Default - - Level - - - 2 - - - 4294967295 - - - - - - Sunken - 4278255360 - Default - None - Default - - Level - - - 3 - - - 4294967295 - - - - - - Sunken - 4278190335 - Default - None - Default - - Level - - - 4 - - - 4294967295 - - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - - 5 - - - 4294967295 - - - - - - Sunken - 4294901760 - Default - None - Default - - Level - - - 2 - - - 4294967295 - - - - - - Sunken - 4278255360 - Default - None - Default - - Level - - - 3 - - - 4294967295 - - - - - - Sunken - 4278190335 - Default - None - Default - - Level - - - 4 - - - 4294967295 - - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - - 5 - - - 4294967295 - - - - - - Sunken - 4294901760 - Default - None - Default - - Level - - - 2 - - - 4294967295 - - - - - - Sunken - 4278255360 - Default - None - Default - - Level - - - 3 - - - 4294967295 - - - - - - Sunken - 4278190335 - Default - None - Default - - Level - - - 4 - - - 4294967295 - - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - - 5 - - - 4294967295 - - - - - - Sunken - 4294901760 - Default - None - Default - - Level - - - 2 - - - 4294967295 - - - - - - Sunken - 4278255360 - Default - None - Default - - Level - - - 3 - - - 4294967295 - - - - - - Sunken - 4278190335 - Default - None - Default - - Level - - - 4 - - - 4294967295 - - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - - 5 - - - 4294967295 - - - - - - Sunken - 4294901760 - Default - None - Default - - Level - - - 2 - - - 4294967295 - - - - - - Sunken - 4278255360 - Default - None - Default - - Level - - - 3 - - - 4294967295 - - - - - - Sunken - 4278190335 - Default - None - Default - - Level - - - 4 - - - 4294967295 - - - - - - Sunken - 4294967295 - Default - None - Default - - Level - - - 5 - - - 4294967295 - - - - - - - - - - - -