########       ######       ######
##     ##     ##    ##     ##    ##
##     ##     ##           ##
##     ##      ######       ######
##     ##           ##           ##
##     ## ### ##    ## ### ##    ## ###
########  ###  ######  ###  ######  ###