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