Contributed by Cassidy Reynolds
Contributed by Johannes Stoll
Contributed by Keita Yamada
Contributed by Martin Piñeyro