.....                                                                                                       
                                                                                                      '.....'':. .                                                                                                    
                                                                                                 .'.'!'''':':+^!:::..                                                                                                 
                                                                                             ''.. ..::''!':+^%/+//+!^:...                                                                                             
                                                                                    .:':!.'...''!!:'^^'++!+%0CX%%CX%/^':..                                                                                            
                                                                                 ..':^+//%%/+++++/%%X%%X+X@@@@C%X@C0C/^!'!                                                                                            
                                                                             .'':!^++/%/%%XX%%X%XXC00@000@@BB$000B$B0X//+:. ' .'.'''.'''.                                                                             
                                                                           ''!!!^++/+/%%%%CCC%X00@@BBNNBNBBNNB@$BNMNBXX/+!^!+++/'''' .      .                                                                         
                                                                         .'':!+++/%%XX%XCC0000@0@BBNNNNNMMMMMBBNNMMM$C0X%/CXC%XX+^!!!:!+!!!^:::'                                                                      
                                                                         ...:!^+/%%%%XCC0@@@$$$$$BNBNNBNNMMMNMNNMMNNNBB$@$BB@@$$@0X%%C%++^^+::::'.                                                                    
                                                                          .!+/%%%%%XXC0@$$B$$B$$B$B$BB@BBBBNBNBBNNBNBBBBBNNNNNNBBB$$@@0CC%^^'.:.  ...                                                                 
                                                                       .:^+/%//%%%%CC0$B@B$BBB$B$BB$B$@$$BBN$B$B$$BBBBBBNNNNMNBB$$$$$BB$B$@C+^'.   ..                                                                 
                                                                      .!:+%//%%%XCXX@C$N$BBBN$BBBBBNB@0C@$NB$$@B$$NBBBBNNNNNNBB$$BB$B$$$$$@$$C+^:^^:'''                                                               
                                                                   :':^/%X%%%/CXX0CCC00NBBBBNB$NBBB$$C@C@BBBB$$$$NBBBBNNNNNNNNBBBNNMNNNBBBBB$$$@0CXX^.:'                                                              
                                                               .:!^++//%//+%/%/XC0CCCXCNBNBB$B@$B$@$0C@@$NB@0C$$BBBBBNNBNNNNNNNNNNMMMMNBBNBBNBB$$@X/+%^!:.                                                            
                                                              '^////%/////%%XXXXCCCC0XX$BN$$$@00$C$@0C0$$$@X0@$$$BNNNBBBBB$BBNNMM###MMMMMMMNN$@@@0C%^!+^.'                                                            
                                                          .:+/%%%%/++///%XXXCXXXX%CCC0$$BNN@0@$@0@00CXCC@CC0C000$BBB$@@@$$BNNNMMMMMMMM#MMMMMNB$$$0CC%/!!:'                                                            
                                                         :^!^+////++++//%%%%CCXXX%XXCC@$@$B$$$$$B@@0XXXCXXX%X0C0$$$@@$$$@$BBBBNNNNNMNNMM##MMMMMMBBB@0X+:'...                                                          
                                                       .'!!'!!^+/%+++++++/+///%/XXXXCCC@CC0$@$@@B@00CXCCXX%%C00@@000B$@@@$$$$$$B$BNNMMM###MMMNMNNNB$$XX/^.                                                            
                                                         '':+//%%%+/++++/+++^^^^///%XXCCCC0X0C@$@@0CCCCC0CC0@@$$@@$@$00@@@$$@$$@@@$$BNNMMM#MMMMMNNBNNNN$%/'                                                           
                                                        :/XC0CC%%///++^^^^^^!:^++//+///%%%%%CC0@B@000@0@@@$$$BBBB$BB$$@$$@$$@0@@@$$$$BNNMMMMMMMNNNNNB$$CC%+'                                                          
                                                      '+0$@0CC%%XX%/^^!!!!!:::!^++++++/+/%XXXCC0@$00@@$$$$$$BNNNNNMNNNNNMMMMMMNNBNNNNBNMNNMMMMMBNNM#MN$XX+^!:.                                                        
                                                     '%@@00CCCC0C%%/+!:::!:'':^^/X//////%XCC000$$$$$$$$BBBBBBNNNMMMMM##M########MMM##M##MNBBNNMMMNN##MN$X!':::.                                                       
                                                     'X0CXXXXXXXX%%//+++!::.'!^C///++///%XCC00@$$BBBBNNBBBBNNNNMMMMMMM#MM#############M##MBBNM##MMMMM##MB+'':'..                                                      
                                                     .^X%//%%%%%///++++^!!!:!^!!^+/%%%%XC00@@@@$$$BBBNNNNNNNNNNNMMMMMMMMMMM############MMMN@$NMMMMMMM###MB0%+                                                         
                                                     .+@0C%/////%%/+++++++!:'':^+/%%+++//XXC00@$BBBBNNNNNNNNNMMMNMMMMMMMMMMM########MMMMMMN$0$BNMMMMMM###MN$@X.                                                       
                                                     ^X$@0CX/////%%%+++++^'..!^^^!:^^+/%X00@@@@@@@0C00@@@$$$BBNNNNNNMMMMMMNM##########MBBNMB0@BNNNNNNMMMNNNNB0+                                                       
                                                    !0$$@@000X%//+^^!!^+^' '!''':++^!^^+/%C@$$BBBNNNNNNBB$$$$$$$$$BBBNNNNMMMMMMMMMNNMMMMNBBB@0$BNNNNBBB$BBBNB@+                                                       
                                                   ./0@0CCCCCCX%//+//+++^^'. '^+^+^+^++//%XCC0@@$$$$$$BBNNNMMMMMMNNNNMMMMMMM########MB$BNN@@@0@$NNNNNBBBNNB@0+:                                                       
                                                   !%C$CCXXXXX%X%%/++^+^!:. ':!!!:!^^^++/%XC0$$BBBB$@@@@@0@0@@@@@@$BBNNNNNBBMMMMMM#####M$B$@@@@BBNNNBBNNNNB0X:.                                                       
                                                  '%X0@@0XXXXX%%//+^^^!!!'.'''':^///////%XXCC0@@@@0@@@@$BBBNNNNNNNBBBB$BBMMMMMNNNMMMNMMNNB0$$$$$$BBNNNMMMMMN@/^'                                                      
                                                   ^XCXCXCCX%/////+++^^!!:.''!^^^^+/++^+/%%X00$BBNB$0CCC0@$@$BBBBBB$BNNNNBNMM#####M##MNNNN000@@$BNNNNMMMM####MB0:                                                     
                                                   '^%/XC00CC%/+//+^^!:!!''.'!!!^^!!^%%X%%%XC00@@@@@@0XCCC00@$@@$@$$@$$$$@$$$$BBNMMMMMMNNB@0@$@@BNNNNNMMMMMMMMMM$!                                                    
                                                     :!!+%%XXX%//+/+!::::...'::!!^/XX%%XCCCCCX00BNMMMNNB$000000@@$$BBNMMM#######MMBBNNNNB$@0$$B$NMMNNNNNNMNNBBBBB@:                                                   
                                                     ':!+^+%X/%/%/+^^^::'..'.'!!//%+!::!::!:^%%C0$NNNMM##BBB$$$N@@$BBNMNNM#######MM#NBBB$@$$BNNNNNMNNNNNNMNNBCX++CC.                                                  
                                                      ::^+^+%%X0C%+++!:'..''''^/%/!:.        '!^/C0$BBNM#MNBBNNMBB$$$$$00@$NNM#####NNMB$0@0@$N#MNNNNNBBNNNBB$@@C^%X:                                                  
                                                     .::+/++^^%XX%+^:'. ':::''+%+!'.. .       .:!!+%CC@BBBBB$$BB$0CXCX/^^/%XC00@$$M##MMN$@0@0BNNMMNNBBB$B$@$@$$$0CC'                                                  
                                                    .::^%%%/+..:^/+!'...!!!!:!^!:!::!:..         .:^^+%C00@@$@00C/+^!'.    .':!/%XCBM#MMB$@CX$BN$$BB$B$$$@@@000@BB@!                                                  
                                                 ....':X@%X%/...'!!!:.':!^^!!!'...:'.  .'''.        ''!^%XCC000X+!:.           .'!+X0BNMNB$0CBBN$@0@00@00@@00CC0@$0:                                                  
                                                     '/@C%XX%%!:'.'^:':!^^^^^!:..:!. ....         .   .!+%XC0CC%:.         ..'.    '^C@NNB$00$MMB@XC@@0@000CX/XC@@C! '                                                
                                                    :+CX0XCXCC^    .''':!++^!!!!!:     .      .      '!!/XC0@0%:             '^%^ .//XC$N$B$@$MMNBC0@0C0%0X%/%X00@C+!                                                 
                                                  .::+%XCC0C@0%'.   +:'!:^+++!!!'.  .''+:    ':':!::::++%0BMMM@+. .. .+^     '' .. :@CX$NBB$C$MN$0@@@@@@0CX//XCC0@C+:.                                                
                                                  '../+CC000X00!^^!+C%!:^+^+^^!''.'^:'^+//+++++!^^^!^+/%X@BM#MB$X+%X+^%X^'':/0@@X..+/00BNNNBC$B00C$B@@@00X%/+XXCC@@X^.                                                
                                                  . .+%C0@0XX@@X!^^%XX/!^+^^^^^!:!!^+!'.....   .''!/%%/%CBM###MNB$C%+!!!^+/%XX%%X0!^XC0NNMB$0%!+%0@$@@0000C%/XCX%00X%!                                                
                                                     +/C%0CX0@XC%:/@XXX^^/+^^+++/++/^++^^^^!:'':!//%%%/XCBM###NNNNNC+^^^^^^!^/%0@B0@BBBBNBB$@:://X0@00@0@@@CCCCX^XCX/!                                                
                                                  .'!+^//XC%C0C0%+%CX%C+^/+^^^+/%+^++++^^::!::^+/%%%%+/%X@N###NNNNMM0%/++%C0$$$BNBBBB$BNNBBBN^+%%XC000$$$$$0%XCC+%///:                                                
                                                   :+^+++%XXCCCX/%+%+/0/^^^^!!++///+^^^^^^^^!!++/^+/++///0N####MMNNNN$C%+!+/%C$$BNBNNMNBBNNNN+%//CX0@0$$BBB@%%CCC%+%:'                                                
                                                   '':!+^X//CC0%%/!+^^CX^!++^!^^^+^^!:!!!^+^+++++^^+^^++/CB#######MNBBN@CC%%CC0B$B$BNNNBNMBBB+%%%%0@C@$BNNN$@0%%XX/%.'.                                               
                                                  '  '!!%/+%XX0%!+!:++CX/!+^!:!^!^^!^^!!!!+/%%%/++++^!+/X0NM########MNBBB$$@XCCC00@@$BBNMM$BBX%CC%C@@00$NNNB$@+%C%X/.                                                 
                                                  '.:+/%%X%%%CC%^/'.^^XC/++^::::!!:!!!!^^+//%X%%++!::^+%C$BN######BBM###MBB$0XX%/XXC0BNNMM#M@^C@@CX@@@XC$BNB$@X/X%+/'                                                 
                                                    :/@@0%/C/%C+'+'.:..X%//+^::!!!^^^^+%%%%%%%%+!...'^+%0BBN#####M0+XB#####MB$0X%%CC@BNMN0NB00CC@$000C%C@NMBB@CX%/^+^                                                 
                                                  .''/X+^!/%+//! :!.:+'/X//+^!^^^+++/////X%X%+!. '!!:^+X$B$BN######@!/@NM#####MB@C0C$NM#/X%N%X0$C0$0CCXXXBNB0@@X%/^:^.                                                
                                                 ..'/^!!:!/:!^+^!^^:!^.'CX%/^^^^^//+/%%%%%%/^' ''!^!'^+%0$$$$N#####M+!+C$N######N$@@$NM0^0X@%/X@00CC/C%C0@N$C%XX%^ .:                                                 
                                                  .+! .''^+:::^^'....:  +%%++^^+^+++/%%%%/+: '!^!'!:'!^+/XC0@$NMNNNM@%!!%0BM####MBBBBNM!^/X0C0X@@0@///+C0@B@@^/%X!' :                                                 
                                                        '^' ..:!     .  .%%%+^^^+^^/%//%/^'.!+///^    .::!+%XC00@XX$@@0^:/0BNM###NNBNMC!/XC@$%X$@@$CX0C%XCB%0%/0@!. ...                                               
                                                       .':  ..           '%/+!!!^+//%+++!.^//+++//^'      ..':++%@$@@$$BC^/C@NMM#NBNM@C00$MM#B@@0$0CXC000$NC/C/X0%                                                    
                                                         . ..           .'!/^!!!^^/+^^^:!+///++^+^+:^''     !%0@NBB0$$$0NN$+%@BNNN$NN00B#####MNB00$CXCCC%C$MXCCX$C^''                                                 
                                                                     .':.  ++:!!:^+!!!!+/%/+/++^!+^:::+^!+^+/%CX$$BB@$NNMMMB%%@$B$$NB$M########N@C@%0C%%++X0$XX//0!:::!'''...                                         
                                                                    .''.   !+!':'::::^^+:+::+:^:!^!!^^%/XX/C%X@C0$BN@NNNM##M@+X@$@$M$M#########NC0C!+C/XX+^%X0X//%/!'':::::!^+:                                       
                                                                ..  ..     C%.'.. .'':!^''.::'!. '/:^+/%X/+0XC/XCC0$0@MBBNMM0!X@$@BNC##########M+'/^!+CC0%/%XC$!':!:..'::'':!^:                                       
                                                             ....  .''     @X^        ''.     .   ^:^^^/^:!///%!+%%0X%@@$$0C%/X000$C0##########M^  .:^/X%+:!%%0X!:'..  .. .':!:                                       
                                                                  .':'     0N$%.                    ':^:' '.:!''!:+/!++XC/!..!C/%C@^@##########N'     :^!':.'!%%^^^!!'':..':!^!                                       
                                                                  ..:.   ''XBN$0+                       .   . . .!'^^^XCX:  '+^!X0X+0##########N.            .              .::                                       
                                                                  ..'.   /BBBNNBB@^      .... ..                 '^^+%XXC^ :!.!X^^%@@##########% .::^!.     ''              '!!                                       
                                                                  '''.   .0##MBBNNB/     ....''':''''..  ...'':!^^+/+%CC0X:'.+B0.'!CBM#######M/  '^^!:'''.'.'                 .                                       
                                                                           +N#MN$BN@+.      ..':!!^^+/%%X%//X0@@$$@0C0CC/' ':@M: ..^0M######M^  ..:::::'':''                                                          
                                                                            ./0^''%@C!.        .'!:!!++/////%C0@$B$@@0%' ':.XMC   .':$@B###M^   ':':''.''''                                                           
                                                                                .%%00X!           ......''.'':^//XXX+:.:.  /NN'      !%'C##/..''''''. .::!                                                            
                                                                                  .!/X%'                       ..:'.:X0!  !BM0        .X+XC.''::' .   .'^'                                                            
                                                                                      .!:                     .:+!''!^.  '@M#B'         %X.^^!'..     '^^                                                             
                                                                                                                '^+/^.  '0NM##NX'        . '!'..      '!                                                              
                                                                                                                   '    +XX%%/+!'  '. '.    .'''      .                                                               
                                                                                                                                    :^%M!    ..                                 !'                                    
                                                                                                                                      '%B.                                      !'                                    
                                                                                                                                       :X@!^:.                                  :'                                    
                                                                                                                                 ...'::!+0%^^:.                                .:.                                    
                                                                                                                                    ''!!^:@/:.                                  :.                                    
                                                                                                                                     .    .0X                                   :'                                    
                                                                                                                                         ...!                                   !:                                    
                                                                                                                                                                                !:                                    
                                                                                                                                                                                ^'                                    
                                                                                                                                                                                ^!                                    
                                                                                                                                                                                :.                                    
                                                                                                                                                                               .:.                                    
                                                                                                                                                                               '!'                                    
                                                                  ' . .' ' .' .   '.  .. '  ' ' . .'   : ..   ' ..     . ' .. '   .  .    . .