def METHOD_NAME(cls, authority, audience, updated, fields=None) -> Select:
    """Generate a query which can then be executed to find annotations."""
    if fields is None:
        query = sa.select(Annotation)
    else:
        query = sa.select(list(cls._field_names_to_columns(fields))).select_from(
            Annotation
        )
    # Updated
    query = query.where(date_match(Annotation.updated, updated))
    # Shared
    query = query.where(Annotation.shared.is_(True))
    # Deleted
    query = query.where(Annotation.deleted.is_(False))
    # Audience
    query = query.join(Group, Annotation.groupid == Group.pubid).where(
        Group.id.in_(cls._audience_groups_subquery(authority, audience))
    )
    # NIPSA
    query = query.join(
        cls._AUTHOR,
        cls._AUTHOR.username
        == sa.func.split_part(sa.func.split_part(Annotation.userid, "@", 1), ":", 2)
        and cls._AUTHOR.authority == authority,
    ).where(cls._AUTHOR.nipsa.is_(False))
    # Moderated
    query = query.outerjoin(AnnotationModeration).where(
        AnnotationModeration.id.is_(None)
    )
    return query