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