docs: def run_func(self, func, load):
          '''
          Wrapper for running functions executed with AES encryption
  
          :param function func: The function to run
          :return: The result of the master function that was called
          '''
          # Don't honor private functions
          if func.startswith('__'):
              # TODO: return some error? Seems odd to return {}
              return {}, {'fun': 'send'}
          # Run the func
          if hasattr(self, func):
              try:
                  start = time.time()
                  ret = getattr(self, func)(load)
                  log.trace(
                      'Master function call %s took %s seconds',
                      func, time.time() - start
                  )
              except Exception:
                  ret = ''
                  log.error('Error in function %s:\n', func, exc_info=True)
          else:
              log.error(
                  'Received function %s which is unavailable on the master, '
                  'returning False', func
              )
              return False, {'fun': 'send'}
          # Don't encrypt the return value for the _return func
          # (we don't care about the return value, so why encrypt it?)
          if func == '_return':
              return ret, {'fun': 'send'}
          if func == '_pillar' and 'id' in load:
              if load.get('ver') != '2' and self.opts['pillar_version'] == 1:
                  # Authorized to return old pillar proto
                  return ret, {'fun': 'send'}
              return ret, {'fun': 'send_private', 'key': 'pillar', 'tgt': load['id']}
          # Encrypt the return
          return ret, {'fun': 'send'}