text: # -*- coding: utf-8 -*-
  
  from benedict.utils import type_util
  
  
  def _get_keylist_for_dict(d, parent_keys, indexes):
      keylist = []
      for key, value in d.items():
          keys = parent_keys + [key]
          keylist += [keys]
          keylist += _get_keylist_for_value(value, keys, indexes)
      return keylist
  
  
  def _get_keylist_for_list(l, parent_keys, indexes):
      keylist = []
      for key, value in enumerate(l):
          keys = list(parent_keys)
          keys[-1] += '[{}]'.format(key)
          keylist += [keys]
          keylist += _get_keylist_for_value(value, keys, indexes)
      return keylist
  
  
  def _get_keylist_for_value(value, parent_keys, indexes):
      if type_util.is_dict(value):
          return _get_keylist_for_dict(value, parent_keys, indexes)
      elif type_util.is_list(value) and indexes:
          return _get_keylist_for_list(value, parent_keys, indexes)
      return []
  
  
  def keylists(d, indexes=False):
      return _get_keylist_for_value(d, [], indexes)
  