{
 "firmware": "X0X",
 "slug": "x0x",
 "author": "Charles Vestal",
 "repo": "https://github.com/charlesvestal/fm1-x0x",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "v1.1.0",
 "mapped_commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
 "release_date": "2026-10-15",
 "date_mapped": "2026-10-16",
 "turns_it_into": "A ReBirth-style groovebox: 909 and 808 drum machines, a pair of 303 bass lines fed by a line generator, and a sliced breakbeat, all at once, with patterns, a song and recorded knob moves.",
 "docs": [
  {
   "title": "MANUAL.md (the manual)",
   "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md",
   "words": 8640,
   "read_at": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
  },
  {
   "title": "manual.html (X0X Manual; some sections lag behind MANUAL.md)",
   "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/manual.html",
   "words": 8479,
   "read_at": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
  },
  {
   "title": "NEW.md (what's new)",
   "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/NEW.md",
   "words": 2732,
   "read_at": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
  },
  {
   "title": "README.md",
   "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/README.md",
   "words": 669,
   "read_at": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
  },
  {
   "title": "Web installer page strings",
   "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/web/x0x_installer.html",
   "words": 1405,
   "read_at": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
  },
  {
   "title": "X0X Backup (browser page and restore flow)",
   "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/web/backup/index.html",
   "words": 2796,
   "read_at": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
  }
 ],
 "install": {
  "hub": "https://thefirmwarehub.com/",
  "official": "https://github.com/charlesvestal/fm1-x0x/releases/tag/v1.1.0",
  "official_note": "The author asks people to use his GitHub releases rather than mirrors (fm1-x0x issue #6). His own web installer: https://charlesvestal.github.io/fm1-x0x/install/",
  "official_note_source": "https://github.com/charlesvestal/fm1-x0x/issues/6#issuecomment-6079388751"
 },
 "part_id_notes": "All shared ids apply unchanged; X0X's own names match (B_SCL is SEL, EN_PRESET is PRESETS, EN_ALGO is ALGORITHM; plat.h L19-23). PLAY's LEDs: X0X lights the green one (led_play_stop_green) normally and switches to PLAY's own LED (led_play_stop, which X0X's code calls red) while recording (plat_fm1.c L58-61, L72-73). In the normal UI, every button except PLAY and REC acts when it is let go, and not at all if it was used as a modifier or held long enough for its help card (ui.c L2442-2459). Several modes overlap on purpose: screen modes (edit_*, seq_*, mix_*) say what the knobs do, part modes (drums, bass_steps, bass_keyboard, break) say what the keys do. Reconciled to the drawing's part ids (output/tutorials/_panels/m-vave-fm1, branch fm1/panel 4027d71) on 2026-10-13 by the lead session: the drawing has no separate button lamps, so what a button's light shows moved from led_<button> to lights.button_<button> (led_play_stop_green to lights.button_play_stop with light='green'); led_key_<note> became lights.led_<note>; led_keys_all became lights.key_lights, with groups.key_lights listing the 27 key-light parts; jack_usb_c became jack_usb. Originals: _before-reconcile/. USB restore uses a separate screen: SEL and HOME act on a fresh press, with up to 3 s for release afterwards (main_fm1.c L315-339); its direct screens and safe mode do not run the ordinary UI/reader loop.",
 "modes": [
  {
   "id": "home",
   "name": "HOME (the pattern screen)",
   "how_to_get_there": "Press HOME. From SONG, HOME comes back here.",
   "what_it_is": "All 32 patterns as boxes (16 at a time) with a lane per part; white keys pick patterns, black keys 1-5 mute parts, the knobs are TEMPO, SWING, FILTER and PUMP.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2331-2336",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2331-L2336"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "784-788",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "3219-3270",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3219-L3270"
    }
   ]
  },
  {
   "id": "song",
   "name": "SONG",
   "how_to_get_there": "Press HOME while on HOME.",
   "what_it_is": "The song as a list of bars; white keys set the selected bar's pattern, black keys 1-5 mute parts in it. PLAY pressed here plays the song.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2331-2336",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2331-L2336"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "878-883",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L878-L883"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2472-2474",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2472-L2474"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "3273-3310",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3273-L3310"
    }
   ]
  },
  {
   "id": "edit_drums",
   "name": "EDIT with the 909 or 808",
   "how_to_get_there": "Turn ALGORITHM to 909 or 808 and press EDIT. X0X starts here, on the 909.",
   "what_it_is": "The selected drum track's sound, four knobs a page, then a KIT page with ACCENT.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2343-2348",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2343-L2348"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "809-817",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L809-L817"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "755-770",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L755-L770"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4571-4573",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4571-L4573"
    }
   ]
  },
  {
   "id": "edit_303",
   "name": "EDIT with 303A or 303B",
   "how_to_get_there": "Turn ALGORITHM to 303A or 303B and press EDIT.",
   "what_it_is": "The 303's sound on two pages, TONE and VOICE.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2343-2348",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2343-L2348"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "818-827",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L818-L827"
    }
   ]
  },
  {
   "id": "edit_break",
   "name": "EDIT with BREAK",
   "how_to_get_there": "Turn ALGORITHM to BREAK and press EDIT; press EDIT again to switch between LOOPS and SOUND.",
   "what_it_is": "LOOPS chooses the two loops and their pitch; SOUND holds FILTER and LEVEL.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "828-833",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L828-L833"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2343-2348",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2343-L2348"
    }
   ]
  },
  {
   "id": "seq_drums",
   "name": "SEQ with the 909 or 808",
   "how_to_get_there": "Press SEQ with a drum machine selected.",
   "what_it_is": "The drum machine's step settings for this pattern: LENGTH and RATE.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2379-2384",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2379-L2384"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "789-792",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L789-L792"
    }
   ]
  },
  {
   "id": "seq_303",
   "name": "SEQ with 303A or 303B",
   "how_to_get_there": "Press SEQ with a 303 selected; press SEQ again for the KEYS page.",
   "what_it_is": "Two pages: SEQUENCE (LENGTH, RATE, DIRECTION, TRANSPOSE) and KEYS (FREE PLAY).",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2379-2384",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2379-L2384"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "793-798",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L793-L798"
    }
   ]
  },
  {
   "id": "seq_break",
   "name": "SEQ with BREAK",
   "how_to_get_there": "Press SEQ with BREAK selected; again for the second page.",
   "what_it_is": "The slice generator on two pages, GROOVE and RETRIG.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2379-2384",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2379-L2384"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "799-807",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L799-L807"
    }
   ]
  },
  {
   "id": "tb3po",
   "name": "TB-3PO (ARP)",
   "how_to_get_there": "Select 303A or 303B and press ARP; ARP again for the second page.",
   "what_it_is": "The 303 line generator: GENERATE and SCALE pages; OCT+ writes a new line, OCT- mutates it.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2349-2358",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2349-L2358"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "835-841",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L835-L841"
    }
   ]
  },
  {
   "id": "fx",
   "name": "FX",
   "how_to_get_there": "Press FX; again for the next page.",
   "what_it_is": "The shared reverb and delay on two pages, with each part's sends drawn; the keys do nothing here.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2359-2364",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2359-L2364"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "842-851",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L842-L851"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2179-2180",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2179-L2180"
    }
   ]
  },
  {
   "id": "mix_parts",
   "name": "Mixer: PARTS",
   "how_to_get_there": "Press LFO (the mixer opens on this page).",
   "what_it_is": "One strip per part with meters; black keys 1-5 pick the part the knobs set.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2365-2370",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2365-L2370"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "852-854",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L852-L854"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2157-2163",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2157-L2163"
    }
   ]
  },
  {
   "id": "mix_drums",
   "name": "Mixer: 909 MIX and 808 MIX",
   "how_to_get_there": "Press LFO, then LFO again (or turn SELECT) to 909 MIX or 808 MIX; or turn ALGORITHM to a drum machine while on the mixer.",
   "what_it_is": "Every drum track's level at a glance; black keys pick the track the knobs set.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "855-859",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L855-L859"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2164-2173",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2512-2519",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2512-L2519"
    }
   ]
  },
  {
   "id": "mix_master",
   "name": "Mixer: MASTER",
   "how_to_get_there": "Press LFO until the last page, MASTER.",
   "what_it_is": "Four knobs over the whole mix and a picture of the output level; the keys do nothing here.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "860-873",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L860-L873"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2179-2180",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2179-L2180"
    }
   ]
  },
  {
   "id": "glo",
   "name": "GLOBAL (GLO)",
   "how_to_get_there": "Press GLO; GLO or HOME closes it.",
   "what_it_is": "Settings in MIDI, AUDIO, KEYS AND SCREEN, PROJECT and SYSTEM sections; SYSTEM includes 2ND CORE, which takes effect at the next power-on. The knobs keep HOME's four jobs and the keys keep the selected part's steps.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "983-1012",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L983-L1012"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "426-432",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L426-L432"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "784-788",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
    }
   ]
  },
  {
   "id": "perf",
   "name": "PERFORMANCE",
   "how_to_get_there": "GLO, move to PERFORMANCE, press SEL.",
   "what_it_is": "Shows load, cores and supply voltages; crash details remain until power-off. SEL opens STALLS and RUN PERF TEST. The keys do nothing here.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "3439-3472",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3439-L3472"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "3548-3569",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3548-L3569"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "965-966",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L965-L966"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2094-2098",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2094-L2098"
    }
   ]
  },
  {
   "id": "list",
   "name": "A list (SEL)",
   "how_to_get_there": "Press SEL on any screen.",
   "what_it_is": "Every value on the screen's pages as rows, then MORE for the ones on no page; SELECT moves, ALGORITHM changes, SEL runs an action row, HOME closes it.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2337-2342",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2337-L2342"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "947-981",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L947-L981"
    }
   ]
  },
  {
   "id": "ask",
   "name": "A question",
   "how_to_get_there": "Shown before five editing actions: pasting onto a pattern with notes, SAVE + REC (clear the part), CLEAR PATTERN, FACTORY RESET and CLEAR SONG; USB restore has its own confirmation screen.",
   "what_it_is": "SEL answers yes, HOME no; other buttons, the keys and the knobs wait. Many overwrites never ask: OCT+ on TB-3PO replaces the whole 303 line and OCT- mutates it, DELETE BAR runs at once, lowering the song's LENGTH drops bars, SAVE + a knob forgets its motion (or a held step's lock), recording writes over steps and song bars, TB-3PO's MUTATE (1-16) rewrites the playing 303 line by itself every few passes, and pasting onto a pattern with no notes still replaces its lengths, swing, knob motion, locks and chances. Undo takes most of these back, but not a change bigger than its 20 KB store, nothing from before the last power-off, and never settings or tempo; and a FACTORY RESET is autosaved over your saved project. USB restore starts a fresh undo history, so undo cannot recover the project it replaced.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1016-1023",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1016-L1023"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2286-2298",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2286-L2298"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2099-2110",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2319-2324",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2319-L2324"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2254-2267",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2254-L2267"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2396-2411",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2396-L2411"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/seq/tb3po.c",
     "lines": "78-87",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/tb3po.c#L78-L87"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1596-1612",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1596-L1612"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "462-469",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L462-L469"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2556-2560",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2560"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1774-1790",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1774-L1790"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/undo.c",
     "lines": "107-110",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L107-L110"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1230-1240",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1230-L1240"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1621-1629",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1621-L1629"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/seq/sequencer.c",
     "lines": "285-291",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L285-L291"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1043-1051",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1043-L1051"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1068-1095",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1068-L1095"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "315-339",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4669-4684",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4669-L4684"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4584-4585",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4584-L4585"
    }
   ]
  },
  {
   "id": "help",
   "name": "Help card",
   "how_to_get_there": "Hold any one button on its own for about 0.9 s (SAVE: 0.4 s) without turning anything.",
   "what_it_is": "A card explains that button on the current screen; letting go then does nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1117-1122",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1117-L1122"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1210-1228",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "3695-3709",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3695-L3709"
    }
   ]
  },
  {
   "id": "drums",
   "name": "Keys on a drum machine",
   "how_to_get_there": "909 or 808 selected, on EDIT or SEQ (also while the GLO list is open).",
   "what_it_is": "Black keys are the eleven tracks, white keys the selected track's 16 visible steps.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2187-2191",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2187-L2191"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "20-21",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
    }
   ]
  },
  {
   "id": "bass_steps",
   "name": "Keys on a 303, steps",
   "how_to_get_there": "303A or 303B selected on EDIT, SEQ or TB-3PO, with REC off and FREE PLAY off.",
   "what_it_is": "White keys are the line's 16 visible steps; black keys do nothing.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2192-2196",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2192-L2196"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "128",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L128"
    }
   ]
  },
  {
   "id": "bass_keyboard",
   "name": "Keys on a 303, keyboard",
   "how_to_get_there": "303A or 303B selected on EDIT, SEQ or TB-3PO with REC on, or with SEQ > KEYS > FREE PLAY on.",
   "what_it_is": "All 27 keys play the 303; with REC on they also write notes. The top line says KEYS (or FREE PLAY).",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "128",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L128"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2192-2194",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2192-L2194"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1988-2007",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2951-2957",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2951-L2957"
    }
   ]
  },
  {
   "id": "break",
   "name": "Keys on the BREAK",
   "how_to_get_there": "BREAK selected on EDIT or SEQ.",
   "what_it_is": "White keys are the bar's 16 steps; black keys 1-8 play slices, 9-11 are effects held live.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2197-2234",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2197-L2234"
    }
   ]
  },
  {
   "id": "break_step_held",
   "name": "BREAK with a step held",
   "how_to_get_there": "On the BREAK, hold a white key.",
   "what_it_is": "Black keys 1-8 fix a slice onto the held step.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2199-2211",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
    }
   ]
  },
  {
   "id": "step_held_edit",
   "name": "EDIT with a step held",
   "how_to_get_there": "On EDIT, hold a white key (a step). On a 303, REC must be off.",
   "what_it_is": "The knobs set this step's own values (p-locks) and SELECT its chance.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1741-1748",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2485-2487",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2533-2539",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2539"
    }
   ]
  },
  {
   "id": "step_held_seq",
   "name": "SEQ with a step held",
   "how_to_get_there": "On SEQ, hold a white key (a step). On a 303, REC must be off.",
   "what_it_is": "SELECT sets the step's chance; on a 303 the knobs and OCT edit the step itself.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1820-1827",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2540-2555",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2394-2395",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
    }
   ]
  },
  {
   "id": "rec_playing",
   "name": "Recording while playing",
   "how_to_get_there": "Press REC (red dot on the top line) with the pattern playing.",
   "what_it_is": "Black drum keys and sound-knob turns are written into the pattern as it plays.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1915-1921",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1685-1701",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1685-L1701"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "Hardware calibration",
   "how_to_get_there": "Hold OCT- and OCT+ while switching the FM-1 on.",
   "what_it_is": "Teaches X0X which button and knob is which; 30 s with nothing pressed cancels and keeps the old map.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "463-465",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L463-L465"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/panel.c",
     "lines": "46-109",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/panel.c#L46-L109"
    }
   ]
  },
  {
   "id": "safe_mode",
   "name": "Safe mode",
   "how_to_get_there": "Starts by itself after X0X fails to start twice in a row.",
   "what_it_is": "A silent recovery screen with USB for reinstalling; PLAY retries X0X, and holding OCT- with OCT+ for 5 s enters the same update mode used by that hold on normal screens, without a countdown.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "223-278",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L223-L278"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "492-507",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L492-L507"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "208-217",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L208-L217"
    }
   ]
  },
  {
   "id": "edit_break_sound",
   "name": "BREAK: SOUND",
   "how_to_get_there": "Select BREAK, press EDIT, then press EDIT again or turn SELECT to SOUND.",
   "what_it_is": "KNOB 1 filters the break, KNOB 2 sets its level; KNOB 3 and KNOB 4 are unused. The keys still work on the break steps and slices.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "828-833",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L828-L833"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2343-2348",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2343-L2348"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2495-2500",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2495-L2500"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2197-2234",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2197-L2234"
    }
   ]
  },
  {
   "id": "restore_usb_confirm",
   "name": "USB restore confirmation",
   "how_to_get_there": "Stop playback, send a backup from the USB backup page or command-line tool, then wait while X0X checks it.",
   "what_it_is": "RESTORE FROM USB? asks before replacing the project. A fresh SEL press confirms; HOME, 60 s without an answer or playback cancels. Other panel controls wait. The older inactive flash copies were already staged over before this question; cancellation preserves the active saved project.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "426-498",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L426-L498"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "315-339",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "306-339",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L306-L339"
    }
   ]
  },
  {
   "id": "restore_usb_progress",
   "name": "USB restore progress",
   "how_to_get_there": "Send a backup for restore over USB; the percentage appears during validation, then again after confirmation.",
   "what_it_is": "RESTORE FROM USB and a percentage: each step from 15% to 90% follows erasing and writing an inactive object copy and checking it; 95% marks the commit after confirmation, and 100% follows loading the project.",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "299-313",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L299-L313"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "448-505",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L448-L505"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "306-325",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L306-L325"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "469-472",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L469-L472"
    }
   ]
  }
 ],
 "controls": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens FX, the reverb and delay pages (acts when you let go).",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2359-2364",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2359-L2364"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2447-2460",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2447-L2460"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "press",
    "action": "Goes to the next FX page (REVERB, DELAY) and wraps round.",
    "short_label": "FX NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2360-2361",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2360-L2361"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "842-845",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L842-L845"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1133",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1133"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Shows everything on this screen as a list, with settings that have no page under MORE.",
    "short_label": "LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2337-2342",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2337-L2342"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "947-981",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L947-L981"
     }
    ]
   },
   {
    "mode": "list",
    "gesture": "press",
    "action": "Runs the highlighted row if it is an action; on a value row it does nothing.",
    "short_label": "RUN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2338-2339",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2338-L2339"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2254-2267",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2254-L2267"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "press",
    "action": "Runs the highlighted action: SAVE PROJECT, CLEAR PATTERN, FACTORY RESET, PERFORMANCE or ABOUT X0X (the last shows version, memory use and load).",
    "short_label": "RUN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2338-2339",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2338-L2339"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "998-1007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L998-L1007"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2254-2267",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2254-L2267"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1638-1643",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1638-L1643"
     }
    ]
   },
   {
    "mode": "ask",
    "gesture": "press",
    "action": "Answers yes and does what the question asked.",
    "short_label": "YES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2287-2289",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2287-L2289"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Opens the song's list: the bar knobs plus LENGTH and the INSERT BAR, DELETE BAR and CLEAR SONG actions.",
    "short_label": "SONG LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "967-972",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L967-L972"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1596-1620",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1596-L1620"
     }
    ]
   },
   {
    "mode": "perf",
    "gesture": "press",
    "action": "Opens a list with STALLS and RUN PERF TEST (about 15 s of test patterns, then your project comes back as it was).",
    "short_label": "PERF TEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "965-966",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L965-L966"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1633-1637",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1633-L1637"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1432-1470",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1432-L1470"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1134",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1134"
     }
    ]
   },
   {
    "mode": "restore_usb_confirm",
    "gesture": "press",
    "action": "Confirms replacing the project with the checked USB backup on a fresh press; the loop then waits up to 3 s for held buttons to be released.",
    "short_label": "RESTORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "315-339",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "489-505",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L489-L505"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Does nothing on its own; it is held as a modifier.",
    "short_label": "ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2438-2440",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2438-L2440"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2572"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Held: white keys toggle accents instead of hits, the step lights show the accents, and a black key plays its track louder.",
    "short_label": "ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1912-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1912-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4100",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4100"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "hold",
    "action": "Held while recording drums: black-key hits are written with an accent on that step.",
    "short_label": "ACCENT HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1920",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1920"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "hold",
    "action": "Held: the key you play sounds accented (and is written accented with REC on); with OCT- or OCT+ it writes a rest at the next step.",
    "short_label": "ACCENT/REST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1973-1976",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1973-L1976"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1992",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1992"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2000",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2000"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2416-2418",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2416-L2418"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Has no effect on 303 step keys; a step's accent is set with KNOB 3 while holding the step on SEQ.",
    "short_label": "NO EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2549-2550",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2549-L2550"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Has no effect on the break's keys.",
    "short_label": "NO EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2197-2234",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2197-L2234"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1135-1140",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1135-L1140"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "With a turn of KNOB 1-4, uses the default from that parameter's table, which can differ from the factory sound and the saved value; held-step editing and SAVE take precedence.",
    "short_label": "RESET KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2568",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2568"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "257-269",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L257-L269"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "144-155",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L144-L155"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "254-287",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L254-L287"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "32-39",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L32-L39"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/bass303.c",
      "lines": "21-32",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/bass303.c#L21-L32"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "92-93",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L92-L93"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "65-66",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L65-L66"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the mixer on its PARTS page (acts when you let go).",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2365-2370",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2365-L2370"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2447-2460",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2447-L2460"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press",
    "action": "Goes to the next mixer page: PARTS, 909 MIX, 808 MIX, MASTER, then round again.",
    "short_label": "MIX NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2366-2367",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2366-L2367"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "852-861",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L852-L861"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Goes to the next mixer page: PARTS, 909 MIX, 808 MIX, MASTER, then round again.",
    "short_label": "MIX NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2366-2367",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2366-L2367"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "852-861",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L852-L861"
     }
    ]
   },
   {
    "mode": "mix_master",
    "gesture": "press",
    "action": "Goes to the next mixer page: PARTS, 909 MIX, 808 MIX, MASTER, then round again.",
    "short_label": "MIX NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2366-2367",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2366-L2367"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "852-861",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L852-L861"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "hold",
    "action": "Held with REC on and the pattern stopped: the key you press is written with a slide; with OCT- or OCT+ it writes a tie. Live recording ignores it.",
    "short_label": "SLIDE/TIE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1977-1980",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1977-L1980"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1994-2001",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1994-L2001"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2413-2415",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2413-L2415"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1141-1145",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1141-L1145"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens EDIT, the selected part's sound (acts when you let go).",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2343-2348",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2343-L2348"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2447-2460",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2447-L2460"
     }
    ]
   },
   {
    "mode": "edit_drums",
    "gesture": "press",
    "action": "Goes to the next sound page and wraps round.",
    "short_label": "EDIT NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2344-2345",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2344-L2345"
     }
    ]
   },
   {
    "mode": "edit_303",
    "gesture": "press",
    "action": "Goes to the next sound page and wraps round.",
    "short_label": "EDIT NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2344-2345",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2344-L2345"
     }
    ]
   },
   {
    "mode": "edit_break",
    "gesture": "press",
    "action": "With BREAK selected, switches between LOOPS and SOUND.",
    "short_label": "NEXT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "828-833",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L828-L833"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2343-2348",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2343-L2348"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1146-1147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1146-L1147"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens GLOBAL, the settings list (acts when you let go).",
    "short_label": "SETTINGS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2371-2378",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2371-L2378"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2447-2460",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2447-L2460"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "press",
    "action": "Closes GLOBAL and returns to the screen you came from.",
    "short_label": "CLOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2372-2373",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2372-L2373"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2269-2275",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2269-L2275"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1148"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Goes to HOME, the pattern screen (acts when you let go).",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2331-2336",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2331-L2336"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2447-2460",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2447-L2460"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "press",
    "action": "Goes to SONG.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2335",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2335"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Goes back to HOME.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2335",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2335"
     }
    ]
   },
   {
    "mode": "list",
    "gesture": "press",
    "action": "Closes the list.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2332-2333",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2332-L2333"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2269-2277",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2269-L2277"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "press",
    "action": "Closes GLOBAL.",
    "short_label": "CLOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2332-2333",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2332-L2333"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2269-2275",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2269-L2275"
     }
    ]
   },
   {
    "mode": "ask",
    "gesture": "press",
    "action": "Answers no; nothing changes.",
    "short_label": "NO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2290-2292",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2290-L2292"
     }
    ]
   },
   {
    "mode": "perf",
    "gesture": "press",
    "action": "While RUN PERF TEST runs: stops it and puts the project back.",
    "short_label": "STOP TEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2281-2284",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2281-L2284"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1472-1478",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1472-L1478"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1544-1555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1544-L1555"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "A modifier: with SELECT (tempo), REC (undo), PLAY (redo), a white key (pattern) or a black key (mute). Used this way, letting go does nothing.",
    "short_label": "HOLD: SHIFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2301-2303",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2301-L2303"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2314-2317",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2314-L2317"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2488-2491",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2488-L2491"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2130",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2130"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2183",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2183"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2447-2460",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2447-L2460"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1149-1153",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1149-L1153"
     }
    ]
   },
   {
    "mode": "restore_usb_confirm",
    "gesture": "press",
    "action": "Cancels the USB restore and keeps the active saved project; 60 s without an answer also cancels, but the inactive flash copies have already been written.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "315-339",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "489-493",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L489-L493"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "306-339",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L306-L339"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Saves the project on release; during playback it waits for stop, and during a USB backup it waits for the backup to finish. A project too large to fit shows MEMORY FULL without writing it.",
    "short_label": "SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1319-1342",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1319-L1342"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2451-2459",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2451-L2459"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4593-4600",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4593-L4600"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone: after 0.25 s the top line names the pattern on the clipboard (the one the 909 plays); after 0.4 s a help card appears and letting go no longer saves.",
    "short_label": "COPY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1191-1208",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1191-L1208"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1220-1227",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1220-L1227"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "A modifier: + white key pastes, + REC clears the part, + OCT picks the paste bank, + a knob forgets that knob's recorded motion.",
    "short_label": "HOLD: COPY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2319-2324",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2319-L2324"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2560",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2560"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1154-1161",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1154-L1161"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "With 303A or 303B selected, opens TB-3PO; on other parts it only shows a reminder.",
    "short_label": "TB-3PO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2349-2358",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2349-L2358"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2447-2460",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2447-L2460"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "press",
    "action": "Goes to the next TB-3PO page (GENERATE, SCALE).",
    "short_label": "ARP NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2354-2355",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2354-L2355"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "837-840",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L837-L840"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1162-1166",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1162-L1166"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens SEQ, the selected part's step settings (acts when you let go).",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2379-2384",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2379-L2384"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2447-2460",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2447-L2460"
     }
    ]
   },
   {
    "mode": "seq_303",
    "gesture": "press",
    "action": "Switches between SEQUENCE and KEYS.",
    "short_label": "SEQ NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2380-2381",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2380-L2381"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "795-797",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L795-L797"
     }
    ]
   },
   {
    "mode": "seq_break",
    "gesture": "press",
    "action": "Switches between GROOVE and RETRIG.",
    "short_label": "SEQ NEXT PG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2380-2381",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2380-L2381"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "800-803",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L800-L803"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1167-1169",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1167-L1169"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Starts or stops, the moment it is pressed; from any screen but SONG it plays the patterns.",
    "short_label": "PLAY/STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2300-2312",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2300-L2312"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2455-2456",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2455-L2456"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2472-2473",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2472-L2473"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Plays the song from the selected bar; it keeps playing on other screens until you stop it.",
    "short_label": "PLAY SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2309-2310",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2309-L2310"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2472-2474",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2472-L2474"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "237-251",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L237-L251"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Redoes what the last undo took back; a USB restore starts a fresh undo history.",
    "short_label": "REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2301-2304",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2301-L2304"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1297-1317",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1297-L1317"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4669-4684",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4669-L4684"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4584-4585",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4584-L4585"
     }
    ]
   },
   {
    "mode": "perf",
    "gesture": "press",
    "action": "While RUN PERF TEST runs: stops it.",
    "short_label": "STOP TEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2281-2284",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2281-L2284"
     }
    ]
   },
   {
    "mode": "safe_mode",
    "gesture": "press",
    "action": "Restarts and tries X0X normally again.",
    "short_label": "TRY AGAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "257-264",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L257-L264"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1170",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1170"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Record on or off, the moment it is pressed. On a 303 it turns the keys into a keyboard and starts step writing at step 1.",
    "short_label": "REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2313-2330",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2313-L2330"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2455-2456",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2455-L2456"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "128",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L128"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "With REC on, PLAY on SONG records the song: pattern picks and part mutes are written bar by bar from the selected bar.",
    "short_label": "REC SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2474",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2474"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "265-275",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L265-L275"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2081-2084",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2081-L2084"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Undoes the last change, up to 32 steps back; a single change bigger than undo's 20 KB store is not kept and empties the history, and settings, tempo and anything before power-off or a completed USB restore are out of reach.",
    "short_label": "UNDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2314-2317",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2314-L2317"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1230-1240",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1230-L1240"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/undo.c",
      "lines": "11-13",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L11-L13"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/undo.c",
      "lines": "19-22",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L19-L22"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/undo.c",
      "lines": "107-110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L107-L110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4669-4684",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4669-L4684"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4584-4585",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4584-L4585"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Asks, then clears the selected part in the pattern it plays, with that part's recorded motion and p-locks.",
    "short_label": "CLEAR PART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2319-2324",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2319-L2324"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1566-1571",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1566-L1571"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1171-1174",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1171-L1174"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Shows the previous 16 steps on the white keys (1-16, 17-32, 33-48, 49-64).",
    "short_label": "STEPS -16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2429-2435",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2429-L2435"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "press",
    "action": "White keys now choose patterns 1-16.",
    "short_label": "P1-16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "White keys now choose patterns 1-16.",
    "short_label": "P1-16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "press",
    "action": "Mutates the line: each step has a 1 in 4 chance of a new note or a re-rolled gate.",
    "short_label": "MUTATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2406-2411",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2406-L2411"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/tb3po.c",
      "lines": "113-138",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/tb3po.c#L113-L138"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Keyboard octave down (from -2 to +3; 0 at power-on).",
    "short_label": "OCTAVE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2419-2424",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2419-L2424"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press_while_holding:button_env",
    "action": "Writes a rest at the next step of the line.",
    "short_label": "REST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2416-2418",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2416-L2418"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1967-1986",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1967-L1986"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press_while_holding:button_lfo",
    "action": "Writes a tie at the next step of the line.",
    "short_label": "TIE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2413-2415",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2413-L2415"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1967-1986",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1967-L1986"
     }
    ]
   },
   {
    "mode": "step_held_seq",
    "gesture": "press",
    "action": "On a 303: moves the held step's note an octave down.",
    "short_label": "STEP OCT -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2062-2076",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2062-L2076"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "press",
    "action": "On a 303: moves the held step's note an octave down.",
    "short_label": "STEP OCT -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2062-2076",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2062-L2076"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Moves the shared pattern bank to 1-16, so a SAVE + white key paste goes there (HOME shows the same bank afterwards).",
    "short_label": "PASTE 1-16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "Both held for 5 s: update mode for the installer (a countdown shows from 2 s; let go to cancel).",
    "short_label": "UPDATE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "491-509",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L491-L509"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1175-1184",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1175-L1184"
     }
    ]
   },
   {
    "mode": "safe_mode",
    "gesture": "press_with:button_oct_up",
    "action": "Hold both OCT buttons for 5 s to enter the same update mode as the normal-screen hold; releasing either early cancels, and safe mode has no countdown.",
    "short_label": "UPDATE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "249-269",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L249-L269"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "492-507",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L492-L507"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "208-217",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L208-L217"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Shows the next 16 steps on the white keys (1-16, 17-32, 33-48, 49-64).",
    "short_label": "STEPS +16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2429-2435",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2429-L2435"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "press",
    "action": "White keys now choose patterns 17-32.",
    "short_label": "P17-32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "White keys now choose patterns 17-32.",
    "short_label": "P17-32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "press",
    "action": "Writes a completely new 303 line from the GENERATE and SCALE settings.",
    "short_label": "NEW LINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2396-2405",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2396-L2405"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2411",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2411"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Keyboard octave up (from -2 to +3; 0 at power-on).",
    "short_label": "OCTAVE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2419-2424",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2419-L2424"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press_while_holding:button_env",
    "action": "Writes a rest at the next step of the line.",
    "short_label": "REST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2416-2418",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2416-L2418"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1967-1986",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1967-L1986"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press_while_holding:button_lfo",
    "action": "Writes a tie at the next step of the line.",
    "short_label": "TIE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2413-2415",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2413-L2415"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1967-1986",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1967-L1986"
     }
    ]
   },
   {
    "mode": "step_held_seq",
    "gesture": "press",
    "action": "On a 303: moves the held step's note an octave up.",
    "short_label": "STEP OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2062-2076",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2062-L2076"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "press",
    "action": "On a 303: moves the held step's note an octave up.",
    "short_label": "STEP OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2062-2076",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2062-L2076"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Moves the shared pattern bank to 17-32, so a SAVE + white key paste goes there (HOME shows the same bank afterwards).",
    "short_label": "PASTE 17-32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_down",
    "action": "Both held for 5 s: update mode for the installer (a countdown shows from 2 s; let go to cancel).",
    "short_label": "UPDATE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "491-509",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L491-L509"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held alone about 0.9 s (SAVE 0.4 s): a card explains the button on this screen; letting go then does nothing.",
    "short_label": "HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1121-1122",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1121-L1122"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1210-1228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1210-L1228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1175-1184",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1175-L1184"
     }
    ]
   },
   {
    "mode": "safe_mode",
    "gesture": "press_with:button_oct_down",
    "action": "Hold both OCT buttons for 5 s to enter the same update mode as the normal-screen hold; releasing either early cancels, and safe mode has no countdown.",
    "short_label": "UPDATE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "249-269",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L249-L269"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "492-507",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L492-L507"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "208-217",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L208-L217"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Previous or next page of this screen; it stops at the first and last page.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2497-2500",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2497-L2500"
     }
    ]
   },
   {
    "mode": "list",
    "gesture": "turn",
    "action": "Moves the highlight up or down, skipping section headings.",
    "short_label": "MOVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2495-2496",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2495-L2496"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2237-2252",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2237-L2252"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "turn",
    "action": "Moves the highlight up or down, skipping section headings.",
    "short_label": "MOVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2495-2496",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2495-L2496"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2237-2252",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2237-L2252"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_home",
    "action": "Sets the tempo, 20-275 BPM; quick turns move faster.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2488-2494",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2488-L2494"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1653-1670",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1653-L1670"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn",
    "action": "Sets the held step's chance: left lowers it 5% at a time down to 5%, then fixed cycles 1:2 to 8:8 (the A-th of every B passes); right goes back toward 100%.",
    "short_label": "CHANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2486-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2486-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1828-1866",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1828-L1866"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "331-345",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L331-L345"
     }
    ]
   },
   {
    "mode": "step_held_seq",
    "gesture": "turn",
    "action": "Sets the held step's chance: left lowers it 5% at a time down to 5%, then fixed cycles 1:2 to 8:8 (the A-th of every B passes); right goes back toward 100%.",
    "short_label": "CHANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2486-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2486-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1828-1866",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1828-L1866"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "331-345",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L331-L345"
     }
    ]
   },
   {
    "mode": "ask",
    "gesture": "turn",
    "action": "Ignored while a question is showing (all seven encoders are).",
    "short_label": "WAIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2475-2479",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2475-L2479"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Picks the part: 909, 808, 303A, 303B, BREAK (no wrap). SEQ, EDIT and ARP then show that part.",
    "short_label": "PART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2502-2511",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2502-L2511"
     }
    ]
   },
   {
    "mode": "list",
    "gesture": "turn",
    "action": "Changes the highlighted value; switches move one position per click.",
    "short_label": "CHANGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2503-2504",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2503-L2504"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "turn",
    "action": "Changes the highlighted value; switches move one position per click.",
    "short_label": "CHANGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2503-2504",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2503-L2504"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "turn",
    "action": "Moving to a part that is not a 303 leaves TB-3PO for EDIT.",
    "short_label": "PART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2508-2509",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2508-L2509"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "turn",
    "action": "Moves the mixer to the chosen part: a drum machine opens its own track page (909 MIX or 808 MIX), while a 303 or BREAK opens PARTS with that part selected.",
    "short_label": "MIX PART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2512-2519",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2512-L2519"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "turn",
    "action": "Moves the mixer to the chosen part: a drum machine opens its own track page (909 MIX or 808 MIX), while a 303 or BREAK opens PARTS with that part selected.",
    "short_label": "MIX PART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2512-2519",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2512-L2519"
     }
    ]
   },
   {
    "mode": "mix_master",
    "gesture": "turn",
    "action": "Moves the mixer to the chosen part: a drum machine opens its own track page (909 MIX or 808 MIX), while a 303 or BREAK opens PARTS with that part selected.",
    "short_label": "MIX PART",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2512-2519",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2512-L2519"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "turn",
    "action": "On 2ND CORE, chooses ON or OFF for the next power-on; ON is the default. Save, then switch off and on. A crash beside the second core, bad job reads or an 8 ms job timeout bars it; the next warm restart saves OFF if needed. After a failed start, that start uses one core even with this setting ON.",
    "short_label": "2ND CORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "227-228",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L227-L228"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "429-432",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L429-L432"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1003-1007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1003-L1007"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "442-450",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L442-L450"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/hal/fm1_cpu1.h",
      "lines": "174-194",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/hal/fm1_cpu1.h#L174-L194"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/hal/fm1_cpu1.h",
      "lines": "51-56",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/hal/fm1_cpu1.h#L51-L56"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "157",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L157"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "561-569",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L561-L569"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Next or previous pattern: on EDIT, SEQ or TB-3PO for that part only; on every other screen for all five parts. It starts at the end of the bar (at once when stopped) and ends a chain.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2522-2532",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2522-L2532"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "471-478",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L471-L478"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "turn",
    "action": "Next or previous pattern for all five parts; HOME follows to that pattern's bank. While the song plays, the song sets the patterns each bar and the pick does not stick.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2522-2532",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2522-L2532"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "237-251",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L237-L251"
     }
    ]
   },
   {
    "mode": "ask",
    "gesture": "turn",
    "action": "Ignored while a question is showing.",
    "short_label": "WAIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2475-2479",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2475-L2479"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "TEMPO (20-275 BPM).",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "784-788",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "647",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L647"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "664",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L664"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "111-135",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L111-L135"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "turn",
    "action": "TEMPO, as on HOME.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "784-788",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "BAR: which bar is selected (on both pages).",
    "short_label": "BAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "878-883",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L878-L883"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "233-237",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L233-L237"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "230",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L230"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "421-454",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L421-L454"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_drums",
    "gesture": "turn",
    "action": "The selected track's sound settings, four a page; on the KIT page, ACCENT (how much louder accented steps are).",
    "short_label": "TRACK/ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "755-770",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L755-L770"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "810-817",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L810-L817"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_303",
    "gesture": "turn",
    "action": "TONE page: CUTOFF; VOICE page: ACCENT.",
    "short_label": "CUTOFF|ACCNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "818-827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L818-L827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_break",
    "gesture": "turn",
    "action": "LOOPS: LOOP A, the main loop.",
    "short_label": "LOOP A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "828-833",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L828-L833"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2535",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2535"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2572"
     }
    ]
   },
   {
    "mode": "seq_drums",
    "gesture": "turn",
    "action": "LENGTH of this drum machine's pattern, 1-64 steps.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "789-792",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L789-L792"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "192",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L192"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "207-213",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L207-L213"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "seq_303",
    "gesture": "turn",
    "action": "SEQUENCE: LENGTH, 1-64 steps; KEYS page: FREE PLAY on or off.",
    "short_label": "LEN | FREE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "793-798",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L793-L798"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "192-193",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L192-L193"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "207-213",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L207-L213"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "639-646",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L639-L646"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "seq_break",
    "gesture": "turn",
    "action": "GROOVE: COMPLEXITY; RETRIG: 2X.",
    "short_label": "CMPLX | 2X",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "799-807",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L799-L807"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "turn",
    "action": "GENERATE: DENS (how many steps play); SCALE: ROOT.",
    "short_label": "DENS | ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "835-841",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L835-L841"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "197-202",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L197-L202"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "388-402",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L388-L402"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "REVERB: DECAY; DELAY: TIME.",
    "short_label": "DECAY | TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "842-851",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L842-L851"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "448-456",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L448-L456"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "571-578",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L571-L578"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "turn",
    "action": "LEVEL of the part picked with black keys 1-5.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "853-854",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L853-L854"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "turn",
    "action": "LEVEL of the drum track picked with a black key.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "855-859",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L855-L859"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_master",
    "gesture": "turn",
    "action": "DRIVE, saturation over the whole mix.",
    "short_label": "DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "860-873",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L860-L873"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "375-379",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L375-L379"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "111-135",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L111-L135"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "perf",
    "gesture": "turn",
    "action": "STALLS: extra, experimental counters on or off.",
    "short_label": "STALLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "875-877",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L875-L877"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "457-461",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L457-L461"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn",
    "action": "Gives the held step its own value of this knob (a p-lock); only the part's own sound knobs lock, others say NO P-LOCK.",
    "short_label": "P-LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1758-1805",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1758-L1805"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn_while_holding:button_save",
    "action": "With the step and SAVE both held: removes this knob's lock from the step.",
    "short_label": "CLEAR LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1774-1790",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1774-L1790"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "turn",
    "action": "Records this sound knob's moves on the steps it moved on, into the part's pattern (effects and master go into the 909's).",
    "short_label": "REC MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1685-1701",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1685-L1701"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/motion.h",
      "lines": "9-20",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.h#L9-L20"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Without REC, turning a knob that has recorded motion lets the knob win for one pass of the pattern; when the transport stops every knob returns to its own setting.",
    "short_label": "OVERRIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1698-1699",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1698-L1699"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/motion.h",
      "lines": "9-20",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.h#L9-L20"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "action": "Forgets this knob's recorded motion in the pattern now playing.",
    "short_label": "FORGET MOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2560",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2560"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1704-1719",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1704-L1719"
     }
    ]
   },
   {
    "mode": "step_held_seq",
    "gesture": "turn",
    "action": "On a 303: the held step's note, a semitone per click (a rest or tie becomes a note).",
    "short_label": "STEP NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2546",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2546"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2062-2076",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2062-L2076"
     }
    ]
   },
   {
    "mode": "edit_break_sound",
    "gesture": "turn",
    "action": "FILTER: the centre is off; turn left for low-pass or right for high-pass.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "831-832",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L831-L832"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "599-608",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L599-L608"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "590-616",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L590-L616"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_env",
    "action": "Uses this parameter's table default: 303 CUTOFF goes to 64 (factory 48), and 909 mixer LEVEL to 100 (factory 75); held-step editing and SAVE take precedence, questions and the performance test ignore turns, and a changed sound value can record motion with REC and playback on.",
    "short_label": "DEFAULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1684-1700",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1684-L1700"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2475-2483",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2475-L2483"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2568",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2568"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "257-269",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L257-L269"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "144-155",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L144-L155"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "254-287",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L254-L287"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "32-39",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L32-L39"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/bass303.c",
      "lines": "21-32",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/bass303.c#L21-L32"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "92-93",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L92-L93"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "65-66",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L65-L66"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "SWING (50-75%, held in the 909's pattern, applies to all parts).",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "784-788",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "647",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L647"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "664",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L664"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "111-135",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L111-L135"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "turn",
    "action": "SWING, as on HOME.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "784-788",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Page 1: the 909's pattern in the bar; page 2: 303B's.",
    "short_label": "909 | 303B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "878-883",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L878-L883"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "233-237",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L233-L237"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "230",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L230"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "421-454",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L421-L454"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_drums",
    "gesture": "turn",
    "action": "The track's next sound setting on this page.",
    "short_label": "TRACK SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "755-770",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L755-L770"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "810-817",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L810-L817"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_303",
    "gesture": "turn",
    "action": "TONE: RESO; VOICE: WAVE (saw or square).",
    "short_label": "RESO | WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "818-827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L818-L827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_break",
    "gesture": "turn",
    "action": "LOOPS: LOOP B, the alternate loop.",
    "short_label": "LOOP B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "828-833",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L828-L833"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2535",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2535"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2572"
     }
    ]
   },
   {
    "mode": "seq_drums",
    "gesture": "turn",
    "action": "RATE: 1/16, 1/16T, 1/32 or 1/8T.",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "789-792",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L789-L792"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "192",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L192"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "207-213",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L207-L213"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "seq_303",
    "gesture": "turn",
    "action": "SEQUENCE: RATE (1/16, 1/16T, 1/32, 1/8T).",
    "short_label": "RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "793-798",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L793-L798"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "192-193",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L192-L193"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "207-213",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L207-L213"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "639-646",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L639-L646"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "seq_break",
    "gesture": "turn",
    "action": "GROOVE: ANCHOR; RETRIG: 3X.",
    "short_label": "ANCHOR | 3X",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "799-807",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L799-L807"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "turn",
    "action": "GENERATE: ACCENT; SCALE: SCALE.",
    "short_label": "ACCNT|SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "835-841",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L835-L841"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "197-202",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L197-L202"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "388-402",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L388-L402"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "REVERB: TONE; DELAY: FEEDBACK.",
    "short_label": "TONE | FDBK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "842-851",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L842-L851"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "448-456",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L448-L456"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "571-578",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L571-L578"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "turn",
    "action": "PAN of that part.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "853-854",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L853-L854"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "turn",
    "action": "PAN of that track.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "855-859",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L855-L859"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_master",
    "gesture": "turn",
    "action": "COMP, one-knob compressor (0 is off).",
    "short_label": "COMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "860-873",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L860-L873"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "375-379",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L375-L379"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "111-135",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L111-L135"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn",
    "action": "Gives the held step its own value of this knob (a p-lock); only the part's own sound knobs lock, others say NO P-LOCK.",
    "short_label": "P-LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1758-1805",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1758-L1805"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn_while_holding:button_save",
    "action": "With the step and SAVE both held: removes this knob's lock from the step.",
    "short_label": "CLEAR LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1774-1790",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1774-L1790"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "turn",
    "action": "Records this sound knob's moves on the steps it moved on, into the part's pattern (effects and master go into the 909's).",
    "short_label": "REC MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1685-1701",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1685-L1701"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/motion.h",
      "lines": "9-20",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.h#L9-L20"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Without REC, turning a knob that has recorded motion lets the knob win for one pass of the pattern; when the transport stops every knob returns to its own setting.",
    "short_label": "OVERRIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1698-1699",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1698-L1699"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/motion.h",
      "lines": "9-20",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.h#L9-L20"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "action": "Forgets this knob's recorded motion in the pattern now playing.",
    "short_label": "FORGET MOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2560",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2560"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1704-1719",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1704-L1719"
     }
    ]
   },
   {
    "mode": "step_held_seq",
    "gesture": "turn",
    "action": "On a 303: the held step's gate, REST, NOTE or TIE.",
    "short_label": "STEP GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2547-2548",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2547-L2548"
     }
    ]
   },
   {
    "mode": "edit_break_sound",
    "gesture": "turn",
    "action": "LEVEL of the break.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "831-832",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L831-L832"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "62-67",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L62-L67"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_env",
    "action": "Uses this parameter's table default: MASTER COMP goes to 0, off (factory 95), and BREAK LEVEL to 100 (factory 127); held-step editing and SAVE take precedence, questions and the performance test ignore turns, and a changed sound value can record motion with REC and playback on.",
    "short_label": "DEFAULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1684-1700",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1684-L1700"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2475-2483",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2475-L2483"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2568",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2568"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "257-269",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L257-L269"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "144-155",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L144-L155"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "254-287",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L254-L287"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "32-39",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L32-L39"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/bass303.c",
      "lines": "21-32",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/bass303.c#L21-L32"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "92-93",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L92-L93"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "65-66",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L65-L66"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "FILTER (centre off, left low-pass, right high-pass).",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "784-788",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "647",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L647"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "664",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L664"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "111-135",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L111-L135"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "turn",
    "action": "FILTER, as on HOME.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "784-788",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Page 1: the 808's pattern; page 2: the BREAK's.",
    "short_label": "808 | BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "878-883",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L878-L883"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "233-237",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L233-L237"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "230",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L230"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "421-454",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L421-L454"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_drums",
    "gesture": "turn",
    "action": "The track's next sound setting on this page.",
    "short_label": "TRACK SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "755-770",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L755-L770"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "810-817",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L810-L817"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_303",
    "gesture": "turn",
    "action": "TONE: ENVMOD; VOICE: DRIVE.",
    "short_label": "ENVMOD|DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "818-827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L818-L827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_break",
    "gesture": "turn",
    "action": "LOOPS: B CHANCE, how often loop B comes in; KNOB 3 is unused on SOUND.",
    "short_label": "B CHANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "828-833",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L828-L833"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2535",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2535"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2572"
     }
    ]
   },
   {
    "mode": "seq_303",
    "gesture": "turn",
    "action": "SEQUENCE: DIRECTION (FWD, REV, PING, RND).",
    "short_label": "DIRECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "793-798",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L793-L798"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "192-193",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L192-L193"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "207-213",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L207-L213"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "639-646",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L639-L646"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "seq_break",
    "gesture": "turn",
    "action": "GROOVE: ROLL; RETRIG: 4X.",
    "short_label": "ROLL | 4X",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "799-807",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L799-L807"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "turn",
    "action": "GENERATE: SLIDE; SCALE: OCTAVE.",
    "short_label": "SLIDE | OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "835-841",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L835-L841"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "197-202",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L197-L202"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "388-402",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L388-L402"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "DELAY: TONE.",
    "short_label": "DLY TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "842-851",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L842-L851"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "448-456",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L448-L456"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "571-578",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L571-L578"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "turn",
    "action": "REV send of that part.",
    "short_label": "REV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "853-854",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L853-L854"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "turn",
    "action": "REV send of that track.",
    "short_label": "REV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "855-859",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L855-L859"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_master",
    "gesture": "turn",
    "action": "PUMP, ducks the mix on each kick.",
    "short_label": "PUMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "860-873",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L860-L873"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "375-379",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L375-L379"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "111-135",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L111-L135"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn",
    "action": "Gives the held step its own value of this knob (a p-lock); only the part's own sound knobs lock, others say NO P-LOCK.",
    "short_label": "P-LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1758-1805",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1758-L1805"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn_while_holding:button_save",
    "action": "With the step and SAVE both held: removes this knob's lock from the step.",
    "short_label": "CLEAR LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1774-1790",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1774-L1790"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "turn",
    "action": "Records this sound knob's moves on the steps it moved on, into the part's pattern (effects and master go into the 909's).",
    "short_label": "REC MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1685-1701",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1685-L1701"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/motion.h",
      "lines": "9-20",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.h#L9-L20"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Without REC, turning a knob that has recorded motion lets the knob win for one pass of the pattern; when the transport stops every knob returns to its own setting.",
    "short_label": "OVERRIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1698-1699",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1698-L1699"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/motion.h",
      "lines": "9-20",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.h#L9-L20"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "action": "Forgets this knob's recorded motion in the pattern now playing.",
    "short_label": "FORGET MOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2560",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2560"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1704-1719",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1704-L1719"
     }
    ]
   },
   {
    "mode": "step_held_seq",
    "gesture": "turn",
    "action": "On a 303: switches the held step's accent on or off.",
    "short_label": "STEP ACCENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2549-2550",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2549-L2550"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_env",
    "action": "Uses this parameter's table default: 303 DRIVE goes to 0, off (factory 45); held-step editing and SAVE take precedence, questions and the performance test ignore turns, and a changed sound value can record motion with REC and playback on.",
    "short_label": "DEFAULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1684-1700",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1684-L1700"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2475-2483",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2475-L2483"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2568",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2568"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "257-269",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L257-L269"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "144-155",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L144-L155"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "254-287",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L254-L287"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "32-39",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L32-L39"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/bass303.c",
      "lines": "21-32",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/bass303.c#L21-L32"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "92-93",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L92-L93"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "65-66",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L65-L66"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "home",
    "gesture": "turn",
    "action": "PUMP (ducks the mix on each kick).",
    "short_label": "PUMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "784-788",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "647",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L647"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "664",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L664"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "111-135",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L111-L135"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "turn",
    "action": "PUMP, as on HOME.",
    "short_label": "PUMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "784-788",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L784-L788"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "turn",
    "action": "Page 1: 303A's pattern; page 2: REPEAT, the bar played x1 to x8.",
    "short_label": "303A|REPEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "878-883",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L878-L883"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "233-237",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L233-L237"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "230",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L230"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "421-454",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L421-L454"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_drums",
    "gesture": "turn",
    "action": "The track's next sound setting on this page.",
    "short_label": "TRACK SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "755-770",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L755-L770"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "810-817",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L810-L817"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_303",
    "gesture": "turn",
    "action": "TONE: DECAY; VOICE: SLIDE time.",
    "short_label": "DECAY|SLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "818-827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L818-L827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "edit_break",
    "gesture": "turn",
    "action": "LOOPS: PITCH, -12 to +12 semitones on top of the tempo; KNOB 4 is unused on SOUND.",
    "short_label": "PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "828-833",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L828-L833"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2535",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2535"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2572"
     }
    ]
   },
   {
    "mode": "seq_303",
    "gesture": "turn",
    "action": "SEQUENCE: TRANSPOSE, -24 to +24 semitones.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "793-798",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L793-L798"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "192-193",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L192-L193"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "207-213",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L207-L213"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "639-646",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L639-L646"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "seq_break",
    "gesture": "turn",
    "action": "GROOVE: FILL; RETRIG: 8X.",
    "short_label": "FILL | 8X",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "799-807",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L799-L807"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "turn",
    "action": "GENERATE: OCTS (1-3 octave range); SCALE: MUTATE. DENS to OCTS, ROOT, SCALE and OCTAVE only set up the next OCT+ or OCT-. MUTATE is different: set to 1-16, it rewrites the playing 303 line by itself every that many passes while the pattern plays, with no question (OFF stops it).",
    "short_label": "OCTS | MUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "835-841",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L835-L841"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "197-202",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L197-L202"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "388-402",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L388-L402"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "285-291",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L285-L291"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "316-317",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L316-L317"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/tb3po.c",
      "lines": "113-138",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/tb3po.c#L113-L138"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "turn",
    "action": "DELAY: TAPE (DIGI at the far left, then a tape echo that wears more as you turn).",
    "short_label": "TAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "842-851",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L842-L851"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "448-456",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L448-L456"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "571-578",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L571-L578"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "turn",
    "action": "DLY send of that part.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "853-854",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L853-L854"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "turn",
    "action": "DLY send of that track.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "855-859",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L855-L859"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "mix_master",
    "gesture": "turn",
    "action": "FILTER, centre off, left low-pass, right high-pass.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "860-873",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L860-L873"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "375-379",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L375-L379"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "111-135",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L111-L135"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1886-1897",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1886-L1897"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn",
    "action": "Gives the held step its own value of this knob (a p-lock); only the part's own sound knobs lock, others say NO P-LOCK.",
    "short_label": "P-LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1758-1805",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1758-L1805"
     }
    ]
   },
   {
    "mode": "step_held_edit",
    "gesture": "turn_while_holding:button_save",
    "action": "With the step and SAVE both held: removes this knob's lock from the step.",
    "short_label": "CLEAR LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1774-1790",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1774-L1790"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "turn",
    "action": "Records this sound knob's moves on the steps it moved on, into the part's pattern (effects and master go into the 909's).",
    "short_label": "REC MOTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1685-1701",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1685-L1701"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/motion.h",
      "lines": "9-20",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.h#L9-L20"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Without REC, turning a knob that has recorded motion lets the knob win for one pass of the pattern; when the transport stops every knob returns to its own setting.",
    "short_label": "OVERRIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1698-1699",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1698-L1699"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/motion.h",
      "lines": "9-20",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.h#L9-L20"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_save",
    "action": "Forgets this knob's recorded motion in the pattern now playing.",
    "short_label": "FORGET MOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2556-2560",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2560"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1704-1719",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1704-L1719"
     }
    ]
   },
   {
    "mode": "step_held_seq",
    "gesture": "turn",
    "action": "On a 303: switches the held step's slide on or off.",
    "short_label": "STEP SLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2551-2552",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2551-L2552"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn_while_holding:button_env",
    "action": "Uses this parameter's table default: HOME PUMP goes to 0, off (factory 21); held-step editing and SAVE take precedence, questions and the performance test ignore turns, and a changed sound value can record motion with REC and playback on.",
    "short_label": "DEFAULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2533-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2572"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1684-1700",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1684-L1700"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2475-2483",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2475-L2483"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2561-2568",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2568"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "257-269",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L257-L269"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "144-155",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L144-L155"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "254-287",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L254-L287"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/master.c",
      "lines": "32-39",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L32-L39"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/bass303.c",
      "lines": "21-32",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/bass303.c#L21-L32"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "92-93",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L92-L93"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "65-66",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L65-L66"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Volume of the speaker, headphones and line out, and of the USB audio unless GLO > USB AUDIO is FULL.",
    "short_label": "VOLUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "483-489",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L483-L489"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "211-235",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L211-L235"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "723",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L723"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 1 for all five parts (17 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P1/P17",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 1 (17 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 1 for all five parts from any screen, or 17 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P1 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 1, or 17 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 1 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 1 for this drum machine.",
    "short_label": "ACCENT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 1 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 1 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 41 (F2 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE F2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Mutes or unmutes the 909 (mutes are not saved).",
    "short_label": "MUTE 909",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2174-2178",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2174-L2178"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2078-2086",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2078-L2086"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Mutes or unmutes the 909 in the selected bar.",
    "short_label": "MUTE 909",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press",
    "action": "Picks the 909 for the four knobs.",
    "short_label": "MIX 909",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2157-2163",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2157-L2163"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes the 909.",
    "short_label": "MUTE 909",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 1 (BD) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "BD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 1 (BD) and writes a hit on the step playing now.",
    "short_label": "REC BD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 1 (not saved).",
    "short_label": "MUTE BD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 1 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD BD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 1 (BD) for the knobs; heard when stopped.",
    "short_label": "MIX BD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 1.",
    "short_label": "MUTE BD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays slice 1 at once and keeps it going while held; let go and the generator takes over.",
    "short_label": "SLICE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "447-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L447-L477"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "630",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L630"
     }
    ]
   },
   {
    "mode": "break_step_held",
    "gesture": "press",
    "action": "Fixes slice 1 of loop A on the held step; press again to give the step back to the generator.",
    "short_label": "PIN SLICE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 42 (F#2 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE F#2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 2 for all five parts (18 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P2/P18",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 2 (18 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 2 for all five parts from any screen, or 18 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P2 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 2, or 18 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 2 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 2 for this drum machine.",
    "short_label": "ACCENT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 2 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 2 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 43 (G2 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE G2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Mutes or unmutes the 808 (mutes are not saved).",
    "short_label": "MUTE 808",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2174-2178",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2174-L2178"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2078-2086",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2078-L2086"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Mutes or unmutes the 808 in the selected bar.",
    "short_label": "MUTE 808",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press",
    "action": "Picks the 808 for the four knobs.",
    "short_label": "MIX 808",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2157-2163",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2157-L2163"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes the 808.",
    "short_label": "MUTE 808",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 2 (SD) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "SD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 2 (SD) and writes a hit on the step playing now.",
    "short_label": "REC SD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 2 (not saved).",
    "short_label": "MUTE SD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 2 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD SD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 2 (SD) for the knobs; heard when stopped.",
    "short_label": "MIX SD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 2.",
    "short_label": "MUTE SD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays slice 2 at once and keeps it going while held; let go and the generator takes over.",
    "short_label": "SLICE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "447-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L447-L477"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "630",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L630"
     }
    ]
   },
   {
    "mode": "break_step_held",
    "gesture": "press",
    "action": "Fixes slice 2 of loop A on the held step; press again to give the step back to the generator.",
    "short_label": "PIN SLICE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 44 (G#2 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE G#2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 3 for all five parts (19 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P3/P19",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 3 (19 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 3 for all five parts from any screen, or 19 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P3 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 3, or 19 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 3 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 3 for this drum machine.",
    "short_label": "ACCENT 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 3 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 3 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 45 (A2 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE A2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Mutes or unmutes the 303A (mutes are not saved).",
    "short_label": "MUTE 303A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2174-2178",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2174-L2178"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2078-2086",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2078-L2086"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Mutes or unmutes the 303A in the selected bar.",
    "short_label": "MUTE 303A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press",
    "action": "Picks the 303A for the four knobs.",
    "short_label": "MIX 303A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2157-2163",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2157-L2163"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes the 303A.",
    "short_label": "MUTE 303A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 3 (LT) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "LT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 3 (LT) and writes a hit on the step playing now.",
    "short_label": "REC LT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 3 (not saved).",
    "short_label": "MUTE LT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 3 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD LT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 3 (LT) for the knobs; heard when stopped.",
    "short_label": "MIX LT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 3.",
    "short_label": "MUTE LT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays slice 3 at once and keeps it going while held; let go and the generator takes over.",
    "short_label": "SLICE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "447-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L447-L477"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "630",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L630"
     }
    ]
   },
   {
    "mode": "break_step_held",
    "gesture": "press",
    "action": "Fixes slice 3 of loop A on the held step; press again to give the step back to the generator.",
    "short_label": "PIN SLICE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 46 (A#2 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE A#2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 4 for all five parts (20 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P4/P20",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 4 (20 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 4 for all five parts from any screen, or 20 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P4 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 4, or 20 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 4 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 4 for this drum machine.",
    "short_label": "ACCENT 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 4 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 4 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 47 (B2 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE B2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 5 for all five parts (21 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P5/P21",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 5 (21 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 5 for all five parts from any screen, or 21 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P5 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 5, or 21 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 5 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 5 for this drum machine.",
    "short_label": "ACCENT 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 5 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 5 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 48 (C3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE C3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Mutes or unmutes the 303B (mutes are not saved).",
    "short_label": "MUTE 303B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2174-2178",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2174-L2178"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2078-2086",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2078-L2086"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Mutes or unmutes the 303B in the selected bar.",
    "short_label": "MUTE 303B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press",
    "action": "Picks the 303B for the four knobs.",
    "short_label": "MIX 303B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2157-2163",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2157-L2163"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes the 303B.",
    "short_label": "MUTE 303B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 4 (MT) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "MT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 4 (MT) and writes a hit on the step playing now.",
    "short_label": "REC MT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 4 (not saved).",
    "short_label": "MUTE MT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 4 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD MT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 4 (MT) for the knobs; heard when stopped.",
    "short_label": "MIX MT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 4.",
    "short_label": "MUTE MT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays slice 4 at once and keeps it going while held; let go and the generator takes over.",
    "short_label": "SLICE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "447-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L447-L477"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "630",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L630"
     }
    ]
   },
   {
    "mode": "break_step_held",
    "gesture": "press",
    "action": "Fixes slice 4 of loop A on the held step; press again to give the step back to the generator.",
    "short_label": "PIN SLICE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 49 (C#3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE C#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 6 for all five parts (22 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P6/P22",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 6 (22 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 6 for all five parts from any screen, or 22 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P6 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 6, or 22 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 6 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 6 for this drum machine.",
    "short_label": "ACCENT 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 6 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 6 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 50 (D3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE D3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Mutes or unmutes the BREAK (mutes are not saved).",
    "short_label": "MUTE BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2174-2178",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2174-L2178"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2078-2086",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2078-L2086"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Mutes or unmutes the BREAK in the selected bar.",
    "short_label": "MUTE BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press",
    "action": "Picks the BREAK for the four knobs.",
    "short_label": "MIX BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2157-2163",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2157-L2163"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes the BREAK.",
    "short_label": "MUTE BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 5 (HT) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "HT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 5 (HT) and writes a hit on the step playing now.",
    "short_label": "REC HT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 5 (not saved).",
    "short_label": "MUTE HT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 5 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD HT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 5 (HT) for the knobs; heard when stopped.",
    "short_label": "MIX HT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 5.",
    "short_label": "MUTE HT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays slice 5 at once and keeps it going while held; let go and the generator takes over.",
    "short_label": "SLICE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "447-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L447-L477"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "630",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L630"
     }
    ]
   },
   {
    "mode": "break_step_held",
    "gesture": "press",
    "action": "Fixes slice 5 of loop A on the held step; press again to give the step back to the generator.",
    "short_label": "PIN SLICE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 51 (D#3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE D#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 7 for all five parts (23 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P7/P23",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 7 (23 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 7 for all five parts from any screen, or 23 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P7 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 7, or 23 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 7 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 7 for this drum machine.",
    "short_label": "ACCENT 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 7 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 7 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 52 (E3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE E3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 8 for all five parts (24 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P8/P24",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 8 (24 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 8 for all five parts from any screen, or 24 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P8 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 8, or 24 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 8 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 8 for this drum machine.",
    "short_label": "ACCENT 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 8 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 8 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 53 (F3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 6 (RS) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 6 (RS) and writes a hit on the step playing now.",
    "short_label": "REC RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 6 (not saved).",
    "short_label": "MUTE RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 6 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 6 (RS) for the knobs; heard when stopped.",
    "short_label": "MIX RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 6.",
    "short_label": "MUTE RS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays slice 6 at once and keeps it going while held; let go and the generator takes over.",
    "short_label": "SLICE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "447-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L447-L477"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "630",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L630"
     }
    ]
   },
   {
    "mode": "break_step_held",
    "gesture": "press",
    "action": "Fixes slice 6 of loop A on the held step; press again to give the step back to the generator.",
    "short_label": "PIN SLICE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 54 (F#3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 9 for all five parts (25 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P9/P25",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 9 (25 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 9 for all five parts from any screen, or 25 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P9 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 9, or 25 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 9 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 9 for this drum machine.",
    "short_label": "ACCENT 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 9 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 9 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 55 (G3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 7 (CP) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "CP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 7 (CP) and writes a hit on the step playing now.",
    "short_label": "REC CP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 7 (not saved).",
    "short_label": "MUTE CP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 7 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD CP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 7 (CP) for the knobs; heard when stopped.",
    "short_label": "MIX CP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 7.",
    "short_label": "MUTE CP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays slice 7 at once and keeps it going while held; let go and the generator takes over.",
    "short_label": "SLICE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "447-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L447-L477"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "630",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L630"
     }
    ]
   },
   {
    "mode": "break_step_held",
    "gesture": "press",
    "action": "Fixes slice 7 of loop A on the held step; press again to give the step back to the generator.",
    "short_label": "PIN SLICE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 56 (G#3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 10 for all five parts (26 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P10/P26",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 10 (26 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 10 for all five parts from any screen, or 26 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P10 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 10, or 26 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 10 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 10 for this drum machine.",
    "short_label": "ACCENT 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 10 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 10 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 57 (A3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 8 (CH on the 909, CB on the 808) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "CH/CB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 8 (CH on the 909, CB on the 808) and writes a hit on the step playing now.",
    "short_label": "REC CH/CB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 8 (not saved).",
    "short_label": "MUTE CH/CB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 8 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD CH/CB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 8 (CH on the 909, CB on the 808) for the knobs; heard when stopped.",
    "short_label": "MIX CH/CB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 8.",
    "short_label": "MUTE CH/CB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays slice 8 at once and keeps it going while held; let go and the generator takes over.",
    "short_label": "SLICE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "447-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L447-L477"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "630",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L630"
     }
    ]
   },
   {
    "mode": "break_step_held",
    "gesture": "press",
    "action": "Fixes slice 8 of loop A on the held step; press again to give the step back to the generator.",
    "short_label": "PIN SLICE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 58 (A#3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 11 for all five parts (27 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P11/P27",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 11 (27 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 11 for all five parts from any screen, or 27 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P11 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 11, or 27 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 11 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 11 for this drum machine.",
    "short_label": "ACCENT 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 11 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 11 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 59 (B3 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 12 for all five parts (28 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P12/P28",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 12 (28 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 12 for all five parts from any screen, or 28 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P12 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 12, or 28 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 12 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 12 for this drum machine.",
    "short_label": "ACCENT 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 12 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 12 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 60 (C4 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 9 (OH on the 909, CY on the 808) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "OH/CY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 9 (OH on the 909, CY on the 808) and writes a hit on the step playing now.",
    "short_label": "REC OH/CY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 9 (not saved).",
    "short_label": "MUTE OH/CY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 9 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD OH/CY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 9 (OH on the 909, CY on the 808) for the knobs; heard when stopped.",
    "short_label": "MIX OH/CY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 9.",
    "short_label": "MUTE OH/CY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays the break backwards while held.",
    "short_label": "REVERSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "22-24",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L22-L24"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "472-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L472-L477"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 61 (C#4 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 13 for all five parts (29 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P13/P29",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 13 (29 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 13 for all five parts from any screen, or 29 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P13 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 13, or 29 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 13 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 13 for this drum machine.",
    "short_label": "ACCENT 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 13 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 13 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 62 (D4 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 10 (CR on the 909, OH on the 808) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "CR/OH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 10 (CR on the 909, OH on the 808) and writes a hit on the step playing now.",
    "short_label": "REC CR/OH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 10 (not saved).",
    "short_label": "MUTE CR/OH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 10 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD CR/OH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 10 (CR on the 909, OH on the 808) for the knobs; heard when stopped.",
    "short_label": "MIX CR/OH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 10.",
    "short_label": "MUTE CR/OH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Plays the break at half speed while held.",
    "short_label": "HALF SPEED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "22-24",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L22-L24"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "472-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L472-L477"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 63 (D#4 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 14 for all five parts (30 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P14/P30",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 14 (30 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 14 for all five parts from any screen, or 30 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P14 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 14, or 30 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 14 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 14 for this drum machine.",
    "short_label": "ACCENT 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 14 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 14 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 64 (E4 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 15 for all five parts (31 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P15/P31",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 15 (31 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 15 for all five parts from any screen, or 31 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P15 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 15, or 31 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 15 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 15 for this drum machine.",
    "short_label": "ACCENT 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 15 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 15 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 65 (F4 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Selects track 11 (RD on the 909, CH on the 808) for the white keys and EDIT; heard when stopped, with REC on, or always with KEY SOUND ALWAYS.",
    "short_label": "RD/CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1901-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1901-L1914"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "158-159",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L158-L159"
     }
    ]
   },
   {
    "mode": "rec_playing",
    "gesture": "press",
    "action": "On a drum machine: plays track 11 (RD on the 909, CH on the 808) and writes a hit on the step playing now.",
    "short_label": "REC RD/CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 11 (not saved).",
    "short_label": "MUTE RD/CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2181-2186",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2181-L2186"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2088-2092",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2088-L2092"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Selects track 11 and, when it sounds (stopped, REC on, or KEY SOUND ALWAYS), plays it accented; with the default KEY SOUND, playing and not recording, it only selects.",
    "short_label": "LOUD RD/CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1906-1914",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1906-L1914"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press",
    "action": "Picks track 11 (RD on the 909, CH on the 808) for the knobs; heard when stopped.",
    "short_label": "MIX RD/CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2164-2173",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2164-L2173"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "press_while_holding:button_home",
    "action": "Mutes or unmutes track 11.",
    "short_label": "MUTE RD/CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2149-2156",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2149-L2156"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Stutters the break (a 4x repeat on each slice) while held.",
    "short_label": "STUTTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2214-2215",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2214-L2215"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "22-24",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L22-L24"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/dsp/breaks.c",
      "lines": "472-477",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L472-L477"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 66 (F#4 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "home",
    "gesture": "press",
    "action": "Picks pattern 16 for all five parts (32 when OCT+ shows 17-32): next bar while playing, at once when stopped.",
    "short_label": "P16/P32",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "252-257",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L252-L257"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "hold",
    "action": "Hold it and press a second white key: all five parts loop through the patterns from one to the other, a bar each; picking a single pattern ends the chain.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2131-2146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2131-L2146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/seq/sequencer.c",
      "lines": "258-263",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L258-L263"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "press",
    "action": "Sets the selected bar to pattern 16 (32 on 17-32) for all five parts and selects the next bar; at the end it adds bars.",
    "short_label": "BAR P16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2111-2127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2111-L2127"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "240-255",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L240-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_home",
    "action": "Picks pattern 16 for all five parts from any screen, or 32 when the pattern bank is on 17-32 (the bank HOME last showed, also moved by PRESETS).",
    "short_label": "P16 ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2128-2148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2128-L2148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_save",
    "action": "Pastes what all five parts play now onto pattern 16, or 32 when the pattern bank is on 17-32 (the pattern bank is shared: OCT- or OCT+ on HOME or SONG, PRESETS and SAVE + OCT all move it, and the SAVE help card shows where it is); asks first only if the target has notes.",
    "short_label": "PASTE P16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2096",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2096"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2099-2110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1582-1594",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1582-L1594"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2426-2428",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2426-L2428"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2531",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2531"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2389-2393",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2389-L2393"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1156-1158",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1156-L1158"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press",
    "action": "Step 16 (plus 16 per OCT+ page) of the selected track: an empty step turns on at once, a quick tap on a lit one turns it off.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "press_while_holding:button_env",
    "action": "Switches the accent on step 16 for this drum machine.",
    "short_label": "ACCENT 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1947-1952",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "hold",
    "action": "Hold the step: on EDIT, turn a knob to give it its own value or SELECT for its chance; on SEQ, SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1820-1827",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1820-L1827"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2536-2539",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2536-L2539"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "press",
    "action": "Step 16 of the 303 line (plus 16 per OCT+ page): an empty step becomes a note at once, a quick tap on a note makes it a rest; heard while stopped.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "hold",
    "action": "Hold the step: on SEQ the knobs set note, gate, accent and slide and OCT moves its octave; on EDIT the knobs lock its sound; SELECT sets its chance.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2540-2555",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2540-L2555"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2394-2395",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2394-L2395"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "press",
    "action": "Step 16 of the bar: lets the break play there; a quick tap turns it off again.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "20-21",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L20-L21"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2216-2233",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "hold",
    "action": "Hold the step and press black key 1-8 to fix that slice on it; or turn SELECT for its chance, or on EDIT a knob to lock its sound.",
    "short_label": "HOLD STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2199-2211",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2199-L2211"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1741-1748",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1741-L1748"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2485-2487",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2485-L2487"
     }
    ]
   },
   {
    "mode": "bass_keyboard",
    "gesture": "press",
    "action": "Plays the 303 at MIDI note 67 (G4 in X0X's names) at OCTAVE 0, 12 higher per octave; with REC on it is written (stopped: next step; playing: the step now).",
    "short_label": "NOTE G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1965",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1965"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1988-2007",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Top line: the part in its colour (or the screen's name), P and the pattern (>N blinking: cued, CHN: a chain, or the visible steps), S and the bar when the song is on, the tempo (amber on external clock), a play mark pulsing with the beat, a red dot when REC is on, a little grey dot when something is unsaved.",
    "short_label": "TOP LINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2933-3006",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2933-L3006"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "A message replaces the top line for about 1.3 s when a button does something (SAVED, P1 PASTED TO P5, UNDO 909 P1).",
    "short_label": "MESSAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "172-182",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L172-L182"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2939-2944",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2939-L2944"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Knob row: the four values with a tag saying whose they are, page dots, a dot on knobs with recorded motion and an amber dot on locked values.",
    "short_label": "KNOB ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3917-3950",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3917-L3950"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3952-4036",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3952-L4036"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Footer: what the keys do on this screen; until the first button press it invites you to hold any button for help.",
    "short_label": "FOOTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3760-3822",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3760-L3822"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Turning a knob shows its name and value large for about 0.9 s.",
    "short_label": "READOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3574-3622",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3574-L3622"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2571-2572",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2571-L2572"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "shows",
    "action": "16 pattern boxes with a coloured line per part that has notes there, then a lane per part showing its steps and playhead.",
    "short_label": "PATTERNS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3219-3270",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3219-L3270"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "shows",
    "action": "A table of bars: each part's pattern per bar, mutes, and x2..x8 on repeated bars.",
    "short_label": "SONG TABLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3273-3310",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3273-L3310"
     }
    ]
   },
   {
    "mode": "edit_drums",
    "gesture": "shows",
    "action": "Eleven track rows plus an accent row over the 16 visible steps; notches mark steps with locks or a chance.",
    "short_label": "DRUM GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3014-3052",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3014-L3052"
     }
    ]
   },
   {
    "mode": "edit_303",
    "gesture": "shows",
    "action": "The line as pitch bars with accent and slide marks; ties join the note they hold.",
    "short_label": "303 LINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3067-3146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3067-L3146"
     }
    ]
   },
   {
    "mode": "edit_break",
    "gesture": "shows",
    "action": "Loop A's eight slices with the one sounding lit, and the 16 steps with any fixed slice numbers.",
    "short_label": "BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3148-3204",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3148-L3204"
     }
    ]
   },
   {
    "mode": "tb3po",
    "gesture": "shows",
    "action": "The 303 line with its scale and seed; the footer marks NEW LINE with a star once the knobs differ from what made the current line.",
    "short_label": "TB-3PO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3067-3146",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3067-L3146"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3790-3793",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3790-L3793"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "shows",
    "action": "How much each part sends to the reverb and the delay.",
    "short_label": "SENDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3312-3343",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3312-L3343"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "shows",
    "action": "Channel strips with level meters and the compressor's gain reduction.",
    "short_label": "MIX STRIPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3371-3429",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3371-L3429"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "shows",
    "action": "The eleven tracks' levels and pans; a hit lights its track.",
    "short_label": "DRUM MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3346-3369",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3346-L3369"
     }
    ]
   },
   {
    "mode": "mix_master",
    "gesture": "shows",
    "action": "The output level over the last moments, to watch the pump and compressor.",
    "short_label": "MASTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3371-3429",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3371-L3429"
     }
    ]
   },
   {
    "mode": "glo",
    "gesture": "shows",
    "action": "The GLOBAL list in sections.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "983-1013",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L983-L1013"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3625-3674",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3625-L3674"
     }
    ]
   },
   {
    "mode": "perf",
    "gesture": "shows",
    "action": "Load, peak, dropouts, core status, the two supply voltages, each part's share, GUARD and test results; crash numbers stay in red until power-off.",
    "short_label": "PERF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3439-3472",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3439-L3472"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3548-3569",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3548-L3569"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "147-155",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L147-L155"
     }
    ]
   },
   {
    "mode": "list",
    "gesture": "shows",
    "action": "Six rows at a time with section headings, value bars and a return arrow on action rows.",
    "short_label": "LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3625-3674",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3625-L3674"
     }
    ]
   },
   {
    "mode": "ask",
    "gesture": "shows",
    "action": "A two-line question; the footer reminds SEL yes, HOME no.",
    "short_label": "QUESTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3676-3693",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3676-L3693"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3767-3769",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3767-L3769"
     }
    ]
   },
   {
    "mode": "help",
    "gesture": "shows",
    "action": "The button's name and up to six lines on what it does here.",
    "short_label": "HELP CARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3695-3709",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3695-L3709"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "shows",
    "action": "HARDWARE CALIBRATION, asking for each button press and each knob turned right in turn.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/panel.c",
      "lines": "47-109",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/panel.c#L47-L109"
     }
    ]
   },
   {
    "mode": "safe_mode",
    "gesture": "shows",
    "action": "X0X SAFE MODE shows how to retry with PLAY or enter update mode by holding OCT- and OCT+; a kept crash address appears below.",
    "short_label": "SAFE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "227-241",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L227-L241"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "After a crash: a red X0X CRASH screen, a restart about 4 s later, then a short notice with the crash address on the next start.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "183-205",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L183-L205"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "413-426",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L413-L426"
     }
    ]
   },
   {
    "mode": "edit_break_sound",
    "gesture": "shows",
    "action": "The break slices and steps stay visible; the SOUND strip holds FILTER and LEVEL.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3148-3203",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3148-L3203"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "831-832",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L831-L832"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "3848-3853",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3848-L3853"
     }
    ]
   },
   {
    "mode": "restore_usb_confirm",
    "gesture": "shows",
    "action": "RESTORE FROM USB? warns that the project will be replaced; SEL confirms and HOME cancels.",
    "short_label": "RESTORE?",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "319-331",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L319-L331"
     }
    ]
   },
   {
    "mode": "restore_usb_progress",
    "gesture": "shows",
    "action": "RESTORE FROM USB with its progress percentage; after a successful restore the loaded project appears.",
    "short_label": "RESTORING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "299-313",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L299-L313"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "498-505",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L498-L505"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4669-4684",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4669-L4684"
     }
    ]
   }
  ],
  "jack_midi_in": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "MIDI in, treated like USB: each part has its own channel (909 10, 808 11, 303A 2, 303B 3, BREAK 4 by default, set in GLO); clock and start/stop are followed.",
    "short_label": "MIDI IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/x0x.c",
      "lines": "44-48",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/x0x.c#L44-L48"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "447-481",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L447-L481"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "510-522",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L510-L522"
     }
    ]
   }
  ],
  "jack_audio_out": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "GLO > OUTPUT LOUD makes the headphone and line output 6 dB hotter.",
    "short_label": "OUT LOUD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/engine.c",
      "lines": "202-209",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L202-L209"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "427",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L427"
     }
    ]
   }
  ],
  "switch_power": [
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Starts hardware calibration, to teach X0X which button and knob is which.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "463-465",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L463-L465"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/panel.c",
      "lines": "46-109",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/panel.c#L46-L109"
     }
    ]
   }
  ],
  "jack_usb": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Over USB X0X is one MIDI device and a two-channel 44.1 kHz audio input, both named X0X FM-1, with no driver; the installer and the break loops page also use it.",
    "short_label": "MIDI+AUDIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/usb.c",
      "lines": "11-13",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/usb.c#L11-L13"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/usb.c",
      "lines": "211-217",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/usb.c#L211-L217"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/x0x.c",
      "lines": "32-39",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/x0x.c#L32-L39"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "The backup page or command-line tool saves the project to an .x0b file; stopped, X0X first tries to save pending edits even with REC on or AUTOSAVE off (after FACTORY RESET this saves the reset project), while playback or a failed save can leave unsaved edits out and flag the file; break-loop audio and calibration are excluded.",
    "short_label": "BACKUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "210-221",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L210-L221"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "160-195",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L160-L195"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "106-110",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L106-L110"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4652-4659",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4652-L4659"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1621-1629",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1621-L1629"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4652-4658",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4652-L4658"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "With playback stopped, receives an .x0b project and stages its inactive flash copies before the on-device question; SEL commits and loads it, HOME keeps the active project but cannot recover the staged-over older copies.",
    "short_label": "RESTORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "426-505",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L426-L505"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "315-339",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4669-4684",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4669-L4684"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/backup.c",
      "lines": "306-339",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L306-L339"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "Connect FM-1 Screen Reader for page and knob text, lists, help, ordinary questions, messages and play/stop; step updates cover white-key on/off changes on drums or 303s and ENV drum-accent toggles, but exclude live drum recording and 303 keyboard writes; no reader text is sent until a reader listens.",
    "short_label": "READER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/announce.c",
      "lines": "92-100",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/announce.c#L92-L100"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/announce.c",
      "lines": "141-160",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/announce.c#L141-L160"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4313-4348",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4313-L4348"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4389-4408",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4389-L4408"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4411-4474",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4411-L4474"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1927-1963",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "2011-2042",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1915-1921",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "1967-2002",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1967-L2002"
     }
    ]
   }
  ]
 },
 "switching_note": {
  "kept_on_unit": "Newer X0X loads the saved project and converts older X0X layouts; an older sound gets the new break FILTER set to off. Uploaded break loops stay in the three sample slots until rewritten. On startup X0X can finish a confirmed USB restore and, after a retained second-core crash, bad reads or an 8 ms job timeout, save 2ND CORE off; normal loading alone does not save edits. From the flash atlas (generated): install (update loader): Writes the program area (every install or update). install (update loader): Erases every 4 KiB sector in this range whose last 256 bytes hold a valid update record (in practice 0xE4000, and 0xE8000 coming from stock). Unlike Felucca's and JIANT's loaders it does not skip 0x97000-0xDFFFF (only sectors whose tail is a valid update record). every start-up: Tries to finish a confirmed USB project restore interrupted by power loss; after success, removes its recovery record. Also removes unusable restore records and detected leftover firmware-update data (only if startup checks find a restore record or leftover update data). every start-up: Ordinary project, calibration and sample loading only reads saved data. Saves 2ND CORE OFF in settings so the next session runs on one core (only if the restart remembers a second-core failure and two cores were enabled). update (leaving through an installer's upgrade command): Erases the five staging sectors, stages the incoming firmware's loader there and writes its update record at 0xE4F00 (only when an installer starts an update from this firmware). What X0X writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over X0X's is in when_you_leave.",
  "lost": "Switching firmware can overwrite the X0X project and loops. An .x0b backup can bring the project back after reinstalling X0X, but it excludes the loops and calibration. Mutes, FREE PLAY, keyboard octave and undo history are not saved. From the flash atlas (generated): Other firmwares reading X0X's data: Felucca reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3; SLOOP reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3; GHOULBOX reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3; 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); Skiff reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3. What X0X reads of other firmwares' data: X0X reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3; X0X 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); X0X reads and uses GHOULBOX's user sample slot USR1; user sample slot USR2; user sample slot USR3; 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); X0X reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "In v1.1.0, use the author's USB backup page in Chrome or Edge, or tools/x0x_backup.py, to download an .x0b project before switching firmware. Stop playback first: X0X then tries to save pending edits even with REC on or AUTOSAVE off; a backup during playback or after a failed save can omit unsaved edits and flags the file. Keep the original break-loop WAVs separately: project backups exclude all three sample slots and hardware calibration. Restore while stopped, then press SEL on the FM-1; HOME or 60 s without an answer cancels the active-project replacement, but staging may already have erased older or foreign inactive-sector data. Before installing X0X over another firmware, back up that firmware with its own tools. Back up before FACTORY RESET: a stopped backup afterwards saves the reset project, even with REC on, if its flush succeeds.",
  "source": [
   {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L46-L54",
    "path": "docs/MANUAL.md",
    "lines": "46-54",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "repo": "charlesvestal/fm1-x0x"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "13-15",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L13-L15"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/x0x.h",
    "lines": "27-56",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/x0x.h#L27-L56"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "43-45",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L43-L45"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/storage.c",
    "lines": "15-23",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/storage.c#L15-L23"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/storage.c",
    "lines": "50-61",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/storage.c#L50-L61"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "445-507",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L445-L507"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/slots.c",
    "lines": "15-19",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/slots.c#L15-L19"
   },
   {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/web/x0x_installer.html#L122",
    "path": "web/x0x_installer.html",
    "lines": "122",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L820-L822",
    "path": "docs/MANUAL.md",
    "lines": "820-822",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "web/x0x_breaks.html",
    "lines": "1-8",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/web/x0x_breaks.html#L1-L8"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/editor.c",
    "lines": "4-12",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/editor.c#L4-L12"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "tools/fm1_rescue.py",
    "lines": "20-26",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/tools/fm1_rescue.py#L20-L26"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "tools/fm1_rescue.py",
    "lines": "247-253",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/tools/fm1_rescue.py#L247-L253"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/backup.c",
    "lines": "106-110",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L106-L110"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/backup.c",
    "lines": "210-222",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L210-L222"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/backup.c",
    "lines": "306-339",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L306-L339"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/backup.c",
    "lines": "469-505",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L469-L505"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "4652-4659",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4652-L4659"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "315-339",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "395-400",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L395-L400"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "442-450",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L442-L450"
   },
   {
    "kind": "doc",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "docs/MANUAL.md",
    "lines": "693-710",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L693-L710"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/hal/fm1_cpu1.h",
    "lines": "174-194",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/hal/fm1_cpu1.h#L174-L194"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/hal/fm1_cpu1.h",
    "lines": "51-56",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/hal/fm1_cpu1.h#L51-L56"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/plat_fm1.c",
    "lines": "157",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L157"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "561-569",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L561-L569"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "1621-1629",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1621-L1629"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "4652-4658",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4652-L4658"
   }
  ],
  "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": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project slot 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 slot 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 slot 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 slot 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": "user presets 17-32",
      "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, button calibration, favourites, MIDI LEARN map",
      "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"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project slot A; project slot B; project slot C; project slot D; user presets 17-32; settings, button calibration, favourites, MIDI LEARN map. At risk when you act: user presets 1-16. Carried over: user sample slot USR1; user sample slot USR2; user sample slot USR3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song section A (a whole project)",
      "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": "song section B (a whole project)",
      "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": "song section C (a whole project)",
      "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": "song section D (a whole project)",
      "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": "user sounds U17-U32",
      "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, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "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"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1 (header at 0xA0000)",
     "user sample slot USR2 (header at 0xB4000)",
     "user sample slot USR3 (header at 0xC8000)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project); user sounds U17-U32; settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk when you act: user sounds U01-U16. Carried over: user sample slot USR1 (header at 0xA0000); user sample slot USR2 (header at 0xB4000); user sample slot USR3 (header at 0xC8000).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song 1 section A (a whole project)",
      "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": "song 1 section B (a whole project)",
      "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": "song 1 section C (a whole project)",
      "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": "song 1 section D (a whole project)",
      "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": "user sounds U17-U32",
      "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, calibration, favourites, MENU options",
      "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"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: 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); user sounds U17-U32; settings, calibration, favourites, MENU options. At risk when you act: song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects) (some of it lost); song 5: four sections (whole projects); song 6: four sections (whole projects); song 7: four sections (whole projects); song 8: four sections (whole projects); which song is current, every song's rows and scenes; user sounds U01-U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared user presets U289-U378",
      "effect": "some of it lost",
      "ways": [
       {
        "way": "by itself as you use it",
        "effect": "some of it lost"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "some of it lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "some of it lost"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "some of it lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "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": "shared user presets U019-U036",
      "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, factory favourites, calibration, saved template",
      "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"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: shared user presets U289-U378 (some of it lost); shared user presets U379-U384; shared user presets U019-U036; settings, factory favourites, calibration, saved template. At risk when you act: project A: patterns, song, sounds, motion, recordings; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; shared user presets U145-U288; shared user presets U073-U090; shared user presets U091-U108; shared user presets U001-U018.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "ACS",
    "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": "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"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights). At risk when you act: FoMni button calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "ACS",
    "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": "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"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: AMB-1 pieces and setup. At risk when you act: AMB-1 panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "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": "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"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last global-save session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: options, playing setup and panel calibration. At risk when you act: CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last global-save session; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches; recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "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": "user sounds 17–32",
      "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"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample slot USR1",
     "user sample slot USR2",
     "user sample slot USR3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D; user sounds 17–32; settings and panel calibration. At risk when you act: user sounds 1–16. Carried over: user sample slot USR1; user sample slot USR2; user sample slot USR3.",
    "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 after a retained second-core failure, if two cores were enabled",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "by itself, only if the journal has nonblank invalid metadata or invalid entries",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you back up pending project edits over USB (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you confirm a USB restore (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you do a factory reset (it asks or arms a second turn first)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you start a USB restore (staging erases before the device question) (no question)",
        "effect": "damaged (part of it written over)"
       },
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install X0X (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open."
    ],
    "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. Installing this firmware replaces Open’s sixteen USER projects, preferences and sample header before its first start, including the first 24 KiB of sample storage. This follows Open’s source-defined USER layout and the incoming program range; export projects and device samples before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "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": "octave, last selected preset and MIDI preferences",
      "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": [],
    "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: older stored user bank, if present (Beta4 does not store new edits); octave, last selected preset and MIDI preferences. 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": "hortator",
    "name": "Hortator",
    "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)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "ACS",
    "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": "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"
       }
      ]
     },
     {
      "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": "by itself, only after a retained second-core failure, if two cores were enabled [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 back up pending project edits over USB (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 do a factory reset (it asks or arms a second turn first) [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 press SAVE (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 start a USB restore (staging erases before the device question) (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": "by itself, only after a retained second-core failure, if two cores were enabled [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 back up pending project edits over USB (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 do a factory reset (it asks or arms a second turn first) [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 press SAVE (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 start a USB restore (staging erases before the device question) (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": "by itself, only after a retained second-core failure, if two cores were enabled [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 back up pending project edits over USB (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 do a factory reset (it asks or arms a second turn first) [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 press SAVE (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 start a USB restore (staging erases before the device question) (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": "by itself, only after a retained second-core failure, if two cores were enabled [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 back up pending project edits over USB (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 do a factory reset (it asks or arms a second turn first) [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 press SAVE (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 start a USB restore (staging erases before the device question) (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": "by itself, only after a retained second-core failure, if two cores were enabled [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 back up pending project edits over USB (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 do a factory reset (it asks or arms a second turn first) [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 press SAVE (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 start a USB restore (staging erases before the device question) (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": "by itself, only after a retained second-core failure, if two cores were enabled [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 back up pending project edits over USB (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 do a factory reset (it asks or arms a second turn first) [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 press SAVE (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 start a USB restore (staging erases before the device question) (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": "by itself, only after a retained second-core failure, if two cores were enabled [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 back up pending project edits over USB (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 do a factory reset (it asks or arms a second turn first) [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 press SAVE (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 start a USB restore (staging erases before the device question) (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": "by itself, only after a retained second-core failure, if two cores were enabled [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 back up pending project edits over USB (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 do a factory reset (it asks or arms a second turn first) [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 press SAVE (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 start a USB restore (staging erases before the device question) (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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "All four Polly songs",
      "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": "Polly shared memory 1",
      "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": "Polly shared memory 2",
      "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": "Polly shared memory 3",
      "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": "Optional QY70 style bank",
      "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"
       },
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "damaged (part of it written over)"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "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"
       }
      ]
     },
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Optional QY70 style bank; Polly setup and channel sounds. At risk when you act: Polly shared memory 4; Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Polly button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "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": "user sound bank 2",
      "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, calibration and favourites",
      "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"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sample USR1 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour)",
     "user sample USR2 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour)",
     "user sample USR3 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: project A; project B; project C; project D; user sound bank 2; settings, calibration and favourites. At risk when you act: user sound bank 1. Carried over: user sample USR1 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour); user sample USR2 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour); user sample USR3 (Sample bytes carry over; X0X uses its own zone and break-loop playback rather than Skiff’s sound and hand-set slice behaviour).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "going_back_a_version": "The shared project layout still loads across these X0X versions. The release notes place 2ND CORE in 1.0.7, ENV reset and the safe-mode update hold in 1.0.8, and break FILTER plus project backup/restore in 1.0.9; 1.0-1.0.6 lack those last two features, and 1.0-1.0.5 also lack USB AUDIO. Re-saving in a version without a newer field can replace it, so keep a v1.1.0 backup before downgrading. To restore an .x0b file, use an X0X version with backup support (1.0.9 onward in the release notes). A 0.x beta cannot read 1.0's patterns or settings: it starts fully factory, sounds included, and its first autosave can overwrite the newer project.",
  "going_back_a_version_source": [
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.0.5",
    "commit": "6cffa408b5b95de2e41ff8b06be6c48084a95d2d",
    "path": "firmware/src/app/x0x.h",
    "lines": "26-40",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/6cffa408b5b95de2e41ff8b06be6c48084a95d2d/firmware/src/app/x0x.h#L26-L40"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/x0x.h",
    "lines": "27-43",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/x0x.h#L27-L43"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v0.10.3-beta",
    "commit": "137c34a410a83d183f787f85e2c94760a6ade6f2",
    "path": "firmware/src/app/x0x.h",
    "lines": "22-32",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/137c34a410a83d183f787f85e2c94760a6ade6f2/firmware/src/app/x0x.h#L22-L32"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v0.10.3-beta",
    "commit": "137c34a410a83d183f787f85e2c94760a6ade6f2",
    "path": "firmware/src/app/project.c",
    "lines": "51-82",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/137c34a410a83d183f787f85e2c94760a6ade6f2/firmware/src/app/project.c#L51-L82"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v0.10.3-beta",
    "commit": "137c34a410a83d183f787f85e2c94760a6ade6f2",
    "path": "firmware/src/app/project.c",
    "lines": "117-149",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/137c34a410a83d183f787f85e2c94760a6ade6f2/firmware/src/app/project.c#L117-L149"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v0.10.3-beta",
    "commit": "137c34a410a83d183f787f85e2c94760a6ade6f2",
    "path": "firmware/src/seq/pattern.h",
    "lines": "11-12",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/137c34a410a83d183f787f85e2c94760a6ade6f2/firmware/src/seq/pattern.h#L11-L12"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v0.10.3-beta",
    "commit": "137c34a410a83d183f787f85e2c94760a6ade6f2",
    "path": "firmware/src/app/ui.c",
    "lines": "3150-3165",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/137c34a410a83d183f787f85e2c94760a6ade6f2/firmware/src/app/ui.c#L3150-L3165"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/x0x.h",
    "lines": "21-25",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/x0x.h#L21-L25"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "13-15",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L13-L15"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v0.10.3-beta",
    "commit": "137c34a410a83d183f787f85e2c94760a6ade6f2",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "282-283",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/137c34a410a83d183f787f85e2c94760a6ade6f2/firmware/src/app/main_fm1.c#L282-L283"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v0.10.3-beta",
    "commit": "137c34a410a83d183f787f85e2c94760a6ade6f2",
    "path": "firmware/src/app/project.c",
    "lines": "117-141",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/137c34a410a83d183f787f85e2c94760a6ade6f2/firmware/src/app/project.c#L117-L141"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/x0x.h",
    "lines": "21-43",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/x0x.h#L21-L43"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "501-507",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L501-L507"
   },
   {
    "kind": "doc",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "docs/NEW.md",
    "lines": "15-39",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/NEW.md#L15-L39"
   }
  ],
  "overwrites_previous_grading": "Generated from the flash atlas (output/fm1/flash-atlas/). Each fact carries its evidence grade. Available firmware source was read at the mapped release; Open’s USER layout is read in its package and APP source; its native SDK/loader are closed. Stock V15’s layout is reported from V13 analysis; Baud Girl’s is inferred. Nothing was tested on a unit. Anything listed is at risk, whatever saved copy might survive.",
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
     "break loops slot 1",
     "break loops slot 2",
     "break loops slot 3",
     "X0X button calibration"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): the whole X0X project (settings, sound, all 32 patterns, song, knob motion); break loops slot 1; break loops slot 2; break loops slot 3; X0X button calibration.",
    "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": [
     "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
     "break loops slot 1",
     "break loops slot 2",
     "break loops slot 3",
     "X0X button calibration"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): the whole X0X project (settings, sound, all 32 patterns, song, knob motion); break loops slot 1; break loops slot 2; break loops slot 3; X0X button calibration.",
    "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": "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": "by itself, only if its 2ND CORE is on and a render job fails or times out",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CCs (no question)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the web editor",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor",
        "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",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the web editor",
        "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",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "break loops slot 1",
     "break loops slot 2",
     "break loops slot 3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration. Carried over: break loops slot 1; break loops slot 2; break loops slot 3.",
    "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": "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 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 run hardware calibration (no question)",
        "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 save a user preset (it asks or arms a second turn about the target slot only; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (no question)",
        "effect": "lost"
       },
       {
        "way": "when you send the song from the web editor (no question)",
        "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"
       },
       {
        "way": "when you store drum kits from the web editor (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "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 user preset (it asks or arms a second turn about the target slot only; 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "break loops slot 1",
     "break loops slot 2",
     "break loops slot 3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration. Carried over: break loops slot 1; break loops slot 2; break loops slot 3.",
    "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": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "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 settings from the web editor (no question)",
        "effect": "lost"
       },
       {
        "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 run hardware calibration (no question)",
        "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 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"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "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": "break loops slot 1",
      "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": "break loops slot 2",
      "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": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "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 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion); break loops slot 3. At risk when you act: break loops slot 1; break loops slot 2; X0X button calibration.",
    "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": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "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 change a setting (no question)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting in the menu (no question)",
        "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)",
        "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 run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (no question)",
        "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)",
        "effect": "lost"
       },
       {
        "way": "when you send data from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you star a favourite (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "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": "X0X button calibration",
      "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": "break loops slot 1",
      "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": "break loops slot 2",
      "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: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk by itself, under a condition: break loops slot 3; X0X button calibration. At risk when you act: break loops slot 1; break loops slot 2.",
    "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": "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 press SAVE (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button 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": "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 press SAVE (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button 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": "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": "by itself, only if core failure barred Dual Core while the stored setting was On",
        "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 confirm Reset Settings with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (no question)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you restore settings from backup software (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "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": "break loops slot 3",
      "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": "break loops slot 1",
      "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)"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (it asks or arms a second turn first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion); break loops slot 2; break loops slot 3. At risk when you act: break loops slot 1; X0X button calibration.",
    "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": "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 restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup or import a project",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (no question)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send settings from the editor",
        "effect": "lost"
       },
       {
        "way": "when you send user presets from the editor",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user presets from the editor",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "break loops slot 1",
     "break loops slot 2",
     "break loops slot 3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration. Carried over: break loops slot 1; break loops slot 2; break loops slot 3.",
    "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": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "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": "break loops slot 1",
      "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": "break loops slot 2",
      "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": "break loops slot 3",
      "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": "X0X button 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": [
     "The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source."
    ],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: break loops slot 1; break loops slot 2; break loops slot 3; X0X button calibration. The factory-sample write runs by itself right after the Workbench installs Open, before any project save. The source-built V12 bank erases 0x8D000–0x9FFFF without another sample question. The shipped Workbench asset was not compared with the source.",
    "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": "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 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: the whole X0X project (settings, sound, all 32 patterns, song, knob motion).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "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)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "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 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: the whole X0X project (settings, sound, all 32 patterns, song, knob motion).",
    "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": "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 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": "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": "break loops slot 1",
      "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": "break loops slot 2",
      "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": "break loops slot 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank (no question)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (no question)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion); break loops slot 1; break loops slot 2. At risk when you act: break loops slot 3; X0X button calibration.",
    "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": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself at its first start",
        "effect": "lost"
       },
       {
        "way": "by itself as you use it",
        "effect": "lost"
       },
       {
        "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 calibrate the panel or change editor preferences (no question)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (it asks or arms a second turn first)",
        "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"
       },
       {
        "way": "when you save, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "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, import, erase or rename a user sound (no question; it rewrites the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a sound from the web editor (no question; it rewrites the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "break loops slot 1",
     "break loops slot 2",
     "break loops slot 3"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration. Carried over: break loops slot 1; break loops slot 2; break loops slot 3.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "FACTORY RESET and your saved project",
   "docs_say": "The reset keeps your saved project until you save over it.",
   "source_says": "The reset marks the project changed and switches AUTOSAVE back on, even if you had turned it off, so once the pattern is stopped, REC is off and nothing has been touched for 4 s (and 20 s have passed since the last autosave) the reset project is saved over the old one. Turning AUTOSAVE off again does not stop it: switching it off allows one last autosave. Undo can't be counted on either: one change bigger than undo's 20 KB store, which a reset of a full project can be, is not kept and empties the whole history. To keep the old on-unit save, switch off before that autosave fires; the next start loads it from memory. A project file backed up before the reset can also restore the project afterwards. A stopped USB backup also tries to save pending reset edits immediately, even with REC on or AUTOSAVE off, so make the backup before resetting.",
   "docs_ref": {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L619",
    "path": "docs/MANUAL.md",
    "lines": "619",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "1621-1629",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1621-L1629"
   },
   "more_source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/x0x.h",
     "lines": "32",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/x0x.h#L32"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/project.c",
     "lines": "44",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L44"
    },
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "4591-4614",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4591-L4614",
     "repo": "charlesvestal/fm1-x0x"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "420",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L420"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/undo.c",
     "lines": "11-13",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L11-L13"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/undo.c",
     "lines": "19-20",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L19-L20"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/undo.c",
     "lines": "107-110",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L107-L110"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "435-436",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L435-L436"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "106-110",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L106-L110"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "489-505",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L489-L505"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4652-4658",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4652-L4658"
    }
   ]
  },
  {
   "topic": "Undo and big changes",
   "docs_say": "The manual says undo keeps as many as 32 steps, with fewer left after large edits, and that it can take back CLEAR PATTERN and FACTORY RESET.",
   "source_says": "Undo keeps its history in a 20,480-byte store. A single change larger than that is not kept and wipes the whole history. In practice only FACTORY RESET of a well-filled project gets that big (CLEAR PATTERN or a song clear stays far smaller), so after such a reset HOME + REC can say NOTHING TO UNDO.",
   "docs_ref": {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L162-L165",
    "path": "docs/MANUAL.md",
    "lines": "162-165",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/undo.c",
    "lines": "107-110",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L107-L110"
   },
   "more_source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/undo.c",
     "lines": "11-13",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L11-L13"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/undo.c",
     "lines": "19-20",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L19-L20"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/undo.c",
     "lines": "107-110",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L107-L110"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1230-1240",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1230-L1240"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1297-1306",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1297-L1306"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/seq/motion.c",
     "lines": "177-181",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/motion.c#L177-L181"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1097-1115",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1097-L1115"
    }
   ]
  },
  {
   "topic": "Questions before losing notes",
   "docs_say": "The manual's section on lists says X0X asks before anything that would lose notes.",
   "source_says": "Five editing actions ask; restoring from USB asks too. OCT+ on TB-3PO rewrites the whole 303 line, OCT- mutates it, MUTATE set to 1-16 changes it as it plays, DELETE BAR and a shorter song LENGTH drop bars, SAVE + a knob forgets recorded motion, and pasting onto a pattern with no notes replaces its other settings, all without a question.",
   "docs_ref": {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L149-L151",
    "path": "docs/MANUAL.md",
    "lines": "149-151",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "2254-2267",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2254-L2267"
   },
   "more_source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2396-2411",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2396-L2411"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/seq/tb3po.c",
     "lines": "78-87",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/tb3po.c#L78-L87"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1596-1612",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1596-L1612"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "462-469",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L462-L469"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2556-2560",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2560"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/seq/sequencer.c",
     "lines": "285-291",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L285-L291"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1043-1051",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1043-L1051"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1068-1095",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1068-L1095"
    },
    {
     "kind": "source",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "315-339",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339",
     "repo": "charlesvestal/fm1-x0x"
    }
   ]
  },
  {
   "topic": "FACTORY RESET and settings (detail of the above)",
   "docs_say": "The manual lists what the reset brings back: the stock sounds, blank patterns, an empty song and no recorded knob moves; it says nothing about settings.",
   "source_says": "project_defaults also sets THEME to amber, LIGHTS to ON, KEY SOUND to STOPPED and AUTOSAVE to ON.",
   "docs_ref": {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L619",
    "path": "docs/MANUAL.md",
    "lines": "619",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "36-54",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L36-L54"
   }
  },
  {
   "topic": "ENV as an accent on every key",
   "docs_say": "The controls table says holding ENV while pressing keys gives an accent; the on-screen help card says so for the break and for 303 steps too.",
   "source_says": "ENV only acts on drum keys and on the 303 keyboard (REC or FREE PLAY). On the break's keys and on 303 step keys it is never read.",
   "docs_ref": {
    "kind": "doc",
    "path": "docs/MANUAL.md",
    "lines": "121",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L121"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "2192-2234",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2192-L2234"
   },
   "more_source": [
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "1135-1140",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1135-L1140",
     "repo": "charlesvestal/fm1-x0x"
    },
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "1910-1921",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1910-L1921",
     "repo": "charlesvestal/fm1-x0x"
    },
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "1947-1952",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1947-L1952",
     "repo": "charlesvestal/fm1-x0x"
    },
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "1988-2007",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1988-L2007",
     "repo": "charlesvestal/fm1-x0x"
    }
   ]
  },
  {
   "topic": "LFO as a slide, and legato slides while recording",
   "docs_say": "The controls table says holding LFO while pressing keys gives a slide; the manual also says playing a key while holding another makes the 303 slide.",
   "source_says": "LFO adds a slide only in stopped step recording. Holding one keyboard note while playing another slides the sound, but that legato gesture writes no slide or tie: live recording writes an accented or plain note, and stopped step recording needs LFO held to write a slide.",
   "docs_ref": {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L122",
    "path": "docs/MANUAL.md",
    "lines": "122",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "1967-2007",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1967-L2007"
   },
   "more_source": [
    {
     "kind": "doc",
     "path": "docs/MANUAL.md",
     "lines": "283-286",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L283-L286"
    },
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "2412-2418",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2412-L2418",
     "repo": "charlesvestal/fm1-x0x"
    }
   ]
  },
  {
   "topic": "FREE PLAY writes nothing",
   "docs_say": "With FREE PLAY on, nothing is written until you press REC.",
   "source_says": "With FREE PLAY on and REC off, ENV + OCT still writes a rest and LFO + OCT a tie into the line at the step-writing position.",
   "docs_ref": {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L288-L292",
    "path": "docs/MANUAL.md",
    "lines": "288-292",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   "source_ref": {
    "kind": "source",
    "path": "firmware/src/app/ui.c",
    "lines": "2412-2418",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2412-L2418",
    "repo": "charlesvestal/fm1-x0x"
   }
  },
  {
   "topic": "PRESETS on screens other than HOME",
   "docs_say": "PRESETS changes one part on its own screens and all five on HOME.",
   "source_says": "On every screen that is not EDIT, SEQ or TB-3PO (SONG, FX, the mixer, GLOBAL too) it moves all five parts.",
   "docs_ref": {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L115",
    "path": "docs/MANUAL.md",
    "lines": "115",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "2522-2532",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2522-L2532"
   }
  },
  {
   "topic": "LIGHTS OFF",
   "docs_say": "LIGHTS OFF turns off both the key lights and the button glow.",
   "source_says": "Keys you hold still light with LIGHTS OFF.",
   "docs_ref": {
    "kind": "doc",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L613",
    "path": "docs/MANUAL.md",
    "lines": "613",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd"
   },
   "source_ref": {
    "kind": "source",
    "path": "firmware/src/app/ui.c",
    "lines": "4144-4149",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4144-L4149",
    "repo": "charlesvestal/fm1-x0x"
   },
   "more_source": [
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "4067-4068",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4067-L4068",
     "repo": "charlesvestal/fm1-x0x"
    }
   ]
  },
  {
   "topic": "FX help card (on-device text, not the manual)",
   "docs_say": "The FX help card says FX holds the reverb, delay, tape and kit drive.",
   "source_says": "FX's pages are REVERB and DELAY (TAPE is on DELAY); DRIVE is on the mixer's MASTER page.",
   "docs_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "1133",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1133"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "842-861",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L842-L861"
   }
  },
  {
   "topic": "Web manual: processor supply voltages",
   "docs_say": "The web manual still describes one supply at 1.50 V, raised from 1.40 V.",
   "source_says": "At start-up X0X sets the two supplies to 1.38 V and 1.60 V, and PERFORMANCE shows both. MANUAL.md has the current values; manual.html has older text.",
   "docs_ref": {
    "kind": "doc",
    "path": "docs/manual.html",
    "lines": "263",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/manual.html#L263"
   },
   "source_ref": {
    "kind": "source",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "387-392",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L387-L392",
    "repo": "charlesvestal/fm1-x0x"
   },
   "more_source": [
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "3452-3463",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L3452-L3463",
     "repo": "charlesvestal/fm1-x0x"
    },
    {
     "kind": "doc",
     "path": "docs/MANUAL.md",
     "lines": "671-673",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L671-L673"
    }
   ]
  },
  {
   "topic": "Web manual: the break's SOUND page",
   "docs_say": "The web manual describes the break's EDIT knobs as LOOP A, LOOP B, B CHANCE and PITCH, then points to SEL's list for LEVEL.",
   "source_says": "EDIT has two break pages: LOOPS with those four settings, then SOUND with FILTER on KNOB 1 and LEVEL on KNOB 2. MANUAL.md describes the second page; manual.html has the older layout.",
   "docs_ref": {
    "kind": "doc",
    "path": "docs/manual.html",
    "lines": "177",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/manual.html#L177"
   },
   "source_ref": {
    "kind": "source",
    "path": "firmware/src/app/ui.c",
    "lines": "828-833",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L828-L833",
    "repo": "charlesvestal/fm1-x0x"
   },
   "more_source": [
    {
     "kind": "doc",
     "path": "docs/MANUAL.md",
     "lines": "356-362",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L356-L362"
    }
   ]
  },
  {
   "topic": "USB restore writes before asking",
   "docs_say": "The manual says the complete backup is checked before anything changes, then the FM-1 asks whether to restore it.",
   "source_says": "Before the final file check and the question, restore erases and fills each object's inactive flash copy. It leaves their headers blank, so cancelling or a failed check keeps the active saved project in use, but older backup copies or another firmware's bytes in those inactive sectors can already be gone. SEL commits the staged project; HOME does not commit it.",
   "docs_ref": {
    "kind": "doc",
    "path": "docs/MANUAL.md",
    "lines": "704-706",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L704-L706"
   },
   "source_ref": {
    "kind": "source",
    "path": "firmware/src/backup.c",
    "lines": "306-339",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L306-L339",
    "repo": "charlesvestal/fm1-x0x"
   },
   "more_source": [
    {
     "kind": "source",
     "path": "firmware/src/backup.c",
     "lines": "453-504",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L453-L504",
     "repo": "charlesvestal/fm1-x0x"
    },
    {
     "kind": "source",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "315-339",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339",
     "repo": "charlesvestal/fm1-x0x"
    }
   ]
  },
  {
   "topic": "Screen reader and the USB restore question",
   "docs_say": "The screen reader section includes questions among the things read aloud.",
   "source_says": "The ordinary editing questions are sent to the reader. RESTORE FROM USB? is drawn by a separate loop, which reads SEL and HOME directly and sends no announcement. The reader does not get that hardware question from X0X.",
   "docs_ref": {
    "kind": "doc",
    "path": "docs/MANUAL.md",
    "lines": "764-768",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L764-L768"
   },
   "source_ref": {
    "kind": "source",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "315-339",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339",
    "repo": "charlesvestal/fm1-x0x"
   },
   "more_source": [
    {
     "kind": "source",
     "path": "firmware/src/app/ui.c",
     "lines": "4324-4330",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4324-L4330",
     "repo": "charlesvestal/fm1-x0x"
    },
    {
     "kind": "source",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "510-517",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L510-L517",
     "repo": "charlesvestal/fm1-x0x"
    },
    {
     "kind": "source",
     "path": "firmware/src/backup.c",
     "lines": "489-493",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L489-L493",
     "repo": "charlesvestal/fm1-x0x"
    }
   ]
  },
  {
   "topic": "Screen reader and BREAK steps",
   "docs_say": "The screen reader section includes step changes among its spoken updates without limiting them to particular parts.",
   "source_says": "White-key on/off edits on drums and 303s, plus ENV drum-accent toggles, are announced. Live drum recording and notes written from the 303 keyboard have no per-step announcement. BREAK step edits are also silent, and the full-screen request leaves BREAK's step list out.",
   "docs_ref": {
    "kind": "doc",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "docs/MANUAL.md",
    "lines": "764-768",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/docs/MANUAL.md#L764-L768"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "4243-4248",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4243-L4248"
   },
   "more_source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4389-4409",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4389-L4409"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2216-2233",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2216-L2233"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1915-1921",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1915-L1921"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1967-2002",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1967-L2002"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1927-1963",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1927-L1963"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2011-2042",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2011-L2042"
    }
   ]
  },
  {
   "topic": "ENV reset and the startup sound (source comment)",
   "docs_say": "The input handler comment describes returning the knob to the value used at power-on.",
   "source_says": "The handler assigns the default from the parameter table. Factory sounds override several of those values: PUMP resets to 0 instead of 21, COMP to 0 instead of 95, 303 CUTOFF to 64 instead of 48, 303 DRIVE to 0 instead of 45, 909 mixer LEVEL to 100 instead of 75, and BREAK LEVEL to 100 instead of 127. It does not retrieve the saved startup value.",
   "docs_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "2561",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561"
   },
   "source_ref": {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "2562-2568",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2562-L2568"
   },
   "more_source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/engine.c",
     "lines": "144-155",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L144-L155"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/engine.c",
     "lines": "254-287",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L254-L287"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/dsp/master.c",
     "lines": "32-39",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L32-L39"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/dsp/bass303.c",
     "lines": "21-32",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/bass303.c#L21-L32"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/engine.c",
     "lines": "92-93",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L92-L93"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/dsp/breaks.c",
     "lines": "65-66",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L65-L66"
    }
   ]
  }
 ],
 "not_mapped": [
  "Each drum track's sound pages knob by knob: they are built from the engines' parameter tables (909/808, four per page, ui.c L753-769), summarised here rather than listed per track.",
  "MIDI NOTES OUT and CLOCK OUT timing were not traced beyond the GLO settings.",
  "What each other firmware writes over the break loops (and the rest of X0X's data): switching_note.when_you_leave, generated from the flash atlas; not tested on a unit.",
  "The browser emulator's computer-keyboard mapping (not the hardware).",
  "Development-only features (USB serial console, register peek/poke, X0X_DEBUG): off in release builds (x0x.c L32-34, tools/build.py L219-221); one line here only.",
  "The PERFORMANCE page's counters beyond what the controls do.",
  "The browser screen reader's voice, pitch, speed and computer-keyboard shortcuts; the map covers the FM-1 controls and the messages it sends."
 ],
 "lights": {
  "button_play_stop": [
   {
    "light": "green",
    "mode": "any",
    "gesture": "blinking",
    "action": "Flashes on every beat while playing, unless recording.",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4043-4044",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4043-L4044"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "58-61",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L58-L61"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "72-73",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L72-L73"
     }
    ]
   },
   {
    "light": "green",
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default) (PLAY glows green, except while recording).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Flashes on every beat while playing with REC on (PLAY's own LED, which X0X's code calls red).",
    "short_label": "REC BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4043-4044",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4043-L4044"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4148",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4148"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "58-61",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L58-L61"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "72-73",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L72-L73"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default) (only while recording).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "REC is on.",
    "short_label": "REC ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4045-4046",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4045-L4046"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "On HOME or SONG.",
    "short_label": "HOME/SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4047-4048",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4047-L4048"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "On any other screen while the song is playing.",
    "short_label": "SONG PLAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4047-4048",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4047-L4048"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "On SEQ.",
    "short_label": "SEQ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4049-4050",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4049-L4050"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "On EDIT.",
    "short_label": "EDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4051-4052",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4051-L4052"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "On TB-3PO.",
    "short_label": "TB-3PO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4053-4054",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4053-L4054"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "On FX.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4055-4056",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4055-L4056"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "On any mixer page.",
    "short_label": "MIXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4057-4058",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4057-L4058"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "On GLOBAL.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4059-4060",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4059-L4060"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "A list or a question is open (GLOBAL included).",
    "short_label": "LIST OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4061-4062",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4061-L4062"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "The white keys show steps beyond 16, or on HOME and SONG patterns 17-32.",
    "short_label": "PAGE 2+",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4063-4064",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4063-L4064"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Never lit by X0X (it can only glow).",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4039-4066",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4039-L4066"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Never lit by X0X (it can only glow).",
    "short_label": "UNUSED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4039-4066",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4039-L4066"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "glo",
    "gesture": "blinking",
    "action": "There are unsaved changes.",
    "short_label": "UNSAVED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4065-4066",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4065-L4066"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows faintly when not lit, with GLO > LIGHTS on ON (the default).",
    "short_label": "GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "54-57",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L54-L57"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "64-86",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L64-L86"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/project.c",
      "lines": "42",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L42"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Any key you are holding lights, whatever the screen or the LIGHTS setting.",
    "short_label": "HELD KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4145",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4145"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "off",
    "action": "GLO > LIGHTS OFF turns off every other key light; KEYS keeps the key lights without the button glow.",
    "short_label": "LIGHTS SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4067",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4067"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4147",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4147"
     },
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "206",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L206"
     }
    ]
   },
   {
    "mode": "home",
    "gesture": "lit",
    "action": "White: the pattern the 909 plays (bright) and patterns with notes (dim) in the shown bank; a cued pattern blinks. Black 1-5: playing parts bright, muted parts dim.",
    "short_label": "PATTERNS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4068-4086",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4068-L4086"
     }
    ]
   },
   {
    "mode": "song",
    "gesture": "lit",
    "action": "White: the selected bar's pattern bright, patterns with notes dim. Black 1-5: parts playing in that bar bright, muted ones dim.",
    "short_label": "BAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4068-4086",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4068-L4086"
     }
    ]
   },
   {
    "mode": "drums",
    "gesture": "lit",
    "action": "White: the selected track's hits (accents while ENV is held), with the playing step flipped. Black: the selected track bright (blinking if muted), other tracks with hits dim.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4098-4115",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4098-L4115"
     }
    ]
   },
   {
    "mode": "bass_steps",
    "gesture": "lit",
    "action": "White: notes bright, ties dim, with the playing step flipped.",
    "short_label": "NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4116-4127",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4116-L4127"
     }
    ]
   },
   {
    "mode": "break",
    "gesture": "lit",
    "action": "White: the steps the break plays (playing step flipped). Black 1-8 dim: the slice pads.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4132-4143",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4132-L4143"
     }
    ]
   },
   {
    "mode": "mix_parts",
    "gesture": "lit",
    "action": "Black 1-5: the part the knobs set bright (blinking if muted), the others dim, muted ones dark.",
    "short_label": "CHANNEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4087-4095",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4087-L4095"
     }
    ]
   },
   {
    "mode": "mix_drums",
    "gesture": "lit",
    "action": "Black keys: the track the knobs set bright (blinking if muted), the others dim, muted ones dark.",
    "short_label": "CHANNEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4087-4095",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4087-L4095"
     }
    ]
   },
   {
    "mode": "fx",
    "gesture": "off",
    "action": "Nothing to choose here, so only held keys light.",
    "short_label": "NONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4096-4097",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4096-L4097"
     }
    ]
   },
   {
    "mode": "mix_master",
    "gesture": "off",
    "action": "Nothing to choose here, so only held keys light.",
    "short_label": "NONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4096-4097",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4096-L4097"
     }
    ]
   }
  ],
  "led_c4": [
   {
    "mode": "bass_keyboard",
    "gesture": "dim",
    "action": "The two C keys glow dim to help you find your place.",
    "short_label": "C GUIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4128-4131",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4128-L4131"
     }
    ]
   }
  ],
  "led_c5": [
   {
    "mode": "bass_keyboard",
    "gesture": "dim",
    "action": "The two C keys glow dim to help you find your place.",
    "short_label": "C GUIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "charlesvestal/fm1-x0x",
      "ref": "v1.1.0",
      "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
      "path": "firmware/src/app/ui.c",
      "lines": "4128-4131",
      "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4128-L4131"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_a3",
   "led_a4",
   "led_as3",
   "led_as4",
   "led_b3",
   "led_b4",
   "led_c4",
   "led_c5",
   "led_cs4",
   "led_cs5",
   "led_d4",
   "led_d5",
   "led_ds4",
   "led_ds5",
   "led_e4",
   "led_e5",
   "led_f3",
   "led_f4",
   "led_f5",
   "led_fs3",
   "led_fs4",
   "led_fs5",
   "led_g3",
   "led_g4",
   "led_g5",
   "led_gs3",
   "led_gs4"
  ]
 },
 "fixed_after_check": "2026-10-13",
 "check_fixes": [
  {
   "error": "1 DATA LOSS (undo after FACTORY RESET)",
   "fixed": "disagreements[0] now says undo can fail (20 KB store; history emptied), that turning AUTOSAVE off still allows one last autosave, and that switching off before the autosave is the sure way; new disagreement on the manual's undo claim; button_rec undo entry and modes.ask carry the 20 KB limit; md updated."
  },
  {
   "error": "3 MISLEADING (modes.ask)",
   "fixed": "modes.ask lists the five actions that ask, the overwrites that don't, and what undo can't reverse; new disagreement against the manual's 'always asks' line."
  },
  {
   "error": "4 MISLEADING (PASTE bank)",
   "fixed": "the 16 SAVE + white key entries, the 16 HOME + white key entries and SAVE + OCT now say the bank is shared and moved by HOME/SONG OCT, PRESETS and SAVE + OCT."
  },
  {
   "error": "5 MISLEADING (ENV + black key)",
   "fixed": "all 11 ENV + black key entries carry the KEY SOUND / playing condition."
  },
  {
   "error": "6 MINOR (EDIT on BREAK)",
   "fixed": "button_edit edit_break says BREAK has one page; label ONE PAGE."
  },
  {
   "error": "7 MINOR (copied wording, ALGORITHM on the mixer)",
   "fixed": "rewritten in our own words."
  },
  {
   "error": "8 MINOR (copied wording, reset disagreement)",
   "fixed": "docs_say rewritten in our own words."
  },
  {
   "error": "2 DATA LOSS (installing X0X over another firmware)",
   "fixed": "switching_note.overwrites_previous lists 0x97000-0x9EFFF, 0xDE000-0xDFFFF, 0xFC000-0xFDFFF (first autosave), 0xDC000-0xDDFFF (calibration) and 0xA0000-0xDBFFF (loop uploads) with what each earlier firmware loses; lost/back_up_first/going_back_a_version rewritten; md updated."
  },
  {
   "error": "recheck 2 MISLEADING (auto-MUTATE; paste onto a pattern without notes)",
   "fixed": "encoder_knob4 TB-3PO entry, modes.ask, the questions disagreement and the md say MUTATE 1-16 rewrites the playing line by itself with no question, and that a paste onto a pattern without notes replaces its lengths, swing, motion, locks and chances unasked."
  },
  {
   "error": "recheck 3 MINOR (0.x beta)",
   "fixed": "going_back_a_version and md: the beta starts fully factory, sounds included (project_load fails, main resets to defaults)."
  },
  {
   "error": "recheck 9 MINOR (undo disagreement wording)",
   "fixed": "only FACTORY RESET is said to exceed the store; md too."
  }
 ],
 "checker_disputes": [],
 "refreshed_from": {
  "release": "v1.0.6",
  "commit": "47f8e4c4ad602591b81c21bc5480db7a94f6d6af",
  "date": "2026-10-16"
 },
 "saving_note": {
  "power_off": "There is no save on power-off. SAVE waits for stopped transport and for any USB backup to finish. AUTOSAVE is on by default: while stopped with REC off, outside a question or performance test, it saves changed objects after 4 s untouched and at most once per 20 s; turning AUTOSAVE off permits one last save. A stopped USB backup tries to save pending edits even with REC on or AUTOSAVE off. After FACTORY RESET it therefore saves the reset project over the previous saved project if the save succeeds, even while REC would block autosave. A torn packed-stream save now tries previous A/B object copies before falling back to defaults; keep a file backup too. After a restore, the next save does not necessarily rewrite all six project objects: reloading caches valid objects again, so unchanged cached objects can be skipped; uncached or changed objects are written and can replace remaining older copies. Keep a file backup rather than relying on those copies.",
  "evidence": "read-in-source",
  "source": [
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "1323-1339",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1323-L1339"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "4588-4618",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4588-L4618"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "4652-4659",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4652-L4659"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "469-487",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L469-L487"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/backup.c",
    "lines": "210-222",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L210-L222"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/hal/fm1_cpu1.h",
    "lines": "174-194",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/hal/fm1_cpu1.h#L174-L194"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/hal/fm1_cpu1.h",
    "lines": "51-56",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/hal/fm1_cpu1.h#L51-L56"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/plat_fm1.c",
    "lines": "157",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L157"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "442-450",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L442-L450"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "561-569",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L561-L569"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "1621-1629",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1621-L1629"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "4652-4658",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4652-L4658"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "4669-4673",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4669-L4673"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "437-457",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L437-L457"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "115-142",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L115-L142"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "238-270",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L238-L270"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "102-112",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L102-L112"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "202-223",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L202-L223"
   }
  ]
 },
 "overwrites_without_asking": [
  {
   "what": "ENV + KNOB 1-4 sets that parameter to its table default, which can differ from the factory sound or the value loaded at startup; for example HOME PUMP becomes 0 (off), while the factory project uses 21; SAVE and held-step branches take precedence.",
   "asks": "no",
   "undo": "sound and pattern changes can be undone within the existing history; settings and tempo cannot",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2533-2572",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2533-L2572"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1230-1240",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1230-L1240"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2561-2568",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2561-L2568"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "257-269",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L257-L269"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/engine.c",
     "lines": "144-155",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L144-L155"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/engine.c",
     "lines": "254-287",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L254-L287"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/dsp/master.c",
     "lines": "32-39",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/master.c#L32-L39"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/dsp/bass303.c",
     "lines": "21-32",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/bass303.c#L21-L32"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/engine.c",
     "lines": "92-93",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/engine.c#L92-L93"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/dsp/breaks.c",
     "lines": "65-66",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/dsp/breaks.c#L65-L66"
    }
   ]
  },
  {
   "what": "TB-3PO's OCT+ replaces the line, OCT- mutates it, and MUTATE 1-16 can rewrite it during playback; DELETE BAR, a shorter song LENGTH, SAVE + knob motion deletion, recordings and a paste onto a pattern with no notes also overwrite without a question.",
   "asks": "no",
   "undo": "subject to the 20 KB history and no power-off boundary",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1016-1023",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1016-L1023"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2286-2298",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2286-L2298"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2099-2110",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2099-L2110"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2319-2324",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2319-L2324"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2254-2267",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2254-L2267"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2396-2411",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2396-L2411"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/seq/tb3po.c",
     "lines": "78-87",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/tb3po.c#L78-L87"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1596-1612",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1596-L1612"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "462-469",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L462-L469"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "2556-2560",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L2556-L2560"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1774-1790",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1774-L1790"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/undo.c",
     "lines": "107-110",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/undo.c#L107-L110"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1230-1240",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1230-L1240"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1621-1629",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1621-L1629"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/seq/sequencer.c",
     "lines": "285-291",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/seq/sequencer.c#L285-L291"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1043-1051",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1043-L1051"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1068-1095",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1068-L1095"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "315-339",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L315-L339"
    }
   ]
  },
  {
   "what": "A stopped backup first attempts to save edits even with REC on or AUTOSAVE off; after FACTORY RESET that saves the reset project over the previous saved project if successful; SAVE and AUTOSAVE also replace saved objects without a confirmation.",
   "asks": "no",
   "undo": "undo does not restore earlier flash copies as a backup",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "210-222",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L210-L222"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1323-1339",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1323-L1339"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4593-4618",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4593-L4618"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4652-4658",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4652-L4658"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "1621-1629",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L1621-L1629"
    }
   ]
  },
  {
   "what": "USB restore stages payloads into inactive copies before the on-device confirmation; cancelling does not recover the older or foreign bytes erased there.",
   "asks": "SEL confirms committing the replacement project, after staging",
   "undo": "no; a completed restore restarts undo from the loaded project",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "306-339",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L306-L339"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "469-505",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L469-L505"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4669-4684",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4669-L4684"
    }
   ]
  },
  {
   "what": "After a crash beside the second core, bad job reads or an 8 ms job timeout, the next warm restart turns 2ND CORE off and saves settings if it was ON; a failed start also uses one core for that start without requiring the saved setting to be OFF; a valid restore journal can finish committing project headers on startup.",
   "asks": "no further question at startup; the journal comes from a confirmed restore",
   "undo": "no settings undo",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "395-400",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L395-L400"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "442-450",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L442-L450"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/backup.c",
     "lines": "375-396",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/backup.c#L375-L396"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/hal/fm1_cpu1.h",
     "lines": "174-194",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/hal/fm1_cpu1.h#L174-L194"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/hal/fm1_cpu1.h",
     "lines": "51-56",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/hal/fm1_cpu1.h#L51-L56"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/plat_fm1.c",
     "lines": "157",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/plat_fm1.c#L157"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "561-569",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L561-L569"
    }
   ]
  },
  {
   "what": "Completed hardware calibration saves its button/encoder map, and loop upload or erase commands rewrite the selected sample slot.",
   "asks": "no on-device overwrite question",
   "undo": "not covered by project undo or .x0b backups",
   "source": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/panel.c",
     "lines": "47-108",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/panel.c#L47-L108"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/editor.c",
     "lines": "64-94",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/editor.c#L64-L94"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/editor.c",
     "lines": "208-244",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/editor.c#L208-L244"
    }
   ]
  }
 ],
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 ENV reset values",
   "fixed": "Clarified parameter-table values rather than factory or loaded sound values, with source tables and factory overrides.",
   "at": "controls.button_env[7]"
  },
  {
   "round": 1,
   "error": "1 ENV reset values",
   "fixed": "Named the actual reset values and their different factory values; retained input precedence and motion behavior.",
   "at": "controls.encoder_knob1[22]"
  },
  {
   "round": 1,
   "error": "1 ENV reset values",
   "fixed": "Named the actual reset values and their different factory values; retained input precedence and motion behavior.",
   "at": "controls.encoder_knob2[21]"
  },
  {
   "round": 1,
   "error": "1 ENV reset values",
   "fixed": "Named the actual reset values and their different factory values; retained input precedence and motion behavior.",
   "at": "controls.encoder_knob3[19]"
  },
  {
   "round": 1,
   "error": "1 ENV reset values",
   "fixed": "Named the actual reset values and their different factory values; retained input precedence and motion behavior.",
   "at": "controls.encoder_knob4[19]"
  },
  {
   "round": 1,
   "error": "1 ENV reset values",
   "fixed": "Specified table defaults and the PUMP example.",
   "at": "overwrites_without_asking[0]"
  },
  {
   "round": 1,
   "error": "1 ENV reset values",
   "fixed": "Added the source-comment mismatch and exact table-versus-factory examples.",
   "at": "disagreements[15]"
  },
  {
   "round": 1,
   "error": "1 ENV reset values",
   "fixed": "Clarified reset values and added all six factory comparisons.",
   "at": "control-maps/x0x.md: Shape a sound"
  },
  {
   "round": 1,
   "error": "2 Core fallback conditions",
   "fixed": "Added bad-read and 8 ms timeout fallback, the next warm restart settings write, and one-core startup after a failed boot without requiring OFF.",
   "at": "controls.encoder_algorithm[7]"
  },
  {
   "round": 1,
   "error": "2 Core fallback conditions",
   "fixed": "Added citations and clarified that retained core failures include bad reads and an 8 ms job timeout.",
   "at": "switching_note"
  },
  {
   "round": 1,
   "error": "2 Core fallback conditions",
   "fixed": "Added citations and clarified that retained core failures include bad reads and an 8 ms job timeout.",
   "at": "saving_note"
  },
  {
   "round": 1,
   "error": "2 Core fallback conditions",
   "fixed": "Added citations and clarified that retained core failures include bad reads and an 8 ms job timeout.",
   "at": "overwrites_without_asking[4]"
  },
  {
   "round": 1,
   "error": "2 Core fallback conditions",
   "fixed": "Added both missing fallback conditions and clarified when OFF is saved.",
   "at": "control-maps/x0x.md: GLO and startup"
  },
  {
   "round": 1,
   "error": "2 Core fallback conditions",
   "fixed": "Expanded retained failure triggers and distinguished the temporary one-core boot restriction from a flash write.",
   "at": "refresh/work/x0x.storage.json: changes[1]"
  },
  {
   "round": 1,
   "error": "2 Core fallback conditions",
   "fixed": "Expanded retained failure triggers and distinguished the temporary one-core boot restriction from a flash write.",
   "at": "refresh/work/x0x.storage.json: changes[15]"
  },
  {
   "round": 1,
   "error": "3 Restore progress writes",
   "fixed": "Made the pre-confirmation erase/write operations explicit in the percentage description.",
   "at": "modes[30]"
  },
  {
   "round": 1,
   "error": "3 Restore progress writes",
   "fixed": "Named inactive-copy staging in the mode and transfer rows.",
   "at": "control-maps/x0x.md: restore progress"
  },
  {
   "round": 1,
   "error": "4 Reader step scope",
   "fixed": "Limited step announcements to white-key on/off edits and ENV drum accents; excluded live recording and keyboard writes.",
   "at": "controls.jack_usb[3]"
  },
  {
   "round": 1,
   "error": "4 Reader step scope",
   "fixed": "Narrowed the earlier broad drum/303 statement to the actual announcement call sites.",
   "at": "disagreements[14]"
  },
  {
   "round": 1,
   "error": "4 Reader step scope",
   "fixed": "Specified announced edits and the live-recording and keyboard exceptions.",
   "at": "control-maps/x0x.md: reader"
  },
  {
   "round": 1,
   "error": "5 One update mode",
   "fixed": "Used UPDATE MODE consistently and stated that the safe and normal paths enter the same mode.",
   "at": "controls.button_oct_down[12]"
  },
  {
   "round": 1,
   "error": "5 One update mode",
   "fixed": "Used UPDATE MODE consistently and stated that the safe and normal paths enter the same mode.",
   "at": "controls.button_oct_up[12]"
  },
  {
   "round": 1,
   "error": "5 One update mode",
   "fixed": "Named the shared update mode and retained the safe-mode timing distinction.",
   "at": "modes[27]"
  },
  {
   "round": 1,
   "error": "5 One update mode",
   "fixed": "Used the same mode name for both hold paths.",
   "at": "control-maps/x0x.md: Startup and recovery"
  },
  {
   "round": 1,
   "error": "6 Downgrade version scope",
   "fixed": "Replaced the broad 1.0.x claim with the feature introductions documented for 1.0.7, 1.0.8 and 1.0.9.",
   "at": "switching_note.going_back_a_version"
  },
  {
   "round": 1,
   "error": "6 Downgrade version scope",
   "fixed": "Named the intermediate feature introductions and backup-compatible versions.",
   "at": "control-maps/x0x.md: Going back a version"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Stated the REC-on flush and the resulting save of FACTORY RESET defaults before autosave.",
   "at": "saving_note"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Warned to back up before the reset, because a later stopped backup saves the reset state even with REC on.",
   "at": "switching_note.back_up_first"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Added REC-on and reset-state behavior to the backup entry.",
   "at": "controls.jack_usb[1]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Added the stopped REC-on flush and the reset-overwrite consequence.",
   "at": "overwrites_without_asking[2]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Added backup flushing as another way the reset can replace the saved project.",
   "at": "disagreements[0]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Added REC-on flushing and the advice to back up before FACTORY RESET.",
   "at": "control-maps/x0x.md: Back up and restore"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Recorded that stopped backup ignores REC and AUTOSAVE guards and can save pending factory-reset state.",
   "at": "refresh/work/x0x.storage.json: changes[7]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Recorded that stopped backup ignores REC and AUTOSAVE guards and can save pending factory-reset state.",
   "at": "refresh/work/x0x.storage.json: changes[8]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Recorded that stopped backup ignores REC and AUTOSAVE guards and can save pending factory-reset state.",
   "at": "refresh/work/x0x.storage.json: changes[9]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Recorded that stopped backup ignores REC and AUTOSAVE guards and can save pending factory-reset state.",
   "at": "refresh/work/x0x.storage.json: changes[10]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Recorded that stopped backup ignores REC and AUTOSAVE guards and can save pending factory-reset state.",
   "at": "refresh/work/x0x.storage.json: changes[11]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Recorded that stopped backup ignores REC and AUTOSAVE guards and can save pending factory-reset state.",
   "at": "refresh/work/x0x.storage.json: changes[12]"
  },
  {
   "round": 1,
   "error": "S1 Backup saves with REC on",
   "fixed": "Expanded backup advice with REC-on and pending-reset behavior.",
   "at": "refresh/work/x0x.storage.json: changes[17]"
  },
  {
   "round": 1,
   "error": "S2 Next-save behavior (disputed)",
   "fixed": "Added the conditional next-save rule; did not assert all six objects are always rewritten because project_load repopulates the save cache.",
   "at": "saving_note"
  },
  {
   "round": 1,
   "error": "S2 Next-save behavior (disputed)",
   "fixed": "Recorded the contrary call-chain evidence and why the requested unconditional statement is not source-supported.",
   "at": "checker_disputes_refresh[0]"
  },
  {
   "round": 1,
   "error": "S2 Next-save behavior (disputed)",
   "fixed": "Added accurate conditional next-save advice without promising all six rewrites.",
   "at": "control-maps/x0x.md: Back up and restore"
  },
  {
   "round": 1,
   "error": "S2 Next-save behavior (disputed)",
   "fixed": "Documented cache invalidation followed by repopulation and conditional per-object rewrites.",
   "at": "refresh/work/x0x.storage.json: changes[18]"
  }
 ],
 "checker_disputes_refresh": [
  {
   "round": 1,
   "error": "S2 Next save always rewrites six objects",
   "why": "app_restored clears the cache through project_flash_changed, then immediately calls project_load. load_obj marks valid sound known again; load_settings and load_stream also cache valid restored objects. save_buf skips an object when its cached hash matches. A valid same-version sound can therefore be skipped on the next save, disproving an unconditional rewrite of all six or guaranteed loss of every older copy.",
   "evidence": [
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/ui.c",
     "lines": "4669-4673",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4669-L4673"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/project.c",
     "lines": "437-457",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L437-L457"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/project.c",
     "lines": "115-142",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L115-L142"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/project.c",
     "lines": "238-270",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L238-L270"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/project.c",
     "lines": "102-112",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L102-L112"
    },
    {
     "kind": "source",
     "repo": "charlesvestal/fm1-x0x",
     "ref": "v1.1.0",
     "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
     "path": "firmware/src/app/project.c",
     "lines": "202-223",
     "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L202-L223"
    }
   ]
  }
 ]
}