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

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