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