######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
#####################################################################################################@################################################
###################################################+`:W#############################################@:;W##############################################
##########################################M#@######x;x,z#############################################n:,x#############################################
#########################################z` ,n######;@M:;W############################################,z`n############################################
########################################M,*   *@####iW#@+.M###########################################+n*`############################################
########################################;xi    :W###iM###n.###########################################n#W  ###########################################
#######################################@,#;     .n##*M##### i@########################################n+#,  +#########################################
#######################################n*#i      `W#*M####:  ;W########################################n#i   ;@#######################################
##########################################z      .##*M####,   `n######################################:@#i    i#######################################
#######################################z##@`     ;##+x####,     *####################################xi##;     #######################################
#######################################z+##+     i##+x####:      ;W#@M####################x:x#######W:W##.     ,######################################
#######################################z*###:    :##*n####:      .@#W`iM#################+. ,;M###@+:M##x       M#####################################
#####################################Mi,x###@:   `##+z####,      ,@##`z;*@#############M:iW zz,,::;#@###:       ######################################
##################################W+;,z@#@W##@+`  #xiz####:    `: ,xz,x+i.z###########+.z##,`M#@@@######        +#####################################
##################################n;M####M.#W##@z*i;`#####:  `iWn   i@; `+i:n#######x::W###M.`#########         z#####################################
###################################;M####W   .,:i;.  +####:,#@##+ .n##:   in:iM###@*,x:i@###W: ,#@####.         W#####################################
####################################n####W           *####Mx####*i@###;    ##n,;Mz:#@#. ,zM@#@*  M####`        .######################################
###################################zn####W           i####*`####*`W###;    *###z`;@###:          x####.        *######################################
###################################zz####W           i####;`####+ x###;    i###W`*####:          n####,       `W######################################
###################################z#####W     ,.    i####: ##### x###;    ;###M ,####;          n####:       ########################################
###################################z+####@  `ixx     *####i ####z x###;    ,###W ,####;          z####;     `#########################################
###################################z+####@:z@##z     +##@z: @###z n###;    .###W .####;     `#:  #####i     ,#########################################
###################################z+###ni######     xW*.   @#### z###;    .###@ `####;    ,M@   *####*     ,#########################################
###################################*zW+.  @####+     ,`     @#### n###i    .####` @###:   *@#W   +####+     .#########################################
###################################.:     @####+   ,#:      @###z n###i    .####,;####; .n###W   +####+      @########################################
###################################M:     @##### iM##W      W#### n###*    .####,,x@##x*#z###@   +####*      @########################################
####################################@:    @####MW#####;     M#### z###*    `####.  `ix@i i####   *####*      W########################################
#####################################@;   @###x+######n     x#### n###*    `####.     `  ;####`  *####*      W########################################
#######################################*  @@z:  #######`    n#### z###+     @###,        :####.  *####*      M########################################
########################################i,z`    .######;    n###+ z###+     @###,        :####.  i####*      n########################################
########################################:`       x#####z    n####`@####     @###,     `:.,####,  i####*      z########################################
########################################n.       i#####W    n#M;  :M##+     @###,     :##i####:  i####+      #########################################
#########################################W:      .######.   z+`     :xn     M##W:     .##;####:  *#####      #########################################
#################################@########@*      W#####:   `         :+,   M#n`  :#nn;:W;####x  *####z      #########################################
################################x.x#########z`  `.z#####i               ,;` M+  .n#####x::###x.  *####z      +########################################
################################; `##########M,:Mn*#####*                 ;#n  ,MxM@####M.#@*    i####n      #########################################
###############################@:   :@########@@#W;#####+            .#n.  `; .+`   .+###M@:     ;####M      ##W@#####################################
###############################M:    .x###########,#####+     .    `*W##@#`   .       x##W,      :####W      #@::W####################################
###############################x;     `n##########:@####+     *n. ;M######Wi          z#n,`       i##@,     `,:* .x###################################
###############################Mi      +##########:@####i     :#@M##########Mi        ix`;M*;,``  .##M  .znM@##x  `n##################################
###############################Wi.     ###########.#####:     ,###############Mi      `` ;#####W, +###;`z######x   `x#################################
################################:;     ##########n*#####.     `#################M:    ;  i#######W#############x    `x################################
################################i#     *#########,M####W      ,##################@+` z#n`i#####################W     `W###############################
################################zz,    i#########i#####*      :####################M####n*#############@#######M      M###############################
################################@;M`   :#######M,@####M       ;#########################W+#####@:.####x`.M#####M      W###############################
#################################+xn`  `W#####W:M#####:       +#########################W*##WMn;   @##;  ,;iii*z      W###############################
#################################@;@x.  +####n,M#####*        x#########################@i*`      ,###+        `      W###############################
##################################Wi@W; `x@xi:W#####+        .##########################W`        W#####              W###############################
###################################M:M#xi,,;z#####M:         +##########################@.       `#####x              M###############################
####################################x.z#########Wi`         `W###########################W,      .#####W              M###############################
#####################################M..+M####Mi`           +#############################@i     ,######`    x*       W###############################
######################################W:  `..`             :@###############################*    :######,    #Mnnnz#;`@###############################
########################################+                 :@#################################+ `#i######;     x######z@###############################
#########################################x:              ;@###################################+x+###@@@@z     n#######################################
###########################################z.          ;x######################################W`,``          ########################################
#############################################ni,`   .in#########################################z`            i#######################################
#################################################@WM#############################################n`           :#######################################
##################################################################################################n`          .#######################################
###################################################################################################M.          z######################################
####################################################################################################@i::;;;;*++*######################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################