'Provides the parsed list of IntroductionPoint for the unencrypted content.'

@staticmethod
def _parse_introduction_points(content):

    introduction_points = []
    content_io = io.BytesIO(content)
    while True:
        content = ''.join(_read_until_keywords('introduction-point', content_io, ignore_first=True))
        if (not content):
            break
        attr = dict(INTRODUCTION_POINTS_ATTR)
        entries = _get_descriptor_components(content, False)
        for (keyword, values) in list(entries.items()):
            (value, block_type, block_contents) = values[0]
            if ((keyword in SINGLE_INTRODUCTION_POINT_FIELDS) and (len(values) > 1)):
                raise ValueError(("'%s'    can    only    appear    once    in    an    introduction-point    block,    but    appeared    %i    times" % (keyword, len(values))))
            if (keyword == 'introduction-point'):
                attr['identifier'] = value
            elif (keyword == 'ip-address'):
                if (not stem.util.connection.is_valid_ipv4_address(value)):
                    raise ValueError(("'%s'    is    an    invalid    IPv4    address" % value))
                attr['address'] = value
            elif (keyword == 'onion-port'):
                if (not stem.util.connection.is_valid_port(value)):
                    raise ValueError(("'%s'    is    an    invalid    port" % value))
                attr['port'] = int(value)
            elif (keyword == 'onion-key'):
                attr['onion_key'] = block_contents
            elif (keyword == 'service-key'):
                attr['service_key'] = block_contents
            elif (keyword == 'intro-authentication'):
                auth_entries = []
                for (auth_value, _, _) in values:
                    if ('    ' not in auth_value):
                        raise ValueError(("We    expected    'intro-authentication    [auth_type]    [auth_data]',    but    had    '%s'" % auth_value))
                    (auth_type, auth_data) = auth_value.split('    ')[:2]
                    auth_entries.append((auth_type, auth_data))
        introduction_points.append(IntroductionPoint(**attr))
    return introduction_points
