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