::::::::::::::::::::::::::::::::::
::::: :::::
::::: :::::
::::: :::::
::::: :::::
::::: :::::
::::: :::::
::::: :::::
::::: :::::
::::::::::::::::::::::::::::::::::
:::::::::::::::
::::: :::::
:::::
:::::
::::: :::::
::::: ::::: ::::::::::
::::::::::::::: ::::::::::::::::
:::::::::::::::::
::::::::