xxxxxxxxxxxx      xxxxxxxxxxx  xxxxxxx      xxxxxxx            xxxxxxxxxx    xxxxxx    xxxxxx  
  x::::::::::::x   xx:::::::::::xx x:::::x    x:::::x           xx::::::::::x   x::::x    x::::x  
  xxxxxxxxx:::::x x:::::::::::::::x x:::::x  x:::::x          xx:::::::::::::x  x::::x    x::::x  
           x::::x x:::::xxxxx:::::x  x:::::xx:::::x           x::::::xxxx:::::x x::::x    x::::x  
    xxxxxxx:::::x x::::x     x::::x   x::::::::::x             x:::::x  xxxxxx  x::::x    x::::x  
  xx::::::::::::x x::::x     x::::x    x::::::::x                x::::::x       x::::x    x::::x  
 x::::xxxx::::::x x::::x     x::::x    x::::::::x                   x::::::x    x::::x    x::::x  
x::::x    x:::::x x::::x     x::::x   x::::::::::x            xxxxxx   x:::::x  x:::::xxxx:::::x  
x::::x    x:::::x x:::::xxxxx:::::x  x:::::xx:::::x           x:::::xxxx::::::x x:::::::::::::::xx
x:::::xxxx::::::x x:::::::::::::::x x:::::x  x:::::x   ..xx.. x::::::::::::::x   x:::::::::::::::x
 x::::::::::xx:::x xx:::::::::::xx x:::::x    x:::::x  .xxxx.  x:::::::::::xx     xx::::::::xx:::x
  xxxxxxxxxx  xxxx   xxxxxxxxxxx  xxxxxxx      xxxxxxx ..xx..   xxxxxxxxxxx         xxxxxxxx  xxxx