.   :^..                                                                                                                                                          ..    
                        .   !X%!. .                                                                                                                                                    '!+%/.   
                         .  ./XXX^'....                                                                                                                                             .:+/%%X%.   
                        ....'+^XXCX+:.':'..                                                                .'':''.                                                                .!/%%%%%C!    
                        ..'':%^^%XXCC+::':'''.                                                     ..:!!'':::!:!!!::...                                                        .'+%%%%///%X:..  
                        .''''++^+XXXXCC+::'':::'''.        ....                               .:::!!!^^!:::'.'':!!!^^!!::''..                                                .:/XXXX%%%/%CX!:'. 
                         '.:::%!^%XXXXXCX/!'.':'':!!!'.   .':'''. ..  ..  ........  ..'. ....:!^^!!:!:::'..   ....'::!^!!!!!!'.                              .'          . .!/%XX%%///++%X+''.. 
                        . ':'!//!+X%%%XXXCC%+:'':::!!^^!!:':::!!::!!:':!!!!::!!!::!!^!^!!!:!^++^!::'''':.         ..''''!!!^^^^^!!!!:::'''..''' . ..      ..':''..     . .!/%%%%%%%%//+/X%!'.   
                        . ..''://+%X%%%XXXCC0C%^:'':!!:!^!!!!!^^^+//+++%++++^^+^+^^^^^^!:::^+++!!:'....'          .....'!^^^^^^^+++^++++^^^!!!:::::....''''''........ .'!+%%%%%%%////+/X%/!..   
                        ... .'!!/%/CX%XXXXX%%C00X+!::!!:':!!!^^+//%%%//%%%/++^^^!!!!!!!::'::!^!!!'...  .          ...'.'!^^^!!^^+^^^++++^^^!^!!!!!!!::::'''....... ..!+/%%%////++^+++/XXX+:'.   
                         ''.   '^XXXCXXCCCX%//%X0@0/^!!:'''::!!^^+/+//%%%X%+++^!!:^!^!^':'':::!!:'......      .......'':'!!!!!^^^^^^^^^^!!!:!!!!!!::::''.'...     .!////////%///////XXXX/'..    
                          .::!''':+XCCCCCCCX%%%%%X0@0%^!'...''::!^^^^^++/%/+!^^!^^^^+^+:::::''!'::'::''       .':'':!:!!:::!:!!!^^^^+!!!!!:':::!!:'''''...       :+//////+//%%%%%%XXX/%%:''     
                             .':!^^^/CCXXC0CXX%/%%%X000%^:'   ..'::!!:!!^^^!:!!!^^^+^^!^:!!:'''::':!^!:...    '.:!^+/^^!!::::':!!!!+^^!!!:''''::':'''...       '^+//++/////+//%/%%/+^+%+:..     
                                    .^XXXXXCCXX%%////%XCX%+'.    .''':'''':''':!!^++!::^'!^:..'''':!!!'....   .:!^^///+^^::::'':::!!!^^^!::'.''''''....     ':^+//++++++++//////+^^!^//'..      
                                     .:XXX%%C00CCX%%%%////++^:'...   .'.':::'!:!^:!!::::':!'...':!:+!^^.'.  .':+/++++//^+:::'':!::!!!!!!!^:''.. .........'::!!+++++^^+++++++^!!!!:!!+/:      .  
                                     ..^X%XXX%CCCXX%%///%%%/++!^++^!!:'.'!^^^!!!^^!!:!!:::'...':::^///+'..  '!^%XX+^+%/^^!!'':!!!:!!:::!!!!::''...':':!!:!:!^+++++++^+++^^!:::::::!^+'    .'    
                                   .  .:XX%/%%%/%X%%%//////////^!!!:::'''!:::!^!!+^!!^^!!!:' .'.'!++++^!'. .!+/CX%%+++^+^!!:::!!^^^^!:::::!::::'''!!!:::::^+++++++^+++^!:::::::!!^+%!'::::.     
                                   ...''^C%%//////%%%%%/+/+++++++^+^^!:''''':!:!^!!^!^^^!^^:'.'':^^!!!++^' .^%XC%/%%+^^!::::!!+^^^^^!!!::'::'':':'''''':!^^^^^^++^^^!!!:::!:!!^^+/%%+!'.        
                                    ..'^^%XXX%X%X%X%%X%%%///^!^+^!!^!!!::::::!^!^!!:!!^^^!!:'''::^^!:!^++'..!%XX%//+^!!::':!^^+^^!^!!::!':':'''':''''':!!^^^^^+^^^!!!!!^!^+++/%%%%X!'           
                                   ..'':!/%%XC0CCXXXX%XX%%%//+^!^^!!!!:::!^+!^^+^:^!!^^!^+!!::!:'!!!!!!/+: .'+%%%%+^:::':':!^^+^^!+!^!.::!!:'''''''':!::!!!!^^^^^+++++++++//////%%^'.           
                                       ..'+%%%%%%XXXCCXXXX%++++^^^!!!!!^^+!+++++!!!!!!^+!^!!+^+!:'''!!+/+'..'+/%%/^!:!!:::!!+^+!!^^!^^:!!':::::':'..::::::!!!!^^^^++^^+++++///%%//:.            
                                        .'^/%%%///+/%XXXXXX%/++^^!^^^^^!+++^!^++^++!:+^^!+//++%+!:::!^/%+' .:+/%%^^!!++/++!^^^^!!!!!++^::'''!!!!:':':'':::!!!!^^^++++++++++/%X%%/+.             
                                        .:+/%%/+^!!^^+/%X%%%/+++^^^^^//+^+^+!//^//^+!!^!^+%%%/X^^+:::^//^'..:^/%/!!!!/+X%%/^:!:!!^:^/^^!!'''::!!!!!!::'':::!!^^^^^++++++++//%/%%%/!:.           
                                    ....'!^+//+^!::::!!++////^!!^^^^^^+%++/++/X%/%/+!:!^!+%XXCX%%/!::!^/!'..'^/%%^!^/X/XXX/+:!''!^!^^+/^!:''::':!!!!::''::!!!^+^+++++^+^^+////%%%/^^'.          
                                   ..'!!^!^^!!!!:::'''!!^^^^^^^^^+++++^^+++//%XC0X%/^:'!!+%C00XX%/!:::^^:...'!+%X^^+%CXCCC%+:'''!++^%%/+!::::'''::!^!::::::!!!^+++++++++//////%/%/+^:'.         
                              .''''''!^^^^^++^!::':::::^!!!!!^++^++++/++++^+/%XCCCC%^!:::+X0@@CCX/+::!^^'...'!/%C%/+%C0@00%^'..'^/%XX%/+^!!:::'''':::!!!!::!!!^++++////+^+++%%+/%++^'.          
                             ':!!^^^^^!^^^^^^^^!::':::''!!!!!^^+++++^^+++++++/%C0CCX+^:::+C0@0CX%++^!!^:''.':!/%XX%/%0@@@0%!..':+%XXX%/^!!^!!!!::'::!!!!::!!!^!!!^++++^!!^^!+/////+^!:''...     
                             ..':!^^^^^!^^^^^^+^!!:::'':!^+^^^^++++++//+++/+%%%XXC0C%^!:!+C0@0CX/+++^+^!!.'::!/%CCX%X00@$@%!'':^/XXC%/+^!^^!::::!!!::::!!!!!!:!!!::!^^^^^^^^+++//////+!:'.      
                           .'::!^!!!^^++^^^^++^+^^!!!^!!!!!!^+++/////%%%%/%//%XXXXCCC%!!!+C@00C%%++^++^:!:::!!+XCC%%CC0@$@X!::!+XCCX///%/+^^!+++^^+^^^^^!!!!!!!::::!^^^+++/////////%%/^!'       
                         .':!!!!!!!^^^^^+++++/++^^!!!!^++^!^^+++/%%XXXXX%%%%%%/%XXXCCX/^^%C000CX%//%%+!!:!::!+/%XC/%XXC0@0X^!!+XCXX%%%%%/+++++++/%%/+^^^!!!:!!:!!!!^+++++/////////////+^.       
                        .'':!^^^^^^^^^^^^+++++++^^^!!!++++^^^^+///%%%%//++++++/%%XXCCCXXXC0000%/+/%%%^!!!^!:^+%%X%/+XXXC0CX%//XCCXXX%%%//+++/%%%%%%%//++^^^!^^^!!!!^++++++++++++//%%%/+^!'.     
                     ... .:!!!^^^^^^^^^^^^+^^^+^^++++^++^^^^^^^!^^^^!!:'...'....':^%XCCCC0000CX+!+%//^!!!^'!++//C/+^+/%XX%X%%XXX%/+!:'.  ...':!+%%%%%%//+^^^++^+^^^^^^+++++++++++///////+^:.    
  ..            ..'.'..''!!!^^^+^^^^!^^^^^^^++++++/++++^^^!!:::::!!::'.  .:'.       '^%XCC00C0C/^^+//++:::!^//%%X+^^!++%%%%%%%%^:.         .:' .:^/%%%/++++///%//%+++++++++/+//////%%%%%%+^:.   
    ..  .         .''::!^^^^^!^^!!^^^!!!!!^^^^+////++^!!:::::!!^^+^^!.   ...          .!%C0@000X%/////^!::!!//X%%/^+^++//%%%/^'         '::!/^' '^+++^^^^+++////%%%///////////////+//%%%%%/^:.  
..    .'... . .....':!!!!:::::::::!::!!!!!^^^++++^^!!:::::!!^++////+!.      ..       .''!+C0@@@0X%%%%/^^!!!!/%XX%%////////+!'            '!!!!: :/X%/+^^!!!!++//%XX%%%////++++++/////%%%XXX%+:. 
....  ..':':'.......:!!:':':':':''''''':::!!!!^^!!::'':!!^^^+^^+/%%+!'     .+%:      .:!^!'%0$$@0XX%%/++!^!!/%XX%//%%XXX%/:    '.         ':::' ^%CCX%/+^^!!!!^++///////////++/+++/+///%XXXXX%+:
..':'::::^^++!::::!!'''::'::^!:'.''    ....''':::::''':!^+++^^^^++//+!'     +B^     .':!^:.'X@@@@0XX%%+/^::^/%%X%%%%C0CXX^  .  ^!          ..'.'+XCX%/++++^^!!:!!^+//%%//+++++^^^^^^++++/////%//
'':!+++^^^^!^^^!!!!!''''!^^^!!:::'...      .'':::::!!^^^+++//+!!:!+///^'           ..'!!:.  ^C0@$@CXC%+/+!!!+%/%%%XCC0CX/'  .'             .. '+%XX/+++++//++^!!:!^^+/+////++^^^^^^^^^^^^^++//%/
:':!^^^^!!!!!!!:...':!!^++++^^!:::''..    ...':!^^^++++++//%/+^^!:!!+//+!'           .'..   '/C0@0XXX/++^:!+////%%%CCCX/^.   ':.            .:+///+^!!!^+/////+!::::!!^^^^^++++^^^!!!:::!!!!!^^^
^^^^^!!!!!:!!::!!!^!::!!^+///+^^:::''''     ..':!^+///////////++!:!:::!^+++!'.         .....'!XCXXCX%++++^+++++/%XXXCX%^::'....'''.  ... .'!+//^!:::!!++///%%%/^!::::::!!^^^^^^!!!:'''......'':!
!!:::!:^!::::'':!^!^+^!!!!!+^^+^^!'':'''.   ..'':!^+///%%%/%/++++!''':':!!^+++^!!::::!!^!'.'..^++%/+^!^!!^++/+++%XX//%+:....:^+^!!:''::!^^+^!'''.':::^++////%%%/^!::!!!!:!!!!::::::::::::::'''':
!!!!^^!!!!!!^+++++++//+/^:^^^^^:'':!:!''..     .:!^+//%%%%/////+++^!:''':'':::::!^^^^+^!:.    .'^/^!!^^!!!^+/++^+/%%!:'.   .'^+++^!:'''':''...'''::!^+/%X%%%%%/++^!!!!!!!!:::!!!:'::':':!++++^^^
:!^^!::!!!!^^^^!!^^!!!:'''...:!::!!!::!^!:'.    ..':!^//%%%//+///++^!:'':!:':''.''':!^!:'.    .:^!:::::!::!^//^^^^+/^'    .':!^^!::''......''':'':^+++////////++++^^^^^^^^^^!:!!!!::'.'':!^++^!!
!!!!!^++^^^^!^!!!!!!!'.''..  .''::!:'....':!^^!.    ..'!+/%%%%%//^^^!!::!!:...'..''':::::''. .:!:::''::::!!^++/^^!^^^!..  .:!!:::::::''::'''''::!^^^++++/+//%%%%%////++/+^!!^^+++++^:!::!::^+++:
^^^!!!^^^!^^^+^!!!::'''.....   .':!:^:::.....  '!^^:'.  ':!++/%%%//++^!!!':':'::::!!!!!!:''..:::'''':!:'''':!^^^!!:::!!'.'::!!!!!!:!!::'''''':!!^++^+^++///+//+///%/%/+^!:!!^+//////+^!:!!::!^+^
!^^^!!^!::!^^!!::::'':!:''..'''::!!!!!:'.'''''.    .:^^::'..':!^^+^^^^^^^!::!!!:!!!^+^^!:'..'::''''''::''''::!!:'''':'':''':!!^!!:!:::':::::!!^^^+////%%/%/////+++^^^!!!!!!:::^+////%X%/++^!:!^^
^^^!!::':!!^!::::::!:''...'::'''''::::::'...  .        '.!^!!!!:''.'''''''::!!!!!!!!^^!!:.'''''..''''::::::::!::'''''::::::::!!!^^^^!:':::!^^++^^^^+//%%/+^!:''::':!!!!^!!!^!!!^+//+//%%%//+!::^
^!!::!!!!!!!^++^:':::'::'''''.....:'...'... .....       ..'!!!^^^!!::^^+////+++^^!!!!!!!:::::''..''':::!!!!!!^!:::''''::!!!!!!!!!^!!!!!!!!::'::!!!!!^^^!!:'.....'.'':!^:!^^!!^++///%/+////////+^
^!^!^^!^^^^+^^!!!^^!:!::'...   ... ... .. ...... .        ..'':^^+///++++/%%%//+^!:::':!!!!!::'..':':!!!!:^^^^^^!!:'.':!!!!^^^!!:!^^+++^++^^!:''''''.''.    .:':!:' .:!^!!+^::!!^+%%X/++///////+
':!:::!!^^^^^^!!+^!!^^^!::'::::::!::':::::::::::::!:''''''.....'::!+++/%%%%%%/^^!::'. .:!!^^!:'..'...''!::^!!!!!!^:'':!!^+^!:!:. '!^^^^+^+/+^!!:::::''...'''':!!^+/^:'''!+^^^++^^^+%%/%/++//////
':!!!::!!!:::!!!!!^^^!!::::::'''''.'.. ..  .......'..    ..'':::::!^!^+/%XX%%//+!!!!:'::!++/+^:.      .''':''.  ..' '^////+!!^^!:!^++///////^!::'''....'''':!:::!!^++/^'':++++++^+++/%/%///+/%//
:!!!:!!!!!:!!!!!!!^!!!:'''::'.'.......... ......':.....''..     ...':!^+/%XCCCCX%/+!''::!^/%%/+!:.     '''''.     :+%XCXX/+!:!^!!^+++++///%%+!:'....':''''.:::''::'':^+++!'!+/+//++++/%%%%/++///
:::::::'''::!!!!!^^!!:::'::'::'....   ..'..'....'.''.    ..::''''''.'':!+/%XXXX%%///++^!!!+%%XX%/^:.   '' ''.  '^/C0@0CX/^!^:!^!:^+++++^++^^^!:'.':!!^:::::!!^:!^/+^^!!^^+^^':!^^+//%%%/%/////++
::'':''''::!!!!!:!^!!:''::::'.':''''':''::'.....'''''.      .''::::!!!^^^+/%%%%%%++!!+^^^+/%XXCXXX%+:. ..  '. :/X00@@@00C/+/%%XXXXXCCCX//^!:':!:'::'::::'''.':::!+++^!^^^^++^!''!+////%%%%/////+
..''.'''::^!!!^^^++^^!:!:^^!!^^!!!!!!:^!::'.....':::''..   ..    .:::::^++//XXXXX%%//+^!^^^^/%XCXXXX%!.      :/C00000CXX/++^^^^^/%XXCCX/^:::!!^!!'.....'!::''':^!^!^/+++/^::^+^:!^+/%/%%%%%/++++
..''....'!!^!:!!!^^:!!^+^^^^^^!::':''....'......':!!::'.        ....''::!^/%%%XX%%%%////////%%XCXXCXXX+.    :%C00C000CX%%/+^+++^^!^+%%X/^!!!!::::''''.''''':::^^+/++//%%///!!:!////^+%%%%%//+^^^
 ..... .'!^!!!^+^!!!!!:!^!!!!:!!::::''''....'.':':!!!!::...............''::!++/%XX%%%/////%%%%XXXXXXXX%!. .!/XCC00C000CC0CC%%%%%%//^!^^^!'.'':!:':':!'':::'!:!^^+++%%%///++++/+^+^+//%%%//++++^!
 ..... '!!!!^^+^^^!!::!!^!^^^!!!:::.'....'...'':!::!:::'.              ..'':!^++%XXXXXXXX%XXXXXX%%%%%/^^' '^//%%%X%%XCX%%X%/+/+^++/^:'::'......''::::'::.'':::^^+/++++XC%////+++++++/////+^^^^^^
   ... '!!!!!^^^^!:!!::!!!:!:!^^!:'':.'.'''::':::!::::::'                .''::!!^/%XXXXXXXXXXXXXXXXX%/+!'.'!+/%%%XX%%XX%/%%/+///+!^!'.'' ..''. '::::'':..''::!^+^++/%/%XX%%%++/^!^++++///^!:!!!!
    .. :::!!^!!::::::'':::!:!!!'''!:''''...'.'':!!:::::''.               ....'':!^+/%%XXXXXXCCXXXX%%/^^!::::^+//%%%%XXXX/++++++^^+!:!''...'''.'!!:''''.':..':!+^!!++%XXX%XCX%+!+^^+////^^^!'':!:
   ....:!!!!!!:'':':::::^!':+%^:!!!:'.''.'':'::!!!!!!:!:'.                  ...':!^^+/%%%%XX%%%%%/+++^^!!!!!!!!^++///%%/+++^^!^!!'!^::!:':''':!!::'.....'':.':!+//+!!/%X%%%%X%/:^^/%///+^:'...''
    ...:!!!:'.'...'''''!!!^++^!:!!'...'..'':::::!!!!!::::'.                    '::::^+/%%%XXXXXXXX%%%//++++^++++^^^^!!!!!!!:::':!:':^!:!^::::!!:'...'   ..'..'::!++++++/%+''^//++^/%/%/^:'.  .. 
     ..!!!!::.....':!!!!^+//+++^!^!:::::''::.:::!::::!::::'.                   ...':!^+/%XXCCCCCXXXXXX%/%//+////++^^^!::''''... '!:'!^^^^^!!^!''..      .''''.. .':':^^+//!':^+^+/+++++^:.   .':
   ....^+^^!:'''....:':++++!!^^++/+!'!!::::::::!!:''''''''''                      ..'!^+%XCCCCCCCCCCCXXXXX%%XX//+++++^!::'''.... .!:!^^^^!!!^:...'... ....'!!^'  ...:!!^/%%/^++////^^^!:'     ..
      .!++!:::::'..':!^^!!:':!+^+/^::^:::!!'::^^!!:''''...''.                       .':!+%%XCCC00000CCXCXXXXCCX/++++^^^!:'''.     .!!^^++^:!^..'::'...'..':':!!. ...'::^+//%//%/++/++^!'.    ..'
 ...   !+^^!:::''':':!!!::'.''::^/^:^^::!'!'::!!!!!!:':'...''.                        .'::^+/%X0000000CCXCCCCXX%+^^+^^^!!'..       :!^^^^::^^'::::!::::''::':!:'':'':::!+/+/////+^^^^^^:.       
 '''. .++^^^^!::''::::!::'.... .:!'!^!!'!::.'':!!^::''':'..''.                            ..'!/XCCCCCCCXXCCCX%/+^!!!^^^!!:.        ':!^^!:':!!:!!!!!!::!':'''!^!!!!!!::!+^+/+^+/+^^^^!!:.'. ..''
      :++^^^^!::::!!:::'''.. .':+^!^:!:.:''.:':!!^!!:::::''''.                             .''!^/%XXXXX%XXXXX%+^:''::!!'..         .:!!!:'.'!!!^^^^^+!!^^::.:!++^+^^^!:^+':!++/%%+^^!!::.     ..
     .^++++^^^!!!!!:!::::'.'.'!!!:^::'''':'.'.'^!^+^!!!::::''.                                 .'::+++/%%%%++^!:'. . ...           .:'':'''!^^^^^+^+^!^+^!''^^^^^+++^^!+^:'!!^+%%/^^!::''.   .. 
.'.  '^++++^!!:!!!:!!!:::::''::^:!^!!:''::..'..:^+!!!!!!!!:''                                      ....'':'.'                       ..':'.:!+^!^^^^^^^^+!^''+^^!^+++++!^+:. ..^%XX%+^!:'::. .:!'
.'  .'+^+++^!:!:::!^^!!!!!'''''::^!!:::::::::':!++!:!^!!!!::'                       ..    ''.    .'.   ...                            .:.':!^!!!^^^^^!^^^!'!/^!!!^^+^^+^+!.   :/XXX%^!:..     . 
      !^!!!:'..':!^^^^^++^^!!!!!^:^^^!^!!:''':!:^^^^!!!:::'''.                                   ..    ..     ...    ..           ..   '.':^!:!!!!!!::!!!!'!++^!!!!^!++++!.  .!+%%%//!'.