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