######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
#####################################        `````````        ###           #########               #####`####```####```##############################
###############################   ````     ````````````            ``` ` ```       ``   `      ```   `` ``          ````   ###########################
#############################  `  ```````  ```````````````         ``  ``````````` ``        ``````  `` `````       ```` ``  #########################
###########################  ``         ` ```````````````````````````  ``````````````````````   ``````` ````````````````  ```  #######################
##########################````````````````````````````````````````````````````````````````````````````` ````````````````````````######################
######################## ```````````````````````````````````````````````````````````````````````````````````````````````````````  ####################
####################### `````````````````````````````````````````````````````````````````````````````````````````````````````````` ###################
###################### ```````````````````````````````````````````````````````````````````````````````````````````````````````````  ##################
##################### `````````````````````````````````````````````````````````````````````````````````````````````````````````````` #################
#####################````````````````````````````````````````````````````````````````````````````````````````````````````````````````#################
####################````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ################
#################   `````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ###############
################## ``````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ###############
#################  ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ##############
################# `````````````````````````````````````````````````````````````````````````````````````````````````````````````````````  #############
##################`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` #############
################# `````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` #############
################# ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````#############
################ ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ############
################ ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````` ############
################ ``````````````````````````````````````````````````````..,,::::,,.``````````````````````````````````````````````````````` ############
############### ```````````````````````````````````````````````````,;*#nxxMMMMMMxnz#*;,``````````````````````````````````````````````````` ###########
############### `.`````````````````````````````````````````````.:*zxW@@@@@@@@@@@@@@@@Wxz*:.````.````````````````````````````````````````.` ###########
############### `.`.`````````````````````````````````````````,*zM@@@@@@@@@@@@@@@@@@@@@@@@Mz*,``````````````````````````````````````````..` ###########
############### `.``````....``````..```..`...``````````````:+xW@@@@@@@@@WW@@@@@@@W@W@@@@@@@Wx+:`````````.``````````````.```..`.```````.`.` ###########
############### `.`...````..````..`````.`......`........`,#M@@@@@@@@W@@@@@@@@@@@@@@@@W@@@@@@@@x+,``....````....````..```...````````..`...` ###########
############### `.......................................*x@@@@@WWW@@@@@@@@@@@@@@@@@@@@@@@W@@@@@@x*.......```...``.....``....```..........` ###########
############### `.....................................;nW@@@WW@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WWW@@@Wz:......`..............................` ###########
############### `....................................*x@@@@@W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WW@@@@x*....................................` ###########
############### `..................................,#W@@W@W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WW@@@W#,..................................` ###########
############### `.................................:n@@@WWW@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W@@@@z,.................................` ###########
############### `................................:n@@@WW@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WW@@@n:................................` ###########
############### `...............................:n@@WWW@@@@@@@@@@@@@@@@WWWMMMMMMWWW@@@@@@@@@@@@@@@@WWW@@n:...............................` ###########
############### `..............................:x@@WWW@@@@@@@@@@@@@@WMMMMMMMMMMMMMMMMW@@@@@@@@@@@@@@WWW@@n:..............................` ###########
############### `.............................,n@@WWW@@@@@@@@@@@@WMMMMMxxxxxxxxxxxxMMMMMW@@@@@@@@@@@@WWW@@z,.............................` ###########
############### `.............................z@@WWW@@@@@@@@@@@WMMMMMxxxxxxxxxxxxxxxxMMMMMW@@@@@@@@@@@WWW@@#.............................` ###########
############### `............................+W@WWW@@@@@@@@@@@WMMMMxxxxxxxxxxxxxxxxxxxxMMMMW@@@@@@@@@@@WWW@W*............................` ###########
############### `...........................iM@WWW@@@@@@@@@@WMMMMMxxxxxnnnnnnnnnnnnxxxxxxMMMMW@@@@@@@@@@WWW@M;...........................` ###########
############### `..........................,n@WWWW@@@@@@@@@WMMMMxxxxxnxxMxxxxxxMMMxxnxxxxxMMMMW@@@@@@@@@@WWW@n,..........................` ###########
############### `..........................#W@WWWW@@@@@@@@WMMMMMxxxxMxxz########+#nMWMxxxxxMMMMW@@@@@@@@@WWW@W+..........................` ###########
############### `......,,.....,,.........,;M@WWW@@@@@@@@@WMMMMMxxxMxn##nxxxxxxxxxxz#+nWMxxxxMMMWW@@@@@@@@@WWW@x:.,,..............,,......` ###########
############### `....,,,,,,,,,,,,,.,,...,,z@WWW@@@@@@@@@WWMMMMxxMxn#zxxxxxxxxxxxxxxxxz+nWMxMMMMMMW@@@@@@@@@WWW@#,,,,,,,,,,.,...,,,,,,,,,.` ###########
############### `,,.,,,,,,,,,,,,,,,,,,,,.iM@WWW@@@@@@@@WWMMMMMMMxzzxxxxxnz+nnnnnxxxxxxx#+MMxMMMMMWW@@@@@@@@WWW@M;,,,,,,,,,,,,,,,,,,,,,,,.` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,,,z@WWW@@@@@@@@WWWMMMMMMn#nxxxn#i;;;#nnnzzznxxxxxn*nWMMMMMWWW@@@@@@@@WWW@#,,,,,,,,,,,,,,,,,,,,,,,.` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,,;M@WWWWW@@@@@@WWWMMMMMzzxxxx+i;iiiizMMMMMxnzzxxxxx+#WMMMMMWW@@@@@@@WWWW@M:,,,,,,,,,,,,,,,,,,,,,,.` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,.#@WWWWW@@@@@@WWWWWMWMzzxxxzi;iiiii;#WWWWMMMxnznxMxx+#WMWWWWWW@@@@@@@WWWWW+.,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,:x@WWWW@@@@@@@WWWWWWWnzxxx#;iiii;;;;+WWWWWMMMxxzzxxMx*#WWWWWWW@@@@@W@WWWW@n,,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,iWWWW@W@@@@W@WWWWWWWx#nxx+;ii;;;::::iWMMWMMMMMxxnzxMxx*nWWWWWWW@@@@@@WWWW@M;,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,,#@WWWW@@@@W@@WWWWWWMznxx#;ii;:,,,,,,:xxxnxMMMMMMxnzxxxz*MWWWWWW@W@@@@@WWWW@+,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `.,,,,,,,,,,,,,,,,,,,,,n@WWWW@@W@WW@@WWWWWnzxxz;ii;,.....,;*xxxxxnnMMMMMxnzxMx##WWWWWW@WW@@@WWWWW@n,,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,;MWWWWW@W@WW@@@@@@@M#xxxziii:.``.,+xMxxnnnnnnnxMMMMMznxMn*x@@W@WW@WW@@W@WWW@M;,,,,,,,,,,,,,,,,,,,,.` ###########
############### `,,,,,,,,,,,,,,,,,,,,,*WWWWWWWW@WW@@@@@@@znxxnzM#;,.`.ixMnzz####zznnnxMMMxxzxMx#z@@@@@@@WW@WW@WWWWW*,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,#@WWWWWWWWWW@@@@@@W#nxxi*xWx;,.*Mxnzzzzzz###zznnxMMMxnnxxn#M@@@@@@WW@WWWWWWW@+,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,,z@WWWWWWWWW@@@@@@@x#xx#;i;*xM*iMxznnzzzz#zz#+zzxnxMMMxzxMx#x@@@@@@WWWWWWWWWW@z,,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,:x@WWWWWWWWW@@@@@@#znxM*iii;:inMMnnz########zz#znnnMMMxnnMx#n@@@@@@@WWW@WWWWW@n:,,,,,,,,,,,,,,,,,,,,` ###########
############### `,,,,,,,,,,,,,,,,,,,,;M@WWWWWWWWW@@@@@@@+nxn;ii;;:.+Wxnz+:**+*++##zzznnnMMMxxnxxznW@@@@@@WWWWWWWWW@x:,,,,,,,,,,,,,,,,,,,.` ###########
############### `,:,,,,,,,,,,,,,,,,,,;MWWWWWWWWWW@@@@@#W+xMz;ii;:,,MMnnz+***ii**+#zzzxxnxMMMxzxMnnW@@@@@@WWWWWWWWW@M;:::,,,,,,:::,,,,,,:,` ###########
############### `,:::::::::::::::::::iWWWWWWWWWWW@@@@##M#xMz**i;:,:WMnn#++*;;ii**+#zzxMxxMMMxzxMxzM##@@@@WWWWWWWWW@M;:::::::::::,,::::::,` ###########
############### `,::::::::::::::::::,iWWWWWWWWWWW@@@###M#xMxnMMMx#zWxnz#+**iiii**+###znzzMMMxnxMxzM###@@@WWWWWWWWWWMi,::::::::::::::::::,` ###########
############### `,:::::::::::::::::::*WWWWWWWWWWW@@@###x#xMxnMMMMxMMxnz#+***i****i***+#+*#zMMnxMxzW####@@WWWWWWWWWWMi:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::iWWWWWWWWWWW@#####x#xMxnMMWWxMMxnz#+***i;;;;i***+#+*+**nnxMxzW####@@WWWWWWWWWWMi:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::iWWWWWWWWWWW@#####M#xMxnMMWWxxMMnn#+***;:,;;i***++****iizxMxzW######WWWWWWWWWWMi:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::iMWWWWWWWWWW@#####M+xMxnMMWWxxMMxnz#+*i::::,;***++*i**i;#xMnnW######MWWWWWWWWWM;:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::;MWWWWWWWWWM@#####@+nMxnMMMWxxMMMnnz#*ii;;..i***+*ii*i;;#xMnn@#####@MWWWWWWWWWx;:::::::::::::::::::,` ###########
############### `,:::::::::::::::::::;xWWWWWWWWWM@######+nMMnxMMMMnxMMxxn#**ii;:;**i**iiii;;;nMxzx@#####@MWWWWWWWWWx;:::::::::::::::::::,` ###########
############### `,::::::::::::::::::::nWWWWWWWWWM@######znxMxnMMMMxxMMMxn#+*******i;;;;;i;;:*xMx#M######WMWWWWWWWWWn::::::::::::::::::::,` ###########
############### `,::::::::::::::::::::zWWWWWWWWWMW######M#xMxnMMMMMnxMMMz##+++***i;,``,;;;::#xMn#W######MMWWWWWWWWW#::::::::::::::::::::,` ###########
############### `,::::::::::::::::::::+WWWWWWWWWMM######@+nMMnnMxMMMnxMMz##+++***i,````:::,inMxzz@######MMWWWWWWWWW+::::::::::::::::::::,` ###########
############### `,::::::::::::::::::::*MWWMWWWWWMM@####@@nzxMxnxMMMMxnxnz###+++**;.```.::,:zxMx#x#@####@MMWWWWWMWWMi:::::::::::;::::::::,` ###########
############### `,::::::::::::::::::::;xWWMWWWWWMMW##@@@@W#nMMnnMxMMMMx#####++**i:.```,,,,+xMxz#@@@@@##MMMWWWWWMMWx;::::::::::::::::::::,` ###########
############### `,::::::;::::::;:;::::;zWMMWWWWMMMM@##@@@@nznMMnnxxxMMMz#++++**i::,.,,,,,inMMn+x@@@@@#@xMMWMWWWMMWz:::::::::::::::;::::;,` ###########
############### `,;:;;::;::::;:;;;:::;:+WMMWWWMWMMxW@@@@@@WznxMxnnxxxMMz##+***ii:::::,,.inxMx#z@@@@@@#WxMMWWWWMMMW+:;:::;;;;;:::;::::::;,` ###########
############### `,;;;;;:;;;;:;;;;;;::;;iMWMMWWMMMMMx@@@@@@@MznMMxnnxxxMz##+++**ii;::,.,*nxMxz+W@@@@@@@xMMMMMWWMMWxi;:;;;;;;;;;;;;;;;;;:;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;zWMMMMWMMMMxW@@@@@@@xnnMMxnzxxxn#+++**ii;::,,:+xMMxz+M@@@@@@@MxxMMMWMMMMWz;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;+MMMMMWMMMMxx@@@@@@WWxnnMWMxnnxx#++**ii;::::*zxMMxz+x@WW@@@@@xxMMMMMMMMMM*;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;inWMMMMMMMMxxM@@@@WWWWMxnxWMMxnnz++**iiii*+nxxMMxz+xWWWW@@@@xxxMMMMMMMMWn;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;+WMMMMMMMMMxxW@@@WWWWWMxnxMWMMxxnzz##zznxxMMWMn##MWWWWW@@@MxxMMMMMMMMMM+;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;inWMMMMMMMMxxxW@@@WWWWWWMxzxMWWMMMxxxMMMMMWMxz+zWWWWWW@@@WnxxMMMMMMMMWn;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;+MMMMMMMMMMxxxW@@WWWWMMWMMnznxMWWWWWWWWMxnz#zMWMWWWWW@@WnxxMMMMMMMMMM*;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;izWMMMMMMMMMxxxW@@WWWWMMMWWMxnznnnnnnnzz##nMWMMMWWWW@@WxxxMMMMMMMMMWz;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;;*xMMxMMMMMxxxnnW@WWWWMMMMMMWWMxxnnzzzzxMWMMMMMWWWW@@WnnxMxMMMMMxMMxi;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;;;#WxxxMMMMxxxxnnW@WWWWWMMMMMxMMMWWWWWMMxxMMMMWWWW@@WnnxxxMMMMMxMMM+;;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;;;izWxxxMMMMxxxxnnM@@WWWWMMMMMMxxxxxxxxMMMMMMWWWW@@xnnxxxMMMMMxxxWzi;;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,;;;;;;;;;;;;;;;;;;;;;;;;;;;*xMxxxMMMMxxxxnnnW@WWWWWMMMMMMMMMMMMMMMMWWWWW@WnnnxxxxxxMMxxxMni;;;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,i;;;;;;;;;;;;;;;;;;;;;;;;;;;*xMxxxMMxxxxxxnnzxW@WWWWWMMMMMMMMMMMWWWWWW@WxnnnxxxxMxMMxxxMx*;;;;;;;;;;;;;;;;;;;;;;;;;;;;,` ###########
############### `,i;;;ii;;;;;;;;;;;;;;;;;;;;;;i+MMxxxMMxxxxxxnnnzxW@WWWWWWWWWWWWWWWWWW@WxznnnxxxxxMxMxxxMx*;;;;;;;;;;;;;;;;;;;;;;;;i;;;i,` ###########
##############  `,i;;;ii;;i;;;;;;i;;;i;;;;;;;;;;+MMxxxMxxxxxxxxnnnznxWW@@WWWWWWWWW@WWxnznnnxxxxxxMxxxxxMM+ii;;;iii;;i;;;;i;;;iii;;i;i;;i,` ###########
##############  `,i;ii;iii;iiiiiiiiiii;;;iiiiiii;+MMxxxxxxxxxxxxxnnnzzznxxMMMMMMxxnzzznnnxxxxxxxxxxxxxMx*i;iiiiiiii;iiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiii;ii+xMxxxxxxxxxxxxxxnnnnzzzzzzzzzzzznnnnxxxxxxxxxxxxxxMx*iiiiiiiiiii;iiiiiiiiiiiiiiiiiiii,` ###########
##############  `,i;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*nMxxxxxxxxxxxxxxxxxnnnnnnnnnnnnxxxxxxxxxxxxxxxxxMn*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiizMxxxnxxxxxxxxxxxxxxxxxxxxxnxxxxxxxxxxxxxxxxxxM#iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii+xMxxxnxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxnxxxMx+iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*zMxnnnnxxxxxxxxxxxxxxxxxxxxxxxxxxxnnxxnxMziiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
##############  `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*nMxnxnnnnxxxxxxxxxxxxxxxxxxxxxnnnnnxMn*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*nMxnnnnnnnnxxxxxxxxxxxxnnnnnnnnxMn*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*zMMxnnnnnnnnnnnnnnnnnnnnnnxMxz*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii*zxMxxnnnnnnnnnnnnnnxMMxz*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii+znxMMMMMMMMMMxnz+ii;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii;;ii*****iii;;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,` ###########
############### `,iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.` ###########
############### `.iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii;.` ###########
############### `.;*i*iiiiiiiiiiii**iiiiiiiiiiiiiiii*iii*i**iiii**ii***iiiiiiiiiiiiiiiiiiiiiiiii*iiiiiiiiiiii*iiiiiiiiiiiiiiiiiiii*ii**;.` ###########
############### `.;*i**iiiii**iii*iii***ii**i*i*iii*****iii*i**iii***iii**ii*ii***iiiiii*iiiiiiiiii*iiii***i*iiiiiiiiiiiiiiiiii***iii**;.` ###########
############### `.:*i**ii***i**i*******iiiii*iiiiii*******i*iii*iii****ii***i*********i**i*i******ii**i*****ii*ii**iiiiiii**iii********:` ############
################ `,*****************i*****i*******i*i*************ii*i*****iii***i********i**i*****iii************i*i********i*********,`  ###########
################ `,i+*********i****i******i**i***********************************i****************i*i*************i***********i******+;.` ############
################ `.:+*******i*******************************************************************************************************++:.` ############
################  `,i#**************************************************************************************************************#i,`` ############
################# `.;+z************************************************************************************************************z+;.`##############
################## `,i#z**********************************************************************************************************z#i,``##############
################## `.:*zn********************************************************************************************************nz*:.`  #############
################### `.;+nx+****************************************************************************************************+xz+;.`   #############
################### ``,;+zxz**************************************************************************************************zxz+;,``################
#################### ``,;+zxxz**********************************************************************************************zMxz+;,`` ################
##################### `.,;*znMMn#****************************************************************************************#nMMnz*;,``  ################
###################### ``,:*#zxMMMxnzz##############################################################################zznxMMxxz+i:.`` # ################
####################### ``.,;*#znxxMMMWWWWWWWWWWWWWMMWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWMMWWWWMWWWWWWWWMWWWWWWWWWWMMMMMMxxnz#*;:.`` ###################
#######################  ```,:;*+#zznnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzz#+*;:..`  ####################
#########################  ```.,:;i**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**i;;,..`` ######################
###########################  ```..,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,..```` #######################
############################    `````...............................................................................``````     #######################
############################ ###     ````   ````````````````````  ``````  `````````  ````   ````````  ````````  ````````  # ##########################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
##############################################################  ######################################################################################
##############################################################  ######################################################################################
##############################################################  ###########    #######################################################################