SYNTHESIS: A Tool for Automatically Assembling Correct and Distributed Component-Based Systems