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