public class LLSC {
    ObjPointer p;
    public LLSC(Object x) {
        p.obj = x;
        p.version = 0;
    }
    public synchronized void load_linked(ObjPointer local) {
        local.obj = p.obj;
        local.version = p.version;
    }
    public synchronized boolean
    store_conditional(ObjPointer local, Object newObj) {
        if ((p.obj == local.obj) && (p.version == local.version)) {
            p.obj = newObj;
            p.version++;
            return true;
        }
        return false;
    }
}