Do not use or edit this code without permission from the author.