Finished.  Code needs cleaning up, but otherwise fully functioning