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