code: func (c *BoundContract) Call(opts *CallOpts, out *Interfaces, method string, args *Interfaces) error {
  	if len(out.objects) == 1 {
  		result := out.objects[0]
  		if err := c.contract.Call(&opts.opts, result, method, args.objects...); err != nil {
  			return err
  		}
  		out.objects[0] = result
  	} else {
  		results := make([]interface{}, len(out.objects))
  		copy(results, out.objects)
  		if err := c.contract.Call(&opts.opts, &results, method, args.objects...); err != nil {
  			return err
  		}
  		copy(out.objects, results)
  	}
  	return nil
  }
docs: // Call invokes the (constant) contract method with params as input values and
  // sets the output to result.