This took an insane amount of time to finish