updated md5 function