code: def _cache_offsets(self, up_to_index=None, verbose=True):
          if not up_to_index:
              if verbose:
                  self.print("Caching event file offsets, this may take a bit.")
              self.blob_file.seek(0, 0)
              self.event_offsets = []
              if not self.raw_header:
                  self.event_offsets.append(0)
          else:
              self.blob_file.seek(self.event_offsets[-1], 0)
          for line in iter(self.blob_file.readline, ''):
              line = try_decode_string(line)
              if line.startswith('end_event:'):
                  self._record_offset()
                  if len(self.event_offsets) % 100 == 0:
                      if verbose:
                          print('.', end='')
                      sys.stdout.flush()
              if up_to_index and len(self.event_offsets) >= up_to_index + 1:
                  return
          self.event_offsets.pop()
          if not up_to_index:
              self.whole_file_cached = True
          self.print("\n{0} events indexed.".format(len(self.event_offsets)))