Hamas and Israel agree truce