Some of the lecture notes are based on slides developed by Keith Schwarz, Kim Hazelwood and Saman Amarasinghe. Thanks!!