##                                                                                                      
                                                                                              +###                                                                                                      
                                                                                            .##.#'                                                                                                      
                                                                                           ###  #                                                                                                       
                                                                                         '##'  #+                                                                                                       
                                                                                       `###   :#                                                                                                        
                                                                                      ###+  ;'#.                                                                                                        
                                                                                    ,###. :;;#+                                                                                                         
                                                                                   ###+ `;;;##                                                                                                          
                                                                                 '###` ;;;;##                                                                                                           
                                                                               `###+ `;;;;##                                                                                                            
                                                                              ####  ;;;;;+#`                                                                                                            
                                                                            ;###: .;;;;;+#,                                                                                                             
                                                                          `###+  ;;;;;;+#:                                                                                                              
                                                   .+                    ####  ,;;;;;;+#;                                                                                                               
                                                  ;#,                  :###:  ;;;;;;;+#'                                                                                                                
                                                 '##                 `###+  :;;;;;;;+#'                                                                                                                 
                                                +#;'                ####  `;;;;;;;;##'                                                                                                                  
                                               ## #               +###`  ;;;;;;;;;##+                                                                                                                   
                                              ## #'             '###,  ,;;;;;;;;;##+                                                                                                                    
                                             ## .#            ;###'   ;;;;;;;;;;##+                                                                                                              :      
                                           `## :#.          ;###+   ;;;;;;;;;;;##+                                                                                                              ##      
                                          :## ;#+         '####   .;;;;;;;;;;;##+       +'                                                                                                     #'+      
                                         +## ;'#        #####    ;;;;;;;;;;;;##+     :###                                                                                                    `#,.:      
                                        ### ;;#       #####    ;;;;;;;;;;;;'##+   .###'#'                                                                                                   .#` #       
                                      `##+`;;#'    .#####    ,;;;;;;;;;;;;'##+  +###  ##                                                                                                   ;#`  +       
                                     ,##'`;;##   :#####    `;;;;;;;;;;;;;####:###'   ##                                                                                                   +#   +        
                                    +##,:;;##  '#####     ;;;;;;;;;;;;;;#######.    ##                                                                                                   ##    #        
                                   ### ;;;+#`+####+     ;;;;;;;;;;;;;;'#####+      ##                                                                                                   ##    ':        
                                 `###`;;;+######'     ;;;;;;;;;;;;;;;#####,     ;'##                                                                                                  .##     #         
                                ;##+;;;;+#####:     ;;;;;;;;;;;;;;;####+     .;;'##                                                                                                  '#+   `;+'         
                               ###';;;'#####`     ;;;;;;;;;;;;;;;####.     :;;;+##                                                                                                  ##;   :;;#          
                             .###';;'####+      ;;;;;;;;;;;;;;+###:      ;;;;;##+                                                                                                 `##`   ;;;++          
                            ####;;+####:      ;;;;;;;;;;;;;+###;      :;;;;;;##;                                                                                       .         ;##    ;;;;#           
                          `####;+####      `;;;;;;;;;;;;+###:      ,;;;;;;;'##`                                                                                       ##        ##+    ;;;;#+           
                         ####+####:      :;;;;;;;;;;;+###.      ,;;;;;;;;;+##                                                                                       `#`#      `##:    ;;;;'#            
                       ,#######+      `;;;;;;;;;;;+##'      `;;;;;;;;;;;;##+                                                                                       ;+ #`     '##    `;;;;;#+            
                      #######.      ,;;;;;;;;;'###.     .;;;;;;;;;;;;;;'##.                                                                                       #, :+     ##+    ;;;;;;+#             
                    ######:       ;;;;;;;;;'##:    `:;;;;;;;;;;;;;;;;;+##                                                                                       `#  `#    '##`    ;;;;;;'#'     '.      
                  +####'       ,;;;;;;;'##;   .;;;;;;;;;;;;;;;;;;;;;'##:                                                                                       ;+ `;#:  `###    :;;;;;;;##    :##:      
                +###'        ;;;;;;;'#: .;;;;;;;;;;;;;;;;;;;;;;;;;;###                                                                                        #. ;;##  ###.   `;;;;;;;;##   :## #       
              +##'        :;;;;;;::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+##;   ,##                                                                                 ,# `;;## '##+    ;;;;;;;;;+#: '##` ##       
            :##`       `;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+### `'####.                                                                                #' ;;;##+###    ;;;;;;;;;;'#'###'  .#        
           '#:       ,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'########+`.#.                                                                               ,# `;;;#####.   :;;;;;;;;;;'####+    #+        
          `#.      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;########,   +#                                                                                #+ ;;;;####:   ,;;;;;;;;;;;#####     ##         
          #'     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'+######'`     `##                                                                               '#`,;;;+###:   :;;;;;;;;;;'####+    ; ##          
          #    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;''+########'.          +#+                                                                              .#+`;;;+###,   ;;;;;;;;;;;+####;   ,;;:##           
         .+   ;;;;;;;;;;;;;;;;;;;;;:'';;;;:,````````.,,::;;;;;;;;;##.                                                                             `## ;;;####`   ;;;;;;;;;;'#####`   ;;;;;##            
         ''  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'###                                                                              ##:;;'###'   .;;;;;;;;;'#####`   `;;;;;;##             
         #` .;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'###.                                                                             ##+;'####`   ;;;;;;;;;'####+`    ;;;;;;;'##              
         #  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+###:                                                                            `###;####:   .;;;;;;;;+####;     ,;;;;;;;;'##               
         #  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+###,     #######'                                                               :#######'    ;;;;;;;;+####.     ,;;;;;;;;;;+##                
        `# `;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'####         ,####,:##+                                                          #######+    :;;;;;;'####;     `;;;;;;;;;;;;;###                 
        :+ :;;;;;;;;;;;;;;;;;;;;;;';;;;;;;;;;;;;;;;'####;            `#####  `##`                                                    ;#######.   ,;;;;;;'###;     ,;;;;;;;;;;;;;;;'###                  
        #' ;;;;;;;;;;;;;;;;;;;;;;;;'###++''''++######+                ,#####'   ##                                                :#######,   .;;;;;;+#'.  `,;;;;;;;;;;;;;;;;;;;;+##+        +#+        
        #: ;;;;;;;;;;;;;;;;;;;;;;;;;;;'###########+`                   #######;  `##.                                          +######;    ,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###;     ,#####:        
        #` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'#########'.                 ########;;  '###`                                      ###,     `;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+###.  `+####: ,#         
        # `;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+##################   ,##########;;,   '##;                                   ##   .:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'####,######.   :#          
        # `;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'++######++##   `###########';;`   `###                                ##  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'#########;      +#           
       `# ,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+#+      +##########';;;;,   '##                             '#  ;;;;;;;;;''''';;;;;;;;;;;;;;;;;;;;;;;;;;;+#######:         ##            
       `# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###`        ###########+;;;;;;:  ;#+                          `#, ;;;;'''''''''''';;;;;;;;;;;;;;;;;;;;'+#######'`           ,##             
       `# ;;;;;;;;;;;;;;;;;;;;;;';;;;;;;;;;;;;;;;;;;;;;;'####:          #########''#+;;;;;;;;  '#;                        #+ ;;;''''''''''''';;;;;;;;;;;;;'+#########'.                ##'              
       .# ;;;;;;;;;;;;;;;;;;;;;;;+#';;;;;;;;;;;;;;;;'+#####,           ##########'''##;;;;;;;;:  ##            :'        +# :;;''''''''''''';;;;;;;;;.:':::.`         `.,:;;;;;;;;;;,.##.               
       ,# ;;;;;;;;;;;;;;;;;;;;;;;;'###+;;;;;;;;'+#######'               ;#######'''+###;;;;;;;;;  ,#'       +##;        `#:`;;'''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ###                 
       ;+ ;;;;;;;;;;;;;;;;;;;;;;;;;'#################,                   .#####+'''#####;;;;;;;;;   ########;#+         ## ;';'''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:,##'                  
       ;+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;##########'+##'                      ,####;;'#######;;;;;;;;;   +##'  ;##         '# :;;'''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ###`                   
       '+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;'###;;;;;; :##:                      ###+;;+####..#+;;;;;;;;` . .' ;+###         #' ;#;''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:'##+                     
       '+`;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;###';;;;; `##.                     `##;;;####....#+;;;;;;;;`;;  ;'#####`      ## ;';''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,###.                      
       +'`;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;'###;;;;;  ##`                    `#+;;'###.....,#';;;;;;;`;;;;'#####       .#.,;+''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;'###+                        
       #'`;;;;;;;;;;;;;;;;;;'#+;;;;;;;;;;;;+###;;;;  ##                    ,#,;;###'`....###';;;;;;`;;;;#####        #+ ;+;'''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;'####                          
       #'.;;;;;;;;;;;;;;;;;;;'##;;;;;;;;;;;;;####';:  ##                   #+;;;###   ..#####;;;;;;+;;;#####;       +# ;;+''''''''''''''''';;;;;;;;;;;##+';;;;;;;;;;;;;+####`                           
       #'.;;;;;;;;;;;;;;;;;;;;'##+;;;;;;;;;;;;;#####:  ##                  # ;;'##'    .######;;;;;';;'#####:      `#:.;#''''''''''''''';;;;;;;;;;;;;;;;;+####+';;;;+#####.                             
       #',;;;;;;;;;;;;;;';;;;;;+###+;;;;;;;;;;;;;+####+.##                :#:;;'##     `#######;;;;'+;#######`     ## ;''''''''''''''''''''';;;;;;;;;;;;;;;;,:##########`                               
       #',;;;;;;;;;;;;;;#;;;;;;;+#####;;;;;;;;;;;;;;'######               #,;;;'##     `#+###+##;;;;#'#+####,     ;# ;;#'''''''''''''''''''''';;;;;;;;;;;;;;;;;;` :#################''''.               
       #':;;;;;;;;;;;;;;'';;;;;;;+#######+';;;;;;;;;'+###.+#`            `# ;;;+#+     .#+### .##;;'####+##'      #;.;+'''''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;`    .:''#######'''#+               
       #':;;;;;;;;;;;;;;;#';;;;;;;+#''#################+,  +#.           '+,;;;+#:     `##,########### #:##      ## ;;+''''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;:`          .#+                
       #':;;;;;;;;;';;;;;##';;;;;;;+#+'''''+++#####+';;;;,  +#,          #`;;;;'#.      ## #############+#+     '# ;;#''''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;. .##`                 
       '':;;;;;;;;;';;;;;'##';;;;;;;+##'''''''''''##;;;;;;,  ##:        `# ;;;;'#       ##+ .';########.#;+    `#;.;'''''''''''''''''''''';;;;;;;;;';;;;;;;;;;;;;;;;;;;;;;;;;;;;;+##:                   
       '+:;;;;;;;;;;#;;;;;###+;;;;;;;+##''''''''''+#+;;;;;;:  ##;       #+`;;;;;#`       ###'###,,#######''    #+ ;;#'''''''''''''''''''';;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;###;                     
       '+:;;;;;;;;;;#;;;;;+####;;;;;;;'##''''''''''##+;;;;;;:  ##'      #.;;;;;;#,       .#####;`,######,#:   ## ;;#''''''''''''''''''''''';;;;;;;;;;;##;;;;;;;;;;;;;;;;;;;;+###,                       
       ;+:;;;;';;;;;#+;;;;;#'###;;;;;;;'##''''''''''##';;;;;;;  ##+    .# ;;;;;'#'         '#+   +####;..#.  '#`;;'#'''''''''''''''''''''''';;;;;;;;;;;;##+;;;;;;;;;;;;;'#####                          
       ;+:;;;;+;;;;;+#;;;;;+#''##+;;;;;;;##+'''''''''##';;;;;;;  ###   ## ;;;;;+##               #####...#  ,#;`;;#'''''''''''''''''''''''''';;;;;;;;;;;;;###';;;;;;'######.                            
       ,+:;;;;#;;;;;'##;;;;;#'''+##;;;;;;;###''''''''+##;;;;;;;;  ###'##:`;;;;;###              ######..'# .#+ ;;#+'''''''''''''''''''''''''';;;;;;;;;;;;;;;###########+`                               
       ,#,;;;;+;;;;;;##';;;;##''''###;;;;;;'##''''''''###;;;;;;;;  ####. .;;;;;#;+:            #######..##### ;;+#''''''''''''''''''''''''';;;;;;;;;;;;;;;;;;;'#####.                                   
       .#,;;;;';;;;;;###;;;;;#''''''###+;;;;;##+'''''''###;;;;;;;; `##   ;;;;;+#;;#      ::;+#########.'+### ;;;#''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;'#####;                                
       .#.;;;;'+;;;;;+##+;;;;+#'''''''#####;;;'##'''''''##+;;;;;;;; .##  ;;;;;#;;; ,  #;'#############. ### ;;;##'''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;;;;;: ;#####'                            
       `#`;;;;'#;;;;;'###';;;;#'''''''''#######+##''''''###';;;;;;;;`:#' ;;;;'+;;        ..#####+.###+ :##.;;;##''''''''''''''''''''''''';;;;;;;;';;;;;;;;;;;;;;;;;;;;,  :#####'                        
       `#`;;;;;#;;;;;;#'##;;;;'#'''''''''''+######'''''''###';;;;;;;;`+# ;;;;#;;;         ..#+  +.###, +##;;;'##'''''''''''''''''''''''''';;;;;;;;#+;;;;;;;;;;;;;;;;;;;;;;;. ,##                        
       `#`;;;;;#';;;;;#+'##;;;;#+'''''''''''''''''''''''''###';;;;;;;;`##;;;';;;:         ..,# `'.,## ;##;;;;##''''''''''''''''''''''''''';;;;;;;;;'##;;;;;;;;;;;;;;;;;;;'+###:                         
        # ;;;;;##;;;;;'#''##;;;;#'''''''''''''''''''''''''###+;;;;;;;;;`#';;;;;;           ..# ;. ,#' '##;;;###'''''''''''''''''''''''''';;;;;;;;;;;;+##;;;;;;;;;;;;'+#####;                            
        # ;;;;;##;;;;;;#''+##;;;+#'''''''''''''''''''''''''###';;;;;;;;;+#;;;;;;           ..# #. ##  '#;;;+##''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;###+++++########+`                               
        #,;;;;;+#';;;;;##''+##;;;#+''''''''''''''''''''''''+###';;;;;;;;;#;;;;;;           ..##+ ##   '#;;'###'''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;##########+.                                   
        #;;;;;;'##;;;;;'#''''##;;;#'''''''''''''''''''''''''####';;;;;;;;#;;;;;.           `.:#;      ;#;;###'''''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;####+                                        
        #+;;;;;;##;;;;;;#+''''##;;'#''''''''''''''''''''''''+####';;;;;;;+';;;;             ..#+      ;#;###+'''''''''''''''''''''''';;;;;;;;;;;;;;;;;;;;;;;;'####'                                     
        ##;;;;;;##+;;;;;+#'''''##;;+#''''''''''''''''''''''''####+';;;;;;;';;;;             ..,#      ;#'###'''''''''''''''''''''''''';;;;;;;;';;;;;;;;;;;;;;;;;'####:                                  
        ##;;;;;;###;;;;;;#''''''##';##'''''''''''''''''''''''#####'';;;;;;';;;;              .`       ;####+''''''''''''''''''''''''';;;;;;;;;;##';;;;;;;;;;;;;;;;;'####.                               
        '#:;;;;;###+;;;;;##'''''''##;#+'''''''''''''''''''''''####'';;;;;;;;;;;                       ;####'''''''''''''''''''';;'';;;;;;;;;;;;+####;;;;;;;;;;;;;;;;;;'##                               
        .#.;;;;;'###;;;;;'#''''''''##+#'''''''''''''''''''''''####'';;;;;;;;;;;                       ;###+'''''''''''''''''''';;;;;;;;;;;;;;;;;#######+;;;;;;;;;;'+###`                                
         #:;;;;;;#'#+;;;;;#+'''''''''+#+''''''''''''''''''''''+###+';;;;;;;;;;;                       ;###''''''''''''''''''''';;;;;;;;;;;;;;;;;'#.:################:                                   
         #+;;;;;;#'##';;;;'#'''''''''''''''''''''''''''''''''''###+'';;;;;;;;;:                       ;##+''''''''''''''''''''';;;;;;;;;;;;;;;;;;+#`                                                    
         ##;;;;;;#+;##;;;;;#'''''''''''''''''''''''''''''''''''####'';;;;;;;;;:                       ;##'''''''''''''''''''''';;;;+;;;;;;;;;;;;;;##                                                    
         :#;;;;;;+#;'##;;;;+#''''''''''''''''''''''''''''''''''+###'';;;;;;;;;:                       ;##'''''''''''''''''''''';;;;+;;;;;;;;;;;;;;;##                                                   
         `#;;;;;;'#;;##+;;;;#'''''''''''''''''''''''''''''''''''###''';;;;;;;;:                       ;#'''''''''''''''''''''';;;;;';;;;;;;;;;;;;;;;##                                                  
          #+;;;;;;#;;;##';;;##''''''''''''''''''''''''''''''''''###+'';;;;;;;;;                       '#''''''''''''''''''''';;;;;;;+;;;;;;;;;;;;;;;'#+                                                 
          ##;;;;;;#+;;'##';;'#'''''''''''''''''''''''''''''''''''###''';;;;;;;;                       '#'''''''''''''''''';;;;;;;;;;#;;+;;;;;;;;;;;;;'#'                                                
          +#;;;;;;##;;;+##;;;#+''''''''''''''''''''''''''''''''''+##'''';;;;;;;                       '+'''''''''''''''''';;;;;;;;;;#;;'#';;;;;;;;;;;;'#.                                               
          .#';;;;;'#;;;;+##;;'#'''''''''''''''''''''''''''''''''''##+''''';;;;;                      .++'''''''''''''''''';;;;;;;;;'+';;'##;;;;;;;;;;;;'#                                               
           ##;;;;;;#;;;;;+##;;#''''''''''''''''''''''''''''''''''''##''''';;;;;                      :#''''''''''''''''''';;;;;;;;;#'';;;+###;;;;;;;;;;;'#                                              
           ##;;;;;;#+;;;;;+##;'#''''''''''''''''''''''''''''''''''''#+'''';;;;;,                     '#'''''''''''''''''';;;;;;;;;+#'';;;;#####';;;;;;;;;+#                                             
           ,#+;;;;;+#;;;;;;+##'#''''''''''''''''''''''''''''''''''''''''''';;;;;                     '#'''''''''''''''''';;;;;;;;;##'';;;;'#:#####';;;;;;;##                                            
            ##;;;;;;#;;;;;;;'###+'''''''''''''''''''''''''''''''''''''''''';;;;;                    .'#''''''''''''''''';;;;;;;;;;##'';;;;;#+   '######+';;##                                           
            ##';;;;;#';;;;;;;;###'''''''''''''''''''''''''''''''''''''''''';;;;;.                   ;++'''''''''''''';;;;;;;;;;;;;##+;;;;;;'#       :########`                                          
            ,##;;;;;++;;;;;;;;;+#''''''''''''''''''''''''''''''''''''''''''';;;;;                   '#+'''''''''''''';;;;;;;;;;;;;###';;;;;;#;                                                          
             ##';;;;'#;;;;;;;;+;'''''''''''''''''''''''''''''''''''''''''''';;;;;`                 .'#+'''''''''''''';;;;;;;;;;;;;####;;;;;;'#                                                          
             ###;;;;;#';;;;;;#;;'''''''''''''''''''''''''''''''''''''''''''';;;;;.                 ;+#'''''''''''''';;;;;;;;;;;;;;#'###;;;;;;#+                                                         
             `##';;;;+#;;;;;+';;;'''''''''''''''''''''''''''''''''''''''+'''';;;;;                `'##+''''''''''''';;;;;;;;;;;;;'#'#'##';;;;;#                                                         
              ###;;;;;#;;;;'+;;;;;''''''''''''''''''''''''''''''''''''''#'''';;;;;.               ,'##+'''''''''''';;;;;;;;;;;;;;#+''# ;#+;;;;+#                                                        
              ,##+;;;;#+;;;#;;;;;;;;''''''''''''''''''''''''''''''''''''#''''';;;;;              `''+##'''''''';;;;;;;;;;;;;;;;;##'''++ `##;;;;#'                                                       
               ###;;;;'#;;#';;;;;;;+''''''''''''''''''''''''''''''''''''#''''';;;;;.             .''''#'''''''';;;;;;;;;;;;;;;;'#+''';#`  '##;;;#                                                       
               ;###;;;;#'+#;;;;;;;';;'''''''''''''''''''''''''''''''''''#+''''';;;;;`           `'''';##'''''';;;;;;;;;;;;;;;;;'##''';;#    ###''#                                                      
                ###+;;;+##;;;;;;;;#;;'''''''''''''''''''''''''''''''''''##'''''';;;;,           .''''' ###'''';;;;;;;;;;;;;;;;;'###'';;'+     ####+                                                     
                ;###';;;#+;;;;;;;+;;;;''''''''''''''''''''''''''''''''''##''''''';;;;.         .''''''; ;###+;;;;;;;;;;;;;;;;;;+##+##;;;#,                                                              
                 ####;;;+#;;;;;;;+;;;;;'''''''''''''''''''''''''''''''''##+''''''';;;;.       .,'''''';;`  ###;;;;;;;;;;;;;;;;;#+#` .##+;#                                                              
                 .####;;;#;;;;;;#;;;;;;;;;;'''''''''''''''''''''''''''''###'''''''';;;;..   `..'''''''';;;`  ##+;;;;;;;;;;;;;;##''#    `'##                                                             
                  #####;;++;;;;'+;;;;;;;;;;'''''''''''''''''''''''''''''###'''''''''';;;......'''''''''';;;;` ;##;;;;;;;;;;;;##+''+#                                                                    
                   #####;;#;;;;#;;;;;;;;;;;;''''''''''''''''''''''''''''####''''''''''';;....''''''''''''';;;;  ##;;;;;;;;;;########                                                                    
                    #####;++;;'+;;;;;;;;';;;;''';;''''''''''''''''''''''####+''''''''''''''''''''''''''''''';;;` ##';;;;;;;;######,                                                                     
                    `##+####;;#;;;;;;;;;+;;;;;;;;;;'''''''';''''''''''''#####+'''''''''''''''''''''''''''''''';;: ;#+;;;;;;;#;                                                                          
                     ##;;'##;'+;;;;;;;;+;;;;;;;;;;;;;'''';;;;''''''''';+#######++####+'''''''''''''''''''''''''';; `##;;;;;;#                                                                           
                     ##;;;;;;#;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;'''';;;;#################''''''''''''''''''''''''';;  ##;;;;+#                                                                           
                     `#+;;;;##;;;;;;;;';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###########+++####'''''''''''''''''''''''''';` ##;;'#                                                                            
                      +#;;;+#';;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'#########'';;;;;+##+''''''''''''''''''''''''';, ####'                                                                            
                       ##+###;;;;;;;;'';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#########'';;;;;;;.###''''''''''''''''''''''''';: ##+                                                                             
                        #####;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'#########'';;;;;;;;.###''''''''''''''''''''''''';; +#                                                                             
                         `###;;;;;;;'+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##########'';;;;;;;;;,;##''''''''''''''''''''''''';; +#.                                                                           
                           ##;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'##########''';;;;;;;;;`,##''''''''''++++''''''''''''; +#,                                                                          
                           `#+;;;;;'#;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;#####+'####''';;;;;;;;;; .##'''''''#########+'''''''''; +#:                                                                         
                            ##;;;;;#';;;;;;;;+;;;;;;;;;;;;;;;;;;;;;#####''''###'''';;;;;;;;;. ,##'''''#############+''''''';`+#'                                                                        
                             ##;;;+#;;;;;;;;';;;;;;;;;;;;;;;;;;;;;+####'''''+##'''''';;;;;;;:  ###'''+###'''''''######'''''';.##+                                                                       
                              ######;;;;;;;;#;;;;;;;;;;;;;;;;;;;;'###+'''''''##+'''''''';;;; ,#####''###'''''''''''#####''''';+##+                                                                      
                               #####;;;;;;;;#;;;;;;;;;;;;;;;;;;;;###'''''''''###'''''''''';;  .:########''''''''''+## '###'''######                                                                     
                                 ###;;;;;;;'+;;;;;;;;;;;;;;;;;;;###;'''''''''###'''''''''''';;.   .#####'''''''++###    .###'#####+#                                                                    
                                  ,##;;;;;;#;;;;;;;;;;;;;;;;;;;###;''''''''''+###'''''''''''';;;;;   +###''''''###:       .########;#                                                                   
                                   +#+;;;;'#;;;;;;;;;;;;;;;;;;###;''''''''''''###'''''''''''''''';;;:  :###'''#+            ########`#;                                                                 
                                    '##;;'##;;;;;;;;+;;;;;;;;###;'''''''''''''####'''''''''''''''''''';  .#####              ########,+#                                                                
                                     `######;;;;;;;;';;;;;;;+##;'''''+'''''''''####''''''''''''''''''''';  ,##+             `;#########`#+                                                              
                                       `+###+;;;;;;';;;;;;;+##;'''''#''''''''''####+''''''''''''''''''''''' ####'          ##+;#########;,##:                                                           
                                           ##;;;;;;#+;;;;;+#+;'''''#''''''''''''####+'''+#'''''''''''''''######+'#.        # #############`;#+                                                          
                                            ##';;;;##;;;;+#+;'''''#''''+'''''''''#####'''###''''''''''''''#######;;#.      #`##############;'##                                                         
                                             #############+;'''''#''''+'''''''''''######'####'''''''''''''+########.:#    :# ###+   ;#######:###+                                                       
                                              .###: #####+;'''''#+''''+''''''''''''###########+'''''++###############.+   ###:##      ####'##.#+##:                                                     
                                                      ##+;'''''+#''''#''''''''''''''#################################+':  #####        ,###'## #'+#                                                     
                                                     +#+;'''''+#'''''''''+'''''''''''#################  .;############'#` ##            ###`### #;#                                                     
                                                    ##+;''''''#'''''#''''+''''''''''''################      ###########.# :#            ###;#### ##                                                     
                                                   ##+;''''''#'''''+''''''''+''''+'''''###############       ########### # #            ,##+#,### #                                                     
                                                  ##';''''''#''''''#''''#'''+'''''''''''#############'       #########+## # ;            ##+# :###;.                                                    
                                                 ##';''''''#+'''''#'''''+'''#'''''''''''###+#########        ##########`## #`           `###+  ###+                                                     
                                                ##';''''''#+''''''#''''+''''#'''''+''''''##''#######;       `###########,## #:          ;###;  #####                                                    
                                               ##';''''''#+''''''#'''''#''''#'''''#'''''''##''######        ###### :####+###:++         ,###,. `####                                                    
                                              ##';''''''##'''''''+''''''''''#'''''#'''''''##'''#####        #####   #####`####+#.        ## +     ##                                                    
                                             ##;;''''''##'''''''#'''''#'''''#'''''+''''''''#+'''####        ##+     `#####'######        `###     .#                                                    
                                            ##:;''''''##'''''''++'''''+'''''#''''''+'''''''##''''##:        ##,     `#####;######;        ##:     `#                                                    
                                           ##:;''''''+#''''''''#'''''+''''''#''''''#''''''''##'' ##         :#;     ;######`#####;        ##      +.                                                    
                                         `##;;;'''''+#''''''''#+'''''#''''''#''''''#''''''''##',,#'          ##.    #######++' `#`        ##     `                                                      
                                        .##',;''''''#'''''''''#''''''+''''''#''''''#'''''''''#####                  ########`# `#        ##`                                                            
                                        ##+ ;;'''''#+''''''''#+'''''#'''''''#''''''##''''''''####                   .########,;#.      ,##,                                                             
                                        #+  ;;;'''##'''''''''#''''''#'''''''#''''''+#''''''''##'                     ######## #                                                                         
                                        ##  .;;;;##'''''''''##''''''#'''''''#'''''''#'''''''`#                    '  .##+####;#                                                                         
                                        .##  `;;##''''''''''#''''''#''''''''#'''''''#+''''' ##                    :. ### .#####                                                                         
                                         ;###` ##;'''''''''##''''''#''''''''#'''''''##'''' ,#+                     ####+  `#+'#                                                                         
                                          .#####:;'''''''''#'''''''#''''''''#'''''''##''' ,##                       `:       ##                                                                         
                                            ;##+.;''''''''##''''''#+''''''''#'''''''+##+.###                                 #+                                                                         
                                             +#  ;;'''''''#+''''''#'''''''''#''''''''######                                `##                                                                          
                                             +#'  ;;;''''##'''''''#'''''''''#''''''''####.                                                                                                              
                                              ###  `;;'''##''''''+#'''''''''#''''''.+#                                                                                                                  
                                               ####` ,;;+#'''''''#+'''''''''#'''';  #'                                                                                                                  
                                                `####; `##'''''''#''''''''''#'':   ##                                                                                                                   
                                                   ######+:''''''#''''''''''#`   ###                                                                                                                    
                                                      ;###: `'''##''''''', +#######                                                                                                                     
                                                         '###+;####      ,######:                                                                                                                       
                                                           .###############`                                                                                                                            
                                                                  `#####+