Contributed by Shiva Nallaperumal
Contributed by Sarang Kulkarni
Contributed by TypeMates
Contributed by Florian Hardwig