Disclaimer: This code was written years ago. I did try to clean some classes recently, but it's still a bit messy. For my most recent codes, please refer to other repositories.