class CumulativeScopeArtifactFilter extends AbstractScopeArtifactFilter {

    private Set<String> scopes;

    /**
     * Create a new filter with the specified scopes and their implied scopes enabled.
     *
     * @param scopes The scopes to enable, along with all implied scopes, may be {@code null}.
     */
    public CumulativeScopeArtifactFilter(Collection<String> scopes) {
        this.scopes = new HashSet<>();

        addScopes(scopes);
    }

    /**
     * Creates a new filter that combines the specified filters.
     *
     * @param filters The filters to combine, may be {@code null}.
     */
    public CumulativeScopeArtifactFilter(CumulativeScopeArtifactFilter... filters) {
        this.scopes = new HashSet<>();

        if (filters != null) {
            for (CumulativeScopeArtifactFilter filter : filters) {
                addScopes(filter.getScopes());
            }
        }
    }

    private void addScopes(Collection<String> scopes) {<FILL_FUNCTION_BODY>}

    private void addScope(String scope) {
        this.scopes.add(scope);

        addScopeInternal(scope);
    }

    public Set<String> getScopes() {
        return scopes;
    }

    @Override
    public int hashCode() {
        int hash = 17;

        hash = hash * 31 + scopes.hashCode();

        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

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

        CumulativeScopeArtifactFilter that = (CumulativeScopeArtifactFilter) obj;

        return scopes.equals(that.scopes);
    }
}

        if (scopes != null) {
            for (String scope : scopes) {
                addScope(scope);
            }
        }
    
<methods>public boolean include(org.apache.maven.artifact.Artifact) <variables>private boolean compileScope,private boolean providedScope,private boolean runtimeScope,private boolean systemScope,private boolean testScope