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