Initial commit (contains parts 1-4 of 1st assignment)