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