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