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