hash recursive merge