-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-!!!
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
---!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
---!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
----!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
----!!!-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!--
-------!!!!!!!!!!!!!!!!!!-!!--!-!!!!!--'--!!!!!!!!!!!!!!!!!!!!!!!!!!------
--- ,'--!!!!!!!!!!!!!!!-----------!!!'--,--!!!!!!!!!!!!!!!!!!!!!!!!-------
----  ,'''----!!!!!!----------------,-   ---!!!!!!!!!!!!!!!!!!-!!---------
------'  '------------------------'',  , --!-!!!!!!!!!!!!!!!!!------------
------!--  '-----------'''','--'' ,' ,, '--!---!-!!!!!-!!!----------------
-----------  ''---''----'''''''     ', ------------!--!-!-----------------
---------!-- '  ' ---'-''''''   , '', ------------------------------------
--------------- '  '  '''' '     ''' -----------------------------------'-
------------------'   ''  ,  , ',' ,-----'''''''''''''''''',,'------''''--
------------------ ---   '    ,'' '-' ''' '''' ',  ,,,,            , ''---
---------------------- ,- '''''       ''-----
-------------------------   ,-           '''  --  -----------------------'
-------------------------    -----,'---,---'------------------------------
------------------------ - '-------------------------------------------'-'
----------------------  - ,------------------------------------------''-''
--------------------- '-,---------------------------------------------''-'
--------------------'-------------------------------------------------'''-
---------------------'----------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------