..'''..                  
                                                           ..':'..'''''. .......                
                                                          .:  !^:....':!!:.  ......             
                                                           %C^''    .'''':!'    ......          
                       ..:!.      '!^^^!:'                '..        .'::::!:.'..             . 
     ..''           ..   ..::'.+X@@00CXXXX%+'            .!!'         ..''':^'                  
..     'X!         .      !%C^0$@@00CCCXXX%%/+:.         .C%+:.          .':!                   
 ''    .$/        .'.'   %C00+C@0000CCCXX%%/+^^^:.        %0X++:        .''.'!.                 
  .:!%+:!          :'..'.X00/%000000CCCCXXX%%/^^^++!'      /0%/X!..   ...'/!..        ....      
                    ':+X%^XC0@000000000000CCCX%+^+//++:     :+X%+!'''''''.           :'.:+!.    
                       ...%@@00000C000@@@0CX/+^^+^^!^!:!       ':!!.'!/: ...        .+^   ..    
                          '0000CCCC00@@C/+%X/'^/+!^^^^/%%.        %/...:'.:^:        .!::'      
                           +CCCCCCCC0C+^@B@C%/+//!::^00%+!        .^!'.^X' .'                   
                            /CC%XXCCC%^@@CX/+^+//^:'!C%^!+              .'..                    
           .:                ^%+:+XXXX%XX/+^^^+//:''':!!^!.                                     
         .  /^               .'^:+:/XXXX/+^!!!!:'''':!^^^!!!'                                   
         .:!'                ..':^+%/XX%///+^:!^^/%%/+^!!:!!^'                                  
                                '%%CXXX//+^!^%XX%%//+^!::::!^^.              ..                 
                    .:.         '+^/+%%/+^^%XX%%//++^^!!::::!!^'           !^^:'         '^:    
                  .  ^X          :/%+^/%//XX%/+++++++^^^!!::!!:.         ...:'..        .^/^    
                  .:+^!     ..... ..:!!%%XX/+^^^^^^!!::'':!^.            ++^ .'':^!! .+/^^X/:''.
                            '':'.....^%%%%%+^''::'''''':!^^.             ^^^'^'..+!!'.:!^+X%!!:'
                      ::...':!!!'....'+XX%/^!!^:'''''':!^^.              ':'!%^. ..:''::!^!:::'.
            .      :' ' .'.':!!:'....''XXX%/^:''''''':!!^.                   ^0%!''. ...':::'.. 
            .:::::!^!      .''^X+!....'!0CX%/+^!'''::!^++'                     ...    .......   
         ..!/+!:'..::    ...  '+$0^...'!N$0CX%/+^!!!!!^^++^.  ...  .  ..        .::'.           
..........!+/!:'.  .:'...':'...:X++:..'B###M$!+++^^:X/++//%^....................................
''''''''''!!!:'.   .''''''^!/%^0C++'''@###MM/'^:::^!^C+++//%!''''''''''''''''''''''''''''''''''.
''''''''''':'..    .'''''''!^%X$%:'''.%MBNN@''0C:!+!!X+++//%!:''.''''''':!:!+//!:''''''''''''''.
'''''''''''''......'''...'.....'''..!%B#MB0X/+@0X%//+++++++::::^^!:''''+^:..:%X!^!'''''''''''''.
'''.'''''''...'''::.!^^^^^^^^^:'.'%B#M###MMNB$@CX%%/+++^+^''0:+XX%/+:'/C+!:...'':!''..''''''.'..
''''''..''''''..':C@%%%'......../N#MN####MNNB$@CX%%//++^:''XNC$@CX%//^XNBB/:....':'.'''''..''''.
...'''''....:'...:^NC%%'......:$#MNBM###MMNB$@0CX%%//+^:'''BMNB@0CX%/++C@$X!'...''''''....'''''.
''''''''':''!!!+!!/$X%%.......B#MB@$####MNNB$@0CXX%/+^^:'':NMMB$0CX%/++/!^^!!::'''''''':''''''''
..'''''......:^//^^^%%%.......BN$@0M###MMNNB$@0CCX%//+^!'':MMMB$0C%/+++++'.....''''......''''''.
'''........''''.....!+/......./@0CM#####MMNB$@@0CXX%%/+^:':BN0%^:::!!^++:'........''''........''