.''..',;'...;;,';c..       .:odooddddoooddddddddddoooollllllccccc:::::;;;;,....'
..';;,';,'..  ..:,.'..   ..,lollokOOkxxxxxxxxxxxxdodxddolllolllccccc:::::;;;'...
.   ... ....... '',ld'....;:ccccxOK00OkkOOOOkkkxxkxdkc:lo:.:ooolllcccc::::;;;;,'
...      .....''..':,..;;c';dkkkk0KKK0kkkOOOOOOOko,cllxd;. .',ldoolllccc::::;;;;
       . .....'....',',:dll,,lxOO0KXXXKOkOOO0000OOxd.ll,..c:c';dddooollcc::::;;;
   .......''.. ...':'.;,;ooc:;,d000KXXXK0O0KK0000OOk,,xkdooOo''oxxddoollccc::::;
..... ......''.,,,,',:;;c,'.d,':dodOKXNNXXK0KKKKKK00l..cookd' .;dkxxddoollcc:::;
:;''...'..';;;''.;::;;'.,;. c.'ccc..oOKXNXKK0KKK00O0Xk;'..,,;:,:kkkxxddoollcc::;
.''........,.',,:;'clc::,;'':.;lxx..;dk0XXNXKKKK000XNNO:.,:dOklkOkkxxxdoollcc:::
:,';cc:;,''.',;;c::.;oolc:,',. ;c0x',colkKXXKK0Ok0XNNNXkc;';xdlkkkkxxddoolllc:::
,..codl:o:;;;:c:c:ldo:kOdxxxod;;oOOocod:codxkOk;'ONNNNNXKkxx0kokkxxxdddooollc::;
'..'ooodocccooolo:oo;.,:c;,,;cllcX0,;olll;. 'oc  dNNNNNX00XK0xoooollllollllcc::;
cc:..;:lccllollodxdc'.:dc, :cllllO.'lolc. .'lkk'.xXXNNNNXNNXkolccccc:::::::::;;;
l;:c:ccdooxxxdl,,;:::c:.cooddld0Od cdc;.....,oOl ;kKXNNWNXK0ko;,;c::::;;::;;,,,,
ldoclooxodxOOx;,odc''';;oOKKkkO00oodc. .,.  ..d;  .;dxO00OOOx,...';,;;:;:;;;;,'.
lllooodxllll:lxxxkOkddxkK0KXXXK0ddxc'.';     .d'      .','.':.  ..',;;;;;,,,,,''
locllcooc,,lkOO0OOkxOKK00K0Okl:oxOkc.;o;.    ;xo'    .  ...,'..   ...',,,,','''.
;loccoddl:lll,odddokxkOOkk:..odok0d:lko'.   .:dOkxol:..'lo:;:cccc::;;,,'........
'.;clodxxxkdokkOOkOOOxo:,;;ldok0Okdxxd',...  .:k00KK0k;'lo:;;:cclllcccccccc::;,,
;''..',coxol:clc;'.,..':lddxOkxOO0doxko;. .    .o0KOdl:';;,;::ccccclolc::;;::c::
':::;;:;,''.',::,'coclxldkdoodkkO0kxdooxd:c,;.cl,;cldl;,,;:lllcccclccloollccc:;;
...,'::lcodkO0OkkOOkdkkdl,..cclodxkdc;::cccc;::lcccclllooooddxxxddddoooooooollc:
...,:;';,:ooddoccl;,:;c;colo;.cccodc:;:clloddxxxkkxxxxxdddddooooollllccccc:::;,,
clloddxdldococxdxxc:dcl;:c:' .ll;,cdO0KXXKKKKXKKKKKKKKK000000OO0OOOOkkkkxddoolc:
,clodddxdolkkOOkkkxo:.'.......,;OXWWNXXXXXKXXXXKKKKKKKKKK0000O0OOOOOkxxxoooloodo
.';:lcldkxlokxolcccooc.. .;clclXWWWNNXKXKXKKKKKKK0KK0K0K000O0OOOOOkkkxxdxxkkxdlc
  .,;',lxdkxo:,lkkkxc,....  ,;0WWWNNNNKK0000K0KK000000O000OOOOOkkkkxxxO0Okxolccc
......,:lxxc,:lokOxc. ..     ,XNWNNNNXXK0000000000OO0OkkOOOkOkkkxkxdx00Okxdolc::
,..  . 'cll;;ccxxl. .:llc.   ;XNNNNNNNNX0OO00K0K00OO0OOkkkxkkxxkxxdxK0Okxdolcc::
,,.......,;'cxxo. .cxOkxl;,,.'0NNNNNNNNNKK00000000OOOkOkkxkkkkxxddoO0OOkxdocc:;;
......'''...:ol. .okkdoooc:,.;xO00KXNNNXX0OOO0OOO0OOOOOkkkkkkxxdddlOOOkxxdlc::;;
      ..';'.'::..cxccdOO00OxxOOxlddk0XXNXK0OkO0OOOOOOkkkkkkxxddoolcdkkxxdolc:;;;
.'..  ....';:;:''l:ccdxxO00xk0Ol;,..kXXXXKK0OOOOOOOkkkkkkxdddoolol::dxddool:;;,;
 ..'''''.   .'',;:.olxldxxkx:coodd:.OKKKKKK0OOkkkxxxxxxxxddoooclc::;ldooollc:;,'
     .,''.....'':c;:ldl:dddcodxol:;.k0000000Okxxxxdddodoooolllcc::;,,coolllcc:,'
 .         .....,;;;::o';odl;:dxoll:lOOOOOOOkxddooooolllllcccc:::;;,,':llllccc:;
....     ......     .,cl:'clcooo:'..,xkkkkkkxdoolclcccccc:::::;:;,,,''.,cllccc:;