Contributed by Jan Maack
Contributed by Pavel Kedich
Contributed by Ryan Heape
Contributed by Stephen Coles