Created by Yixiao Xu
Contributed by Nikolas Wrobel
Contributed by Robyn Mays
Contributed by Alain Papazian
Contributed by Dominique Panczuch