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