:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::+=#======####=*++::::::::::::::::::::::::::::::++*=####======#=+:::::::
::::::::#=***======*****==###=*+::::::::::::::::+*=###==*****======***=#:::::::
:::::::*#**==::::::+**=###==***=################=***==###=**+::::::==**#*::::::
:::::::==**#+:::::::::::::+=##=*+::+**+:::+**+:+*=##=+:::::::::::::*#**==::::::
:::::::==**#+::::::::::*##=****+:::+**+:::***:::+****=##*::::::::::+#**==::::::
:::::::==**#+:::::::+#=*********:::+*+:::::*+:::+********=#+:::::::+#**==::::::
:::::::*=**#*:::::*#=***********+:::+.-:::.-+:::***********=#*:::::*#**#*::::::
:::::::*#**==:::+#=*************+:::..-:::..-::+*************=#+:::==**#*::::::
:::::::+#**==::=#****************:::...:::..-::+***************#=::#=**#+::::::
::::::::#=**#+#=*****************+::...::-..-::*****************=#*#**=#:::::::
::::::::*#**##=******************-::...::-..-:-+*****************=##**#*:::::::
::::::::+#**#=******************-.-:...-:...-:..+*****************=#**#+:::::::
:::::::::===#******************-.................+*****************#===::::::::
:::::::::*##=*****===*********-...................:********===*****=##*::::::::
::::::::::##*****=:+@@@@@####=*+::-...........-:+*=#####@@@@*:=*****##:::::::::
::::::::::=#+++**=-*@@@@@@@@@@@@+:*..........-*:@@@@@@@@@@@@=-=**+++#=:::::::::
::::::::::*#:::::*+-#@@@@@@@@@@#.*-...........*-=@@@@@@@@@@#-**:::::#*:::::::::
:::::::::+#=******=*.*#@@@@@@#+-=:.............*:+#@@@@@@@*-*=******=#+::::::::
:::::+*=##====******=*:.-::-.:*:................-*+--::-.-*=******====##=*+::::
:::::::::*#=+:+*=#=******:::-.....************......:+++******#=*+:+=#*::::::::
:::::::::+*=##***+++++++:........-=::::::::::=:........-+++++++***##=*+::::::::
::::===**=##=*****=++++++........+*::::::::::*+........:+++++=*****=##=**===:::
::::::::::::+=##===*****+-.......*+::::::::::+*........:*****===##=*:::::::::::
:::::::::+*###=**********:.......=::::::::::::=-.......+*********=###=+::::::::
::::::::*+:::+=#=*********-.....-=::::::::::::=-......:********=#=+:::+*:::::::
:::::::::::::::::*=#==*****-....:=************=:.....:****==#=*::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::