abstract srecord noeq Sleeping(Timestamp targetTime, Runnable action) is AutoCloseable { long remainingMS() { ret targetTime.minus(tsNow()); } }