Finalized and cleaned up for the most part, my finalish version