try {
timeStart = thisProperty.key(1).time;
duration = thisProperty.key(thisProperty.numKeys).time - timeStart;
pingPong = false;
quant = Math.floor((time - timeStart) / duration);
if (quant < 0) quant = 0;
if (quant % 2 == 1 && pingPong == true) {
t = 2 * timeStart + (quant + 1) * duration - time;
} else {
t = time - quant * duration;
}
} catch (err) {
t = time;
}
thisProperty.valueAtTime(t);