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