Copyright (c) 2016 David Frank Copyright (c) Isaac Z. Schlueter and Contributors