add tilde versions
implement ^x.y.z parsing