use Scalar::Util qw(blessed weaken);