code: func (p *PreparedQuery) Explain(args *structs.PreparedQueryExecuteRequest,
  	reply *structs.PreparedQueryExplainResponse) error {
  	if done, err := p.srv.forward("PreparedQuery.Explain", args, args, reply); done {
  		return err
  	}
  	defer metrics.MeasureSince([]string{"prepared-query", "explain"}, time.Now())
  
  	// We have to do this ourselves since we are not doing a blocking RPC.
  	p.srv.setQueryMeta(&reply.QueryMeta)
  	if args.RequireConsistent {
  		if err := p.srv.consistentRead(); err != nil {
  			return err
  		}
  	}
  
  	// Try to locate the query.
  	state := p.srv.fsm.State()
  	_, query, err := state.PreparedQueryResolve(args.QueryIDOrName, args.Agent)
  	if err != nil {
  		return err
  	}
  	if query == nil {
  		return ErrQueryNotFound
  	}
  
  	// Place the query into a list so we can run the standard ACL filter on
  	// it.
  	queries := &structs.IndexedPreparedQueries{
  		Queries: structs.PreparedQueries{query},
  	}
  	if err := p.srv.filterACL(args.Token, queries); err != nil {
  		return err
  	}
  
  	// If the query was filtered out, return an error.
  	if len(queries.Queries) == 0 {
  		p.srv.logger.Printf("[WARN] consul.prepared_query: Explain on prepared query '%s' denied due to ACLs", query.ID)
  		return acl.ErrPermissionDenied
  	}
  
  	reply.Query = *(queries.Queries[0])
  	return nil
  }
docs: // Explain resolves a prepared query and returns the (possibly rendered template)
  // to the caller. This is useful for letting operators figure out which query is
  // picking up a given name. We can also add additional info about how the query
  // will be executed here.