cleanup
flow control is too expensive -- instead, try to emit instructions at the right speed
last optimization for now; programming time down to 2.5s