:::       :::     :::     :::::::::  :::::::::: ::::::::: 
:+:       :+:   :+: :+:   :+:    :+: :+:             :+:  
+:+       +:+  +:+   +:+  +:+    +:+ +:+            +:+   
+#+  +:+  +#+ +#++:++#++: +#++:++#:  +#++:++#      +#+    
+#+ +#+#+ +#+ +#+     +#+ +#+    +#+ +#+          +#+     
 #+#+# #+#+#  #+#     #+# #+#    #+# #+#         #+#      
  ###   ###   ###     ### ###    ### ########## ######### 

    :::       :::     :::     :::::::::  :::::::::: ::::::::: 
   :+:       :+:   :+: :+:   :+:    :+: :+:             :+:   
  +:+       +:+  +:+   +:+  +:+    +:+ +:+            +:+     
 +#+  +:+  +#+ +#++:++#++: +#++:++#:  +#++:++#      +#+       
+#+ +#+#+ +#+ +#+     +#+ +#+    +#+ +#+          +#+         
#+#+# #+#+#  #+#     #+# #+#    #+# #+#         #+#           
###   ###   ###     ### ###    ### ########## #########       

'##:::::'##::::'###::::'########::'########:'########:
 ##:'##: ##:::'## ##::: ##.... ##: ##.....::..... ##::
 ##: ##: ##::'##:. ##:: ##:::: ##: ##::::::::::: ##:::
 ##: ##: ##:'##:::. ##: ########:: ######:::::: ##::::
 ##: ##: ##: #########: ##.. ##::: ##...:::::: ##:::::
 ##: ##: ##: ##.... ##: ##::. ##:: ##:::::::: ##::::::
. ###. ###:: ##:::: ##: ##:::. ##: ########: ########:
:...::...:::..:::::..::..:::::..::........::........::

888       888          8888888b.         8888888888P
888   o   888          888   Y88b              d88P  
888  d8b  888          888    888             d88P   
888 d888b 888  8888b.  888   d88P .d88b.     d88P    
888d88888b888     "88b 8888888P" d8P  Y8b   d88P     
88888P Y88888 .d888888 888 T88b  88888888  d88P      
8888P   Y8888 888  888 888  T88b Y8b.     d88P       
888P     Y888 "Y888888 888   T88b "Y8888 d8888888888 

 __      __       __________       __________
/  \    /  \_____ \______   \ ____ \____    /
\   \/\/   /\__  \ |       _// __ \  /     / 
 \        /  / __ \|    |   \  ___/ /     /_ 
  \__/\  /  (____  /____|_  /\___  >_______ \
       \/        \/       \/     \/        \/

oooooo   oooooo     oooo           ooooooooo.              oooooooooooo
 `888.    `888.     .8'            `888   `Y88.           d'""""""d888' 
  `888.   .8888.   .8'    .oooo.    888   .d88'  .ooooo.        .888P   
   `888  .8'`888. .8'    `P  )88b   888ooo88P'  d88' `88b      d888'    
    `888.8'  `888.8'      .oP"888   888`88b.    888ooo888    .888P      
     `888'    `888'      d8(  888   888  `88b.  888    .o   d888'    .P 
      `8'      `8'       `Y888""8o o888o  o888o `Y8bod8P' .8888888888P