// Path: src/main/java/com/kit/api/collection/Filter.java
// public interface Filter<T> {
// 
//     /**
//      * Filter function
//      *
//      * @param acceptable an item that can be filtered
//      * @return true if item should be retained, false otherwise.
//      */
//     boolean accept(T acceptable);
// 
//     static <T> Filter<T> collapse(List<Filter<T>> filters) {
//         return acceptable -> {
//             for (Filter<T> filter : filters) {
//                 if (!filter.accept(acceptable)) {
//                     return false;
//                 }
//             }
//             return true;
//         };
//     }
// 
// }
// 
// Path: src/main/java/com/kit/api/collection/Filter.java
// public interface Filter<T> {
// 
//     /**
//      * Filter function
//      *
//      * @param acceptable an item that can be filtered
//      * @return true if item should be retained, false otherwise.
//      */
//     boolean accept(T acceptable);
// 
//     static <T> Filter<T> collapse(List<Filter<T>> filters) {
//         return acceptable -> {
//             for (Filter<T> filter : filters) {
//                 if (!filter.accept(acceptable)) {
//                     return false;
//                 }
//             }
//             return true;
//         };
//     }
// 
// }


import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.kit.api.collection.Filter;
import com.kit.api.collection.Filter;
import java.util.*;
import static com.google.common.collect.Lists.newArrayList;
package com.kit.api.collection.queries;




/**
 * An abstract base class for queries
 *
 */
public abstract class Query<T> implements Iterable<T> {
    static final Map<String, Query> prepared = new HashMap<String, Query>();
    List<Comparator<T>> orderings = new ArrayList<Comparator<T>>();
// Path: src/main/java/com/kit/api/collection/Filter.java
// public interface Filter<T> {
// 
//     /**
//      * Filter function
//      *
//      * @param acceptable an item that can be filtered
//      * @return true if item should be retained, false otherwise.
//      */
//     boolean accept(T acceptable);
// 
//     static <T> Filter<T> collapse(List<Filter<T>> filters) {
//         return acceptable -> {
//             for (Filter<T> filter : filters) {
//                 if (!filter.accept(acceptable)) {
//                     return false;
//                 }
//             }
//             return true;
//         };
//     }
// 
// }
// 
// Path: src/main/java/com/kit/api/collection/Filter.java
// public interface Filter<T> {
// 
//     /**
//      * Filter function
//      *
//      * @param acceptable an item that can be filtered
//      * @return true if item should be retained, false otherwise.
//      */
//     boolean accept(T acceptable);
// 
//     static <T> Filter<T> collapse(List<Filter<T>> filters) {
//         return acceptable -> {
//             for (Filter<T> filter : filters) {
//                 if (!filter.accept(acceptable)) {
//                     return false;
//                 }
//             }
//             return true;
//         };
//     }
// 
// }


// Path: src/main/java/com/kit/api/collection/queries/Query.java
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.kit.api.collection.Filter;
import com.kit.api.collection.Filter;
import java.util.*;
import static com.google.common.collect.Lists.newArrayList;

package com.kit.api.collection.queries;




/**
 * An abstract base class for queries
 *
 */
public abstract class Query<T> implements Iterable<T> {
    static final Map<String, Query> prepared = new HashMap<String, Query>();
    List<Comparator<T>> orderings = new ArrayList<Comparator<T>>();
    List<Filter<T>> filters = new ArrayList<Filter<T>>();