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