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