.......................................................................................................... ... ..   ....        ........    ......  .........
.......................................................................................................... ...   .. .          ........      .....  .........
................................................''''''''''''''''''''''''''''''''''''''''''''''''''........ .....              ....   ...     ...... .........
.................................'...''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''. ....               .....  .............. .........
.........................''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''....''''''''''''''''. ... .            ..........     ........ .........
...................''''''''''''''''''''''''''''''''''''''''''''''''''''''''''....'.....'''''''''''''''''..  .....     ............................. .........
............''''''''''''''''''''''''''''''''''''''''''''''''''''''''',;;;:,''.........     ''''''''''''.... ..   .... ............................. .........
.....''''''''''''''''''''''''''''''''''''''''''''''''.....''''',;;;cloolloll;'..'...       .''','''''....... .. ..      ...............             .........
'''''''''''''''''''''''''''''''''''''''''''',,,,,,,,,..,:::,,;;.:lloclclllcl:,',;;:::,..'...,,,''''..........              .............'''''................
''''''''''''''''''''''''''''''''''''',',,,,,,,,;;:::::'.'cod:ll;:dlc;;;:cc:c:,,,,:;:::,,:c;:;,','.........  .  ..        ..''''''''''''''''''''''............
'''''''''''''''''''''''''''''',,,,,,,,,,,;;;;:::lloolcc,.,oxkllc;l;:::;:c:::;;;;;:::;;,,;:::l::lc;;'.....        ... .. ...',''''''''''''''''''''''''....... 
'''''''''''''''''''''',,,,,,,,,,,,,,,,;;codoooollxxxkdol.':oxollcccloc:lc:c:c;;:::c::,,;;:,.;::cloxl:,'.     ..  . ....... .','.','''''''''''''''''''''''....
''''''''''''''',,,,,,,,,,,,,,,,,,,,,,:ldxxolcodxoodxxxod;',oddollcocllolcl:cl:lcll:;:cccc,..,;;:;codll:.     ....  ...'. ...','.',,,,,,.'''''''''''''''''''. 
''''''''',,,,,,,'''''''''''''''''';::okkxocc::ooooloxxdd;,;odddollollddloccolollcc;:cclc:''',;,,::c;lddc'.   .... ......   ..'..',,,,,''''',''.''''''''''''..
''''',,,,,,,'...............'''',:cldxdoollclclolclodxxdl:'dkkddclloddooolloololl:clccl:,';:;:c;;;,;.;cl:,'. .....   ... ...... .,,,,,,'',,,,'.''''''''''''..
,,,,,,,,,,,,'''''.'....'''''',;:cldxkOxlllddolcllc:loxxdo:'dxxdocllddoollllllloolcclll:;;:ccclc:,,,',',,'',......    ..   ....  .,,,,,,..,,,,''''''''''''''..
,,,,,,,,,,,,,.'.....  ....,:oxdddddooxxodoocllclll:codkooc;oxddocllooolllclcclollclll::ccc::c:;;:,,,''''''.';::.     ..    .  ....'',,,..,,,,,'',,''.'''''''.
,,,,,,,,,,,,,........ .,:odxkkkxxxddolddoolccllllll:loxdol:ldodoccccllcclccccllccccc:c:::::cc:cl:,,'''',,'.';cll,.         ...... ........,,,,..',,''.''''''.
,,,,,,,,,,,,,.''.....'cdxxkkxxxxxddxxoolclcccllllll:llodollcoloocc::ccccc::::c:::c::::::;;:c::c:c:;,,'''''.,,,;,'.    .'.  ....  .,...'......'...,,''.''''''.
,,,,,,,,,,,,,'...  ,lddddddooooooooddxocccllllllllllcclllcccccll::::::::::;;;;;;::;::;;;;;::cccc:;;;,,,,''''',''....   ... ....  ....','........',,''.'.''''.
,,,,,,,,,,,,,'....':loooooollllllllloddlcclclllllllcc:::::::::::;;;;;;:::;;;;;;;;;;;;;;:::cccccc::;;;;,,,,,'''......  .... ...   ......''..''....',.....''''.
,,,,,,,,,,,,,'..,clllccclllolccccccllloolcclccccccc:::;;;;;;;;;,;;,,,;;;;;;,,,,;;;;;;;;:cccccccc:::::;;;;;,,,'',:'''''..... .    .......,,'............'.'''.
,,,,,,,,,,,,,'.:oolccccccllllllc:::ccccllcclc:c:::;;;;;;,,,'''.................,,,;;;;:::::ccccc:::::::::;;,,,,;;;::::,....  ..'','....'''...........'''.'''.
,,,,,,,,,,,,,,cdocccccccclllcccclcccccc::::::::;;;;;,,'......     .. .............,;;;;::::cccccccc::::::;;;;;:;;;:::c:'...  ..........................  ...'
,,,,,,,,,,,;;cllcccc:cc:ccllllccccccllc::::;;;;;;,,'...     ......'''''''',''.......',;:;::::ccccc:::::::::::ccc:c:::ldo;'...................................
,,,,,,,,,,,:llc::::cllcclccllccccccc:ccc:;;;;;,,'... ......',,;,,,,,'''''''..''.......',;;;::::::::::::::::cccc:;;;;;:xdc,...... .....   .........''.........
,,,,,,,,,,;cccccc:::ccllccc:cccccc:::::::;;;,'..  ....',,,,,,,;:,,;;;;:;:;,'''......'....,;;;:::::::::::::::c::;,;,,,:xOo:;'.   ......           .           
,,,,,,,,,,;;;;;;:c;;::cclccc::cccc:::;;;;;,'.......',,;;,,,;;::::;;::;;:::;;,,,,''''..'...',,;;;;;;;;;;;:::::::;;;;;:cokxl::.                              ..
,,,,,,,,,,,,,,,'..';;:ccccc::::::cc:;;;,,'.....',;;,,,,,,,,,;:cc:ccllooolllcc:c::c;,'.......'',,,,,,,;;;;;;;::ccc::ccldkxolc;.               ...   ..........
,,,,,,,,,,,,,,'..  .'cllccc::::c::::;;,'......,;:;;,,,'',,,;;:lollooddxxdxkxkddxdoc;;;'..'...'',',,,,,,,,;;;::::ccc:ccldxxoo;...          ...                
,,,,,,,,,,,,,'...    ..,ccccc::cc;;;;,'.....,;;:::;;,'',;;;:looddxxxkxxkOkkkxdddoolc;,'...'....'',,,,,,,,;;;::::::::::ccoc:;,............                    
,,,,,,,,,,,,'............'cccc:::;;,''....,,;;:cc::;;;;;:cccoooxkkOkOkkkkkxddollloc::,''...'.....'',,,,;;;;;;;::ccc:;,''',,;;'...............................
,,,,,,,,,,,,'...........  .';cc:;;,'....';::c::::::;clllollodddxxOkOOOkkOkxxdollloccc:;,'.........',,,;;;,;;;::cc::::;;;:odlc,...............................
,,,,,,,,,,,,,,,,''........ ..,;;,''...';cllool:::::clloodddxdkOkkxxOOkkkkkkxxxdololccc;;''.....  ..'',,,,,,;::lcc;,,,,,;lddc;'...............................
.,,,,,,,,,..'',;;,,'......  .........':oodkkxolc:cclodooddxxkkkOkkOOkO00OOOkxxdllllllc:;;,'''..  ..',,,,,,;;;;;;;,;;,,;:okdl::'..............................
 .,,,,,,,'...,,;;;;;,,....       .  .:odkkOOkdoccllddddxxxxkOOOOOOOOOOO00OOOOkdlllllllc:;;,,,'... .'',;;;,;;;;;;;;,,;;;:oxxdlc'.............................'
  ',,,,,.  ..,;;;;;;;;;,'..         ,ldxkkOOkxooxxdxxxkkOOOOOOOOOO0OOO0O0kOkxkxdooooollc;;;;;,,'....,;;;;;;;;;,,,,,,,,;;:odol:,...........................;;;
  ',,;;;.    .;;;;;;;;;,,'...      'codxkOOOxdoddxkkkOkkkkkO00OOOkOO0OO000kOxxxdoddddllc:;;,,,,'....',;;;;;,,,,,,,,,,,;;:oddoc,.........................,;;;;
  .......  . ...............       ;oddxkOOkxddddxOOOkkOxxOkkkOkOOkO000K00OOkdddxxddolcc::;;;,''. ..',;;;;,,,,,,,,,,,,,,;:lool;''.....................;;,;;;;
                ..                .:oddxkOOkddxkkkOOkOOkkxkkxxkkxkkkOkOO00OkkxxxkOkxdllc::;;,,,'. ..',;,;;;,,,,,,,,,,,;;:cloo;.'....................';,;;;;;:
                                  .:lodxkO0OkxkOOkOkkxkOkkxxxxxkxxdxkkxOkkkkOOOkkkkxxool:::;;;,'. .''';;;;,,,,'''''''',;:ccoo:,...................';,,;;;;:::
                                  ,cldxxkOOO0OOO000kkkxkkkkdxxddxxxkOOkkkkkkkkOkkxkkddollcc:;;,'. .'',,;,,,,,,,,,;;;;::cclool:'..................,;,,;;::::::
                                  ,clddxkO0O00000KKKOkxkkxkdxxdddxx0OOOOOO0KK0Oxxxxxddollclcc:;'...''',,,,,,,;;;,;::cc::;,;::;'.................;,,;;;;::::::
                                  ...'cdO000000000KKKKkkkkkxkxxxxk0xxxxxkOOOKXK0xxxdoooolcllc:;'....''',,,,,;;;;;;;:::;;,''''',...............';,,;;;:::::ccc
                                    ..,:lk000000000KKXK0OOOOkxxO0KOkOKXKkxk0O0XXKOxdololc:cc:,'....'',,,,,,,;;,,'''''''''','.................':,;;;::::::cccc
                                     .',:lxkkO000000KKXKK00OkkOXXXK00K00xxxk0k0XK0kdlllcc;:;,'.. ..'',,,,,,,,,,,'',',,,,,,,,.................:,;;;::::::ccccc
                                      :c'',:cdxk0000KKKKXXKXKKXXXXXXXXX0OxdxOOx000ko:c:;,,,,''.  ...''''',,,,;;,,'',,;;::cc,................;,;;;::::::c:ccll
                                     .kOxc';::ldkO00000KKXXXXXXXNNNNNNNOXXOdxkdOOOkl:;,,.......  ..'''',,,,,,,''',,;::ccccll'..............;,;;;:::::::cccccl
                                    .dOOOxo;:cldxO00000KKKKKKKKXXXXNXXX0XXXkdxdOOOko:,,'......   ..''''',,,,;;,,,,,,,,;::::,'.............,;;;;;:::::::ccccll
                                    ckOOkkxc,:ldxkO0000000KKKKKKKXXXXXKKK0Okoddk0kxoc;,,......  ..'''''',,,,;;''''','''.''...............,,,;;;:::::c::ccccll
                                   .okkkxxdl;:ldxkOO00O00000KKKKKXXXXXXX0000xdlxOkkxoc;;,;,,'.   ..''''',;;;;;,,,'''''''''...............;,,;;;:::::::cccccll
                                   .okkxxxxo::ldxkOOOOOOO0000KKKKKKKK0K0OOOkdldOOkkkxdoc:;::;.. ...'''',;::cccccc:;''''.................,,,;;;;:::c:::cccclll
                                   .ldxxxkOxc;codxkkOOOOOO000000KK0K0xxxxdoodOOOOkkkkxxxddodol,....''',,''..',;;'.......................;,,;;;;::ccccccccclll
                                    .,;:;:cll:;codddxkkkOOO0000000000OxddxO0000OOkkOkkkxxxxxxdl,.... .            .....................,,,;;;;;::::::::cccccc
                                           ,::,;:looodxxkkOOOOOOO00OOOOkkkOO000OOOOOOkkkkkxkxxo:'.               ......................,',,;;;;;;;::::::::ccc
                                            .'',:looloodxxkkkkkkkOOOkkkkxkOOOOO0OOOOOOkkkkxkkxdl;.                ....................''',,,;;;;;;;:::::::ccc
                                             .;;,:ooooloddddxxxxkkkkxxddxkkOOOOO0OOOOOkkkkkxxxxdc,.                ...................,'',,,;;;;;;;;::::::::c
                                               .,':loooloooodddddddooolodxkOOOOOOOOOOOOkkkkkkxxdoc,.                ..................''',,,,,;;;;;;;;:::::::
                                               ',,,:loolllllllllcc:;::lodxkkkkOOOOOOOOOOOOOkkkxxdoc,'.               ................'..''',,,,,;;;;;;;;:::::
                                               ;c:::cllllcc:;;,'...';:coodxxkkkkkOOOOOOOOOOkkkxxdol:,'.               ...............'..''''',,,,,,,;;;;;;;::
                                           ..  .;;:::::;,,'...   .',;:clodddxxxkkkkkOOOOOOOkkxoc:;'.                   .................''''',,,,,,,,;;;;;;;;
                                           .... .......          .',;;:cloddxxxxkkkkkkOkxl:'..                          .................''''''',,,,,,,,;;,;;
                                         ....'                     .'',:cloodxxxxxdoc;..                                  .................'''''''',,,,,,,,,;
                                       ......                        ..';:cllc:,..                                           .................'''''''',,,,,,,
                                     .....                             .....                                                 ...................'''''''''',',
                                   ...                   ....                                                                 .......................''''''''
                                  .                      ..                                                           ..       .......................'''''''
                                                                                                                     ....        . ........................''
                                                                                                                     .....         . ........................
                                                                                                                      ..  .           .......................