class AndArtifactFilter implements ArtifactFilter {
    private Set<ArtifactFilter> filters;

    public AndArtifactFilter() {
        this.filters = new LinkedHashSet<>();
    }

    public AndArtifactFilter(List<ArtifactFilter> filters) {
        this.filters = new LinkedHashSet<>(filters);
    }

    public boolean include(Artifact artifact) {
        boolean include = true;
        for (Iterator<ArtifactFilter> i = filters.iterator(); i.hasNext() && include; ) {
            ArtifactFilter filter = i.next();
            if (!filter.include(artifact)) {
                include = false;
            }
        }
        return include;
    }

    public void add(ArtifactFilter artifactFilter) {
        filters.add(artifactFilter);
    }

    public List<ArtifactFilter> getFilters() {
        return new ArrayList<>(filters);
    }

    @Override
    public int hashCode() {
        int hash = 17;
        hash = hash * 31 + filters.hashCode();
        return hash;
    }

    @Override
    public boolean equals(Object obj) {<FILL_FUNCTION_BODY>}
}

        if (this == obj) {
            return true;
        }

        if (!(obj instanceof AndArtifactFilter)) {
            return false;
        }

        AndArtifactFilter other = (AndArtifactFilter) obj;

        return filters.equals(other.filters);
    
<no_super_class>