+++++++++++++++++++++++++++++++++osys+/:::--------------------------:-...............------------..-
+++++++++++++++++++++++++++++ooyys+:::::-----------------------------....................---..-....-
++++++++++++++++++++++++++osyso/:::::-----------------------------:--....................-----.....-
+++++++++++++++++++++++osss+/::::-----------------------------------...............................-
++++++++/+++++++++++osss+:::::--------------:----::::-----::-------.................................
o+++++++++++++++ossso/::::::-------------:/osso++//++/+++oooo++/::-.................................
ooo++++++++++osss+/:::::::-------------/osyhyyyssooosyhddhdhhysysss+:-..............................
+++ooo+++ossso//::::::::-------------/+osoosyyyyyhddmmdmmddhyyyhhhhyso:...``````````````............
++++ossyys+/:::::::::::-------------:oo+/+sssydmdddhyyyyyyyyyhhddhhyyyso+:.````````````````````````.
++oyyso+/:::::::::::::--------------//::/++yhhhyso+++++++++++osyhhhhhhysss+-.```````````````````````
yss+///:::::::::::::::-------------::::///oso+++++++++++++/////+osyhddhhyyyy+.``````````````````````
+////:::::::::::::::::------------::::///++++++++//++++++////////++oshdmdddyhy:`````````````````````
//::::::::::::::::::::-----:-:---:///:-.-:///++++//+++++///////////+++oydmmmmmd+.```````````````````
/::::::::::+sh+:::::::-----:::-:://:..--::///++++++++++///////////////+++ydmmmmds-``````````````````
:::::::/+syhdds:::::-:-----:::/oo+-.-:::-:://++++++++++///////////////////ohmmmdhs-`````````````````
:::/+oyhdddmmmd:::::-::-:::::/+s+--::----::/+++++++++++///////////////+///++ymNNmhs.````````````````
/+syhhddmmNNNmm+-::::-------:os+.-:----:/++o++o++++++++++++++//////////++++++ymNNNN:````````````````
hddddmNNNNNmmmmy::::::------/ss..----:++ooooooooooooooooooooooo+++/////+++++++ydNNNo.```````````````
dmNNNNNmmmmmNNmd:-----------/h+..-/oyhhyyysssssoooooossssssyyhhhhysoo+///+++++sdmNNd:```````````````
dNNNNNmmmmNNNNNm/-----------:o:.-+syyhhhhhyyyyssssssssyyyhhhhhhhhyyssoo++++oooohmmNN/```````````````
mNmmmmmmmmNNNNNdo--------...-o-:oyyyyyhhhhhhhhyssssssyyhhhhhhhhhhhhyyyyso++oooohNmNo````````````````
NmmmNNmmmmmmmmmdy-----......:+:oyhhyyyyyhhdhhhysooossyhhhhhhhyssssyhhhhhys++ooshmNm.````````````````
mmmNNNmmmmdhdddyy--.........-+/syyhyyysyhhhhhhyso++osyyyyyyhyyssssyyhdddhhs++oshmNN-````````````````
mmmmNNmddddydhyho/....``````./+syshddddddddyyys++//+sssssyhhhddmmmmddddddhhs++ohmNN/````````````````
mmmmmmmddddhhyyh/o.``````````//shdmmNNmmmddhss+////+ooooshddhhdmNNmmNmmdhhyo+++hNNNo````````````````
mmdmmmdhhhhssssy+s```````````/-+syddddddhyssso/:::/++ooooosyyhhddddddhyssoo++++yNNNy````````````````
mmmmmddhhyhysyhhyy.``````````:.-/ssyyysssooo+/:-::/++oo+++++oosssssssooo+++++++smNNh.```````````````
dmdddddhydddmmdhs+:``````````--:/+oooooooo+//---://++ooo+++++++oooooooo++++++++omNNd-```````````````
dddmmmmmmmdhyo/-.`.``````````-:+oossooooso+/::++ooooooooooo+++++ooooooooo++/+++odmmm/```````````````
mmNmmddyyo/-`     ```````````:/oossooooosso+osyyhhhddhsoosooo+++++ooooooooo++++sdmNm/```````````````
ddys+:-`````      ```````````:+osssoooossssshdddddmNNNhyssoooo++++oooooosoooooosdmdh.```````````````
+:.```           ``-`````````.+ossssooosssyyhdhhddddddddhsoooooooooooossssssoooshdd+````````````````
```            `..`/`````````./oossooooosoooossyhhysyyyysoooooooooosssssyyysoosyhds-.```````````````
`            ``..-./`````````--+ossoooo+++++++ooooooo++++++++ooooossssyyyyyyoosyho/-..``````````````
`           ````.--::````````.-:+ooooo++++oosyyyyyyyyso++++++++osssssssyyyysoosyy+:--...````````````
``  `  ``` ` ```.---/`````````:-/+ooo+++oyhhdddddddddddhysooooooossssssssyysoohho:----.....`````````
`   ```````..``..``./`````````.-::+ooooshdddmmmddddddddddddyssoosssssssssyysoymy/:--....-....```.```
``   ````````.-:-.../.`````````-+:/ooosyhdddhhysssssysyyhddhysssssssssssyyyoshhs/:--..............``
`         ````.-.::--/`````````.++:+oossyyhhhhhyyyhhhhhhhhyssssssssssssyyyyyhhys/:--................
``        ``.```.:-`.+`````````./+/++sysyyyhhhdddddddhhhhyyysssyssyyyyyyyyyhdhyso/:-................
`    `    ``....----.+.````````.-/+++sysyysssssssssssssssssssyyyyyyyyyyyyyhmhyyooo/:-...............
`    ```  `...-:////.+-```````...-/++osssssooo+++++++++oooossyyyyyyyyyyyyhhmy+oo+++/::--............
   ` `````..---:/::/.-/..``..`.``.-:+ossssooo++++++++++++oosssysyyyyyyyhhhdmd+////:://:--...........
``````-.`---.`````` ``/...........`.:+ossssssoo+++++ooooosssyyyyyyyyyhhhhhdmNh/:::-----.............
```........````` ``   :...........`..-+ossssssssssssssssssyyyyyyhhhhhhdhhddddmy::---.-............-+
      `   ` ``` ```   -:...............:+osyyyyyyyyyyyyyyhhhhhhhhddddhhyhddhhddy/----.-:--....:+sdNN
`   ```````````````   `/..............`...:yhhhhhhhhddddddddddddddddhysyddhhhdddy::os+/hdyooydNNNNNm
`` ````````    ```    `/................`..shhhhhhddmmmmmmmmmmmddhhysoyNNmddddhhhyohdmmddmmmNmNNNNNm
````   `           `` `/.................../yhhhhyyhddmmmmmmddddhhysssmNNmmdhhyyyydmmNNmNNNNNNNNNNNN
      ```````````````  -:...................oyhhhhyyyhdddddddddhhysssmNNNmddhyyhdNNNNNNNNNNNNNNNNNNM