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