 | Choose largest LSN among ToUndo.
 | If this LSN is a CLR and undonextLSN==NULL
 | Write an End record for this Xact.
|  | If this LSN is a CLR, and undonextLSN != NULL
 | Add undonextLSN to ToUndo
 | (Q: what happens to other CLRs?)
| |  | Else this LSN is an update. Undo the update, write a CLR, add prevLSN to ToUndo.
| | | |