Peter X. Gao, Andrew R. Curtis, Bernard Wong, S. Keshav Cheriton School of Computer Science University of Waterloo August 15, 2012 1.