+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::::::::::....:::::::::::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::::::::........:::::::::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::::::............:::::::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::::................:::::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::.........##.........:::::::::::::::::::::::::::::++:::::::::::::::::::::::::::.........######.........:::::::::::::::::::::::::::++:::::::::::::::::::::::::.........##########.........:::::::::::::::::::::::::++:::::::::::::::::::::::.........##############.........:::::::::::::::::::::::++:::::::::::::::::::::.........##################.........:::::::::::::::::::::++:::::::::::::::::::.........##########..##########.........:::::::::::::::::::++:::::::::::::::::.........##########......##########.........:::::::::::::::::++:::::::::::::::.........##########..........##########.........:::::::::::::::++:::::::::::::::::.........##########......##########.........:::::::::::::::::++:::::::::::::::::::.........##########..##########.........:::::::::::::::::::++:::::::::::::::::::::.........##################.........:::::::::::::::::::::++:::::::::::::::::::::::.........##############.........:::::::::::::::::::::::++:::::::::::::::::::::::::.........##########.........:::::::::::::::::::::::::++:::::::::::::::::::::::::::.........######.........:::::::::::::::::::::::::::++:::::::::::::::::::::::::::::.........##.........:::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::::................:::::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::::::............:::::::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::::::::........:::::::::::::::::::::::::::::::::::++:::::::::::::::::::::::::::::::::::::....:::::::::::::::::::::::::::::::::::::++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++