:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;
:::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::`,::::::::::::::::::::;;;;;;;;:::
::::::::::::::::::::::::::::::::::::::::::::::::,:,`,::::,::,.,:,,::::::::::::::;:::;;;;;;;::::
::::::::::::::::::::::::::::::::::::::::::::::::.,,::::,. .,,::::::::::::::;;;;;::::::::
:::::::::::::::::::::::::::::::::::,:,:..::::,,,.:,.`., `,::,::::::::::::::::::::,,,,