Unofficial University of Waterloo CS350 Notes