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