refactring Differ. now can't pass test. 061483984dd20b379ece2c58f1caf395516dc3e2 version can pass test