sclass PastValueKeeper { long interval; Lock lock = lock(); L> values = synchroList(); *() {} *(double seconds) { interval = toMS(seconds); } void add(A a) { lock lock; if (nempty(values) && eq(last(values).a, a)) ret; values.add(pair(a, machineTime())); } A valueAt_orFirst(long timeBack) { lock lock; long time = machineTime()-timeBack; int i = 0; while (i < l(values) && values.get(i).a >= time) ++i; ret pairA(get(values, max(i-1, 0))); } }