{
 "firmware": "Hortator",
 "slug": "hortator",
 "author": "DEADACTIVE; based on Felucca by Leo Kuroshita (Hügelton Instruments)",
 "repo": "https://github.com/deadactive/hortator",
 "licence": "GPL-3.0-only (code; separate asset and third-party licences)",
 "closed_source": false,
 "mapped_release": "drum-v0.16.0",
 "mapped_commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
 "release_date": "2026-10-11",
 "date_mapped": "2026-10-16",
 "turns_it_into": "An eight-track drum machine with 64-step patterns, Grids rhythms, two ACID bass tracks, motion recording, song chains and live effects.",
 "docs": [
  {
   "title": "Hortator guide",
   "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/README.md",
   "words": 2374,
   "read_at": "2026-10-16",
   "word_count_method": "Whitespace-separated tokens in the Markdown source."
  },
  {
   "title": "CPU benchmarks and optimization notes",
   "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/docs/PERFORMANCE.md",
   "words": 1039,
   "read_at": "2026-10-16",
   "word_count_method": "Whitespace-separated tokens in the Markdown source."
  },
  {
   "title": "Licensing",
   "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/LICENSING.md",
   "words": 736,
   "read_at": "2026-10-16",
   "word_count_method": "Whitespace-separated tokens in the Markdown source."
  }
 ],
 "install": {
  "official": "https://github.com/deadactive/hortator/releases/tag/drum-v0.16.0",
  "hub": "https://thefirmwarehub.com/",
  "packages": [
   {
    "file": "hortator-0.16.0.fwsc",
    "what": "Plain build with Bluetooth disabled; this is the package listed by the community hub catalogue.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/felucca.c",
      "lines": "50-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/felucca.c#L50-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "tools/build.py",
      "lines": "470-480",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/tools/build.py#L470-L480"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "tools/publish.sh",
      "lines": "53-54",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/tools/publish.sh#L53-L54"
     }
    ],
    "hub_evidence": {
     "path": "scratchpad/parity/community/raw/dirs/hubcatalog.json",
     "lines": "34-58",
     "read_at": "2026-10-16",
     "catalogue_id": "hortator",
     "package": "fw/hortator-0.16.0.fwsc"
    }
   },
   {
    "file": "hortator-0.16.0-bluetooth.fwsc",
    "what": "Adds the optional Bluetooth MIDI stack, Bluetooth menu and SMC-Mixer handling; Bluetooth is off at every power-on until enabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/felucca.c",
      "lines": "171-190",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/felucca.c#L171-L190"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "4-18",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L4-L18"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "tools/build.py",
      "lines": "470-480",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/tools/build.py#L470-L480"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "tools/publish.sh",
      "lines": "53-54",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/tools/publish.sh#L53-L54"
     }
    ]
   }
  ]
 },
 "part_id_notes": "The shared button_sel is named SCL by Hortator; ENV has no normal assignment; ALGORITHM selects the track and PRESETS changes pages; encoders have no push action; button LEDs use lights.<button part> and the key LEDs use lights.key_lights with groups.key_lights. The USB-C connection uses the shared jack_usb_c part id.",
 "mode_precedence": "NAME, the menu and clear dialogs override ordinary navigation; any entries describe ordinary screens unless they explicitly name a modal context; PERFORM claims keys first, then TRACKS REC-held shortcuts, step recording, step-grid keys, COMP duck keys, KEYS, and ordinary drum pads; overlay modes such as grid and keys apply across the page modes specified in their descriptions.",
 "modes": [
  {
   "id": "drum_play",
   "name": "Drum pads",
   "how_to_get_there": "Leave KEYS off and use a screen outside SEQ, COMP, TRACKS, the menu and NAME.",
   "what_it_is": "The first eight white keys play the eight tracks; on HOME and track editing screens they select the track too.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/seq.c",
     "lines": "393-441",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L393-L441"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "743-751",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L751"
    }
   ]
  },
  {
   "id": "keys",
   "name": "Chromatic keys",
   "how_to_get_there": "Press SEL to enable KEYS outside TRACKS and COMP.",
   "what_it_is": "All 27 keys play the selected track across F3 to G5 at octave zero; the octave shift ranges from -2 to +2.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "107-128",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L107-L128"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/seq.c",
     "lines": "292-309",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L309"
    }
   ]
  },
  {
   "id": "grid",
   "name": "Step keys",
   "how_to_get_there": "Leave KEYS off on any SEQ screen, or open TRACKS with no tracks armed.",
   "what_it_is": "The sixteen white keys edit the visible bank of steps; SONG running or armed and a Grids source block step editing.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "114-128",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L114-L128"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "294-331",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L294-L331"
    }
   ]
  },
  {
   "id": "tracks_armed",
   "name": "TRACKS with recording armed",
   "how_to_get_there": "Tap REC on TRACKS.",
   "what_it_is": "Drum pads sound and record armed tracks; hold REC for mute shortcuts.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "121-128",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L121-L128"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/seq.c",
     "lines": "285-290",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/seq.c",
     "lines": "425-438",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L438"
    }
   ]
  },
  {
   "id": "tracks_mute",
   "name": "TRACKS mute shortcuts",
   "how_to_get_there": "Hold REC on TRACKS.",
   "what_it_is": "The first eight white keys toggle track mutes and the upper C# and D# choose mute timing.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "715-726",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
    }
   ]
  },
  {
   "id": "comp_keys",
   "name": "Compressor track keys",
   "how_to_get_there": "Tap HOME from HOME to reach either COMP screen.",
   "what_it_is": "The first eight white keys choose which tracks the compressor ducks; the source track cannot be ducked.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "409-414",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "743-746",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
    }
   ]
  },
  {
   "id": "step_record",
   "name": "Step recording",
   "how_to_get_there": "Enable KEYS on STEP while stopped, then tap REC.",
   "what_it_is": "Notes are entered at a cursor; keys advance on release and EDIT inserts a rest. If multiple keys arrive in the same scan, only the highest new key enters a note.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "468-531",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L468-L531"
    }
   ]
  },
  {
   "id": "name",
   "name": "Project name",
   "how_to_get_there": "On PROJECT choose a used slot, stop playback, then turn NAME right.",
   "what_it_is": "An on-device text editor for a saved project name, up to twelve characters.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_name.c",
     "lines": "64-91",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L64-L91"
    }
   ]
  },
  {
   "id": "menu",
   "name": "Device menu",
   "how_to_get_there": "Hold HOME past 0.7 seconds.",
   "what_it_is": "Device options, calibration, ABOUT and, in the Bluetooth build, Bluetooth controls. The first eight white keys still play and can record drum hits; this also applies to ABOUT and Bluetooth.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "378-396",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L378-L396"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_menu.c",
     "lines": "5-23",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L5-L23"
    }
   ]
  },
  {
   "id": "about",
   "name": "About screen",
   "how_to_get_there": "Select ABOUT in the menu and press OCT+.",
   "what_it_is": "Version, build date, credits and licence information.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_menu.c",
     "lines": "49-62",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L49-L62"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_menu.c",
     "lines": "176-179",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L176-L179"
    }
   ]
  },
  {
   "id": "bluetooth",
   "name": "Bluetooth menu",
   "how_to_get_there": "Use the Bluetooth build, open the menu, choose BLUETOOTH and press OCT+.",
   "what_it_is": "Connection state, mode, remembered device and discovery results; Bluetooth starts off after power-on. It needs surviving manufacturer radio calibration; a failed radio start requires a power cycle before retrying.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_menu.c",
     "lines": "171-174",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L171-L174"
    },
    {
     "kind": "doc",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "README.md",
     "lines": "83-103",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/README.md#L83-L103"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ble/ble_port.c",
     "lines": "217-237",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ble/ble_port.c#L217-L237"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ble/ble_central.c",
     "lines": "451-460",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ble/ble_central.c#L451-L460"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/bt_page.c",
     "lines": "118-125",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L118-L125"
    }
   ]
  },
  {
   "id": "confirm",
   "name": "Clear confirmation",
   "how_to_get_there": "Hold REC on SEQ, or turn CLEAR right on MOTION.",
   "what_it_is": "OCT+ confirms the named clear or delete operation and OCT- cancels it. The dialog ignores key editing commands but leaves the previous screen’s audio and MIDI routing active.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "189-198",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L189-L198"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "594-645",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L594-L645"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/seq.c",
     "lines": "420-439",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
    }
   ]
  },
  {
   "id": "perform",
   "name": "Live performance effects",
   "how_to_get_there": "Hold FX for 0.4 seconds, or hold FX and use a key or KNOB 1-4.",
   "what_it_is": "Momentary master effects and track mutes; PERFORM PAGE in the menu can leave this screen open after FX is released.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "399-408",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L399-L408"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "417-465",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L417-L465"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "Panel calibration",
   "how_to_get_there": "Hold both OCT buttons at power-on or choose HARDWARE CALIBRATION in the menu.",
   "what_it_is": "Follow each button and encoder prompt; thirty seconds without the requested input restores the previous table.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "799-865",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L799-L865"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/main.c",
     "lines": "140-143",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
    }
   ]
  },
  {
   "id": "safe_start",
   "name": "Safe start",
   "how_to_get_there": "Hold SEQ while powering on.",
   "what_it_is": "Safe start silences audio and disables normal panel editing and user samples while USB recovery remains available; turn the power off to leave.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "428-448",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L428-L448"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "560-565",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L560-L565"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_draw.c",
     "lines": "1571-1577",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1571-L1577"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/fx.c",
     "lines": "414-419",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/fx.c#L414-L419"
    }
   ]
  },
  {
   "id": "update",
   "name": "USB update mode",
   "how_to_get_there": "Hold OCT- and OCT+ together for more than five seconds.",
   "what_it_is": "Audio stops for the USB updater, and the next firmware boot discards unsaved working sounds, steps, motion and song; save the working project before entering update mode.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/main.c",
     "lines": "169-192",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L169-L192"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/main.c",
     "lines": "261-262",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L261-L262"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/core.h",
     "lines": "206-207",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/core.h#L206-L207"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/motion.c",
     "lines": "20-27",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/motion.c#L20-L27"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/song.c",
     "lines": "28-38",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/song.c#L28-L38"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/project.c",
     "lines": "4-5",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L4-L5"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/project.c",
     "lines": "39-40",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L39-L40"
    }
   ]
  },
  {
   "id": "sound_nav",
   "name": "NAV SOUND navigation",
   "how_to_get_there": "Press EDIT with KEYS off.",
   "what_it_is": "The OCT+ shortcut applies to every model’s SOUND page.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "689-692",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L689-L692"
    }
   ]
  },
  {
   "id": "layer_nav",
   "name": "LAYER navigation",
   "how_to_get_there": "Press OCT+ from SOUND with KEYS off.",
   "what_it_is": "The OCT- shortcut applies to both LAYER pages.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "689-693",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L689-L693"
    }
   ]
  },
  {
   "id": "lfo_nav",
   "name": "LFO navigation",
   "how_to_get_there": "Press LFO with KEYS off.",
   "what_it_is": "OCT- chooses which LFO is shown and OCT+ changes its timing mode.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "694-701",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L694-L701"
    }
   ]
  },
  {
   "id": "home",
   "name": "Home",
   "how_to_get_there": "Tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "Shows the selected sound’s four main controls and an audio trace.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    }
   ]
  },
  {
   "id": "sound_k808_1",
   "name": "K808 SOUND 1",
   "how_to_get_there": "Choose K808 on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows K808 controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "69-71",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_k808_2",
   "name": "K808 SOUND 2",
   "how_to_get_there": "Choose K808 on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows K808 controls DIP, DRIVE, LEVEL, PAN and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "69-71",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_k808_3",
   "name": "K808 SOUND 3",
   "how_to_get_there": "Choose K808 on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows K808 controls MIDI NOTE, CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "69-71",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_k909_1",
   "name": "K909 SOUND 1",
   "how_to_get_there": "Choose K909 on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows K909 controls MODEL, TUNE, DECAY, SWEEP and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "72-74",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_k909_2",
   "name": "K909 SOUND 2",
   "how_to_get_there": "Choose K909 on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows K909 controls CLICK, SWPT, DRIVE, LEVEL and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "72-74",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_k909_3",
   "name": "K909 SOUND 3",
   "how_to_get_there": "Choose K909 on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows K909 controls PAN, MIDI NOTE, CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "72-74",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_kboom_1",
   "name": "KBOOM SOUND 1",
   "how_to_get_there": "Choose KBOOM on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows KBOOM controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "178-180",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_kboom_2",
   "name": "KBOOM SOUND 2",
   "how_to_get_there": "Choose KBOOM on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows KBOOM controls PUNCH, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "178-180",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_kboom_3",
   "name": "KBOOM SOUND 3",
   "how_to_get_there": "Choose KBOOM on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows KBOOM controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "178-180",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_kpunc_1",
   "name": "KPUNC SOUND 1",
   "how_to_get_there": "Choose KPUNC on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows KPUNC controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "276-278",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_kpunc_2",
   "name": "KPUNC SOUND 2",
   "how_to_get_there": "Choose KPUNC on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows KPUNC controls FM, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "276-278",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_kpunc_3",
   "name": "KPUNC SOUND 3",
   "how_to_get_there": "Choose KPUNC on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows KPUNC controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "276-278",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_s808_1",
   "name": "S808 SOUND 1",
   "how_to_get_there": "Choose S808 on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows S808 controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "135-137",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_s808_2",
   "name": "S808 SOUND 2",
   "how_to_get_there": "Choose S808 on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows S808 controls SNAP, NTONE, LEVEL, PAN and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "135-137",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_s808_3",
   "name": "S808 SOUND 3",
   "how_to_get_there": "Choose S808 on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows S808 controls MIDI NOTE, CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "135-137",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_s909_1",
   "name": "S909 SOUND 1",
   "how_to_get_there": "Choose S909 on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows S909 controls MODEL, TUNE, DECAY, BODY and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "138-140",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_s909_2",
   "name": "S909 SOUND 2",
   "how_to_get_there": "Choose S909 on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows S909 controls SNAP, NTONE, LEVEL, PAN and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "138-140",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_s909_3",
   "name": "S909 SOUND 3",
   "how_to_get_there": "Choose S909 on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows S909 controls MIDI NOTE, CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "138-140",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_c808_1",
   "name": "C808 SOUND 1",
   "how_to_get_there": "Choose C808 on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows C808 controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "141-143",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_c808_2",
   "name": "C808 SOUND 2",
   "how_to_get_there": "Choose C808 on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows C808 controls TAIL, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "141-143",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_c808_3",
   "name": "C808 SOUND 3",
   "how_to_get_there": "Choose C808 on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows C808 controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "141-143",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_c909_1",
   "name": "C909 SOUND 1",
   "how_to_get_there": "Choose C909 on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows C909 controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "144-146",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_c909_2",
   "name": "C909 SOUND 2",
   "how_to_get_there": "Choose C909 on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows C909 controls SPRD, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "144-146",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_c909_3",
   "name": "C909 SOUND 3",
   "how_to_get_there": "Choose C909 on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows C909 controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "144-146",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_ssnap_1",
   "name": "SSNAP SOUND 1",
   "how_to_get_there": "Choose SSNAP on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows SSNAP controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "249-251",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_ssnap_2",
   "name": "SSNAP SOUND 2",
   "how_to_get_there": "Choose SSNAP on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows SSNAP controls SNAP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "249-251",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_ssnap_3",
   "name": "SSNAP SOUND 3",
   "how_to_get_there": "Choose SSNAP on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows SSNAP controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "249-251",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_scrak_1",
   "name": "SCRAK SOUND 1",
   "how_to_get_there": "Choose SCRAK on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows SCRAK controls MODEL, TUNE, DECAY, FM and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "343-345",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_scrak_2",
   "name": "SCRAK SOUND 2",
   "how_to_get_there": "Choose SCRAK on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows SCRAK controls SNAP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "343-345",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_scrak_3",
   "name": "SCRAK SOUND 3",
   "how_to_get_there": "Choose SCRAK on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows SCRAK controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "343-345",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hatc_1",
   "name": "HATC SOUND 1",
   "how_to_get_there": "Choose HATC on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows HATC controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "126-128",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hatc_2",
   "name": "HATC SOUND 2",
   "how_to_get_there": "Choose HATC on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows HATC controls BRITE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "126-128",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hatc_3",
   "name": "HATC SOUND 3",
   "how_to_get_there": "Choose HATC on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows HATC controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "126-128",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hato_1",
   "name": "HATO SOUND 1",
   "how_to_get_there": "Choose HATO on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows HATO controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "129-131",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hato_2",
   "name": "HATO SOUND 2",
   "how_to_get_there": "Choose HATO on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows HATO controls BRITE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "129-131",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hato_3",
   "name": "HATO SOUND 3",
   "how_to_get_there": "Choose HATO on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows HATO controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "129-131",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_cymb_1",
   "name": "CYMB SOUND 1",
   "how_to_get_there": "Choose CYMB on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows CYMB controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "132-134",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_cymb_2",
   "name": "CYMB SOUND 2",
   "how_to_get_there": "Choose CYMB on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows CYMB controls BAL, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "132-134",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_cymb_3",
   "name": "CYMB SOUND 3",
   "how_to_get_there": "Choose CYMB on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows CYMB controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "132-134",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_cowb_1",
   "name": "COWB SOUND 1",
   "how_to_get_there": "Choose COWB on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows COWB controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "135-137",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_cowb_2",
   "name": "COWB SOUND 2",
   "how_to_get_there": "Choose COWB on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows COWB controls TAIL, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "135-137",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_cowb_3",
   "name": "COWB SOUND 3",
   "how_to_get_there": "Choose COWB on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows COWB controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "135-137",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hmetl_1",
   "name": "HMETL SOUND 1",
   "how_to_get_there": "Choose HMETL on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows HMETL controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "291-293",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hmetl_2",
   "name": "HMETL SOUND 2",
   "how_to_get_there": "Choose HMETL on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows HMETL controls NOISE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "291-293",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hmetl_3",
   "name": "HMETL SOUND 3",
   "how_to_get_there": "Choose HMETL on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows HMETL controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "291-293",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hnois_1",
   "name": "HNOIS SOUND 1",
   "how_to_get_there": "Choose HNOIS on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows HNOIS controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "294-296",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hnois_2",
   "name": "HNOIS SOUND 2",
   "how_to_get_there": "Choose HNOIS on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows HNOIS controls NOISE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "294-296",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_hnois_3",
   "name": "HNOIS SOUND 3",
   "how_to_get_there": "Choose HNOIS on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows HNOIS controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "294-296",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_tom_1",
   "name": "TOM SOUND 1",
   "how_to_get_there": "Choose TOM on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows TOM controls MODEL, TUNE, DECAY, NOISE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "88-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_tom_2",
   "name": "TOM SOUND 2",
   "how_to_get_there": "Choose TOM on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows TOM controls DROP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "88-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_tom_3",
   "name": "TOM SOUND 3",
   "how_to_get_there": "Choose TOM on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows TOM controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "88-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_conga_1",
   "name": "CONGA SOUND 1",
   "how_to_get_there": "Choose CONGA on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows CONGA controls MODEL, TUNE, DECAY, SLAP and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "91-93",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_conga_2",
   "name": "CONGA SOUND 2",
   "how_to_get_there": "Choose CONGA on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows CONGA controls DROP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "91-93",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_conga_3",
   "name": "CONGA SOUND 3",
   "how_to_get_there": "Choose CONGA on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows CONGA controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "91-93",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_rim_1",
   "name": "RIM SOUND 1",
   "how_to_get_there": "Choose RIM on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows RIM controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "94-96",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_rim_2",
   "name": "RIM SOUND 2",
   "how_to_get_there": "Choose RIM on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows RIM controls DRIVE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "94-96",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_rim_3",
   "name": "RIM SOUND 3",
   "how_to_get_there": "Choose RIM on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows RIM controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "94-96",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_clave_1",
   "name": "CLAVE SOUND 1",
   "how_to_get_there": "Choose CLAVE on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows CLAVE controls MODEL, TUNE, DECAY, CLICK and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "97-99",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_clave_2",
   "name": "CLAVE SOUND 2",
   "how_to_get_there": "Choose CLAVE on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows CLAVE controls DROP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "97-99",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_clave_3",
   "name": "CLAVE SOUND 3",
   "how_to_get_there": "Choose CLAVE on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows CLAVE controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "97-99",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_memb_1",
   "name": "MEMB SOUND 1",
   "how_to_get_there": "Choose MEMB on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows MEMB controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_memb.c",
     "lines": "73-75",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_memb_2",
   "name": "MEMB SOUND 2",
   "how_to_get_there": "Choose MEMB on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows MEMB controls HEAD, POS, BEND, STICK and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_memb.c",
     "lines": "73-75",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_memb_3",
   "name": "MEMB SOUND 3",
   "how_to_get_there": "Choose MEMB on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows MEMB controls LEVEL, PAN, MIDI NOTE, CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_memb.c",
     "lines": "73-75",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_fm_1",
   "name": "FM SOUND 1",
   "how_to_get_there": "Choose FM on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows FM controls MODEL, TUNE, DECAY, INDEX and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_fm.c",
     "lines": "60-62",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_fm_2",
   "name": "FM SOUND 2",
   "how_to_get_there": "Choose FM on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows FM controls RATIO, MDEC, SWEEP, FBK and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_fm.c",
     "lines": "60-62",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_fm_3",
   "name": "FM SOUND 3",
   "how_to_get_there": "Choose FM on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows FM controls VEL, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_fm.c",
     "lines": "60-62",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_fm_4",
   "name": "FM SOUND 4",
   "how_to_get_there": "Choose FM on EDIT’s first page, then use EDIT or PRESETS to reach page 4.",
   "what_it_is": "Shows FM controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "23",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_fm.c",
     "lines": "60-62",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_acid_1",
   "name": "ACID SOUND 1",
   "how_to_get_there": "Choose ACID on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows ACID controls MODEL, TUNE, DECAY, CUTOF and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_acid.c",
     "lines": "203-206",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_acid_2",
   "name": "ACID SOUND 2",
   "how_to_get_there": "Choose ACID on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows ACID controls RESO, ENVMD, ACCNT, WAVE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_acid.c",
     "lines": "203-206",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_acid_3",
   "name": "ACID SOUND 3",
   "how_to_get_there": "Choose ACID on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows ACID controls GATE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_acid.c",
     "lines": "203-206",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_acid_4",
   "name": "ACID SOUND 4",
   "how_to_get_there": "Choose ACID on EDIT’s first page, then use EDIT or PRESETS to reach page 4.",
   "what_it_is": "Shows ACID controls CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "23",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_acid.c",
     "lines": "203-206",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_smpl_1",
   "name": "SMPL SOUND 1",
   "how_to_get_there": "Choose SMPL on EDIT’s first page, then use EDIT or PRESETS to reach page 1.",
   "what_it_is": "Shows SMPL controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "20",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_sample.c",
     "lines": "102-104",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_smpl_2",
   "name": "SMPL SOUND 2",
   "how_to_get_there": "Choose SMPL on EDIT’s first page, then use EDIT or PRESETS to reach page 2.",
   "what_it_is": "Shows SMPL controls DRIVE, SET, KEY, LEVEL and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "21",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_sample.c",
     "lines": "102-104",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "sound_smpl_3",
   "name": "SMPL SOUND 3",
   "how_to_get_there": "Choose SMPL on EDIT’s first page, then use EDIT or PRESETS to reach page 3.",
   "what_it_is": "Shows SMPL controls PAN, MIDI NOTE, CHOKE and the sound graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "22",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_sample.c",
     "lines": "102-104",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "59-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L59-L90"
    }
   ]
  },
  {
   "id": "layer_1",
   "name": "LAYER 1",
   "how_to_get_there": "Turn KEYS off, open EDIT and press OCT+.",
   "what_it_is": "Shows the layer’s set, note, level and tuning.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "24",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L24"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "layer_2",
   "name": "LAYER 2",
   "how_to_get_there": "Press EDIT again within LAYER.",
   "what_it_is": "Shows the layered sample’s decay.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "25",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L25"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "filter_1",
   "name": "FILTER 1",
   "how_to_get_there": "Tap FX and use FX or PRESETS for FILTER 1.",
   "what_it_is": "Shows the track’s filter type, cutoff, resonance and envelope amount.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "26",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L26"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "filter_2",
   "name": "FILTER 2",
   "how_to_get_there": "Use FX or PRESETS for FILTER 2.",
   "what_it_is": "Shows the track’s filter-envelope decay.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "27",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L27"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "fx",
   "name": "FX",
   "how_to_get_there": "Use FX or PRESETS for FX.",
   "what_it_is": "Shows the selected track’s distortion, chorus, delay and reverb amounts.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "28",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L28"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "slicer",
   "name": "SLICER",
   "how_to_get_there": "Use FX or PRESETS for SLICER.",
   "what_it_is": "Shows the track’s slicer mode, pattern, rate and depth.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "29",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L29"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "reson_1",
   "name": "RESON 1",
   "how_to_get_there": "Use FX or PRESETS for RESON 1.",
   "what_it_is": "Shows the track’s resonator model, tuning, decay and mix.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "30",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L30"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "reson_2",
   "name": "RESON 2",
   "how_to_get_there": "Use FX or PRESETS for RESON 2.",
   "what_it_is": "Shows resonator tone, structure or chord, and position.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "31",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L31"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "delay",
   "name": "DLY",
   "how_to_get_there": "Use FX or PRESETS for DLY.",
   "what_it_is": "Shows the shared delay’s time, feedback, color and mix.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "32",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L32"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "reverb",
   "name": "REVERB",
   "how_to_get_there": "Use FX or PRESETS for REVERB.",
   "what_it_is": "Shows the shared reverb’s model, size and damping.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "33",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L33"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "chorus",
   "name": "CHORUS",
   "how_to_get_there": "Use FX or PRESETS for CHORUS.",
   "what_it_is": "Shows the shared chorus’s rate and depth.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "34",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L34"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "comp_1",
   "name": "COMP 1",
   "how_to_get_there": "Tap HOME from Home.",
   "what_it_is": "Shows ducking source, threshold, ratio and release with a level graphic.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "35",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L35"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "comp_2",
   "name": "COMP 2",
   "how_to_get_there": "Tap HOME from COMP 1.",
   "what_it_is": "Shows ducking attack, knee, makeup and ghost behavior with its curve.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "36",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L36"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "step",
   "name": "STEP",
   "how_to_get_there": "Press SEQ, then turn PRESETS until STEP is shown; SEQ reopens its last-used page and repeated presses cycle the section.",
   "what_it_is": "Shows the selected track’s steps, or a piano roll for a gated sound, and the bank number.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "37",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L37"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "pattern",
   "name": "PATTERN",
   "how_to_get_there": "Use SEQ or PRESETS for PATTERN.",
   "what_it_is": "Shows pattern length, division, swing and step source with its step overview.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "38",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L38"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "motion",
   "name": "MOTION",
   "how_to_get_there": "Use SEQ or PRESETS for MOTION.",
   "what_it_is": "Shows this track’s motion-event count and marks steps that hold events.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "39",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L39"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "song",
   "name": "SONG",
   "how_to_get_there": "Use SEQ or PRESETS for SONG.",
   "what_it_is": "Shows song rows, referenced project slots, repeats and looping, with the active row marked.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "40",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L40"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "global_1",
   "name": "GLOBAL 1",
   "how_to_get_there": "Press GLO, then turn PRESETS until the first GLOBAL page is shown; GLO reopens its last-used page and repeated presses cycle the section.",
   "what_it_is": "Shows tempo, global swing, clock source and drum MIDI channel.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "41",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L41"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "system",
   "name": "SYSTEM",
   "how_to_get_there": "Use GLO or PRESETS for SYSTEM.",
   "what_it_is": "Shows USB connection status, inactive SYNC and ROUT fields, and CPU use.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "42",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L42"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "global_3",
   "name": "GLOBAL 3",
   "how_to_get_there": "Use GLO or PRESETS for GLOBAL 3.",
   "what_it_is": "Shows whether TRACKS mutes take effect now or at the next bar.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "43",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L43"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "project",
   "name": "PROJECT",
   "how_to_get_there": "Press SAVE, then turn PRESETS until the title reads PROJECT; SAVE may reopen TOOLS and pressing SAVE again cycles pages.",
   "what_it_is": "Shows four project slots and their names, with the selected slot and load/save controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "44",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L44"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "357-361",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L357-L361"
    }
   ]
  },
  {
   "id": "tools",
   "name": "TOOLS",
   "how_to_get_there": "Use SAVE or PRESETS for TOOLS.",
   "what_it_is": "Shows clear-track, initialize-sound, clear-all-patterns and initialize-all controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "45",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L45"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "grids_map_1",
   "name": "GRIDS MAP",
   "how_to_get_there": "Press ARP and choose MAP on KNOB 1.",
   "what_it_is": "Shows Grids map position, variation and the generated kick, snare and hat rhythms.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "46",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "grids_eucl_1",
   "name": "GRIDS EUCL",
   "how_to_get_there": "Press ARP and choose EUCL on KNOB 1.",
   "what_it_is": "Shows the Euclidean kick, snare and hat lengths and generated rhythms.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "46",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "grids_2",
   "name": "GRIDS FILL",
   "how_to_get_there": "Use ARP or PRESETS for GRIDS 2.",
   "what_it_is": "Shows the three Grids fills and the tracks routed to each generated rhythm.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "47",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L47"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "lfo_1",
   "name": "LFO PAGE 1",
   "how_to_get_there": "Press LFO and use OCT- to choose LFO 1 or 2.",
   "what_it_is": "Shows the selected LFO’s wave, rate, morph and depth with its waveform.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "49",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L49"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "lfo_2",
   "name": "LFO PAGE 2",
   "how_to_get_there": "Use LFO or PRESETS for LFO page 2.",
   "what_it_is": "Shows the selected LFO’s destination, trigger and phase with its waveform.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "50",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L50"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "tracks",
   "name": "TRACKS",
   "how_to_get_there": "Tap REC from another section.",
   "what_it_is": "Shows all eight tracks with mute, armed and activity states plus the selected track’s level, length and pan.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/pages.c",
     "lines": "51",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L51"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "193-209",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
    }
   ]
  },
  {
   "id": "seq_clear",
   "name": "SEQ track clear",
   "how_to_get_there": "Open STEP, PATTERN or MOTION.",
   "what_it_is": "The REC hold clears the selected working track through a confirmation, with KEYS either on or off.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "594-603",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L594-L603"
    }
   ]
  },
  {
   "id": "boot",
   "name": "Startup title",
   "how_to_get_there": "Power on normally.",
   "what_it_is": "The startup logo appears briefly before the main screen.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/main.c",
     "lines": "111-113",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L111-L113"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_menu.c",
     "lines": "108-117",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L108-L117"
    }
   ]
  },
  {
   "id": "ota",
   "name": "Firmware update progress",
   "how_to_get_there": "Start a supported firmware update over USB.",
   "what_it_is": "Update stages, completion or failure replace the normal screen.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/felucca.c",
     "lines": "138-161",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/felucca.c#L138-L161"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/main.c",
     "lines": "195-205",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L195-L205"
    }
   ]
  },
  {
   "id": "home_k808",
   "name": "Home with a K808 track selected",
   "how_to_get_there": "Select a track already using K808 with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses K808, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "69-71",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
    }
   ]
  },
  {
   "id": "home_k909",
   "name": "Home with a K909 track selected",
   "how_to_get_there": "Select a track already using K909 with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses K909, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "72-74",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
    }
   ]
  },
  {
   "id": "home_kboom",
   "name": "Home with a KBOOM track selected",
   "how_to_get_there": "Select a track already using KBOOM with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses KBOOM, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "178-180",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
    }
   ]
  },
  {
   "id": "home_kpunc",
   "name": "Home with a KPUNC track selected",
   "how_to_get_there": "Select a track already using KPUNC with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses KPUNC, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_kick.c",
     "lines": "276-278",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
    }
   ]
  },
  {
   "id": "home_s808",
   "name": "Home with an S808 track selected",
   "how_to_get_there": "Select a track already using S808 with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses S808, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "135-137",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
    }
   ]
  },
  {
   "id": "home_s909",
   "name": "Home with an S909 track selected",
   "how_to_get_there": "Select a track already using S909 with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses S909, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "138-140",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
    }
   ]
  },
  {
   "id": "home_c808",
   "name": "Home with a C808 track selected",
   "how_to_get_there": "Select a track already using C808 with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses C808, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "141-143",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
    }
   ]
  },
  {
   "id": "home_c909",
   "name": "Home with a C909 track selected",
   "how_to_get_there": "Select a track already using C909 with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses C909, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "144-146",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
    }
   ]
  },
  {
   "id": "home_ssnap",
   "name": "Home with a SSNAP track selected",
   "how_to_get_there": "Select a track already using SSNAP with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses SSNAP, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "249-251",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
    }
   ]
  },
  {
   "id": "home_scrak",
   "name": "Home with a SCRAK track selected",
   "how_to_get_there": "Select a track already using SCRAK with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses SCRAK, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_snare.c",
     "lines": "343-345",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
    }
   ]
  },
  {
   "id": "home_hatc",
   "name": "Home with a HATC track selected",
   "how_to_get_there": "Select a track already using HATC with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses HATC, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "126-128",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
    }
   ]
  },
  {
   "id": "home_hato",
   "name": "Home with a HATO track selected",
   "how_to_get_there": "Select a track already using HATO with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses HATO, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "129-131",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
    }
   ]
  },
  {
   "id": "home_cymb",
   "name": "Home with a CYMB track selected",
   "how_to_get_there": "Select a track already using CYMB with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses CYMB, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "132-134",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
    }
   ]
  },
  {
   "id": "home_cowb",
   "name": "Home with a COWB track selected",
   "how_to_get_there": "Select a track already using COWB with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses COWB, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "135-137",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
    }
   ]
  },
  {
   "id": "home_hmetl",
   "name": "Home with a HMETL track selected",
   "how_to_get_there": "Select a track already using HMETL with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses HMETL, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "291-293",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
    }
   ]
  },
  {
   "id": "home_hnois",
   "name": "Home with a HNOIS track selected",
   "how_to_get_there": "Select a track already using HNOIS with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses HNOIS, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_metal.c",
     "lines": "294-296",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
    }
   ]
  },
  {
   "id": "home_tom",
   "name": "Home with a TOM track selected",
   "how_to_get_there": "Select a track already using TOM with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses TOM, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "88-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
    }
   ]
  },
  {
   "id": "home_conga",
   "name": "Home with a CONGA track selected",
   "how_to_get_there": "Select a track already using CONGA with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses CONGA, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "91-93",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
    }
   ]
  },
  {
   "id": "home_rim",
   "name": "Home with a RIM track selected",
   "how_to_get_there": "Select a track already using RIM with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses RIM, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "94-96",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
    }
   ]
  },
  {
   "id": "home_clave",
   "name": "Home with a CLAVE track selected",
   "how_to_get_there": "Select a track already using CLAVE with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses CLAVE, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "97-99",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
    }
   ]
  },
  {
   "id": "home_memb",
   "name": "Home with a MEMB track selected",
   "how_to_get_there": "Select a track already using MEMB with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses MEMB, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_memb.c",
     "lines": "73-75",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
    }
   ]
  },
  {
   "id": "home_fm",
   "name": "Home with an FM track selected",
   "how_to_get_there": "Select a track already using FM with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses FM, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_fm.c",
     "lines": "60-62",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
    }
   ]
  },
  {
   "id": "home_acid",
   "name": "Home with an ACID track selected",
   "how_to_get_there": "Select a track already using ACID with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses ACID, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_acid.c",
     "lines": "203-206",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
    }
   ]
  },
  {
   "id": "home_smpl",
   "name": "Home with a SMPL track selected",
   "how_to_get_there": "Select a track already using SMPL with ALGORITHM, then tap HOME from another section or cycle past both COMP pages.",
   "what_it_is": "The selected track uses SMPL, so Home shows that model’s four main sound controls.",
   "source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "221-233",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "754-755",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui.c",
     "lines": "469-474",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/ui_input.c",
     "lines": "781-788",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/params.c",
     "lines": "135-138",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_sample.c",
     "lines": "102-104",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
    }
   ]
  }
 ],
 "controls": {
  "button_edit": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside modal screens, opens sound pages, or the LAYER pages when already in LAYER and cycles within that section on further presses.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "703-708",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L703-L708"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "193-209",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "18-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L18-L57"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Clears the cursor step’s note-on, tie, probability condition, ratchet, accent and slide flags in memory, then advances the cursor without saving a project or providing undo.",
    "short_label": "ENTER REST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "521-531",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L521-L531"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "663-665",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L663-L665"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside modal screens, opens STEP, PATTERN, MOTION and SONG and cycles within that section on further presses.",
    "short_label": "SEQUENCER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "703-708",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L703-L708"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "193-209",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "18-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L18-L57"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside modal screens, opens GLOBAL, SYSTEM and mute timing and cycles within that section on further presses.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "703-708",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L703-L708"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "193-209",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "18-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L18-L57"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside modal screens, opens PROJECT and TOOLS and cycles within that section on further presses.",
    "short_label": "PROJECTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "703-708",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L703-L708"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "193-209",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "18-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L18-L57"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside modal screens, opens the two GRIDS pages and cycles within that section on further presses.",
    "short_label": "GRIDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "703-708",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L703-L708"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "193-209",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "18-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L18-L57"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside modal screens, opens the selected LFO’s two pages and cycles within that section on further presses.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "703-708",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L703-L708"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "193-209",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L193-L209"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "18-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L18-L57"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Has no assigned action outside panel calibration.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "703-708",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L703-L708"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside modal screens, toggles chromatic KEYS mode while TRACKS and COMP keep their own key functions.",
    "short_label": "KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "680-682",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L680-L682"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "107-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L107-L128"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "150-159",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L150-L159"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "After a short tap outside modal screens, goes to HOME from other sections or cycles HOME, COMP 1 and COMP 2.",
    "short_label": "HOME / COMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "378-396",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L378-L396"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "647-648",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L647-L648"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "221-233",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L221-L233"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "After holding past 0.7 seconds outside NAME, opens or closes the menu; closing can write device settings without an edit or question, at once when stopped or after playback stops, and that write can replace another firmware’s stored data.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "420-460",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L420-L460"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-563",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L563"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/storage.c",
      "lines": "118-145",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/storage.c#L118-L145"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "release",
    "action": "Cancels the name edit after a short tap without writing it.",
    "short_label": "CANCEL NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "199-208",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L199-L208"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "long_press",
    "action": "Cancels the name edit after holding past 0.7 seconds without writing it.",
    "short_label": "CANCEL NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "199-208",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L199-L208"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "378-396",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L378-L396"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "release",
    "action": "A short tap has no action in the menu.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "120-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L120-L140"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A short unused tap outside modal screens opens or cycles the FILTER, FX, SLICER, RESON, DLY, REVERB and CHORUS pages.",
    "short_label": "FX PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "399-408",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L399-L408"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "429-442",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L429-L442"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "26-34",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L26-L34"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Holding for 0.4 seconds outside modal screens opens PERFORM; using a key or macro knob with FX held opens it immediately.",
    "short_label": "PERFORM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "429-459",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L429-L459"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "In HOLD operation releasing FX resets the macro knobs even if a held effect key keeps PERFORM visible; PAGE operation retains the screen and macros until another screen opens.",
    "short_label": "END MACROS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "436-461",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L436-L461"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside the menu and clear dialog, starts the current patterns from step one or stops playback, ending step recording; with external clock selected the steps wait for clock pulses.",
    "short_label": "PLAY / STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "667-675",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L667-L675"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "486-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L486-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "572-580",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L572-L580"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "While stopped on SONG prepares and starts the chain if every referenced project is usable, or stops a running or armed chain.",
    "short_label": "PLAY SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "231-244",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L231-L244"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "668-675",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L668-L675"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Starts or stops playback while NAME stays open, with renaming blocked during playback.",
    "short_label": "TRANSPORT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "192-210",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L192-L210"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A short tap outside modal screens opens TRACKS unless already on TRACKS or in the stopped STEP recording context.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "604-614",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L604-L614"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "release",
    "action": "A short unused tap arms or disarms the selected track and starts playback when arming while stopped, unless a song is running or armed.",
    "short_label": "ARM TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "181-187",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L181-L187"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "604-614",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L604-L614"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "release",
    "action": "A short unused tap toggles recording for the selected track, unless a song is running or armed.",
    "short_label": "ARM TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "604-614",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L604-L614"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "hold",
    "action": "While held gives the first eight white keys track mute duties and upper C# and D# mute timing choices, consuming the REC tap when a key is used.",
    "short_label": "MUTE KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "release",
    "action": "With KEYS enabled and playback stopped starts step recording at the first step of the visible bank, unless a song or Grids source owns the pattern.",
    "short_label": "STEP RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "475-486",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L475-L486"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "604-614",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L604-L614"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Ends step recording and keeps the working pattern edits in memory without saving a project.",
    "short_label": "END STEP REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "604-608",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L604-L608"
     }
    ]
   },
   {
    "mode": "seq_clear",
    "gesture": "long_press",
    "action": "Unless a song is running or armed, on STEP, PATTERN or MOTION after holding past 0.7 seconds asks to clear the selected track’s steps, motion and last keyboard note in memory; OCT+ confirms, saved projects stay unchanged until saved and no undo is provided.",
    "short_label": "CLEAR TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "594-603",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L594-L603"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "631-637",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L631-L637"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "333-338",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L333-L338"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "96-102",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L96-L102"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "long_press",
    "action": "Unless a song is running or armed, after holding past 0.7 seconds asks to delete the selected song row, or all rows when the add row is selected; OCT+ applies it in memory with no undo, leaving saved projects unchanged until saved.",
    "short_label": "DELETE ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "245-257",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L245-L257"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "620-630",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L620-L630"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "96-102",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L96-L102"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Shifts the chromatic keys one octave down within the -2 to +2 range, taking priority over LAYER and LFO shortcuts.",
    "short_label": "OCT -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "158-159",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L158-L159"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "683-701",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L683-L701"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Shows the previous sixteen-step bank within the selected pattern’s length.",
    "short_label": "BANK -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "281-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L281-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "683-701",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L683-L701"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "action": "Cancels the pending clear or delete without applying it.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Closes the menu and can write device settings without an edit or question, at once when stopped or after playback stops, and that write can replace another firmware’s stored data.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "120-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L120-L140"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "420-460",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L420-L460"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-563",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L563"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/storage.c",
      "lines": "118-145",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/storage.c#L118-L145"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "action": "Returns from ABOUT to the menu list without writing settings yet.",
    "short_label": "MENU LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "132-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L132-L137"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Closes NAME without writing the name edit.",
    "short_label": "CANCEL NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "237-240",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L237-L240"
     }
    ]
   },
   {
    "mode": "layer_nav",
    "gesture": "press",
    "action": "With KEYS off returns to the last SOUND page.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "683-701",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L683-L701"
     }
    ]
   },
   {
    "mode": "lfo_nav",
    "gesture": "press",
    "action": "With KEYS off switches the selected track between LFO 1 and LFO 2 while keeping the current LFO page.",
    "short_label": "LFO 1 / 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "683-701",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L683-L701"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "BACK TO MENU",
    "action": "Returns to the menu list and resumes automatic reconnection without closing the menu or requesting a settings write yet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "164-178",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L164-L178"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Shifts the chromatic keys one octave up within the -2 to +2 range, taking priority over LAYER and LFO shortcuts.",
    "short_label": "OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "158-159",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L158-L159"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "683-701",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L683-L701"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Shows the next sixteen-step bank within the selected pattern’s length.",
    "short_label": "BANK +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "281-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L281-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "683-701",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L683-L701"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "action": "Applies the named track, motion or song deletion in memory at once, with no undo or project save.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "Holding both OCT buttons for more than five seconds enters the USB updater; the countdown starts after two seconds and releasing either button cancels it, but returning through a firmware boot loses unsaved work, so save first.",
    "short_label": "USB UPDATER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "169-192",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L169-L192"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "261-262",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L261-L262"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/core.h",
      "lines": "206-207",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/core.h#L206-L207"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "While stopped immediately rewrites the selected saved project’s name only and updates the working name if this is the last loaded or saved slot, without a further question or undo.",
    "short_label": "RENAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "180-198",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L180-L198"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "480-503",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L480-L503"
     }
    ]
   },
   {
    "mode": "sound_nav",
    "gesture": "press",
    "action": "With KEYS off enters the first LAYER page.",
    "short_label": "LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "683-701",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L683-L701"
     }
    ]
   },
   {
    "mode": "lfo_nav",
    "gesture": "press",
    "action": "With KEYS off cycles the shown LFO between SYNC, Hz and TIME operation.",
    "short_label": "LFO MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "683-701",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L683-L701"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "COLOR",
    "action": "On COLOR, steps to the next display palette, with a settings save requested on menu close and delayed until stop if playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "146-165",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L146-L165"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "SPEAKER EQ",
    "action": "On SPEAKER EQ, cycles FLAT, LOWCUT and BASS+, with a settings save requested on menu close and delayed until stop if playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "146-165",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L146-L165"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "USB LEVEL",
    "action": "On USB LEVEL, toggles fixed USB level or following MASTER, with a settings save requested on menu close and delayed until stop if playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "146-165",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L146-L165"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "PERFORM MODE",
    "action": "On PERFORM, toggles held-layer operation or a persistent PERFORM page, with a settings save requested on menu close and delayed until stop if playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "146-165",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L146-L165"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "ZOOM",
    "action": "On ZOOM, toggles value enlargement, with a settings save requested on menu close and delayed until stop if playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "146-165",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L146-L165"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "ACCEL",
    "action": "On ACCEL, toggles encoder acceleration, with a settings save requested on menu close and delayed until stop if playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "146-165",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L146-L165"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "CALIBRATE",
    "action": "On HARDWARE CALIBRATION, starts panel teaching; a timeout restores the old mapping, but closing the menu can still write a first settings record without an edit or another question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "167-170",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L167-L170"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "861-865",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L861-L865"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-563",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L563"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "ABOUT",
    "action": "On ABOUT, opens the version and credits screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "176-179",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L176-L179"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "BLUETOOTH",
    "action": "On BLUETOOTH in the Bluetooth package, opens its connection page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "171-174",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L171-L174"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "CLOSE MENU",
    "action": "On BACK, closes the menu and can write device options without edits or a question, at once when stopped or after playback stops, potentially replacing foreign data.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "180-182",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L180-L182"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "420-460",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L420-L460"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "RADIO TOGGLE",
    "action": "On BLUETOOTH, toggles connection and reconnection on or off for this power session without storing its on/off state; a failed start requires a power cycle before retrying.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "118-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L118-L133"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "184-190",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L184-L190"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "BT MODE",
    "action": "On MODE, cycles AUTO, SMC DAW and MIDI, with the device-settings write requested when the menu closes and delayed until stop if playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "192-195",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L192-L195"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "SCAN",
    "action": "On SCAN with Bluetooth enabled, starts discovery; an off radio reports BLUETOOTH IS OFF and a failed radio requires a power cycle.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "201-207",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L201-L207"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "PICK DEVICE",
    "action": "On a discovered-device row, remembers and targets that device without another question or undo, requesting a settings write immediately when stopped or after playback stops and potentially replacing foreign settings.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "136-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L136-L146"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "209-211",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L209-L211"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ],
  "switch_power": [
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Starts panel calibration and requests a device-settings write when it returns, even after a timeout restores the old table, without another question and potentially replacing another firmware’s stored data.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "140-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "815-865",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L815-L865"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "420-460",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L420-L460"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-563",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L563"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/storage.c",
      "lines": "118-145",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/storage.c#L118-L145"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "861-865",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L861-L865"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_seq",
    "action": "Starts safe start with no audio, normal panel editing disabled and user samples hidden, without erasing saved projects; turn the power off to leave.",
    "short_label": "SAFE START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "428-448",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L428-L448"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "560-565",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L560-L565"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1571-1577",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1571-L1577"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/fx.c",
      "lines": "414-419",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/fx.c#L414-L419"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays track 1 at velocity 100 and sends its assigned MIDI note on the drum channel; on HOME and per-track screens also selects it.",
    "short_label": "HIT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "747-751",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L747-L751"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Plays track 1 and records to its nearest step when that track is armed, playing and using its own steps, while sending its assigned MIDI note.",
    "short_label": "RECORD 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "263-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L263-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Sends track 1’s MIDI note-off without stopping a one-shot drum sound.",
    "short_label": "NOTE OFF 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Toggles track 1’s persistent mute at once or at the next bar according to MUTE timing, taking effect at once when stopped.",
    "short_label": "MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "379-393",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L379-L393"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "584-607",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L584-L607"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Toggles compressor ducking for track 1 unless it is the compressor’s source.",
    "short_label": "DUCK 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "409-414",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 1 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 1 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles AB when tapped again within 0.8 seconds; in 123 mode types 1 once.",
    "short_label": "AB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at F3 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate and sends track 1’s assigned MIDI note-off.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN and sends track 1’s assigned MIDI note-off.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 1 while this performance key is held without changing its saved mute setting; PAGE operation also accepts the key without FX held.",
    "short_label": "HOLD MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases the temporary performance mute of track 1.",
    "short_label": "END MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "HIT 1",
    "action": "Plays track 1 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "HIT 1",
    "action": "Plays track 1 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "HIT 1",
    "action": "Plays track 1 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIDI OFF 1",
    "action": "Unless PERFORM claimed the key, sends track 1’s assigned MIDI note-off even when the grid, NAME or a menu consumed its press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L439"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, mutes track 1 while this performance key is held without changing its saved mute setting.",
    "short_label": "HOLD MUTE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Adjusts the selected track’s TUNE from -24 to +24 semitones, changing pitch or filter tuning according to its model.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "135-138",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1475-1488",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1475-L1488"
     }
    ]
   },
   {
    "mode": "home_k808",
    "gesture": "turn",
    "action": "For K808, changes the selected track’s pitch.",
    "short_label": "K808 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     }
    ]
   },
   {
    "mode": "sound_k808_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_k808_2",
    "gesture": "turn",
    "action": "Changes the selected K808 track’s pitch dip.",
    "short_label": "K808 DIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     }
    ]
   },
   {
    "mode": "sound_k808_3",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "home_k909",
    "gesture": "turn",
    "action": "For K909, changes the selected track’s pitch.",
    "short_label": "K909 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_k909_2",
    "gesture": "turn",
    "action": "Changes the selected K909 track’s click level.",
    "short_label": "K909 CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_3",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "home_kboom",
    "gesture": "turn",
    "action": "For KBOOM, changes the selected track’s pitch.",
    "short_label": "KBOOM TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178-180",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
     }
    ]
   },
   {
    "mode": "sound_kboom_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_kboom_2",
    "gesture": "turn",
    "action": "Changes the selected KBOOM track’s punch.",
    "short_label": "KBOOM PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178-180",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
     }
    ]
   },
   {
    "mode": "sound_kboom_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_kpunc",
    "gesture": "turn",
    "action": "For KPUNC, changes the selected track’s pitch.",
    "short_label": "KPUNC TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276-278",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
     }
    ]
   },
   {
    "mode": "sound_kpunc_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_kpunc_2",
    "gesture": "turn",
    "action": "Changes the selected KPUNC track’s FM amount.",
    "short_label": "KPUNC FM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276-278",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
     }
    ]
   },
   {
    "mode": "sound_kpunc_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_s808",
    "gesture": "turn",
    "action": "For S808, changes the selected track’s pitch.",
    "short_label": "S808 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_s808_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_s808_2",
    "gesture": "turn",
    "action": "Changes the selected S808 track’s snare snap.",
    "short_label": "S808 SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_s808_3",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "home_s909",
    "gesture": "turn",
    "action": "For S909, changes the selected track’s pitch.",
    "short_label": "S909 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_s909_2",
    "gesture": "turn",
    "action": "Changes the selected S909 track’s snare snap.",
    "short_label": "S909 SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_3",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "home_c808",
    "gesture": "turn",
    "action": "For C808, changes the selected track’s filter tuning.",
    "short_label": "C808 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "115-122",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L115-L122"
     }
    ]
   },
   {
    "mode": "sound_c808_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_c808_2",
    "gesture": "turn",
    "action": "Changes the selected C808 track’s tail level.",
    "short_label": "C808 TAIL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "115-122",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L115-L122"
     }
    ]
   },
   {
    "mode": "sound_c808_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_c909",
    "gesture": "turn",
    "action": "For C909, changes the selected track’s filter tuning.",
    "short_label": "C909 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "125-132",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L125-L132"
     }
    ]
   },
   {
    "mode": "sound_c909_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_c909_2",
    "gesture": "turn",
    "action": "Changes the selected C909 track’s clap spread.",
    "short_label": "C909 SPRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
     }
    ]
   },
   {
    "mode": "sound_c909_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_ssnap",
    "gesture": "turn",
    "action": "For SSNAP, changes the selected track’s pitch.",
    "short_label": "SSNAP TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249-251",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
     }
    ]
   },
   {
    "mode": "sound_ssnap_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_ssnap_2",
    "gesture": "turn",
    "action": "Changes the selected SSNAP track’s snare snap.",
    "short_label": "SSNAP SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249-251",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
     }
    ]
   },
   {
    "mode": "sound_ssnap_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_scrak",
    "gesture": "turn",
    "action": "For SCRAK, changes the selected track’s pitch.",
    "short_label": "SCRAK TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
     }
    ]
   },
   {
    "mode": "sound_scrak_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_scrak_2",
    "gesture": "turn",
    "action": "Changes the selected SCRAK track’s snare snap.",
    "short_label": "SCRAK SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
     }
    ]
   },
   {
    "mode": "sound_scrak_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_hatc",
    "gesture": "turn",
    "action": "For HATC, changes the selected track’s filter tuning.",
    "short_label": "HATC TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hatc_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_hatc_2",
    "gesture": "turn",
    "action": "Changes the selected HATC track’s high-pass frequency.",
    "short_label": "HATC BRITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hatc_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_hato",
    "gesture": "turn",
    "action": "For HATO, changes the selected track’s filter tuning.",
    "short_label": "HATO TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129-131",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hato_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_hato_2",
    "gesture": "turn",
    "action": "Changes the selected HATO track’s high-pass frequency.",
    "short_label": "HATO BRITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129-131",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hato_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_cymb",
    "gesture": "turn",
    "action": "For CYMB, changes the selected track’s filter tuning.",
    "short_label": "CYMB TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132-134",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "76-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L76-L87"
     }
    ]
   },
   {
    "mode": "sound_cymb_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_cymb_2",
    "gesture": "turn",
    "action": "Changes the selected CYMB track’s balance between the lower and higher metal bands.",
    "short_label": "CYMB BAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132-134",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "76-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L76-L87"
     }
    ]
   },
   {
    "mode": "sound_cymb_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_cowb",
    "gesture": "turn",
    "action": "For COWB, changes the selected track’s pitch.",
    "short_label": "COWB TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_cowb_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_cowb_2",
    "gesture": "turn",
    "action": "Changes the selected COWB track’s balance between the short attack and longer tail.",
    "short_label": "COWB TAIL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "111-123",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L111-L123"
     }
    ]
   },
   {
    "mode": "sound_cowb_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_hmetl",
    "gesture": "turn",
    "action": "For HMETL, changes the selected track’s pitch.",
    "short_label": "HMETL TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291-293",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
     }
    ]
   },
   {
    "mode": "sound_hmetl_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_hmetl_2",
    "gesture": "turn",
    "action": "Changes the selected HMETL track’s noise level.",
    "short_label": "HMETL NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291-293",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
     }
    ]
   },
   {
    "mode": "sound_hmetl_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_hnois",
    "gesture": "turn",
    "action": "For HNOIS, changes the selected track’s pitch.",
    "short_label": "HNOIS TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294-296",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
     }
    ]
   },
   {
    "mode": "sound_hnois_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_hnois_2",
    "gesture": "turn",
    "action": "Changes the selected HNOIS track’s noise level.",
    "short_label": "HNOIS NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294-296",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
     }
    ]
   },
   {
    "mode": "sound_hnois_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_tom",
    "gesture": "turn",
    "action": "For TOM, changes the selected track’s pitch.",
    "short_label": "TOM TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88-90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
     }
    ]
   },
   {
    "mode": "sound_tom_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_tom_2",
    "gesture": "turn",
    "action": "Changes the selected TOM track’s pitch drop.",
    "short_label": "TOM DROP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88-90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
     }
    ]
   },
   {
    "mode": "sound_tom_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_conga",
    "gesture": "turn",
    "action": "For CONGA, changes the selected track’s pitch.",
    "short_label": "CONGA TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91-93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
     }
    ]
   },
   {
    "mode": "sound_conga_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_conga_2",
    "gesture": "turn",
    "action": "Changes the selected CONGA track’s pitch drop.",
    "short_label": "CONGA DROP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91-93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
     }
    ]
   },
   {
    "mode": "sound_conga_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_rim",
    "gesture": "turn",
    "action": "For RIM, changes the selected track’s pitch.",
    "short_label": "RIM TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94-96",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
     }
    ]
   },
   {
    "mode": "sound_rim_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_rim_2",
    "gesture": "turn",
    "action": "Changes the selected RIM track’s drive.",
    "short_label": "RIM DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94-96",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
     }
    ]
   },
   {
    "mode": "sound_rim_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_clave",
    "gesture": "turn",
    "action": "For CLAVE, changes the selected track’s pitch.",
    "short_label": "CLAVE TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97-99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
     }
    ]
   },
   {
    "mode": "sound_clave_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_clave_2",
    "gesture": "turn",
    "action": "Changes the selected CLAVE track’s pitch drop.",
    "short_label": "CLAVE DROP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97-99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
     }
    ]
   },
   {
    "mode": "sound_clave_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_memb",
    "gesture": "turn",
    "action": "For MEMB, changes the selected track’s pitch.",
    "short_label": "MEMB TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     }
    ]
   },
   {
    "mode": "sound_memb_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_memb_2",
    "gesture": "turn",
    "action": "Changes the selected MEMB track’s blend from an inharmonic head to a harmonic head.",
    "short_label": "MEMB HEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "4-7",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L4-L7"
     }
    ]
   },
   {
    "mode": "sound_memb_3",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "home_fm",
    "gesture": "turn",
    "action": "For FM, changes the selected track’s pitch.",
    "short_label": "FM TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_fm_2",
    "gesture": "turn",
    "action": "Changes the selected FM track’s FM ratio.",
    "short_label": "FM RATIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_3",
    "gesture": "turn",
    "action": "Changes the selected FM track’s velocity influence on FM index.",
    "short_label": "FM VEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "18-30",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L18-L30"
     }
    ]
   },
   {
    "mode": "sound_fm_4",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_acid",
    "gesture": "turn",
    "action": "For ACID, changes the selected track’s pitch.",
    "short_label": "ACID TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_acid_2",
    "gesture": "turn",
    "action": "Changes the selected ACID track’s resonance.",
    "short_label": "ACID RESO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_3",
    "gesture": "turn",
    "action": "Changes the selected ACID track’s gate length.",
    "short_label": "ACID GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_4",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_smpl",
    "gesture": "turn",
    "action": "For SMPL, changes the selected track’s pitch.",
    "short_label": "SMPL TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_1",
    "gesture": "turn",
    "action": "Chooses a sound model, replacing its model controls and choke group at once and rebasing its motion without undo; saving the project makes this persistent, and ACID is skipped when two other tracks use it.",
    "short_label": "MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "284-287",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L284-L287"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "sound_smpl_2",
    "gesture": "turn",
    "action": "Changes the selected SMPL track’s drive.",
    "short_label": "SMPL DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_3",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "layer_1",
    "gesture": "turn",
    "action": "Chooses the sample set layered with the selected track.",
    "short_label": "LAYER SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "60",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L60"
     }
    ]
   },
   {
    "mode": "layer_2",
    "gesture": "turn",
    "action": "Changes the layered sample’s decay.",
    "short_label": "LAYER DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "25",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L25"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "64",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L64"
     }
    ]
   },
   {
    "mode": "filter_1",
    "gesture": "turn",
    "action": "Chooses off, low-pass, band-pass, high-pass or notch filtering for the track.",
    "short_label": "FILTER TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "26",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L26"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "36",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L36"
     }
    ]
   },
   {
    "mode": "filter_2",
    "gesture": "turn",
    "action": "Changes the selected track’s filter-envelope decay.",
    "short_label": "FILTER DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "27",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L27"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L80"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Changes the selected track’s distortion.",
    "short_label": "DISTORTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "28",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L28"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "49",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L49"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Chooses off, gate or stutter for the track.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "29",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L29"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "53",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L53"
     }
    ]
   },
   {
    "mode": "reson_1",
    "gesture": "turn",
    "action": "Chooses off, string, pipe, chord or modal resonance, skipping choices whose track limit is full.",
    "short_label": "RESON MODEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "30",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L30"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "69",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L69"
     }
    ]
   },
   {
    "mode": "reson_2",
    "gesture": "turn",
    "action": "Changes the selected track’s resonator tone.",
    "short_label": "RESON TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "31",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L31"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "73",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L73"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "turn",
    "action": "Changes the shared delay’s clock division.",
    "short_label": "DELAY TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "32",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L32"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L87"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Chooses room or spring for the shared reverb.",
    "short_label": "REVERB TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "33",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L33"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L124"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Changes the shared chorus’s modulation rate.",
    "short_label": "CHORUS RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "34",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L34"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L93"
     }
    ]
   },
   {
    "mode": "comp_1",
    "gesture": "turn",
    "action": "Chooses the track that triggers ducking, or turns it off.",
    "short_label": "DUCK SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "35",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L35"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "116",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L116"
     }
    ]
   },
   {
    "mode": "comp_2",
    "gesture": "turn",
    "action": "Changes the ducking attack.",
    "short_label": "ATTACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "36",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L36"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "120",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L120"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "action": "Chooses the visible bank of up to 16 steps.",
    "short_label": "BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "37",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L37"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "266-269",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L266-L269"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Changes the track’s pattern length unless a song is running or armed.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "38",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L38"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L57"
     }
    ]
   },
   {
    "mode": "motion",
    "gesture": "turn",
    "action": "Turns this track’s motion playback on clockwise or off counterclockwise unless a song is running or armed.",
    "short_label": "MOTION PLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "39",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L39"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "189-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L189-L199"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Chooses a song row or the extra row for adding one.",
    "short_label": "SONG ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "40",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L40"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "201-230",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L201-L230"
     }
    ]
   },
   {
    "mode": "global_1",
    "gesture": "turn",
    "action": "Changes tempo from 40 to 240 BPM only when the internal clock is selected.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "41",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L41"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "84",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L84"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "298-300",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L298-L300"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "42",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L42"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "global_3",
    "gesture": "turn",
    "action": "Chooses immediate mutes or mutes at the next bar and saves this device setting now when stopped or after playback stops without asking.",
    "short_label": "MUTE TIMING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "43",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L43"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "173-178",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L173-L178"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Chooses project slot A, B, C or D without loading it.",
    "short_label": "PROJECT SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L44"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L99"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Unless a song is running or armed, two clockwise turns within about 1.5 seconds clear the working track’s steps and motion and reset its last keyboard note at once without undo; project flash changes only when saved.",
    "short_label": "CLEAR TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L45"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "333-338",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L333-L338"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "325-371",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L325-L371"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "grids_map_1",
    "gesture": "turn",
    "action": "Chooses MAP or EUCL rhythm generation.",
    "short_label": "GRIDS MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L106"
     }
    ]
   },
   {
    "mode": "grids_eucl_1",
    "gesture": "turn",
    "action": "Chooses MAP or EUCL rhythm generation.",
    "short_label": "GRIDS MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L106"
     }
    ]
   },
   {
    "mode": "grids_2",
    "gesture": "turn",
    "action": "Changes the generated kick pattern’s fill.",
    "short_label": "KICK FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L47"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "110",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L110"
     }
    ]
   },
   {
    "mode": "lfo_1",
    "gesture": "turn",
    "action": "Chooses the selected LFO’s wave shape.",
    "short_label": "LFO WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "49",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L49"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "25",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L25"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "turn",
    "action": "Chooses the selected LFO’s sound, mixer, resonator or filter destination, or turns it off.",
    "short_label": "LFO TARGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "50",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L50"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "187-196",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L187-L196"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Chooses one of eight tracks.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L51"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "153-160",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L153-L160"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn",
    "action": "Moves the step-record cursor within the track’s pattern.",
    "short_label": "RECORD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "533-555",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L533-L555"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_f3",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_g3",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_a3",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_b3",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_c4",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_d4",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_e4",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_f4",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_g4",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_a4",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_b4",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_c5",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_d5",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_e5",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_f5",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_g5",
    "action": "When this is the most recently pressed step key still held, changes its probability, one-shot or cycle condition, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "STEP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "353-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L353-L390"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "action": "Changes the temporary master filter, with low-pass to the left and high-pass to the right.",
    "short_label": "LIVE FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "442-454",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L442-L454"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "51-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L51-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1122-1144",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1122-L1144"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "action": "Changes the temporary master filter, with low-pass to the left and high-pass to the right.",
    "short_label": "LIVE FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "442-454",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L442-L454"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "51-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L51-L52"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "On COLOR, changes the display palette.",
    "short_label": "COLOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "141-145",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L141-L145"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L21-L24"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "On SPEAKER EQ, chooses FLAT, LOWCUT or BASS+ and stops at the ends.",
    "short_label": "SPEAKER EQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "146-152",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L146-L152"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L21-L24"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "On USB LEVEL, turns clockwise for fixed USB level or counterclockwise to follow MASTER.",
    "short_label": "USB LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "154-159",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L154-L159"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L21-L24"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "On PERFORM, turns clockwise to keep the effect page open or counterclockwise for the held layer.",
    "short_label": "PERFORM MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "154-159",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L154-L159"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L21-L24"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "On ZOOM, turns value enlargement on clockwise or off counterclockwise.",
    "short_label": "ZOOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "154-159",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L154-L159"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L21-L24"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "On ACCEL, turns encoder acceleration on clockwise or off counterclockwise.",
    "short_label": "ACCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "154-159",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L154-L159"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L21-L24"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "On BLUETOOTH, enables the radio clockwise or disables it counterclockwise without storing its on/off state.",
    "short_label": "RADIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "184-190",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L184-L190"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "148-155",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L148-L155"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "On MODE, chooses AUTO, SMC DAW or MIDI and saves it when the menu closes, or after playback stops.",
    "short_label": "BT MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "192-195",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L192-L195"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "148-155",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L148-L155"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn_ccw",
    "action": "On DEVICE, forgets the saved peer and drops its connection without asking, writing settings now when stopped or after playback stops, with no undo.",
    "short_label": "FORGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "197-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L197-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "148-155",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L148-L155"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Moves the name cursor.",
    "short_label": "NAME CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "165-171",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L165-L171"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When its encoder is prompted, teaches the encoder identity and right-turn direction; power-on calibration requests a settings write on return, while menu calibration waits for menu close, with a pending write deferred during playback.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "832-857",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L832-L857"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-105",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L105"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "140-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Adjusts the selected track’s DECAY, controlling sound decay or ACID’s filter-envelope decay.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "135-138",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1475-1488",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1475-L1488"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "188",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L188"
     }
    ]
   },
   {
    "mode": "home_k808",
    "gesture": "turn",
    "action": "For K808, changes the selected track’s decay.",
    "short_label": "K808 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     }
    ]
   },
   {
    "mode": "sound_k808_1",
    "gesture": "turn",
    "action": "Changes the selected K808 track’s pitch.",
    "short_label": "K808 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     }
    ]
   },
   {
    "mode": "sound_k808_2",
    "gesture": "turn",
    "action": "Changes the selected K808 track’s drive.",
    "short_label": "K808 DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     }
    ]
   },
   {
    "mode": "sound_k808_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_k909",
    "gesture": "turn",
    "action": "For K909, changes the selected track’s decay.",
    "short_label": "K909 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_1",
    "gesture": "turn",
    "action": "Changes the selected K909 track’s pitch.",
    "short_label": "K909 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_2",
    "gesture": "turn",
    "action": "Changes the selected K909 track’s pitch-sweep time.",
    "short_label": "K909 SWPT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_3",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "home_kboom",
    "gesture": "turn",
    "action": "For KBOOM, changes the selected track’s decay.",
    "short_label": "KBOOM DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178-180",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
     }
    ]
   },
   {
    "mode": "sound_kboom_1",
    "gesture": "turn",
    "action": "Changes the selected KBOOM track’s pitch.",
    "short_label": "KBOOM TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178-180",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
     }
    ]
   },
   {
    "mode": "sound_kboom_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_kboom_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_kpunc",
    "gesture": "turn",
    "action": "For KPUNC, changes the selected track’s decay.",
    "short_label": "KPUNC DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276-278",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
     }
    ]
   },
   {
    "mode": "sound_kpunc_1",
    "gesture": "turn",
    "action": "Changes the selected KPUNC track’s pitch.",
    "short_label": "KPUNC TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276-278",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
     }
    ]
   },
   {
    "mode": "sound_kpunc_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_kpunc_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_s808",
    "gesture": "turn",
    "action": "For S808, changes the selected track’s decay.",
    "short_label": "S808 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_s808_1",
    "gesture": "turn",
    "action": "Changes the selected S808 track’s pitch.",
    "short_label": "S808 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_s808_2",
    "gesture": "turn",
    "action": "Changes the selected S808 track’s noise tone.",
    "short_label": "S808 NTONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_s808_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_s909",
    "gesture": "turn",
    "action": "For S909, changes the selected track’s decay.",
    "short_label": "S909 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_1",
    "gesture": "turn",
    "action": "Changes the selected S909 track’s pitch.",
    "short_label": "S909 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_2",
    "gesture": "turn",
    "action": "Changes the selected S909 track’s noise tone.",
    "short_label": "S909 NTONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_c808",
    "gesture": "turn",
    "action": "For C808, changes the selected track’s decay.",
    "short_label": "C808 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
     }
    ]
   },
   {
    "mode": "sound_c808_1",
    "gesture": "turn",
    "action": "Changes the selected C808 track’s filter tuning.",
    "short_label": "C808 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "115-122",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L115-L122"
     }
    ]
   },
   {
    "mode": "sound_c808_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_c808_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_c909",
    "gesture": "turn",
    "action": "For C909, changes the selected track’s decay.",
    "short_label": "C909 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
     }
    ]
   },
   {
    "mode": "sound_c909_1",
    "gesture": "turn",
    "action": "Changes the selected C909 track’s filter tuning.",
    "short_label": "C909 TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "125-132",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L125-L132"
     }
    ]
   },
   {
    "mode": "sound_c909_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_c909_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_ssnap",
    "gesture": "turn",
    "action": "For SSNAP, changes the selected track’s decay.",
    "short_label": "SSNAP DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249-251",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
     }
    ]
   },
   {
    "mode": "sound_ssnap_1",
    "gesture": "turn",
    "action": "Changes the selected SSNAP track’s pitch.",
    "short_label": "SSNAP TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249-251",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
     }
    ]
   },
   {
    "mode": "sound_ssnap_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_ssnap_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_scrak",
    "gesture": "turn",
    "action": "For SCRAK, changes the selected track’s decay.",
    "short_label": "SCRAK DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
     }
    ]
   },
   {
    "mode": "sound_scrak_1",
    "gesture": "turn",
    "action": "Changes the selected SCRAK track’s pitch.",
    "short_label": "SCRAK TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
     }
    ]
   },
   {
    "mode": "sound_scrak_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_scrak_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hatc",
    "gesture": "turn",
    "action": "For HATC, changes the selected track’s decay.",
    "short_label": "HATC DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
     }
    ]
   },
   {
    "mode": "sound_hatc_1",
    "gesture": "turn",
    "action": "Changes the selected HATC track’s filter tuning.",
    "short_label": "HATC TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hatc_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_hatc_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hato",
    "gesture": "turn",
    "action": "For HATO, changes the selected track’s decay.",
    "short_label": "HATO DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129-131",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
     }
    ]
   },
   {
    "mode": "sound_hato_1",
    "gesture": "turn",
    "action": "Changes the selected HATO track’s filter tuning.",
    "short_label": "HATO TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129-131",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hato_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_hato_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_cymb",
    "gesture": "turn",
    "action": "For CYMB, changes the selected track’s decay.",
    "short_label": "CYMB DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132-134",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
     }
    ]
   },
   {
    "mode": "sound_cymb_1",
    "gesture": "turn",
    "action": "Changes the selected CYMB track’s filter tuning.",
    "short_label": "CYMB TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132-134",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "76-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L76-L87"
     }
    ]
   },
   {
    "mode": "sound_cymb_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_cymb_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_cowb",
    "gesture": "turn",
    "action": "For COWB, changes the selected track’s decay.",
    "short_label": "COWB DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_cowb_1",
    "gesture": "turn",
    "action": "Changes the selected COWB track’s pitch.",
    "short_label": "COWB TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_cowb_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_cowb_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hmetl",
    "gesture": "turn",
    "action": "For HMETL, changes the selected track’s decay.",
    "short_label": "HMETL DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291-293",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
     }
    ]
   },
   {
    "mode": "sound_hmetl_1",
    "gesture": "turn",
    "action": "Changes the selected HMETL track’s pitch.",
    "short_label": "HMETL TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291-293",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
     }
    ]
   },
   {
    "mode": "sound_hmetl_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_hmetl_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hnois",
    "gesture": "turn",
    "action": "For HNOIS, changes the selected track’s decay.",
    "short_label": "HNOIS DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294-296",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
     }
    ]
   },
   {
    "mode": "sound_hnois_1",
    "gesture": "turn",
    "action": "Changes the selected HNOIS track’s pitch.",
    "short_label": "HNOIS TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294-296",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
     }
    ]
   },
   {
    "mode": "sound_hnois_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_hnois_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_tom",
    "gesture": "turn",
    "action": "For TOM, changes the selected track’s decay.",
    "short_label": "TOM DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88-90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
     }
    ]
   },
   {
    "mode": "sound_tom_1",
    "gesture": "turn",
    "action": "Changes the selected TOM track’s pitch.",
    "short_label": "TOM TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88-90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
     }
    ]
   },
   {
    "mode": "sound_tom_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_tom_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_conga",
    "gesture": "turn",
    "action": "For CONGA, changes the selected track’s decay.",
    "short_label": "CONGA DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91-93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
     }
    ]
   },
   {
    "mode": "sound_conga_1",
    "gesture": "turn",
    "action": "Changes the selected CONGA track’s pitch.",
    "short_label": "CONGA TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91-93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
     }
    ]
   },
   {
    "mode": "sound_conga_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_conga_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_rim",
    "gesture": "turn",
    "action": "For RIM, changes the selected track’s decay.",
    "short_label": "RIM DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94-96",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
     }
    ]
   },
   {
    "mode": "sound_rim_1",
    "gesture": "turn",
    "action": "Changes the selected RIM track’s pitch.",
    "short_label": "RIM TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94-96",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
     }
    ]
   },
   {
    "mode": "sound_rim_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_rim_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_clave",
    "gesture": "turn",
    "action": "For CLAVE, changes the selected track’s decay.",
    "short_label": "CLAVE DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97-99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
     }
    ]
   },
   {
    "mode": "sound_clave_1",
    "gesture": "turn",
    "action": "Changes the selected CLAVE track’s pitch.",
    "short_label": "CLAVE TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97-99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
     }
    ]
   },
   {
    "mode": "sound_clave_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_clave_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_memb",
    "gesture": "turn",
    "action": "For MEMB, changes the selected track’s decay.",
    "short_label": "MEMB DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     }
    ]
   },
   {
    "mode": "sound_memb_1",
    "gesture": "turn",
    "action": "Changes the selected MEMB track’s pitch.",
    "short_label": "MEMB TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     }
    ]
   },
   {
    "mode": "sound_memb_2",
    "gesture": "turn",
    "action": "Changes the selected MEMB track’s strike position.",
    "short_label": "MEMB POS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     }
    ]
   },
   {
    "mode": "sound_memb_3",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "home_fm",
    "gesture": "turn",
    "action": "For FM, changes the selected track’s decay.",
    "short_label": "FM DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_1",
    "gesture": "turn",
    "action": "Changes the selected FM track’s pitch.",
    "short_label": "FM TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_2",
    "gesture": "turn",
    "action": "Changes the selected FM track’s modulator decay.",
    "short_label": "FM MDEC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_3",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_fm_4",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_acid",
    "gesture": "turn",
    "action": "For ACID, changes the selected track’s filter-envelope decay.",
    "short_label": "ACID DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "185-188",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L185-L188"
     }
    ]
   },
   {
    "mode": "sound_acid_1",
    "gesture": "turn",
    "action": "Changes the selected ACID track’s pitch.",
    "short_label": "ACID TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_2",
    "gesture": "turn",
    "action": "Changes the selected ACID track’s filter-envelope amount.",
    "short_label": "ACID ENVMD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_3",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_acid_4",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_smpl",
    "gesture": "turn",
    "action": "For SMPL, changes the selected track’s decay.",
    "short_label": "SMPL DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_1",
    "gesture": "turn",
    "action": "Changes the selected SMPL track’s pitch.",
    "short_label": "SMPL TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_2",
    "gesture": "turn",
    "action": "Changes the selected SMPL track’s sample set.",
    "short_label": "SMPL SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_3",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "layer_1",
    "gesture": "turn",
    "action": "Chooses the layered sample’s note.",
    "short_label": "LAYER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "layer_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "25",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L25"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "filter_1",
    "gesture": "turn",
    "action": "Changes the selected track’s filter cutoff.",
    "short_label": "CUTOFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "26",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L26"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L77"
     }
    ]
   },
   {
    "mode": "filter_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "27",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L27"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Changes the selected track’s chorus amount.",
    "short_label": "CHORUS SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "28",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L28"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "50",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L50"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Chooses one of 16 slicer patterns.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "29",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L29"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "54",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L54"
     }
    ]
   },
   {
    "mode": "reson_1",
    "gesture": "turn",
    "action": "Changes the selected track’s resonator pitch.",
    "short_label": "RESON TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "30",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L30"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "70",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L70"
     }
    ]
   },
   {
    "mode": "reson_2",
    "gesture": "turn",
    "action": "Changes resonator structure, or chooses the chord when the model is CHORD.",
    "short_label": "STRUCTURE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "31",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L31"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "74-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L74-L75"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "132-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L132-L140"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "turn",
    "action": "Changes the shared delay’s feedback.",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "32",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L32"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "88",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L88"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Changes the shared reverb’s size.",
    "short_label": "REVERB SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "33",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L33"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "91",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L91"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Changes the shared chorus’s modulation depth.",
    "short_label": "CHORUS DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "34",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L34"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L94"
     }
    ]
   },
   {
    "mode": "comp_1",
    "gesture": "turn",
    "action": "Changes the ducking threshold.",
    "short_label": "THRESHOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "35",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L35"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "117",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L117"
     }
    ]
   },
   {
    "mode": "comp_2",
    "gesture": "turn",
    "action": "Chooses a hard or soft ducking knee.",
    "short_label": "KNEE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "36",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L36"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "121",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L121"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "37",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L37"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Changes the track’s pattern clock division unless a song is running or armed.",
    "short_label": "DIVISION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "38",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L38"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "58",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L58"
     }
    ]
   },
   {
    "mode": "motion",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "39",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L39"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Chooses a row’s project slot A–D, or adds a row at the extra row, unless a song is running or armed.",
    "short_label": "ROW SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "40",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L40"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "201-230",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L201-L230"
     }
    ]
   },
   {
    "mode": "global_1",
    "gesture": "turn",
    "action": "Changes global swing.",
    "short_label": "GLOBAL SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "41",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L41"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "85",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L85"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "42",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L42"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "global_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "43",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L43"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "While stopped, a clockwise turn opens NAME for a used project slot without writing it or saving the working project; OCT+ later writes the name without another question.",
    "short_label": "RENAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L44"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "82-91",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L82-L91"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Two clockwise turns within about 1.5 seconds immediately reset the current model’s eight sound controls, choke group and track filter, rebase its motion and silence its active voices without undo; this changes working memory only until a project SAVE.",
    "short_label": "INIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L45"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "362-371",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L362-L371"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "325-371",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L325-L371"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/drum_core.c",
      "lines": "226-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/drum_core.c#L226-L237"
     }
    ]
   },
   {
    "mode": "grids_map_1",
    "gesture": "turn",
    "action": "Moves horizontally through the Grids rhythm map.",
    "short_label": "MAP X",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "107",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L107"
     }
    ]
   },
   {
    "mode": "grids_eucl_1",
    "gesture": "turn",
    "action": "Changes the Euclidean kick pattern’s length from 1 to 32 steps.",
    "short_label": "KICK LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "113",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L113"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "86-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L86-L87"
     }
    ]
   },
   {
    "mode": "grids_2",
    "gesture": "turn",
    "action": "Changes the generated snare pattern’s fill.",
    "short_label": "SNARE FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L47"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L111"
     }
    ]
   },
   {
    "mode": "lfo_1",
    "gesture": "turn",
    "action": "Changes the selected LFO’s rate in the SYNC, Hz or TIME mode selected with OCT+.",
    "short_label": "LFO RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "49",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L49"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "223-240",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L223-L240"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "turn",
    "action": "Chooses free running, retrigger on a hit or retrigger on play for the selected LFO.",
    "short_label": "LFO TRIGGER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "50",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L50"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "27",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L27"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Changes the selected track’s level, with the first turn only unmuting a muted track.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L51"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "162-170",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L162-L170"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn",
    "action": "Changes the note at the step-record cursor.",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "533-555",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L533-L555"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_f3",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_g3",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_a3",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_b3",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_c4",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_d4",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_e4",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_f4",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_g4",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_a4",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_b4",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_c5",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_d5",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_e5",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_f5",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn_while_holding:key_g5",
    "action": "When this is the most recently pressed step key still held, chooses one to four hits, restoring its earlier flags and forcing it on without a tie on the first turn; steps outside LEN or generated by Grids cannot be edited.",
    "short_label": "RATCHET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "126-150",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L126-L150"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "action": "Changes temporary master bit crushing.",
    "short_label": "CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "442-454",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L442-L454"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "51-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L51-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1122-1144",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1122-L1144"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "action": "Changes temporary master bit crushing.",
    "short_label": "CRUSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "442-454",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L442-L454"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "51-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L51-L52"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Changes the character at the name cursor, inserting a space first when the cursor is at the end.",
    "short_label": "CHARACTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "165-178",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L165-L178"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When its encoder is prompted, teaches the encoder identity and right-turn direction; power-on calibration requests a settings write on return, while menu calibration waits for menu close, with a pending write deferred during playback.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "832-857",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L832-L857"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-105",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L105"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "140-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the name cursor left.",
    "short_label": "CURSOR LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "hold",
    "action": "Moves the name cursor left repeatedly after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "CURSOR LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "17-20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "221-231",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L221-L231"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at F#3 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies repeat 1/8 to the master on the next sixteenth-note boundary while playing, or immediately while stopped while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "REPEAT 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases repeat 1/8, returning to any earlier held buffer effect when applicable.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies repeat 1/8 to the master on the next sixteenth-note boundary while playing, or immediately while stopped while held, if available.",
    "short_label": "REPEAT 1/8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays track 2 at velocity 100 and sends its assigned MIDI note on the drum channel; on HOME and per-track screens also selects it.",
    "short_label": "HIT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "747-751",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L747-L751"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Plays track 2 and records to its nearest step when that track is armed, playing and using its own steps, while sending its assigned MIDI note.",
    "short_label": "RECORD 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "263-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L263-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Sends track 2’s MIDI note-off without stopping a one-shot drum sound.",
    "short_label": "NOTE OFF 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Toggles track 2’s persistent mute at once or at the next bar according to MUTE timing, taking effect at once when stopped.",
    "short_label": "MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "379-393",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L379-L393"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "584-607",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L584-L607"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Toggles compressor ducking for track 2 unless it is the compressor’s source.",
    "short_label": "DUCK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "409-414",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 2 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 2 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles CD when tapped again within 0.8 seconds; in 123 mode types 2 once.",
    "short_label": "CD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at G3 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate and sends track 2’s assigned MIDI note-off.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN and sends track 2’s assigned MIDI note-off.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 2 while this performance key is held without changing its saved mute setting; PAGE operation also accepts the key without FX held.",
    "short_label": "HOLD MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases the temporary performance mute of track 2.",
    "short_label": "END MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "HIT 2",
    "action": "Plays track 2 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "HIT 2",
    "action": "Plays track 2 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "HIT 2",
    "action": "Plays track 2 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIDI OFF 2",
    "action": "Unless PERFORM claimed the key, sends track 2’s assigned MIDI note-off even when the grid, NAME or a menu consumed its press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L439"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, mutes track 2 while this performance key is held without changing its saved mute setting.",
    "short_label": "HOLD MUTE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Inserts a space into the name.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at G#3 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies repeat 1/16 to the master on the next sixteenth-note boundary while playing, or immediately while stopped while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "REPEAT 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases repeat 1/16, returning to any earlier held buffer effect when applicable.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies repeat 1/16 to the master on the next sixteenth-note boundary while playing, or immediately while stopped while held, if available.",
    "short_label": "REPEAT 1/16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays track 3 at velocity 100 and sends its assigned MIDI note on the drum channel; on HOME and per-track screens also selects it.",
    "short_label": "HIT 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "747-751",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L747-L751"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Plays track 3 and records to its nearest step when that track is armed, playing and using its own steps, while sending its assigned MIDI note.",
    "short_label": "RECORD 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "263-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L263-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Sends track 3’s MIDI note-off without stopping a one-shot drum sound.",
    "short_label": "NOTE OFF 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Toggles track 3’s persistent mute at once or at the next bar according to MUTE timing, taking effect at once when stopped.",
    "short_label": "MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "379-393",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L379-L393"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "584-607",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L584-L607"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Toggles compressor ducking for track 3 unless it is the compressor’s source.",
    "short_label": "DUCK 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "409-414",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 3 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 3 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles EF when tapped again within 0.8 seconds; in 123 mode types 3 once.",
    "short_label": "EF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at A3 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate and sends track 3’s assigned MIDI note-off.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN and sends track 3’s assigned MIDI note-off.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 3 while this performance key is held without changing its saved mute setting; PAGE operation also accepts the key without FX held.",
    "short_label": "HOLD MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases the temporary performance mute of track 3.",
    "short_label": "END MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "HIT 3",
    "action": "Plays track 3 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "HIT 3",
    "action": "Plays track 3 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "HIT 3",
    "action": "Plays track 3 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIDI OFF 3",
    "action": "Unless PERFORM claimed the key, sends track 3’s assigned MIDI note-off even when the grid, NAME or a menu consumed its press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L439"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, mutes track 3 while this performance key is held without changing its saved mute setting.",
    "short_label": "HOLD MUTE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the name cursor right.",
    "short_label": "CURSOR RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "hold",
    "action": "Moves the name cursor right repeatedly after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "CURSOR RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "17-20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "221-231",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L221-L231"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at A#3 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies repeat 1/32 to the master on the next sixteenth-note boundary while playing, or immediately while stopped while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "REPEAT 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases repeat 1/32, returning to any earlier held buffer effect when applicable.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies repeat 1/32 to the master on the next sixteenth-note boundary while playing, or immediately while stopped while held, if available.",
    "short_label": "REPEAT 1/32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays track 4 at velocity 100 and sends its assigned MIDI note on the drum channel; on HOME and per-track screens also selects it.",
    "short_label": "HIT 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "747-751",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L747-L751"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Plays track 4 and records to its nearest step when that track is armed, playing and using its own steps, while sending its assigned MIDI note.",
    "short_label": "RECORD 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "263-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L263-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Sends track 4’s MIDI note-off without stopping a one-shot drum sound.",
    "short_label": "NOTE OFF 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Toggles track 4’s persistent mute at once or at the next bar according to MUTE timing, taking effect at once when stopped.",
    "short_label": "MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "379-393",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L379-L393"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "584-607",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L584-L607"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Toggles compressor ducking for track 4 unless it is the compressor’s source.",
    "short_label": "DUCK 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "409-414",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 4 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 4 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles GH when tapped again within 0.8 seconds; in 123 mode types 4 once.",
    "short_label": "GH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at B3 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate and sends track 4’s assigned MIDI note-off.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN and sends track 4’s assigned MIDI note-off.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 4 while this performance key is held without changing its saved mute setting; PAGE operation also accepts the key without FX held.",
    "short_label": "HOLD MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases the temporary performance mute of track 4.",
    "short_label": "END MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "HIT 4",
    "action": "Plays track 4 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "HIT 4",
    "action": "Plays track 4 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "HIT 4",
    "action": "Plays track 4 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIDI OFF 4",
    "action": "Unless PERFORM claimed the key, sends track 4’s assigned MIDI note-off even when the grid, NAME or a menu consumed its press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L439"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, mutes track 4 while this performance key is held without changing its saved mute setting.",
    "short_label": "HOLD MUTE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays track 5 at velocity 100 and sends its assigned MIDI note on the drum channel; on HOME and per-track screens also selects it.",
    "short_label": "HIT 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "747-751",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L747-L751"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Plays track 5 and records to its nearest step when that track is armed, playing and using its own steps, while sending its assigned MIDI note.",
    "short_label": "RECORD 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "263-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L263-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Sends track 5’s MIDI note-off without stopping a one-shot drum sound.",
    "short_label": "NOTE OFF 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Toggles track 5’s persistent mute at once or at the next bar according to MUTE timing, taking effect at once when stopped.",
    "short_label": "MUTE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "379-393",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L379-L393"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "584-607",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L584-L607"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Toggles compressor ducking for track 5 unless it is the compressor’s source.",
    "short_label": "DUCK 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "409-414",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 5 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 5 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles IJK when tapped again within 0.8 seconds; in 123 mode types 5 once.",
    "short_label": "IJK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at C4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate and sends track 5’s assigned MIDI note-off.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN and sends track 5’s assigned MIDI note-off.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 5 while this performance key is held without changing its saved mute setting; PAGE operation also accepts the key without FX held.",
    "short_label": "HOLD MUTE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases the temporary performance mute of track 5.",
    "short_label": "END MUTE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "HIT 5",
    "action": "Plays track 5 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "HIT 5",
    "action": "Plays track 5 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "HIT 5",
    "action": "Plays track 5 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIDI OFF 5",
    "action": "Unless PERFORM claimed the key, sends track 5’s assigned MIDI note-off even when the grid, NAME or a menu consumed its press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L439"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, mutes track 5 while this performance key is held without changing its saved mute setting.",
    "short_label": "HOLD MUTE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Deletes the character before the name cursor.",
    "short_label": "BACKSPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "hold",
    "action": "Deletes the character before the name cursor repeatedly after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "BACKSPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "17-20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "221-231",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L221-L231"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at C#4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies reverse to the master on the next sixteenth-note boundary while playing, or immediately while stopped while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases reverse, returning to any earlier held buffer effect when applicable.",
    "short_label": "END REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies reverse to the master on the next sixteenth-note boundary while playing, or immediately while stopped while held, if available.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays track 6 at velocity 100 and sends its assigned MIDI note on the drum channel; on HOME and per-track screens also selects it.",
    "short_label": "HIT 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "747-751",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L747-L751"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Plays track 6 and records to its nearest step when that track is armed, playing and using its own steps, while sending its assigned MIDI note.",
    "short_label": "RECORD 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "263-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L263-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Sends track 6’s MIDI note-off without stopping a one-shot drum sound.",
    "short_label": "NOTE OFF 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Toggles track 6’s persistent mute at once or at the next bar according to MUTE timing, taking effect at once when stopped.",
    "short_label": "MUTE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "379-393",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L379-L393"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "584-607",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L584-L607"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Toggles compressor ducking for track 6 unless it is the compressor’s source.",
    "short_label": "DUCK 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "409-414",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 6 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 6 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles LM when tapped again within 0.8 seconds; in 123 mode types 6 once.",
    "short_label": "LM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at D4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate and sends track 6’s assigned MIDI note-off.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN and sends track 6’s assigned MIDI note-off.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 6 while this performance key is held without changing its saved mute setting; PAGE operation also accepts the key without FX held.",
    "short_label": "HOLD MUTE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases the temporary performance mute of track 6.",
    "short_label": "END MUTE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "HIT 6",
    "action": "Plays track 6 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "HIT 6",
    "action": "Plays track 6 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "HIT 6",
    "action": "Plays track 6 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIDI OFF 6",
    "action": "Unless PERFORM claimed the key, sends track 6’s assigned MIDI note-off even when the grid, NAME or a menu consumed its press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L439"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, mutes track 6 while this performance key is held without changing its saved mute setting.",
    "short_label": "HOLD MUTE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Toggles the white keys between ABC groups and single 123 characters.",
    "short_label": "ABC / 123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at D#4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies tape stop to the master immediately while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "TAPE STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases tape stop, returning to any earlier held buffer effect when applicable.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies tape stop to the master immediately while held, if available.",
    "short_label": "TAPE STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays track 7 at velocity 100 and sends its assigned MIDI note on the drum channel; on HOME and per-track screens also selects it.",
    "short_label": "HIT 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "747-751",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L747-L751"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Plays track 7 and records to its nearest step when that track is armed, playing and using its own steps, while sending its assigned MIDI note.",
    "short_label": "RECORD 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "263-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L263-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Sends track 7’s MIDI note-off without stopping a one-shot drum sound.",
    "short_label": "NOTE OFF 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Toggles track 7’s persistent mute at once or at the next bar according to MUTE timing, taking effect at once when stopped.",
    "short_label": "MUTE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "379-393",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L379-L393"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "584-607",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L584-L607"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Toggles compressor ducking for track 7 unless it is the compressor’s source.",
    "short_label": "DUCK 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "409-414",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 7 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 7 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles NO when tapped again within 0.8 seconds; in 123 mode types 7 once.",
    "short_label": "NO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at E4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate and sends track 7’s assigned MIDI note-off.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN and sends track 7’s assigned MIDI note-off.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 7 while this performance key is held without changing its saved mute setting; PAGE operation also accepts the key without FX held.",
    "short_label": "HOLD MUTE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases the temporary performance mute of track 7.",
    "short_label": "END MUTE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "HIT 7",
    "action": "Plays track 7 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "HIT 7",
    "action": "Plays track 7 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "HIT 7",
    "action": "Plays track 7 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIDI OFF 7",
    "action": "Unless PERFORM claimed the key, sends track 7’s assigned MIDI note-off even when the grid, NAME or a menu consumed its press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L439"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, mutes track 7 while this performance key is held without changing its saved mute setting.",
    "short_label": "HOLD MUTE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays track 8 at velocity 100 and sends its assigned MIDI note on the drum channel; on HOME and per-track screens also selects it.",
    "short_label": "HIT 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "747-751",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L747-L751"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Plays track 8 and records to its nearest step when that track is armed, playing and using its own steps, while sending its assigned MIDI note.",
    "short_label": "RECORD 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "263-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L263-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Sends track 8’s MIDI note-off without stopping a one-shot drum sound.",
    "short_label": "NOTE OFF 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Toggles track 8’s persistent mute at once or at the next bar according to MUTE timing, taking effect at once when stopped.",
    "short_label": "MUTE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "379-393",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L379-L393"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "584-607",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L584-L607"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Toggles compressor ducking for track 8 unless it is the compressor’s source.",
    "short_label": "DUCK 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "409-414",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L409-L414"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 8 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 8 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles PQ when tapped again within 0.8 seconds; in 123 mode types 8 once.",
    "short_label": "PQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at F4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate and sends track 8’s assigned MIDI note-off.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN and sends track 8’s assigned MIDI note-off.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Mutes track 8 while this performance key is held without changing its saved mute setting; PAGE operation also accepts the key without FX held.",
    "short_label": "HOLD MUTE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases the temporary performance mute of track 8.",
    "short_label": "END MUTE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "short_label": "HIT 8",
    "action": "Plays track 8 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "short_label": "HIT 8",
    "action": "Plays track 8 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "press",
    "short_label": "HIT 8",
    "action": "Plays track 8 and sends its drum-channel MIDI note without moving the menu cursor, recording the hit if that track is armed and playing its own steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "285-290",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L285-L290"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "MIDI OFF 8",
    "action": "Unless PERFORM claimed the key, sends track 8’s assigned MIDI note-off even when the grid, NAME or a menu consumed its press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L439"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, mutes track 8 while this performance key is held without changing its saved mute setting.",
    "short_label": "HOLD MUTE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the name cursor left.",
    "short_label": "CURSOR LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "hold",
    "action": "Moves the name cursor left repeatedly after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "CURSOR LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "17-20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "221-231",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L221-L231"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at F#4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies low-pass to the master immediately while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "LOW-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases low-pass, returning to any earlier held buffer effect when applicable.",
    "short_label": "END LOW-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies low-pass to the master immediately while held, if available.",
    "short_label": "LOW-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 9 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 9 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles RS when tapped again within 0.8 seconds; in 123 mode types 9 once.",
    "short_label": "RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at G4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Inserts a space into the name.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at G#4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies high-pass to the master immediately while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "HIGH-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases high-pass, returning to any earlier held buffer effect when applicable.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies high-pass to the master immediately while held, if available.",
    "short_label": "HIGH-PASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 10 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 10 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles TU when tapped again within 0.8 seconds; in 123 mode types 0 once.",
    "short_label": "TU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at A4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the name cursor right.",
    "short_label": "CURSOR RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "hold",
    "action": "Moves the name cursor right repeatedly after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "CURSOR RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "17-20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "221-231",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L221-L231"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at A#4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies freeze to the master immediately while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases freeze, returning to any earlier held buffer effect when applicable.",
    "short_label": "END FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies freeze to the master immediately while held, if available.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 11 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 11 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles VW when tapped again within 0.8 seconds; in 123 mode types - once.",
    "short_label": "VW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at B4 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 12 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 12 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles XYZ when tapped again within 0.8 seconds; in 123 mode types . once.",
    "short_label": "XYZ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at C5 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Sets TRACKS mute timing to immediately and saves the device option at once when stopped or after stopping playback, without a question.",
    "short_label": "MUTES NOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "173-179",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L173-L179"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Deletes the character before the name cursor.",
    "short_label": "BACKSPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "hold",
    "action": "Deletes the character before the name cursor repeatedly after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "BACKSPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "17-20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "221-231",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L221-L231"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at C#5 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies octave up to the master immediately while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "OCTAVE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases octave up, returning to any earlier held buffer effect when applicable.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies octave up to the master immediately while held, if available.",
    "short_label": "OCTAVE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 13 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 13 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles 123 when tapped again within 0.8 seconds; in 123 mode types _ once.",
    "short_label": "123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at D5 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Sets TRACKS mute timing to at the next bar and saves the device option at once when stopped or after stopping playback, without a question.",
    "short_label": "MUTES ON BAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "173-179",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L173-L179"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Toggles the white keys between ABC groups and single 123 characters.",
    "short_label": "ABC / 123",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at D#5 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Applies octave down to the master immediately while held, if available; PAGE operation also accepts the key without FX held.",
    "short_label": "OCTAVE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Releases octave down, returning to any earlier held buffer effect when applicable.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "114-124",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L114-L124"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "152-168",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L152-L168"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "408-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L408-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, applies octave down to the master immediately while held, if available.",
    "short_label": "OCTAVE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "101-111",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L101-L111"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 14 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 14 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles 456 when tapped again within 0.8 seconds; in 123 mode types / once.",
    "short_label": "456",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at E5 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 15 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 15 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles 789 when tapped again within 0.8 seconds; in 123 mode types # once.",
    "short_label": "789",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at F5 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Has no step-grid action.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "14-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L14-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "729-742",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L729-L742"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "Moves the name cursor left.",
    "short_label": "CURSOR LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "43-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L43-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "134-163",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L134-L163"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "hold",
    "action": "Moves the name cursor left repeatedly after 0.45 seconds, then every 0.09 seconds.",
    "short_label": "CURSOR LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "17-20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L17-L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "221-231",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L221-L231"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at F#5 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Has no drum-pad function with KEYS off.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L439"
     }
    ]
   },
   {
    "mode": "tracks_armed",
    "gesture": "press",
    "action": "Has no drum-pad function on armed TRACKS.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "425-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L425-L439"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "press_while_holding:button_rec",
    "action": "Has no REC-held mute shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "715-726",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L715-L726"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "press",
    "action": "Has no compressor duck shortcut.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "743-746",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L743-L746"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "press",
    "action": "Toggles visible-bank step 16 within LEN unless a song or Grids owns it; switching it off clears its flags, while a new ACID step uses the last keyboard note and a new drum step uses C4.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-16",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L16"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "290-316",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L290-L316"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "long_press",
    "action": "After 0.4 seconds restores visible-bank step 16 to its previous settings, forces it on without a tie and flips its accent, unless that step is unavailable.",
    "short_label": "ACCENT 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "730-741",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L730-L741"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "318-331",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L318-L331"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "press",
    "action": "In ABC mode types or cycles 0-. when tapped again within 0.8 seconds; in 123 mode types + once.",
    "short_label": "0-.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "21-24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L21-L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "113-133",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L113-L133"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "press",
    "action": "Plays the selected track at G5 plus the octave shift, recording its note when armed and playing with its own steps, without sending a MIDI note-on.",
    "short_label": "PLAY G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "292-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L292-L298"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-390",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L390"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "hold",
    "action": "For ACID holds the sounding note and writes ties during live recording, with legato notes able to create slides, but its gate closes after about 5.5 seconds from the latest note or slide.",
    "short_label": "HOLD NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "311-355",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L311-L355"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "357-384",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L357-L384"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "195-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L195-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_dsp.c",
      "lines": "280-281",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_dsp.c#L280-L281"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "release",
    "action": "Ends this key’s held ACID note if it still owns the gate.",
    "short_label": "RELEASE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "300-309",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L300-L309"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "press",
    "action": "Writes this key’s note at the cursor with the current accent and slide flags; a press overlapping the previous key adds a slide flag there and enters the next step.",
    "short_label": "ENTER NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "494-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L494-L519"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "release",
    "action": "Advances the cursor when the key that entered its current note is released, wrapping within LEN.",
    "short_label": "ADVANCE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "488-519",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L488-L519"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "414-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:button_fx",
    "action": "Has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does not move the menu cursor or act as a drum pad.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "575-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L575-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "12-13",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L12-L13"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "430-433",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L430-L433"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "press",
    "short_label": "UNDERLYING",
    "action": "Keeps the underlying screen’s sound and MIDI routing while the confirmation ignores its step-edit or track-selection command.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "420-439",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L420-L439"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "With PERFORM PAGE open, has no performance effect and does not play or record a note.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "127-142",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L127-L142"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "397-412",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L397-L412"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Changes the main output level; USB audio follows it in MASTER mode and uses a fixed level in FIXED mode.",
    "short_label": "MASTER LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "160-166",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L160-L166"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "154-158",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L154-L158"
     }
    ]
   }
  ],
  "jack_usb_c": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "USB AUDIO",
    "action": "Connects USB MIDI input and output, stereo USB audio recording at 44.1 kHz and the firmware updater; the inherited project editor protocol is disabled.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/felucca.c",
      "lines": "40-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/felucca.c#L40-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/felucca.c",
      "lines": "180-190",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/felucca.c#L180-L190"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "195-205",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L195-L205"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/usb_app.c",
      "lines": "12-27",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/usb_app.c#L12-L27"
     }
    ]
   }
  ],
  "jack_midi_in": [
   {
    "mode": "any",
    "gesture": "press",
    "short_label": "MIDI INPUT",
    "action": "Receives drum notes on the selected channel and clock when TRS is chosen, while MIDI note-offs do not stop one-shot drum hits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/seq.c",
      "lines": "453-479",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L453-L479"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "home",
    "gesture": "shows",
    "action": "Shows the selected track, its four main sound controls, an audio trace and the step strip.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1301-1303",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1301-L1303"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1475-1491",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1475-L1491"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1400-1455",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1400-L1455"
     }
    ]
   },
   {
    "mode": "sound_k808_1",
    "gesture": "shows",
    "action": "Shows K808 controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_k808_2",
    "gesture": "shows",
    "action": "Shows K808 controls DIP, DRIVE, LEVEL, PAN and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_k808_3",
    "gesture": "shows",
    "action": "Shows K808 controls MIDI NOTE, CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_k909_1",
    "gesture": "shows",
    "action": "Shows K909 controls MODEL, TUNE, DECAY, SWEEP and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_k909_2",
    "gesture": "shows",
    "action": "Shows K909 controls CLICK, SWPT, DRIVE, LEVEL and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_k909_3",
    "gesture": "shows",
    "action": "Shows K909 controls PAN, MIDI NOTE, CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_kboom_1",
    "gesture": "shows",
    "action": "Shows KBOOM controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_kboom_2",
    "gesture": "shows",
    "action": "Shows KBOOM controls PUNCH, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_kboom_3",
    "gesture": "shows",
    "action": "Shows KBOOM controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_kpunc_1",
    "gesture": "shows",
    "action": "Shows KPUNC controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_kpunc_2",
    "gesture": "shows",
    "action": "Shows KPUNC controls FM, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_kpunc_3",
    "gesture": "shows",
    "action": "Shows KPUNC controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_s808_1",
    "gesture": "shows",
    "action": "Shows S808 controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_s808_2",
    "gesture": "shows",
    "action": "Shows S808 controls SNAP, NTONE, LEVEL, PAN and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_s808_3",
    "gesture": "shows",
    "action": "Shows S808 controls MIDI NOTE, CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_s909_1",
    "gesture": "shows",
    "action": "Shows S909 controls MODEL, TUNE, DECAY, BODY and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_s909_2",
    "gesture": "shows",
    "action": "Shows S909 controls SNAP, NTONE, LEVEL, PAN and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_s909_3",
    "gesture": "shows",
    "action": "Shows S909 controls MIDI NOTE, CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_c808_1",
    "gesture": "shows",
    "action": "Shows C808 controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_c808_2",
    "gesture": "shows",
    "action": "Shows C808 controls TAIL, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_c808_3",
    "gesture": "shows",
    "action": "Shows C808 controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_c909_1",
    "gesture": "shows",
    "action": "Shows C909 controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_c909_2",
    "gesture": "shows",
    "action": "Shows C909 controls SPRD, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_c909_3",
    "gesture": "shows",
    "action": "Shows C909 controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_ssnap_1",
    "gesture": "shows",
    "action": "Shows SSNAP controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_ssnap_2",
    "gesture": "shows",
    "action": "Shows SSNAP controls SNAP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_ssnap_3",
    "gesture": "shows",
    "action": "Shows SSNAP controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_scrak_1",
    "gesture": "shows",
    "action": "Shows SCRAK controls MODEL, TUNE, DECAY, FM and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_scrak_2",
    "gesture": "shows",
    "action": "Shows SCRAK controls SNAP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_scrak_3",
    "gesture": "shows",
    "action": "Shows SCRAK controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hatc_1",
    "gesture": "shows",
    "action": "Shows HATC controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hatc_2",
    "gesture": "shows",
    "action": "Shows HATC controls BRITE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hatc_3",
    "gesture": "shows",
    "action": "Shows HATC controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hato_1",
    "gesture": "shows",
    "action": "Shows HATO controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hato_2",
    "gesture": "shows",
    "action": "Shows HATO controls BRITE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hato_3",
    "gesture": "shows",
    "action": "Shows HATO controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_cymb_1",
    "gesture": "shows",
    "action": "Shows CYMB controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_cymb_2",
    "gesture": "shows",
    "action": "Shows CYMB controls BAL, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_cymb_3",
    "gesture": "shows",
    "action": "Shows CYMB controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_cowb_1",
    "gesture": "shows",
    "action": "Shows COWB controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_cowb_2",
    "gesture": "shows",
    "action": "Shows COWB controls TAIL, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_cowb_3",
    "gesture": "shows",
    "action": "Shows COWB controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hmetl_1",
    "gesture": "shows",
    "action": "Shows HMETL controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hmetl_2",
    "gesture": "shows",
    "action": "Shows HMETL controls NOISE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hmetl_3",
    "gesture": "shows",
    "action": "Shows HMETL controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hnois_1",
    "gesture": "shows",
    "action": "Shows HNOIS controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hnois_2",
    "gesture": "shows",
    "action": "Shows HNOIS controls NOISE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_hnois_3",
    "gesture": "shows",
    "action": "Shows HNOIS controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_tom_1",
    "gesture": "shows",
    "action": "Shows TOM controls MODEL, TUNE, DECAY, NOISE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_tom_2",
    "gesture": "shows",
    "action": "Shows TOM controls DROP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_tom_3",
    "gesture": "shows",
    "action": "Shows TOM controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_conga_1",
    "gesture": "shows",
    "action": "Shows CONGA controls MODEL, TUNE, DECAY, SLAP and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_conga_2",
    "gesture": "shows",
    "action": "Shows CONGA controls DROP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_conga_3",
    "gesture": "shows",
    "action": "Shows CONGA controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_rim_1",
    "gesture": "shows",
    "action": "Shows RIM controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_rim_2",
    "gesture": "shows",
    "action": "Shows RIM controls DRIVE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_rim_3",
    "gesture": "shows",
    "action": "Shows RIM controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_clave_1",
    "gesture": "shows",
    "action": "Shows CLAVE controls MODEL, TUNE, DECAY, CLICK and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_clave_2",
    "gesture": "shows",
    "action": "Shows CLAVE controls DROP, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_clave_3",
    "gesture": "shows",
    "action": "Shows CLAVE controls CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_memb_1",
    "gesture": "shows",
    "action": "Shows MEMB controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_memb_2",
    "gesture": "shows",
    "action": "Shows MEMB controls HEAD, POS, BEND, STICK and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_memb_3",
    "gesture": "shows",
    "action": "Shows MEMB controls LEVEL, PAN, MIDI NOTE, CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_fm_1",
    "gesture": "shows",
    "action": "Shows FM controls MODEL, TUNE, DECAY, INDEX and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_fm_2",
    "gesture": "shows",
    "action": "Shows FM controls RATIO, MDEC, SWEEP, FBK and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_fm_3",
    "gesture": "shows",
    "action": "Shows FM controls VEL, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_fm_4",
    "gesture": "shows",
    "action": "Shows FM controls CHOKE and the sound graphic.",
    "short_label": "SOUND 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_acid_1",
    "gesture": "shows",
    "action": "Shows ACID controls MODEL, TUNE, DECAY, CUTOF and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_acid_2",
    "gesture": "shows",
    "action": "Shows ACID controls RESO, ENVMD, ACCNT, WAVE and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_acid_3",
    "gesture": "shows",
    "action": "Shows ACID controls GATE, LEVEL, PAN, MIDI NOTE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_acid_4",
    "gesture": "shows",
    "action": "Shows ACID controls CHOKE and the sound graphic.",
    "short_label": "SOUND 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_smpl_1",
    "gesture": "shows",
    "action": "Shows SMPL controls MODEL, TUNE, DECAY, TONE and the sound graphic.",
    "short_label": "SOUND 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_smpl_2",
    "gesture": "shows",
    "action": "Shows SMPL controls DRIVE, SET, KEY, LEVEL and the sound graphic.",
    "short_label": "SOUND 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "sound_smpl_3",
    "gesture": "shows",
    "action": "Shows SMPL controls PAN, MIDI NOTE, CHOKE and the sound graphic.",
    "short_label": "SOUND 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "241-279",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L241-L279"
     }
    ]
   },
   {
    "mode": "layer_1",
    "gesture": "shows",
    "action": "Shows the layer’s set, note, level and tuning.",
    "short_label": "LAYER 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1267-1348",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1267-L1348"
     }
    ]
   },
   {
    "mode": "layer_2",
    "gesture": "shows",
    "action": "Shows the layered sample’s decay.",
    "short_label": "LAYER 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "25",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L25"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1267-1348",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1267-L1348"
     }
    ]
   },
   {
    "mode": "filter_1",
    "gesture": "shows",
    "action": "Shows the track’s filter type, cutoff, resonance and envelope amount.",
    "short_label": "FILTER 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "26",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L26"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "999-1044",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L999-L1044"
     }
    ]
   },
   {
    "mode": "filter_2",
    "gesture": "shows",
    "action": "Shows the track’s filter-envelope decay.",
    "short_label": "FILTER 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "27",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L27"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "999-1044",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L999-L1044"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "shows",
    "action": "Shows the selected track’s distortion, chorus, delay and reverb amounts.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "28",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L28"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "631-641",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L631-L641"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "shows",
    "action": "Shows the track’s slicer mode, pattern, rate and depth.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "29",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L29"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "642-664",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L642-L664"
     }
    ]
   },
   {
    "mode": "reson_1",
    "gesture": "shows",
    "action": "Shows the track’s resonator model, tuning, decay and mix.",
    "short_label": "RESON 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "30",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L30"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "935-998",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L935-L998"
     }
    ]
   },
   {
    "mode": "reson_2",
    "gesture": "shows",
    "action": "Shows resonator tone, structure or chord, and position.",
    "short_label": "RESON 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "31",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L31"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "935-998",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L935-L998"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "shows",
    "action": "Shows the shared delay’s time, feedback, color and mix.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "32",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L32"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1267-1348",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1267-L1348"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "shows",
    "action": "Shows the shared reverb’s model, size and damping.",
    "short_label": "REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "33",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L33"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1267-1348",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1267-L1348"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "shows",
    "action": "Shows the shared chorus’s rate and depth.",
    "short_label": "CHORUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "34",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L34"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1267-1348",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1267-L1348"
     }
    ]
   },
   {
    "mode": "comp_1",
    "gesture": "shows",
    "action": "Shows ducking source, threshold, ratio and release with a level graphic.",
    "short_label": "COMP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "35",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L35"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "795-866",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L795-L866"
     }
    ]
   },
   {
    "mode": "comp_2",
    "gesture": "shows",
    "action": "Shows ducking attack, knee, makeup and ghost behavior with its curve.",
    "short_label": "COMP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "36",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L36"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "795-866",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L795-L866"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "shows",
    "action": "Shows the selected track’s steps, or a piano roll for a gated sound, and the bank number.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "37",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L37"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "334-395",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L334-L395"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "shows",
    "action": "Shows pattern length, division, swing and step source with its step overview.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "38",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L38"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "295-333",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L295-L333"
     }
    ]
   },
   {
    "mode": "motion",
    "gesture": "shows",
    "action": "Shows this track’s motion-event count and marks steps that hold events.",
    "short_label": "MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "39",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L39"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1148-1181",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1148-L1181"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "shows",
    "action": "Shows song rows, referenced project slots, repeats and looping, with the active row marked.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "40",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L40"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1184-1265",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1184-L1265"
     }
    ]
   },
   {
    "mode": "global_1",
    "gesture": "shows",
    "action": "Shows tempo, global swing, clock source and drum MIDI channel.",
    "short_label": "GLOBAL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "41",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L41"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1267-1348",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1267-L1348"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "shows",
    "action": "Shows USB connection status, inactive SYNC and ROUT fields, and CPU use.",
    "short_label": "SYSTEM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "42",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L42"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1535-1564",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1535-L1564"
     }
    ]
   },
   {
    "mode": "global_3",
    "gesture": "shows",
    "action": "Shows whether TRACKS mutes take effect now or at the next bar.",
    "short_label": "GLOBAL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "43",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L43"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1267-1348",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1267-L1348"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "shows",
    "action": "Shows four project slots and their names, with the selected slot and load/save controls.",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L44"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "692-735",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L692-L735"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "shows",
    "action": "Shows clear-track, initialize-sound, clear-all-patterns and initialize-all controls.",
    "short_label": "TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L45"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1267-1348",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1267-L1348"
     }
    ]
   },
   {
    "mode": "grids_map_1",
    "gesture": "shows",
    "action": "Shows Grids map position, variation and the generated kick, snare and hat rhythms.",
    "short_label": "GRIDS MAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "556-630",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L556-L630"
     }
    ]
   },
   {
    "mode": "grids_eucl_1",
    "gesture": "shows",
    "action": "Shows the Euclidean kick, snare and hat lengths and generated rhythms.",
    "short_label": "GRIDS EUCL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "556-630",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L556-L630"
     }
    ]
   },
   {
    "mode": "grids_2",
    "gesture": "shows",
    "action": "Shows the three Grids fills and the tracks routed to each generated rhythm.",
    "short_label": "GRIDS FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L47"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "556-630",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L556-L630"
     }
    ]
   },
   {
    "mode": "lfo_1",
    "gesture": "shows",
    "action": "Shows the selected LFO’s wave, rate, morph and depth with its waveform.",
    "short_label": "LFO PAGE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "49",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L49"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "867-934",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L867-L934"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "shows",
    "action": "Shows the selected LFO’s destination, trigger and phase with its waveform.",
    "short_label": "LFO PAGE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "50",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L50"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "867-934",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L867-L934"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "shows",
    "action": "Shows all eight tracks with mute, armed and activity states plus the selected track’s level, length and pan.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L51"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "736-794",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L736-L794"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "shows",
    "action": "Shows the step-record cursor, note, NOTE/TIE/REST choice and accent/slide flags.",
    "short_label": "STEP RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1511-1523",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1511-L1523"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "shows",
    "action": "Shows the live effect keys, track mutes and four temporary master-effect controls.",
    "short_label": "PERFORM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1088-1144",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1088-L1144"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "shows",
    "action": "Shows color, speaker EQ, USB level, performance mode, zoom, acceleration, calibration, About and Back, plus Bluetooth in its build.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "5-18",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L5-L18"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "64-82",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L64-L82"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "shows",
    "action": "Shows the firmware version, build date, author credits and licence information.",
    "short_label": "ABOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "49-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L49-L62"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "shows",
    "action": "Shows radio state, connection mode, saved device, scan results, signal strengths and errors in the Bluetooth build.",
    "short_label": "BLUETOOTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "224-226",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L224-L226"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "shows",
    "action": "Shows the project name, cursor, active letter group and key functions.",
    "short_label": "NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "252-298",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L252-L298"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "shows",
    "action": "Shows the requested clear or delete operation with OCT- to cancel and OCT+ to act.",
    "short_label": "CONFIRM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1589-1611",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1589-L1611"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "shows",
    "action": "Shows that sound is disabled and USB updating is available until power is turned off.",
    "short_label": "SAFE START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1571-1581",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1571-L1581"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "shows",
    "action": "Prompts for each button and then each encoder turned right; 30 seconds without input restores the previous mapping.",
    "short_label": "CALIBRATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "799-865",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L799-L865"
     }
    ]
   },
   {
    "mode": "boot",
    "gesture": "shows",
    "short_label": "HORTATOR",
    "action": "Shows the startup logo in the selected display palette before ordinary operation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "111-113",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L111-L113"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "108-117",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L108-L117"
     }
    ]
   },
   {
    "mode": "update",
    "gesture": "shows",
    "short_label": "USB UPDATER",
    "action": "Shows the USB boot updater after the five-second OCT-button hold; save first because a subsequent firmware boot discards unsaved working edits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "169-192",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L169-L192"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "261-262",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L261-L262"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/core.h",
      "lines": "206-207",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/core.h#L206-L207"
     }
    ]
   },
   {
    "mode": "ota",
    "gesture": "shows",
    "short_label": "UPDATE",
    "action": "Shows the package, header check, loader, confirmation and restart stages, or the update failure result.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/felucca.c",
      "lines": "138-161",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/felucca.c#L138-L161"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "shows",
    "short_label": "BT FAILURE",
    "action": "Shows FAILED and NO RF TRIM IN FLASH when manufacturer radio calibration is missing, requires a power cycle after a failed start, and cannot open the Bluetooth page during safe start.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ble/ble_port.c",
      "lines": "217-237",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ble/ble_port.c#L217-L237"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ble/ble_central.c",
      "lines": "451-460",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ble/ble_central.c#L451-L460"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "118-125",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L118-L125"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-565",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L565"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Changes the selected track’s third main sound control, whose function depends on that track’s model.",
    "short_label": "CONTROL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "135-138",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
     }
    ]
   },
   {
    "mode": "home_k808",
    "gesture": "turn",
    "action": "For K808, changes the selected track’s attack blip level.",
    "short_label": "K808 TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "53-66",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L53-L66"
     }
    ]
   },
   {
    "mode": "sound_k808_1",
    "gesture": "turn",
    "action": "Changes the selected K808 track’s decay.",
    "short_label": "K808 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     }
    ]
   },
   {
    "mode": "sound_k808_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_k808_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_k909",
    "gesture": "turn",
    "action": "For K909, changes the selected track’s pitch sweep.",
    "short_label": "K909 SWEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_1",
    "gesture": "turn",
    "action": "Changes the selected K909 track’s decay.",
    "short_label": "K909 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_2",
    "gesture": "turn",
    "action": "Changes the selected K909 track’s drive.",
    "short_label": "K909 DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_kboom",
    "gesture": "turn",
    "action": "For KBOOM, changes the selected track’s tone.",
    "short_label": "KBOOM TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178-180",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
     }
    ]
   },
   {
    "mode": "sound_kboom_1",
    "gesture": "turn",
    "action": "Changes the selected KBOOM track’s decay.",
    "short_label": "KBOOM DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178-180",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
     }
    ]
   },
   {
    "mode": "sound_kboom_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_kboom_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_kpunc",
    "gesture": "turn",
    "action": "For KPUNC, changes the selected track’s tone.",
    "short_label": "KPUNC TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276-278",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
     }
    ]
   },
   {
    "mode": "sound_kpunc_1",
    "gesture": "turn",
    "action": "Changes the selected KPUNC track’s decay.",
    "short_label": "KPUNC DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276-278",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
     }
    ]
   },
   {
    "mode": "sound_kpunc_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_kpunc_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_s808",
    "gesture": "turn",
    "action": "For S808, changes the selected track’s balance between the two body tones.",
    "short_label": "S808 TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "35-48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L35-L48"
     }
    ]
   },
   {
    "mode": "sound_s808_1",
    "gesture": "turn",
    "action": "Changes the selected S808 track’s decay.",
    "short_label": "S808 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_s808_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_s808_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_s909",
    "gesture": "turn",
    "action": "For S909, changes the selected track’s body level.",
    "short_label": "S909 BODY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_1",
    "gesture": "turn",
    "action": "Changes the selected S909 track’s decay.",
    "short_label": "S909 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_s909_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_c808",
    "gesture": "turn",
    "action": "For C808, changes the selected track’s filter frequency.",
    "short_label": "C808 TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "115-122",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L115-L122"
     }
    ]
   },
   {
    "mode": "sound_c808_1",
    "gesture": "turn",
    "action": "Changes the selected C808 track’s decay.",
    "short_label": "C808 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
     }
    ]
   },
   {
    "mode": "sound_c808_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_c808_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_c909",
    "gesture": "turn",
    "action": "For C909, changes the selected track’s filter frequency.",
    "short_label": "C909 TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "125-132",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L125-L132"
     }
    ]
   },
   {
    "mode": "sound_c909_1",
    "gesture": "turn",
    "action": "Changes the selected C909 track’s decay.",
    "short_label": "C909 DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
     }
    ]
   },
   {
    "mode": "sound_c909_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_c909_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_ssnap",
    "gesture": "turn",
    "action": "For SSNAP, changes the selected track’s tone.",
    "short_label": "SSNAP TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249-251",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
     }
    ]
   },
   {
    "mode": "sound_ssnap_1",
    "gesture": "turn",
    "action": "Changes the selected SSNAP track’s decay.",
    "short_label": "SSNAP DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249-251",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
     }
    ]
   },
   {
    "mode": "sound_ssnap_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_ssnap_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_scrak",
    "gesture": "turn",
    "action": "For SCRAK, changes the selected track’s FM amount.",
    "short_label": "SCRAK FM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
     }
    ]
   },
   {
    "mode": "sound_scrak_1",
    "gesture": "turn",
    "action": "Changes the selected SCRAK track’s decay.",
    "short_label": "SCRAK DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
     }
    ]
   },
   {
    "mode": "sound_scrak_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_scrak_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hatc",
    "gesture": "turn",
    "action": "For HATC, changes the selected track’s band-pass frequency.",
    "short_label": "HATC TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hatc_1",
    "gesture": "turn",
    "action": "Changes the selected HATC track’s decay.",
    "short_label": "HATC DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
     }
    ]
   },
   {
    "mode": "sound_hatc_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_hatc_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hato",
    "gesture": "turn",
    "action": "For HATO, changes the selected track’s band-pass frequency.",
    "short_label": "HATO TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129-131",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hato_1",
    "gesture": "turn",
    "action": "Changes the selected HATO track’s decay.",
    "short_label": "HATO DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129-131",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
     }
    ]
   },
   {
    "mode": "sound_hato_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_hato_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_cymb",
    "gesture": "turn",
    "action": "For CYMB, changes the selected track’s filter frequencies.",
    "short_label": "CYMB TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132-134",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "76-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L76-L87"
     }
    ]
   },
   {
    "mode": "sound_cymb_1",
    "gesture": "turn",
    "action": "Changes the selected CYMB track’s decay.",
    "short_label": "CYMB DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132-134",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
     }
    ]
   },
   {
    "mode": "sound_cymb_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_cymb_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_cowb",
    "gesture": "turn",
    "action": "For COWB, changes the selected track’s tone.",
    "short_label": "COWB TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_cowb_1",
    "gesture": "turn",
    "action": "Changes the selected COWB track’s decay.",
    "short_label": "COWB DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_cowb_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_cowb_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hmetl",
    "gesture": "turn",
    "action": "For HMETL, changes the selected track’s tone.",
    "short_label": "HMETL TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291-293",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
     }
    ]
   },
   {
    "mode": "sound_hmetl_1",
    "gesture": "turn",
    "action": "Changes the selected HMETL track’s decay.",
    "short_label": "HMETL DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291-293",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
     }
    ]
   },
   {
    "mode": "sound_hmetl_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_hmetl_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hnois",
    "gesture": "turn",
    "action": "For HNOIS, changes the selected track’s tone.",
    "short_label": "HNOIS TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294-296",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
     }
    ]
   },
   {
    "mode": "sound_hnois_1",
    "gesture": "turn",
    "action": "Changes the selected HNOIS track’s decay.",
    "short_label": "HNOIS DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294-296",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
     }
    ]
   },
   {
    "mode": "sound_hnois_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_hnois_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_tom",
    "gesture": "turn",
    "action": "For TOM, changes the selected track’s noise level.",
    "short_label": "TOM NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88-90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
     }
    ]
   },
   {
    "mode": "sound_tom_1",
    "gesture": "turn",
    "action": "Changes the selected TOM track’s decay.",
    "short_label": "TOM DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88-90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
     }
    ]
   },
   {
    "mode": "sound_tom_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_tom_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_conga",
    "gesture": "turn",
    "action": "For CONGA, changes the selected track’s slap level.",
    "short_label": "CONGA SLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91-93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
     }
    ]
   },
   {
    "mode": "sound_conga_1",
    "gesture": "turn",
    "action": "Changes the selected CONGA track’s decay.",
    "short_label": "CONGA DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91-93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
     }
    ]
   },
   {
    "mode": "sound_conga_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_conga_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_rim",
    "gesture": "turn",
    "action": "For RIM, changes the selected track’s balance between the two body tones.",
    "short_label": "RIM TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94-96",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "74-85",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L74-L85"
     }
    ]
   },
   {
    "mode": "sound_rim_1",
    "gesture": "turn",
    "action": "Changes the selected RIM track’s decay.",
    "short_label": "RIM DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94-96",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
     }
    ]
   },
   {
    "mode": "sound_rim_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_rim_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_clave",
    "gesture": "turn",
    "action": "For CLAVE, changes the selected track’s click level.",
    "short_label": "CLAVE CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97-99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
     }
    ]
   },
   {
    "mode": "sound_clave_1",
    "gesture": "turn",
    "action": "Changes the selected CLAVE track’s decay.",
    "short_label": "CLAVE DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97-99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
     }
    ]
   },
   {
    "mode": "sound_clave_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_clave_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_memb",
    "gesture": "turn",
    "action": "For MEMB, changes the selected track’s tone.",
    "short_label": "MEMB TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     }
    ]
   },
   {
    "mode": "sound_memb_1",
    "gesture": "turn",
    "action": "Changes the selected MEMB track’s decay.",
    "short_label": "MEMB DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     }
    ]
   },
   {
    "mode": "sound_memb_2",
    "gesture": "turn",
    "action": "Changes the selected MEMB track’s pitch drop after the strike.",
    "short_label": "MEMB BEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "4-7",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L4-L7"
     }
    ]
   },
   {
    "mode": "sound_memb_3",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "home_fm",
    "gesture": "turn",
    "action": "For FM, changes the selected track’s FM index.",
    "short_label": "FM INDEX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_1",
    "gesture": "turn",
    "action": "Changes the selected FM track’s decay.",
    "short_label": "FM DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_2",
    "gesture": "turn",
    "action": "Changes the selected FM track’s pitch sweep.",
    "short_label": "FM SWEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_3",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_fm_4",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_acid",
    "gesture": "turn",
    "action": "For ACID, changes the selected track’s filter cutoff.",
    "short_label": "ACID CUTOF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_1",
    "gesture": "turn",
    "action": "Changes the selected ACID track’s filter-envelope decay.",
    "short_label": "ACID DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "185-188",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L185-L188"
     }
    ]
   },
   {
    "mode": "sound_acid_2",
    "gesture": "turn",
    "action": "Changes the selected ACID track’s accent amount.",
    "short_label": "ACID ACCNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_3",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_acid_4",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_smpl",
    "gesture": "turn",
    "action": "For SMPL, changes the selected track’s tone.",
    "short_label": "SMPL TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_1",
    "gesture": "turn",
    "action": "Changes the selected SMPL track’s decay.",
    "short_label": "SMPL DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_2",
    "gesture": "turn",
    "action": "Changes the selected SMPL track’s sample note.",
    "short_label": "SMPL KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "layer_1",
    "gesture": "turn",
    "action": "Changes the layered sample’s level.",
    "short_label": "LAYER LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L62"
     }
    ]
   },
   {
    "mode": "layer_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "25",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L25"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "filter_1",
    "gesture": "turn",
    "action": "Changes the selected track’s filter resonance.",
    "short_label": "RESONANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "26",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L26"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "78",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L78"
     }
    ]
   },
   {
    "mode": "filter_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "27",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L27"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Changes the selected track’s delay send.",
    "short_label": "DELAY SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "28",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L28"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L51"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Changes the track’s slicer division.",
    "short_label": "SLICER RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "29",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L29"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L55"
     }
    ]
   },
   {
    "mode": "reson_1",
    "gesture": "turn",
    "action": "Changes the selected track’s resonator decay.",
    "short_label": "RESON DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "30",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L30"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L71"
     }
    ]
   },
   {
    "mode": "reson_2",
    "gesture": "turn",
    "action": "Changes the selected track’s resonator position.",
    "short_label": "POSITION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "31",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L31"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L75"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "turn",
    "action": "Changes the shared delay’s tone.",
    "short_label": "DELAY COLOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "32",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L32"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "89",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L89"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Changes the shared reverb’s damping.",
    "short_label": "DAMPING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "33",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L33"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "92",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L92"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "34",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L34"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "comp_1",
    "gesture": "turn",
    "action": "Changes the ducking ratio.",
    "short_label": "RATIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "35",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L35"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "118",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L118"
     }
    ]
   },
   {
    "mode": "comp_2",
    "gesture": "turn",
    "action": "Changes the ducked signal’s makeup gain.",
    "short_label": "MAKEUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "36",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L36"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "122",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L122"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "37",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L37"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Changes the track’s swing unless a song is running or armed.",
    "short_label": "TRACK SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "38",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L38"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "59",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L59"
     }
    ]
   },
   {
    "mode": "motion",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "39",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L39"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Changes a row’s repeats from 1 to 16, or adds a row at the extra row, unless a song is running or armed.",
    "short_label": "REPEATS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "40",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L40"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "201-230",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L201-L230"
     }
    ]
   },
   {
    "mode": "global_1",
    "gesture": "turn",
    "action": "Chooses internal, USB or TRS clock, with BLE also available in the Bluetooth build.",
    "short_label": "CLOCK SOURCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "41",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L41"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "7-11",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L7-L11"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "42",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L42"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "global_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "43",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L43"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "Two clockwise turns within about 1.5 seconds load the chosen project and stop playback, replacing unsaved working data without undo; an armed or running song blocks loading.",
    "short_label": "LOAD PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L44"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "329-342",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L329-L342"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "332-370",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L332-L370"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Unless a song is running or armed, two clockwise turns within about 1.5 seconds clear every working pattern, motion lane and song row and reset pattern timing and sources at once without undo; project flash changes only when saved.",
    "short_label": "CLEAR ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L45"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "340-357",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L340-L357"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "325-371",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L325-L371"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "grids_map_1",
    "gesture": "turn",
    "action": "Moves vertically through the Grids rhythm map.",
    "short_label": "MAP Y",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "108",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L108"
     }
    ]
   },
   {
    "mode": "grids_eucl_1",
    "gesture": "turn",
    "action": "Changes the Euclidean snare pattern’s length from 1 to 32 steps.",
    "short_label": "SNARE LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "114",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L114"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "86-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L86-L87"
     }
    ]
   },
   {
    "mode": "grids_2",
    "gesture": "turn",
    "action": "Changes the generated hat pattern’s fill.",
    "short_label": "HAT FILL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L47"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "112",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L112"
     }
    ]
   },
   {
    "mode": "lfo_1",
    "gesture": "turn",
    "action": "Changes the selected LFO’s wave morph.",
    "short_label": "LFO MORPH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "49",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L49"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "39",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L39"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "turn",
    "action": "Changes the selected LFO’s starting phase.",
    "short_label": "LFO PHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "50",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L50"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "246-248",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L246-L248"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Changes the selected track’s pattern length unless a song is running or armed.",
    "short_label": "TRACK LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L51"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "166-170",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L166-L170"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn",
    "action": "Chooses NOTE, TIE or REST for the step-record cursor.",
    "short_label": "NOTE TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "533-555",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L533-L555"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "action": "Adds a temporary master send to delay and reverb.",
    "short_label": "THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "442-454",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L442-L454"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "51-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L51-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1122-1144",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1122-L1144"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "action": "Adds a temporary master send to delay and reverb.",
    "short_label": "THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "442-454",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L442-L454"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "51-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L51-L52"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When its encoder is prompted, teaches the encoder identity and right-turn direction; power-on calibration requests a settings write on return, while menu calibration waits for menu close, with a pending write deferred during playback.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "832-857",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L832-L857"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-105",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L105"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "140-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Changes the selected track’s fourth main sound control, whose function depends on that track’s model.",
    "short_label": "CONTROL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "135-138",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L135-L138"
     }
    ]
   },
   {
    "mode": "home_k808",
    "gesture": "turn",
    "action": "For K808, changes the selected track’s pitch dip.",
    "short_label": "K808 DIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     }
    ]
   },
   {
    "mode": "sound_k808_1",
    "gesture": "turn",
    "action": "Changes the selected K808 track’s attack blip level.",
    "short_label": "K808 TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "69-71",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L69-L71"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "53-66",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L53-L66"
     }
    ]
   },
   {
    "mode": "sound_k808_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_k808_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_k909",
    "gesture": "turn",
    "action": "For K909, changes the selected track’s click level.",
    "short_label": "K909 CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_1",
    "gesture": "turn",
    "action": "Changes the selected K909 track’s pitch sweep.",
    "short_label": "K909 SWEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "72-74",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
     }
    ]
   },
   {
    "mode": "sound_k909_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_k909_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_kboom",
    "gesture": "turn",
    "action": "For KBOOM, changes the selected track’s punch.",
    "short_label": "KBOOM PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178-180",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
     }
    ]
   },
   {
    "mode": "sound_kboom_1",
    "gesture": "turn",
    "action": "Changes the selected KBOOM track’s tone.",
    "short_label": "KBOOM TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "178-180",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L178-L180"
     }
    ]
   },
   {
    "mode": "sound_kboom_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_kboom_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_kpunc",
    "gesture": "turn",
    "action": "For KPUNC, changes the selected track’s FM amount.",
    "short_label": "KPUNC FM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276-278",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
     }
    ]
   },
   {
    "mode": "sound_kpunc_1",
    "gesture": "turn",
    "action": "Changes the selected KPUNC track’s tone.",
    "short_label": "KPUNC TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_kick.c",
      "lines": "276-278",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L276-L278"
     }
    ]
   },
   {
    "mode": "sound_kpunc_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_kpunc_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_s808",
    "gesture": "turn",
    "action": "For S808, changes the selected track’s snare snap.",
    "short_label": "S808 SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_s808_1",
    "gesture": "turn",
    "action": "Changes the selected S808 track’s balance between the two body tones.",
    "short_label": "S808 TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L135-L137"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "35-48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L35-L48"
     }
    ]
   },
   {
    "mode": "sound_s808_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_s808_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_s909",
    "gesture": "turn",
    "action": "For S909, changes the selected track’s snare snap.",
    "short_label": "S909 SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_1",
    "gesture": "turn",
    "action": "Changes the selected S909 track’s body level.",
    "short_label": "S909 BODY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "138-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L138-L140"
     }
    ]
   },
   {
    "mode": "sound_s909_2",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L45"
     }
    ]
   },
   {
    "mode": "sound_s909_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_c808",
    "gesture": "turn",
    "action": "For C808, changes the selected track’s tail level.",
    "short_label": "C808 TAIL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "115-122",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L115-L122"
     }
    ]
   },
   {
    "mode": "sound_c808_1",
    "gesture": "turn",
    "action": "Changes the selected C808 track’s filter frequency.",
    "short_label": "C808 TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "141-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L141-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "115-122",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L115-L122"
     }
    ]
   },
   {
    "mode": "sound_c808_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_c808_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_c909",
    "gesture": "turn",
    "action": "For C909, changes the selected track’s clap spread.",
    "short_label": "C909 SPRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
     }
    ]
   },
   {
    "mode": "sound_c909_1",
    "gesture": "turn",
    "action": "Changes the selected C909 track’s filter frequency.",
    "short_label": "C909 TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "144-146",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L144-L146"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "125-132",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L125-L132"
     }
    ]
   },
   {
    "mode": "sound_c909_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_c909_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_ssnap",
    "gesture": "turn",
    "action": "For SSNAP, changes the selected track’s snare snap.",
    "short_label": "SSNAP SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249-251",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
     }
    ]
   },
   {
    "mode": "sound_ssnap_1",
    "gesture": "turn",
    "action": "Changes the selected SSNAP track’s tone.",
    "short_label": "SSNAP TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "249-251",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L249-L251"
     }
    ]
   },
   {
    "mode": "sound_ssnap_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_ssnap_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_scrak",
    "gesture": "turn",
    "action": "For SCRAK, changes the selected track’s snare snap.",
    "short_label": "SCRAK SNAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
     }
    ]
   },
   {
    "mode": "sound_scrak_1",
    "gesture": "turn",
    "action": "Changes the selected SCRAK track’s FM amount.",
    "short_label": "SCRAK FM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_snare.c",
      "lines": "343-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_snare.c#L343-L345"
     }
    ]
   },
   {
    "mode": "sound_scrak_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_scrak_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hatc",
    "gesture": "turn",
    "action": "For HATC, changes the selected track’s high-pass frequency.",
    "short_label": "HATC BRITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hatc_1",
    "gesture": "turn",
    "action": "Changes the selected HATC track’s band-pass frequency.",
    "short_label": "HATC TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "126-128",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L126-L128"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hatc_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_hatc_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hato",
    "gesture": "turn",
    "action": "For HATO, changes the selected track’s high-pass frequency.",
    "short_label": "HATO BRITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129-131",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hato_1",
    "gesture": "turn",
    "action": "Changes the selected HATO track’s band-pass frequency.",
    "short_label": "HATO TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "129-131",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L129-L131"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "44-55",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L44-L55"
     }
    ]
   },
   {
    "mode": "sound_hato_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_hato_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_cymb",
    "gesture": "turn",
    "action": "For CYMB, changes the selected track’s balance between the lower and higher metal bands.",
    "short_label": "CYMB BAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132-134",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "76-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L76-L87"
     }
    ]
   },
   {
    "mode": "sound_cymb_1",
    "gesture": "turn",
    "action": "Changes the selected CYMB track’s filter frequencies.",
    "short_label": "CYMB TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "132-134",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L132-L134"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "76-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L76-L87"
     }
    ]
   },
   {
    "mode": "sound_cymb_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_cymb_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_cowb",
    "gesture": "turn",
    "action": "For COWB, changes the selected track’s balance between the short attack and longer tail.",
    "short_label": "COWB TAIL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "111-123",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L111-L123"
     }
    ]
   },
   {
    "mode": "sound_cowb_1",
    "gesture": "turn",
    "action": "Changes the selected COWB track’s tone.",
    "short_label": "COWB TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "135-137",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L135-L137"
     }
    ]
   },
   {
    "mode": "sound_cowb_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_cowb_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hmetl",
    "gesture": "turn",
    "action": "For HMETL, changes the selected track’s noise level.",
    "short_label": "HMETL NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291-293",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
     }
    ]
   },
   {
    "mode": "sound_hmetl_1",
    "gesture": "turn",
    "action": "Changes the selected HMETL track’s tone.",
    "short_label": "HMETL TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "291-293",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L291-L293"
     }
    ]
   },
   {
    "mode": "sound_hmetl_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_hmetl_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_hnois",
    "gesture": "turn",
    "action": "For HNOIS, changes the selected track’s noise level.",
    "short_label": "HNOIS NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294-296",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
     }
    ]
   },
   {
    "mode": "sound_hnois_1",
    "gesture": "turn",
    "action": "Changes the selected HNOIS track’s tone.",
    "short_label": "HNOIS TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_metal.c",
      "lines": "294-296",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_metal.c#L294-L296"
     }
    ]
   },
   {
    "mode": "sound_hnois_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_hnois_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_tom",
    "gesture": "turn",
    "action": "For TOM, changes the selected track’s pitch drop.",
    "short_label": "TOM DROP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88-90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
     }
    ]
   },
   {
    "mode": "sound_tom_1",
    "gesture": "turn",
    "action": "Changes the selected TOM track’s noise level.",
    "short_label": "TOM NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "88-90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
     }
    ]
   },
   {
    "mode": "sound_tom_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_tom_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_conga",
    "gesture": "turn",
    "action": "For CONGA, changes the selected track’s pitch drop.",
    "short_label": "CONGA DROP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91-93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
     }
    ]
   },
   {
    "mode": "sound_conga_1",
    "gesture": "turn",
    "action": "Changes the selected CONGA track’s slap level.",
    "short_label": "CONGA SLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "91-93",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L91-L93"
     }
    ]
   },
   {
    "mode": "sound_conga_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_conga_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_rim",
    "gesture": "turn",
    "action": "For RIM, changes the selected track’s drive.",
    "short_label": "RIM DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94-96",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
     }
    ]
   },
   {
    "mode": "sound_rim_1",
    "gesture": "turn",
    "action": "Changes the selected RIM track’s balance between the two body tones.",
    "short_label": "RIM TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "94-96",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L94-L96"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "74-85",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L74-L85"
     }
    ]
   },
   {
    "mode": "sound_rim_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_rim_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_clave",
    "gesture": "turn",
    "action": "For CLAVE, changes the selected track’s pitch drop.",
    "short_label": "CLAVE DROP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97-99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
     }
    ]
   },
   {
    "mode": "sound_clave_1",
    "gesture": "turn",
    "action": "Changes the selected CLAVE track’s click level.",
    "short_label": "CLAVE CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_perc.c",
      "lines": "97-99",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L97-L99"
     }
    ]
   },
   {
    "mode": "sound_clave_2",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_clave_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_memb",
    "gesture": "turn",
    "action": "For MEMB, changes the selected track’s blend from an inharmonic head to a harmonic head.",
    "short_label": "MEMB HEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "4-7",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L4-L7"
     }
    ]
   },
   {
    "mode": "sound_memb_1",
    "gesture": "turn",
    "action": "Changes the selected MEMB track’s tone.",
    "short_label": "MEMB TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     }
    ]
   },
   {
    "mode": "sound_memb_2",
    "gesture": "turn",
    "action": "Changes the selected MEMB track’s stick level.",
    "short_label": "MEMB STICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_memb.c",
      "lines": "73-75",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_memb.c#L73-L75"
     }
    ]
   },
   {
    "mode": "sound_memb_3",
    "gesture": "turn",
    "action": "Assigns the selected track to a choke group or turns its grouping off.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "home_fm",
    "gesture": "turn",
    "action": "For FM, changes the selected track’s FM ratio.",
    "short_label": "FM RATIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_1",
    "gesture": "turn",
    "action": "Changes the selected FM track’s FM index.",
    "short_label": "FM INDEX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_2",
    "gesture": "turn",
    "action": "Changes the selected FM track’s feedback.",
    "short_label": "FM FBK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_fm.c",
      "lines": "60-62",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_fm.c#L60-L62"
     }
    ]
   },
   {
    "mode": "sound_fm_3",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_fm_4",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_acid",
    "gesture": "turn",
    "action": "For ACID, changes the selected track’s resonance.",
    "short_label": "ACID RESO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_1",
    "gesture": "turn",
    "action": "Changes the selected ACID track’s filter cutoff.",
    "short_label": "ACID CUTOF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_2",
    "gesture": "turn",
    "action": "Changes the selected ACID track’s waveform.",
    "short_label": "ACID WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_acid.c",
      "lines": "203-206",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
     }
    ]
   },
   {
    "mode": "sound_acid_3",
    "gesture": "turn",
    "action": "Changes the MIDI note that triggers this track.",
    "short_label": "MIDI NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L48"
     }
    ]
   },
   {
    "mode": "sound_acid_4",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "23",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L23"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "home_smpl",
    "gesture": "turn",
    "action": "For SMPL, changes the selected track’s drive.",
    "short_label": "SMPL DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "469-474",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L469-L474"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "781-788",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L781-L788"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_1",
    "gesture": "turn",
    "action": "Changes the selected SMPL track’s tone.",
    "short_label": "SMPL TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "20",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L20"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/dm_sample.c",
      "lines": "102-104",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L102-L104"
     }
    ]
   },
   {
    "mode": "sound_smpl_2",
    "gesture": "turn",
    "action": "Changes the selected track’s level.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "21",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L21"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L44"
     }
    ]
   },
   {
    "mode": "sound_smpl_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "22",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L22"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "layer_1",
    "gesture": "turn",
    "action": "Transposes the layered sample from -24 to +24 semitones.",
    "short_label": "LAYER TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "24",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L24"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "63",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L63"
     }
    ]
   },
   {
    "mode": "layer_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "25",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L25"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "filter_1",
    "gesture": "turn",
    "action": "Changes the selected track’s signed filter-envelope amount.",
    "short_label": "FILTER ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "26",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L26"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "79",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L79"
     }
    ]
   },
   {
    "mode": "filter_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "27",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L27"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "Changes the selected track’s reverb send.",
    "short_label": "REVERB SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "28",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L28"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L52"
     }
    ]
   },
   {
    "mode": "slicer",
    "gesture": "turn",
    "action": "Changes the track’s slicer depth.",
    "short_label": "SLICER DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "29",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L29"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "56",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L56"
     }
    ]
   },
   {
    "mode": "reson_1",
    "gesture": "turn",
    "action": "Changes the selected track’s resonator mix.",
    "short_label": "RESON MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "30",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L30"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "72",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L72"
     }
    ]
   },
   {
    "mode": "reson_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "31",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L31"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "delay",
    "gesture": "turn",
    "action": "Changes the shared delay’s mix.",
    "short_label": "DELAY MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "32",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L32"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "90",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L90"
     }
    ]
   },
   {
    "mode": "reverb",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "33",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L33"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "chorus",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "34",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L34"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "comp_1",
    "gesture": "turn",
    "action": "Changes the ducking release.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "35",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L35"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "119",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L119"
     }
    ]
   },
   {
    "mode": "comp_2",
    "gesture": "turn",
    "action": "Chooses MUTE to stop ducking when the source is muted, KEEP to keep ducking while muted, or HIDE to keep the source unheard while it triggers ducking.",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "36",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L36"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "123",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L123"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/comp.c",
      "lines": "168-171",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/comp.c#L168-L171"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "793-803",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L793-L803"
     }
    ]
   },
   {
    "mode": "step",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "37",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L37"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Chooses the track’s own steps or a Grids kick, snare or hat pattern unless a song is running or armed.",
    "short_label": "PATTERN SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "38",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L38"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "65",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L65"
     }
    ]
   },
   {
    "mode": "motion",
    "gesture": "turn",
    "action": "Unless a song is running or armed, a clockwise turn asks to clear this track’s recorded motion when any exists; OCT+ clears it in working memory at once without undo, leaving its saved project unchanged until SAVE.",
    "short_label": "CLEAR MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "39",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L39"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "189-199",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L189-L199"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "631-634",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L631-L634"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "314-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L314-L325"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Turns song looping on clockwise or off counterclockwise unless a song is running or armed.",
    "short_label": "LOOP SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "40",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L40"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "201-230",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L201-L230"
     }
    ]
   },
   {
    "mode": "global_1",
    "gesture": "turn",
    "action": "Changes the drum MIDI channel from 1 to 16.",
    "short_label": "MIDI CHANNEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "41",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L41"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "105",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L105"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "42",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L42"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "global_3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "43",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L43"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "project",
    "gesture": "turn",
    "action": "While stopped, two clockwise turns within about 1.5 seconds immediately save the whole working project in the selected slot, which can show EMPTY SLOT over another firmware’s data; the first turn arms the write, with no foreign-data warning, further question or undo.",
    "short_label": "SAVE PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L44"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "329-345",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L329-L345"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-329",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L329"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "257-280",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L257-L280"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "342-347",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L342-L347"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/storage.c",
      "lines": "118-145",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/storage.c#L118-L145"
     }
    ]
   },
   {
    "mode": "tools",
    "gesture": "turn",
    "action": "Unless a song is running or armed, two clockwise turns within about 1.5 seconds reset the working kit, patterns, motion, song, effects and global settings and stop playback at once without undo, keeping saved projects and device settings.",
    "short_label": "INIT ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "45",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L45"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "359-377",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L359-L377"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "325-371",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L325-L371"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "300-325",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L325"
     }
    ]
   },
   {
    "mode": "grids_map_1",
    "gesture": "turn",
    "action": "Changes the Grids variation amount.",
    "short_label": "CHAOS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "109",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L109"
     }
    ]
   },
   {
    "mode": "grids_eucl_1",
    "gesture": "turn",
    "action": "Changes the Euclidean hat pattern’s length from 1 to 32 steps.",
    "short_label": "HAT LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "46",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L46"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "115",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L115"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "86-87",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L86-L87"
     }
    ]
   },
   {
    "mode": "grids_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "47",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L47"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "lfo_1",
    "gesture": "turn",
    "action": "Changes the selected LFO’s signed modulation depth.",
    "short_label": "LFO DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "49",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L49"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "40",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L40"
     }
    ]
   },
   {
    "mode": "lfo_2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "50",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L50"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-297",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L297"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Moves the selected track across the stereo field.",
    "short_label": "TRACK PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L51"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "295-318",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L295-L318"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "168-170",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L168-L170"
     }
    ]
   },
   {
    "mode": "step_record",
    "gesture": "turn",
    "action": "Chooses no flags, accent, slide or both for the step-record cursor.",
    "short_label": "STEP FLAGS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "533-555",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L533-L555"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "turn",
    "action": "Reduces the buffer effects’ wet level, or increases shimmer while an octave effect runs.",
    "short_label": "FX DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "442-454",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L442-L454"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "51-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L51-L52"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_draw.c",
      "lines": "1122-1144",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_draw.c#L1122-L1144"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_fx",
    "action": "Reduces the buffer effects’ wet level, or increases shimmer while an octave effect runs.",
    "short_label": "FX DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "442-454",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L442-L454"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/perform.c",
      "lines": "51-52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/perform.c#L51-L52"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When its encoder is prompted, teaches the encoder identity and right-turn direction; power-on calibration requests a settings write on return, while menu calibration waits for menu close, with a pending write deferred during playback.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "832-857",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L832-L857"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-105",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L105"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "140-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Outside dialogs and menus, moves through the current section’s pages and stops at each end.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "752-753",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L752-L753"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "235-257",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L235-L257"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Moves through menu rows and wraps at the ends.",
    "short_label": "MENU ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-140",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L140"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Moves through Bluetooth settings and discovered devices, wrapping at the ends.",
    "short_label": "BLUETOOTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/bt_page.c",
      "lines": "170-182",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L170-L182"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When its encoder is prompted, teaches the encoder identity and right-turn direction; power-on calibration requests a settings write on return, while menu calibration waits for menu close, with a pending write deferred during playback.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "832-857",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L832-L857"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-105",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L105"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "140-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Outside dialogs and menus, chooses one of eight tracks and ends step recording when the track changes.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "754-755",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L754-L755"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui.c",
      "lines": "417-425",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui.c#L417-L425"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When its encoder is prompted, teaches the encoder identity and right-turn direction; power-on calibration requests a settings write on return, while menu calibration waits for menu close, with a pending write deferred during playback.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "832-857",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L832-L857"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-105",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L105"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "140-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Outside dialogs and menus, changes tempo from 40 to 240 BPM with the internal clock, or reports the external clock source.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "756-762",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L756-L762"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/params.c",
      "lines": "84",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/params.c#L84"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "bluetooth",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "confirm",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "turn",
    "action": "Does nothing in this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "564-573",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L573"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "587-593",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L587-L593"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "616-645",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L616-L645"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "89-94",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L89-L94"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "139-185",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L139-L185"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_name.c",
      "lines": "233-236",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_name.c#L233-L236"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When its encoder is prompted, teaches the encoder identity and right-turn direction; power-on calibration requests a settings write on return, while menu calibration waits for menu close, with a pending write deferred during playback.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "832-857",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L832-L857"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-105",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L105"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/main.c",
      "lines": "140-143",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_menu.c",
      "lines": "96-106",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/project.c",
      "lines": "542-570",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
     }
    ]
   }
  ]
 },
 "lights": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the FX section is selected.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights steadily for SOUND and blinks on LAYER pages.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "layer_1",
    "gesture": "blinking",
    "action": "Blinks every half second while a LAYER page is selected.",
    "short_label": "LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "layer_2",
    "gesture": "blinking",
    "action": "Blinks every half second while a LAYER page is selected.",
    "short_label": "LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the GLOBAL section is selected.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the HOME or COMP section is selected.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the PROJECT or TOOLS section is selected.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the GRIDS section is selected.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the SEQ section is selected.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights steadily on an LFO page for LFO 1 and blinks for LFO 2.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks with 250 milliseconds on and off when LFO 2 is selected on an LFO page.",
    "short_label": "LFO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when the TRACKS section is selected.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-51",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L51"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when any track is armed or step recording is active, and also when TRACKS is the selected section.",
    "short_label": "RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "50-53",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L50-L53"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks during playback according to the sequencer tick.",
    "short_label": "PLAYING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "52",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L52"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the KEYS toggle is on.",
    "short_label": "KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "54",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L54"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Remains dark because no indicator is assigned to ENV.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/pages.c",
      "lines": "55-57",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/pages.c#L55-L57"
     },
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "35-97",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L35-L97"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "grid",
    "gesture": "lit",
    "action": "Lights when an earlier step bank exists.",
    "short_label": "STEP BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "73-83",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L73-L83"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "lit",
    "action": "Lights when the keyboard octave is below zero.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "87-91",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L87-L91"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "grid",
    "gesture": "lit",
    "action": "Lights when a later step bank exists.",
    "short_label": "STEP BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "73-83",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L73-L83"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "lit",
    "action": "Lights when the keyboard octave is above zero.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "87-91",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L87-L91"
     }
    ]
   },
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "Remains off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "safe_start",
    "gesture": "off",
    "action": "All panel and key lights stay off during safe start.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "40-44",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L40-L44"
     }
    ]
   },
   {
    "mode": "name",
    "gesture": "lit",
    "action": "Keys with a naming function light, while the active cycling-letter key blinks.",
    "short_label": "TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "55-58",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L55-L58"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "lit",
    "action": "Available unheld effect keys blink, held effects stay lit and unavailable effects stay dark; track keys light while unmuted and not temporarily muted.",
    "short_label": "LIVE FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "59-67",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L59-L67"
     }
    ]
   },
   {
    "mode": "tracks_mute",
    "gesture": "lit",
    "action": "Unmuted track keys light and queued bar-boundary mute changes blink.",
    "short_label": "MUTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "68-72",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L68-L72"
     }
    ]
   },
   {
    "mode": "grid",
    "gesture": "lit",
    "action": "Keys show enabled steps in the visible bank, with the playing step’s light inverted.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "73-83",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L73-L83"
     }
    ]
   },
   {
    "mode": "comp_keys",
    "gesture": "lit",
    "action": "Keys light for ducked tracks except the source track.",
    "short_label": "DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "84-86",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L84-L86"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "lit",
    "action": "Held note keys light.",
    "short_label": "KEY HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "87-91",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L87-L91"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Held note keys light.",
    "short_label": "KEY HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "deadactive/hortator",
      "ref": "drum-v0.16.0",
      "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
      "path": "firmware/src/ui_input.c",
      "lines": "92-95",
      "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L92-L95"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_f3",
   "led_fs3",
   "led_g3",
   "led_gs3",
   "led_a3",
   "led_as3",
   "led_b3",
   "led_c4",
   "led_cs4",
   "led_d4",
   "led_ds4",
   "led_e4",
   "led_f4",
   "led_fs4",
   "led_g4",
   "led_gs4",
   "led_a4",
   "led_as4",
   "led_b4",
   "led_c5",
   "led_cs5",
   "led_d5",
   "led_ds5",
   "led_e5",
   "led_f5",
   "led_fs5",
   "led_g5"
  ]
 },
 "switching_note": {
  "kept_on_unit": "Four saved slots keep sounds, steps, motion, song rows, names and project settings; device options separately keep the panel mapping and Bluetooth device and mode, while power-off or any new firmware boot discards the unsaved working project. From the flash atlas: install through the package loader: The package contains a 0x93000-byte flash image; its loader installs changed app sectors only, with read-back verification. It preserves flash head 0..3FFF and has no blanket VM/USR formatting step. The updater that was running before installation may have already written its own staging area (A successful package validation and update session; identical sectors skipped). finish installing: invalidate update records: Scans the final 256-byte area of every sector, reading 80 bytes at boundary-0x100. Erases that entire sector only if +6 is 0x5441 and its nonzero leading CRC matches CRC16(bytes 2..79). This is a conditional sector erase, not a blanket erase of the range. It can erase foreign data satisfying that record test. This package-loader scan is separate from startup cleanup: an isolated journal at0xE1000 does not trigger either startup probe, although its sector tail is still tested by this install scan (Matching committed update record; scans after app writing). first start and every later start: Erases five sectors if any byte in E0000..E0003 or E4F00..E4F07 is not FF, without an ownership check or question. Boot otherwise reads settings, four projects and shared samples; it does not automatically save default settings/projects. Exception: if both OCT buttons invoke calibration, settings_save runs after either success or timeout; timeout restores the old table but can still write it when no saved settings record was imported (JEDEC id 0x856014 and either prefix non-erased). What Hortator writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over Hortator's is in when_you_leave.",
  "lost": "Hortator opens its own older project formats but writes a newer format that drum-v0.15.0 cannot read; it does not import other firmwares’ projects, and it has no project undo or supported project export/restore in this release. Preserve any independent backups before switching; see the switching advice in this section. From the flash atlas: Other firmwares reading Hortator's data: Felucca takes over Hortator's settings and panel calibration, converting them (settings convert when read; next save writes a newer format the previous firmware cannot import); SLOOP takes over Hortator's settings and panel calibration, converting them (settings convert when read; next save writes a newer format the previous firmware cannot import); JIANT takes over Hortator's settings and panel calibration, converting them (settings convert when read; next save writes a newer format the previous firmware cannot import); ChoralRoot takes over Hortator's settings and panel calibration, converting them (settings convert when read; next save writes a newer format the previous firmware cannot import); GHOULBOX takes over Hortator's settings and panel calibration, converting them (settings convert when read; next save writes a newer format the previous firmware cannot import); Skiff takes over Hortator's settings and panel calibration, converting them (Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy); Felucca reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (sample loop and slice behaviour follow this reader’s engines); SLOOP reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (sample loop and slice behaviour follow this reader’s engines); X0X reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (Sample bytes carry over; X0X’s break-loop playback uses its own zone and loop selection rather than the previous firmware’s sound or one-shot behaviour. No unit switch was tested); GHOULBOX reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (sample loop and slice behaviour follow this reader’s engines); Skiff reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (sample loop and slice behaviour follow this reader’s engines). What Hortator reads of other firmwares' data: Hortator reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); Hortator reads and uses SLOOP's user sample slot USR1 (header at 0xA0000); user sample slot USR2 (header at 0xB4000); user sample slot USR3 (header at 0xC8000) (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); Hortator reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); Hortator reads and uses GHOULBOX's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); Hortator reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "Save the working project into one of the four unit slots before powering off, but treat those slots as unit storage rather than independent backups; the inherited browser editor cannot back up or restore Hortator projects in this release, so retain the previous firmware’s own external backups before changing firmware.",
  "writes_and_timing": "A confirmed project SAVE or stopped name confirmation writes its slot immediately; menu close, mute-timing changes, Bluetooth device changes and returning from power-on calibration can write device options without another question, even without edits or after calibration times out, with busy-playback writes delayed until stop; startup can also erase the entire temporary update area when either checked prefix is nonblank, without checking who owns the bytes, so it can erase another firmware’s work before any save action. Powering off before a delayed write runs loses that pending change; power-off does not save.",
  "going_back": "Older Hortator projects convert when loaded and are written in the new format on the next SAVE or rename; a return to drum-v0.15.0 needs projects saved for that version, and switching between plain and Bluetooth builds keeps the project format but plain changes a loaded Bluetooth clock selection to the internal clock.",
  "atlas_status": "Keep independent backups from the firmware you are leaving before switching; see the switching advice in this section for installation, startup and ordinary-use risks.",
  "source": [
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "4-24",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L4-L24"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "300-329",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L329"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "332-354",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L332-L354"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "480-503",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L480-L503"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "542-570",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/ui_menu.c",
    "lines": "96-106",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_menu.c#L96-L106"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/bt_page.c",
    "lines": "136-154",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L136-L154"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/main.c",
    "lines": "140-143",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L140-L143"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/felucca.c",
    "lines": "180-190",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/felucca.c#L180-L190"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/ota.c",
    "lines": "381-395",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ota.c#L381-L395"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/dm_sample.c",
    "lines": "6-35",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_sample.c#L6-L35"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/eng_sample.c",
    "lines": "79-91",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/eng_sample.c#L79-L91"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "420-460",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L420-L460"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/storage.c",
    "lines": "62-79",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/storage.c#L62-L79"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/storage.c",
    "lines": "84-104",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/storage.c#L84-L104"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/storage.c",
    "lines": "118-145",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/storage.c#L118-L145"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/ui_input.c",
    "lines": "861-865",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L861-L865"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/main.c",
    "lines": "261-262",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L261-L262"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/ble/ble_port.c",
    "lines": "217-237",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ble/ble_port.c#L217-L237"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/ble/ble_central.c",
    "lines": "451-460",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ble/ble_central.c#L451-L460"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/bt_page.c",
    "lines": "118-125",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L118-L125"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/ota.c",
    "lines": "268-281",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ota.c#L268-L281"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/ui_input.c",
    "lines": "564-565",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L564-L565"
   }
  ],
  "shared_samples": "Existing compatible user sample sets can be read by the sample model and layers as one-shots; this release has no sample uploader, so changing firmware can remove access to those sounds. Back up what your current firmware can export; see the switching advice in this section.",
  "foreign_settings": "The first settings write can replace saved work even if you only opened and closed the menu, picked a Bluetooth device or let power-on calibration time out; when no readable shared storage record survives, it uses the first copy, A, which can replace FoMni’s whole setup or X0X settings, while a valid shared record from Felucca, SLOOP, JIANT or Melodee makes it use the other copy, with a later write able to take the remaining copy.",
  "foreign_projects": "Projects from Felucca, SLOOP, JIANT, X0X or Melodee can appear as EMPTY SLOT because Hortator cannot load them; two right turns on SAVE still write without a foreign-data warning, using the other copy when a valid shared storage record survives or copy A otherwise, and a later save can replace the remaining copy, so preserve the previous firmware’s external backups before switching.",
  "radio_calibration": "The Bluetooth package needs the manufacturer’s saved radio calibration, which can be overwritten by other firmware; without it Bluetooth reports FAILED with NO RF TRIM IN FLASH, and retrying after a failure requires turning the FM-1 off and on, while safe start blocks Bluetooth by disabling access to its menu.",
  "updater_limits": "Hortator’s updater accepts a recognized official loader or its Felucca-family loader; another loader is refused with update error -7, so use a supported package or the boot updater when changing firmware.",
  "pending_settings": "Switch off only after stopping playback and allowing a pending device-settings save to finish; there is no save on power-off.",
  "cross_firmware_evidence": {
   "evidence": "inferred",
   "why": "Compared Hortator read/write rules with the mapped atlas objects; no firmware-switch behavior was measured on a unit.",
   "atlas_objects": [
    "fomni.project",
    "x0x.settings",
    "felucca.settings",
    "sloop.settings",
    "jiant.settings",
    "melodee.settings"
   ],
   "details": "refresh/work/hortator.storage.json reads_foreign"
  },
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Baud Girl presets (128)",
     "Baud Girl patterns (16, with locks)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "felucca",
    "name": "Felucca",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample slot USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, button calibration, favourites, MIDI LEARN map. At risk when you act: project slot A; project slot B; project slot C; project slot D. Carried over: user sample slot USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample slot USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1 (header at 0xA0000) (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample slot USR2 (header at 0xB4000) (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample slot USR3 (header at 0xC8000) (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk when you act: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project). Carried over: user sample slot USR1 (header at 0xA0000) (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample slot USR2 (header at 0xB4000) (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample slot USR3 (header at 0xC8000) (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "break loops slot 1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "break loops slot 2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "break loops slot 3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). Carried over: break loops slot 1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); break loops slot 2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); break loops slot 3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, favourites, MENU options. At risk when you act: song 1 section A (a whole project); song 1 section B (a whole project); song 1 section C (a whole project); song 1 section D (a whole project).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, factory favourites, calibration, saved template. At risk when you act: shared user presets U289-U378 (some of it lost); shared user presets U379-U384.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: AMB-1 pieces and setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: options, playing setup and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample slot USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration. At risk when you act: project A; project B; project C; project D. Carried over: user sample slot USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample slot USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample slot USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if either update-area probe is not erased",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a firmware update (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install Hortator (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "A valid user bank stored by an earlier FM-106 build can still be present and readable in Beta4; the bank risks listed here, if any, apply if it exists. FM-106 Beta4’s new user-sound edits are only in memory: panel save, delete and librarian bank commit do not store them, even when they report success. Read the unit into the librarian and export both user banks before switching or powering off; those exports omit sequence notes, locks and extended controls."
    ],
    "owner_text": "At risk by itself: octave, last selected preset and MIDI preferences. At risk when you act: older stored user bank, if present (Beta4 does not store new edits). A valid user bank stored by an earlier FM-106 build can still be present and readable in Beta4; the bank risks listed here, if any, apply if it exists. FM-106 Beta4’s new user-sound edits are only in memory: panel save, delete and librarian bank commit do not store them, even when they report success. Read the unit into the librarian and export both user banks before switching or powering off; those exports omit sequence notes, locks and extended controls.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 1",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the panel (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 2",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the panel (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the panel (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the panel (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 5",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the panel (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 6",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the panel (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 7",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the panel (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "by itself as you use it [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you calibrate the panel (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question) [through its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved programs and global settings; pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 2 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 3 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Polly setup and channel sounds. At risk when you act: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (no question)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)",
     "user sample USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration and favourites. At risk when you act: project A; project B; project C; project D. Carried over: user sample USR1 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample USR2 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested); user sample USR3 (Sample bytes remain on the unit; playback follows Hortator’s one-shot engines, so loop and slice behaviour can differ. Valid header and zone bounds are required; no unit switch was tested).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "project A",
     "project B",
     "project C",
     "project D",
     "user samples USR1",
     "user samples USR2",
     "user samples USR3"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): project A; project B; project C; project D; user samples USR1; user samples USR2; user samples USR3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "project A",
     "project B",
     "project C",
     "project D",
     "user samples USR1",
     "user samples USR2",
     "user samples USR3"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): project A; project B; project C; project D; user samples USR1; user samples USR2; user samples USR3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you send data from the web editor",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user samples USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR3 (sample loop and slice behaviour follow this reader’s engines)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration (converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import). At risk when you act: project A; project B; project C; project D. Carried over: user samples USR1 (sample loop and slice behaviour follow this reader’s engines); user samples USR2 (sample loop and slice behaviour follow this reader’s engines); user samples USR3 (sample loop and slice behaviour follow this reader’s engines).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you save the song order (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you send or remove a theme from the web editor (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you send the song from the web editor (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you store drum kits from the web editor (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load a song file or a LIVE playlist song (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section from the web editor LIVE page (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user samples USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR3 (sample loop and slice behaviour follow this reader’s engines)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration (converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import). At risk when you act: project A; project B; project C; project D. Carried over: user samples USR1 (sample loop and slice behaviour follow this reader’s engines); user samples USR2 (sample loop and slice behaviour follow this reader’s engines); user samples USR3 (sample loop and slice behaviour follow this reader’s engines).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "by itself, only after a retained second-core failure, if two cores were enabled",
        "effect": "lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user samples USR1 (Sample bytes carry over; X0X’s break-loop playback uses its own zone and loop selection rather than the previous firmware’s sound or one-shot behaviour. No unit switch was tested)",
     "user samples USR2 (Sample bytes carry over; X0X’s break-loop playback uses its own zone and loop selection rather than the previous firmware’s sound or one-shot behaviour. No unit switch was tested)",
     "user samples USR3 (Sample bytes carry over; X0X’s break-loop playback uses its own zone and loop selection rather than the previous firmware’s sound or one-shot behaviour. No unit switch was tested)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D; settings and panel calibration. Carried over: user samples USR1 (Sample bytes carry over; X0X’s break-loop playback uses its own zone and loop selection rather than the previous firmware’s sound or one-shot behaviour. No unit switch was tested); user samples USR2 (Sample bytes carry over; X0X’s break-loop playback uses its own zone and loop selection rather than the previous firmware’s sound or one-shot behaviour. No unit switch was tested); user samples USR3 (Sample bytes carry over; X0X’s break-loop playback uses its own zone and loop selection rather than the previous firmware’s sound or one-shot behaviour. No unit switch was tested).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you select a song through MIDI PROGRAM CHANGE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "by itself as you use it",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you change settings from the web editor (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a multi-section song with GEN (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user samples USR3; settings and panel calibration (converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import). At risk when you act: project A; project B; project C; project D; user samples USR1; user samples USR2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you change a setting (no question)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting in the menu (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore an older 28-object Melodee backup (clears U379-U384 first) (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a matching committed preset bank needs repair or conversion, or legacy Prophet conversion needs spill space",
        "effect": "lost"
       },
       {
        "way": "by itself, only if a previously confirmed user-preset wipe was interrupted",
        "effect": "lost"
       },
       {
        "way": "when you confirm recovery wipe of all user presets (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx into slots (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration. At risk by itself, under a condition: project A; project B; project C; project D; user samples USR3. At risk when you act: user samples USR1; user samples USR2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if a save or failed boot preparation leaves its next spare unprepared",
        "effect": "lost"
       },
       {
        "way": "by itself, only if an older ChoralRoot favourites save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if an older ChoralRoot session save survives and its next spare is not blank",
        "effect": "lost"
       },
       {
        "way": "by itself, only if an older ChoralRoot sound-pool save survives and its next spare is not blank",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if no pool bank exists and at least one legacy UPB1/192 sound passes validation",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and accept with OCT+ or SAVE (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion/reset with OCT+ (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while switching on (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you request Import 0.21 sounds from the device manager (no question; it rewrites the whole bank)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore favourites from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore pool banks 50..62, or accepted legacy sound objects that are redirected into pool slots 1..32 from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore settings, which also writes an empty session record from backup software (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording/editing/clearing this loop (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode with a nonempty current loop (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore loop id 40; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore loop id 41; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 42; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 43; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 44; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 45; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 46; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 47; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 48; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore loop id 49; zero-length PUT deletes both copies from backup software (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "by itself, only if core failure barred Dual Core while the stored setting was On",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you hold SAVE for a global save (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you keep calibration or enter update with OCT- + OCT+ + HOME held for 5 s (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you restore settings from backup software (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you restore CZ bank A (id 14) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank B (id 15) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank C (id 16) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank D (id 17) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank E (id 18) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank F (id 19) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank G (id 20) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you restore CZ bank H (id 21) from backup software (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user samples USR2; user samples USR3; settings and panel calibration (converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import). At risk when you act: project A; project B; project C; project D; user samples USR1.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you restore a backup",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       },
       {
        "way": "when you send settings from the editor",
        "effect": "converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user samples USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR3 (sample loop and slice behaviour follow this reader’s engines)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration (converted: After this firmware writes its newer settings format, returning to Hortator starts settings, panel calibration and the remembered Bluetooth device from defaults. It does not retry an older copy just because the newest record is too large; settings convert when read; next save writes a newer format the previous firmware cannot import). At risk when you act: project A; project B; project C; project D. Carried over: user samples USR1 (sample loop and slice behaviour follow this reader’s engines); user samples USR2 (sample loop and slice behaviour follow this reader’s engines); user samples USR3 (sample loop and slice behaviour follow this reader’s engines).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D. At risk when you act: user samples USR1; user samples USR2; user samples USR3; settings and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (no question)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG and confirm if it asks (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (no question)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESTORE FROM USB on the FM-1 (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore (no question)",
        "effect": "lost"
       },
       {
        "way": "when you start a stopped USB backup or enter a test session (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D; user samples USR1; user samples USR2; settings and panel calibration. At risk when you act: user samples USR3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       },
       {
        "way": "by itself as you use it",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (no question)",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself, only if a readable old Felucca/Skiff project needs migration, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you SAVE AS from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a full backup in the web editor (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project through the browser’s legacy command (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user samples USR1 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR2 (sample loop and slice behaviour follow this reader’s engines)",
     "user samples USR3 (sample loop and slice behaviour follow this reader’s engines)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration (converted: Skiff imports the old preferences, then writes its newer settings format by itself at first start. Returning to Hortator cannot read that newest record: settings, panel calibration and the remembered Bluetooth device start from defaults; it does not retry the older copy). At risk by itself, under a condition: project A; project B; project C; project D. Carried over: user samples USR1 (sample loop and slice behaviour follow this reader’s engines); user samples USR2 (sample loop and slice behaviour follow this reader’s engines); user samples USR3 (sample loop and slice behaviour follow this reader’s engines).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "Bluetooth device persistence during playback",
   "docs_say": "Selecting a discovered Bluetooth device saves it immediately.",
   "source_says": "Selecting or forgetting a device requests a settings save; flash persistence waits for playback to stop if the transport is busy.",
   "docs_ref": {
    "kind": "doc",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "README.md",
    "lines": "94-98",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/README.md#L94-L98"
   },
   "source_ref": {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "542-570",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L542-L570"
   },
   "additional_source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/bt_page.c",
     "lines": "136-154",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/bt_page.c#L136-L154"
    }
   ]
  },
  {
   "topic": "KEYS MIDI output on release",
   "docs_say": "KEYS notes produce no outgoing MIDI.",
   "source_says": "KEYS presses produce no MIDI note-on, but releasing one of the first eight white keys still sends its drum track’s assigned MIDI note-off through the shared release path.",
   "docs_ref": {
    "kind": "doc",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "README.md",
    "lines": "34-39",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/README.md#L34-L39"
   },
   "source_ref": {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/seq.c",
    "lines": "414-439",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/seq.c#L414-L439"
   }
  },
  {
   "topic": "Sound knobs vary by model",
   "docs_say": "The overview names TUNE, DECAY and TONE as common knobs for every model.",
   "source_says": "Several models replace TONE and the fourth macro, including K909 with SWEEP and CLICK, TOM with NOISE and DROP, and ACID with CUTOF and RESO.",
   "docs_ref": {
    "kind": "doc",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "README.md",
    "lines": "25-27",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/README.md#L25-L27"
   },
   "source_ref": {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/dm_kick.c",
    "lines": "72-74",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_kick.c#L72-L74"
   },
   "additional_source": [
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_perc.c",
     "lines": "88-90",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_perc.c#L88-L90"
    },
    {
     "kind": "source",
     "repo": "deadactive/hortator",
     "ref": "drum-v0.16.0",
     "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
     "path": "firmware/src/dm_acid.c",
     "lines": "203-206",
     "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/dm_acid.c#L203-L206"
    }
   ]
  }
 ],
 "not_mapped": [
  "No behavior was measured on an FM-1; this is a source reading of the release.",
  "The Bluetooth scan reads manufacturer radio-calibration records; the manufacturer’s private record payload is not decoded here.",
  "The unused inherited browser editor and read-only debug console are not mapped as working project backup tools."
 ],
 "saving_note": {
  "action": "Working pattern, sound, motion and song edits stay in memory until a deliberate project SAVE; there is no working-project autosave or undo, and power-off or a restart after entering update mode discards unsaved edits.",
  "source": [
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "300-329",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L300-L329"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "401-441",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L401-L441"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/ui_input.c",
    "lines": "329-375",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/ui_input.c#L329-L375"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "412-468",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L412-L468"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/main.c",
    "lines": "261-262",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/main.c#L261-L262"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/core.h",
    "lines": "206-207",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/core.h#L206-L207"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/motion.c",
    "lines": "20-27",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/motion.c#L20-L27"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/song.c",
    "lines": "28-38",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/song.c#L28-L38"
   }
  ]
 },
 "song_note": {
  "action": "Song rows use the saved slots’ steps, timing and motion with the current sounds; the saved model identity only decides whether model-specific motion is compatible, and stopping restores the prior timing and recording arming.",
  "source": [
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/song.c",
    "lines": "4-13",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/song.c#L4-L13"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/song.c",
    "lines": "19-25",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/song.c#L19-L25"
   },
   {
    "kind": "source",
    "repo": "deadactive/hortator",
    "ref": "drum-v0.16.0",
    "commit": "f3d7e5ac5aeb6d33bfa3db89b860372e5456a958",
    "path": "firmware/src/project.c",
    "lines": "508-539",
    "url": "https://github.com/deadactive/hortator/blob/f3d7e5ac5aeb6d33bfa3db89b860372e5456a958/firmware/src/project.c#L508-L539"
   }
  ]
 },
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 settings writes without edits",
   "fixed": "Removed changed-only wording and documented calibration timeout writes and foreign-data risk; storage triggers now spell out first-write behavior.",
   "at": "controls.button_home[1]; controls.button_oct_down[3]; controls.switch_power[0]; switching_note; refresh/work/hortator.storage.json"
  },
  {
   "round": 1,
   "error": "2 foreign projects look empty",
   "fixed": "SAVE now warns that EMPTY SLOT can hide foreign data and that the two-turn save gives no additional foreign-data warning; owner precautions and storage SAVE rows explain copy replacement.",
   "at": "controls.encoder_knob4[118]; switching_note.foreign_projects; hortator.md Save, load and keep your work; storage project written_when[0]"
  },
  {
   "round": 1,
   "error": "3 update-mode restart loses working edits",
   "fixed": "Replaced RAM-retention promise with the distinction between saved slots and working data reset on firmware boot, including button and updater screen warnings.",
   "at": "modes[15]; saving_note; controls.button_oct_up[3]; controls.screen[113]; switching_note.kept_on_unit; storage firmware_notes"
  },
  {
   "round": 1,
   "error": "4 SAVE can reopen TOOLS",
   "fixed": "PROJECT navigation now requires checking its title and using PRESETS, with an explicit TOOLS/INIT ALL caution.",
   "at": "modes[114].how_to_get_there; hortator.md Save, load and keep your work"
  },
  {
   "round": 1,
   "error": "5 startup erase has no ownership check",
   "fixed": "Owner wording now says nonblank prefixes cause the full temporary update area to be erased regardless of ownership, potentially before any save.",
   "at": "switching_note.writes_and_timing; hortator.md Before you switch firmware"
  },
  {
   "round": 1,
   "error": "6 missing menu and Bluetooth OCT controls",
   "fixed": "Appended row-specific OCT+ menu actions, Bluetooth toggle/mode/scan/device-pick actions and OCT- back navigation, with exact write timing.",
   "at": "controls.button_oct_up[7:21]; controls.button_oct_down[8]; hortator.md navigation table"
  },
  {
   "round": 1,
   "error": "7 Bluetooth calibration and failure states",
   "fixed": "Added the manufacturer-calibration dependency, missing-calibration and safe-start messages, and power-cycle retry requirement.",
   "at": "modes[10]; controls.screen[115]; switching_note.radio_calibration; storage firmware_notes"
  },
  {
   "round": 1,
   "error": "8 FX release resets HOLD macros",
   "fixed": "Removed held-key exception from macro reset behavior.",
   "at": "controls.button_fx[2].action; hortator.md navigation table"
  },
  {
   "round": 1,
   "error": "9 REC hold blocked during song",
   "fixed": "Added running/armed-song guard to track clear and song row/all-row deletion.",
   "at": "controls.button_rec[6]; controls.button_rec[7]; hortator.md navigation table"
  },
  {
   "round": 1,
   "error": "10 safe-start silence and exit",
   "fixed": "Named no-audio behavior and power-off exit in both the boot gesture and mode description.",
   "at": "controls.switch_power[1]; modes[14]; hortator.md"
  },
  {
   "round": 1,
   "error": "11 model-label citations",
   "fixed": "Replaced HOME parameter-access citations with K909, TOM and ACID parameter declarations.",
   "at": "disagreements[2].source_ref; disagreements[2].additional_source"
  },
  {
   "round": 1,
   "error": "12 performance document title",
   "fixed": "Identified PERFORMANCE.md as engineering CPU benchmark/optimization material.",
   "at": "docs[1].title"
  },
  {
   "round": 1,
   "error": "13 release asset filename citations",
   "fixed": "Added publish.sh naming evidence while retaining build-configuration evidence.",
   "at": "install.packages[0].source; install.packages[1].source"
  },
  {
   "round": 1,
   "error": "14 USB part id",
   "fixed": "Renamed jack_usb to the shared jack_usb_c id without moving or changing its entries.",
   "at": "controls.jack_usb_c; part_id_notes"
  },
  {
   "round": 1,
   "error": "15 SEQ and GLO remembered pages",
   "fixed": "Changed page-entry instructions to require selecting the desired screen with PRESETS.",
   "at": "modes[107].how_to_get_there; modes[111].how_to_get_there; hortator.md modes table"
  },
  {
   "round": 1,
   "error": "16 inactive menu-key citations",
   "fixed": "Cited menu seq_mode assignment, track-key table and normal drum-key matching instead of the inactive UI-owned-key branch.",
   "at": "controls.key_fs3[14].source; controls.key_gs3[13].source; controls.key_as3[14].source; controls.key_cs4[14].source; controls.key_ds4[13].source; controls.key_fs4[14].source; controls.key_g4[13].source; controls.key_gs4[13].source; controls.key_a4[13].source; controls.key_as4[14].source; controls.key_b4[13].source; controls.key_c5[13].source; controls.key_cs5[14].source; controls.key_d5[13].source; controls.key_ds5[13].source; controls.key_e5[13].source; controls.key_f5[13].source; controls.key_fs5[13].source; controls.key_g5[13].source"
  },
  {
   "round": 1,
   "error": "coverage updater loader restriction",
   "fixed": "Added supported-loader restriction and update error -7 precaution.",
   "at": "switching_note.updater_limits; hortator.md Before you switch firmware; storage firmware_notes"
  },
  {
   "round": 2,
   "error": "1 conditional foreign-data replacement",
   "fixed": "Changed both menu-close entries and matching guide rows to say the write can replace foreign data, rather than asserting that it always does.",
   "at": "controls.button_home[1].action; controls.button_oct_down[3].action; hortator.md navigation table"
  },
  {
   "round": 2,
   "error": "2 Bluetooth prose subject and screen-table row",
   "fixed": "Rewrote Bluetooth startup requirements as owner prose with Hortator as the subject and added the unchanged screen[115] action to the screen table.",
   "at": "hortator.md Bluetooth startup requirements; hortator.md screen table (controls.screen[115])"
  },
  {
   "round": 2,
   "error": "optional loader failure cleanup",
   "fixed": "Clarified that loader rejection precedes staging writes but the failure cleanup still erases E0000-E4FFF, and added the cleanup source lines.",
   "at": "refresh/work/hortator.storage.json firmware_notes[2]"
  },
  {
   "round": 3,
   "error": "1 unreachable safe-start Bluetooth message",
   "fixed": "Removed the unreachable NOT IN SAFE START display claim from the screen entry, its guide row, Bluetooth startup prose and radio-calibration precaution; retained that safe start blocks Bluetooth by preventing menu access.",
   "at": "controls.screen[115]; switching_note.radio_calibration; hortator.md screen table and Bluetooth startup requirements"
  },
  {
   "round": "overlay-1",
   "error": "Hortator overlay error 1 model-specific Home knob labels",
   "fixed": "Added one generic Home turn entry first on each main knob, labelled SOUND 1 through SOUND 4; moved all 96 unchanged per-model actions, labels and citations into 24 explicit Home model modes, and regrouped the guide tables.",
   "at": "controls.encoder_knob1[0]; controls.encoder_knob2[0]; controls.encoder_knob3[0]; controls.encoder_knob4[0]; modes home_k808 through home_smpl; hortator.md modes and Home tables"
  },
  {
   "round": "overlay-2",
   "error": "1 Home knob specificity and page-name clash",
   "fixed": "Renamed the general Home knobs TUNE, DECAY, CONTROL 3 and CONTROL 4; clarified pitch/filter tuning and ACID filter-envelope decay, citing all 24 model declarations and Home rendering.",
   "at": "controls.encoder_knob1[0]; controls.encoder_knob2[0]; controls.encoder_knob3[0]; controls.encoder_knob4[0]; hortator.md Home table"
  },
  {
   "round": "overlay-2",
   "error": "2 conditional Home mode articles",
   "fixed": "Changed a to an for S808, S909, FM and ACID mode names, including their guide mode rows and headings.",
   "at": "modes home_s808, home_s909, home_fm, home_acid; hortator.md mode table and conditional Home headings"
  }
 ]
}