Copyright (c) 2012-2023 Brett M. Docherty