Author: Yinlang.