Code and documentation ©2017 C. Byerley (develephant).