Proofread up to section 4 by Jiho.