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