code: func (r *Registry) Update(obj mo.Reference, changes []types.PropertyChange) {
  	for i := range changes {
  		if changes[i].Op == "" {
  			changes[i].Op = types.PropertyChangeOpAssign
  		}
  		if changes[i].Val != nil {
  			rval := reflect.ValueOf(changes[i].Val)
  			changes[i].Val = wrapValue(rval, rval.Type())
  		}
  	}
  
  	val := getManagedObject(obj).Addr().Interface().(mo.Reference)
  
  	mo.ApplyPropertyChange(val, changes)
  
  	r.applyHandlers(func(o RegisterObject) {
  		o.UpdateObject(val, changes)
  	})
  }
docs: // Update dispatches object property changes to RegisterObject handlers,
  // such as any PropertyCollector instances with in-progress WaitForUpdates calls.
  // The changes are also applied to the given object via mo.ApplyPropertyChange,
  // so there is no need to set object fields directly.