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