######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
#####################################        `````````        ###           #########        `      #####`####```####```##############################
###############################   `````   `````````````            ````````` ````` `` ``````  `````  ```````````````````   ###########################
#############################  `` ``````````````````````````````` ```` ``````````````` ```````````````````````   ``````` ``  #########################
########################### `````````````````````````````````````````` ```````````````````````````````` ````````````````  ```  #######################
##########################``````````````````````````````````````````````````````````````````````````````````````````````````````######################
######################## ```````````````````````````````````````````````````````````````````````````````````````````````````````  ####################
####################### `````````````````````````````````````````````````````````````````````````````````````````````````````````` ###################
###################### ```````````````````````````````````````````````````````````````````````````````````````````````````````````` ##################
##################### `````````````````````````````````````````````````````````````````````````````````````````````````````````````` #################
#####################````````````````````````````````````````````````````````````````````````````````````````````````````````````````#################
####################````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ################
#################   `````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ###############
################## ````````````````````````````````````````````````````````````````````````````````````````````````````````````````````###############
#################  ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ##############
################# `````````````````````````````````````````````````````````````````````````````````````````````````````````````````````  #############
##################`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` #############
################# `````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` #############
################# ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````#############
################ ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ############
################ ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ############
################ ``````````````````````````````````````````````````````..,,::::,,.``````````````````````````````````````````````````````` ############
############### ``````````````````````````````````````````````````.,;*#nxxMMMMMMxxz#*;,``````````````````````````````````````````````````` ###########
############### `.`````````````````````````````````````.```````.:*zMW@@@@@@@@@@@@@@@@Wxz*:.````.````````````````````````````````````````.` ###########
############### `.`.````````````````````````````````````.````,*zM@@@@@@@@@@@@@@@@@@@@@@@@Mz*,```````````````````````.``.```````````````..` ###########
############### `.``````....````.`...``..`...``````````````:+xW@@@@@@@@@W@@@@@@@@@@W@@@@@@@Wx+:````````.........````..`.```....```````...` ###########
############### `.`....```..````...```..................`,#M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@x+,`.....`.``....``.`...``.....`.```.......` ###########
############### `.......................................*x@@@@@@W@@@@@@@@@@@@@@@@@@@@@@@@W@@@@@@x*........`.....`........................` ###########
############### `.....................................;nW@@@WW@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WWW@@@Wz:.....................................` ###########
############### `....................................*M@@@@@W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WW@@@@x*....................................` ###########
############### `..................................,#W@@W@W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W#,..................................``###########
############### `.................................:n@@@WWW@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W@@@@z,.................................``###########
############### `................................:n@@@@W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WW@@@n:................................``###########
############### `...............................:x@@@WW@@@@@@@@@@@@@@@@WWWMMMMMMWWW@@@@@@@@@@@@@@@@WW@@@n:...............................` ###########
############### `..............................:x@@WWW@@@@@@@@@@@@@@WMMMMMMMMMMMMMMMMW@@@@@@@@@@@@@@WWW@@n:..............................` ###########
############### `.............................,n@@WWW@@@@@@@@@@@@WMMMMMxxxxxxxxxxxMMMMMMW@@@@@@@@@@@@WW@@@z,.............................` ###########
############### `.............................z@@WWW@@@@@@@@@@@WMMMMMxxxxxxxxxxxxxxxxMMMMMW@@@@@@@@@@@WWW@@#.............................` ###########
############### `............................+W@WWW@@@@@@@@@@@WMMMMxxxxxxxxxxxxxxxxxxxxMMMMW@@@@@@@@@@@WWW@W*............................` ###########
############### `...........................iM@WWW@@@@@@@@@@WMMMMMxxxxxnnnnnnnnnnnnxxxxxxMMMMW@@@@@@@@@@WWW@M;...........................` ###########
############### `..........................,n@WWW@@@@@@@@@@WMMMMxxxxxxxxMMxxxxxMMMxxnxxxxxMMMMW@@@@@@@@@@WWW@n,..........................` ###########
############### `.......,........,.........#W@@WW@@@@@@@@@WMMMMMxxxxMMxz########+#nMWMxxxxxMMMMW@@@@@@@@@WWW@W+..........................` ###########
############### `....,,,,..,..,,,,.......,;M@WW@@@@@@@@@@WMMMMMxxxMxn#znxxxxxxxxxxz#+nWMxxxMMMMWW@@@@@@@@@WWW@x:.,,,,,,,,,,,....,,,,,,.,.` ###########
############### `...,,,,,,,,,,,,,,.,,.,,,,z@WWW@@@@@@@@@WWMMMMMxMMn#zxxxxxxxxxxxxxxxxz+nWMxMMMMMMW@@@@@@@@@WWW@#,,,,,,,,,,,,...,,,,,,,,,.` ###########
############### `,,.,,,,,,,,,,,,,,,,,,,,,iM@WW@@@@@@@@@WWMMMMMMMxzzxxxxxnz+nnnnnxxxxxxx#+MWxMMMMMWW@@@@@@@@WWW@M;,,,,,,,,,,,,,,,,,,,,,,,.` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,,,z@WWW@@@@@@@@WWWMMMMMMn#nxxxn#i;;;#nnnzzznxxxxxn*nWMMMMMWWW@@@@@@@@WWW@#,,,,,,,,,,,,,,,,,,,,,,,.` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,,;M@WW@@@@@@@@@WWWWMMMMzzxxxx+i;iiiizMMMMMxnzzxxMxx+#WMMMMMWW@@@@@@@@WWW@M:,,,,,,,,,,,,,,,,,,,,,,.` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,.#@WWWWW@@@@@@WWWWWMWMzzxxxzi;iiiiii#WWWWMMMxnznxMxx+#WMWWWWWW@@@@@@@WWWWW+,,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,:x@WWWW@@@@@@@WWWWWWWnzxxx#;iiii;;;;+WWWWWWMMxxnzxxMx*#WWWWWWW@@@@@W@WWWW@n,,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,iWWWW@@@@@@W@WWWWWWWx#nxx+;ii;;;::::iWMMWMMMMMxxnzxMxx*nWWWWWWW@@@@@@W@WW@Mi,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,#@WWWW@@@@W@@WWWWWWMznxx#;ii;:,,,,,,:xxxnxMMMMMMxnzxxxz*MWWWWWW@W@@@@@WWWW@+,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,:n@WWWW@@W@W@@@@WWWWnzxxz;ii;,.....,;*xxxxxnnMMMMMxnzxMx##WWWWWW@@W@@@@WWWW@n,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,;MWWWW@@W@WW@@@@@@@M#xxMziii:.``.,+xMxxnnnnnnnxMMMMMznxMn*x@@@@W@@W@@@W@WWW@M;,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,*WWWWW@WW@WW@@@@@@@znxxnnM#;,.`.ixMnzzz###zznnnxMMMxxzxMx#z@@@@@@@WW@WW@WWWWW*,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,#@WWWWWWWWWW@@@@@@W#nxxi*xWx;,.*Mxnzzzzzz###zznnxMMMxnnxMn#M@@@@@@WW@WW@WWWW@+,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,z@WWWWWWWWW@@@@@@@x#xx#;ii*xM*iMxznnzzzz#zz##zzxnMMMMxzxMx#x@@@@@@@WWWW@WWWW@z,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,:x@WWWWW@@WW@@@@@@#znxM*iii;:inMMnnz########zz#znnnMMMxnnMx#n@@@@@@@WWW@W@WWW@n:,,:,,,,,,,,,,,,,,,,,` ###########
############### `,:,,,,:,,,,,,,,,,,,:;M@WWWWWWWWW@@@@@@@+nxxiii;;:.+Wxnz+:**+*++##zzznnnMMMxxnxMznW@@@@@@WWWWW@WWW@x:,,,,,,,,,,,,,,,,,,,,` ###########
############### `,:,,,,,,,,,,,:,,,,,:;MWWWWWWW@WW@@@@##W+xMziii;:,,MMnnz+*+*ii**+#zzzxxnxMMMxzxMnnW@@@@@@WWWWWWWWW@M;:::,,:,,,:::,,,:,,:,` ###########
############### `,:::::::::::::::::::iWWWWWWWWWWW@@@@##M#xMz**i;:,:WMnn#++*;;ii*++#zzxMxxMMMxzxMxzW###@@@WWWWWWWWW@M;:::::::::::,:::::::,` ###########
############### `,::::::::::::::::::,iWWWWWWWWWWW@@@###M#xMxnMMMx#zWxnz#+**iiii**+###znznMMMxnxMxzW###@@@WWWWWWWWWWMi:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::*WWWWWWWWWWW@@####x#xMxnMMMMxMMxnz#+***i****i**++#+*#zMMnxMxzW#####@WWWWWWWWWWMi:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::*WWWWWWWWWWW@#####x#xMxnMMWWxMMxnz#+****;;;;i***+#+*+**nnxMxzW######WWWWWWWWWWMi:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::iWWWWWWWWWWW######M#xMxnMMWWxxMMnn#+***;:,;;i***++****iizxMxzW######WWWWWWWWWWMi:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::iMWWWWWWWWWW######M+xMxnMMWWxxMMxnz#+*i::;:,;***++****i;#xMnnW######MWWWWWWWWWMi:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::;MWWWWWWWWWM@#####@+xMxnMMWWxxMMMxnz#*ii;;..i***+*ii*i;;zxMnn@#####@MWWWWWWWWWx;:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::;xWWWWWWWWWM@######+nMMnxMMWMnxMMxxn#**ii;:i**i**iiii;;;nMxzx@#####@MWWWWWWWWWx;:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::;n@WWWWWWWWM@######znxMxnMMMMxxMMMxn#+*******i;;;;;i;;:*xMx#M######WMWWWWWWWW@n::::::::::::::::::::,` ###########
############### `,::::::::::::::::::::z@WWWWWWWWMW######M#xMxnMMMMMnxMMMz##+++***i;,``,;;;::#xMn#W######WMWWWWWWWWW#::::::::::::::::::::,` ###########
############### `,::::::::::::::::::::+WWWWWWWWWMM######@+nMMnnMxMMMnxMMz##+++***i,````:::,ixMxzz@######MMWWWWWWWWW+::::::::::::::::::::,` ###########
############### `,::::::::::::::::::::*MWWMWWWWWMM@####@@nzxMxnxMMMMxnxnz###+++**;.```.::,:zxMx#x#@####@MMWWWWWMWWMi:::::::::::;::::::::,` ###########
############### `,::::::::::::::::::::;xWWMWWWWWMMW##@@@@W#nMMnnMxMMMMx#####+++*i:.```,,,,+xMxz#@@@@@##MMMWWWWWMWWx;::::::::::::::::::::,` ###########
############### `,;:;;::;;:::::;;;::::;zWMMWWWWMMMM@##@@@@nznWMnnxxxMMMz#++++**i::,.,,,,,inMMn+x@@@@##@xMMWWWWWMMWz::::::;;:::::;:;::::;,` ###########
############### `,;;;;:;;;:;;;;;;;;::;:+WMMWWWWWMMxW#@@@@@WznxMxnnxxxMMz##+***ii;::::,,.inxMx#z@@@@@@#WxMMWWWWMMMW+:;:::;;;;;;;;;;;::;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;:;;;iMWMMWWMMMMMM@@@@@@@MznMMxnnxxxMz##+++**ii;::,.,*nxMxz+W@@@@@@@xMMMMWWWMMWxi;:;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;zWMMMMWMMMMxW@@@@@@@xnnMMxnzxxxn#+++**ii;::,,:+xMMxz+M@@@@@@@MxMMMMWMMMMWz;;;;;;;;;;;;;;;;;;;;;;,``###########
############### `,;;;;;;;;;;;;;;;;;;;;;;+MMMMMWMMMMxx@@@@@@WWxnnMWMxnnxx#++**ii;::::*zxMMxz+x@W@@@@@@xxMMMMMMMMMM*;;;;;;;;;;;;;;;;;;;;;;,``###########
############### `,;;;;;;;;;;;;;;;;;;;;;;inWMMMMMMMMxxM@@@@WWWWMxnxWMMxnnz++**iiii*+nxxMMxz+MWWWW@@@@MxxMMMMMMMMWn;;;;;;;;;;;;;;;;;;;;;;;,``###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;+WMMMMMMMMMxxW@@@WWWWWMxnxMWMMxxnzz##zznxxMMWMn##MWWWW@@@@MxxMMMMMMMMMM+;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;inWMMMMMMMMxxxW@@@WWWWWWMxzxMWWMMMxxxMMMMMWMxz+zWWWWWW@@@WnxxMMMMMMMMWn;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;+WMMMMMMMMMxxxW@@WWWWMMWMMnnnxMWWWWWWWWMxnz#zMWMWWWWW@@WnxxMMMMMMMMMM+;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;izWMMMMMMMMMxxxW@@WWWWMMMWWMxnnnnnnnnnzz##nMWMMWWWWW@@WxxxMMMMMMMMMWz;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;;*xMMxMMMMMMxxnnW@@WWWWMMMMMWWMxxnnzzzzxMWMMMMMWWWW@@WnnxMMMMMMMxMMxi;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;;;#WxMxMMMMxMxxnnW@WWWWWMMMMMxMMMWWWWWMMxMMMMMWWWW@@WnnxxxMMMMMxMMW+;;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;;;izWxxxMMMMxxxxnnM@@WWWWMMMMMMMxxxxxxxMMMMMMWWWW@@xnnxxxMMMMMxxxWzi;;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;;;;*xMxxxMMMMxxxxnnnW@WWWWWMMMMMMMMMMMMMMMMWWWWW@WnnnxxxxMMMMxxxMni;;;;;;;;;;;;;;;;;;;;;;;;;;;,``###########
############### `,i;;;;;;;;;;;;;;;;;;;;;;;;;;;*xMxxxMMxMxxxxnnnxW@WWWWWMWMMMMMMMMWWWWWWW@WxnnnxxxxMMMMxxxMx*;;;;;;;;;;;;;;;;;;;;;;;;;;;i,``###########
############### `,ii;;ii;;i;;;;;;;;;;;;;;;;;;;i+MMxxxMMxMxxxxnnnzxW@WWWWWWWWWWWWWWWWWW@WxznnnxxxxxMxMxxxMM*;;;;;;;;;;;;;;;;;;;;;;;;i;;;i,``###########
##############  `,i;;iiii;i;;;;;ii;;ii;i;;;;;;;i+MMxxxMxxxxxxxxnnnznxWW@@WWWWWWWW@@WWxnznnnxxxxxxMxMxxxMM+iii;iiii;ii;;;ii;;iiii;iiii;;i,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii+MMxxxxxxxxxxxxxnnnzzznxMMMWMMMxxnzzznnnxxxxxxxxxxxxxMx*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii+xMxxxxxxxxxxxxxxnnnnzzzzzzzzzzzznnnnxxxxxxxxxxxxxxMx*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*nMxxxxxxxxxxxxxxxxxnnnnnnnnnnnnxxxxxxxxxxxxxxxxxMn*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiizMxxxnxxxxxxxxxxxxxxxxxxxxxnxxxxxxxxxxxxxxxxxxM#iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii+xMxxxnxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxnxxxMx+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*zMxnxnnxxxxxxxxxxxxxxxxxxxxxxxxxxxnnxxnxMziiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*nMxnxnnnnxxxxxxxxxxxxxxxxxxxxxnnnnnxMn*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*nMxnnnnnnnnxxxxxxxxxxxxnnnnnnnnxMn*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*zMMxnnnnnnnnnnnnnnnnnnnnnnxMxz*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*zMMMxnnnnnnnnnnnnnxxMMxz*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii+zxxMMMMMMMMMMxnz+ii;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii;;ii*****iii;;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.` ###########
############### `.iiiiiiiiiiiii*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*iiii*i*iiiiiiiiiiiiiiiiiiiiiiiii;.` ###########
############### `.;*i*i*iiiiii***i**iiiiiiiiiiiiii***ii**i**iiii**i****iiiiiiiiiiiiiiiiiiiiiiii**iiiiiiii*ii**iiiiiiiiiiiiiiiiiiii**i**;.` ###########
############### `.;*i***i*ii**iii*ii*****i**i*i***i*********i**i*i********ii*ii***iiiiii*i*i**ii*i**iii****i***iiiiiiiiiii**ii*****i***;.` ###########
############### `.:*********i**i********i****i*ii*i**********i**********i***i*********i**i*i******ii**i******i******i***i***iii********:` ############
################ `,*****************i***************i****************i*****iii***************i******i**********************************,`  ###########
################ `,i+*********i**************i***************************************************************************************+;.` ############
################ `.:++******i*******************************************************************************************************++:.` ############
################ ``,i#**************************************************************************************************************#i,`` ############
################# `.;+z************************************************************************************************************z+;.`##############
##################``,i#z**********************************************************************************************************n#i,``##############
################## `.:*zn********************************************************************************************************nz*:.`  #############
################### `.;+nx+****************************************************************************************************+xz+;.`   #############
################### ``,;+nxz**************************************************************************************************zxz+;,``################
#################### ``,;+zxxz**********************************************************************************************zMxz+;,`` ################
##################### `.,;+znMMn#****************************************************************************************#nMMnz*;,``` ################
###################### ``,:*#zxMMMxnzz###z##########################################################################zznxMMMxz#*:,`` # ################
####################### ``.:;*#znxxMMMWWWWWWWWWWWWWWMWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWMWWWWMWWWWWWWWWWWWWWWWWWWWMMMMMxxnz#*;:.`` ###################
#######################  ```,:;*+#zznnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzz#+*;:..`  ####################
#########################  ``..,;;i**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**i;;,..`` ######################
###########################  ```..,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;::::::::::::::::::::,,..```` #######################
############################    `````................................................................................`````     #######################
############################ ###    ````````````````````````````````````````````````````````````````````````````````````  # ##########################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
##############################################################  ######################################################################################
##############################################################  ######################################################################################
##############################################################  ###########    #######################################################################