code: def group_and_order_srv_records(all_records, rng=None):
      
      rng = rng or random
  
      all_records.sort(key=lambda x: x[:2])
  
      for priority, records in itertools.groupby(
              all_records,
              lambda x: x[0]):
  
          records = list(records)
          total_weight = sum(
              weight
              for _, weight, _ in records)
  
          while records:
              if len(records) == 1:
                  yield records[0][-1]
                  break
  
              value = rng.randint(0, total_weight)
              running_weight_sum = 0
              for i, (_, weight, addr) in enumerate(records):
                  running_weight_sum += weight
                  if running_weight_sum >= value:
                      yield addr
                      del records[i]
                      total_weight -= weight
                      break
docs: Order a list of SRV record information (as returned by :func:`lookup_srv`)
      and group and order them as specified by the RFC.
  
      Return an iterable, yielding each ``(hostname, port)`` tuple inside the
      SRV records in the order specified by the RFC. For hosts with the same
      priority, the given `rng` implementation is used (if none is given, the
      :mod:`random` module is used).