code: def _process_cascaded_event_contents(records, additional_events=None):
      
      changed_events = additional_events or set()
      changed_contributions = set()
      changed_subcontributions = set()
  
      session_records = {rec.session_id for rec in records if rec.type == EntryType.session}
      contribution_records = {rec.contrib_id for rec in records if rec.type == EntryType.contribution}
      subcontribution_records = {rec.subcontrib_id for rec in records if rec.type == EntryType.subcontribution}
      event_records = {rec.event_id for rec in records if rec.type == EntryType.event}
  
      if event_records:
          changed_events.update(Event.find(Event.id.in_(event_records)))
  
      for event in changed_events:
          yield event
  
      # Sessions are added (explicitly changed only, since they don't need to be sent anywhere)
      if session_records:
          changed_contributions.update(Contribution
                                       .find(Contribution.session_id.in_(session_records), ~Contribution.is_deleted))
  
      # Contributions are added (implictly + explicitly changed)
      changed_event_ids = {ev.id for ev in changed_events}
  
      condition = Contribution.event_id.in_(changed_event_ids) & ~Contribution.is_deleted
      if contribution_records:
          condition = db.or_(condition, Contribution.id.in_(contribution_records))
      contrib_query = Contribution.find(condition).options(joinedload('subcontributions'))
  
      for contribution in contrib_query:
          yield contribution
          changed_subcontributions.update(contribution.subcontributions)
  
      # Same for subcontributions
      if subcontribution_records:
          changed_subcontributions.update(SubContribution.find(SubContribution.id.in_(subcontribution_records)))
      for subcontrib in changed_subcontributions:
          yield subcontrib
docs: Flatten a series of records into its most basic elements (subcontribution level).
  
      Yields results.
  
      :param records: queue records to process
      :param additional_events: events whose content will be included in addition to those
                                found in records