https://blog.xjtag.com/2020/02/revisions-part-1/