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