def _collapse_addresses_recursive(addresses):
 while True:
  last_addr = None
  ret_array = []
  optimized = False
  for cur_addr in addresses:
   if (not ret_array):
    last_addr = cur_addr
    ret_array.append(cur_addr)
   elif ((cur_addr.network_address >= last_addr.network_address) and (cur_addr.broadcast_address <= last_addr.broadcast_address)):
    optimized = True
   elif (cur_addr == list(last_addr.supernet().subnets())[1]):
    ret_array[(-1)] = last_addr = last_addr.supernet()
    optimized = True
   else:
    last_addr = cur_addr
    ret_array.append(cur_addr)
  addresses = ret_array
  if (not optimized):
   return addresses

def _collapse_addresses_recursive ( addresses ) : while True : last_addr = None ret_array = [ ] optimized = False for cur_addr in addresses : if ( not ret_array ) : last_addr = cur_addr ret_array . append ( cur_addr ) elif ( ( cur_addr . network_address >= last_addr . network_address ) and ( cur_addr . broadcast_address <= last_addr . broadcast_address ) ) : optimized = True elif ( cur_addr == list ( last_addr . supernet ( ) . subnets ( ) ) [ 1 ] ) : ret_array [ ( - 1 ) ] = last_addr = last_addr . supernet ( ) optimized = True else : last_addr = cur_addr ret_array . append ( cur_addr ) addresses = ret_array if ( not optimized ) : return addresses
loops through the addresses .