*****************************************************************************************************************++**********************************************************************************+***+*****************+**********+******************************************+***+*****************+**********+******************************************+***+*****************+**********+******************************************+***+*****************+**********+***************************************************************************************************+**********************************************************************************+***************++**************+***+********+*******************************+**************************+***************************************************************************************************************************+***********++****************************+***********+*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+***++**********************************************************+****+******+***+********+**************************************************************************************************************+*******++***********************/**********************************************************************************+*******+*******************************************************************************************************+*******+************************/**************************************************************************+***+********+***************+******************+***+***++****************/**********************************************************************************************+**********************************+***************++**************+***+********+*******************************+**+***+****************+***********+*******+**********************++**+***********************+********************************************************************************************************************************************************************************************************/******************************************************************************+***+*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+***********************************+*******************************************************************+*********+***************+*******************++************************************+**********************************************+**********************************************************************/****************************************+**********************************/********************************+******************************************************************************+***************************************+**********************+******************************************************************************************************+********+******************************************************+*******************+***+*********************************************************************************************************************+***************************************+**********************+******************************************************+*******++****************************************+*******************************+*******************************************+***********************************************************************+*******************************************+***********************************************************************************************************************************************************************************************************************************************+*************+**************************+*******+***********+********************************************+******************************************************************+***************+**********************+*******************************************************/******************************************/***/************+*************+*******++****************************+**************************************************************************************************************************+**************+**********************+***************+***+*******************************+*************************************+***************************************+*************************+*************************************************************************************************************+**************+********************************************************************************************+*********+*********************************************************************************************************************************************************+***************************+***********************+